2025-12-12T09:00:03.390 [DEBUG] [Thread-65820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:05.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:05.984 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:10.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:00:10.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:00:10.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:00:11.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 0, 3), 17.32, 29.85, 0.0, 25.74, 12.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:00:11.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:00:03
2025-12-12T09:00:11.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:00:11.520 [DEBUG] [Thread-65821] [transport.py] [_log()] starting thread (client mode): 0xf57a92d0
2025-12-12T09:00:11.520 [DEBUG] [Thread-65821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:00:11.541 [DEBUG] [Thread-65821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:00:11.541 [INFO] [Thread-65821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:00:11.544 [DEBUG] [Thread-65821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:00:11.544 [DEBUG] [Thread-65821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] client lang: <none>
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] server lang: <none>
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] kex follows: False
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:00:11.545 [DEBUG] [Thread-65821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:00:11.546 [DEBUG] [Thread-65821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:00:11.546 [DEBUG] [Thread-65821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:00:11.546 [DEBUG] [Thread-65821] [transport.py] [_log()] Compression: none
2025-12-12T09:00:11.546 [DEBUG] [Thread-65821] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:00:11.566 [DEBUG] [Thread-65821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:00:11.566 [DEBUG] [Thread-65821] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:00:11.567 [DEBUG] [Thread-65821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:00:11.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:00:11.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:00:11.569 [DEBUG] [Thread-65821] [transport.py] [_log()] userauth is OK
2025-12-12T09:00:11.569 [DEBUG] [Thread-65821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:00:11.570 [DEBUG] [Thread-65821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:00:11.570 [DEBUG] [Thread-65821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:00:11.570 [DEBUG] [Thread-65821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:00:11.590 [INFO] [Thread-65821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:00:11.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:00:12.411 [DEBUG] [Thread-65823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:13.519 [DEBUG] [Thread-65821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:00:13.519 [DEBUG] [Thread-65821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:00:13.519 [DEBUG] [Thread-65821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:00:13.560 [DEBUG] [Thread-65821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:00:13.561 [DEBUG] [Thread-65821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:00:13.564 [DEBUG] [Thread-65821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:00:13.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:00:13.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:00:13.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:00:13.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:00:13.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:00:13.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:00:13.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:00:13.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:00:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:00:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.291418 -999.00  +12.50  27.32     35   -2.10 1 2 1 1 1   888    0 20.33 232.06 ----- 27.3 27.3 332.9 36.3 14.9 -11.0 14.8 -11.4 14.5 -10.6 14.8 -10.7
2025-12-12T09:00:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:00:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:00:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.291418
2025-12-12T09:00:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:00:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:00:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:00:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:00:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:00:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:00:03', tmtdew=17.32, humidity=29.85, cloud=0.0, wind=25.74, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T06:59:38.515', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:00:13.591 [DEBUG] [Thread-65821] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:00:13.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:00:13.686 [DEBUG] [Thread-65825] [transport.py] [_log()] starting thread (client mode): 0xf5724d00
2025-12-12T09:00:13.686 [DEBUG] [Thread-65825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:00:13.701 [DEBUG] [Thread-65825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:00:13.702 [INFO] [Thread-65825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:00:13.709 [DEBUG] [Thread-65825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:00:13.709 [DEBUG] [Thread-65825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:00:13.709 [DEBUG] [Thread-65825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:00:13.709 [DEBUG] [Thread-65825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] client lang: <none>
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] server lang: <none>
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] kex follows: False
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] Compression: none
2025-12-12T09:00:13.710 [DEBUG] [Thread-65825] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:00:13.770 [DEBUG] [Thread-65825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:00:13.771 [DEBUG] [Thread-65825] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:00:13.771 [DEBUG] [Thread-65825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:00:13.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:00:13.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:00:13.826 [DEBUG] [Thread-65825] [transport.py] [_log()] userauth is OK
2025-12-12T09:00:13.826 [DEBUG] [Thread-65825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:00:13.827 [DEBUG] [Thread-65825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:00:13.827 [DEBUG] [Thread-65825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:00:13.827 [DEBUG] [Thread-65825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:00:13.846 [INFO] [Thread-65825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:00:13.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:00:13.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:00:14.682 [DEBUG] [Thread-65825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:00:14.683 [DEBUG] [Thread-65825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:00:14.730 [DEBUG] [Thread-65825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:00:14.731 [DEBUG] [Thread-65825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:00:14.740 [DEBUG] [Thread-65825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:00:14.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:00:14.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:00:14.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:00:14.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:00:14.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:00:14.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:00:14.782 [DEBUG] [Thread-65825] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:00:16.424 [DEBUG] [Thread-65827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:21.460 [DEBUG] [Thread-65828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:30.484 [DEBUG] [Thread-65829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:30.989 [DEBUG] [Thread-65830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:31.491 [DEBUG] [Thread-65831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:39.510 [DEBUG] [Thread-65832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:00:44.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:00:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:00:45.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 0, 35), 17.0, 30.4, 0.0, 34.57, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:00:45.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:00:35
2025-12-12T09:00:45.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:00:45.720 [DEBUG] [Thread-65833] [transport.py] [_log()] starting thread (client mode): 0xf8154520
2025-12-12T09:00:45.720 [DEBUG] [Thread-65833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:00:45.740 [DEBUG] [Thread-65833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:00:45.740 [INFO] [Thread-65833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:00:45.743 [DEBUG] [Thread-65833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] client lang: <none>
2025-12-12T09:00:45.744 [DEBUG] [Thread-65833] [transport.py] [_log()] server lang: <none>
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] kex follows: False
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] Compression: none
2025-12-12T09:00:45.745 [DEBUG] [Thread-65833] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:00:45.765 [DEBUG] [Thread-65833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:00:45.766 [DEBUG] [Thread-65833] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:00:45.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:00:45.768 [DEBUG] [Thread-65833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:00:45.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:00:45.770 [DEBUG] [Thread-65833] [transport.py] [_log()] userauth is OK
2025-12-12T09:00:45.770 [DEBUG] [Thread-65833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:00:45.770 [DEBUG] [Thread-65833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:00:45.770 [DEBUG] [Thread-65833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:00:45.771 [DEBUG] [Thread-65833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:00:45.800 [INFO] [Thread-65833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:00:45.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:00:46.370 [DEBUG] [Thread-65833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:00:46.370 [DEBUG] [Thread-65833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:00:46.371 [DEBUG] [Thread-65833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:00:46.419 [DEBUG] [Thread-65833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:00:46.419 [DEBUG] [Thread-65833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:00:46.423 [DEBUG] [Thread-65833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:00:46.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:00:46.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:00:46.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:00:46.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:00:46.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:00:46.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:00:46.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:00:46.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:00:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:00:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.291707 -999.00  +12.60  27.62     36   -2.00 1 2 1 1 1   888    0 20.32 231.41 ----- 28.3 27.6 326.4 32.7 15.0 -11.2 14.8 -11.4 14.6 -10.4 14.9 -10.6
2025-12-12T09:00:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:00:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:00:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.291707
2025-12-12T09:00:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:00:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:00:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:00:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:00:46.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:00:46.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:00:35', tmtdew=17.0, humidity=30.4, cloud=0.0, wind=34.57, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:00:03.485', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:00:46.450 [DEBUG] [Thread-65833] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:00:46.524 [DEBUG] [Thread-65836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:46.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:00:46.544 [DEBUG] [Thread-65837] [transport.py] [_log()] starting thread (client mode): 0xf578bfa0
2025-12-12T09:00:46.544 [DEBUG] [Thread-65837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:00:46.559 [DEBUG] [Thread-65837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:00:46.559 [INFO] [Thread-65837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:00:46.567 [DEBUG] [Thread-65837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:00:46.567 [DEBUG] [Thread-65837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] client lang: <none>
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] server lang: <none>
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] kex follows: False
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] Compression: none
2025-12-12T09:00:46.568 [DEBUG] [Thread-65837] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:00:46.626 [DEBUG] [Thread-65837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:00:46.627 [DEBUG] [Thread-65837] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:00:46.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:00:46.628 [DEBUG] [Thread-65837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:00:46.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:00:46.683 [DEBUG] [Thread-65837] [transport.py] [_log()] userauth is OK
2025-12-12T09:00:46.684 [DEBUG] [Thread-65837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:00:46.684 [DEBUG] [Thread-65837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:00:46.684 [DEBUG] [Thread-65837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:00:46.684 [DEBUG] [Thread-65837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:00:46.702 [INFO] [Thread-65837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:00:46.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:00:46.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:00:47.565 [DEBUG] [Thread-65837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:00:47.566 [DEBUG] [Thread-65837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:00:47.616 [DEBUG] [Thread-65837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:00:47.617 [DEBUG] [Thread-65837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:00:47.626 [DEBUG] [Thread-65837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:00:47.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:00:47.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:00:47.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:00:47.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:00:47.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:00:47.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:00:47.661 [DEBUG] [Thread-65837] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:00:48.541 [DEBUG] [Thread-65839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:00:57.565 [DEBUG] [Thread-65840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:01.585 [DEBUG] [Thread-65841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:06.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:06.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:06.604 [DEBUG] [Thread-65842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:15.625 [DEBUG] [Thread-65843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:16.629 [DEBUG] [Thread-65844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:01:17.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:01:17.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:01:18.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 1, 7), 16.94, 30.54, 0.0, 35.99, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:01:18.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:01:07
2025-12-12T09:01:18.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:01:18.674 [DEBUG] [Thread-65845] [transport.py] [_log()] starting thread (client mode): 0xf572d570
2025-12-12T09:01:18.674 [DEBUG] [Thread-65845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:01:18.693 [DEBUG] [Thread-65845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:01:18.693 [INFO] [Thread-65845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:01:18.696 [DEBUG] [Thread-65845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:01:18.696 [DEBUG] [Thread-65845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:01:18.696 [DEBUG] [Thread-65845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:01:18.696 [DEBUG] [Thread-65845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] client lang: <none>
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] server lang: <none>
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] kex follows: False
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] Compression: none
2025-12-12T09:01:18.697 [DEBUG] [Thread-65845] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:01:18.711 [DEBUG] [Thread-65845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:01:18.711 [DEBUG] [Thread-65845] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:01:18.711 [DEBUG] [Thread-65845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:01:18.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:01:18.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:01:18.712 [DEBUG] [Thread-65845] [transport.py] [_log()] userauth is OK
2025-12-12T09:01:18.712 [DEBUG] [Thread-65845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:01:18.712 [DEBUG] [Thread-65845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:01:18.712 [DEBUG] [Thread-65845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:01:18.712 [DEBUG] [Thread-65845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:01:18.728 [INFO] [Thread-65845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:01:18.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:01:19.365 [DEBUG] [Thread-65845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:01:19.365 [DEBUG] [Thread-65845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:01:19.365 [DEBUG] [Thread-65845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:01:19.407 [DEBUG] [Thread-65845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:01:19.407 [DEBUG] [Thread-65845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:01:19.409 [DEBUG] [Thread-65845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:01:19.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:01:19.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:01:19.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:01:19.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:01:19.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:01:19.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:01:19.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:01:19.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.292402 -999.00  +12.80  23.44     36   -1.80 1 2 1 1 1   888    0 20.59 225.46 ----- 18.1 23.4 333.4 34.1 15.1 -11.3 14.8 -11.1 14.7 -10.6 15.0 -10.8
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.292402
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:01:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:01:07', tmtdew=16.94, humidity=30.54, cloud=0.0, wind=35.99, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:01:03.533', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:01:19.429 [DEBUG] [Thread-65845] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:01:19.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:01:19.515 [DEBUG] [Thread-65848] [transport.py] [_log()] starting thread (client mode): 0xf57a94e0
2025-12-12T09:01:19.515 [DEBUG] [Thread-65848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:01:19.529 [DEBUG] [Thread-65848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:01:19.529 [INFO] [Thread-65848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] client lang: <none>
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] server lang: <none>
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] kex follows: False
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:01:19.536 [DEBUG] [Thread-65848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:01:19.537 [DEBUG] [Thread-65848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:01:19.537 [DEBUG] [Thread-65848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:01:19.537 [DEBUG] [Thread-65848] [transport.py] [_log()] Compression: none
2025-12-12T09:01:19.537 [DEBUG] [Thread-65848] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:01:19.592 [DEBUG] [Thread-65848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:01:19.592 [DEBUG] [Thread-65848] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:01:19.593 [DEBUG] [Thread-65848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:01:19.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:01:19.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:01:19.650 [DEBUG] [Thread-65848] [transport.py] [_log()] userauth is OK
2025-12-12T09:01:19.650 [DEBUG] [Thread-65848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:01:19.650 [DEBUG] [Thread-65848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:01:19.650 [DEBUG] [Thread-65848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:01:19.650 [DEBUG] [Thread-65848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:01:19.664 [INFO] [Thread-65848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:01:19.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:01:19.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:01:20.520 [DEBUG] [Thread-65848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:01:20.520 [DEBUG] [Thread-65848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:01:20.568 [DEBUG] [Thread-65848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:01:20.568 [DEBUG] [Thread-65848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:01:20.576 [DEBUG] [Thread-65848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:01:20.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:01:20.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:01:20.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:01:20.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:01:20.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:01:20.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:01:20.608 [DEBUG] [Thread-65848] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:01:24.649 [DEBUG] [Thread-65850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:31.045 [DEBUG] [Thread-65851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:31.666 [DEBUG] [Thread-65852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:33.682 [DEBUG] [Thread-65853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:42.703 [DEBUG] [Thread-65854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:46.717 [DEBUG] [Thread-65855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:01:50.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:01:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:01:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 1, 39), 16.92, 30.47, 0.0, 23.12, 12.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:01:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:01:39
2025-12-12T09:01:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:01:51.594 [DEBUG] [Thread-65856] [transport.py] [_log()] starting thread (client mode): 0xf57ab7c0
2025-12-12T09:01:51.594 [DEBUG] [Thread-65856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:01:51.614 [DEBUG] [Thread-65856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:01:51.614 [INFO] [Thread-65856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] client lang: <none>
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] server lang: <none>
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] kex follows: False
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] Compression: none
2025-12-12T09:01:51.617 [DEBUG] [Thread-65856] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:01:51.636 [DEBUG] [Thread-65856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:01:51.637 [DEBUG] [Thread-65856] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:01:51.637 [DEBUG] [Thread-65856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:01:51.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:01:51.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:01:51.639 [DEBUG] [Thread-65856] [transport.py] [_log()] userauth is OK
2025-12-12T09:01:51.639 [DEBUG] [Thread-65856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:01:51.640 [DEBUG] [Thread-65856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:01:51.640 [DEBUG] [Thread-65856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:01:51.640 [DEBUG] [Thread-65856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:01:51.662 [INFO] [Thread-65856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:01:51.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:01:51.734 [DEBUG] [Thread-65858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:01:52.270 [DEBUG] [Thread-65856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:01:52.271 [DEBUG] [Thread-65856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:01:52.271 [DEBUG] [Thread-65856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:01:52.311 [DEBUG] [Thread-65856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:01:52.312 [DEBUG] [Thread-65856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:01:52.314 [DEBUG] [Thread-65856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:01:52.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:01:52.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:01:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:01:52.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:01:52.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:01:52.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:01:52.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:01:52.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:01:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:01:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.292807 -999.00  +12.90  24.08     35   -1.80 1 2 1 1 1   888    0 19.97 212.61 ----- 24.1 24.1 340.0 31.9 15.1 -11.2 14.9 -11.5 14.7 -10.4 15.1 -10.6
2025-12-12T09:01:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:01:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:01:52.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.292807
2025-12-12T09:01:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:01:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:01:52.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:01:52.334 [DEBUG] [Thread-65856] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:01:52.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:01:52.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:01:52.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:01:39', tmtdew=16.92, humidity=30.47, cloud=0.0, wind=23.12, temperature=12.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:01:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:01:52.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:01:52.431 [DEBUG] [Thread-65860] [transport.py] [_log()] starting thread (client mode): 0xf57a83d0
2025-12-12T09:01:52.432 [DEBUG] [Thread-65860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:01:52.446 [DEBUG] [Thread-65860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:01:52.446 [INFO] [Thread-65860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:01:52.454 [DEBUG] [Thread-65860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] client lang: <none>
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] server lang: <none>
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] kex follows: False
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:01:52.455 [DEBUG] [Thread-65860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:01:52.456 [DEBUG] [Thread-65860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:01:52.456 [DEBUG] [Thread-65860] [transport.py] [_log()] Compression: none
2025-12-12T09:01:52.456 [DEBUG] [Thread-65860] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:01:52.512 [DEBUG] [Thread-65860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:01:52.513 [DEBUG] [Thread-65860] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:01:52.513 [DEBUG] [Thread-65860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:01:52.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:01:52.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:01:52.570 [DEBUG] [Thread-65860] [transport.py] [_log()] userauth is OK
2025-12-12T09:01:52.570 [DEBUG] [Thread-65860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:01:52.571 [DEBUG] [Thread-65860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:01:52.571 [DEBUG] [Thread-65860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:01:52.571 [DEBUG] [Thread-65860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:01:52.593 [INFO] [Thread-65860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:01:52.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:01:52.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:01:53.507 [DEBUG] [Thread-65860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:01:53.507 [DEBUG] [Thread-65860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:01:53.555 [DEBUG] [Thread-65860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:01:53.556 [DEBUG] [Thread-65860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:01:53.565 [DEBUG] [Thread-65860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:01:53.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:01:53.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:01:53.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:01:53.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:01:53.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:01:53.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:01:53.602 [DEBUG] [Thread-65860] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:02:00.754 [DEBUG] [Thread-65862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:01.760 [DEBUG] [Thread-65863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:06.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:06.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:09.790 [DEBUG] [Thread-65864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:16.807 [DEBUG] [Thread-65865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:18.823 [DEBUG] [Thread-65866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:23.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:02:23.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:02:23.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:02:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 2, 11), 16.93, 30.47, 0.0, 25.85, 13.03, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:02:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:02:11
2025-12-12T09:02:24.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:02:24.581 [DEBUG] [Thread-65867] [transport.py] [_log()] starting thread (client mode): 0xf57bd870
2025-12-12T09:02:24.581 [DEBUG] [Thread-65867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:02:24.601 [DEBUG] [Thread-65867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:02:24.601 [INFO] [Thread-65867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:24.604 [DEBUG] [Thread-65867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] client lang: <none>
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] server lang: <none>
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] kex follows: False
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] Compression: none
2025-12-12T09:02:24.605 [DEBUG] [Thread-65867] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:02:24.622 [DEBUG] [Thread-65867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:02:24.623 [DEBUG] [Thread-65867] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:02:24.623 [DEBUG] [Thread-65867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:02:24.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:02:24.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:02:24.625 [DEBUG] [Thread-65867] [transport.py] [_log()] userauth is OK
2025-12-12T09:02:24.625 [DEBUG] [Thread-65867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:02:24.625 [DEBUG] [Thread-65867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:02:24.625 [DEBUG] [Thread-65867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:02:24.626 [DEBUG] [Thread-65867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:02:24.650 [INFO] [Thread-65867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:02:24.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:02:25.274 [DEBUG] [Thread-65867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:02:25.275 [DEBUG] [Thread-65867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:02:25.275 [DEBUG] [Thread-65867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:02:25.316 [DEBUG] [Thread-65867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:02:25.316 [DEBUG] [Thread-65867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:02:25.320 [DEBUG] [Thread-65867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:02:25.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:02:25.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:02:25.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:02:25.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:02:25.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:02:25.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:02:25.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:02:25.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:02:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:02:25.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.293097 -999.00  +12.90  26.27     35   -1.80 1 2 1 1 1   888    0 20.28 216.43 ----- 27.4 26.3 332.8 37.0 15.2 -11.1 14.9 -11.6 14.8 -10.7 15.2 -10.6
2025-12-12T09:02:25.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:02:25.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:02:25.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.293097
2025-12-12T09:02:25.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:02:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:02:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:02:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:02:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:02:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:02:11', tmtdew=16.93, humidity=30.47, cloud=0.0, wind=25.85, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:02:03.581', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:02:25.347 [DEBUG] [Thread-65867] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:02:25.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:02:25.441 [DEBUG] [Thread-65870] [transport.py] [_log()] starting thread (client mode): 0xf578a9b0
2025-12-12T09:02:25.442 [DEBUG] [Thread-65870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:02:25.456 [DEBUG] [Thread-65870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:02:25.457 [INFO] [Thread-65870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:02:25.464 [DEBUG] [Thread-65870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] client lang: <none>
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] server lang: <none>
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] kex follows: False
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] Compression: none
2025-12-12T09:02:25.465 [DEBUG] [Thread-65870] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:02:25.522 [DEBUG] [Thread-65870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:02:25.523 [DEBUG] [Thread-65870] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:02:25.523 [DEBUG] [Thread-65870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:02:25.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:02:25.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:02:25.578 [DEBUG] [Thread-65870] [transport.py] [_log()] userauth is OK
2025-12-12T09:02:25.579 [DEBUG] [Thread-65870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:02:25.579 [DEBUG] [Thread-65870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:02:25.579 [DEBUG] [Thread-65870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:02:25.579 [DEBUG] [Thread-65870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:02:25.601 [INFO] [Thread-65870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:02:25.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:02:25.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:02:26.457 [DEBUG] [Thread-65870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:02:26.457 [DEBUG] [Thread-65870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:02:26.505 [DEBUG] [Thread-65870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:02:26.505 [DEBUG] [Thread-65870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:02:26.516 [DEBUG] [Thread-65870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:02:26.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:02:26.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:02:26.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:02:26.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:02:26.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:02:26.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:02:26.554 [DEBUG] [Thread-65870] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:02:27.845 [DEBUG] [Thread-65872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:31.094 [DEBUG] [Thread-65873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:31.857 [DEBUG] [Thread-65874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:36.891 [DEBUG] [Thread-65875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:45.908 [DEBUG] [Thread-65876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:46.915 [DEBUG] [Thread-65877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:54.940 [DEBUG] [Thread-65878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:02:56.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:02:56.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:02:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:02:57.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 2, 43), 17.06, 30.34, 0.0, 22.18, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:02:57.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:02:43
2025-12-12T09:02:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:02:57.526 [DEBUG] [Thread-65879] [transport.py] [_log()] starting thread (client mode): 0xf57be5c0
2025-12-12T09:02:57.526 [DEBUG] [Thread-65879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:02:57.547 [DEBUG] [Thread-65879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:02:57.547 [INFO] [Thread-65879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:02:57.550 [DEBUG] [Thread-65879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:02:57.550 [DEBUG] [Thread-65879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:02:57.550 [DEBUG] [Thread-65879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:02:57.550 [DEBUG] [Thread-65879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:57.550 [DEBUG] [Thread-65879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:57.550 [DEBUG] [Thread-65879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] client lang: <none>
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] server lang: <none>
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] kex follows: False
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] Compression: none
2025-12-12T09:02:57.551 [DEBUG] [Thread-65879] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:02:57.571 [DEBUG] [Thread-65879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:02:57.572 [DEBUG] [Thread-65879] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:02:57.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:02:57.573 [DEBUG] [Thread-65879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:02:57.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:02:57.575 [DEBUG] [Thread-65879] [transport.py] [_log()] userauth is OK
2025-12-12T09:02:57.575 [DEBUG] [Thread-65879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:02:57.575 [DEBUG] [Thread-65879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:02:57.575 [DEBUG] [Thread-65879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:02:57.575 [DEBUG] [Thread-65879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:02:57.593 [INFO] [Thread-65879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:02:57.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:02:58.224 [DEBUG] [Thread-65879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:02:58.224 [DEBUG] [Thread-65879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:02:58.225 [DEBUG] [Thread-65879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:02:58.265 [DEBUG] [Thread-65879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:02:58.265 [DEBUG] [Thread-65879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:02:58.269 [DEBUG] [Thread-65879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:02:58.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:02:58.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:02:58.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:02:58.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:02:58.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:02:58.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:02:58.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:02:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:02:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:02:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.293502 -999.00  +13.00  22.83     35   -1.70 1 2 1 1 1   888    0 19.78 200.41 ----- 22.8 22.8 329.8 39.0 15.2 -11.2 15.0 -11.5 14.8 -11.0 15.2 -10.6
2025-12-12T09:02:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:02:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:02:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.293502
2025-12-12T09:02:58.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:02:58.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:02:58.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:02:58.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:02:58.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:02:58.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:02:43', tmtdew=17.06, humidity=30.34, cloud=0.0, wind=22.18, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:02:38.573', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:02:58.295 [DEBUG] [Thread-65879] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:02:58.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:02:58.403 [DEBUG] [Thread-65882] [transport.py] [_log()] starting thread (client mode): 0xf57bfdc0
2025-12-12T09:02:58.404 [DEBUG] [Thread-65882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:02:58.419 [DEBUG] [Thread-65882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:02:58.419 [INFO] [Thread-65882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:02:58.427 [DEBUG] [Thread-65882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] client lang: <none>
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] server lang: <none>
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] kex follows: False
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:02:58.428 [DEBUG] [Thread-65882] [transport.py] [_log()] Compression: none
2025-12-12T09:02:58.429 [DEBUG] [Thread-65882] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:02:58.487 [DEBUG] [Thread-65882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:02:58.487 [DEBUG] [Thread-65882] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:02:58.488 [DEBUG] [Thread-65882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:02:58.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:02:58.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:02:58.546 [DEBUG] [Thread-65882] [transport.py] [_log()] userauth is OK
2025-12-12T09:02:58.546 [DEBUG] [Thread-65882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:02:58.547 [DEBUG] [Thread-65882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:02:58.547 [DEBUG] [Thread-65882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:02:58.547 [DEBUG] [Thread-65882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:02:58.569 [INFO] [Thread-65882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:02:58.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:02:58.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:02:59.421 [DEBUG] [Thread-65882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:02:59.422 [DEBUG] [Thread-65882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:02:59.470 [DEBUG] [Thread-65882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:02:59.470 [DEBUG] [Thread-65882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:02:59.479 [DEBUG] [Thread-65882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:02:59.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:02:59.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:02:59.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:02:59.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:02:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:02:59.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:02:59.516 [DEBUG] [Thread-65882] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:03:01.960 [DEBUG] [Thread-65884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:03.988 [DEBUG] [Thread-65885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:06.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:06.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:13.010 [DEBUG] [Thread-65886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:17.018 [DEBUG] [Thread-65887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:22.032 [DEBUG] [Thread-65888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:29.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:03:29.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:03:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:03:30.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 3, 15), 17.08, 30.3, 0.0, 24.0, 13.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:03:30.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:03:15
2025-12-12T09:03:30.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:03:30.469 [DEBUG] [Thread-65889] [transport.py] [_log()] starting thread (client mode): 0xf5729cc0
2025-12-12T09:03:30.469 [DEBUG] [Thread-65889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:03:30.482 [DEBUG] [Thread-65889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:03:30.482 [INFO] [Thread-65889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] client lang: <none>
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] server lang: <none>
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] kex follows: False
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] Compression: none
2025-12-12T09:03:30.485 [DEBUG] [Thread-65889] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:03:30.504 [DEBUG] [Thread-65889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:03:30.505 [DEBUG] [Thread-65889] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:03:30.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:03:30.507 [DEBUG] [Thread-65889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:03:30.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:03:30.509 [DEBUG] [Thread-65889] [transport.py] [_log()] userauth is OK
2025-12-12T09:03:30.509 [DEBUG] [Thread-65889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:03:30.509 [DEBUG] [Thread-65889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:03:30.510 [DEBUG] [Thread-65889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:03:30.510 [DEBUG] [Thread-65889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:03:30.535 [INFO] [Thread-65889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:03:30.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:03:31.054 [DEBUG] [Thread-65891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:31.142 [DEBUG] [Thread-65889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:03:31.142 [DEBUG] [Thread-65889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:03:31.142 [DEBUG] [Thread-65889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:03:31.158 [DEBUG] [Thread-65892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:31.184 [DEBUG] [Thread-65889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:03:31.185 [DEBUG] [Thread-65889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:03:31.187 [DEBUG] [Thread-65889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:03:31.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:03:31.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:03:31.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:03:31.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:03:31.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:03:31.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:03:31.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:03:31.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:03:31.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:03:31.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.293791 -999.00  +13.10  22.69     35   -1.60 1 2 1 1 1   888    0 19.27 186.18 ----- 23.8 22.7 339.8 31.3 15.4 -11.0 15.1 -11.5 14.9 -10.6 15.3 -10.4
2025-12-12T09:03:31.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:03:31.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:03:31.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.293791
2025-12-12T09:03:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:03:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:03:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:03:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:03:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:03:31.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:03:15', tmtdew=17.08, humidity=30.3, cloud=0.0, wind=24.0, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:03:03.542', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:03:31.214 [DEBUG] [Thread-65889] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:03:31.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:03:31.309 [DEBUG] [Thread-65894] [transport.py] [_log()] starting thread (client mode): 0xf5770b20
2025-12-12T09:03:31.309 [DEBUG] [Thread-65894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:03:31.323 [DEBUG] [Thread-65894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:03:31.324 [INFO] [Thread-65894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:03:31.331 [DEBUG] [Thread-65894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:03:31.331 [DEBUG] [Thread-65894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:03:31.331 [DEBUG] [Thread-65894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:03:31.331 [DEBUG] [Thread-65894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:03:31.331 [DEBUG] [Thread-65894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:03:31.331 [DEBUG] [Thread-65894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] client lang: <none>
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] server lang: <none>
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] kex follows: False
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] Compression: none
2025-12-12T09:03:31.332 [DEBUG] [Thread-65894] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:03:31.390 [DEBUG] [Thread-65894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:03:31.390 [DEBUG] [Thread-65894] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:03:31.391 [DEBUG] [Thread-65894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:03:31.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:03:31.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:03:31.446 [DEBUG] [Thread-65894] [transport.py] [_log()] userauth is OK
2025-12-12T09:03:31.446 [DEBUG] [Thread-65894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:03:31.446 [DEBUG] [Thread-65894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:03:31.446 [DEBUG] [Thread-65894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:03:31.446 [DEBUG] [Thread-65894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:03:31.466 [INFO] [Thread-65894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:03:31.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:03:31.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:03:32.061 [DEBUG] [Thread-65896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:32.351 [DEBUG] [Thread-65894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:03:32.351 [DEBUG] [Thread-65894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:03:32.399 [DEBUG] [Thread-65894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:03:32.400 [DEBUG] [Thread-65894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:03:32.408 [DEBUG] [Thread-65894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:03:32.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:03:32.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:03:32.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:03:32.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:03:32.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:03:32.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:03:32.444 [DEBUG] [Thread-65894] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:03:40.099 [DEBUG] [Thread-65897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:47.117 [DEBUG] [Thread-65898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:49.127 [DEBUG] [Thread-65899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:03:58.146 [DEBUG] [Thread-65900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:02.160 [DEBUG] [Thread-65901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:04:02.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:04:02.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:04:03.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 3, 48), 17.3, 29.96, 0.0, 31.16, 13.36, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:04:03.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:03:48
2025-12-12T09:04:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:04:03.441 [DEBUG] [Thread-65902] [transport.py] [_log()] starting thread (client mode): 0xf57bc0d0
2025-12-12T09:04:03.441 [DEBUG] [Thread-65902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:04:03.461 [DEBUG] [Thread-65902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:04:03.461 [INFO] [Thread-65902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:04:03.464 [DEBUG] [Thread-65902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] client lang: <none>
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] server lang: <none>
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] kex follows: False
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] Compression: none
2025-12-12T09:04:03.465 [DEBUG] [Thread-65902] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:04:03.482 [DEBUG] [Thread-65902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:04:03.483 [DEBUG] [Thread-65902] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:04:03.483 [DEBUG] [Thread-65902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:04:03.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:04:03.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:04:03.485 [DEBUG] [Thread-65902] [transport.py] [_log()] userauth is OK
2025-12-12T09:04:03.486 [DEBUG] [Thread-65902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:04:03.486 [DEBUG] [Thread-65902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:04:03.486 [DEBUG] [Thread-65902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:04:03.486 [DEBUG] [Thread-65902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:04:03.504 [INFO] [Thread-65902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:04:03.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:04:04.103 [DEBUG] [Thread-65902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:04:04.103 [DEBUG] [Thread-65902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:04:04.103 [DEBUG] [Thread-65902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:04:04.144 [DEBUG] [Thread-65902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:04:04.144 [DEBUG] [Thread-65902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:04:04.147 [DEBUG] [Thread-65902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:04:04.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:04:04.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:04:04.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:04:04.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:04:04.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:04:04.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:04:04.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:04:04.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:04:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:04:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.294139 -999.00  +13.20  28.10     35   -1.60 1 2 1 1 1   888    0 19.26 182.45 ----- 28.3 28.1 336.8 35.9 15.4 -11.3 15.1 -11.6 15.0 -10.6 15.3 -10.6
2025-12-12T09:04:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:04:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:04:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.294139
2025-12-12T09:04:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:04:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:04:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:04:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:04:04.173 [DEBUG] [Thread-65902] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:04:04.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:04:04.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:03:48', tmtdew=17.3, humidity=29.96, cloud=0.0, wind=31.16, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:03:33.610', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:04:04.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:04:04.259 [DEBUG] [Thread-65905] [transport.py] [_log()] starting thread (client mode): 0xf57a8e50
2025-12-12T09:04:04.259 [DEBUG] [Thread-65905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:04:04.273 [DEBUG] [Thread-65905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:04:04.273 [INFO] [Thread-65905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:04:04.282 [DEBUG] [Thread-65905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] client lang: <none>
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] server lang: <none>
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] kex follows: False
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:04:04.283 [DEBUG] [Thread-65905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:04:04.284 [DEBUG] [Thread-65905] [transport.py] [_log()] Compression: none
2025-12-12T09:04:04.284 [DEBUG] [Thread-65905] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:04:04.347 [DEBUG] [Thread-65905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:04:04.348 [DEBUG] [Thread-65905] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:04:04.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:04:04.349 [DEBUG] [Thread-65905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:04:04.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:04:04.407 [DEBUG] [Thread-65905] [transport.py] [_log()] userauth is OK
2025-12-12T09:04:04.407 [DEBUG] [Thread-65905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:04:04.408 [DEBUG] [Thread-65905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:04:04.408 [DEBUG] [Thread-65905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:04:04.408 [DEBUG] [Thread-65905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:04:04.430 [INFO] [Thread-65905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:04:04.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:04:04.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:04:05.276 [DEBUG] [Thread-65905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:04:05.276 [DEBUG] [Thread-65905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:04:05.324 [DEBUG] [Thread-65905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:04:05.324 [DEBUG] [Thread-65905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:04:05.337 [DEBUG] [Thread-65905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:04:05.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:04: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')
2025-12-12T09:04:05.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:04:05.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:04:05.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:04:05.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:04:05.372 [DEBUG] [Thread-65905] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:04:06.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:06.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:07.179 [DEBUG] [Thread-65907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:16.202 [DEBUG] [Thread-65908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:17.210 [DEBUG] [Thread-65909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:25.243 [DEBUG] [Thread-65910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:31.204 [DEBUG] [Thread-65911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:32.260 [DEBUG] [Thread-65912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:34.270 [DEBUG] [Thread-65913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:04:35.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:04: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
2025-12-12T09:04:36.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 4, 20), 17.31, 29.91, 0.0, 30.15, 13.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:04:36.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:04:20
2025-12-12T09:04:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:04:36.357 [DEBUG] [Thread-65914] [transport.py] [_log()] starting thread (client mode): 0xf81552a0
2025-12-12T09:04:36.357 [DEBUG] [Thread-65914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:04:36.373 [DEBUG] [Thread-65914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:04:36.374 [INFO] [Thread-65914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] client lang: <none>
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] server lang: <none>
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] kex follows: False
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:04:36.377 [DEBUG] [Thread-65914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:04:36.378 [DEBUG] [Thread-65914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:04:36.378 [DEBUG] [Thread-65914] [transport.py] [_log()] Compression: none
2025-12-12T09:04:36.378 [DEBUG] [Thread-65914] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:04:36.385 [DEBUG] [Thread-65914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:04:36.386 [DEBUG] [Thread-65914] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:04:36.386 [DEBUG] [Thread-65914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:04:36.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:04:36.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:04:36.388 [DEBUG] [Thread-65914] [transport.py] [_log()] userauth is OK
2025-12-12T09:04:36.388 [DEBUG] [Thread-65914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:04:36.388 [DEBUG] [Thread-65914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:04:36.388 [DEBUG] [Thread-65914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:04:36.388 [DEBUG] [Thread-65914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:04:36.406 [INFO] [Thread-65914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:04:36.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:04:37.047 [DEBUG] [Thread-65914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:04:37.048 [DEBUG] [Thread-65914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:04:37.048 [DEBUG] [Thread-65914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:04:37.089 [DEBUG] [Thread-65914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:04:37.089 [DEBUG] [Thread-65914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:04:37.092 [DEBUG] [Thread-65914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:04:37.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:04:37.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:04:37.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:04:37.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:04:37.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:04:37.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:04:37.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:04:37.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:04:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:04:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.294486 -999.00  +13.10  24.34     35   -1.60 1 2 1 1 1   888    0 19.28 178.32 ----- 22.2 24.3 332.7 32.7 15.5 -11.0 15.2 -11.3 15.1 -10.2 15.4 -10.2
2025-12-12T09:04:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:04:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:04:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.294486
2025-12-12T09:04:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:04:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:04:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:04:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:04:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:04:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:04:20', tmtdew=17.31, humidity=29.91, cloud=0.0, wind=30.15, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:04:03.590', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:04:37.115 [DEBUG] [Thread-65914] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:04:37.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:04:37.210 [DEBUG] [Thread-65917] [transport.py] [_log()] starting thread (client mode): 0xf81c3d60
2025-12-12T09:04:37.210 [DEBUG] [Thread-65917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:04:37.225 [DEBUG] [Thread-65917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:04:37.225 [INFO] [Thread-65917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:04:37.232 [DEBUG] [Thread-65917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:04:37.232 [DEBUG] [Thread-65917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] client lang: <none>
2025-12-12T09:04:37.233 [DEBUG] [Thread-65917] [transport.py] [_log()] server lang: <none>
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] kex follows: False
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] Compression: none
2025-12-12T09:04:37.234 [DEBUG] [Thread-65917] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:04:37.289 [DEBUG] [Thread-65917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:04:37.290 [DEBUG] [Thread-65917] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:04:37.291 [DEBUG] [Thread-65917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:04:37.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:04:37.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:04:37.346 [DEBUG] [Thread-65917] [transport.py] [_log()] userauth is OK
2025-12-12T09:04:37.346 [DEBUG] [Thread-65917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:04:37.346 [DEBUG] [Thread-65917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:04:37.347 [DEBUG] [Thread-65917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:04:37.347 [DEBUG] [Thread-65917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:04:37.365 [INFO] [Thread-65917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:04:37.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:04:37.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:04:38.211 [DEBUG] [Thread-65917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:04:38.211 [DEBUG] [Thread-65917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:04:38.259 [DEBUG] [Thread-65917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:04:38.259 [DEBUG] [Thread-65917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:04:38.268 [DEBUG] [Thread-65917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:04:38.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:04:38.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:04:38.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:04:38.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:04:38.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:04:38.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:04:38.305 [DEBUG] [Thread-65917] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:04:43.292 [DEBUG] [Thread-65919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:47.306 [DEBUG] [Thread-65920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:04:52.348 [DEBUG] [Thread-65921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:01.373 [DEBUG] [Thread-65922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:02.384 [DEBUG] [Thread-65923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:06.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:06.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:08.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:05:08.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:05:08.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 4, 52), 17.2, 30.07, 0.0, 26.41, 13.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:05:09.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:04:52
2025-12-12T09:05:09.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:05:09.339 [DEBUG] [Thread-65924] [transport.py] [_log()] starting thread (client mode): 0xf57b5480
2025-12-12T09:05:09.340 [DEBUG] [Thread-65924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:05:09.362 [DEBUG] [Thread-65924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:05:09.362 [INFO] [Thread-65924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] client lang: <none>
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] server lang: <none>
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] kex follows: False
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] Compression: none
2025-12-12T09:05:09.365 [DEBUG] [Thread-65924] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:05:09.381 [DEBUG] [Thread-65924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:05:09.381 [DEBUG] [Thread-65924] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:05:09.382 [DEBUG] [Thread-65924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:05:09.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:05:09.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:05:09.382 [DEBUG] [Thread-65924] [transport.py] [_log()] userauth is OK
2025-12-12T09:05:09.382 [DEBUG] [Thread-65924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:05:09.382 [DEBUG] [Thread-65924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:05:09.382 [DEBUG] [Thread-65924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:05:09.382 [DEBUG] [Thread-65924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:05:09.397 [INFO] [Thread-65924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:05:09.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:05:10.402 [DEBUG] [Thread-65926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:14.583 [DEBUG] [Thread-65924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:05:14.584 [DEBUG] [Thread-65924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:05:14.584 [DEBUG] [Thread-65924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:05:14.624 [DEBUG] [Thread-65924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:05:14.624 [DEBUG] [Thread-65924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:05:14.628 [DEBUG] [Thread-65924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:05:14.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:05:14.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:05:14.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:05:14.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:05:14.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:05:14.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:05:14.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:05:14.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:05:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:05:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.295180 -999.00  +13.20  24.72     35   -1.70 1 2 1 1 1   888    0 19.07 172.17 ----- 24.5 24.7 318.6 34.8 15.7 -11.2 15.4 -11.2 15.2 -10.4 15.6 -10.3
2025-12-12T09:05:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:05:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:05:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.295180
2025-12-12T09:05:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:05:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:05:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:05:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:05:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:05:14.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:04:52', tmtdew=17.2, humidity=30.07, cloud=0.0, wind=26.41, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:05:03.552', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:05:14.658 [DEBUG] [Thread-65924] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:05:14.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:05:14.758 [DEBUG] [Thread-65928] [transport.py] [_log()] starting thread (client mode): 0xf57a8a60
2025-12-12T09:05:14.758 [DEBUG] [Thread-65928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:05:14.774 [DEBUG] [Thread-65928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:05:14.774 [INFO] [Thread-65928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:05:14.781 [DEBUG] [Thread-65928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:05:14.782 [DEBUG] [Thread-65928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:05:14.782 [DEBUG] [Thread-65928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:05:14.782 [DEBUG] [Thread-65928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] client lang: <none>
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] server lang: <none>
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] kex follows: False
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] Compression: none
2025-12-12T09:05:14.783 [DEBUG] [Thread-65928] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:05:14.842 [DEBUG] [Thread-65928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:05:14.842 [DEBUG] [Thread-65928] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:05:14.843 [DEBUG] [Thread-65928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:05:14.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:05:14.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:05:14.899 [DEBUG] [Thread-65928] [transport.py] [_log()] userauth is OK
2025-12-12T09:05:14.900 [DEBUG] [Thread-65928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:05:14.900 [DEBUG] [Thread-65928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:05:14.900 [DEBUG] [Thread-65928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:05:14.900 [DEBUG] [Thread-65928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:05:14.921 [INFO] [Thread-65928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:05:14.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:05:14.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:05:15.779 [DEBUG] [Thread-65928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:05:15.780 [DEBUG] [Thread-65928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:05:15.827 [DEBUG] [Thread-65928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:05:15.828 [DEBUG] [Thread-65928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:05:15.837 [DEBUG] [Thread-65928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:05:15.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:05:15.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')
2025-12-12T09:05:15.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:05:15.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:05:15.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:05:15.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:05:15.874 [DEBUG] [Thread-65928] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:05:17.420 [DEBUG] [Thread-65930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:19.449 [DEBUG] [Thread-65931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:28.474 [DEBUG] [Thread-65932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:31.262 [DEBUG] [Thread-65933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:32.486 [DEBUG] [Thread-65934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:37.509 [DEBUG] [Thread-65935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:05:45.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:05:45.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:05:46.532 [DEBUG] [Thread-65936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 5, 24), 17.28, 29.89, 0.0, 30.61, 13.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:05:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:05:24
2025-12-12T09:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:05:46.905 [DEBUG] [Thread-65937] [transport.py] [_log()] starting thread (client mode): 0xf81558a0
2025-12-12T09:05:46.905 [DEBUG] [Thread-65937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:05:46.926 [DEBUG] [Thread-65937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:05:46.926 [INFO] [Thread-65937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] client lang: <none>
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] server lang: <none>
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] kex follows: False
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] Compression: none
2025-12-12T09:05:46.929 [DEBUG] [Thread-65937] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:05:46.946 [DEBUG] [Thread-65937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:05:46.946 [DEBUG] [Thread-65937] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:05:46.946 [DEBUG] [Thread-65937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:05:46.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:05:46.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:05:46.947 [DEBUG] [Thread-65937] [transport.py] [_log()] userauth is OK
2025-12-12T09:05:46.947 [DEBUG] [Thread-65937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:05:46.947 [DEBUG] [Thread-65937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:05:46.947 [DEBUG] [Thread-65937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:05:46.947 [DEBUG] [Thread-65937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:05:46.962 [INFO] [Thread-65937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:05:46.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:05:47.536 [DEBUG] [Thread-65939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:05:47.626 [DEBUG] [Thread-65937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:05:47.626 [DEBUG] [Thread-65937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:05:47.626 [DEBUG] [Thread-65937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:05:47.668 [DEBUG] [Thread-65937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:05:47.668 [DEBUG] [Thread-65937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:05:47.669 [DEBUG] [Thread-65937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:05:47.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:05:47.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:05:47.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:05:47.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:05:47.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:05:47.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:05:47.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.295180 -999.00  +13.20  24.72     35   -1.70 1 2 1 1 1   888    0 19.07 172.17 ----- 24.5 24.7 318.6 34.8 15.7 -11.2 15.4 -11.2 15.2 -10.4 15.6 -10.3
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.295180
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:05:47.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:05:24', tmtdew=17.28, humidity=29.89, cloud=0.0, wind=30.61, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:05:03.552', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:05:47.687 [DEBUG] [Thread-65937] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:05:47.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:05:47.773 [DEBUG] [Thread-65941] [transport.py] [_log()] starting thread (client mode): 0xf5770610
2025-12-12T09:05:47.774 [DEBUG] [Thread-65941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:05:47.788 [DEBUG] [Thread-65941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:05:47.788 [INFO] [Thread-65941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] client lang: <none>
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] server lang: <none>
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] kex follows: False
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] Compression: none
2025-12-12T09:05:47.796 [DEBUG] [Thread-65941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:05:47.852 [DEBUG] [Thread-65941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:05:47.852 [DEBUG] [Thread-65941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:05:47.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:05:47.852 [DEBUG] [Thread-65941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:05:47.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:05:47.909 [DEBUG] [Thread-65941] [transport.py] [_log()] userauth is OK
2025-12-12T09:05:47.909 [DEBUG] [Thread-65941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:05:47.909 [DEBUG] [Thread-65941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:05:47.909 [DEBUG] [Thread-65941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:05:47.909 [DEBUG] [Thread-65941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:05:47.923 [INFO] [Thread-65941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:05:47.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:05:47.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:05:48.774 [DEBUG] [Thread-65941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:05:48.774 [DEBUG] [Thread-65941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:05:48.821 [DEBUG] [Thread-65941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:05:48.822 [DEBUG] [Thread-65941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:05:48.830 [DEBUG] [Thread-65941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:05:48.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:05:48.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:05:48.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:05:48.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:05:48.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:05:48.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:05:48.861 [DEBUG] [Thread-65941] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:05:55.554 [DEBUG] [Thread-65943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:02.575 [DEBUG] [Thread-65944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:04.611 [DEBUG] [Thread-65945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:06.832 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:06.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:13.634 [DEBUG] [Thread-65946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:17.648 [DEBUG] [Thread-65947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:18.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:06:18.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:06:18.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:06:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 5, 56), 17.23, 29.97, 0.0, 28.16, 13.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:06:19.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:05:56
2025-12-12T09:06:19.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:06:19.843 [DEBUG] [Thread-65948] [transport.py] [_log()] starting thread (client mode): 0xf571a380
2025-12-12T09:06:19.843 [DEBUG] [Thread-65948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:06:19.864 [DEBUG] [Thread-65948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:06:19.864 [INFO] [Thread-65948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] client lang: <none>
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] server lang: <none>
2025-12-12T09:06:19.867 [DEBUG] [Thread-65948] [transport.py] [_log()] kex follows: False
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] Compression: none
2025-12-12T09:06:19.868 [DEBUG] [Thread-65948] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:06:19.880 [DEBUG] [Thread-65948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:06:19.881 [DEBUG] [Thread-65948] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:06:19.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:06:19.882 [DEBUG] [Thread-65948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:06:19.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:06:19.885 [DEBUG] [Thread-65948] [transport.py] [_log()] userauth is OK
2025-12-12T09:06:19.886 [DEBUG] [Thread-65948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:06:19.886 [DEBUG] [Thread-65948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:06:19.886 [DEBUG] [Thread-65948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:06:19.886 [DEBUG] [Thread-65948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:06:19.900 [INFO] [Thread-65948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:06:19.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:06:20.565 [DEBUG] [Thread-65948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:06:20.565 [DEBUG] [Thread-65948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:06:20.566 [DEBUG] [Thread-65948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:06:20.606 [DEBUG] [Thread-65948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:06:20.606 [DEBUG] [Thread-65948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:06:20.609 [DEBUG] [Thread-65948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:06:20.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:06:20.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:06:20.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:06:20.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:06:20.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:06:20.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:06:20.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:06:20.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:06:20.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:06:20.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.295527 -999.00  +13.20  23.81     35   -1.60 1 2 1 1 1   888    0 18.62 156.03 ----- 22.3 23.8 343.8 35.0 15.7 -11.0 15.4 -11.3 15.2 -10.2 15.6 -10.3
2025-12-12T09:06:20.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:06:20.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:06:20.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.295527
2025-12-12T09:06:20.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:06:20.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:06:20.636 [DEBUG] [Thread-65948] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:06:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:06:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:06:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:06:20.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:05:56', tmtdew=17.23, humidity=29.97, cloud=0.0, wind=28.16, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:05:33.533', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:06:20.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:06:20.732 [DEBUG] [Thread-65951] [transport.py] [_log()] starting thread (client mode): 0xf571bee0
2025-12-12T09:06:20.732 [DEBUG] [Thread-65951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:06:20.747 [DEBUG] [Thread-65951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:06:20.747 [INFO] [Thread-65951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:06:20.754 [DEBUG] [Thread-65951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:06:20.755 [DEBUG] [Thread-65951] [transport.py] [_log()] client lang: <none>
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] server lang: <none>
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] kex follows: False
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] Compression: none
2025-12-12T09:06:20.756 [DEBUG] [Thread-65951] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:06:20.815 [DEBUG] [Thread-65951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:06:20.815 [DEBUG] [Thread-65951] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:06:20.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:06:20.816 [DEBUG] [Thread-65951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:06:20.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:06:20.874 [DEBUG] [Thread-65951] [transport.py] [_log()] userauth is OK
2025-12-12T09:06:20.875 [DEBUG] [Thread-65951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:06:20.875 [DEBUG] [Thread-65951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:06:20.875 [DEBUG] [Thread-65951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:06:20.875 [DEBUG] [Thread-65951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:06:20.901 [INFO] [Thread-65951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:06:20.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:06:20.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:06:21.870 [DEBUG] [Thread-65951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:06:21.871 [DEBUG] [Thread-65951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:06:21.925 [DEBUG] [Thread-65951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:06:21.926 [DEBUG] [Thread-65951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:06:21.941 [DEBUG] [Thread-65951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:06:21.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:06:21.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:06:21.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:06:21.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:06:21.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:06:21.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:06:21.992 [DEBUG] [Thread-65951] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:06:22.664 [DEBUG] [Thread-65953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:31.313 [DEBUG] [Thread-65954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:31.679 [DEBUG] [Thread-65955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:32.684 [DEBUG] [Thread-65956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:40.722 [DEBUG] [Thread-65957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:47.744 [DEBUG] [Thread-65958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:49.759 [DEBUG] [Thread-65959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:06:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:06:52.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:06:52.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:06:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 6, 28), 17.12, 30.2, 0.0, 27.12, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:06:52.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:06:28
2025-12-12T09:06:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:06:52.982 [DEBUG] [Thread-65960] [transport.py] [_log()] starting thread (client mode): 0xf81541c0
2025-12-12T09:06:52.983 [DEBUG] [Thread-65960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:06:53.005 [DEBUG] [Thread-65960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:06:53.005 [INFO] [Thread-65960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] client lang: <none>
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] server lang: <none>
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] kex follows: False
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] Compression: none
2025-12-12T09:06:53.009 [DEBUG] [Thread-65960] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:06:53.026 [DEBUG] [Thread-65960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:06:53.027 [DEBUG] [Thread-65960] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:06:53.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:06:53.028 [DEBUG] [Thread-65960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:06:53.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:06:53.030 [DEBUG] [Thread-65960] [transport.py] [_log()] userauth is OK
2025-12-12T09:06:53.030 [DEBUG] [Thread-65960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:06:53.031 [DEBUG] [Thread-65960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:06:53.031 [DEBUG] [Thread-65960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:06:53.031 [DEBUG] [Thread-65960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:06:53.056 [INFO] [Thread-65960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:06:53.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:06:53.751 [DEBUG] [Thread-65960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:06:53.751 [DEBUG] [Thread-65960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:06:53.751 [DEBUG] [Thread-65960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:06:53.792 [DEBUG] [Thread-65960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:06:53.792 [DEBUG] [Thread-65960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:06:53.795 [DEBUG] [Thread-65960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:06:53.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:06:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:06:53.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:06:53.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:06:53.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:06:53.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:06:53.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:06:53.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:06:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:06:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.295875 -999.00  +13.20  18.72     36   -1.40 1 2 1 1 1   888    0 18.43 146.66 ----- 26.9 18.7 341.6 31.5 15.8 -11.1 15.3 -11.3 15.3 -10.8 15.7 -10.4
2025-12-12T09:06:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:06:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:06:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.295875
2025-12-12T09:06:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:06:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:06:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:06:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:06:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:06:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:06:28', tmtdew=17.12, humidity=30.2, cloud=0.0, wind=27.12, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:06:03.600', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:06:53.823 [DEBUG] [Thread-65960] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:06:53.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:06:53.920 [DEBUG] [Thread-65963] [transport.py] [_log()] starting thread (client mode): 0xf5770610
2025-12-12T09:06:53.921 [DEBUG] [Thread-65963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:06:53.935 [DEBUG] [Thread-65963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:06:53.935 [INFO] [Thread-65963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:06:53.942 [DEBUG] [Thread-65963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:06:53.942 [DEBUG] [Thread-65963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:06:53.942 [DEBUG] [Thread-65963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:06:53.942 [DEBUG] [Thread-65963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:53.942 [DEBUG] [Thread-65963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:06:53.942 [DEBUG] [Thread-65963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] client lang: <none>
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] server lang: <none>
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] kex follows: False
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] Compression: none
2025-12-12T09:06:53.943 [DEBUG] [Thread-65963] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:06:54.003 [DEBUG] [Thread-65963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:06:54.003 [DEBUG] [Thread-65963] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:06:54.004 [DEBUG] [Thread-65963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:06:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:06:54.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:06:54.062 [DEBUG] [Thread-65963] [transport.py] [_log()] userauth is OK
2025-12-12T09:06:54.063 [DEBUG] [Thread-65963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:06:54.063 [DEBUG] [Thread-65963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:06:54.063 [DEBUG] [Thread-65963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:06:54.063 [DEBUG] [Thread-65963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:06:54.082 [INFO] [Thread-65963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:06:54.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:06:54.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:06:54.929 [DEBUG] [Thread-65963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:06:54.929 [DEBUG] [Thread-65963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:06:54.977 [DEBUG] [Thread-65963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:06:54.977 [DEBUG] [Thread-65963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:06:54.987 [DEBUG] [Thread-65963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:06:54.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:06:54.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:06:55.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:06:55.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:06:55.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:06:55.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:06:55.024 [DEBUG] [Thread-65963] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:06:58.784 [DEBUG] [Thread-65965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:02.796 [DEBUG] [Thread-65966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:06.980 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:06.980 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:07.820 [DEBUG] [Thread-65967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:16.840 [DEBUG] [Thread-65968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:17.848 [DEBUG] [Thread-65969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:07:25.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:07:25.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:07:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 6, 28), 17.12, 30.2, 0.0, 27.12, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:07:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:06:28
2025-12-12T09:07:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:07:25.870 [DEBUG] [Thread-65970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:25.993 [DEBUG] [Thread-65971] [transport.py] [_log()] starting thread (client mode): 0xf8157700
2025-12-12T09:07:25.993 [DEBUG] [Thread-65971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:07:26.010 [DEBUG] [Thread-65971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:07:26.011 [INFO] [Thread-65971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] client lang: <none>
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] server lang: <none>
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] kex follows: False
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:07:26.013 [DEBUG] [Thread-65971] [transport.py] [_log()] Compression: none
2025-12-12T09:07:26.014 [DEBUG] [Thread-65971] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:07:26.025 [DEBUG] [Thread-65971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:07:26.025 [DEBUG] [Thread-65971] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:07:26.026 [DEBUG] [Thread-65971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:07:26.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:07:26.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:07:26.028 [DEBUG] [Thread-65971] [transport.py] [_log()] userauth is OK
2025-12-12T09:07:26.028 [DEBUG] [Thread-65971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:07:26.028 [DEBUG] [Thread-65971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:07:26.028 [DEBUG] [Thread-65971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:07:26.028 [DEBUG] [Thread-65971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:07:26.051 [INFO] [Thread-65971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:07:26.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:07:26.722 [DEBUG] [Thread-65971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:07:26.723 [DEBUG] [Thread-65971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:07:26.723 [DEBUG] [Thread-65971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:07:26.764 [DEBUG] [Thread-65971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:07:26.764 [DEBUG] [Thread-65971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:07:26.768 [DEBUG] [Thread-65971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:07:26.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:07:26.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:07:26.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:07:26.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:07:26.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:07:26.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:07:26.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:07:26.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:07:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:07:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.296279 -999.00  +13.20  22.95     36   -1.10 1 2 1 1 1   888    0 18.39 142.58 ----- 22.9 22.9 342.0 44.9 15.8 -11.6 15.5 -10.9 15.3 -11.4 15.6 -10.9
2025-12-12T09:07:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:07:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:07:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.296279
2025-12-12T09:07:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:07:26.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:07:26.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:07:26.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:07:26.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:07:26.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:06:28', tmtdew=17.12, humidity=30.2, cloud=0.0, wind=27.12, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:06:38.506', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:07:26.790 [DEBUG] [Thread-65971] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:07:26.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:07:26.885 [DEBUG] [Thread-65974] [transport.py] [_log()] starting thread (client mode): 0xf8156e60
2025-12-12T09:07:26.885 [DEBUG] [Thread-65974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:07:26.899 [DEBUG] [Thread-65974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:07:26.899 [INFO] [Thread-65974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:07:26.907 [DEBUG] [Thread-65974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:07:26.907 [DEBUG] [Thread-65974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:07:26.907 [DEBUG] [Thread-65974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:07:26.907 [DEBUG] [Thread-65974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:26.907 [DEBUG] [Thread-65974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] client lang: <none>
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] server lang: <none>
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] kex follows: False
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] Compression: none
2025-12-12T09:07:26.908 [DEBUG] [Thread-65974] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:07:26.966 [DEBUG] [Thread-65974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:07:26.967 [DEBUG] [Thread-65974] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:07:26.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:07:26.968 [DEBUG] [Thread-65974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:07:26.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:07:27.023 [DEBUG] [Thread-65974] [transport.py] [_log()] userauth is OK
2025-12-12T09:07:27.023 [DEBUG] [Thread-65974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:07:27.023 [DEBUG] [Thread-65974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:07:27.023 [DEBUG] [Thread-65974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:07:27.023 [DEBUG] [Thread-65974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:07:27.042 [INFO] [Thread-65974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:07:27.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:07:27.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:07:27.882 [DEBUG] [Thread-65974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:07:27.882 [DEBUG] [Thread-65974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:07:27.930 [DEBUG] [Thread-65974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:07:27.931 [DEBUG] [Thread-65974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:07:27.943 [DEBUG] [Thread-65974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:07:27.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:07:27.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:07:27.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:07:27.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:07:27.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:07:27.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:07:27.979 [DEBUG] [Thread-65974] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:07:31.367 [DEBUG] [Thread-65976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:32.886 [DEBUG] [Thread-65977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:34.904 [DEBUG] [Thread-65978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:43.923 [DEBUG] [Thread-65979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:47.932 [DEBUG] [Thread-65980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:52.947 [DEBUG] [Thread-65981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:07:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:07:58.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:07:58.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:07:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 7, 32), 16.79, 30.85, 0.0, 26.55, 13.44, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:07:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:07:32
2025-12-12T09:07:58.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:07:58.960 [DEBUG] [Thread-65982] [transport.py] [_log()] starting thread (client mode): 0xf5718910
2025-12-12T09:07:58.960 [DEBUG] [Thread-65982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:07:58.979 [DEBUG] [Thread-65982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:07:58.980 [INFO] [Thread-65982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] client lang: <none>
2025-12-12T09:07:58.983 [DEBUG] [Thread-65982] [transport.py] [_log()] server lang: <none>
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] kex follows: False
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] Compression: none
2025-12-12T09:07:58.984 [DEBUG] [Thread-65982] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:07:59.004 [DEBUG] [Thread-65982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:07:59.005 [DEBUG] [Thread-65982] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:07:59.005 [DEBUG] [Thread-65982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:07:59.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:07:59.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:07:59.007 [DEBUG] [Thread-65982] [transport.py] [_log()] userauth is OK
2025-12-12T09:07:59.008 [DEBUG] [Thread-65982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:07:59.008 [DEBUG] [Thread-65982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:07:59.008 [DEBUG] [Thread-65982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:07:59.008 [DEBUG] [Thread-65982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:07:59.034 [INFO] [Thread-65982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:07:59.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:07:59.690 [DEBUG] [Thread-65982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:07:59.690 [DEBUG] [Thread-65982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:07:59.691 [DEBUG] [Thread-65982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:07:59.731 [DEBUG] [Thread-65982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:07:59.732 [DEBUG] [Thread-65982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:07:59.735 [DEBUG] [Thread-65982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:07:59.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:07:59.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:07:59.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:07:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:07:59.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:07:59.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:07:59.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:07:59.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:07:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:07:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.296569 -999.00  +13.10  30.66     37   -1.10 1 2 2 1 1   888    0 18.41 140.02 ----- 16.8 30.7 333.0 35.6 15.8 -11.3 15.4 -11.4 15.3 -10.3 15.6 -10.8
2025-12-12T09:07:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:07:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:07:59.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.296569
2025-12-12T09:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:07:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:07:32', tmtdew=16.79, humidity=30.85, cloud=0.0, wind=26.55, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:07:03.562', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:07:59.763 [DEBUG] [Thread-65982] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:07:59.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:07:59.859 [DEBUG] [Thread-65985] [transport.py] [_log()] starting thread (client mode): 0xf57193f0
2025-12-12T09:07:59.859 [DEBUG] [Thread-65985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:07:59.873 [DEBUG] [Thread-65985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:07:59.873 [INFO] [Thread-65985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:07:59.880 [DEBUG] [Thread-65985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] client lang: <none>
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] server lang: <none>
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] kex follows: False
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] Compression: none
2025-12-12T09:07:59.881 [DEBUG] [Thread-65985] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:07:59.938 [DEBUG] [Thread-65985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:07:59.940 [DEBUG] [Thread-65985] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:07:59.941 [DEBUG] [Thread-65985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:07:59.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:07:59.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:07:59.998 [DEBUG] [Thread-65985] [transport.py] [_log()] userauth is OK
2025-12-12T09:07:59.998 [DEBUG] [Thread-65985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:07:59.998 [DEBUG] [Thread-65985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:07:59.998 [DEBUG] [Thread-65985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:07:59.998 [DEBUG] [Thread-65985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:08:00.016 [INFO] [Thread-65985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:08:00.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:08:00.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:08:00.911 [DEBUG] [Thread-65985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:08:00.911 [DEBUG] [Thread-65985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:08:00.959 [DEBUG] [Thread-65985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:08:00.959 [DEBUG] [Thread-65985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:08:00.968 [DEBUG] [Thread-65985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:08:00.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:08:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:08:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:08:00.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:08:00.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:08:00.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:08:01.005 [DEBUG] [Thread-65985] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:08:01.971 [DEBUG] [Thread-65987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:02.978 [DEBUG] [Thread-65988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:07.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:07.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:11.012 [DEBUG] [Thread-65989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:18.031 [DEBUG] [Thread-65990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:20.044 [DEBUG] [Thread-65991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:29.065 [DEBUG] [Thread-65992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:08:31.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:08:31.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:08:31.414 [DEBUG] [Thread-65993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:31.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 8, 4), 16.95, 30.49, 0.0, 23.36, 13.44, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:08:31.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:08:04
2025-12-12T09:08:31.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:08:31.995 [DEBUG] [Thread-65994] [transport.py] [_log()] starting thread (client mode): 0xf571ba00
2025-12-12T09:08:31.995 [DEBUG] [Thread-65994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:08:32.014 [DEBUG] [Thread-65994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:08:32.015 [INFO] [Thread-65994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] client lang: <none>
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] server lang: <none>
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] kex follows: False
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] Compression: none
2025-12-12T09:08:32.018 [DEBUG] [Thread-65994] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:08:32.037 [DEBUG] [Thread-65994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:08:32.037 [DEBUG] [Thread-65994] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:08:32.037 [DEBUG] [Thread-65994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:08:32.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:08:32.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:08:32.039 [DEBUG] [Thread-65994] [transport.py] [_log()] userauth is OK
2025-12-12T09:08:32.039 [DEBUG] [Thread-65994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:08:32.040 [DEBUG] [Thread-65994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:08:32.040 [DEBUG] [Thread-65994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:08:32.040 [DEBUG] [Thread-65994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:08:32.060 [INFO] [Thread-65994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:08:32.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:08:32.854 [DEBUG] [Thread-65994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:08:32.855 [DEBUG] [Thread-65994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:08:32.855 [DEBUG] [Thread-65994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:08:32.897 [DEBUG] [Thread-65994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:08:32.897 [DEBUG] [Thread-65994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:08:32.900 [DEBUG] [Thread-65994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:08:32.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:08:32.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:08:32.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:08:32.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:08:32.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:08:32.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:08:32.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:08:32.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:08:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:08:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.296974 -999.00  +13.10  28.86     36   -1.30 1 2 1 1 1   888    0 17.91 123.53 ----- 28.9 28.9 337.4 37.0 15.8 -11.3 15.4 -11.5 15.3 -10.8 15.7 -10.8
2025-12-12T09:08:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:08:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:08:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.296974
2025-12-12T09:08:32.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:08:32.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:08:32.925 [DEBUG] [Thread-65994] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:08:32.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:08:32.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:08:32.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:08:32.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:08:04', tmtdew=16.95, humidity=30.49, cloud=0.0, wind=23.36, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:07:38.554', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:08:33.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:08:33.025 [DEBUG] [Thread-65997] [transport.py] [_log()] starting thread (client mode): 0xf81c2800
2025-12-12T09:08:33.026 [DEBUG] [Thread-65997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:08:33.040 [DEBUG] [Thread-65997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:08:33.040 [INFO] [Thread-65997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:08:33.048 [DEBUG] [Thread-65997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:08:33.048 [DEBUG] [Thread-65997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:08:33.048 [DEBUG] [Thread-65997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:08:33.048 [DEBUG] [Thread-65997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] client lang: <none>
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] server lang: <none>
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] kex follows: False
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:08:33.049 [DEBUG] [Thread-65997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:08:33.050 [DEBUG] [Thread-65997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:08:33.050 [DEBUG] [Thread-65997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:08:33.050 [DEBUG] [Thread-65997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:08:33.050 [DEBUG] [Thread-65997] [transport.py] [_log()] Compression: none
2025-12-12T09:08:33.050 [DEBUG] [Thread-65997] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:08:33.077 [DEBUG] [Thread-65999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:33.108 [DEBUG] [Thread-65997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:08:33.109 [DEBUG] [Thread-65997] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:08:33.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:08:33.110 [DEBUG] [Thread-65997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:08:33.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:08:33.163 [DEBUG] [Thread-65997] [transport.py] [_log()] userauth is OK
2025-12-12T09:08:33.164 [DEBUG] [Thread-65997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:08:33.164 [DEBUG] [Thread-65997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:08:33.164 [DEBUG] [Thread-65997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:08:33.164 [DEBUG] [Thread-65997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:08:33.189 [INFO] [Thread-65997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:08:33.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:08:33.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:08:34.048 [DEBUG] [Thread-65997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:08:34.048 [DEBUG] [Thread-65997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:08:34.096 [DEBUG] [Thread-65997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:08:34.096 [DEBUG] [Thread-65997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:08:34.105 [DEBUG] [Thread-65997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:08:34.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:08:34.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:08:34.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:08:34.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:08:34.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:08:34.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:08:34.148 [DEBUG] [Thread-65997] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:08:38.116 [DEBUG] [Thread-66000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:47.138 [DEBUG] [Thread-66001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:48.146 [DEBUG] [Thread-66002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:08:56.172 [DEBUG] [Thread-66003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:03.187 [DEBUG] [Thread-66004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:04.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:09:04.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:09:04.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:09:04.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 8, 36), 17.04, 30.4, 0.0, 23.15, 13.59, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:09:04.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:08:36
2025-12-12T09:09:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:09:05.118 [DEBUG] [Thread-66005] [transport.py] [_log()] starting thread (client mode): 0xf57aab60
2025-12-12T09:09:05.118 [DEBUG] [Thread-66005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:09:05.138 [DEBUG] [Thread-66005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:09:05.138 [INFO] [Thread-66005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:09:05.141 [DEBUG] [Thread-66005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] client lang: <none>
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] server lang: <none>
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] kex follows: False
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] Compression: none
2025-12-12T09:09:05.142 [DEBUG] [Thread-66005] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:09:05.156 [DEBUG] [Thread-66005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:09:05.157 [DEBUG] [Thread-66005] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:09:05.157 [DEBUG] [Thread-66005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:09:05.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:09:05.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:09:05.158 [DEBUG] [Thread-66005] [transport.py] [_log()] userauth is OK
2025-12-12T09:09:05.158 [DEBUG] [Thread-66005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:09:05.158 [DEBUG] [Thread-66005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:09:05.158 [DEBUG] [Thread-66005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:09:05.158 [DEBUG] [Thread-66005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:09:05.170 [INFO] [Thread-66005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:09:05.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:09:05.193 [DEBUG] [Thread-66007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:05.809 [DEBUG] [Thread-66005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:09:05.809 [DEBUG] [Thread-66005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:09:05.810 [DEBUG] [Thread-66005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:09:05.851 [DEBUG] [Thread-66005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:09:05.851 [DEBUG] [Thread-66005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:09:05.853 [DEBUG] [Thread-66005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:09:05.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:09:05.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:09:05.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:09:05.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:09:05.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:09:05.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:09:05.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:09:05.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.297321 -999.00  +13.10  28.37     36   -1.20 1 2 1 1 1   888    0 18.10 120.58 ----- 28.4 28.4 338.2 33.4 15.8 -11.6 15.5 -11.7 15.4 -10.6 15.7 -10.8
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.297321
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:09:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:08:36', tmtdew=17.04, humidity=30.4, cloud=0.0, wind=23.15, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:08:08.534', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:09:05.874 [DEBUG] [Thread-66005] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:09:05.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:09:05.958 [DEBUG] [Thread-66009] [transport.py] [_log()] starting thread (client mode): 0xf5719930
2025-12-12T09:09:05.958 [DEBUG] [Thread-66009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:09:05.972 [DEBUG] [Thread-66009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:09:05.972 [INFO] [Thread-66009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] client lang: <none>
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] server lang: <none>
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] kex follows: False
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] Compression: none
2025-12-12T09:09:05.980 [DEBUG] [Thread-66009] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:09:06.040 [DEBUG] [Thread-66009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:09:06.041 [DEBUG] [Thread-66009] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:09:06.041 [DEBUG] [Thread-66009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:09:06.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:09:06.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:09:06.098 [DEBUG] [Thread-66009] [transport.py] [_log()] userauth is OK
2025-12-12T09:09:06.099 [DEBUG] [Thread-66009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:09:06.099 [DEBUG] [Thread-66009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:09:06.099 [DEBUG] [Thread-66009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:09:06.099 [DEBUG] [Thread-66009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:09:06.118 [INFO] [Thread-66009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:09:06.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:09:06.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:09:06.987 [DEBUG] [Thread-66009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:09:06.988 [DEBUG] [Thread-66009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:09:07.035 [DEBUG] [Thread-66009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:09:07.035 [DEBUG] [Thread-66009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:09:07.045 [DEBUG] [Thread-66009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:09:07.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:09: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')
2025-12-12T09:09:07.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:09:07.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:09:07.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:09:07.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:09:07.080 [DEBUG] [Thread-66009] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:09:07.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:07.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:14.216 [DEBUG] [Thread-66011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:18.229 [DEBUG] [Thread-66012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:23.260 [DEBUG] [Thread-66013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:31.471 [DEBUG] [Thread-66014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:32.285 [DEBUG] [Thread-66015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:33.292 [DEBUG] [Thread-66016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:09:37.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:09:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:09:37.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 9, 8), 17.05, 30.4, 0.0, 29.66, 13.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:09:37.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:09:08
2025-12-12T09:09:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:09:38.054 [DEBUG] [Thread-66017] [transport.py] [_log()] starting thread (client mode): 0xf5770790
2025-12-12T09:09:38.054 [DEBUG] [Thread-66017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:09:38.074 [DEBUG] [Thread-66017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:09:38.074 [INFO] [Thread-66017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:09:38.077 [DEBUG] [Thread-66017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:09:38.077 [DEBUG] [Thread-66017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] client lang: <none>
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] server lang: <none>
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] kex follows: False
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] Compression: none
2025-12-12T09:09:38.078 [DEBUG] [Thread-66017] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:09:38.095 [DEBUG] [Thread-66017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:09:38.095 [DEBUG] [Thread-66017] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:09:38.096 [DEBUG] [Thread-66017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:09:38.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:09:38.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:09:38.097 [DEBUG] [Thread-66017] [transport.py] [_log()] userauth is OK
2025-12-12T09:09:38.098 [DEBUG] [Thread-66017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:09:38.098 [DEBUG] [Thread-66017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:09:38.098 [DEBUG] [Thread-66017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:09:38.098 [DEBUG] [Thread-66017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:09:38.122 [INFO] [Thread-66017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:09:38.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:09:38.912 [DEBUG] [Thread-66017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:09:38.912 [DEBUG] [Thread-66017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:09:38.912 [DEBUG] [Thread-66017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:09:38.952 [DEBUG] [Thread-66017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:09:38.953 [DEBUG] [Thread-66017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:09:38.955 [DEBUG] [Thread-66017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:09:38.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:09:38.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:09:38.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:09:38.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:09:38.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:09:38.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:09:38.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:09:38.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:09:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:09:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.297958 -999.00  +13.20  26.34     36   -1.20 1 2 1 1 1   888    0 17.80 117.56 ----- 18.1 26.3 335.2 36.0 16.0 -11.7 15.7 -11.5 15.5 -10.6 15.8 -10.8
2025-12-12T09:09:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.297958
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:09:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:09:08', tmtdew=17.05, humidity=30.4, cloud=0.0, wind=29.66, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:09:03.571', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:09:38.973 [DEBUG] [Thread-66017] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:09:39.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:09:39.068 [DEBUG] [Thread-66020] [transport.py] [_log()] starting thread (client mode): 0xf81c2c20
2025-12-12T09:09:39.068 [DEBUG] [Thread-66020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:09:39.086 [DEBUG] [Thread-66020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:09:39.086 [INFO] [Thread-66020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] client lang: <none>
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] server lang: <none>
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] kex follows: False
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:09:39.094 [DEBUG] [Thread-66020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:09:39.095 [DEBUG] [Thread-66020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:09:39.095 [DEBUG] [Thread-66020] [transport.py] [_log()] Compression: none
2025-12-12T09:09:39.095 [DEBUG] [Thread-66020] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:09:39.150 [DEBUG] [Thread-66020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:09:39.150 [DEBUG] [Thread-66020] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:09:39.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:09:39.150 [DEBUG] [Thread-66020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:09:39.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:09:39.207 [DEBUG] [Thread-66020] [transport.py] [_log()] userauth is OK
2025-12-12T09:09:39.207 [DEBUG] [Thread-66020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:09:39.207 [DEBUG] [Thread-66020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:09:39.207 [DEBUG] [Thread-66020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:09:39.207 [DEBUG] [Thread-66020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:09:39.221 [INFO] [Thread-66020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:09:39.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:09:39.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:09:40.142 [DEBUG] [Thread-66020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:09:40.142 [DEBUG] [Thread-66020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:09:40.189 [DEBUG] [Thread-66020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:09:40.189 [DEBUG] [Thread-66020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:09:40.198 [DEBUG] [Thread-66020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:09:40.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:09:40.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:09:40.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:09:40.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:09:40.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:09:40.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:09:40.229 [DEBUG] [Thread-66020] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:09:41.311 [DEBUG] [Thread-66022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:48.327 [DEBUG] [Thread-66023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:50.362 [DEBUG] [Thread-66024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:09:59.385 [DEBUG] [Thread-66025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:03.399 [DEBUG] [Thread-66026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:07.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:07.403 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:08.419 [DEBUG] [Thread-66027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:10.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:10:10.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:10:10.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:10:10.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 9, 40), 17.04, 30.52, 0.0, 31.39, 13.63, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:10:10.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:09:40
2025-12-12T09:10:11.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:10:11.180 [DEBUG] [Thread-66028] [transport.py] [_log()] starting thread (client mode): 0xf57194b0
2025-12-12T09:10:11.180 [DEBUG] [Thread-66028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:10:11.193 [DEBUG] [Thread-66028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:10:11.193 [INFO] [Thread-66028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] client lang: <none>
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] server lang: <none>
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] kex follows: False
2025-12-12T09:10:11.196 [DEBUG] [Thread-66028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:10:11.197 [DEBUG] [Thread-66028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:10:11.197 [DEBUG] [Thread-66028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:10:11.197 [DEBUG] [Thread-66028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:10:11.197 [DEBUG] [Thread-66028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:10:11.197 [DEBUG] [Thread-66028] [transport.py] [_log()] Compression: none
2025-12-12T09:10:11.197 [DEBUG] [Thread-66028] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:10:11.213 [DEBUG] [Thread-66028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:10:11.214 [DEBUG] [Thread-66028] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:10:11.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:10:11.215 [DEBUG] [Thread-66028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:10:11.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:10:11.217 [DEBUG] [Thread-66028] [transport.py] [_log()] userauth is OK
2025-12-12T09:10:11.217 [DEBUG] [Thread-66028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:10:11.217 [DEBUG] [Thread-66028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:10:11.217 [DEBUG] [Thread-66028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:10:11.217 [DEBUG] [Thread-66028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:10:11.235 [INFO] [Thread-66028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:10:11.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:10:12.051 [DEBUG] [Thread-66028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:10:12.052 [DEBUG] [Thread-66028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:10:12.052 [DEBUG] [Thread-66028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:10:12.092 [DEBUG] [Thread-66028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:10:12.092 [DEBUG] [Thread-66028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:10:12.096 [DEBUG] [Thread-66028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:10:12.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:10:12.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:10:12.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:10:12.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:10:12.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:10:12.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:10:12.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:10:12.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:10:12.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:10:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.298305 -999.00  +13.20  20.97     36   -1.20 1 2 1 1 1   888    0 17.85 114.90 ----- 19.7 21.0 342.4 30.4 16.0 -11.4 15.7 -11.2 15.6 -10.3 15.9 -11.1
2025-12-12T09:10:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:10:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:10:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.298305
2025-12-12T09:10:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:10:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:10:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:10:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:10:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:10:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:09:40', tmtdew=17.04, humidity=30.52, cloud=0.0, wind=31.39, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:09:33.552', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:10:12.122 [DEBUG] [Thread-66028] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:10:12.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:10:12.219 [DEBUG] [Thread-66031] [transport.py] [_log()] starting thread (client mode): 0xf57b6110
2025-12-12T09:10:12.219 [DEBUG] [Thread-66031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:10:12.234 [DEBUG] [Thread-66031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:10:12.234 [INFO] [Thread-66031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] client lang: <none>
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] server lang: <none>
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] kex follows: False
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:10:12.242 [DEBUG] [Thread-66031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:10:12.243 [DEBUG] [Thread-66031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:10:12.243 [DEBUG] [Thread-66031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:10:12.243 [DEBUG] [Thread-66031] [transport.py] [_log()] Compression: none
2025-12-12T09:10:12.243 [DEBUG] [Thread-66031] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:10:12.302 [DEBUG] [Thread-66031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:10:12.302 [DEBUG] [Thread-66031] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:10:12.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:10:12.303 [DEBUG] [Thread-66031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:10:12.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:10:12.358 [DEBUG] [Thread-66031] [transport.py] [_log()] userauth is OK
2025-12-12T09:10:12.358 [DEBUG] [Thread-66031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:10:12.359 [DEBUG] [Thread-66031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:10:12.359 [DEBUG] [Thread-66031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:10:12.359 [DEBUG] [Thread-66031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:10:12.377 [INFO] [Thread-66031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:10:12.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:10:12.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:10:13.259 [DEBUG] [Thread-66031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:10:13.259 [DEBUG] [Thread-66031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:10:13.307 [DEBUG] [Thread-66031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:10:13.308 [DEBUG] [Thread-66031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:10:13.316 [DEBUG] [Thread-66031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:10:13.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:10:13.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:10:13.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:10:13.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:10:13.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:10:13.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:10:13.350 [DEBUG] [Thread-66031] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:10:17.440 [DEBUG] [Thread-66033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:18.446 [DEBUG] [Thread-66034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:26.472 [DEBUG] [Thread-66035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:31.537 [DEBUG] [Thread-66036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:33.492 [DEBUG] [Thread-66037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:35.510 [DEBUG] [Thread-66038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:43.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:10:43.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:10:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:10:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 10, 12), 16.93, 30.77, 0.0, 28.69, 13.59, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:10:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:10:12
2025-12-12T09:10:44.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:10:44.326 [DEBUG] [Thread-66039] [transport.py] [_log()] starting thread (client mode): 0xf81c3340
2025-12-12T09:10:44.326 [DEBUG] [Thread-66039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:10:44.347 [DEBUG] [Thread-66039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:10:44.348 [INFO] [Thread-66039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] client lang: <none>
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] server lang: <none>
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] kex follows: False
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] Compression: none
2025-12-12T09:10:44.351 [DEBUG] [Thread-66039] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:10:44.368 [DEBUG] [Thread-66039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:10:44.368 [DEBUG] [Thread-66039] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:10:44.369 [DEBUG] [Thread-66039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:10:44.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:10:44.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:10:44.371 [DEBUG] [Thread-66039] [transport.py] [_log()] userauth is OK
2025-12-12T09:10:44.371 [DEBUG] [Thread-66039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:10:44.371 [DEBUG] [Thread-66039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:10:44.372 [DEBUG] [Thread-66039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:10:44.372 [DEBUG] [Thread-66039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:10:44.389 [INFO] [Thread-66039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:10:44.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:10:44.529 [DEBUG] [Thread-66041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:45.190 [DEBUG] [Thread-66039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:10:45.190 [DEBUG] [Thread-66039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:10:45.190 [DEBUG] [Thread-66039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:10:45.231 [DEBUG] [Thread-66039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:10:45.231 [DEBUG] [Thread-66039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:10:45.233 [DEBUG] [Thread-66039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:10:45.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:10:45.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:10:45.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:10:45.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:10:45.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:10:45.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:10:45.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:10:45.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.298652 -999.00  +13.50  21.15     36   -1.10 1 2 1 1 1   888    0 17.91 119.57 ----- 25.4 21.1 354.9 31.9 16.2 -12.1 15.8 -11.0 15.7 -10.6 15.9 -11.4
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.298652
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:10:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:10:12', tmtdew=16.93, humidity=30.77, cloud=0.0, wind=28.69, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:10:03.533', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:10:45.253 [DEBUG] [Thread-66039] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:10:45.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:10:45.341 [DEBUG] [Thread-66043] [transport.py] [_log()] starting thread (client mode): 0xf57279a0
2025-12-12T09:10:45.342 [DEBUG] [Thread-66043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:10:45.358 [DEBUG] [Thread-66043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:10:45.358 [INFO] [Thread-66043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] client lang: <none>
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] server lang: <none>
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] kex follows: False
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:10:45.365 [DEBUG] [Thread-66043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:10:45.366 [DEBUG] [Thread-66043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:10:45.366 [DEBUG] [Thread-66043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:10:45.366 [DEBUG] [Thread-66043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:10:45.366 [DEBUG] [Thread-66043] [transport.py] [_log()] Compression: none
2025-12-12T09:10:45.366 [DEBUG] [Thread-66043] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:10:45.422 [DEBUG] [Thread-66043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:10:45.422 [DEBUG] [Thread-66043] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:10:45.422 [DEBUG] [Thread-66043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:10:45.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:10:45.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:10:45.479 [DEBUG] [Thread-66043] [transport.py] [_log()] userauth is OK
2025-12-12T09:10:45.479 [DEBUG] [Thread-66043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:10:45.479 [DEBUG] [Thread-66043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:10:45.479 [DEBUG] [Thread-66043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:10:45.479 [DEBUG] [Thread-66043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:10:45.493 [INFO] [Thread-66043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:10:45.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:10:45.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:10:46.339 [DEBUG] [Thread-66043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:10:46.339 [DEBUG] [Thread-66043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:10:46.393 [DEBUG] [Thread-66043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:10:46.393 [DEBUG] [Thread-66043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:10:46.406 [DEBUG] [Thread-66043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:10:46.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:10:46.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:10:46.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:10:46.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:10:46.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:10:46.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:10:46.460 [DEBUG] [Thread-66043] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:10:48.542 [DEBUG] [Thread-66045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:10:53.572 [DEBUG] [Thread-66046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:02.592 [DEBUG] [Thread-66047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:03.600 [DEBUG] [Thread-66048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:07.545 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:07.546 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:11.625 [DEBUG] [Thread-66049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:11:16.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:11:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:11:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 10, 44), 16.92, 30.67, 0.0, 24.72, 13.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:11:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:10:44
2025-12-12T09:11:17.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:11:17.468 [DEBUG] [Thread-66050] [transport.py] [_log()] starting thread (client mode): 0xf571bb50
2025-12-12T09:11:17.468 [DEBUG] [Thread-66050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:11:17.482 [DEBUG] [Thread-66050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:11:17.482 [INFO] [Thread-66050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:11:17.485 [DEBUG] [Thread-66050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:11:17.485 [DEBUG] [Thread-66050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:11:17.485 [DEBUG] [Thread-66050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] client lang: <none>
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] server lang: <none>
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] kex follows: False
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] Compression: none
2025-12-12T09:11:17.486 [DEBUG] [Thread-66050] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:11:17.501 [DEBUG] [Thread-66050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:11:17.501 [DEBUG] [Thread-66050] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:11:17.501 [DEBUG] [Thread-66050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:11:17.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:11:17.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:11:17.502 [DEBUG] [Thread-66050] [transport.py] [_log()] userauth is OK
2025-12-12T09:11:17.502 [DEBUG] [Thread-66050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:11:17.502 [DEBUG] [Thread-66050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:11:17.502 [DEBUG] [Thread-66050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:11:17.502 [DEBUG] [Thread-66050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:11:17.511 [INFO] [Thread-66050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:11:17.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:11:18.121 [DEBUG] [Thread-66050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:11:18.122 [DEBUG] [Thread-66050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:11:18.122 [DEBUG] [Thread-66050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:11:18.163 [DEBUG] [Thread-66050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:11:18.163 [DEBUG] [Thread-66050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:11:18.165 [DEBUG] [Thread-66050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:11:18.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:11:18.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:11:18.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:11:18.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:11:18.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:11:18.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:11:18.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.299057 -999.00  +13.40  18.63     36   -1.20 1 2 1 1 1   888    0 17.69 107.63 ----- 18.6 18.6 350.3 33.1 16.2 -11.3 15.9 -11.5 15.7 -10.5 15.9 -10.5
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.299057
2025-12-12T09:11:18.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:11:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:11:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:11:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:11:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:11:18.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:10:44', tmtdew=16.92, humidity=30.67, cloud=0.0, wind=24.72, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:10:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:11:18.183 [DEBUG] [Thread-66050] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:11:18.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:11:18.269 [DEBUG] [Thread-66053] [transport.py] [_log()] starting thread (client mode): 0xf5770790
2025-12-12T09:11:18.269 [DEBUG] [Thread-66053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:11:18.283 [DEBUG] [Thread-66053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:11:18.283 [INFO] [Thread-66053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] client lang: <none>
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] server lang: <none>
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] kex follows: False
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] Compression: none
2025-12-12T09:11:18.292 [DEBUG] [Thread-66053] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:11:18.350 [DEBUG] [Thread-66053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:11:18.350 [DEBUG] [Thread-66053] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:11:18.351 [DEBUG] [Thread-66053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:11:18.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:11:18.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:11:18.409 [DEBUG] [Thread-66053] [transport.py] [_log()] userauth is OK
2025-12-12T09:11:18.409 [DEBUG] [Thread-66053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:11:18.409 [DEBUG] [Thread-66053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:11:18.409 [DEBUG] [Thread-66053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:11:18.409 [DEBUG] [Thread-66053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:11:18.425 [INFO] [Thread-66053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:11:18.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:11:18.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:11:18.643 [DEBUG] [Thread-66055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:19.271 [DEBUG] [Thread-66053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:11:19.271 [DEBUG] [Thread-66053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:11:19.319 [DEBUG] [Thread-66053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:11:19.319 [DEBUG] [Thread-66053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:11:19.328 [DEBUG] [Thread-66053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:11:19.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:11:19.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:11:19.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:11:19.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:11:19.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:11:19.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:11:19.365 [DEBUG] [Thread-66053] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:11:20.662 [DEBUG] [Thread-66056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:29.687 [DEBUG] [Thread-66057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:31.588 [DEBUG] [Thread-66058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:33.702 [DEBUG] [Thread-66059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:38.716 [DEBUG] [Thread-66060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:47.737 [DEBUG] [Thread-66061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:48.745 [DEBUG] [Thread-66062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:11:49.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:11:49.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:11:49.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:11:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 11, 16), 17.05, 30.42, 0.0, 24.61, 13.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:11:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:11:16
2025-12-12T09:11:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:11:50.415 [DEBUG] [Thread-66063] [transport.py] [_log()] starting thread (client mode): 0xf571ace0
2025-12-12T09:11:50.415 [DEBUG] [Thread-66063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:11:50.435 [DEBUG] [Thread-66063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:11:50.435 [INFO] [Thread-66063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:50.438 [DEBUG] [Thread-66063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] client lang: <none>
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] server lang: <none>
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] kex follows: False
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] Compression: none
2025-12-12T09:11:50.439 [DEBUG] [Thread-66063] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:11:50.455 [DEBUG] [Thread-66063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:11:50.455 [DEBUG] [Thread-66063] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:11:50.455 [DEBUG] [Thread-66063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:11:50.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:11:50.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:11:50.456 [DEBUG] [Thread-66063] [transport.py] [_log()] userauth is OK
2025-12-12T09:11:50.456 [DEBUG] [Thread-66063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:11:50.456 [DEBUG] [Thread-66063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:11:50.456 [DEBUG] [Thread-66063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:11:50.456 [DEBUG] [Thread-66063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:11:50.464 [INFO] [Thread-66063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:11:50.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:11:51.240 [DEBUG] [Thread-66063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:11:51.240 [DEBUG] [Thread-66063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:11:51.240 [DEBUG] [Thread-66063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:11:51.281 [DEBUG] [Thread-66063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:11:51.281 [DEBUG] [Thread-66063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:11:51.284 [DEBUG] [Thread-66063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:11:51.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:11:51.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:11:51.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:11:51.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:11:51.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:11:51.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:11:51.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:11:51.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:11:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:11:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.299404 -999.00  +13.50  16.49     36   -1.10 1 2 1 1 1   888    0 17.34 93.66 ----- 16.5 16.5 353.5 32.3 16.2 -11.7 15.9 -11.7 15.7 -10.5 15.9 -11.2
2025-12-12T09:11:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:11:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:11:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.299404
2025-12-12T09:11:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:11:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:11:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:11:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:11:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:11:51.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:11:16', tmtdew=17.05, humidity=30.42, cloud=0.0, wind=24.61, temperature=13.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:11:08.506', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:11:51.306 [DEBUG] [Thread-66063] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:11:51.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:11:51.405 [DEBUG] [Thread-66066] [transport.py] [_log()] starting thread (client mode): 0xf572dcc0
2025-12-12T09:11:51.405 [DEBUG] [Thread-66066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:11:51.420 [DEBUG] [Thread-66066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:11:51.420 [INFO] [Thread-66066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] client lang: <none>
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] server lang: <none>
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] kex follows: False
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:11:51.428 [DEBUG] [Thread-66066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:11:51.429 [DEBUG] [Thread-66066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:11:51.429 [DEBUG] [Thread-66066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:11:51.429 [DEBUG] [Thread-66066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:11:51.429 [DEBUG] [Thread-66066] [transport.py] [_log()] Compression: none
2025-12-12T09:11:51.429 [DEBUG] [Thread-66066] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:11:51.487 [DEBUG] [Thread-66066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:11:51.488 [DEBUG] [Thread-66066] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:11:51.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:11:51.489 [DEBUG] [Thread-66066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:11:51.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:11:51.543 [DEBUG] [Thread-66066] [transport.py] [_log()] userauth is OK
2025-12-12T09:11:51.543 [DEBUG] [Thread-66066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:11:51.543 [DEBUG] [Thread-66066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:11:51.543 [DEBUG] [Thread-66066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:11:51.543 [DEBUG] [Thread-66066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:11:51.568 [INFO] [Thread-66066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:11:51.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:11:51.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:11:52.422 [DEBUG] [Thread-66066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:11:52.422 [DEBUG] [Thread-66066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:11:52.470 [DEBUG] [Thread-66066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:11:52.470 [DEBUG] [Thread-66066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:11:52.480 [DEBUG] [Thread-66066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:11:52.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:11:52.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:11:52.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:11:52.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:11:52.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:11:52.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:11:52.517 [DEBUG] [Thread-66066] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:11:56.768 [DEBUG] [Thread-66068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:03.789 [DEBUG] [Thread-66069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:05.823 [DEBUG] [Thread-66070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:07.687 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:07.688 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:14.844 [DEBUG] [Thread-66071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:18.853 [DEBUG] [Thread-66072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:12:22.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:12:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:12:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 11, 48), 17.23, 30.34, 0.0, 23.73, 13.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:12:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:11:48
2025-12-12T09:12:23.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:12:23.518 [DEBUG] [Thread-66073] [transport.py] [_log()] starting thread (client mode): 0xf5719de0
2025-12-12T09:12:23.518 [DEBUG] [Thread-66073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:12:23.539 [DEBUG] [Thread-66073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:12:23.539 [INFO] [Thread-66073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] client lang: <none>
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] server lang: <none>
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] kex follows: False
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] Compression: none
2025-12-12T09:12:23.543 [DEBUG] [Thread-66073] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:12:23.560 [DEBUG] [Thread-66073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:12:23.560 [DEBUG] [Thread-66073] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:12:23.561 [DEBUG] [Thread-66073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:12:23.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:12:23.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:12:23.563 [DEBUG] [Thread-66073] [transport.py] [_log()] userauth is OK
2025-12-12T09:12:23.563 [DEBUG] [Thread-66073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:12:23.563 [DEBUG] [Thread-66073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:12:23.563 [DEBUG] [Thread-66073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:12:23.563 [DEBUG] [Thread-66073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:12:23.589 [INFO] [Thread-66073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:12:23.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:12:23.866 [DEBUG] [Thread-66075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:24.226 [DEBUG] [Thread-66073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:12:24.227 [DEBUG] [Thread-66073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:12:24.227 [DEBUG] [Thread-66073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:12:24.268 [DEBUG] [Thread-66073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:12:24.268 [DEBUG] [Thread-66073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:12:24.272 [DEBUG] [Thread-66073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:12:24.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:12:24.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:12:24.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:12:24.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:12:24.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:12:24.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:12:24.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:12:24.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:12:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:12:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.299694 -999.00  +13.60  30.00     36   -1.10 1 2 2 1 1   888    0 16.93 85.53 ----- 25.1 30.0 340.8 35.9 16.2 -11.9 16.0 -11.6 15.7 -10.6 15.9 -11.0
2025-12-12T09:12:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:12:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:12:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.299694
2025-12-12T09:12:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:12:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:12:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:12:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:12:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:12:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:11:48', tmtdew=17.23, humidity=30.34, cloud=0.0, wind=23.73, temperature=13.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:11:33.562', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:12:24.298 [DEBUG] [Thread-66073] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:12:24.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:12:24.394 [DEBUG] [Thread-66077] [transport.py] [_log()] starting thread (client mode): 0xf5770d00
2025-12-12T09:12:24.394 [DEBUG] [Thread-66077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:12:24.409 [DEBUG] [Thread-66077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:12:24.409 [INFO] [Thread-66077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:12:24.416 [DEBUG] [Thread-66077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:12:24.416 [DEBUG] [Thread-66077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:12:24.416 [DEBUG] [Thread-66077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:12:24.416 [DEBUG] [Thread-66077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:24.416 [DEBUG] [Thread-66077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:24.416 [DEBUG] [Thread-66077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] client lang: <none>
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] server lang: <none>
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] kex follows: False
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] Compression: none
2025-12-12T09:12:24.417 [DEBUG] [Thread-66077] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:12:24.476 [DEBUG] [Thread-66077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:12:24.476 [DEBUG] [Thread-66077] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:12:24.477 [DEBUG] [Thread-66077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:12:24.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:12:24.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:12:24.533 [DEBUG] [Thread-66077] [transport.py] [_log()] userauth is OK
2025-12-12T09:12:24.533 [DEBUG] [Thread-66077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:12:24.533 [DEBUG] [Thread-66077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:12:24.533 [DEBUG] [Thread-66077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:12:24.533 [DEBUG] [Thread-66077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:12:24.553 [INFO] [Thread-66077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:12:24.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:12:24.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:12:25.428 [DEBUG] [Thread-66077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:12:25.428 [DEBUG] [Thread-66077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:12:25.477 [DEBUG] [Thread-66077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:12:25.477 [DEBUG] [Thread-66077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:12:25.495 [DEBUG] [Thread-66077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:12:25.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:12:25.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:12:25.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:12:25.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:12:25.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:12:25.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:12:25.532 [DEBUG] [Thread-66077] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:12:31.636 [DEBUG] [Thread-66079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:32.889 [DEBUG] [Thread-66080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:33.896 [DEBUG] [Thread-66081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:41.936 [DEBUG] [Thread-66082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:48.957 [DEBUG] [Thread-66083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:50.970 [DEBUG] [Thread-66084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:12:55.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:12:55.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:12:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:12:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 12, 52), 17.39, 29.74, 0.0, 22.9, 14.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:12:56.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:12:52
2025-12-12T09:12:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:12:56.568 [DEBUG] [Thread-66085] [transport.py] [_log()] starting thread (client mode): 0xf5772f80
2025-12-12T09:12:56.568 [DEBUG] [Thread-66085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:12:56.588 [DEBUG] [Thread-66085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:12:56.588 [INFO] [Thread-66085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:56.591 [DEBUG] [Thread-66085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] client lang: <none>
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] server lang: <none>
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] kex follows: False
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] Compression: none
2025-12-12T09:12:56.592 [DEBUG] [Thread-66085] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:12:56.607 [DEBUG] [Thread-66085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:12:56.608 [DEBUG] [Thread-66085] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:12:56.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:12:56.608 [DEBUG] [Thread-66085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:12:56.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:12:56.609 [DEBUG] [Thread-66085] [transport.py] [_log()] userauth is OK
2025-12-12T09:12:56.609 [DEBUG] [Thread-66085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:12:56.609 [DEBUG] [Thread-66085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:12:56.609 [DEBUG] [Thread-66085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:12:56.609 [DEBUG] [Thread-66085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:12:56.620 [INFO] [Thread-66085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:12:56.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:12:57.363 [DEBUG] [Thread-66085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:12:57.363 [DEBUG] [Thread-66085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:12:57.363 [DEBUG] [Thread-66085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:12:57.405 [DEBUG] [Thread-66085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:12:57.405 [DEBUG] [Thread-66085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:12:57.406 [DEBUG] [Thread-66085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:12:57.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:12:57.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:12:57.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:12:57.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:12:57.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:12:57.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:12:57.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.300041 -999.00  +13.40  21.18     36   -1.30 1 2 1 1 1   888    0 16.86 81.31 ----- 16.7 21.2 25.4 40.4 16.2 -11.6 15.9 -11.6 15.7 -10.9 15.9 -10.7
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.300041
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:12:57.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:12:52', tmtdew=17.39, humidity=29.74, cloud=0.0, wind=22.9, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:12:03.542', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:12:57.425 [DEBUG] [Thread-66085] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:12:57.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:12:57.511 [DEBUG] [Thread-66088] [transport.py] [_log()] starting thread (client mode): 0xf5718e80
2025-12-12T09:12:57.511 [DEBUG] [Thread-66088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:12:57.525 [DEBUG] [Thread-66088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:12:57.525 [INFO] [Thread-66088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] client lang: <none>
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] server lang: <none>
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] kex follows: False
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] Compression: none
2025-12-12T09:12:57.533 [DEBUG] [Thread-66088] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:12:57.588 [DEBUG] [Thread-66088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:12:57.588 [DEBUG] [Thread-66088] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:12:57.589 [DEBUG] [Thread-66088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:12:57.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:12:57.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:12:57.645 [DEBUG] [Thread-66088] [transport.py] [_log()] userauth is OK
2025-12-12T09:12:57.645 [DEBUG] [Thread-66088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:12:57.645 [DEBUG] [Thread-66088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:12:57.645 [DEBUG] [Thread-66088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:12:57.645 [DEBUG] [Thread-66088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:12:57.659 [INFO] [Thread-66088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:12:57.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:12:57.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:12:58.491 [DEBUG] [Thread-66088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:12:58.491 [DEBUG] [Thread-66088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:12:58.539 [DEBUG] [Thread-66088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:12:58.539 [DEBUG] [Thread-66088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:12:58.548 [DEBUG] [Thread-66088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:12:58.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:12:58.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:12:58.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:12:58.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:12:58.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:12:58.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:12:58.579 [DEBUG] [Thread-66088] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:12:59.991 [DEBUG] [Thread-66090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:04.005 [DEBUG] [Thread-66091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:07.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:07.829 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:09.046 [DEBUG] [Thread-66092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:18.071 [DEBUG] [Thread-66093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:19.079 [DEBUG] [Thread-66094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:27.102 [DEBUG] [Thread-66095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:28.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:13:28.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:13:28.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:13:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 13, 24), 17.43, 29.67, 0.0, 21.01, 14.11, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:13:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:13:24
2025-12-12T09:13:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:13:29.570 [DEBUG] [Thread-66096] [transport.py] [_log()] starting thread (client mode): 0xf81c3d60
2025-12-12T09:13:29.570 [DEBUG] [Thread-66096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:13:29.590 [DEBUG] [Thread-66096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:13:29.590 [INFO] [Thread-66096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:13:29.593 [DEBUG] [Thread-66096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:13:29.593 [DEBUG] [Thread-66096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:13:29.593 [DEBUG] [Thread-66096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:13:29.593 [DEBUG] [Thread-66096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:13:29.593 [DEBUG] [Thread-66096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:13:29.593 [DEBUG] [Thread-66096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] client lang: <none>
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] server lang: <none>
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] kex follows: False
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] Compression: none
2025-12-12T09:13:29.594 [DEBUG] [Thread-66096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:13:29.611 [DEBUG] [Thread-66096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:13:29.611 [DEBUG] [Thread-66096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:13:29.612 [DEBUG] [Thread-66096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:13:29.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:13:29.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:13:29.613 [DEBUG] [Thread-66096] [transport.py] [_log()] userauth is OK
2025-12-12T09:13:29.614 [DEBUG] [Thread-66096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:13:29.614 [DEBUG] [Thread-66096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:13:29.614 [DEBUG] [Thread-66096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:13:29.614 [DEBUG] [Thread-66096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:13:29.628 [INFO] [Thread-66096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:13:29.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:13:30.207 [DEBUG] [Thread-66096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:13:30.207 [DEBUG] [Thread-66096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:13:30.207 [DEBUG] [Thread-66096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:13:30.248 [DEBUG] [Thread-66096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:13:30.248 [DEBUG] [Thread-66096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:13:30.250 [DEBUG] [Thread-66096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:13:30.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:13:30.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:13:30.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:13:30.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:13:30.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:13:30.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:13:30.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:13:30.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:13:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:13:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.300735 -999.00  +13.40  28.81     36   -1.20 1 2 1 1 1   888    0 16.61 72.94 ----- 20.7 28.8 344.4 37.2 16.2 -11.9 15.9 -11.7 15.7 -10.9 15.9 -10.8
2025-12-12T09:13:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:13:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:13:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.300735
2025-12-12T09:13:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:13:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:13:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:13:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:13:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:13:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:13:24', tmtdew=17.43, humidity=29.67, cloud=0.0, wind=21.01, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:13:03.504', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:13:30.272 [DEBUG] [Thread-66096] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:13:30.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:13:30.357 [DEBUG] [Thread-66099] [transport.py] [_log()] starting thread (client mode): 0xf81c1120
2025-12-12T09:13:30.357 [DEBUG] [Thread-66099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:13:30.373 [DEBUG] [Thread-66099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:13:30.373 [INFO] [Thread-66099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] client lang: <none>
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] server lang: <none>
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] kex follows: False
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:13:30.381 [DEBUG] [Thread-66099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:13:30.382 [DEBUG] [Thread-66099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:13:30.382 [DEBUG] [Thread-66099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:13:30.382 [DEBUG] [Thread-66099] [transport.py] [_log()] Compression: none
2025-12-12T09:13:30.382 [DEBUG] [Thread-66099] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:13:30.439 [DEBUG] [Thread-66099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:13:30.440 [DEBUG] [Thread-66099] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:13:30.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:13:30.441 [DEBUG] [Thread-66099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:13:30.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:13:30.499 [DEBUG] [Thread-66099] [transport.py] [_log()] userauth is OK
2025-12-12T09:13:30.500 [DEBUG] [Thread-66099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:13:30.500 [DEBUG] [Thread-66099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:13:30.500 [DEBUG] [Thread-66099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:13:30.500 [DEBUG] [Thread-66099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:13:30.519 [INFO] [Thread-66099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:13:30.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:13:30.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:13:31.370 [DEBUG] [Thread-66099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:13:31.370 [DEBUG] [Thread-66099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:13:31.421 [DEBUG] [Thread-66099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:13:31.421 [DEBUG] [Thread-66099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:13:31.429 [DEBUG] [Thread-66099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:13:31.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:13:31.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:13:31.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:13:31.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:13:31.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:13:31.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:13:31.467 [DEBUG] [Thread-66099] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:13:31.681 [DEBUG] [Thread-66101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:34.117 [DEBUG] [Thread-66102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:36.131 [DEBUG] [Thread-66103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:45.152 [DEBUG] [Thread-66104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:49.166 [DEBUG] [Thread-66105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:13:54.188 [DEBUG] [Thread-66106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:01.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:14:01.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:14:01.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:14:02.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 13, 56), 17.44, 29.65, 0.0, 28.0, 14.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:14:02.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:13:56
2025-12-12T09:14:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:14:02.458 [DEBUG] [Thread-66107] [transport.py] [_log()] starting thread (client mode): 0xf5718e80
2025-12-12T09:14:02.458 [DEBUG] [Thread-66107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:14:02.478 [DEBUG] [Thread-66107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:14:02.478 [INFO] [Thread-66107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] client lang: <none>
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] server lang: <none>
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] kex follows: False
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:14:02.481 [DEBUG] [Thread-66107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:14:02.482 [DEBUG] [Thread-66107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:14:02.482 [DEBUG] [Thread-66107] [transport.py] [_log()] Compression: none
2025-12-12T09:14:02.482 [DEBUG] [Thread-66107] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:14:02.489 [DEBUG] [Thread-66107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:14:02.490 [DEBUG] [Thread-66107] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:14:02.490 [DEBUG] [Thread-66107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:14:02.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:14:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:14:02.491 [DEBUG] [Thread-66107] [transport.py] [_log()] userauth is OK
2025-12-12T09:14:02.492 [DEBUG] [Thread-66107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:14:02.492 [DEBUG] [Thread-66107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:14:02.492 [DEBUG] [Thread-66107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:14:02.492 [DEBUG] [Thread-66107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:14:02.508 [INFO] [Thread-66107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:14:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:14:03.209 [DEBUG] [Thread-66109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:03.307 [DEBUG] [Thread-66107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:14:03.308 [DEBUG] [Thread-66107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:14:03.308 [DEBUG] [Thread-66107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:14:03.349 [DEBUG] [Thread-66107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:14:03.349 [DEBUG] [Thread-66107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:14:03.353 [DEBUG] [Thread-66107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:14:03.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:14:03.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:14:03.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:14:03.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:14:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:14:03.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:14:03.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:14:03.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:14:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:14:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.301083 -999.00  +13.40  24.21     36   -1.30 1 2 1 1 1   888    0 16.63 71.96 ----- 24.8 24.2 330.8 34.5 16.2 -11.7 15.9 -11.7 15.7 -10.5 16.0 -10.7
2025-12-12T09:14:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:14:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:14:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.301083
2025-12-12T09:14:03.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:14:03.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:14:03.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:14:03.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:14:03.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:14:03.378 [DEBUG] [Thread-66107] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:14:03.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:13:56', tmtdew=17.44, humidity=29.65, cloud=0.0, wind=28.0, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:13:33.571', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:14:03.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:14:03.470 [DEBUG] [Thread-66111] [transport.py] [_log()] starting thread (client mode): 0xf57bff10
2025-12-12T09:14:03.470 [DEBUG] [Thread-66111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:14:03.485 [DEBUG] [Thread-66111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:14:03.485 [INFO] [Thread-66111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:14:03.493 [DEBUG] [Thread-66111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:03.494 [DEBUG] [Thread-66111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] client lang: <none>
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] server lang: <none>
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] kex follows: False
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:14:03.495 [DEBUG] [Thread-66111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:14:03.496 [DEBUG] [Thread-66111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:14:03.496 [DEBUG] [Thread-66111] [transport.py] [_log()] Compression: none
2025-12-12T09:14:03.496 [DEBUG] [Thread-66111] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:14:03.558 [DEBUG] [Thread-66111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:14:03.559 [DEBUG] [Thread-66111] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:14:03.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:14:03.560 [DEBUG] [Thread-66111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:14:03.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:14:03.617 [DEBUG] [Thread-66111] [transport.py] [_log()] userauth is OK
2025-12-12T09:14:03.617 [DEBUG] [Thread-66111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:14:03.617 [DEBUG] [Thread-66111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:14:03.617 [DEBUG] [Thread-66111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:14:03.617 [DEBUG] [Thread-66111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:14:03.636 [INFO] [Thread-66111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:14:03.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:14:03.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:14:04.217 [DEBUG] [Thread-66113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:04.516 [DEBUG] [Thread-66111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:14:04.516 [DEBUG] [Thread-66111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:14:04.564 [DEBUG] [Thread-66111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:14:04.564 [DEBUG] [Thread-66111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:14:04.573 [DEBUG] [Thread-66111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:14:04.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:14:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:14:04.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:14:04.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:14:04.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:14:04.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:14:04.608 [DEBUG] [Thread-66111] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:14:07.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:07.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:12.255 [DEBUG] [Thread-66114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:19.271 [DEBUG] [Thread-66115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:21.283 [DEBUG] [Thread-66116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:30.304 [DEBUG] [Thread-66117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:31.729 [DEBUG] [Thread-66118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:34.316 [DEBUG] [Thread-66119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:34.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:14:34.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:14:34.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:14:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 14, 28), 17.46, 29.6, 0.0, 29.27, 14.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:14:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:14:28
2025-12-12T09:14:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:14:35.570 [DEBUG] [Thread-66120] [transport.py] [_log()] starting thread (client mode): 0xf5788400
2025-12-12T09:14:35.570 [DEBUG] [Thread-66120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:14:35.590 [DEBUG] [Thread-66120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:14:35.590 [INFO] [Thread-66120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:14:35.593 [DEBUG] [Thread-66120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:14:35.593 [DEBUG] [Thread-66120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] client lang: <none>
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] server lang: <none>
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] kex follows: False
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] Compression: none
2025-12-12T09:14:35.594 [DEBUG] [Thread-66120] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:14:35.611 [DEBUG] [Thread-66120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:14:35.612 [DEBUG] [Thread-66120] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:14:35.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:14:35.613 [DEBUG] [Thread-66120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:14:35.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:14:35.615 [DEBUG] [Thread-66120] [transport.py] [_log()] userauth is OK
2025-12-12T09:14:35.615 [DEBUG] [Thread-66120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:14:35.615 [DEBUG] [Thread-66120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:14:35.615 [DEBUG] [Thread-66120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:14:35.616 [DEBUG] [Thread-66120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:14:35.648 [INFO] [Thread-66120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:14:35.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:14:36.284 [DEBUG] [Thread-66120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:14:36.285 [DEBUG] [Thread-66120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:14:36.285 [DEBUG] [Thread-66120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:14:36.326 [DEBUG] [Thread-66120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:14:36.326 [DEBUG] [Thread-66120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:14:36.330 [DEBUG] [Thread-66120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:14:36.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:14:36.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:14:36.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:14:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:14:36.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:14:36.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:14:36.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:14:36.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:14:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:14:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.301430 -999.00  +13.50  34.93     36   -1.20 1 2 2 1 1   888    0 15.89 54.32 ----- 24.7 34.9 337.6 43.5 16.2 -11.6 15.9 -11.3 15.7 -10.6 16.0 -10.6
2025-12-12T09:14:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:14:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:14:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.301430
2025-12-12T09:14:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:14:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:14:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:14:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:14:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:14:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:14:28', tmtdew=17.46, humidity=29.6, cloud=0.0, wind=29.27, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:14:03.552', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:14:36.359 [DEBUG] [Thread-66120] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:14:36.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:14:36.455 [DEBUG] [Thread-66123] [transport.py] [_log()] starting thread (client mode): 0xf572a230
2025-12-12T09:14:36.455 [DEBUG] [Thread-66123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:14:36.469 [DEBUG] [Thread-66123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:14:36.469 [INFO] [Thread-66123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] client lang: <none>
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] server lang: <none>
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] kex follows: False
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:14:36.477 [DEBUG] [Thread-66123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:14:36.478 [DEBUG] [Thread-66123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:14:36.478 [DEBUG] [Thread-66123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:14:36.478 [DEBUG] [Thread-66123] [transport.py] [_log()] Compression: none
2025-12-12T09:14:36.478 [DEBUG] [Thread-66123] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:14:36.533 [DEBUG] [Thread-66123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:14:36.534 [DEBUG] [Thread-66123] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:14:36.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:14:36.535 [DEBUG] [Thread-66123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:14:36.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:14:36.590 [DEBUG] [Thread-66123] [transport.py] [_log()] userauth is OK
2025-12-12T09:14:36.590 [DEBUG] [Thread-66123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:14:36.591 [DEBUG] [Thread-66123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:14:36.591 [DEBUG] [Thread-66123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:14:36.591 [DEBUG] [Thread-66123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:14:36.608 [INFO] [Thread-66123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:14:36.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:14:36.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:14:37.433 [DEBUG] [Thread-66123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:14:37.433 [DEBUG] [Thread-66123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:14:37.481 [DEBUG] [Thread-66123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:14:37.481 [DEBUG] [Thread-66123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:14:37.491 [DEBUG] [Thread-66123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:14:37.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:14:37.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:14:37.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:14:37.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:14:37.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:14:37.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:14:37.527 [DEBUG] [Thread-66123] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:14:39.332 [DEBUG] [Thread-66125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:48.356 [DEBUG] [Thread-66126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:49.361 [DEBUG] [Thread-66127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:14:57.386 [DEBUG] [Thread-66128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:04.402 [DEBUG] [Thread-66129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:06.413 [DEBUG] [Thread-66130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:07.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:15:07.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:15:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:15:08.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:08.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:08.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 15), 17.5, 29.5, 0.0, 28.71, 14.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:15:08.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:15:00
2025-12-12T09:15:08.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:15:08.504 [DEBUG] [Thread-66131] [transport.py] [_log()] starting thread (client mode): 0xf572c250
2025-12-12T09:15:08.504 [DEBUG] [Thread-66131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:15:08.524 [DEBUG] [Thread-66131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:15:08.524 [INFO] [Thread-66131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] client lang: <none>
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] server lang: <none>
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] kex follows: False
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:15:08.527 [DEBUG] [Thread-66131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:15:08.528 [DEBUG] [Thread-66131] [transport.py] [_log()] Compression: none
2025-12-12T09:15:08.528 [DEBUG] [Thread-66131] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:15:08.536 [DEBUG] [Thread-66131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:15:08.536 [DEBUG] [Thread-66131] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:15:08.536 [DEBUG] [Thread-66131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:15:08.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:15:08.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:15:08.538 [DEBUG] [Thread-66131] [transport.py] [_log()] userauth is OK
2025-12-12T09:15:08.538 [DEBUG] [Thread-66131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:15:08.538 [DEBUG] [Thread-66131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:15:08.538 [DEBUG] [Thread-66131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:15:08.538 [DEBUG] [Thread-66131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:15:08.556 [INFO] [Thread-66131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:15:08.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:15:09.824 [DEBUG] [Thread-66131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:15:09.824 [DEBUG] [Thread-66131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:15:09.824 [DEBUG] [Thread-66131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:15:09.865 [DEBUG] [Thread-66131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:15:09.865 [DEBUG] [Thread-66131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:15:09.869 [DEBUG] [Thread-66131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:15:09.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:15:09.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:15:09.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:15:09.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:15:09.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:15:09.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:15:09.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:15:09.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:15:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:15:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.301835 -999.00  +13.50  28.62     35   -1.30 1 2 1 1 1   888    0 16.05 42.34 ----- 28.6 28.6 339.0 44.0 16.2 -11.6 16.0 -12.1 15.7 -10.6 16.0 -10.5
2025-12-12T09:15:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:15:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:15:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.301835
2025-12-12T09:15:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:15:09.898 [DEBUG] [Thread-66131] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:15:09.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:15:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:15:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:15:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:15:09.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:15:00', tmtdew=17.5, humidity=29.5, cloud=0.0, wind=28.71, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:14:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:15:09.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:15:09.997 [DEBUG] [Thread-66134] [transport.py] [_log()] starting thread (client mode): 0xf57be860
2025-12-12T09:15:09.997 [DEBUG] [Thread-66134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:15:10.015 [DEBUG] [Thread-66134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:15:10.015 [INFO] [Thread-66134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:15:10.024 [DEBUG] [Thread-66134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] client lang: <none>
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] server lang: <none>
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] kex follows: False
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:15:10.025 [DEBUG] [Thread-66134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:15:10.026 [DEBUG] [Thread-66134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:15:10.026 [DEBUG] [Thread-66134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:15:10.026 [DEBUG] [Thread-66134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:15:10.026 [DEBUG] [Thread-66134] [transport.py] [_log()] Compression: none
2025-12-12T09:15:10.026 [DEBUG] [Thread-66134] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:15:10.087 [DEBUG] [Thread-66134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:15:10.088 [DEBUG] [Thread-66134] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:15:10.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:15:10.089 [DEBUG] [Thread-66134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:15:10.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:15:10.148 [DEBUG] [Thread-66134] [transport.py] [_log()] userauth is OK
2025-12-12T09:15:10.148 [DEBUG] [Thread-66134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:15:10.148 [DEBUG] [Thread-66134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:15:10.148 [DEBUG] [Thread-66134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:15:10.149 [DEBUG] [Thread-66134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:15:10.170 [INFO] [Thread-66134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:15:10.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:15:10.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:15:11.072 [DEBUG] [Thread-66134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:15:11.073 [DEBUG] [Thread-66134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:15:11.123 [DEBUG] [Thread-66134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:15:11.123 [DEBUG] [Thread-66134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:15:11.135 [DEBUG] [Thread-66134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:15:11.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:15:11.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:15:11.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:15:11.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:15:11.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:15:11.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:15:11.171 [DEBUG] [Thread-66134] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:15:15.433 [DEBUG] [Thread-66136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:19.447 [DEBUG] [Thread-66137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:24.481 [DEBUG] [Thread-66138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:31.778 [DEBUG] [Thread-66139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:33.500 [DEBUG] [Thread-66140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:34.504 [DEBUG] [Thread-66141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:41.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:15:41.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:15:41.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:15:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 15, 32), 17.5, 29.5, 0.0, 29.45, 14.03, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:15:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:15:32
2025-12-12T09:15:42.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:15:42.155 [DEBUG] [Thread-66142] [transport.py] [_log()] starting thread (client mode): 0xf57898d0
2025-12-12T09:15:42.155 [DEBUG] [Thread-66142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:15:42.176 [DEBUG] [Thread-66142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:15:42.177 [INFO] [Thread-66142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] client lang: <none>
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] server lang: <none>
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] kex follows: False
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] Compression: none
2025-12-12T09:15:42.178 [DEBUG] [Thread-66142] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:15:42.190 [DEBUG] [Thread-66142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:15:42.190 [DEBUG] [Thread-66142] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:15:42.190 [DEBUG] [Thread-66142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:15:42.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:15:42.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:15:42.192 [DEBUG] [Thread-66142] [transport.py] [_log()] userauth is OK
2025-12-12T09:15:42.192 [DEBUG] [Thread-66142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:15:42.192 [DEBUG] [Thread-66142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:15:42.192 [DEBUG] [Thread-66142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:15:42.192 [DEBUG] [Thread-66142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:15:42.212 [INFO] [Thread-66142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:15:42.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:15:42.525 [DEBUG] [Thread-66144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:42.869 [DEBUG] [Thread-66142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:15:42.869 [DEBUG] [Thread-66142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:15:42.870 [DEBUG] [Thread-66142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:15:42.910 [DEBUG] [Thread-66142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:15:42.910 [DEBUG] [Thread-66142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:15:42.912 [DEBUG] [Thread-66142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:15:42.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:15:42.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:15:42.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:15:42.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:15:42.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:15:42.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:15:42.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:15:42.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:15:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:15:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.302124 -999.00  +13.50  20.16     35   -1.30 1 2 1 1 1   888    0 15.44 31.52 ----- 20.1 20.2 327.9 34.0 16.2 -11.4 16.0 -11.3 15.7 -10.4 16.0 -10.5
2025-12-12T09:15:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:15:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:15:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.302124
2025-12-12T09:15:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:15:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:15:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:15:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:15:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:15:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:15:32', tmtdew=17.5, humidity=29.5, cloud=0.0, wind=29.45, temperature=14.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:15:03.514', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:15:42.935 [DEBUG] [Thread-66142] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:15:43.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:15:43.034 [DEBUG] [Thread-66146] [transport.py] [_log()] starting thread (client mode): 0xf81542e0
2025-12-12T09:15:43.034 [DEBUG] [Thread-66146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:15:43.048 [DEBUG] [Thread-66146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:15:43.049 [INFO] [Thread-66146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:15:43.056 [DEBUG] [Thread-66146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:15:43.056 [DEBUG] [Thread-66146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:15:43.056 [DEBUG] [Thread-66146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:15:43.056 [DEBUG] [Thread-66146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:43.057 [DEBUG] [Thread-66146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:15:43.057 [DEBUG] [Thread-66146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:43.057 [DEBUG] [Thread-66146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:15:43.057 [DEBUG] [Thread-66146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:15:43.057 [DEBUG] [Thread-66146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:15:43.057 [DEBUG] [Thread-66146] [transport.py] [_log()] client lang: <none>
2025-12-12T09:15:43.065 [DEBUG] [Thread-66146] [transport.py] [_log()] server lang: <none>
2025-12-12T09:15:43.065 [DEBUG] [Thread-66146] [transport.py] [_log()] kex follows: False
2025-12-12T09:15:43.065 [DEBUG] [Thread-66146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:15:43.065 [DEBUG] [Thread-66146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:15:43.066 [DEBUG] [Thread-66146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:15:43.066 [DEBUG] [Thread-66146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:15:43.066 [DEBUG] [Thread-66146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:15:43.066 [DEBUG] [Thread-66146] [transport.py] [_log()] Compression: none
2025-12-12T09:15:43.066 [DEBUG] [Thread-66146] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:15:43.117 [DEBUG] [Thread-66146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:15:43.117 [DEBUG] [Thread-66146] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:15:43.118 [DEBUG] [Thread-66146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:15:43.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:15:43.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:15:43.176 [DEBUG] [Thread-66146] [transport.py] [_log()] userauth is OK
2025-12-12T09:15:43.176 [DEBUG] [Thread-66146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:15:43.177 [DEBUG] [Thread-66146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:15:43.177 [DEBUG] [Thread-66146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:15:43.177 [DEBUG] [Thread-66146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:15:43.196 [INFO] [Thread-66146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:15:43.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:15:43.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:15:44.046 [DEBUG] [Thread-66146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:15:44.047 [DEBUG] [Thread-66146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:15:44.094 [DEBUG] [Thread-66146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:15:44.094 [DEBUG] [Thread-66146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:15:44.103 [DEBUG] [Thread-66146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:15:44.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:15:44.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:15:44.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:15:44.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:15:44.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:15:44.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:15:44.141 [DEBUG] [Thread-66146] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:15:49.546 [DEBUG] [Thread-66148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:15:51.582 [DEBUG] [Thread-66149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:00.607 [DEBUG] [Thread-66150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:04.621 [DEBUG] [Thread-66151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:08.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:08.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:09.636 [DEBUG] [Thread-66152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:14.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:16:14.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:16:14.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:16:14.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 16, 4), 17.46, 29.6, 0.0, 22.18, 14.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:16:14.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:16:04
2025-12-12T09:16:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:16:15.123 [DEBUG] [Thread-66153] [transport.py] [_log()] starting thread (client mode): 0xf57b7760
2025-12-12T09:16:15.123 [DEBUG] [Thread-66153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:16:15.144 [DEBUG] [Thread-66153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:16:15.144 [INFO] [Thread-66153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] client lang: <none>
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] server lang: <none>
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] kex follows: False
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:16:15.147 [DEBUG] [Thread-66153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:16:15.148 [DEBUG] [Thread-66153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:16:15.148 [DEBUG] [Thread-66153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:16:15.148 [DEBUG] [Thread-66153] [transport.py] [_log()] Compression: none
2025-12-12T09:16:15.148 [DEBUG] [Thread-66153] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:16:15.167 [DEBUG] [Thread-66153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:16:15.168 [DEBUG] [Thread-66153] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:16:15.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:16:15.169 [DEBUG] [Thread-66153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:16:15.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:16:15.170 [DEBUG] [Thread-66153] [transport.py] [_log()] userauth is OK
2025-12-12T09:16:15.170 [DEBUG] [Thread-66153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:16:15.170 [DEBUG] [Thread-66153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:16:15.170 [DEBUG] [Thread-66153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:16:15.170 [DEBUG] [Thread-66153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:16:15.184 [INFO] [Thread-66153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:16:15.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:16:15.914 [DEBUG] [Thread-66153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:16:15.915 [DEBUG] [Thread-66153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:16:15.915 [DEBUG] [Thread-66153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:16:15.956 [DEBUG] [Thread-66153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:16:15.956 [DEBUG] [Thread-66153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:16:15.960 [DEBUG] [Thread-66153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:16:15.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:16:15.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:16:15.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:16:15.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:16:15.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:16:15.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:16:15.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:16:15.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:16:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:16:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.302472 -999.00  +13.50  22.60     35   -1.30 1 2 1 1 1   888    0 15.25 22.37 ----- 25.3 22.6 351.0 33.1 16.2 -11.6 15.8 -11.7 15.7 -10.4 16.0 -10.9
2025-12-12T09:16:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:16:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:16:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.302472
2025-12-12T09:16:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:16:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:16:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:16:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:16:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:16:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:16:04', tmtdew=17.46, humidity=29.6, cloud=0.0, wind=22.18, temperature=14.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:15:33.581', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:16:15.985 [DEBUG] [Thread-66153] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:16:16.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:16:16.077 [DEBUG] [Thread-66156] [transport.py] [_log()] starting thread (client mode): 0xf578a140
2025-12-12T09:16:16.077 [DEBUG] [Thread-66156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:16:16.091 [DEBUG] [Thread-66156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:16:16.092 [INFO] [Thread-66156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:16:16.099 [DEBUG] [Thread-66156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:16:16.099 [DEBUG] [Thread-66156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:16:16.099 [DEBUG] [Thread-66156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:16:16.099 [DEBUG] [Thread-66156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] client lang: <none>
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] server lang: <none>
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] kex follows: False
2025-12-12T09:16:16.100 [DEBUG] [Thread-66156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:16:16.101 [DEBUG] [Thread-66156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:16:16.101 [DEBUG] [Thread-66156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:16:16.101 [DEBUG] [Thread-66156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:16:16.101 [DEBUG] [Thread-66156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:16:16.101 [DEBUG] [Thread-66156] [transport.py] [_log()] Compression: none
2025-12-12T09:16:16.101 [DEBUG] [Thread-66156] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:16:16.158 [DEBUG] [Thread-66156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:16:16.158 [DEBUG] [Thread-66156] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:16:16.159 [DEBUG] [Thread-66156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:16:16.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:16:16.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:16:16.220 [DEBUG] [Thread-66156] [transport.py] [_log()] userauth is OK
2025-12-12T09:16:16.221 [DEBUG] [Thread-66156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:16:16.221 [DEBUG] [Thread-66156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:16:16.221 [DEBUG] [Thread-66156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:16:16.221 [DEBUG] [Thread-66156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:16:16.240 [INFO] [Thread-66156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:16:16.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:16:16.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:16:17.114 [DEBUG] [Thread-66156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:16:17.114 [DEBUG] [Thread-66156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:16:17.162 [DEBUG] [Thread-66156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:16:17.163 [DEBUG] [Thread-66156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:16:17.172 [DEBUG] [Thread-66156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:16:17.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:16:17.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:16:17.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:16:17.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:16:17.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:16:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:16:17.208 [DEBUG] [Thread-66156] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:16:18.657 [DEBUG] [Thread-66158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:19.665 [DEBUG] [Thread-66159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:27.704 [DEBUG] [Thread-66160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:31.841 [DEBUG] [Thread-66161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:34.721 [DEBUG] [Thread-66162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:36.736 [DEBUG] [Thread-66163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:45.755 [DEBUG] [Thread-66164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:16:47.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:16:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:16:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 16, 36), 17.64, 29.44, 0.0, 27.31, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:16:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:16:36
2025-12-12T09:16:48.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:16:48.232 [DEBUG] [Thread-66165] [transport.py] [_log()] starting thread (client mode): 0xf572efb0
2025-12-12T09:16:48.232 [DEBUG] [Thread-66165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:16:48.251 [DEBUG] [Thread-66165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:16:48.251 [INFO] [Thread-66165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:16:48.254 [DEBUG] [Thread-66165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:16:48.254 [DEBUG] [Thread-66165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:16:48.254 [DEBUG] [Thread-66165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:16:48.254 [DEBUG] [Thread-66165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] client lang: <none>
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] server lang: <none>
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] kex follows: False
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] Compression: none
2025-12-12T09:16:48.255 [DEBUG] [Thread-66165] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:16:48.269 [DEBUG] [Thread-66165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:16:48.269 [DEBUG] [Thread-66165] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:16:48.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:16:48.270 [DEBUG] [Thread-66165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:16:48.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:16:48.270 [DEBUG] [Thread-66165] [transport.py] [_log()] userauth is OK
2025-12-12T09:16:48.270 [DEBUG] [Thread-66165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:16:48.270 [DEBUG] [Thread-66165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:16:48.270 [DEBUG] [Thread-66165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:16:48.270 [DEBUG] [Thread-66165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:16:48.281 [INFO] [Thread-66165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:16:48.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:16:48.911 [DEBUG] [Thread-66165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:16:48.911 [DEBUG] [Thread-66165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:16:48.911 [DEBUG] [Thread-66165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:16:48.951 [DEBUG] [Thread-66165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:16:48.952 [DEBUG] [Thread-66165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:16:48.954 [DEBUG] [Thread-66165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:16:48.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:16:48.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:16:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:16:48.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:16:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:16:48.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:16:48.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.302819 -999.00  +13.60  32.78     35   -1.20 1 2 2 1 1   888    0 15.12 13.58 ----- 23.1 32.8 339.3 37.1 16.2 -11.3 15.9 -11.3 15.7 -10.7 15.9 -10.8
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.302819
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:16:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:16:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:16:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:16:36', tmtdew=17.64, humidity=29.44, cloud=0.0, wind=27.31, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:16:03.562', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:16:48.973 [DEBUG] [Thread-66165] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:16:49.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:16:49.061 [DEBUG] [Thread-66168] [transport.py] [_log()] starting thread (client mode): 0xf578ad10
2025-12-12T09:16:49.061 [DEBUG] [Thread-66168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:16:49.076 [DEBUG] [Thread-66168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:16:49.076 [INFO] [Thread-66168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] client lang: <none>
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] server lang: <none>
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] kex follows: False
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:16:49.083 [DEBUG] [Thread-66168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:16:49.084 [DEBUG] [Thread-66168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:16:49.084 [DEBUG] [Thread-66168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:16:49.084 [DEBUG] [Thread-66168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:16:49.084 [DEBUG] [Thread-66168] [transport.py] [_log()] Compression: none
2025-12-12T09:16:49.084 [DEBUG] [Thread-66168] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:16:49.141 [DEBUG] [Thread-66168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:16:49.141 [DEBUG] [Thread-66168] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:16:49.141 [DEBUG] [Thread-66168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:16:49.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:16:49.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:16:49.197 [DEBUG] [Thread-66168] [transport.py] [_log()] userauth is OK
2025-12-12T09:16:49.198 [DEBUG] [Thread-66168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:16:49.198 [DEBUG] [Thread-66168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:16:49.198 [DEBUG] [Thread-66168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:16:49.198 [DEBUG] [Thread-66168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:16:49.212 [INFO] [Thread-66168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:16:49.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:16:49.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:16:49.764 [DEBUG] [Thread-66170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:16:50.138 [DEBUG] [Thread-66168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:16:50.138 [DEBUG] [Thread-66168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:16:50.186 [DEBUG] [Thread-66168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:16:50.186 [DEBUG] [Thread-66168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:16:50.194 [DEBUG] [Thread-66168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:16:50.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:16:50.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:16:50.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:16:50.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:16:50.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:16:50.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:16:50.226 [DEBUG] [Thread-66168] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:16:54.795 [DEBUG] [Thread-66171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:03.817 [DEBUG] [Thread-66172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:04.823 [DEBUG] [Thread-66173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:08.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:08.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:12.844 [DEBUG] [Thread-66174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:19.865 [DEBUG] [Thread-66175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:20.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:17:20.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:17:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:17:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 17, 8), 17.71, 29.27, 0.0, 28.11, 14.21, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:17:20.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:17:08
2025-12-12T09:17:21.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:17:21.217 [DEBUG] [Thread-66176] [transport.py] [_log()] starting thread (client mode): 0xf57739a0
2025-12-12T09:17:21.217 [DEBUG] [Thread-66176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:17:21.233 [DEBUG] [Thread-66176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:17:21.234 [INFO] [Thread-66176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] client lang: <none>
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] server lang: <none>
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] kex follows: False
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] Compression: none
2025-12-12T09:17:21.235 [DEBUG] [Thread-66176] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:17:21.244 [DEBUG] [Thread-66176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:17:21.245 [DEBUG] [Thread-66176] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:17:21.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:17:21.246 [DEBUG] [Thread-66176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:17:21.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:17:21.247 [DEBUG] [Thread-66176] [transport.py] [_log()] userauth is OK
2025-12-12T09:17:21.248 [DEBUG] [Thread-66176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:17:21.248 [DEBUG] [Thread-66176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:17:21.248 [DEBUG] [Thread-66176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:17:21.248 [DEBUG] [Thread-66176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:17:21.274 [INFO] [Thread-66176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:17:21.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:17:21.860 [DEBUG] [Thread-66176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:17:21.860 [DEBUG] [Thread-66176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:17:21.860 [DEBUG] [Thread-66176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:17:21.876 [DEBUG] [Thread-66178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:21.901 [DEBUG] [Thread-66176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:17:21.901 [DEBUG] [Thread-66176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:17:21.903 [DEBUG] [Thread-66176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:17:21.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:17:21.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:17:21.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:17:21.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:17:21.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:17:21.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:17:21.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:17:21.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:17:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:17:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.303223 -999.00  +13.70  21.51     35   -1.30 1 2 1 1 1   888    0 14.89 8.12 ----- 21.5 21.5 344.8 45.0 16.2 -11.5 15.9 -11.3 15.7 -10.3 15.9 -10.4
2025-12-12T09:17:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:17:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:17:21.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.303223
2025-12-12T09:17:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:17:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:17:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:17:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:17:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:17:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:17:08', tmtdew=17.71, humidity=29.27, cloud=0.0, wind=28.11, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:16:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:17:21.930 [DEBUG] [Thread-66176] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:17:22.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:17:22.024 [DEBUG] [Thread-66180] [transport.py] [_log()] starting thread (client mode): 0xf57701c0
2025-12-12T09:17:22.024 [DEBUG] [Thread-66180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:17:22.038 [DEBUG] [Thread-66180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:17:22.038 [INFO] [Thread-66180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:22.046 [DEBUG] [Thread-66180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] client lang: <none>
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] server lang: <none>
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] kex follows: False
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:17:22.047 [DEBUG] [Thread-66180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:17:22.048 [DEBUG] [Thread-66180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:17:22.048 [DEBUG] [Thread-66180] [transport.py] [_log()] Compression: none
2025-12-12T09:17:22.048 [DEBUG] [Thread-66180] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:17:22.103 [DEBUG] [Thread-66180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:17:22.104 [DEBUG] [Thread-66180] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:17:22.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:17:22.105 [DEBUG] [Thread-66180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:17:22.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:17:22.159 [DEBUG] [Thread-66180] [transport.py] [_log()] userauth is OK
2025-12-12T09:17:22.160 [DEBUG] [Thread-66180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:17:22.160 [DEBUG] [Thread-66180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:17:22.160 [DEBUG] [Thread-66180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:17:22.160 [DEBUG] [Thread-66180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:17:22.187 [INFO] [Thread-66180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:17:22.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:17:22.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:17:23.030 [DEBUG] [Thread-66180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:17:23.030 [DEBUG] [Thread-66180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:17:23.077 [DEBUG] [Thread-66180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:17:23.078 [DEBUG] [Thread-66180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:17:23.087 [DEBUG] [Thread-66180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:17:23.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:17:23.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:17:23.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:17:23.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:17:23.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:17:23.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:17:23.120 [DEBUG] [Thread-66180] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:17:30.895 [DEBUG] [Thread-66182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:31.874 [DEBUG] [Thread-66183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:34.908 [DEBUG] [Thread-66184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:39.941 [DEBUG] [Thread-66185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:48.964 [DEBUG] [Thread-66186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:49.972 [DEBUG] [Thread-66187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:17:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:17:53.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:17:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:17:53.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 17, 40), 17.63, 29.45, 0.0, 29.08, 14.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:17:53.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:17:40
2025-12-12T09:17:53.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:17:54.115 [DEBUG] [Thread-66188] [transport.py] [_log()] starting thread (client mode): 0xf81541c0
2025-12-12T09:17:54.115 [DEBUG] [Thread-66188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:17:54.134 [DEBUG] [Thread-66188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:17:54.134 [INFO] [Thread-66188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:17:54.137 [DEBUG] [Thread-66188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:17:54.137 [DEBUG] [Thread-66188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] client lang: <none>
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] server lang: <none>
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] kex follows: False
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] Compression: none
2025-12-12T09:17:54.138 [DEBUG] [Thread-66188] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:17:54.154 [DEBUG] [Thread-66188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:17:54.154 [DEBUG] [Thread-66188] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:17:54.155 [DEBUG] [Thread-66188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:17:54.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:17:54.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:17:54.156 [DEBUG] [Thread-66188] [transport.py] [_log()] userauth is OK
2025-12-12T09:17:54.156 [DEBUG] [Thread-66188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:17:54.157 [DEBUG] [Thread-66188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:17:54.157 [DEBUG] [Thread-66188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:17:54.157 [DEBUG] [Thread-66188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:17:54.192 [INFO] [Thread-66188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:17:54.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:17:54.848 [DEBUG] [Thread-66188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:17:54.848 [DEBUG] [Thread-66188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:17:54.848 [DEBUG] [Thread-66188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:17:54.889 [DEBUG] [Thread-66188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:17:54.890 [DEBUG] [Thread-66188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:17:54.893 [DEBUG] [Thread-66188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:17:54.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:17:54.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:17:54.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:17:54.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:17:54.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:17:54.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:17:54.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:17:54.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:17:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:17:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.303918 -999.00  +13.60  21.99     35   -1.40 1 2 1 1 1   888    0 14.86 2.53 ----- 22.0 22.0 339.4 38.2 16.2 -11.6 16.0 -11.9 15.7 -11.0 16.0 -10.7
2025-12-12T09:17:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:17:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:17:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.303918
2025-12-12T09:17:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:17:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:17:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:17:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:17:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:17:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:17:40', tmtdew=17.63, humidity=29.45, cloud=0.0, wind=29.08, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:17:38.515', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:17:54.919 [DEBUG] [Thread-66188] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:17:55.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:17:55.013 [DEBUG] [Thread-66191] [transport.py] [_log()] starting thread (client mode): 0xf8154460
2025-12-12T09:17:55.013 [DEBUG] [Thread-66191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:17:55.028 [DEBUG] [Thread-66191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:17:55.028 [INFO] [Thread-66191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:17:55.035 [DEBUG] [Thread-66191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] client lang: <none>
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] server lang: <none>
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] kex follows: False
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:17:55.036 [DEBUG] [Thread-66191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:17:55.037 [DEBUG] [Thread-66191] [transport.py] [_log()] Compression: none
2025-12-12T09:17:55.037 [DEBUG] [Thread-66191] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:17:55.094 [DEBUG] [Thread-66191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:17:55.095 [DEBUG] [Thread-66191] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:17:55.095 [DEBUG] [Thread-66191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:17:55.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:17:55.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:17:55.152 [DEBUG] [Thread-66191] [transport.py] [_log()] userauth is OK
2025-12-12T09:17:55.153 [DEBUG] [Thread-66191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:17:55.153 [DEBUG] [Thread-66191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:17:55.153 [DEBUG] [Thread-66191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:17:55.153 [DEBUG] [Thread-66191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:17:55.172 [INFO] [Thread-66191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:17:55.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:17:55.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:17:56.027 [DEBUG] [Thread-66191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:17:56.027 [DEBUG] [Thread-66191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:17:56.077 [DEBUG] [Thread-66191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:17:56.078 [DEBUG] [Thread-66191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:17:56.087 [DEBUG] [Thread-66191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:17:56.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:17:56.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:17:56.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:17:56.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:17:56.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:17:56.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:17:56.125 [DEBUG] [Thread-66191] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:17:57.998 [DEBUG] [Thread-66193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:05.015 [DEBUG] [Thread-66194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:07.028 [DEBUG] [Thread-66195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:08.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:08.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:16.047 [DEBUG] [Thread-66196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:20.063 [DEBUG] [Thread-66197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:25.083 [DEBUG] [Thread-66198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:18:26.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:18:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:18:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 18, 13), 17.49, 29.75, 0.0, 25.42, 14.21, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:18:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:18:13
2025-12-12T09:18:26.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:18:27.102 [DEBUG] [Thread-66199] [transport.py] [_log()] starting thread (client mode): 0xf57b4f40
2025-12-12T09:18:27.102 [DEBUG] [Thread-66199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:18:27.122 [DEBUG] [Thread-66199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:18:27.122 [INFO] [Thread-66199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:18:27.125 [DEBUG] [Thread-66199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] client lang: <none>
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] server lang: <none>
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] kex follows: False
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] Compression: none
2025-12-12T09:18:27.126 [DEBUG] [Thread-66199] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:18:27.144 [DEBUG] [Thread-66199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:18:27.145 [DEBUG] [Thread-66199] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:18:27.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:18:27.146 [DEBUG] [Thread-66199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:18:27.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:18:27.148 [DEBUG] [Thread-66199] [transport.py] [_log()] userauth is OK
2025-12-12T09:18:27.148 [DEBUG] [Thread-66199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:18:27.148 [DEBUG] [Thread-66199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:18:27.148 [DEBUG] [Thread-66199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:18:27.148 [DEBUG] [Thread-66199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:18:27.173 [INFO] [Thread-66199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:18:27.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:18:27.811 [DEBUG] [Thread-66199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:18:27.811 [DEBUG] [Thread-66199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:18:27.811 [DEBUG] [Thread-66199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:18:27.852 [DEBUG] [Thread-66199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:18:27.852 [DEBUG] [Thread-66199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:18:27.856 [DEBUG] [Thread-66199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:18:27.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:18:27.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:18:27.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:18:27.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:18:27.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:18:27.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:18:27.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:18:27.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:18:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:18:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.304208 -999.00  +13.70  25.32     35   -1.20 1 2 1 1 1   888    0 14.75 -0.34 ----- 20.7 25.3 330.8 43.5 16.2 -11.9 15.9 -11.6 15.7 -10.8 16.0 -10.9
2025-12-12T09:18:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:18:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:18:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.304208
2025-12-12T09:18:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:18:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:18:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:18:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:18:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:18:27.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:18:13', tmtdew=17.49, humidity=29.75, cloud=0.0, wind=25.42, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:18:03.571', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:18:27.882 [DEBUG] [Thread-66199] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:18:27.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:18:27.975 [DEBUG] [Thread-66202] [transport.py] [_log()] starting thread (client mode): 0xf8155480
2025-12-12T09:18:27.975 [DEBUG] [Thread-66202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:18:27.990 [DEBUG] [Thread-66202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:18:27.990 [INFO] [Thread-66202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:18:27.998 [DEBUG] [Thread-66202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:18:27.998 [DEBUG] [Thread-66202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:18:27.998 [DEBUG] [Thread-66202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:18:27.998 [DEBUG] [Thread-66202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:18:27.998 [DEBUG] [Thread-66202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] client lang: <none>
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] server lang: <none>
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] kex follows: False
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:18:27.999 [DEBUG] [Thread-66202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:18:28.000 [DEBUG] [Thread-66202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:18:28.000 [DEBUG] [Thread-66202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:18:28.000 [DEBUG] [Thread-66202] [transport.py] [_log()] Compression: none
2025-12-12T09:18:28.000 [DEBUG] [Thread-66202] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:18:28.062 [DEBUG] [Thread-66202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:18:28.063 [DEBUG] [Thread-66202] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:18:28.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:18:28.064 [DEBUG] [Thread-66202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:18:28.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:18:28.121 [DEBUG] [Thread-66202] [transport.py] [_log()] userauth is OK
2025-12-12T09:18:28.121 [DEBUG] [Thread-66202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:18:28.121 [DEBUG] [Thread-66202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:18:28.121 [DEBUG] [Thread-66202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:18:28.121 [DEBUG] [Thread-66202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:18:28.141 [INFO] [Thread-66202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:18:28.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:18:28.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:18:29.064 [DEBUG] [Thread-66202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:18:29.064 [DEBUG] [Thread-66202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:18:29.116 [DEBUG] [Thread-66202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:18:29.116 [DEBUG] [Thread-66202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:18:29.129 [DEBUG] [Thread-66202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:18:29.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:18:29.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:18: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
2025-12-12T09:18:29.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:18:29.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:18:29.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:18:29.166 [DEBUG] [Thread-66202] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:18:31.935 [DEBUG] [Thread-66204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:34.107 [DEBUG] [Thread-66205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:35.115 [DEBUG] [Thread-66206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:43.151 [DEBUG] [Thread-66207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:50.168 [DEBUG] [Thread-66208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:52.183 [DEBUG] [Thread-66209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:18:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:18:59.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:18:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:18:59.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 18, 45), 17.67, 29.1, 0.0, 30.58, 14.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:18:59.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:18:45
2025-12-12T09:18:59.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:19:00.118 [DEBUG] [Thread-66210] [transport.py] [_log()] starting thread (client mode): 0xf57bd570
2025-12-12T09:19:00.118 [DEBUG] [Thread-66210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:19:00.138 [DEBUG] [Thread-66210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:19:00.138 [INFO] [Thread-66210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] client lang: <none>
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] server lang: <none>
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] kex follows: False
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] Compression: none
2025-12-12T09:19:00.142 [DEBUG] [Thread-66210] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:19:00.161 [DEBUG] [Thread-66210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:19:00.161 [DEBUG] [Thread-66210] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:19:00.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:19:00.162 [DEBUG] [Thread-66210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:19:00.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:19:00.164 [DEBUG] [Thread-66210] [transport.py] [_log()] userauth is OK
2025-12-12T09:19:00.164 [DEBUG] [Thread-66210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:19:00.165 [DEBUG] [Thread-66210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:19:00.165 [DEBUG] [Thread-66210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:19:00.165 [DEBUG] [Thread-66210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:19:00.189 [INFO] [Thread-66210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:19:00.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:19:00.808 [DEBUG] [Thread-66210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:19:00.809 [DEBUG] [Thread-66210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:19:00.809 [DEBUG] [Thread-66210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:19:00.850 [DEBUG] [Thread-66210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:19:00.850 [DEBUG] [Thread-66210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:19:00.854 [DEBUG] [Thread-66210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:19:00.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:19:00.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:19:00.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:19:00.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:19:00.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:19:00.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:19:00.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:19:00.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:19:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:19:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.304612 -999.00  +13.70  30.42     35   -1.20 1 2 2 1 1   888    0 14.40 -5.43 ----- 30.4 30.4 322.6 38.7 16.2 -11.5 15.9 -11.7 15.7 -10.8 16.0 -10.7
2025-12-12T09:19:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:19:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:19:00.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.304612
2025-12-12T09:19:00.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:19:00.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:19:00.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:19:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:19:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:19:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:18:45', tmtdew=17.67, humidity=29.1, cloud=0.0, wind=30.58, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:18:38.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:19:00.878 [DEBUG] [Thread-66210] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:19:00.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:19:00.973 [DEBUG] [Thread-66213] [transport.py] [_log()] starting thread (client mode): 0xf572bf70
2025-12-12T09:19:00.973 [DEBUG] [Thread-66213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:19:00.988 [DEBUG] [Thread-66213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:19:00.989 [INFO] [Thread-66213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:19:00.996 [DEBUG] [Thread-66213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:19:00.997 [DEBUG] [Thread-66213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] client lang: <none>
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] server lang: <none>
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] kex follows: False
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:19:00.998 [DEBUG] [Thread-66213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:19:00.999 [DEBUG] [Thread-66213] [transport.py] [_log()] Compression: none
2025-12-12T09:19:00.999 [DEBUG] [Thread-66213] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:19:01.054 [DEBUG] [Thread-66213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:19:01.055 [DEBUG] [Thread-66213] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:19:01.056 [DEBUG] [Thread-66213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:19:01.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:19:01.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:19:01.110 [DEBUG] [Thread-66213] [transport.py] [_log()] userauth is OK
2025-12-12T09:19:01.110 [DEBUG] [Thread-66213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:19:01.111 [DEBUG] [Thread-66213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:19:01.111 [DEBUG] [Thread-66213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:19:01.111 [DEBUG] [Thread-66213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:19:01.132 [INFO] [Thread-66213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:19:01.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:19:01.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:19:01.205 [DEBUG] [Thread-66215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:01.980 [DEBUG] [Thread-66213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:19:01.981 [DEBUG] [Thread-66213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:19:02.028 [DEBUG] [Thread-66213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:19:02.029 [DEBUG] [Thread-66213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:19:02.038 [DEBUG] [Thread-66213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:19:02.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:19:02.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:19:02.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:19:02.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:19:02.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:19:02.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:19:02.074 [DEBUG] [Thread-66213] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:19:05.217 [DEBUG] [Thread-66216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:08.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:08.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:10.259 [DEBUG] [Thread-66217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:19.277 [DEBUG] [Thread-66218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:20.284 [DEBUG] [Thread-66219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:28.306 [DEBUG] [Thread-66220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:31.999 [DEBUG] [Thread-66221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:32.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:19:32.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:19:32.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:19:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 19, 17), 17.75, 28.94, 0.0, 28.12, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:19:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:19:17
2025-12-12T09:19:32.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:19:33.076 [DEBUG] [Thread-66222] [transport.py] [_log()] starting thread (client mode): 0xf8154490
2025-12-12T09:19:33.076 [DEBUG] [Thread-66222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:19:33.102 [DEBUG] [Thread-66222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:19:33.102 [INFO] [Thread-66222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:19:33.105 [DEBUG] [Thread-66222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:19:33.105 [DEBUG] [Thread-66222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:19:33.105 [DEBUG] [Thread-66222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] client lang: <none>
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] server lang: <none>
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] kex follows: False
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] Compression: none
2025-12-12T09:19:33.106 [DEBUG] [Thread-66222] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:19:33.123 [DEBUG] [Thread-66222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:19:33.124 [DEBUG] [Thread-66222] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:19:33.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:19:33.125 [DEBUG] [Thread-66222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:19:33.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:19:33.127 [DEBUG] [Thread-66222] [transport.py] [_log()] userauth is OK
2025-12-12T09:19:33.127 [DEBUG] [Thread-66222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:19:33.127 [DEBUG] [Thread-66222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:19:33.127 [DEBUG] [Thread-66222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:19:33.128 [DEBUG] [Thread-66222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:19:33.143 [INFO] [Thread-66222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:19:33.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:19:33.707 [DEBUG] [Thread-66222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:19:33.708 [DEBUG] [Thread-66222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:19:33.708 [DEBUG] [Thread-66222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:19:33.748 [DEBUG] [Thread-66222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:19:33.748 [DEBUG] [Thread-66222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:19:33.751 [DEBUG] [Thread-66222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:19:33.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:19:33.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:19:33.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:19:33.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:19:33.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:19:33.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:19:33.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:19:33.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:19:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:19:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.304902 -999.00  +13.70  19.71     35   -1.30 1 2 1 1 1   888    0 14.37 -9.06 ----- 31.0 19.7 13.4 36.2 16.2 -11.8 15.9 -12.0 15.8 -11.2 16.1 -11.0
2025-12-12T09:19:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:19:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:19:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.304902
2025-12-12T09:19:33.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:19:33.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:19:33.776 [DEBUG] [Thread-66222] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:19:33.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:19:33.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:19:33.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:19:33.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:19:17', tmtdew=17.75, humidity=28.94, cloud=0.0, wind=28.12, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:19:03.533', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:19:33.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:19:33.876 [DEBUG] [Thread-66225] [transport.py] [_log()] starting thread (client mode): 0xf8155b10
2025-12-12T09:19:33.876 [DEBUG] [Thread-66225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:19:33.893 [DEBUG] [Thread-66225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:19:33.894 [INFO] [Thread-66225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:19:33.901 [DEBUG] [Thread-66225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:19:33.902 [DEBUG] [Thread-66225] [transport.py] [_log()] client lang: <none>
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] server lang: <none>
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] kex follows: False
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:19:33.903 [DEBUG] [Thread-66225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:19:33.904 [DEBUG] [Thread-66225] [transport.py] [_log()] Compression: none
2025-12-12T09:19:33.904 [DEBUG] [Thread-66225] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:19:33.958 [DEBUG] [Thread-66225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:19:33.959 [DEBUG] [Thread-66225] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:19:33.960 [DEBUG] [Thread-66225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:19:33.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:19:33.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:19:34.015 [DEBUG] [Thread-66225] [transport.py] [_log()] userauth is OK
2025-12-12T09:19:34.015 [DEBUG] [Thread-66225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:19:34.015 [DEBUG] [Thread-66225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:19:34.016 [DEBUG] [Thread-66225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:19:34.016 [DEBUG] [Thread-66225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:19:34.035 [INFO] [Thread-66225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:19:34.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:19:34.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:19:34.887 [DEBUG] [Thread-66225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:19:34.887 [DEBUG] [Thread-66225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:19:34.935 [DEBUG] [Thread-66225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:19:34.935 [DEBUG] [Thread-66225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:19:34.944 [DEBUG] [Thread-66225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:19:34.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:19:34.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:19:34.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:19:34.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:19:34.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:19:34.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:19:34.981 [DEBUG] [Thread-66225] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:19:35.326 [DEBUG] [Thread-66227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:37.352 [DEBUG] [Thread-66228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:46.376 [DEBUG] [Thread-66229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:50.388 [DEBUG] [Thread-66230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:19:55.403 [DEBUG] [Thread-66231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:04.420 [DEBUG] [Thread-66232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:05.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:20:05.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:20:05.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:20:05.424 [DEBUG] [Thread-66233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:05.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 19, 49), 17.81, 29.11, 0.0, 33.54, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:20:05.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:19:49
2025-12-12T09:20:05.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:20:05.963 [DEBUG] [Thread-66234] [transport.py] [_log()] starting thread (client mode): 0xf81570a0
2025-12-12T09:20:05.963 [DEBUG] [Thread-66234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:20:05.984 [DEBUG] [Thread-66234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:20:05.985 [INFO] [Thread-66234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:20:05.988 [DEBUG] [Thread-66234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:20:05.988 [DEBUG] [Thread-66234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:20:05.988 [DEBUG] [Thread-66234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:20:05.988 [DEBUG] [Thread-66234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:05.988 [DEBUG] [Thread-66234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:05.988 [DEBUG] [Thread-66234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] client lang: <none>
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] server lang: <none>
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] kex follows: False
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:20:05.989 [DEBUG] [Thread-66234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:20:05.990 [DEBUG] [Thread-66234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:20:05.990 [DEBUG] [Thread-66234] [transport.py] [_log()] Compression: none
2025-12-12T09:20:05.990 [DEBUG] [Thread-66234] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:20:06.008 [DEBUG] [Thread-66234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:20:06.009 [DEBUG] [Thread-66234] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:20:06.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:20:06.010 [DEBUG] [Thread-66234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:20:06.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:20:06.012 [DEBUG] [Thread-66234] [transport.py] [_log()] userauth is OK
2025-12-12T09:20:06.012 [DEBUG] [Thread-66234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:20:06.013 [DEBUG] [Thread-66234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:20:06.013 [DEBUG] [Thread-66234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:20:06.013 [DEBUG] [Thread-66234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:20:06.030 [INFO] [Thread-66234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:20:06.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:20:08.821 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:08.823 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:10.090 [DEBUG] [Thread-66234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:20:10.090 [DEBUG] [Thread-66234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:20:10.091 [DEBUG] [Thread-66234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:20:10.131 [DEBUG] [Thread-66234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:20:10.131 [DEBUG] [Thread-66234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:20:10.135 [DEBUG] [Thread-66234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:20:10.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:20:10.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:20:10.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:20:10.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:20:10.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:20:10.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:20:10.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:20:10.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:20:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:20:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.305249 -999.00  +13.80  17.54     35   -1.10 1 2 1 1 1   888    0 14.13 -13.13 ----- 19.7 17.5 350.8 32.1 16.2 -11.6 16.0 -11.6 15.7 -10.9 16.0 -11.2
2025-12-12T09:20:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:20:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:20:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.305249
2025-12-12T09:20:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:20:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:20:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:20:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:20:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:20:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:19:49', tmtdew=17.81, humidity=29.11, cloud=0.0, wind=33.54, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:19:33.514', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:20:10.269 [DEBUG] [Thread-66234] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:20:10.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:20:10.366 [DEBUG] [Thread-66237] [transport.py] [_log()] starting thread (client mode): 0xf572aa70
2025-12-12T09:20:10.367 [DEBUG] [Thread-66237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:20:10.381 [DEBUG] [Thread-66237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:20:10.381 [INFO] [Thread-66237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:10.389 [DEBUG] [Thread-66237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] client lang: <none>
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] server lang: <none>
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] kex follows: False
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] Compression: none
2025-12-12T09:20:10.390 [DEBUG] [Thread-66237] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:20:10.447 [DEBUG] [Thread-66237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:20:10.448 [DEBUG] [Thread-66237] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:20:10.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:20:10.449 [DEBUG] [Thread-66237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:20:10.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:20:10.507 [DEBUG] [Thread-66237] [transport.py] [_log()] userauth is OK
2025-12-12T09:20:10.508 [DEBUG] [Thread-66237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:20:10.508 [DEBUG] [Thread-66237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:20:10.508 [DEBUG] [Thread-66237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:20:10.508 [DEBUG] [Thread-66237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:20:10.532 [INFO] [Thread-66237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:20:10.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:20:10.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:20:11.384 [DEBUG] [Thread-66237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:20:11.384 [DEBUG] [Thread-66237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:20:11.432 [DEBUG] [Thread-66237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:20:11.432 [DEBUG] [Thread-66237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:20:11.442 [DEBUG] [Thread-66237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:20:11.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:20:11.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:20:11.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:20:11.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:20:11.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:20:11.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:20:11.476 [DEBUG] [Thread-66237] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:20:13.447 [DEBUG] [Thread-66239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:20.468 [DEBUG] [Thread-66240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:22.494 [DEBUG] [Thread-66241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:31.518 [DEBUG] [Thread-66242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:32.050 [DEBUG] [Thread-66243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:35.531 [DEBUG] [Thread-66244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:40.544 [DEBUG] [Thread-66245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:20:41.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:20:41.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:20:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 20, 21), 17.83, 29.02, 0.0, 36.61, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:20:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:20:21
2025-12-12T09:20:42.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:20:42.477 [DEBUG] [Thread-66246] [transport.py] [_log()] starting thread (client mode): 0xf8154d60
2025-12-12T09:20:42.478 [DEBUG] [Thread-66246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:20:42.501 [DEBUG] [Thread-66246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:20:42.501 [INFO] [Thread-66246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] client lang: <none>
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] server lang: <none>
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] kex follows: False
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] Compression: none
2025-12-12T09:20:42.504 [DEBUG] [Thread-66246] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:20:42.518 [DEBUG] [Thread-66246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:20:42.518 [DEBUG] [Thread-66246] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:20:42.518 [DEBUG] [Thread-66246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:20:42.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:20:42.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:20:42.519 [DEBUG] [Thread-66246] [transport.py] [_log()] userauth is OK
2025-12-12T09:20:42.519 [DEBUG] [Thread-66246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:20:42.519 [DEBUG] [Thread-66246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:20:42.519 [DEBUG] [Thread-66246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:20:42.519 [DEBUG] [Thread-66246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:20:42.535 [INFO] [Thread-66246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:20:42.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:20:43.168 [DEBUG] [Thread-66246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:20:43.168 [DEBUG] [Thread-66246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:20:43.168 [DEBUG] [Thread-66246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:20:43.209 [DEBUG] [Thread-66246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:20:43.210 [DEBUG] [Thread-66246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:20:43.212 [DEBUG] [Thread-66246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:20:43.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:20:43.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:20:43.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:20:43.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:20:43.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:20:43.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:20:43.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.305596 -999.00  +13.90  29.05     35   -1.10 1 2 1 1 1   888    0 14.16 -16.41 ----- 20.3 29.1 329.4 34.8 16.2 -11.7 16.1 -11.7 15.8 -11.1 16.1 -11.0
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.305596
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:20:43.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:20:21', tmtdew=17.83, humidity=29.02, cloud=0.0, wind=36.61, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:20:03.494', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:20:43.231 [DEBUG] [Thread-66246] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:20:43.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:20:43.317 [DEBUG] [Thread-66249] [transport.py] [_log()] starting thread (client mode): 0xf8157550
2025-12-12T09:20:43.317 [DEBUG] [Thread-66249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:20:43.335 [DEBUG] [Thread-66249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:20:43.335 [INFO] [Thread-66249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:20:43.342 [DEBUG] [Thread-66249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:20:43.342 [DEBUG] [Thread-66249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:20:43.342 [DEBUG] [Thread-66249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] client lang: <none>
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] server lang: <none>
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] kex follows: False
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] Compression: none
2025-12-12T09:20:43.343 [DEBUG] [Thread-66249] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:20:43.401 [DEBUG] [Thread-66249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:20:43.401 [DEBUG] [Thread-66249] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:20:43.401 [DEBUG] [Thread-66249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:20:43.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:20:43.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:20:43.460 [DEBUG] [Thread-66249] [transport.py] [_log()] userauth is OK
2025-12-12T09:20:43.460 [DEBUG] [Thread-66249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:20:43.460 [DEBUG] [Thread-66249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:20:43.460 [DEBUG] [Thread-66249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:20:43.460 [DEBUG] [Thread-66249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:20:43.478 [INFO] [Thread-66249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:20:43.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:20:43.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:20:44.333 [DEBUG] [Thread-66249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:20:44.333 [DEBUG] [Thread-66249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:20:44.380 [DEBUG] [Thread-66249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:20:44.381 [DEBUG] [Thread-66249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:20:44.390 [DEBUG] [Thread-66249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:20:44.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:20:44.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:20:44.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:20:44.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:20:44.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:20:44.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:20:44.427 [DEBUG] [Thread-66249] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:20:49.563 [DEBUG] [Thread-66251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:50.571 [DEBUG] [Thread-66252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:20:58.610 [DEBUG] [Thread-66253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:05.630 [DEBUG] [Thread-66254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:07.642 [DEBUG] [Thread-66255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:08.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:08.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:21:14.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:21:14.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:21:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 20, 53), 17.72, 29.04, 0.0, 28.6, 14.06, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:21:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:20:53
2025-12-12T09:21:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:21:15.396 [DEBUG] [Thread-66256] [transport.py] [_log()] starting thread (client mode): 0xf5729e70
2025-12-12T09:21:15.396 [DEBUG] [Thread-66256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:21:15.415 [DEBUG] [Thread-66256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:21:15.415 [INFO] [Thread-66256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:21:15.418 [DEBUG] [Thread-66256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:21:15.418 [DEBUG] [Thread-66256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:21:15.418 [DEBUG] [Thread-66256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] client lang: <none>
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] server lang: <none>
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] kex follows: False
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:21:15.419 [DEBUG] [Thread-66256] [transport.py] [_log()] Compression: none
2025-12-12T09:21:15.420 [DEBUG] [Thread-66256] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:21:15.436 [DEBUG] [Thread-66256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:21:15.436 [DEBUG] [Thread-66256] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:21:15.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:21:15.438 [DEBUG] [Thread-66256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:21:15.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:21:15.439 [DEBUG] [Thread-66256] [transport.py] [_log()] userauth is OK
2025-12-12T09:21:15.440 [DEBUG] [Thread-66256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:21:15.440 [DEBUG] [Thread-66256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:21:15.440 [DEBUG] [Thread-66256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:21:15.440 [DEBUG] [Thread-66256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:21:15.465 [INFO] [Thread-66256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:21:15.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:21:16.083 [DEBUG] [Thread-66256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:21:16.083 [DEBUG] [Thread-66256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:21:16.084 [DEBUG] [Thread-66256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:21:16.124 [DEBUG] [Thread-66256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:21:16.124 [DEBUG] [Thread-66256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:21:16.127 [DEBUG] [Thread-66256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:21:16.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:21:16.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:21:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:21:16.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:21:16.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:21:16.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:21:16.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.306001 -999.00  +14.00  20.66     34   -1.50 1 2 1 1 1   888    0 14.49 -15.47 ----- 20.7 20.7 4.7 37.7 16.4 -11.7 16.1 -11.6 15.8 -10.9 16.2 -11.1
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.306001
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:21:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:20:53', tmtdew=17.72, humidity=29.04, cloud=0.0, wind=28.6, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:20:38.486', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:21:16.147 [DEBUG] [Thread-66256] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:21:16.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:21:16.228 [DEBUG] [Thread-66259] [transport.py] [_log()] starting thread (client mode): 0xf572fa00
2025-12-12T09:21:16.228 [DEBUG] [Thread-66259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:21:16.243 [DEBUG] [Thread-66259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:21:16.244 [INFO] [Thread-66259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:21:16.255 [DEBUG] [Thread-66259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:21:16.255 [DEBUG] [Thread-66259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:21:16.255 [DEBUG] [Thread-66259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:21:16.255 [DEBUG] [Thread-66259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:16.255 [DEBUG] [Thread-66259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:16.255 [DEBUG] [Thread-66259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] client lang: <none>
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] server lang: <none>
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] kex follows: False
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] Compression: none
2025-12-12T09:21:16.256 [DEBUG] [Thread-66259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:21:16.306 [DEBUG] [Thread-66259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:21:16.307 [DEBUG] [Thread-66259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:21:16.307 [DEBUG] [Thread-66259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:21:16.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:21:16.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:21:16.365 [DEBUG] [Thread-66259] [transport.py] [_log()] userauth is OK
2025-12-12T09:21:16.365 [DEBUG] [Thread-66259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:21:16.365 [DEBUG] [Thread-66259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:21:16.365 [DEBUG] [Thread-66259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:21:16.365 [DEBUG] [Thread-66259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:21:16.383 [INFO] [Thread-66259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:21:16.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:21:16.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:21:16.665 [DEBUG] [Thread-66261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:17.201 [DEBUG] [Thread-66259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:21:17.201 [DEBUG] [Thread-66259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:21:17.249 [DEBUG] [Thread-66259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:21:17.249 [DEBUG] [Thread-66259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:21:17.257 [DEBUG] [Thread-66259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:21:17.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:21: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')
2025-12-12T09:21:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:21:17.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:21:17.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:21:17.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:21:17.288 [DEBUG] [Thread-66259] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:21:20.675 [DEBUG] [Thread-66262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:25.701 [DEBUG] [Thread-66263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:32.110 [DEBUG] [Thread-66264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:34.722 [DEBUG] [Thread-66265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:35.730 [DEBUG] [Thread-66266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:43.757 [DEBUG] [Thread-66267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:47.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:21:47.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:21:47.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:21:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 21, 25), 17.65, 29.21, 0.0, 29.59, 14.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:21:47.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:21:25
2025-12-12T09:21:48.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:21:48.273 [DEBUG] [Thread-66268] [transport.py] [_log()] starting thread (client mode): 0xf572ec20
2025-12-12T09:21:48.274 [DEBUG] [Thread-66268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:21:48.293 [DEBUG] [Thread-66268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:21:48.293 [INFO] [Thread-66268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:21:48.296 [DEBUG] [Thread-66268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:21:48.296 [DEBUG] [Thread-66268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] client lang: <none>
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] server lang: <none>
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] kex follows: False
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] Compression: none
2025-12-12T09:21:48.297 [DEBUG] [Thread-66268] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:21:48.316 [DEBUG] [Thread-66268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:21:48.316 [DEBUG] [Thread-66268] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:21:48.317 [DEBUG] [Thread-66268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:21:48.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:21:48.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:21:48.319 [DEBUG] [Thread-66268] [transport.py] [_log()] userauth is OK
2025-12-12T09:21:48.319 [DEBUG] [Thread-66268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:21:48.320 [DEBUG] [Thread-66268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:21:48.320 [DEBUG] [Thread-66268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:21:48.320 [DEBUG] [Thread-66268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:21:48.345 [INFO] [Thread-66268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:21:48.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:21:48.982 [DEBUG] [Thread-66268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:21:48.982 [DEBUG] [Thread-66268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:21:48.982 [DEBUG] [Thread-66268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:21:49.023 [DEBUG] [Thread-66268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:21:49.023 [DEBUG] [Thread-66268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:21:49.026 [DEBUG] [Thread-66268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:21:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:21:49.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:21:49.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:21:49.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:21:49.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:21:49.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:21:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:21:49.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:21:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:21:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.306696 -999.00  +13.90  18.48     34   -1.30 1 2 1 1 1   888    0 14.65 -12.15 ----- 18.5 18.5 359.2 36.7 16.4 -11.9 16.1 -12.2 15.9 -11.5 16.2 -11.4
2025-12-12T09:21:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:21:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:21:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.306696
2025-12-12T09:21:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:21:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:21:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:21:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:21:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:21:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:21:25', tmtdew=17.65, humidity=29.21, cloud=0.0, wind=29.59, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:21:38.534', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:21:49.056 [DEBUG] [Thread-66268] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:21:49.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:21:49.151 [DEBUG] [Thread-66271] [transport.py] [_log()] starting thread (client mode): 0xf8155db0
2025-12-12T09:21:49.151 [DEBUG] [Thread-66271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:21:49.165 [DEBUG] [Thread-66271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:21:49.166 [INFO] [Thread-66271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:21:49.174 [DEBUG] [Thread-66271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:21:49.175 [DEBUG] [Thread-66271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:21:49.175 [DEBUG] [Thread-66271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:21:49.175 [DEBUG] [Thread-66271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:49.175 [DEBUG] [Thread-66271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] client lang: <none>
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] server lang: <none>
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] kex follows: False
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] Compression: none
2025-12-12T09:21:49.176 [DEBUG] [Thread-66271] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:21:49.238 [DEBUG] [Thread-66271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:21:49.239 [DEBUG] [Thread-66271] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:21:49.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:21:49.240 [DEBUG] [Thread-66271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:21:49.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:21:49.294 [DEBUG] [Thread-66271] [transport.py] [_log()] userauth is OK
2025-12-12T09:21:49.294 [DEBUG] [Thread-66271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:21:49.295 [DEBUG] [Thread-66271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:21:49.295 [DEBUG] [Thread-66271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:21:49.295 [DEBUG] [Thread-66271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:21:49.317 [INFO] [Thread-66271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:21:49.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:21:49.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:21:50.229 [DEBUG] [Thread-66271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:21:50.230 [DEBUG] [Thread-66271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:21:50.277 [DEBUG] [Thread-66271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:21:50.278 [DEBUG] [Thread-66271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:21:50.287 [DEBUG] [Thread-66271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:21:50.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:21:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:21:50.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:21:50.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:21:50.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:21:50.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:21:50.324 [DEBUG] [Thread-66271] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:21:50.776 [DEBUG] [Thread-66273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:21:52.803 [DEBUG] [Thread-66274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:01.822 [DEBUG] [Thread-66275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:05.834 [DEBUG] [Thread-66276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:09.114 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:09.115 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:10.852 [DEBUG] [Thread-66277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:19.875 [DEBUG] [Thread-66278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:22:20.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:22:20.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:22:20.880 [DEBUG] [Thread-66279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 21, 57), 17.78, 29.14, 0.0, 35.45, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:22:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:21:57
2025-12-12T09:22:21.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:22:21.287 [DEBUG] [Thread-66280] [transport.py] [_log()] starting thread (client mode): 0xf578bac0
2025-12-12T09:22:21.287 [DEBUG] [Thread-66280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:22:21.306 [DEBUG] [Thread-66280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:22:21.307 [INFO] [Thread-66280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] client lang: <none>
2025-12-12T09:22:21.310 [DEBUG] [Thread-66280] [transport.py] [_log()] server lang: <none>
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] kex follows: False
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] Compression: none
2025-12-12T09:22:21.311 [DEBUG] [Thread-66280] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:22:21.326 [DEBUG] [Thread-66280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:22:21.326 [DEBUG] [Thread-66280] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:22:21.327 [DEBUG] [Thread-66280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:22:21.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:22:21.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:22:21.329 [DEBUG] [Thread-66280] [transport.py] [_log()] userauth is OK
2025-12-12T09:22:21.329 [DEBUG] [Thread-66280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:22:21.329 [DEBUG] [Thread-66280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:22:21.329 [DEBUG] [Thread-66280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:22:21.330 [DEBUG] [Thread-66280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:22:21.354 [INFO] [Thread-66280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:22:21.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:22:21.958 [DEBUG] [Thread-66280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:22:21.958 [DEBUG] [Thread-66280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:22:21.959 [DEBUG] [Thread-66280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:22:21.999 [DEBUG] [Thread-66280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:22:22.000 [DEBUG] [Thread-66280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:22:22.003 [DEBUG] [Thread-66280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:22:22.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:22:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:22:22.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:22:22.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:22:22.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:22:22.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:22:22.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:22:22.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:22:22.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:22:22.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.307043 -999.00  +13.80  33.31     35   -1.20 1 2 2 1 1   888    0 14.56 -9.26 ----- 33.3 33.3 331.2 39.9 16.4 -12.2 16.1 -12.1 15.9 -11.8 16.2 -11.5
2025-12-12T09:22:22.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:22:22.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:22:22.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.307043
2025-12-12T09:22:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:22:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:22:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:22:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:22:22.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:22:22.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:21:57', tmtdew=17.78, humidity=29.14, cloud=0.0, wind=35.45, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:22:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:22:22.030 [DEBUG] [Thread-66280] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:22:22.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:22:22.128 [DEBUG] [Thread-66283] [transport.py] [_log()] starting thread (client mode): 0xf572a8c0
2025-12-12T09:22:22.128 [DEBUG] [Thread-66283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:22:22.144 [DEBUG] [Thread-66283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:22:22.144 [INFO] [Thread-66283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:22:22.152 [DEBUG] [Thread-66283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:22:22.152 [DEBUG] [Thread-66283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:22:22.152 [DEBUG] [Thread-66283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:22:22.152 [DEBUG] [Thread-66283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] client lang: <none>
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] server lang: <none>
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] kex follows: False
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] Compression: none
2025-12-12T09:22:22.153 [DEBUG] [Thread-66283] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:22:22.211 [DEBUG] [Thread-66283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:22:22.211 [DEBUG] [Thread-66283] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:22:22.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:22:22.213 [DEBUG] [Thread-66283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:22:22.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:22:22.270 [DEBUG] [Thread-66283] [transport.py] [_log()] userauth is OK
2025-12-12T09:22:22.271 [DEBUG] [Thread-66283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:22:22.271 [DEBUG] [Thread-66283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:22:22.271 [DEBUG] [Thread-66283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:22:22.271 [DEBUG] [Thread-66283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:22:22.296 [INFO] [Thread-66283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:22:22.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:22:22.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:22:23.146 [DEBUG] [Thread-66283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:22:23.147 [DEBUG] [Thread-66283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:22:23.195 [DEBUG] [Thread-66283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:22:23.196 [DEBUG] [Thread-66283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:22:23.204 [DEBUG] [Thread-66283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:22:23.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:22:23.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:22:23.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:22:23.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:22:23.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:22:23.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:22:23.241 [DEBUG] [Thread-66283] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:22:28.901 [DEBUG] [Thread-66285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:32.159 [DEBUG] [Thread-66286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:35.917 [DEBUG] [Thread-66287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:37.932 [DEBUG] [Thread-66288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:46.953 [DEBUG] [Thread-66289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:50.967 [DEBUG] [Thread-66290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:53.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:22:53.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:22:53.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:22:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 22, 29), 17.83, 29.06, 0.0, 37.79, 14.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:22:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:22:29
2025-12-12T09:22:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:22:54.224 [DEBUG] [Thread-66291] [transport.py] [_log()] starting thread (client mode): 0xf572c790
2025-12-12T09:22:54.224 [DEBUG] [Thread-66291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:22:54.242 [DEBUG] [Thread-66291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:22:54.242 [INFO] [Thread-66291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:22:54.245 [DEBUG] [Thread-66291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] client lang: <none>
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] server lang: <none>
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] kex follows: False
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:22:54.246 [DEBUG] [Thread-66291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:22:54.247 [DEBUG] [Thread-66291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:22:54.247 [DEBUG] [Thread-66291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:22:54.247 [DEBUG] [Thread-66291] [transport.py] [_log()] Compression: none
2025-12-12T09:22:54.247 [DEBUG] [Thread-66291] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:22:54.256 [DEBUG] [Thread-66291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:22:54.257 [DEBUG] [Thread-66291] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:22:54.258 [DEBUG] [Thread-66291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:22:54.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:22:54.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:22:54.260 [DEBUG] [Thread-66291] [transport.py] [_log()] userauth is OK
2025-12-12T09:22:54.261 [DEBUG] [Thread-66291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:22:54.261 [DEBUG] [Thread-66291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:22:54.261 [DEBUG] [Thread-66291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:22:54.261 [DEBUG] [Thread-66291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:22:54.287 [INFO] [Thread-66291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:22:54.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:22:54.939 [DEBUG] [Thread-66291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:22:54.939 [DEBUG] [Thread-66291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:22:54.940 [DEBUG] [Thread-66291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:22:54.980 [DEBUG] [Thread-66291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:22:54.980 [DEBUG] [Thread-66291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:22:54.984 [DEBUG] [Thread-66291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:22:54.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:22:54.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:22:54.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:22:54.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:22:55.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:22:55.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:22:55.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:22:55.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:22:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:22:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.307390 -999.00  +13.70  33.24     35   -1.40 1 2 2 1 1   888    0 14.50 -8.02 ----- 33.2 33.2 331.8 45.9 16.4 -12.2 16.1 -13.1 15.9 -11.9 16.3 -11.6
2025-12-12T09:22:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:22:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:22:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.307390
2025-12-12T09:22:55.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:22:55.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:22:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:22:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:22:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:22:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:22:29', tmtdew=17.83, humidity=29.06, cloud=0.0, wind=37.79, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:22:38.496', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:22:55.009 [DEBUG] [Thread-66291] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:22:55.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:22:55.104 [DEBUG] [Thread-66294] [transport.py] [_log()] starting thread (client mode): 0xf81c19c0
2025-12-12T09:22:55.104 [DEBUG] [Thread-66294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:22:55.119 [DEBUG] [Thread-66294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:22:55.119 [INFO] [Thread-66294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:22:55.127 [DEBUG] [Thread-66294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:22:55.127 [DEBUG] [Thread-66294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:22:55.127 [DEBUG] [Thread-66294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:22:55.127 [DEBUG] [Thread-66294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] client lang: <none>
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] server lang: <none>
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] kex follows: False
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] Compression: none
2025-12-12T09:22:55.128 [DEBUG] [Thread-66294] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:22:55.186 [DEBUG] [Thread-66294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:22:55.186 [DEBUG] [Thread-66294] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:22:55.187 [DEBUG] [Thread-66294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:22:55.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:22:55.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:22:55.246 [DEBUG] [Thread-66294] [transport.py] [_log()] userauth is OK
2025-12-12T09:22:55.246 [DEBUG] [Thread-66294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:22:55.246 [DEBUG] [Thread-66294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:22:55.246 [DEBUG] [Thread-66294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:22:55.247 [DEBUG] [Thread-66294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:22:55.268 [INFO] [Thread-66294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:22:55.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:22:55.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:22:55.985 [DEBUG] [Thread-66296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:22:56.098 [DEBUG] [Thread-66294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:22:56.098 [DEBUG] [Thread-66294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:22:56.146 [DEBUG] [Thread-66294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:22:56.146 [DEBUG] [Thread-66294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:22:56.156 [DEBUG] [Thread-66294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:22:56.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:22:56.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:22:56.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:22:56.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:22:56.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:22:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:22:56.197 [DEBUG] [Thread-66294] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:23:05.008 [DEBUG] [Thread-66297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:06.016 [DEBUG] [Thread-66298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:09.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:09.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:14.055 [DEBUG] [Thread-66299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:21.071 [DEBUG] [Thread-66300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:23.084 [DEBUG] [Thread-66301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:23:26.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:23:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:23:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 23, 1), 17.71, 28.99, 0.0, 28.67, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:23:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:23:01
2025-12-12T09:23:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:23:27.186 [DEBUG] [Thread-66302] [transport.py] [_log()] starting thread (client mode): 0xf572ab30
2025-12-12T09:23:27.186 [DEBUG] [Thread-66302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:23:27.206 [DEBUG] [Thread-66302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:23:27.207 [INFO] [Thread-66302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:23:27.210 [DEBUG] [Thread-66302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] client lang: <none>
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] server lang: <none>
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] kex follows: False
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] Compression: none
2025-12-12T09:23:27.211 [DEBUG] [Thread-66302] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:23:27.231 [DEBUG] [Thread-66302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:23:27.232 [DEBUG] [Thread-66302] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:23:27.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:23:27.233 [DEBUG] [Thread-66302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:23:27.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:23:27.235 [DEBUG] [Thread-66302] [transport.py] [_log()] userauth is OK
2025-12-12T09:23:27.235 [DEBUG] [Thread-66302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:23:27.236 [DEBUG] [Thread-66302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:23:27.236 [DEBUG] [Thread-66302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:23:27.236 [DEBUG] [Thread-66302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:23:27.271 [INFO] [Thread-66302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:23:27.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:23:27.928 [DEBUG] [Thread-66302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:23:27.928 [DEBUG] [Thread-66302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:23:27.928 [DEBUG] [Thread-66302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:23:27.969 [DEBUG] [Thread-66302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:23:27.969 [DEBUG] [Thread-66302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:23:27.972 [DEBUG] [Thread-66302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:23:27.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:23:27.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:23:27.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:23:27.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:23:27.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:23:27.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:23:27.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:23:27.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:23:27.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:23:27.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.307680 -999.00  +13.70  25.73     35   -1.40 1 2 1 1 1   888    0 14.49 -5.37 ----- 31.5 25.7 332.8 42.0 16.4 -12.4 16.1 -12.5 15.9 -11.7 16.2 -11.6
2025-12-12T09:23:27.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:23:27.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:23:27.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.307680
2025-12-12T09:23:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:23:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:23:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:23:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:23:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:23:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:23:01', tmtdew=17.71, humidity=28.99, cloud=0.0, wind=28.67, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:23:03.552', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:23:27.996 [DEBUG] [Thread-66302] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:23:28.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:23:28.092 [DEBUG] [Thread-66305] [transport.py] [_log()] starting thread (client mode): 0xf572e650
2025-12-12T09:23:28.092 [DEBUG] [Thread-66305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:23:28.110 [DEBUG] [Thread-66305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:23:28.110 [INFO] [Thread-66305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:23:28.117 [DEBUG] [Thread-66305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:23:28.117 [DEBUG] [Thread-66305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:23:28.117 [DEBUG] [Thread-66305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:23:28.117 [DEBUG] [Thread-66305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] client lang: <none>
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] server lang: <none>
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] kex follows: False
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] Compression: none
2025-12-12T09:23:28.118 [DEBUG] [Thread-66305] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:23:28.175 [DEBUG] [Thread-66305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:23:28.176 [DEBUG] [Thread-66305] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:23:28.176 [DEBUG] [Thread-66305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:23:28.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:23:28.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:23:28.231 [DEBUG] [Thread-66305] [transport.py] [_log()] userauth is OK
2025-12-12T09:23:28.232 [DEBUG] [Thread-66305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:23:28.232 [DEBUG] [Thread-66305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:23:28.232 [DEBUG] [Thread-66305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:23:28.232 [DEBUG] [Thread-66305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:23:28.251 [INFO] [Thread-66305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:23:28.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:23:28.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:23:29.128 [DEBUG] [Thread-66305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:23:29.128 [DEBUG] [Thread-66305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:23:29.177 [DEBUG] [Thread-66305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:23:29.177 [DEBUG] [Thread-66305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:23:29.186 [DEBUG] [Thread-66305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:23:29.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:23:29.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:23:29.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:23:29.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:23:29.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:23:29.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:23:29.220 [DEBUG] [Thread-66305] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:23:32.106 [DEBUG] [Thread-66307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:32.207 [DEBUG] [Thread-66308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:36.118 [DEBUG] [Thread-66309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:41.152 [DEBUG] [Thread-66310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:50.178 [DEBUG] [Thread-66311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:51.186 [DEBUG] [Thread-66312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:59.207 [DEBUG] [Thread-66313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:23:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:23:59.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:23:59.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:23:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 23, 33), 17.71, 28.96, 0.0, 25.02, 14.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:23:59.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:23:33
2025-12-12T09:24:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:24:00.209 [DEBUG] [Thread-66314] [transport.py] [_log()] starting thread (client mode): 0xf57186a0
2025-12-12T09:24:00.209 [DEBUG] [Thread-66314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:24:00.229 [DEBUG] [Thread-66314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:24:00.229 [INFO] [Thread-66314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:24:00.232 [DEBUG] [Thread-66314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] client lang: <none>
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] server lang: <none>
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] kex follows: False
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:24:00.233 [DEBUG] [Thread-66314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:24:00.234 [DEBUG] [Thread-66314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:24:00.234 [DEBUG] [Thread-66314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:24:00.234 [DEBUG] [Thread-66314] [transport.py] [_log()] Compression: none
2025-12-12T09:24:00.234 [DEBUG] [Thread-66314] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:24:00.250 [DEBUG] [Thread-66314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:24:00.251 [DEBUG] [Thread-66314] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:24:00.251 [DEBUG] [Thread-66314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:24:00.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:24:00.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:24:00.254 [DEBUG] [Thread-66314] [transport.py] [_log()] userauth is OK
2025-12-12T09:24:00.254 [DEBUG] [Thread-66314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:24:00.254 [DEBUG] [Thread-66314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:24:00.254 [DEBUG] [Thread-66314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:24:00.254 [DEBUG] [Thread-66314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:24:00.291 [INFO] [Thread-66314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:24:00.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:24:00.938 [DEBUG] [Thread-66314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:24:00.938 [DEBUG] [Thread-66314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:24:00.939 [DEBUG] [Thread-66314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:24:00.979 [DEBUG] [Thread-66314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:24:00.979 [DEBUG] [Thread-66314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:24:00.983 [DEBUG] [Thread-66314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:24:00.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:24:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:24:00.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:24:01.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:24:01.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:24:01.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:24:01.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:24:01.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:24:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:24:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.308084 -999.00  +13.80  31.08     34   -1.50 1 2 2 1 1   888    0 14.93 -0.01 ----- 31.1 31.1 331.6 36.2 16.4 -12.2 16.1 -12.4 15.9 -12.0 16.3 -11.5
2025-12-12T09:24:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:24:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:24:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.308084
2025-12-12T09:24:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:24:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:24:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:24:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:24:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:24:01.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:23:33', tmtdew=17.71, humidity=28.96, cloud=0.0, wind=25.02, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:23:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:24:01.011 [DEBUG] [Thread-66314] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:24:01.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:24:01.119 [DEBUG] [Thread-66317] [transport.py] [_log()] starting thread (client mode): 0xf571a380
2025-12-12T09:24:01.119 [DEBUG] [Thread-66317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:24:01.133 [DEBUG] [Thread-66317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:24:01.133 [INFO] [Thread-66317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:24:01.140 [DEBUG] [Thread-66317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] client lang: <none>
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] server lang: <none>
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] kex follows: False
2025-12-12T09:24:01.141 [DEBUG] [Thread-66317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:24:01.142 [DEBUG] [Thread-66317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:24:01.142 [DEBUG] [Thread-66317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:24:01.142 [DEBUG] [Thread-66317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:24:01.142 [DEBUG] [Thread-66317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:24:01.142 [DEBUG] [Thread-66317] [transport.py] [_log()] Compression: none
2025-12-12T09:24:01.142 [DEBUG] [Thread-66317] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:24:01.199 [DEBUG] [Thread-66317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:24:01.200 [DEBUG] [Thread-66317] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:24:01.200 [DEBUG] [Thread-66317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:24:01.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:24:01.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:24:01.257 [DEBUG] [Thread-66317] [transport.py] [_log()] userauth is OK
2025-12-12T09:24:01.258 [DEBUG] [Thread-66317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:24:01.258 [DEBUG] [Thread-66317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:24:01.258 [DEBUG] [Thread-66317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:24:01.258 [DEBUG] [Thread-66317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:24:01.277 [INFO] [Thread-66317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:24:01.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:24:01.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:24:02.142 [DEBUG] [Thread-66317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:24:02.142 [DEBUG] [Thread-66317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:24:02.190 [DEBUG] [Thread-66317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:24:02.190 [DEBUG] [Thread-66317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:24:02.199 [DEBUG] [Thread-66317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:24:02.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:24:02.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:24:02.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:24:02.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:24:02.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:24:02.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:24:02.233 [DEBUG] [Thread-66317] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:24:06.228 [DEBUG] [Thread-66319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:08.243 [DEBUG] [Thread-66320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:09.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:09.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:17.268 [DEBUG] [Thread-66321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:21.282 [DEBUG] [Thread-66322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:26.300 [DEBUG] [Thread-66323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:32.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:24:32.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:24:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:24:32.276 [DEBUG] [Thread-66324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 24, 5), 17.61, 29.19, 0.0, 21.26, 14.21, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:24:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:24:05
2025-12-12T09:24:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:24:33.297 [DEBUG] [Thread-66325] [transport.py] [_log()] starting thread (client mode): 0xf81544c0
2025-12-12T09:24:33.297 [DEBUG] [Thread-66325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:24:33.319 [DEBUG] [Thread-66325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:24:33.319 [INFO] [Thread-66325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] client lang: <none>
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] server lang: <none>
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] kex follows: False
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] Compression: none
2025-12-12T09:24:33.322 [DEBUG] [Thread-66325] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:24:33.338 [DEBUG] [Thread-66325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:24:33.338 [DEBUG] [Thread-66325] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:24:33.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:24:33.338 [DEBUG] [Thread-66325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:24:33.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:24:33.339 [DEBUG] [Thread-66325] [transport.py] [_log()] userauth is OK
2025-12-12T09:24:33.339 [DEBUG] [Thread-66325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:24:33.339 [DEBUG] [Thread-66325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:24:33.339 [DEBUG] [Thread-66325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:24:33.339 [DEBUG] [Thread-66325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:24:33.354 [INFO] [Thread-66325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:24:33.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:24:33.994 [DEBUG] [Thread-66325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:24:33.994 [DEBUG] [Thread-66325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:24:33.994 [DEBUG] [Thread-66325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:24:34.035 [DEBUG] [Thread-66325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:24:34.035 [DEBUG] [Thread-66325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:24:34.037 [DEBUG] [Thread-66325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:24:34.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:24:34.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:24:34.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:24:34.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:24:34.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:24:34.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:24:34.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:24:34.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:24:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:24:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.308432 -999.00  +13.70  24.00     34   -1.50 1 2 1 1 1   888    0 14.82 4.53 ----- 24.0 24.0 330.1 37.9 16.4 -12.4 16.1 -13.2 15.9 -12.0 16.3 -11.6
2025-12-12T09:24:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:24:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:24:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.308432
2025-12-12T09:24:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:24:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:24:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:24:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:24:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:24:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:24:05', tmtdew=17.61, humidity=29.19, cloud=0.0, wind=21.26, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:24:08.525', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:24:34.056 [DEBUG] [Thread-66325] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:24:34.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:24:34.142 [DEBUG] [Thread-66328] [transport.py] [_log()] starting thread (client mode): 0xf572f8e0
2025-12-12T09:24:34.142 [DEBUG] [Thread-66328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:24:34.157 [DEBUG] [Thread-66328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:24:34.157 [INFO] [Thread-66328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] client lang: <none>
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] server lang: <none>
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] kex follows: False
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] Compression: none
2025-12-12T09:24:34.166 [DEBUG] [Thread-66328] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:24:34.224 [DEBUG] [Thread-66328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:24:34.224 [DEBUG] [Thread-66328] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:24:34.224 [DEBUG] [Thread-66328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:24:34.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:24:34.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:24:34.280 [DEBUG] [Thread-66328] [transport.py] [_log()] userauth is OK
2025-12-12T09:24:34.281 [DEBUG] [Thread-66328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:24:34.281 [DEBUG] [Thread-66328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:24:34.281 [DEBUG] [Thread-66328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:24:34.281 [DEBUG] [Thread-66328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:24:34.295 [INFO] [Thread-66328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:24:34.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:24:34.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:24:35.131 [DEBUG] [Thread-66328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:24:35.132 [DEBUG] [Thread-66328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:24:35.179 [DEBUG] [Thread-66328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:24:35.179 [DEBUG] [Thread-66328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:24:35.188 [DEBUG] [Thread-66328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:24:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:24:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:24:35.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:24:35.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:24:35.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:24:35.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:24:35.219 [DEBUG] [Thread-66328] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:24:35.318 [DEBUG] [Thread-66330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:36.321 [DEBUG] [Thread-66331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:44.347 [DEBUG] [Thread-66332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:51.367 [DEBUG] [Thread-66333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:24:53.379 [DEBUG] [Thread-66334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:02.402 [DEBUG] [Thread-66335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:05.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:25:05.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:25:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:25:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 24, 37), 17.76, 29.21, 0.0, 30.54, 14.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:25:05.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:24:37
2025-12-12T09:25:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:25:06.206 [DEBUG] [Thread-66336] [transport.py] [_log()] starting thread (client mode): 0xf57be440
2025-12-12T09:25:06.206 [DEBUG] [Thread-66336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:25:06.224 [DEBUG] [Thread-66336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:25:06.224 [INFO] [Thread-66336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:25:06.227 [DEBUG] [Thread-66336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] client lang: <none>
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] server lang: <none>
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] kex follows: False
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] Compression: none
2025-12-12T09:25:06.228 [DEBUG] [Thread-66336] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:25:06.247 [DEBUG] [Thread-66336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:25:06.248 [DEBUG] [Thread-66336] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:25:06.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:25:06.249 [DEBUG] [Thread-66336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:25:06.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:25:06.251 [DEBUG] [Thread-66336] [transport.py] [_log()] userauth is OK
2025-12-12T09:25:06.251 [DEBUG] [Thread-66336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:25:06.251 [DEBUG] [Thread-66336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:25:06.251 [DEBUG] [Thread-66336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:25:06.251 [DEBUG] [Thread-66336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:25:06.269 [INFO] [Thread-66336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:25:06.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:25:06.415 [DEBUG] [Thread-66338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:06.937 [DEBUG] [Thread-66336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:25:06.937 [DEBUG] [Thread-66336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:25:06.938 [DEBUG] [Thread-66336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:25:06.978 [DEBUG] [Thread-66336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:25:06.978 [DEBUG] [Thread-66336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:25:06.982 [DEBUG] [Thread-66336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:25:06.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:25:06.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:25:06.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:25:06.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:25:07.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:25:07.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:25:07.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:25:07.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:25:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:25:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.308721 -999.00  +13.70  23.49     34   -1.60 1 2 1 1 1   888    0 15.06 9.10 ----- 29.9 23.5 11.4 39.5 16.4 -12.5 16.1 -13.1 16.0 -11.7 16.3 -11.7
2025-12-12T09:25:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:25:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:25:07.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.308721
2025-12-12T09:25:07.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:25:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:25:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:25:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:25:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:25:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:24:37', tmtdew=17.76, humidity=29.21, cloud=0.0, wind=30.54, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:24:33.494', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:25:07.012 [DEBUG] [Thread-66336] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:25:07.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:25:07.111 [DEBUG] [Thread-66340] [transport.py] [_log()] starting thread (client mode): 0xf81c26e0
2025-12-12T09:25:07.112 [DEBUG] [Thread-66340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:25:07.125 [DEBUG] [Thread-66340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:25:07.126 [INFO] [Thread-66340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] client lang: <none>
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] server lang: <none>
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] kex follows: False
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] Compression: none
2025-12-12T09:25:07.133 [DEBUG] [Thread-66340] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:25:07.192 [DEBUG] [Thread-66340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:25:07.193 [DEBUG] [Thread-66340] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:25:07.194 [DEBUG] [Thread-66340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:25:07.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:25:07.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:25:07.249 [DEBUG] [Thread-66340] [transport.py] [_log()] userauth is OK
2025-12-12T09:25:07.249 [DEBUG] [Thread-66340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:25:07.250 [DEBUG] [Thread-66340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:25:07.250 [DEBUG] [Thread-66340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:25:07.250 [DEBUG] [Thread-66340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:25:07.269 [INFO] [Thread-66340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:25:07.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:25:07.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:25:08.123 [DEBUG] [Thread-66340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:25:08.123 [DEBUG] [Thread-66340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:25:08.171 [DEBUG] [Thread-66340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:25:08.171 [DEBUG] [Thread-66340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:25:08.180 [DEBUG] [Thread-66340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:25:08.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:25:08.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:25:08.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:25:08.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:25:08.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:25:08.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:25:08.221 [DEBUG] [Thread-66340] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:25:09.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:09.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:11.431 [DEBUG] [Thread-66342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:20.451 [DEBUG] [Thread-66343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:21.459 [DEBUG] [Thread-66344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:29.498 [DEBUG] [Thread-66345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:32.331 [DEBUG] [Thread-66346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:36.516 [DEBUG] [Thread-66347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:25:38.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:25:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:25:38.529 [DEBUG] [Thread-66348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 25, 9), 17.87, 28.99, 0.0, 28.85, 14.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:25:38.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:25:09
2025-12-12T09:25:39.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:25:39.215 [DEBUG] [Thread-66349] [transport.py] [_log()] starting thread (client mode): 0xf5729c60
2025-12-12T09:25:39.215 [DEBUG] [Thread-66349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:25:39.235 [DEBUG] [Thread-66349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:25:39.235 [INFO] [Thread-66349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:25:39.236 [DEBUG] [Thread-66349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:25:39.236 [DEBUG] [Thread-66349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] client lang: <none>
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] server lang: <none>
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] kex follows: False
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:25:39.237 [DEBUG] [Thread-66349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:25:39.238 [DEBUG] [Thread-66349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:25:39.238 [DEBUG] [Thread-66349] [transport.py] [_log()] Compression: none
2025-12-12T09:25:39.238 [DEBUG] [Thread-66349] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:25:39.251 [DEBUG] [Thread-66349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:25:39.251 [DEBUG] [Thread-66349] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:25:39.252 [DEBUG] [Thread-66349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:25:39.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:25:39.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:25:39.254 [DEBUG] [Thread-66349] [transport.py] [_log()] userauth is OK
2025-12-12T09:25:39.255 [DEBUG] [Thread-66349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:25:39.255 [DEBUG] [Thread-66349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:25:39.255 [DEBUG] [Thread-66349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:25:39.255 [DEBUG] [Thread-66349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:25:39.280 [INFO] [Thread-66349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:25:39.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:25:39.884 [DEBUG] [Thread-66349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:25:39.884 [DEBUG] [Thread-66349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:25:39.885 [DEBUG] [Thread-66349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:25:39.925 [DEBUG] [Thread-66349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:25:39.925 [DEBUG] [Thread-66349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:25:39.929 [DEBUG] [Thread-66349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:25:39.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:25:39.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:25:39.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:25:39.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:25:39.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:25:39.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:25:39.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:25:39.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:25:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:25:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.309068 -999.00  +13.60  29.29     34   -1.80 1 2 1 1 1   888    0 15.21 13.89 ----- 27.5 29.3 334.4 36.6 16.4 -12.7 16.1 -12.7 15.9 -12.0 16.2 -11.8
2025-12-12T09:25:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:25:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:25:39.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.309068
2025-12-12T09:25:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:25:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:25:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:25:39.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:25:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:25:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:25:09', tmtdew=17.87, humidity=28.99, cloud=0.0, wind=28.85, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:25:03.475', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:25:39.958 [DEBUG] [Thread-66349] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:25:40.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:25:47.552 [DEBUG] [Thread-66352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:51.562 [DEBUG] [Thread-66353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:25:56.593 [DEBUG] [Thread-66354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:05.616 [DEBUG] [Thread-66355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:06.623 [DEBUG] [Thread-66356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:09.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:09.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:14.645 [DEBUG] [Thread-66357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:21.662 [DEBUG] [Thread-66358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:23.676 [DEBUG] [Thread-66359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:32.382 [DEBUG] [Thread-66360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:32.696 [DEBUG] [Thread-66361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:36.709 [DEBUG] [Thread-66362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:41.727 [DEBUG] [Thread-66363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:50.749 [DEBUG] [Thread-66364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:51.757 [DEBUG] [Thread-66365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:26:59.782 [DEBUG] [Thread-66366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:06.798 [DEBUG] [Thread-66367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:08.805 [DEBUG] [Thread-66368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:09.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:09.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:17.825 [DEBUG] [Thread-66369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:21.837 [DEBUG] [Thread-66370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:26.858 [DEBUG] [Thread-66371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:32.448 [DEBUG] [Thread-66372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:35.881 [DEBUG] [Thread-66373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:36.890 [DEBUG] [Thread-66374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:44.912 [DEBUG] [Thread-66375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:51.530 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T09:27:51.925 [DEBUG] [Thread-66376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:27:53.937 [DEBUG] [Thread-66377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:02.962 [DEBUG] [Thread-66378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:06.976 [DEBUG] [Thread-66379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:09.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:09.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:11.997 [DEBUG] [Thread-66380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:21.022 [DEBUG] [Thread-66381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:21.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:28:21.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:28:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:28:22.027 [DEBUG] [Thread-66382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:22.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 27, 49), 18.31, 28.09, 0.0, 27.29, 14.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:28:22.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:27:49
2025-12-12T09:28:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:28:22.534 [DEBUG] [Thread-66383] [transport.py] [_log()] starting thread (client mode): 0xf572b430
2025-12-12T09:28:22.534 [DEBUG] [Thread-66383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:28:22.555 [DEBUG] [Thread-66383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:28:22.555 [INFO] [Thread-66383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:28:22.556 [DEBUG] [Thread-66383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] client lang: <none>
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] server lang: <none>
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] kex follows: False
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] Compression: none
2025-12-12T09:28:22.557 [DEBUG] [Thread-66383] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:28:22.575 [DEBUG] [Thread-66383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:28:22.575 [DEBUG] [Thread-66383] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:28:22.575 [DEBUG] [Thread-66383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:28:22.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:28:22.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:28:22.576 [DEBUG] [Thread-66383] [transport.py] [_log()] userauth is OK
2025-12-12T09:28:22.576 [DEBUG] [Thread-66383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:28:22.576 [DEBUG] [Thread-66383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:28:22.576 [DEBUG] [Thread-66383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:28:22.576 [DEBUG] [Thread-66383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:28:22.602 [INFO] [Thread-66383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:28:22.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:28:23.376 [DEBUG] [Thread-66383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:28:23.376 [DEBUG] [Thread-66383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:28:23.376 [DEBUG] [Thread-66383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:28:23.417 [DEBUG] [Thread-66383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:28:23.417 [DEBUG] [Thread-66383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:28:23.419 [DEBUG] [Thread-66383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:28:23.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:28:23.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:28:23.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:28:23.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:28:23.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:28:23.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:28:23.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:28:23.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:28:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.310862 -999.00  +13.50  29.71     34   -1.80 1 2 1 1 1   888    0 15.95 43.25 ----- 29.7 29.7 345.6 42.0 16.4 -12.6 16.1 -12.7 15.9 -11.9 16.2 -11.7
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.310862
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:28:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:27:49', tmtdew=18.31, humidity=28.09, cloud=0.0, wind=27.29, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:27:38.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:28:23.429 [DEBUG] [Thread-66383] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:28:23.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:28:23.517 [DEBUG] [Thread-66386] [transport.py] [_log()] starting thread (client mode): 0xf81c27a0
2025-12-12T09:28:23.517 [DEBUG] [Thread-66386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:28:23.531 [DEBUG] [Thread-66386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:28:23.531 [INFO] [Thread-66386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] client lang: <none>
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] server lang: <none>
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] kex follows: False
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] Compression: none
2025-12-12T09:28:23.539 [DEBUG] [Thread-66386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:28:23.602 [DEBUG] [Thread-66386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:28:23.602 [DEBUG] [Thread-66386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:28:23.602 [DEBUG] [Thread-66386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:28:23.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:28:23.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:28:23.664 [DEBUG] [Thread-66386] [transport.py] [_log()] userauth is OK
2025-12-12T09:28:23.664 [DEBUG] [Thread-66386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:28:23.664 [DEBUG] [Thread-66386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:28:23.664 [DEBUG] [Thread-66386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:28:23.664 [DEBUG] [Thread-66386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:28:23.680 [INFO] [Thread-66386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:28:23.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:28:23.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:28:24.517 [DEBUG] [Thread-66386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:28:24.517 [DEBUG] [Thread-66386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:28:24.564 [DEBUG] [Thread-66386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:28:24.564 [DEBUG] [Thread-66386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:28:24.573 [DEBUG] [Thread-66386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:28:24.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:28:24.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:28:24.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:28:24.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:28:24.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:28:24.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:28:24.604 [DEBUG] [Thread-66386] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:28:30.044 [DEBUG] [Thread-66388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:32.505 [DEBUG] [Thread-66389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:37.064 [DEBUG] [Thread-66390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:39.090 [DEBUG] [Thread-66391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:48.114 [DEBUG] [Thread-66392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:52.129 [DEBUG] [Thread-66393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:54.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:28:54.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:28:54.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:28:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 28, 21), 18.29, 28.13, 0.0, 29.8, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:28:55.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:28:21
2025-12-12T09:28:55.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:28:55.628 [DEBUG] [Thread-66394] [transport.py] [_log()] starting thread (client mode): 0xf5772140
2025-12-12T09:28:55.628 [DEBUG] [Thread-66394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:28:55.648 [DEBUG] [Thread-66394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:28:55.649 [INFO] [Thread-66394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] client lang: <none>
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] server lang: <none>
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] kex follows: False
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] Compression: none
2025-12-12T09:28:55.652 [DEBUG] [Thread-66394] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:28:55.666 [DEBUG] [Thread-66394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:28:55.666 [DEBUG] [Thread-66394] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:28:55.666 [DEBUG] [Thread-66394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:28:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:28:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:28:55.667 [DEBUG] [Thread-66394] [transport.py] [_log()] userauth is OK
2025-12-12T09:28:55.667 [DEBUG] [Thread-66394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:28:55.667 [DEBUG] [Thread-66394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:28:55.667 [DEBUG] [Thread-66394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:28:55.667 [DEBUG] [Thread-66394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:28:55.677 [INFO] [Thread-66394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:28:55.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:28:56.346 [DEBUG] [Thread-66394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:28:56.346 [DEBUG] [Thread-66394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:28:56.347 [DEBUG] [Thread-66394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:28:56.387 [DEBUG] [Thread-66394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:28:56.387 [DEBUG] [Thread-66394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:28:56.390 [DEBUG] [Thread-66394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:28:56.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:28:56.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:28:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:28:56.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:28:56.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:28:56.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:28:56.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:28:56.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:28:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:28:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.311209 -999.00  +13.50  17.66     34   -1.70 1 2 1 1 1   888    0 15.83 41.47 ----- 17.7 17.7 351.2 43.2 16.3 -12.9 16.1 -12.9 15.9 -12.1 16.1 -12.2
2025-12-12T09:28:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:28:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:28:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.311209
2025-12-12T09:28:56.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:28:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:28:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:28:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:28:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:28:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:28:21', tmtdew=18.29, humidity=28.13, cloud=0.0, wind=29.8, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:28:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:28:56.417 [DEBUG] [Thread-66394] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:28:56.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:28:56.510 [DEBUG] [Thread-66397] [transport.py] [_log()] starting thread (client mode): 0xf57b47c0
2025-12-12T09:28:56.511 [DEBUG] [Thread-66397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:28:56.528 [DEBUG] [Thread-66397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:28:56.528 [INFO] [Thread-66397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:28:56.535 [DEBUG] [Thread-66397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:28:56.535 [DEBUG] [Thread-66397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:28:56.535 [DEBUG] [Thread-66397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] client lang: <none>
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] server lang: <none>
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] kex follows: False
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] Compression: none
2025-12-12T09:28:56.536 [DEBUG] [Thread-66397] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:28:56.594 [DEBUG] [Thread-66397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:28:56.594 [DEBUG] [Thread-66397] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:28:56.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:28:56.595 [DEBUG] [Thread-66397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:28:56.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:28:56.649 [DEBUG] [Thread-66397] [transport.py] [_log()] userauth is OK
2025-12-12T09:28:56.650 [DEBUG] [Thread-66397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:28:56.650 [DEBUG] [Thread-66397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:28:56.650 [DEBUG] [Thread-66397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:28:56.650 [DEBUG] [Thread-66397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:28:56.668 [INFO] [Thread-66397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:28:56.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:28:56.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:28:57.146 [DEBUG] [Thread-66399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:28:57.525 [DEBUG] [Thread-66397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:28:57.525 [DEBUG] [Thread-66397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:28:57.573 [DEBUG] [Thread-66397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:28:57.573 [DEBUG] [Thread-66397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:28:57.582 [DEBUG] [Thread-66397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:28:57.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:28:57.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:28:57.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:28:57.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:28:57.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:28:57.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:28:57.619 [DEBUG] [Thread-66397] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:29:06.164 [DEBUG] [Thread-66400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:07.168 [DEBUG] [Thread-66401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:10.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:10.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:15.199 [DEBUG] [Thread-66402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:22.219 [DEBUG] [Thread-66403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:24.233 [DEBUG] [Thread-66404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:27.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:29:27.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:29:27.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:29:28.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 28, 53), 18.38, 27.64, 0.0, 26.22, 14.36, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:29:28.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:28:53
2025-12-12T09:29:28.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:29:28.608 [DEBUG] [Thread-66405] [transport.py] [_log()] starting thread (client mode): 0xf57bfb80
2025-12-12T09:29:28.608 [DEBUG] [Thread-66405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:29:28.627 [DEBUG] [Thread-66405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:29:28.628 [INFO] [Thread-66405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] client lang: <none>
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] server lang: <none>
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] kex follows: False
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] Compression: none
2025-12-12T09:29:28.631 [DEBUG] [Thread-66405] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:29:28.650 [DEBUG] [Thread-66405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:29:28.651 [DEBUG] [Thread-66405] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:29:28.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:29:28.652 [DEBUG] [Thread-66405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:29:28.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:29:28.654 [DEBUG] [Thread-66405] [transport.py] [_log()] userauth is OK
2025-12-12T09:29:28.654 [DEBUG] [Thread-66405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:29:28.654 [DEBUG] [Thread-66405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:29:28.654 [DEBUG] [Thread-66405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:29:28.655 [DEBUG] [Thread-66405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:29:28.679 [INFO] [Thread-66405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:29:28.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:29:29.481 [DEBUG] [Thread-66405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:29:29.481 [DEBUG] [Thread-66405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:29:29.482 [DEBUG] [Thread-66405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:29:29.523 [DEBUG] [Thread-66405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:29:29.523 [DEBUG] [Thread-66405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:29:29.527 [DEBUG] [Thread-66405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:29:29.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:29:29.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:29:29.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:29:29.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:29:29.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:29:29.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:29:29.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:29:29.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:29:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:29:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.311499 -999.00  +13.50  24.89     34   -1.70 1 2 1 1 1   888    0 16.22 45.79 ----- 35.6 24.9 16.9 44.9 16.3 -12.4 16.1 -12.5 15.9 -11.6 16.1 -11.7
2025-12-12T09:29:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:29:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:29:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.311499
2025-12-12T09:29:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:29:29.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:29:29.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:29:29.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:29:29.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:29:29.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:28:53', tmtdew=18.38, humidity=27.64, cloud=0.0, wind=26.22, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:28:33.514', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:29:29.551 [DEBUG] [Thread-66405] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:29:29.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:29:29.647 [DEBUG] [Thread-66408] [transport.py] [_log()] starting thread (client mode): 0xf572a920
2025-12-12T09:29:29.647 [DEBUG] [Thread-66408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:29:29.662 [DEBUG] [Thread-66408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:29:29.662 [INFO] [Thread-66408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:29:29.670 [DEBUG] [Thread-66408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:29:29.670 [DEBUG] [Thread-66408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:29:29.670 [DEBUG] [Thread-66408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] client lang: <none>
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] server lang: <none>
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] kex follows: False
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:29:29.671 [DEBUG] [Thread-66408] [transport.py] [_log()] Compression: none
2025-12-12T09:29:29.672 [DEBUG] [Thread-66408] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:29:29.729 [DEBUG] [Thread-66408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:29:29.730 [DEBUG] [Thread-66408] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:29:29.730 [DEBUG] [Thread-66408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:29:29.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:29:29.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:29:29.786 [DEBUG] [Thread-66408] [transport.py] [_log()] userauth is OK
2025-12-12T09:29:29.786 [DEBUG] [Thread-66408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:29:29.786 [DEBUG] [Thread-66408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:29:29.786 [DEBUG] [Thread-66408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:29:29.786 [DEBUG] [Thread-66408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:29:29.805 [INFO] [Thread-66408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:29:29.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:29:29.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:29:30.643 [DEBUG] [Thread-66408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:29:30.643 [DEBUG] [Thread-66408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:29:30.691 [DEBUG] [Thread-66408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:29:30.691 [DEBUG] [Thread-66408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:29:30.700 [DEBUG] [Thread-66408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:29:30.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:29:30.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:29:30.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:29:30.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:29:30.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:29:30.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:29:30.745 [DEBUG] [Thread-66408] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:29:32.585 [DEBUG] [Thread-66410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:33.256 [DEBUG] [Thread-66411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:37.271 [DEBUG] [Thread-66412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:42.303 [DEBUG] [Thread-66413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:51.322 [DEBUG] [Thread-66414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:29:52.328 [DEBUG] [Thread-66415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:00.348 [DEBUG] [Thread-66416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:00.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:30:00.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:30:00.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:30:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 29, 58), 18.43, 27.64, 0.0, 30.38, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:30:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:29:58
2025-12-12T09:30:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:30:01.809 [DEBUG] [Thread-66417] [transport.py] [_log()] starting thread (client mode): 0xf572e650
2025-12-12T09:30:01.809 [DEBUG] [Thread-66417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:30:01.818 [DEBUG] [Thread-66417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:30:01.818 [INFO] [Thread-66417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] client lang: <none>
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] server lang: <none>
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] kex follows: False
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] Compression: none
2025-12-12T09:30:01.820 [DEBUG] [Thread-66417] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:30:01.827 [DEBUG] [Thread-66417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:30:01.827 [DEBUG] [Thread-66417] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:30:01.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:30:01.827 [DEBUG] [Thread-66417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:30:01.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:30:01.828 [DEBUG] [Thread-66417] [transport.py] [_log()] userauth is OK
2025-12-12T09:30:01.828 [DEBUG] [Thread-66417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:30:01.828 [DEBUG] [Thread-66417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:30:01.828 [DEBUG] [Thread-66417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:30:01.828 [DEBUG] [Thread-66417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:30:01.837 [INFO] [Thread-66417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:30:01.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:30:02.406 [DEBUG] [Thread-66417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:30:02.406 [DEBUG] [Thread-66417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:30:02.406 [DEBUG] [Thread-66417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:30:02.447 [DEBUG] [Thread-66417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:30:02.447 [DEBUG] [Thread-66417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:30:02.450 [DEBUG] [Thread-66417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:30:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:30:02.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:30:02.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:30:02.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:30:02.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:30:02.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:30:02.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:30:02.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:30:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:30:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.311904 -999.00  +13.70  30.38     34   -1.70 1 2 2 1 1   888    0 16.27 43.52 ----- 30.4 30.4 322.0 36.7 16.3 -12.7 16.1 -12.6 15.9 -11.9 16.1 -11.7
2025-12-12T09:30:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:30:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:30:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.311904
2025-12-12T09:30:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:30:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:30:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:30:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:30:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:30:02.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:29:58', tmtdew=18.43, humidity=27.64, cloud=0.0, wind=30.38, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:29:08.506', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:30:02.475 [DEBUG] [Thread-66417] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:30:02.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:30:02.572 [DEBUG] [Thread-66420] [transport.py] [_log()] starting thread (client mode): 0xf572a2c0
2025-12-12T09:30:02.572 [DEBUG] [Thread-66420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:30:02.587 [DEBUG] [Thread-66420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:30:02.587 [INFO] [Thread-66420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:30:02.594 [DEBUG] [Thread-66420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:30:02.594 [DEBUG] [Thread-66420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:30:02.594 [DEBUG] [Thread-66420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:30:02.594 [DEBUG] [Thread-66420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:02.594 [DEBUG] [Thread-66420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:02.594 [DEBUG] [Thread-66420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] client lang: <none>
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] server lang: <none>
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] kex follows: False
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] Compression: none
2025-12-12T09:30:02.595 [DEBUG] [Thread-66420] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:30:02.656 [DEBUG] [Thread-66420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:30:02.656 [DEBUG] [Thread-66420] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:30:02.657 [DEBUG] [Thread-66420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:30:02.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:30:02.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:30:02.718 [DEBUG] [Thread-66420] [transport.py] [_log()] userauth is OK
2025-12-12T09:30:02.718 [DEBUG] [Thread-66420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:30:02.718 [DEBUG] [Thread-66420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:30:02.718 [DEBUG] [Thread-66420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:30:02.718 [DEBUG] [Thread-66420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:30:02.736 [INFO] [Thread-66420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:30:02.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:30:02.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:30:03.610 [DEBUG] [Thread-66420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:30:03.610 [DEBUG] [Thread-66420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:30:03.660 [DEBUG] [Thread-66420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:30:03.660 [DEBUG] [Thread-66420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:30:03.671 [DEBUG] [Thread-66420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:30:03.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:30:03.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:30:03.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
2025-12-12T09:30:03.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:30:03.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:30:03.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:30:03.709 [DEBUG] [Thread-66420] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:30:07.362 [DEBUG] [Thread-66422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:09.384 [DEBUG] [Thread-66423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:10.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:10.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:18.398 [DEBUG] [Thread-66424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:22.405 [DEBUG] [Thread-66425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:27.418 [DEBUG] [Thread-66426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:32.636 [DEBUG] [Thread-66427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:33.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:30:33.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:30:33.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:30:34.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 30, 30), 18.46, 27.58, 0.0, 31.81, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:30:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:30:30
2025-12-12T09:30:34.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:30:34.695 [DEBUG] [Thread-66428] [transport.py] [_log()] starting thread (client mode): 0xf5772f80
2025-12-12T09:30:34.695 [DEBUG] [Thread-66428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:30:34.717 [DEBUG] [Thread-66428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:30:34.717 [INFO] [Thread-66428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:30:34.720 [DEBUG] [Thread-66428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] client lang: <none>
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] server lang: <none>
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] kex follows: False
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:30:34.721 [DEBUG] [Thread-66428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:30:34.722 [DEBUG] [Thread-66428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:30:34.722 [DEBUG] [Thread-66428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:30:34.722 [DEBUG] [Thread-66428] [transport.py] [_log()] Compression: none
2025-12-12T09:30:34.722 [DEBUG] [Thread-66428] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:30:34.739 [DEBUG] [Thread-66428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:30:34.739 [DEBUG] [Thread-66428] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:30:34.740 [DEBUG] [Thread-66428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:30:34.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:30:34.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:30:34.741 [DEBUG] [Thread-66428] [transport.py] [_log()] userauth is OK
2025-12-12T09:30:34.742 [DEBUG] [Thread-66428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:30:34.742 [DEBUG] [Thread-66428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:30:34.742 [DEBUG] [Thread-66428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:30:34.742 [DEBUG] [Thread-66428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:30:34.766 [INFO] [Thread-66428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:30:34.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:30:35.396 [DEBUG] [Thread-66428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:30:35.396 [DEBUG] [Thread-66428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:30:35.397 [DEBUG] [Thread-66428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:30:35.437 [DEBUG] [Thread-66428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:30:35.437 [DEBUG] [Thread-66428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:30:35.440 [DEBUG] [Thread-66428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:30:35.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:30:35.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:30:35.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:30:35.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:30:35.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:30:35.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:30:35.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:30:35.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:30:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:30:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.312251 -999.00  +13.70  29.48     34   -1.80 1 2 1 1 1   888    0 16.18 48.69 ----- 29.5 29.5 326.4 40.0 16.3 -12.6 16.1 -12.5 15.9 -11.8 16.1 -12.0
2025-12-12T09:30:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:30:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:30:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.312251
2025-12-12T09:30:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:30:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:30:35.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:30:35.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:30:35.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:30:35.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:30:30', tmtdew=18.46, humidity=27.58, cloud=0.0, wind=31.81, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:29:38.486', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:30:35.464 [DEBUG] [Thread-66428] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:30:35.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:30:35.568 [DEBUG] [Thread-66431] [transport.py] [_log()] starting thread (client mode): 0xf8155e40
2025-12-12T09:30:35.568 [DEBUG] [Thread-66431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:30:35.584 [DEBUG] [Thread-66431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:30:35.584 [INFO] [Thread-66431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:30:35.591 [DEBUG] [Thread-66431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:30:35.591 [DEBUG] [Thread-66431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:30:35.591 [DEBUG] [Thread-66431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:30:35.591 [DEBUG] [Thread-66431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:35.591 [DEBUG] [Thread-66431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] client lang: <none>
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] server lang: <none>
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] kex follows: False
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] Compression: none
2025-12-12T09:30:35.592 [DEBUG] [Thread-66431] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:30:35.650 [DEBUG] [Thread-66431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:30:35.651 [DEBUG] [Thread-66431] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:30:35.651 [DEBUG] [Thread-66431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:30:35.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:30:35.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:30:35.706 [DEBUG] [Thread-66431] [transport.py] [_log()] userauth is OK
2025-12-12T09:30:35.707 [DEBUG] [Thread-66431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:30:35.707 [DEBUG] [Thread-66431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:30:35.707 [DEBUG] [Thread-66431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:30:35.707 [DEBUG] [Thread-66431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:30:35.726 [INFO] [Thread-66431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:30:35.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:30:35.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:30:36.435 [DEBUG] [Thread-66433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:36.558 [DEBUG] [Thread-66431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:30:36.558 [DEBUG] [Thread-66431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:30:36.607 [DEBUG] [Thread-66431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:30:36.607 [DEBUG] [Thread-66431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:30:36.616 [DEBUG] [Thread-66431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:30:36.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:30:36.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:30:36.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:30:36.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:30:36.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:30:36.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:30:36.650 [DEBUG] [Thread-66431] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:30:37.441 [DEBUG] [Thread-66434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:45.472 [DEBUG] [Thread-66435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:52.486 [DEBUG] [Thread-66436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:30:54.497 [DEBUG] [Thread-66437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:03.511 [DEBUG] [Thread-66438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:06.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:31:06.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:31:06.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:31:07.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 31, 2), 18.67, 27.16, 0.0, 33.08, 14.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:31:07.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:31:02
2025-12-12T09:31:07.519 [DEBUG] [Thread-66439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:31:08.141 [DEBUG] [Thread-66440] [transport.py] [_log()] starting thread (client mode): 0xf57be260
2025-12-12T09:31:08.141 [DEBUG] [Thread-66440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:31:08.162 [DEBUG] [Thread-66440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:31:08.162 [INFO] [Thread-66440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] client lang: <none>
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] server lang: <none>
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] kex follows: False
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] Compression: none
2025-12-12T09:31:08.164 [DEBUG] [Thread-66440] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:31:08.172 [DEBUG] [Thread-66440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:31:08.172 [DEBUG] [Thread-66440] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:31:08.172 [DEBUG] [Thread-66440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:31:08.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:31:08.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:31:08.174 [DEBUG] [Thread-66440] [transport.py] [_log()] userauth is OK
2025-12-12T09:31:08.174 [DEBUG] [Thread-66440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:31:08.174 [DEBUG] [Thread-66440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:31:08.174 [DEBUG] [Thread-66440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:31:08.174 [DEBUG] [Thread-66440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:31:08.192 [INFO] [Thread-66440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:31:08.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:31:08.842 [DEBUG] [Thread-66440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:31:08.843 [DEBUG] [Thread-66440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:31:08.843 [DEBUG] [Thread-66440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:31:08.884 [DEBUG] [Thread-66440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:31:08.884 [DEBUG] [Thread-66440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:31:08.886 [DEBUG] [Thread-66440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:31:08.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:31:08.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:31:08.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:31:08.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:31:08.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:31:08.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:31:08.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:31:08.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:31:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:31:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.312945 -999.00  +13.50  34.29     34   -1.90 1 2 2 1 1   888    0 16.60 52.38 ----- 34.3 34.3 331.2 47.5 16.3 -12.7 16.0 -13.2 15.9 -12.0 16.2 -12.2
2025-12-12T09:31:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:31:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:31:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.312945
2025-12-12T09:31:08.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:31:08.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:31:08.911 [DEBUG] [Thread-66440] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:31:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:31:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:31:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:31:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:31:02', tmtdew=18.67, humidity=27.16, cloud=0.0, wind=33.08, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:30:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:31:09.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:31:09.014 [DEBUG] [Thread-66443] [transport.py] [_log()] starting thread (client mode): 0xf57b6110
2025-12-12T09:31:09.014 [DEBUG] [Thread-66443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:31:09.029 [DEBUG] [Thread-66443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:31:09.030 [INFO] [Thread-66443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:31:09.037 [DEBUG] [Thread-66443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:31:09.037 [DEBUG] [Thread-66443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:31:09.037 [DEBUG] [Thread-66443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:31:09.037 [DEBUG] [Thread-66443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] client lang: <none>
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] server lang: <none>
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] kex follows: False
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:31:09.038 [DEBUG] [Thread-66443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:31:09.039 [DEBUG] [Thread-66443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:31:09.039 [DEBUG] [Thread-66443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:31:09.039 [DEBUG] [Thread-66443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:31:09.039 [DEBUG] [Thread-66443] [transport.py] [_log()] Compression: none
2025-12-12T09:31:09.039 [DEBUG] [Thread-66443] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:31:09.095 [DEBUG] [Thread-66443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:31:09.096 [DEBUG] [Thread-66443] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:31:09.096 [DEBUG] [Thread-66443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:31:09.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:31:09.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:31:09.155 [DEBUG] [Thread-66443] [transport.py] [_log()] userauth is OK
2025-12-12T09:31:09.155 [DEBUG] [Thread-66443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:31:09.155 [DEBUG] [Thread-66443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:31:09.155 [DEBUG] [Thread-66443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:31:09.155 [DEBUG] [Thread-66443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:31:09.181 [INFO] [Thread-66443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:31:09.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:31:09.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:31:10.056 [DEBUG] [Thread-66443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:31:10.056 [DEBUG] [Thread-66443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:31:10.107 [DEBUG] [Thread-66443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:31:10.107 [DEBUG] [Thread-66443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:31:10.117 [DEBUG] [Thread-66443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:31:10.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:31:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:31:10.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:31:10.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:31:10.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:31:10.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:31:10.153 [DEBUG] [Thread-66443] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:31:10.412 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:10.413 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:12.532 [DEBUG] [Thread-66445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:21.551 [DEBUG] [Thread-66446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:22.559 [DEBUG] [Thread-66447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:30.597 [DEBUG] [Thread-66448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:32.694 [DEBUG] [Thread-66449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:37.616 [DEBUG] [Thread-66450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:39.628 [DEBUG] [Thread-66451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:31:40.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:31:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:31:40.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 31, 35), 18.73, 26.73, 0.0, 29.98, 14.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:31:40.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:31:35
2025-12-12T09:31:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:31:41.148 [DEBUG] [Thread-66452] [transport.py] [_log()] starting thread (client mode): 0xf8156590
2025-12-12T09:31:41.148 [DEBUG] [Thread-66452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:31:41.168 [DEBUG] [Thread-66452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:31:41.168 [INFO] [Thread-66452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] client lang: <none>
2025-12-12T09:31:41.171 [DEBUG] [Thread-66452] [transport.py] [_log()] server lang: <none>
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] kex follows: False
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] Compression: none
2025-12-12T09:31:41.172 [DEBUG] [Thread-66452] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:31:41.187 [DEBUG] [Thread-66452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:31:41.187 [DEBUG] [Thread-66452] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:31:41.187 [DEBUG] [Thread-66452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:31:41.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:31:41.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:31:41.188 [DEBUG] [Thread-66452] [transport.py] [_log()] userauth is OK
2025-12-12T09:31:41.188 [DEBUG] [Thread-66452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:31:41.188 [DEBUG] [Thread-66452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:31:41.188 [DEBUG] [Thread-66452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:31:41.188 [DEBUG] [Thread-66452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:31:41.207 [INFO] [Thread-66452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:31:41.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:31:41.875 [DEBUG] [Thread-66452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:31:41.875 [DEBUG] [Thread-66452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:31:41.875 [DEBUG] [Thread-66452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:31:41.916 [DEBUG] [Thread-66452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:31:41.916 [DEBUG] [Thread-66452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:31:41.918 [DEBUG] [Thread-66452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:31:41.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:31:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:31:41.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:31:41.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:31:41.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:31:41.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:31:41.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.313293 -999.00  +13.50  19.09     34   -1.90 1 2 1 1 1   888    0 16.51 50.26 ----- 19.1 19.1 356.4 38.5 16.2 -12.7 16.0 -12.6 15.9 -11.9 16.1 -11.7
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.313293
2025-12-12T09:31:41.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:31:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:31:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:31:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:31:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:31:41.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:31:35', tmtdew=18.73, humidity=26.73, cloud=0.0, wind=29.98, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:31:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:31:41.938 [DEBUG] [Thread-66452] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:31:42.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:31:42.019 [DEBUG] [Thread-66455] [transport.py] [_log()] starting thread (client mode): 0xf57bd0c0
2025-12-12T09:31:42.020 [DEBUG] [Thread-66455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:31:42.034 [DEBUG] [Thread-66455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:31:42.034 [INFO] [Thread-66455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:31:42.042 [DEBUG] [Thread-66455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] client lang: <none>
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] server lang: <none>
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] kex follows: False
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] Compression: none
2025-12-12T09:31:42.043 [DEBUG] [Thread-66455] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:31:42.102 [DEBUG] [Thread-66455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:31:42.103 [DEBUG] [Thread-66455] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:31:42.103 [DEBUG] [Thread-66455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:31:42.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:31:42.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:31:42.159 [DEBUG] [Thread-66455] [transport.py] [_log()] userauth is OK
2025-12-12T09:31:42.159 [DEBUG] [Thread-66455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:31:42.159 [DEBUG] [Thread-66455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:31:42.159 [DEBUG] [Thread-66455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:31:42.159 [DEBUG] [Thread-66455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:31:42.177 [INFO] [Thread-66455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:31:42.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:31:42.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:31:43.027 [DEBUG] [Thread-66455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:31:43.027 [DEBUG] [Thread-66455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:31:43.074 [DEBUG] [Thread-66455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:31:43.075 [DEBUG] [Thread-66455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:31:43.083 [DEBUG] [Thread-66455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:31:43.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:31:43.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:31:43.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:31:43.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:31:43.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:31:43.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:31:43.119 [DEBUG] [Thread-66455] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:31:48.648 [DEBUG] [Thread-66457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:52.661 [DEBUG] [Thread-66458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:31:57.690 [DEBUG] [Thread-66459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:06.711 [DEBUG] [Thread-66460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:07.718 [DEBUG] [Thread-66461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:10.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:10.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:13.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:32:13.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:32:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:32:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 32, 7), 18.8, 26.59, 0.0, 31.56, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:32:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:32:07
2025-12-12T09:32:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:32:14.107 [DEBUG] [Thread-66462] [transport.py] [_log()] starting thread (client mode): 0xf57b76d0
2025-12-12T09:32:14.107 [DEBUG] [Thread-66462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:32:14.129 [DEBUG] [Thread-66462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:32:14.129 [INFO] [Thread-66462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] client lang: <none>
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] server lang: <none>
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] kex follows: False
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:32:14.132 [DEBUG] [Thread-66462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:32:14.133 [DEBUG] [Thread-66462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:32:14.133 [DEBUG] [Thread-66462] [transport.py] [_log()] Compression: none
2025-12-12T09:32:14.133 [DEBUG] [Thread-66462] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:32:14.149 [DEBUG] [Thread-66462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:32:14.150 [DEBUG] [Thread-66462] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:32:14.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:32:14.150 [DEBUG] [Thread-66462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:32:14.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:32:14.153 [DEBUG] [Thread-66462] [transport.py] [_log()] userauth is OK
2025-12-12T09:32:14.153 [DEBUG] [Thread-66462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:32:14.153 [DEBUG] [Thread-66462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:32:14.153 [DEBUG] [Thread-66462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:32:14.153 [DEBUG] [Thread-66462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:32:14.178 [INFO] [Thread-66462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:32:14.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:32:14.841 [DEBUG] [Thread-66462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:32:14.842 [DEBUG] [Thread-66462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:32:14.842 [DEBUG] [Thread-66462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:32:14.882 [DEBUG] [Thread-66462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:32:14.883 [DEBUG] [Thread-66462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:32:14.886 [DEBUG] [Thread-66462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:32:14.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:32:14.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:32:14.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:32:14.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:32:14.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:32:14.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:32:14.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:32:14.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:32:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:32:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.313640 -999.00  +13.70  24.98     34   -1.80 1 2 1 1 1   888    0 16.49 49.04 ----- 25.0 25.0 342.2 32.9 16.3 -12.5 16.1 -12.2 15.9 -11.4 16.1 -11.5
2025-12-12T09:32:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:32:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:32:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.313640
2025-12-12T09:32:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:32:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:32:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:32:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:32:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:32:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:32:07', tmtdew=18.8, humidity=26.59, cloud=0.0, wind=31.56, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:31:38.496', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:32:14.916 [DEBUG] [Thread-66462] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:32:14.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:32:15.011 [DEBUG] [Thread-66465] [transport.py] [_log()] starting thread (client mode): 0xf57b7130
2025-12-12T09:32:15.012 [DEBUG] [Thread-66465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:32:15.027 [DEBUG] [Thread-66465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:32:15.027 [INFO] [Thread-66465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:32:15.034 [DEBUG] [Thread-66465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:32:15.034 [DEBUG] [Thread-66465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:32:15.034 [DEBUG] [Thread-66465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:32:15.034 [DEBUG] [Thread-66465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:15.034 [DEBUG] [Thread-66465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] client lang: <none>
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] server lang: <none>
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] kex follows: False
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] Compression: none
2025-12-12T09:32:15.035 [DEBUG] [Thread-66465] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:32:15.093 [DEBUG] [Thread-66465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:32:15.093 [DEBUG] [Thread-66465] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:32:15.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:32:15.094 [DEBUG] [Thread-66465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:32:15.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:32:15.148 [DEBUG] [Thread-66465] [transport.py] [_log()] userauth is OK
2025-12-12T09:32:15.149 [DEBUG] [Thread-66465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:32:15.149 [DEBUG] [Thread-66465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:32:15.149 [DEBUG] [Thread-66465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:32:15.149 [DEBUG] [Thread-66465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:32:15.167 [INFO] [Thread-66465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:32:15.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:32:15.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:32:15.736 [DEBUG] [Thread-66467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:16.020 [DEBUG] [Thread-66465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:32:16.021 [DEBUG] [Thread-66465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:32:16.068 [DEBUG] [Thread-66465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:32:16.068 [DEBUG] [Thread-66465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:32:16.076 [DEBUG] [Thread-66465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:32:16.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:32: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')
2025-12-12T09:32: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
2025-12-12T09:32:16.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:32:16.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:32:16.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:32:16.110 [DEBUG] [Thread-66465] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:32:22.750 [DEBUG] [Thread-66468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:24.766 [DEBUG] [Thread-66469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:32.755 [DEBUG] [Thread-66470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:33.792 [DEBUG] [Thread-66471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:37.806 [DEBUG] [Thread-66472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:42.824 [DEBUG] [Thread-66473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:46.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:32:46.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:32:46.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:32:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 32, 39), 18.82, 26.96, 0.0, 32.29, 14.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:32:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:32:39
2025-12-12T09:32:46.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:32:47.069 [DEBUG] [Thread-66474] [transport.py] [_log()] starting thread (client mode): 0xf2d0ca90
2025-12-12T09:32:47.069 [DEBUG] [Thread-66474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:32:47.090 [DEBUG] [Thread-66474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:32:47.090 [INFO] [Thread-66474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:32:47.093 [DEBUG] [Thread-66474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:32:47.093 [DEBUG] [Thread-66474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] client lang: <none>
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] server lang: <none>
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] kex follows: False
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] Compression: none
2025-12-12T09:32:47.094 [DEBUG] [Thread-66474] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:32:47.113 [DEBUG] [Thread-66474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:32:47.114 [DEBUG] [Thread-66474] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:32:47.114 [DEBUG] [Thread-66474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:32:47.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:32:47.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:32:47.116 [DEBUG] [Thread-66474] [transport.py] [_log()] userauth is OK
2025-12-12T09:32:47.117 [DEBUG] [Thread-66474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:32:47.117 [DEBUG] [Thread-66474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:32:47.117 [DEBUG] [Thread-66474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:32:47.117 [DEBUG] [Thread-66474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:32:47.150 [INFO] [Thread-66474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:32:47.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:32:47.803 [DEBUG] [Thread-66474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:32:47.803 [DEBUG] [Thread-66474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:32:47.803 [DEBUG] [Thread-66474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:32:47.844 [DEBUG] [Thread-66474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:32:47.844 [DEBUG] [Thread-66474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:32:47.848 [DEBUG] [Thread-66474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:32:47.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:32:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:32:47.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:32:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:32:47.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:32:47.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:32:47.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:32:47.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:32:47.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:32:47.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.313987 -999.00  +13.90  25.79     33   -1.60 1 2 1 1 1   888    0 16.55 52.57 ----- 25.8 25.8 334.8 40.0 16.4 -12.3 16.1 -12.2 15.9 -11.1 16.2 -11.3
2025-12-12T09:32:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:32:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:32:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.313987
2025-12-12T09:32:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:32:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:32:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:32:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:32:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:32:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:32:39', tmtdew=18.82, humidity=26.96, cloud=0.0, wind=32.29, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:32:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:32:47.874 [DEBUG] [Thread-66474] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:32:47.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:32:47.973 [DEBUG] [Thread-66477] [transport.py] [_log()] starting thread (client mode): 0xf2d0cb80
2025-12-12T09:32:47.973 [DEBUG] [Thread-66477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:32:47.996 [DEBUG] [Thread-66477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:32:47.997 [INFO] [Thread-66477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:32:48.005 [DEBUG] [Thread-66477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:32:48.005 [DEBUG] [Thread-66477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] client lang: <none>
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] server lang: <none>
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] kex follows: False
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:32:48.006 [DEBUG] [Thread-66477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:32:48.007 [DEBUG] [Thread-66477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:32:48.007 [DEBUG] [Thread-66477] [transport.py] [_log()] Compression: none
2025-12-12T09:32:48.007 [DEBUG] [Thread-66477] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:32:48.073 [DEBUG] [Thread-66477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:32:48.073 [DEBUG] [Thread-66477] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:32:48.074 [DEBUG] [Thread-66477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:32:48.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:32:48.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:32:48.134 [DEBUG] [Thread-66477] [transport.py] [_log()] userauth is OK
2025-12-12T09:32:48.134 [DEBUG] [Thread-66477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:32:48.134 [DEBUG] [Thread-66477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:32:48.134 [DEBUG] [Thread-66477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:32:48.134 [DEBUG] [Thread-66477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:32:48.155 [INFO] [Thread-66477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:32:48.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:32:48.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:32:49.025 [DEBUG] [Thread-66477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:32:49.025 [DEBUG] [Thread-66477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:32:49.073 [DEBUG] [Thread-66477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:32:49.073 [DEBUG] [Thread-66477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:32:49.086 [DEBUG] [Thread-66477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:32:49.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:32:49.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:32:49.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:32:49.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:32:49.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:32:49.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:32:49.126 [DEBUG] [Thread-66477] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:32:51.849 [DEBUG] [Thread-66479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:32:52.856 [DEBUG] [Thread-66480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:00.900 [DEBUG] [Thread-66481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:07.916 [DEBUG] [Thread-66482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:09.931 [DEBUG] [Thread-66483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:10.697 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:10.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:18.954 [DEBUG] [Thread-66484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:19.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:33:19.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:33:19.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:33:19.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 33, 11), 18.72, 27.16, 0.0, 38.5, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:33:19.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:33:11
2025-12-12T09:33:19.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:33:20.095 [DEBUG] [Thread-66485] [transport.py] [_log()] starting thread (client mode): 0xf2d0d1b0
2025-12-12T09:33:20.095 [DEBUG] [Thread-66485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:33:20.114 [DEBUG] [Thread-66485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:33:20.115 [INFO] [Thread-66485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] client lang: <none>
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] server lang: <none>
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] kex follows: False
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:33:20.118 [DEBUG] [Thread-66485] [transport.py] [_log()] Compression: none
2025-12-12T09:33:20.119 [DEBUG] [Thread-66485] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:33:20.135 [DEBUG] [Thread-66485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:33:20.135 [DEBUG] [Thread-66485] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:33:20.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:33:20.136 [DEBUG] [Thread-66485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:33:20.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:33:20.176 [DEBUG] [Thread-66485] [transport.py] [_log()] userauth is OK
2025-12-12T09:33:20.177 [DEBUG] [Thread-66485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:33:20.177 [DEBUG] [Thread-66485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:33:20.177 [DEBUG] [Thread-66485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:33:20.177 [DEBUG] [Thread-66485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:33:20.213 [INFO] [Thread-66485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:33:20.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:33:20.874 [DEBUG] [Thread-66485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:33:20.875 [DEBUG] [Thread-66485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:33:20.875 [DEBUG] [Thread-66485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:33:20.916 [DEBUG] [Thread-66485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:33:20.916 [DEBUG] [Thread-66485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:33:20.919 [DEBUG] [Thread-66485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:33:20.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:33:20.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:33:20.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:33:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:33:20.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:33:20.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:33:20.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:33:20.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:33:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:33:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.314334 -999.00  +14.10  30.15     32   -2.00 1 2 2 1 1   888    0 16.79 57.53 ----- 30.1 30.1 336.6 37.1 16.4 -12.2 16.2 -12.3 16.0 -11.0 16.3 -11.2
2025-12-12T09:33:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:33:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:33:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.314334
2025-12-12T09:33:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:33:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:33:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:33:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:33:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:33:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:33:11', tmtdew=18.72, humidity=27.16, cloud=0.0, wind=38.5, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:32:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:33:20.946 [DEBUG] [Thread-66485] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:33:21.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:33:21.040 [DEBUG] [Thread-66488] [transport.py] [_log()] starting thread (client mode): 0xf572eb60
2025-12-12T09:33:21.041 [DEBUG] [Thread-66488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:33:21.054 [DEBUG] [Thread-66488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:33:21.055 [INFO] [Thread-66488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:33:21.062 [DEBUG] [Thread-66488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:33:21.062 [DEBUG] [Thread-66488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:33:21.063 [DEBUG] [Thread-66488] [transport.py] [_log()] client lang: <none>
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] server lang: <none>
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] kex follows: False
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:33:21.064 [DEBUG] [Thread-66488] [transport.py] [_log()] Compression: none
2025-12-12T09:33:21.065 [DEBUG] [Thread-66488] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:33:21.122 [DEBUG] [Thread-66488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:33:21.122 [DEBUG] [Thread-66488] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:33:21.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:33:21.124 [DEBUG] [Thread-66488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:33:21.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:33:21.181 [DEBUG] [Thread-66488] [transport.py] [_log()] userauth is OK
2025-12-12T09:33:21.181 [DEBUG] [Thread-66488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:33:21.181 [DEBUG] [Thread-66488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:33:21.181 [DEBUG] [Thread-66488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:33:21.182 [DEBUG] [Thread-66488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:33:21.199 [INFO] [Thread-66488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:33:21.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:33:21.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:33:22.057 [DEBUG] [Thread-66488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:33:22.057 [DEBUG] [Thread-66488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:33:22.105 [DEBUG] [Thread-66488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:33:22.105 [DEBUG] [Thread-66488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:33:22.114 [DEBUG] [Thread-66488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:33:22.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:33: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')
2025-12-12T09:33:22.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:33:22.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:33:22.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:33:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:33:22.149 [DEBUG] [Thread-66488] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:33:22.966 [DEBUG] [Thread-66490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:27.999 [DEBUG] [Thread-66491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:32.808 [DEBUG] [Thread-66492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:37.019 [DEBUG] [Thread-66493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:38.022 [DEBUG] [Thread-66494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:46.038 [DEBUG] [Thread-66495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:52.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:33:52.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:33:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:33:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 33, 43), 18.9, 26.83, 0.0, 30.84, 14.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:33:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:33:43
2025-12-12T09:33:52.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:33:53.054 [DEBUG] [Thread-66496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:53.128 [DEBUG] [Thread-66497] [transport.py] [_log()] starting thread (client mode): 0xf572dd20
2025-12-12T09:33:53.128 [DEBUG] [Thread-66497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:33:53.149 [DEBUG] [Thread-66497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:33:53.149 [INFO] [Thread-66497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:33:53.152 [DEBUG] [Thread-66497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:33:53.152 [DEBUG] [Thread-66497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:33:53.152 [DEBUG] [Thread-66497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:33:53.152 [DEBUG] [Thread-66497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:53.152 [DEBUG] [Thread-66497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] client lang: <none>
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] server lang: <none>
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] kex follows: False
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] Compression: none
2025-12-12T09:33:53.153 [DEBUG] [Thread-66497] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:33:53.170 [DEBUG] [Thread-66497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:33:53.170 [DEBUG] [Thread-66497] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:33:53.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:33:53.171 [DEBUG] [Thread-66497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:33:53.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:33:53.173 [DEBUG] [Thread-66497] [transport.py] [_log()] userauth is OK
2025-12-12T09:33:53.174 [DEBUG] [Thread-66497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:33:53.174 [DEBUG] [Thread-66497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:33:53.174 [DEBUG] [Thread-66497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:33:53.174 [DEBUG] [Thread-66497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:33:53.198 [INFO] [Thread-66497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:33:53.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:33:53.837 [DEBUG] [Thread-66497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:33:53.837 [DEBUG] [Thread-66497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:33:53.837 [DEBUG] [Thread-66497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:33:53.878 [DEBUG] [Thread-66497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:33:53.878 [DEBUG] [Thread-66497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:33:53.882 [DEBUG] [Thread-66497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:33:53.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:33:53.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:33:53.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:33:53.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:33:53.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:33:53.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:33:53.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:33:53.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:33:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:33:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.314624 -999.00  +14.00  29.11     31   -2.40 1 2 1 1 1   888    0 17.15 60.44 ----- 28.4 29.1 331.0 40.3 16.5 -12.1 16.3 -12.7 16.0 -11.1 16.4 -11.1
2025-12-12T09:33:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:33:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:33:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.314624
2025-12-12T09:33:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:33:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:33:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:33:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:33:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:33:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:33:43', tmtdew=18.9, humidity=26.83, cloud=0.0, wind=30.84, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:33:03.514', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:33:53.911 [DEBUG] [Thread-66497] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:33:54.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:33:54.019 [DEBUG] [Thread-66500] [transport.py] [_log()] starting thread (client mode): 0xf572d8a0
2025-12-12T09:33:54.019 [DEBUG] [Thread-66500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:33:54.034 [DEBUG] [Thread-66500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:33:54.034 [INFO] [Thread-66500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:33:54.041 [DEBUG] [Thread-66500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] client lang: <none>
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] server lang: <none>
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] kex follows: False
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] Compression: none
2025-12-12T09:33:54.042 [DEBUG] [Thread-66500] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:33:54.101 [DEBUG] [Thread-66500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:33:54.102 [DEBUG] [Thread-66500] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:33:54.102 [DEBUG] [Thread-66500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:33:54.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:33:54.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:33:54.157 [DEBUG] [Thread-66500] [transport.py] [_log()] userauth is OK
2025-12-12T09:33:54.158 [DEBUG] [Thread-66500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:33:54.158 [DEBUG] [Thread-66500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:33:54.158 [DEBUG] [Thread-66500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:33:54.158 [DEBUG] [Thread-66500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:33:54.177 [INFO] [Thread-66500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:33:54.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:33:54.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:33:54.997 [DEBUG] [Thread-66500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:33:54.998 [DEBUG] [Thread-66500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:33:55.045 [DEBUG] [Thread-66500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:33:55.045 [DEBUG] [Thread-66500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:33:55.054 [DEBUG] [Thread-66500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:33:55.063 [DEBUG] [Thread-66502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:33:55.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:33:55.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:33:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:33:55.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:33:55.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:33:55.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:33:55.092 [DEBUG] [Thread-66500] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:34:04.088 [DEBUG] [Thread-66503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:08.099 [DEBUG] [Thread-66504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:10.838 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:10.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:13.136 [DEBUG] [Thread-66505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:22.157 [DEBUG] [Thread-66506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:23.163 [DEBUG] [Thread-66507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:34:25.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:34:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:34:25.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 34, 15), 18.93, 26.78, 0.0, 38.89, 14.29, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:34:25.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:34:15
2025-12-12T09:34:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:34:26.058 [DEBUG] [Thread-66508] [transport.py] [_log()] starting thread (client mode): 0xf2d0e6b0
2025-12-12T09:34:26.059 [DEBUG] [Thread-66508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:34:26.080 [DEBUG] [Thread-66508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:34:26.081 [INFO] [Thread-66508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:34:26.084 [DEBUG] [Thread-66508] [transport.py] [_log()] client lang: <none>
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] server lang: <none>
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] kex follows: False
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] Compression: none
2025-12-12T09:34:26.085 [DEBUG] [Thread-66508] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:34:26.105 [DEBUG] [Thread-66508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:34:26.106 [DEBUG] [Thread-66508] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:34:26.107 [DEBUG] [Thread-66508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:34:26.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:34:26.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:34:26.109 [DEBUG] [Thread-66508] [transport.py] [_log()] userauth is OK
2025-12-12T09:34:26.109 [DEBUG] [Thread-66508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:34:26.110 [DEBUG] [Thread-66508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:34:26.110 [DEBUG] [Thread-66508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:34:26.110 [DEBUG] [Thread-66508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:34:26.134 [INFO] [Thread-66508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:34:26.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:34:26.794 [DEBUG] [Thread-66508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:34:26.794 [DEBUG] [Thread-66508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:34:26.795 [DEBUG] [Thread-66508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:34:26.835 [DEBUG] [Thread-66508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:34:26.835 [DEBUG] [Thread-66508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:34:26.837 [DEBUG] [Thread-66508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:34:26.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:34:26.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:34:26.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:34:26.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:34:26.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:34:26.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:34:26.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:34:26.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.315318 -999.00  +13.70  35.83     32   -2.30 1 2 2 1 1   888    0 16.94 61.82 ----- 21.8 35.8 335.2 45.0 16.4 -12.7 16.1 -12.6 16.1 -11.7 16.3 -11.6
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.315318
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:34:26.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:34:15', tmtdew=18.93, humidity=26.78, cloud=0.0, wind=38.89, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:34:03.475', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:34:26.856 [DEBUG] [Thread-66508] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:34:26.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:34:26.937 [DEBUG] [Thread-66511] [transport.py] [_log()] starting thread (client mode): 0xf572fa00
2025-12-12T09:34:26.937 [DEBUG] [Thread-66511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:34:26.952 [DEBUG] [Thread-66511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:34:26.952 [INFO] [Thread-66511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:34:26.959 [DEBUG] [Thread-66511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] client lang: <none>
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] server lang: <none>
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] kex follows: False
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] Compression: none
2025-12-12T09:34:26.960 [DEBUG] [Thread-66511] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:34:27.018 [DEBUG] [Thread-66511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:34:27.018 [DEBUG] [Thread-66511] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:34:27.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:34:27.019 [DEBUG] [Thread-66511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:34:27.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:34:27.074 [DEBUG] [Thread-66511] [transport.py] [_log()] userauth is OK
2025-12-12T09:34:27.074 [DEBUG] [Thread-66511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:34:27.074 [DEBUG] [Thread-66511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:34:27.075 [DEBUG] [Thread-66511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:34:27.075 [DEBUG] [Thread-66511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:34:27.095 [INFO] [Thread-66511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:34:27.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:34:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:34:27.951 [DEBUG] [Thread-66511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:34:27.951 [DEBUG] [Thread-66511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:34:27.999 [DEBUG] [Thread-66511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:34:27.999 [DEBUG] [Thread-66511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:34:28.008 [DEBUG] [Thread-66511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:34:28.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:34: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')
2025-12-12T09:34: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
2025-12-12T09:34:28.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:34:28.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:34:28.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:34:28.045 [DEBUG] [Thread-66511] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:34:31.185 [DEBUG] [Thread-66513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:32.865 [DEBUG] [Thread-66514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:38.207 [DEBUG] [Thread-66515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:40.236 [DEBUG] [Thread-66516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:49.257 [DEBUG] [Thread-66517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:53.267 [DEBUG] [Thread-66518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:34:58.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:34:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:34:58.275 [DEBUG] [Thread-66519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:34:58.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 34, 47), 18.66, 27.39, 0.0, 32.13, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:34:58.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:34:47
2025-12-12T09:34:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:34:59.068 [DEBUG] [Thread-66520] [transport.py] [_log()] starting thread (client mode): 0xf572f010
2025-12-12T09:34:59.068 [DEBUG] [Thread-66520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:34:59.089 [DEBUG] [Thread-66520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:34:59.089 [INFO] [Thread-66520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] client lang: <none>
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] server lang: <none>
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] kex follows: False
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] Compression: none
2025-12-12T09:34:59.092 [DEBUG] [Thread-66520] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:34:59.109 [DEBUG] [Thread-66520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:34:59.109 [DEBUG] [Thread-66520] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:34:59.109 [DEBUG] [Thread-66520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:34:59.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:34:59.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:34:59.110 [DEBUG] [Thread-66520] [transport.py] [_log()] userauth is OK
2025-12-12T09:34:59.110 [DEBUG] [Thread-66520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:34:59.110 [DEBUG] [Thread-66520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:34:59.110 [DEBUG] [Thread-66520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:34:59.110 [DEBUG] [Thread-66520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:34:59.120 [INFO] [Thread-66520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:34:59.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:34:59.761 [DEBUG] [Thread-66520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:34:59.761 [DEBUG] [Thread-66520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:34:59.762 [DEBUG] [Thread-66520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:34:59.802 [DEBUG] [Thread-66520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:34:59.802 [DEBUG] [Thread-66520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:34:59.806 [DEBUG] [Thread-66520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:34:59.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:34:59.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:34:59.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:34:59.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:34:59.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:34:59.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:34:59.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:34:59.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:34:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:34:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.315723 -999.00  +13.70  25.50     32   -2.40 1 2 1 1 1   888    0 16.87 61.99 ----- 25.5 25.5 346.9 44.0 16.4 -12.1 16.1 -12.6 16.0 -11.1 16.3 -10.9
2025-12-12T09:34:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:34:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:34:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.315723
2025-12-12T09:34:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:34:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:34:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:34:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:34:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:34:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:34:47', tmtdew=18.66, humidity=27.39, cloud=0.0, wind=32.13, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:34:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:34:59.834 [DEBUG] [Thread-66520] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:34:59.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:34:59.931 [DEBUG] [Thread-66523] [transport.py] [_log()] starting thread (client mode): 0xf57b4910
2025-12-12T09:34:59.931 [DEBUG] [Thread-66523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:34:59.946 [DEBUG] [Thread-66523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:34:59.946 [INFO] [Thread-66523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:34:59.953 [DEBUG] [Thread-66523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:34:59.954 [DEBUG] [Thread-66523] [transport.py] [_log()] client lang: <none>
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] server lang: <none>
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] kex follows: False
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] Compression: none
2025-12-12T09:34:59.955 [DEBUG] [Thread-66523] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:35:00.014 [DEBUG] [Thread-66523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:35:00.015 [DEBUG] [Thread-66523] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:35:00.015 [DEBUG] [Thread-66523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:35:00.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:35:00.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:35:00.070 [DEBUG] [Thread-66523] [transport.py] [_log()] userauth is OK
2025-12-12T09:35:00.070 [DEBUG] [Thread-66523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:35:00.070 [DEBUG] [Thread-66523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:35:00.070 [DEBUG] [Thread-66523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:35:00.070 [DEBUG] [Thread-66523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:35:00.089 [INFO] [Thread-66523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:35:00.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:35:00.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:35:00.938 [DEBUG] [Thread-66523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:35:00.938 [DEBUG] [Thread-66523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:35:00.990 [DEBUG] [Thread-66523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:35:00.990 [DEBUG] [Thread-66523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:35:01.003 [DEBUG] [Thread-66523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:35:01.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:35:01.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:35:01.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:35:01.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:35:01.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:35:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:35:01.047 [DEBUG] [Thread-66523] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:35:07.297 [DEBUG] [Thread-66525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:08.305 [DEBUG] [Thread-66526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:10.982 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:10.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:16.346 [DEBUG] [Thread-66527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:23.364 [DEBUG] [Thread-66528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:25.376 [DEBUG] [Thread-66529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:35:31.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:35:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:35:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 35, 20), 18.62, 27.48, 0.0, 34.62, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:35:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:35:20
2025-12-12T09:35:31.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:35:32.035 [DEBUG] [Thread-66530] [transport.py] [_log()] starting thread (client mode): 0xf2d0cd30
2025-12-12T09:35:32.035 [DEBUG] [Thread-66530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:35:32.055 [DEBUG] [Thread-66530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:35:32.055 [INFO] [Thread-66530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] client lang: <none>
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] server lang: <none>
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] kex follows: False
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] Compression: none
2025-12-12T09:35:32.059 [DEBUG] [Thread-66530] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:35:32.073 [DEBUG] [Thread-66530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:35:32.074 [DEBUG] [Thread-66530] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:35:32.074 [DEBUG] [Thread-66530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:35:32.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:35:32.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:35:32.075 [DEBUG] [Thread-66530] [transport.py] [_log()] userauth is OK
2025-12-12T09:35:32.075 [DEBUG] [Thread-66530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:35:32.075 [DEBUG] [Thread-66530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:35:32.075 [DEBUG] [Thread-66530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:35:32.075 [DEBUG] [Thread-66530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:35:32.087 [INFO] [Thread-66530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:35:32.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:35:32.735 [DEBUG] [Thread-66530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:35:32.735 [DEBUG] [Thread-66530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:35:32.735 [DEBUG] [Thread-66530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:35:32.776 [DEBUG] [Thread-66530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:35:32.777 [DEBUG] [Thread-66530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:35:32.779 [DEBUG] [Thread-66530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:35:32.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:35:32.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:35:32.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:35:32.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:35:32.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:35:32.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:35:32.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.316012 -999.00  +13.60  29.53     33   -2.10 1 2 1 1 1   888    0 17.44 65.99 ----- 26.9 29.5 346.0 38.0 16.4 -12.4 16.1 -12.6 16.0 -11.4 16.2 -11.4
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.316012
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:35:32.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:35:20', tmtdew=18.62, humidity=27.48, cloud=0.0, wind=34.62, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:35:03.437', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:35:32.796 [DEBUG] [Thread-66530] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:35:32.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:35:32.883 [DEBUG] [Thread-66533] [transport.py] [_log()] starting thread (client mode): 0xf57bd7e0
2025-12-12T09:35:32.884 [DEBUG] [Thread-66533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:35:32.899 [DEBUG] [Thread-66533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:35:32.899 [INFO] [Thread-66533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:35:32.910 [DEBUG] [Thread-66535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] client lang: <none>
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] server lang: <none>
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] kex follows: False
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] Compression: none
2025-12-12T09:35:32.911 [DEBUG] [Thread-66533] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:35:32.965 [DEBUG] [Thread-66533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:35:32.965 [DEBUG] [Thread-66533] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:35:32.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:35:32.965 [DEBUG] [Thread-66533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:35:32.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:35:33.022 [DEBUG] [Thread-66533] [transport.py] [_log()] userauth is OK
2025-12-12T09:35:33.022 [DEBUG] [Thread-66533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:35:33.022 [DEBUG] [Thread-66533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:35:33.022 [DEBUG] [Thread-66533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:35:33.022 [DEBUG] [Thread-66533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:35:33.036 [INFO] [Thread-66533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:35:33.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:35:33.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:35:33.896 [DEBUG] [Thread-66533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:35:33.897 [DEBUG] [Thread-66533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:35:33.945 [DEBUG] [Thread-66533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:35:33.945 [DEBUG] [Thread-66533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:35:33.953 [DEBUG] [Thread-66533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:35:33.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:35:33.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:35:33.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:35:33.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:35:33.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:35:33.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:35:33.985 [DEBUG] [Thread-66533] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:35:34.394 [DEBUG] [Thread-66536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:38.405 [DEBUG] [Thread-66537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:43.439 [DEBUG] [Thread-66538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:52.463 [DEBUG] [Thread-66539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:35:53.467 [DEBUG] [Thread-66540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:01.487 [DEBUG] [Thread-66541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:36:04.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:36:04.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:36:04.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 35, 52), 18.67, 27.46, 0.0, 31.72, 14.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:36:04.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:35:52
2025-12-12T09:36:04.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:36:04.976 [DEBUG] [Thread-66542] [transport.py] [_log()] starting thread (client mode): 0xf57bfdc0
2025-12-12T09:36:04.976 [DEBUG] [Thread-66542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:36:04.995 [DEBUG] [Thread-66542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:36:04.996 [INFO] [Thread-66542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] client lang: <none>
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] server lang: <none>
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] kex follows: False
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] Compression: none
2025-12-12T09:36:04.999 [DEBUG] [Thread-66542] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:36:05.015 [DEBUG] [Thread-66542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:36:05.016 [DEBUG] [Thread-66542] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:36:05.016 [DEBUG] [Thread-66542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:36:05.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:36:05.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:36:05.018 [DEBUG] [Thread-66542] [transport.py] [_log()] userauth is OK
2025-12-12T09:36:05.018 [DEBUG] [Thread-66542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:36:05.019 [DEBUG] [Thread-66542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:36:05.019 [DEBUG] [Thread-66542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:36:05.019 [DEBUG] [Thread-66542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:36:05.054 [INFO] [Thread-66542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:36:05.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:36:05.716 [DEBUG] [Thread-66542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:36:05.716 [DEBUG] [Thread-66542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:36:05.717 [DEBUG] [Thread-66542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:36:05.757 [DEBUG] [Thread-66542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:36:05.757 [DEBUG] [Thread-66542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:36:05.761 [DEBUG] [Thread-66542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:36:05.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:36:05.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:36:05.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:36:05.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:36:05.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:36:05.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:36:05.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:36:05.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:36:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:36:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.316360 -999.00  +13.60  33.51     33   -2.00 1 2 2 1 1   888    0 17.45 70.25 ----- 39.7 33.5 335.2 47.3 16.3 -12.1 16.1 -12.6 15.9 -11.1 16.1 -11.5
2025-12-12T09:36:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:36:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:36:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.316360
2025-12-12T09:36:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:36:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:36:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:36:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:36:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:36:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:35:52', tmtdew=18.67, humidity=27.46, cloud=0.0, wind=31.72, temperature=14.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:35:33.504', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:36:05.788 [DEBUG] [Thread-66542] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:36:05.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:36:05.884 [DEBUG] [Thread-66545] [transport.py] [_log()] starting thread (client mode): 0xf57b4be0
2025-12-12T09:36:05.884 [DEBUG] [Thread-66545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:36:05.899 [DEBUG] [Thread-66545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:36:05.899 [INFO] [Thread-66545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:36:05.907 [DEBUG] [Thread-66545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] client lang: <none>
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] server lang: <none>
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] kex follows: False
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] Compression: none
2025-12-12T09:36:05.908 [DEBUG] [Thread-66545] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:36:05.967 [DEBUG] [Thread-66545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:36:05.967 [DEBUG] [Thread-66545] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:36:05.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:36:05.969 [DEBUG] [Thread-66545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:36:05.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:36:06.023 [DEBUG] [Thread-66545] [transport.py] [_log()] userauth is OK
2025-12-12T09:36:06.023 [DEBUG] [Thread-66545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:36:06.024 [DEBUG] [Thread-66545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:36:06.024 [DEBUG] [Thread-66545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:36:06.024 [DEBUG] [Thread-66545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:36:06.042 [INFO] [Thread-66545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:36:06.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:36:06.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:36:06.937 [DEBUG] [Thread-66545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:36:06.938 [DEBUG] [Thread-66545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:36:06.988 [DEBUG] [Thread-66545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:36:06.988 [DEBUG] [Thread-66545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:36:07.001 [DEBUG] [Thread-66545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:36:07.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:36:07.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:36: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') -> 00000000
2025-12-12T09:36:07.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:36:07.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:36:07.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:36:07.051 [DEBUG] [Thread-66545] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:36:08.507 [DEBUG] [Thread-66547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:10.535 [DEBUG] [Thread-66548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:11.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:11.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:19.556 [DEBUG] [Thread-66549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:23.570 [DEBUG] [Thread-66550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:28.590 [DEBUG] [Thread-66551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:32.971 [DEBUG] [Thread-66552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:37.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:36:37.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:36:37.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:36:37.611 [DEBUG] [Thread-66553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 36, 24), 18.62, 27.56, 0.0, 32.96, 14.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:36:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:36:24
2025-12-12T09:36:37.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:36:37.984 [DEBUG] [Thread-66554] [transport.py] [_log()] starting thread (client mode): 0xf2d0f7f0
2025-12-12T09:36:37.984 [DEBUG] [Thread-66554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:36:38.004 [DEBUG] [Thread-66554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:36:38.004 [INFO] [Thread-66554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:36:38.007 [DEBUG] [Thread-66554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] client lang: <none>
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] server lang: <none>
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] kex follows: False
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] Compression: none
2025-12-12T09:36:38.008 [DEBUG] [Thread-66554] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:36:38.025 [DEBUG] [Thread-66554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:36:38.026 [DEBUG] [Thread-66554] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:36:38.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:36:38.027 [DEBUG] [Thread-66554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:36:38.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:36:38.029 [DEBUG] [Thread-66554] [transport.py] [_log()] userauth is OK
2025-12-12T09:36:38.029 [DEBUG] [Thread-66554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:36:38.029 [DEBUG] [Thread-66554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:36:38.030 [DEBUG] [Thread-66554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:36:38.030 [DEBUG] [Thread-66554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:36:38.052 [INFO] [Thread-66554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:36:38.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:36:38.618 [DEBUG] [Thread-66556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:38.678 [DEBUG] [Thread-66554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:36:38.678 [DEBUG] [Thread-66554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:36:38.678 [DEBUG] [Thread-66554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:36:38.719 [DEBUG] [Thread-66554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:36:38.720 [DEBUG] [Thread-66554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:36:38.723 [DEBUG] [Thread-66554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:36:38.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:36:38.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:36:38.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:36:38.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:36:38.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:36:38.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:36:38.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:36:38.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:36:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:36:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.316708 -999.00  +13.60  22.50     33   -2.00 1 2 1 1 1   888    0 17.13 71.13 ----- 26.8 22.5 358.6 39.5 16.3 -11.9 16.0 -12.2 15.9 -11.1 16.1 -11.0
2025-12-12T09:36:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:36:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:36:38.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.316708
2025-12-12T09:36:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:36:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:36:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:36:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:36:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:36:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:36:24', tmtdew=18.62, humidity=27.56, cloud=0.0, wind=32.96, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:36:03.571', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:36:38.752 [DEBUG] [Thread-66554] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:36:38.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:36:38.849 [DEBUG] [Thread-66558] [transport.py] [_log()] starting thread (client mode): 0xf2d0feb0
2025-12-12T09:36:38.849 [DEBUG] [Thread-66558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:36:38.864 [DEBUG] [Thread-66558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:36:38.864 [INFO] [Thread-66558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:36:38.876 [DEBUG] [Thread-66558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:36:38.877 [DEBUG] [Thread-66558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:36:38.877 [DEBUG] [Thread-66558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:36:38.877 [DEBUG] [Thread-66558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] client lang: <none>
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] server lang: <none>
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] kex follows: False
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:36:38.878 [DEBUG] [Thread-66558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:36:38.879 [DEBUG] [Thread-66558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:36:38.879 [DEBUG] [Thread-66558] [transport.py] [_log()] Compression: none
2025-12-12T09:36:38.879 [DEBUG] [Thread-66558] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:36:38.931 [DEBUG] [Thread-66558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:36:38.932 [DEBUG] [Thread-66558] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:36:38.933 [DEBUG] [Thread-66558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:36:38.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:36:38.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:36:38.991 [DEBUG] [Thread-66558] [transport.py] [_log()] userauth is OK
2025-12-12T09:36:38.992 [DEBUG] [Thread-66558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:36:38.992 [DEBUG] [Thread-66558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:36:38.992 [DEBUG] [Thread-66558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:36:38.992 [DEBUG] [Thread-66558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:36:39.010 [INFO] [Thread-66558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:36:39.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:36:39.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:36:39.918 [DEBUG] [Thread-66558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:36:39.918 [DEBUG] [Thread-66558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:36:39.975 [DEBUG] [Thread-66558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:36:39.976 [DEBUG] [Thread-66558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:36:39.995 [DEBUG] [Thread-66558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:36:40.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:36:40.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')
2025-12-12T09:36:40.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:36:40.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:36:40.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:36:40.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:36:40.062 [DEBUG] [Thread-66558] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:36:46.644 [DEBUG] [Thread-66560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:53.659 [DEBUG] [Thread-66561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:36:55.676 [DEBUG] [Thread-66562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:04.699 [DEBUG] [Thread-66563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:08.714 [DEBUG] [Thread-66564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:37:10.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:37:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:37:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 36, 56), 18.58, 27.54, 0.0, 40.95, 14.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:37:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:36:56
2025-12-12T09:37:10.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:37:11.037 [DEBUG] [Thread-66565] [transport.py] [_log()] starting thread (client mode): 0xf57bfee0
2025-12-12T09:37:11.037 [DEBUG] [Thread-66565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:37:11.056 [DEBUG] [Thread-66565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:37:11.056 [INFO] [Thread-66565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] client lang: <none>
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] server lang: <none>
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] kex follows: False
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] Compression: none
2025-12-12T09:37:11.059 [DEBUG] [Thread-66565] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:37:11.073 [DEBUG] [Thread-66565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:37:11.073 [DEBUG] [Thread-66565] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:37:11.074 [DEBUG] [Thread-66565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:37:11.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:37:11.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:37:11.076 [DEBUG] [Thread-66565] [transport.py] [_log()] userauth is OK
2025-12-12T09:37:11.076 [DEBUG] [Thread-66565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:37:11.076 [DEBUG] [Thread-66565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:37:11.076 [DEBUG] [Thread-66565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:37:11.076 [DEBUG] [Thread-66565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:37:11.094 [INFO] [Thread-66565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:37:11.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:37:11.264 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:11.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:11.725 [DEBUG] [Thread-66565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:37:11.725 [DEBUG] [Thread-66565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:37:11.726 [DEBUG] [Thread-66565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:37:11.766 [DEBUG] [Thread-66565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:37:11.766 [DEBUG] [Thread-66565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:37:11.770 [DEBUG] [Thread-66565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:37:11.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:37:11.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:37:11.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:37:11.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:37:11.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:37:11.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:37:11.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:37:11.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:37:11.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:37:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.317055 -999.00  +13.60  32.98     33   -2.10 1 2 2 1 1   888    0 17.30 68.27 ----- 29.9 33.0 337.4 43.7 16.3 -12.5 16.0 -12.3 15.9 -11.3 16.1 -12.1
2025-12-12T09:37:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:37:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:37:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.317055
2025-12-12T09:37:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:37:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:37:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:37:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:37:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:37:11.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:36:56', tmtdew=18.58, humidity=27.54, cloud=0.0, wind=40.95, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:36:33.552', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:37:11.790 [DEBUG] [Thread-66565] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:37:11.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:37:11.885 [DEBUG] [Thread-66568] [transport.py] [_log()] starting thread (client mode): 0xf57724a0
2025-12-12T09:37:11.885 [DEBUG] [Thread-66568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:37:11.905 [DEBUG] [Thread-66568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:37:11.905 [INFO] [Thread-66568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:37:11.913 [DEBUG] [Thread-66568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:37:11.913 [DEBUG] [Thread-66568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] client lang: <none>
2025-12-12T09:37:11.914 [DEBUG] [Thread-66568] [transport.py] [_log()] server lang: <none>
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] kex follows: False
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] Compression: none
2025-12-12T09:37:11.915 [DEBUG] [Thread-66568] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:37:11.972 [DEBUG] [Thread-66568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:37:11.973 [DEBUG] [Thread-66568] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:37:11.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:37:11.974 [DEBUG] [Thread-66568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:37:11.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:37:12.028 [DEBUG] [Thread-66568] [transport.py] [_log()] userauth is OK
2025-12-12T09:37:12.028 [DEBUG] [Thread-66568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:37:12.028 [DEBUG] [Thread-66568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:37:12.029 [DEBUG] [Thread-66568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:37:12.029 [DEBUG] [Thread-66568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:37:12.048 [INFO] [Thread-66568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:37:12.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:37:12.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:37:12.906 [DEBUG] [Thread-66568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:37:12.906 [DEBUG] [Thread-66568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:37:12.955 [DEBUG] [Thread-66568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:37:12.955 [DEBUG] [Thread-66568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:37:12.965 [DEBUG] [Thread-66568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:37:12.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:37:12.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:37:12.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:37:12.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:37:12.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:37:12.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:37:13.005 [DEBUG] [Thread-66568] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:37:13.731 [DEBUG] [Thread-66570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:22.755 [DEBUG] [Thread-66571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:23.762 [DEBUG] [Thread-66572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:31.796 [DEBUG] [Thread-66573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:33.014 [DEBUG] [Thread-66574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:38.813 [DEBUG] [Thread-66575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:40.826 [DEBUG] [Thread-66576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:43.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:37:43.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:37:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:37:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 37, 28), 18.56, 27.58, 0.0, 40.37, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:37:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:37:28
2025-12-12T09:37:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:37:44.004 [DEBUG] [Thread-66577] [transport.py] [_log()] starting thread (client mode): 0xf572eb90
2025-12-12T09:37:44.004 [DEBUG] [Thread-66577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:37:44.025 [DEBUG] [Thread-66577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:37:44.025 [INFO] [Thread-66577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:37:44.029 [DEBUG] [Thread-66577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] client lang: <none>
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] server lang: <none>
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] kex follows: False
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] Compression: none
2025-12-12T09:37:44.030 [DEBUG] [Thread-66577] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:37:44.047 [DEBUG] [Thread-66577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:37:44.048 [DEBUG] [Thread-66577] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:37:44.048 [DEBUG] [Thread-66577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:37:44.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:37:44.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:37:44.050 [DEBUG] [Thread-66577] [transport.py] [_log()] userauth is OK
2025-12-12T09:37:44.051 [DEBUG] [Thread-66577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:37:44.051 [DEBUG] [Thread-66577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:37:44.051 [DEBUG] [Thread-66577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:37:44.051 [DEBUG] [Thread-66577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:37:44.075 [INFO] [Thread-66577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:37:44.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:37:44.711 [DEBUG] [Thread-66577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:37:44.711 [DEBUG] [Thread-66577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:37:44.711 [DEBUG] [Thread-66577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:37:44.752 [DEBUG] [Thread-66577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:37:44.752 [DEBUG] [Thread-66577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:37:44.756 [DEBUG] [Thread-66577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:37:44.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:37:44.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:37:44.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:37:44.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:37:44.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:37:44.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:37:44.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:37:44.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:37:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:37:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.317459 -999.00  +13.60  32.10     33   -2.00 1 2 2 1 1   888    0 17.28 67.57 ----- 32.1 32.1 348.8 46.9 16.2 -12.3 16.0 -12.3 15.9 -11.0 16.0 -11.8
2025-12-12T09:37:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:37:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:37:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.317459
2025-12-12T09:37:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:37:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:37:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:37:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:37:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:37:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:37:28', tmtdew=18.56, humidity=27.58, cloud=0.0, wind=40.37, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:37:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:37:44.783 [DEBUG] [Thread-66577] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:37:44.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:37:44.880 [DEBUG] [Thread-66580] [transport.py] [_log()] starting thread (client mode): 0xf2d0e830
2025-12-12T09:37:44.880 [DEBUG] [Thread-66580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:37:44.895 [DEBUG] [Thread-66580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:37:44.895 [INFO] [Thread-66580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:37:44.903 [DEBUG] [Thread-66580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] client lang: <none>
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] server lang: <none>
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] kex follows: False
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] Compression: none
2025-12-12T09:37:44.904 [DEBUG] [Thread-66580] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:37:44.960 [DEBUG] [Thread-66580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:37:44.961 [DEBUG] [Thread-66580] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:37:44.961 [DEBUG] [Thread-66580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:37:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:37:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:37:45.016 [DEBUG] [Thread-66580] [transport.py] [_log()] userauth is OK
2025-12-12T09:37:45.017 [DEBUG] [Thread-66580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:37:45.017 [DEBUG] [Thread-66580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:37:45.017 [DEBUG] [Thread-66580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:37:45.017 [DEBUG] [Thread-66580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:37:45.036 [INFO] [Thread-66580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:37:45.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:37:45.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:37:45.875 [DEBUG] [Thread-66580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:37:45.876 [DEBUG] [Thread-66580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:37:45.923 [DEBUG] [Thread-66580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:37:45.924 [DEBUG] [Thread-66580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:37:45.933 [DEBUG] [Thread-66580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:37:45.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:37:45.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:37:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:37:45.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:37:45.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:37:45.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:37:45.970 [DEBUG] [Thread-66580] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:37:49.849 [DEBUG] [Thread-66582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:53.863 [DEBUG] [Thread-66583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:37:58.898 [DEBUG] [Thread-66584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:07.920 [DEBUG] [Thread-66585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:08.924 [DEBUG] [Thread-66586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:11.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:11.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:38:15.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:38:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:38:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 37, 28), 18.46, 27.58, 0.0, 34.97, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:38:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:37:28
2025-12-12T09:38:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:38:16.946 [DEBUG] [Thread-66587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:16.957 [DEBUG] [Thread-66588] [transport.py] [_log()] starting thread (client mode): 0xf572be80
2025-12-12T09:38:16.957 [DEBUG] [Thread-66588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:38:16.977 [DEBUG] [Thread-66588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:38:16.977 [INFO] [Thread-66588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:38:16.980 [DEBUG] [Thread-66588] [transport.py] [_log()] client lang: <none>
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] server lang: <none>
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] kex follows: False
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] Compression: none
2025-12-12T09:38:16.981 [DEBUG] [Thread-66588] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:38:17.000 [DEBUG] [Thread-66588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:38:17.001 [DEBUG] [Thread-66588] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:38:17.001 [DEBUG] [Thread-66588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:38:17.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:38:17.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:38:17.003 [DEBUG] [Thread-66588] [transport.py] [_log()] userauth is OK
2025-12-12T09:38:17.004 [DEBUG] [Thread-66588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:38:17.004 [DEBUG] [Thread-66588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:38:17.004 [DEBUG] [Thread-66588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:38:17.004 [DEBUG] [Thread-66588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:38:17.027 [INFO] [Thread-66588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:38:17.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:38:17.662 [DEBUG] [Thread-66588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:38:17.663 [DEBUG] [Thread-66588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:38:17.663 [DEBUG] [Thread-66588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:38:17.704 [DEBUG] [Thread-66588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:38:17.704 [DEBUG] [Thread-66588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:38:17.707 [DEBUG] [Thread-66588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:38:17.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:38:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:38:17.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:38:17.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:38:17.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:38:17.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:38:17.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:38:17.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:38:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:38:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.317806 -999.00  +13.60  29.96     34   -1.70 1 2 1 1 1   888    0 17.04 62.82 ----- 30.0 30.0 350.0 45.7 16.2 -12.1 16.1 -11.8 15.8 -11.4 16.0 -11.2
2025-12-12T09:38:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:38:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:38:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.317806
2025-12-12T09:38:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:38:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:38:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:38:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:38:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:38:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:37:28', tmtdew=18.46, humidity=27.58, cloud=0.0, wind=34.97, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:37:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:38:17.729 [DEBUG] [Thread-66588] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:38:17.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:38:17.824 [DEBUG] [Thread-66591] [transport.py] [_log()] starting thread (client mode): 0xf572a740
2025-12-12T09:38:17.825 [DEBUG] [Thread-66591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:38:17.840 [DEBUG] [Thread-66591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:38:17.840 [INFO] [Thread-66591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:38:17.850 [DEBUG] [Thread-66591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:38:17.850 [DEBUG] [Thread-66591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:38:17.850 [DEBUG] [Thread-66591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:38:17.850 [DEBUG] [Thread-66591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:17.850 [DEBUG] [Thread-66591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:17.850 [DEBUG] [Thread-66591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] client lang: <none>
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] server lang: <none>
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] kex follows: False
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] Compression: none
2025-12-12T09:38:17.851 [DEBUG] [Thread-66591] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:38:17.905 [DEBUG] [Thread-66591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:38:17.905 [DEBUG] [Thread-66591] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:38:17.906 [DEBUG] [Thread-66591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:38:17.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:38:17.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:38:17.964 [DEBUG] [Thread-66591] [transport.py] [_log()] userauth is OK
2025-12-12T09:38:17.964 [DEBUG] [Thread-66591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:38:17.964 [DEBUG] [Thread-66591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:38:17.964 [DEBUG] [Thread-66591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:38:17.965 [DEBUG] [Thread-66591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:38:17.983 [INFO] [Thread-66591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:38:17.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:38:17.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:38:18.847 [DEBUG] [Thread-66591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:38:18.847 [DEBUG] [Thread-66591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:38:18.897 [DEBUG] [Thread-66591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:38:18.898 [DEBUG] [Thread-66591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:38:18.906 [DEBUG] [Thread-66591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:38:18.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:38:18.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:38:18.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:38:18.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:38:18.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:38:18.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:38:18.940 [DEBUG] [Thread-66591] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:38:23.961 [DEBUG] [Thread-66593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:25.983 [DEBUG] [Thread-66594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:33.061 [DEBUG] [Thread-66595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:35.005 [DEBUG] [Thread-66596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:39.020 [DEBUG] [Thread-66597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:44.040 [DEBUG] [Thread-66598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:38:48.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:38:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:38:49.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 38, 32), 18.03, 28.49, 0.0, 32.68, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:38:49.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:38:32
2025-12-12T09:38:49.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:38:49.972 [DEBUG] [Thread-66599] [transport.py] [_log()] starting thread (client mode): 0xf57b7c40
2025-12-12T09:38:49.972 [DEBUG] [Thread-66599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:38:49.991 [DEBUG] [Thread-66599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:38:49.991 [INFO] [Thread-66599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:38:49.994 [DEBUG] [Thread-66599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] client lang: <none>
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] server lang: <none>
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] kex follows: False
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] Compression: none
2025-12-12T09:38:49.995 [DEBUG] [Thread-66599] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:38:50.009 [DEBUG] [Thread-66599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:38:50.009 [DEBUG] [Thread-66599] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:38:50.009 [DEBUG] [Thread-66599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:38:50.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:38:50.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:38:50.010 [DEBUG] [Thread-66599] [transport.py] [_log()] userauth is OK
2025-12-12T09:38:50.010 [DEBUG] [Thread-66599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:38:50.010 [DEBUG] [Thread-66599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:38:50.010 [DEBUG] [Thread-66599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:38:50.010 [DEBUG] [Thread-66599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:38:50.025 [INFO] [Thread-66599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:38:50.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:38:50.607 [DEBUG] [Thread-66599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:38:50.607 [DEBUG] [Thread-66599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:38:50.607 [DEBUG] [Thread-66599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:38:50.648 [DEBUG] [Thread-66599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:38:50.648 [DEBUG] [Thread-66599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:38:50.650 [DEBUG] [Thread-66599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:38:50.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:38:50.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:38:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:38:50.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:38:50.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:38:50.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:38:50.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.318443 -999.00  +13.50  44.15     34   -1.70 1 2 2 1 1   888    0 17.01 60.02 ----- 28.0 44.1 339.4 49.6 16.3 -11.5 16.0 -11.8 15.9 -11.1 16.1 -10.6
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.318443
2025-12-12T09:38:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:38:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:38:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:38:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:38:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:38:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:38:32', tmtdew=18.03, humidity=28.49, cloud=0.0, wind=32.68, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:38:33.475', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:38:50.661 [DEBUG] [Thread-66599] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:38:50.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:38:50.748 [DEBUG] [Thread-66602] [transport.py] [_log()] starting thread (client mode): 0xf57b6050
2025-12-12T09:38:50.748 [DEBUG] [Thread-66602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:38:50.763 [DEBUG] [Thread-66602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:38:50.763 [INFO] [Thread-66602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] client lang: <none>
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] server lang: <none>
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] kex follows: False
2025-12-12T09:38:50.770 [DEBUG] [Thread-66602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:38:50.771 [DEBUG] [Thread-66602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:38:50.771 [DEBUG] [Thread-66602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:38:50.771 [DEBUG] [Thread-66602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:38:50.771 [DEBUG] [Thread-66602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:38:50.771 [DEBUG] [Thread-66602] [transport.py] [_log()] Compression: none
2025-12-12T09:38:50.771 [DEBUG] [Thread-66602] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:38:50.831 [DEBUG] [Thread-66602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:38:50.831 [DEBUG] [Thread-66602] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:38:50.831 [DEBUG] [Thread-66602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:38:50.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:38:50.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:38:50.888 [DEBUG] [Thread-66602] [transport.py] [_log()] userauth is OK
2025-12-12T09:38:50.888 [DEBUG] [Thread-66602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:38:50.888 [DEBUG] [Thread-66602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:38:50.888 [DEBUG] [Thread-66602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:38:50.888 [DEBUG] [Thread-66602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:38:50.903 [INFO] [Thread-66602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:38:50.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:38:50.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:38:51.778 [DEBUG] [Thread-66602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:38:51.778 [DEBUG] [Thread-66602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:38:51.826 [DEBUG] [Thread-66602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:38:51.826 [DEBUG] [Thread-66602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:38:51.838 [DEBUG] [Thread-66602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:38:51.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:38:51.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:38:51.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:38:51.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:38:51.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:38:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:38:51.876 [DEBUG] [Thread-66602] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:38:53.060 [DEBUG] [Thread-66604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:38:54.070 [DEBUG] [Thread-66605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:02.110 [DEBUG] [Thread-66606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:09.128 [DEBUG] [Thread-66607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:11.143 [DEBUG] [Thread-66608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:11.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:11.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:20.167 [DEBUG] [Thread-66609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:21.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:39:21.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:39:21.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:39:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 39, 4), 18.01, 28.52, 0.0, 34.16, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:39:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:39:04
2025-12-12T09:39:22.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:39:22.866 [DEBUG] [Thread-66610] [transport.py] [_log()] starting thread (client mode): 0xf572ed70
2025-12-12T09:39:22.867 [DEBUG] [Thread-66610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:39:22.889 [DEBUG] [Thread-66610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:39:22.889 [INFO] [Thread-66610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:39:22.890 [DEBUG] [Thread-66610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] client lang: <none>
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] server lang: <none>
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] kex follows: False
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:39:22.891 [DEBUG] [Thread-66610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:39:22.892 [DEBUG] [Thread-66610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:39:22.892 [DEBUG] [Thread-66610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:39:22.892 [DEBUG] [Thread-66610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:39:22.892 [DEBUG] [Thread-66610] [transport.py] [_log()] Compression: none
2025-12-12T09:39:22.892 [DEBUG] [Thread-66610] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:39:22.901 [DEBUG] [Thread-66610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:39:22.902 [DEBUG] [Thread-66610] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:39:22.902 [DEBUG] [Thread-66610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:39:22.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:39:22.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:39:22.904 [DEBUG] [Thread-66610] [transport.py] [_log()] userauth is OK
2025-12-12T09:39:22.904 [DEBUG] [Thread-66610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:39:22.904 [DEBUG] [Thread-66610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:39:22.904 [DEBUG] [Thread-66610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:39:22.904 [DEBUG] [Thread-66610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:39:22.928 [INFO] [Thread-66610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:39:22.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:39:23.533 [DEBUG] [Thread-66610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:39:23.533 [DEBUG] [Thread-66610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:39:23.534 [DEBUG] [Thread-66610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:39:23.574 [DEBUG] [Thread-66610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:39:23.574 [DEBUG] [Thread-66610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:39:23.578 [DEBUG] [Thread-66610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:39:23.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:39:23.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:39:23.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:39:23.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:39:23.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:39:23.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:39:23.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:39:23.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:39:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:39:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.318848 -999.00  +13.60  38.54     34   -1.50 1 2 2 1 1   888    0 17.23 55.64 ----- 38.5 38.5 329.8 44.6 16.4 -11.5 16.1 -11.7 15.9 -10.4 16.2 -10.5
2025-12-12T09:39:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:39:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:39:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.318848
2025-12-12T09:39:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:39:23.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:39:23.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:39:23.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:39:23.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:39:23.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:39:04', tmtdew=18.01, humidity=28.52, cloud=0.0, wind=34.16, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:39:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:39:23.606 [DEBUG] [Thread-66610] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:39:23.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:39:23.702 [DEBUG] [Thread-66613] [transport.py] [_log()] starting thread (client mode): 0xf572c040
2025-12-12T09:39:23.703 [DEBUG] [Thread-66613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:39:23.718 [DEBUG] [Thread-66613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:39:23.719 [INFO] [Thread-66613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:39:23.729 [DEBUG] [Thread-66613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:39:23.729 [DEBUG] [Thread-66613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:39:23.729 [DEBUG] [Thread-66613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:39:23.729 [DEBUG] [Thread-66613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:23.729 [DEBUG] [Thread-66613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:23.729 [DEBUG] [Thread-66613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] client lang: <none>
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] server lang: <none>
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] kex follows: False
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:39:23.730 [DEBUG] [Thread-66613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:39:23.731 [DEBUG] [Thread-66613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:39:23.731 [DEBUG] [Thread-66613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:39:23.731 [DEBUG] [Thread-66613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:39:23.731 [DEBUG] [Thread-66613] [transport.py] [_log()] Compression: none
2025-12-12T09:39:23.731 [DEBUG] [Thread-66613] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:39:23.786 [DEBUG] [Thread-66613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:39:23.786 [DEBUG] [Thread-66613] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:39:23.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:39:23.788 [DEBUG] [Thread-66613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:39:23.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:39:23.841 [DEBUG] [Thread-66613] [transport.py] [_log()] userauth is OK
2025-12-12T09:39:23.841 [DEBUG] [Thread-66613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:39:23.841 [DEBUG] [Thread-66613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:39:23.841 [DEBUG] [Thread-66613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:39:23.841 [DEBUG] [Thread-66613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:39:23.865 [INFO] [Thread-66613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:39:23.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:39:23.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:39:24.180 [DEBUG] [Thread-66615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:24.759 [DEBUG] [Thread-66613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:39:24.760 [DEBUG] [Thread-66613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:39:24.808 [DEBUG] [Thread-66613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:39:24.808 [DEBUG] [Thread-66613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:39:24.817 [DEBUG] [Thread-66613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:39:24.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:39:24.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:39:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:39:24.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:39:24.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:39:24.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:39:24.851 [DEBUG] [Thread-66613] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:39:29.209 [DEBUG] [Thread-66616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:33.108 [DEBUG] [Thread-66617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:38.228 [DEBUG] [Thread-66618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:39.236 [DEBUG] [Thread-66619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:47.261 [DEBUG] [Thread-66620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:54.284 [DEBUG] [Thread-66621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:39:54.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:39:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:39:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 39, 36), 17.71, 28.92, 0.0, 30.74, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:39:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:39:36
2025-12-12T09:39:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:39:55.824 [DEBUG] [Thread-66622] [transport.py] [_log()] starting thread (client mode): 0xf2d0dc90
2025-12-12T09:39:55.824 [DEBUG] [Thread-66622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:39:55.844 [DEBUG] [Thread-66622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:39:55.845 [INFO] [Thread-66622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] client lang: <none>
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] server lang: <none>
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] kex follows: False
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] Compression: none
2025-12-12T09:39:55.848 [DEBUG] [Thread-66622] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:39:55.866 [DEBUG] [Thread-66622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:39:55.867 [DEBUG] [Thread-66622] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:39:55.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:39:55.867 [DEBUG] [Thread-66622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:39:55.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:39:55.870 [DEBUG] [Thread-66622] [transport.py] [_log()] userauth is OK
2025-12-12T09:39:55.870 [DEBUG] [Thread-66622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:39:55.870 [DEBUG] [Thread-66622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:39:55.870 [DEBUG] [Thread-66622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:39:55.870 [DEBUG] [Thread-66622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:39:55.903 [INFO] [Thread-66622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:39:55.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:39:56.295 [DEBUG] [Thread-66624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:39:56.547 [DEBUG] [Thread-66622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:39:56.548 [DEBUG] [Thread-66622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:39:56.548 [DEBUG] [Thread-66622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:39:56.588 [DEBUG] [Thread-66622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:39:56.588 [DEBUG] [Thread-66622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:39:56.592 [DEBUG] [Thread-66622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:39:56.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:39:56.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:39:56.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:39:56.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:39:56.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:39:56.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:39:56.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.319195 -999.00  +13.80  26.09     34   -1.40 1 2 1 1 1   888    0 16.83 49.00 ----- 26.1 26.1 339.8 33.1 16.4 -11.3 16.1 -11.2 16.0 -10.6 16.2 -10.6
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.319195
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:39:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:39:36', tmtdew=17.71, humidity=28.92, cloud=0.0, wind=30.74, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:39:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:39:56.616 [DEBUG] [Thread-66622] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:39:56.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:39:56.702 [DEBUG] [Thread-66626] [transport.py] [_log()] starting thread (client mode): 0xf8156d40
2025-12-12T09:39:56.702 [DEBUG] [Thread-66626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:39:56.717 [DEBUG] [Thread-66626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:39:56.717 [INFO] [Thread-66626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:39:56.725 [DEBUG] [Thread-66626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:39:56.725 [DEBUG] [Thread-66626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:39:56.725 [DEBUG] [Thread-66626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:39:56.725 [DEBUG] [Thread-66626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:56.725 [DEBUG] [Thread-66626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:39:56.725 [DEBUG] [Thread-66626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] client lang: <none>
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] server lang: <none>
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] kex follows: False
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] Compression: none
2025-12-12T09:39:56.726 [DEBUG] [Thread-66626] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:39:56.782 [DEBUG] [Thread-66626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:39:56.782 [DEBUG] [Thread-66626] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:39:56.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:39:56.783 [DEBUG] [Thread-66626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:39:56.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:39:56.837 [DEBUG] [Thread-66626] [transport.py] [_log()] userauth is OK
2025-12-12T09:39:56.838 [DEBUG] [Thread-66626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:39:56.838 [DEBUG] [Thread-66626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:39:56.838 [DEBUG] [Thread-66626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:39:56.838 [DEBUG] [Thread-66626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:39:56.857 [INFO] [Thread-66626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:39:56.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:39:56.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:39:57.697 [DEBUG] [Thread-66626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:39:57.698 [DEBUG] [Thread-66626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:39:57.745 [DEBUG] [Thread-66626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:39:57.745 [DEBUG] [Thread-66626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:39:57.754 [DEBUG] [Thread-66626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:39:57.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:39:57.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:39:57.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:39:57.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:39:57.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:39:57.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:39:57.795 [DEBUG] [Thread-66626] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:40:05.317 [DEBUG] [Thread-66628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:09.325 [DEBUG] [Thread-66629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:11.690 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:11.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:14.349 [DEBUG] [Thread-66630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:23.372 [DEBUG] [Thread-66631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:24.379 [DEBUG] [Thread-66632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:40:27.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:40:27.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:40:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 40, 8), 17.55, 29.27, 0.0, 37.62, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:40:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:40:08
2025-12-12T09:40:28.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:40:28.791 [DEBUG] [Thread-66633] [transport.py] [_log()] starting thread (client mode): 0xf2d0dd50
2025-12-12T09:40:28.791 [DEBUG] [Thread-66633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:40:28.812 [DEBUG] [Thread-66633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:40:28.812 [INFO] [Thread-66633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] client lang: <none>
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] server lang: <none>
2025-12-12T09:40:28.815 [DEBUG] [Thread-66633] [transport.py] [_log()] kex follows: False
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] Compression: none
2025-12-12T09:40:28.816 [DEBUG] [Thread-66633] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:40:28.831 [DEBUG] [Thread-66633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:40:28.831 [DEBUG] [Thread-66633] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:40:28.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:40:28.832 [DEBUG] [Thread-66633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:40:28.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:40:28.834 [DEBUG] [Thread-66633] [transport.py] [_log()] userauth is OK
2025-12-12T09:40:28.834 [DEBUG] [Thread-66633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:40:28.835 [DEBUG] [Thread-66633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:40:28.835 [DEBUG] [Thread-66633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:40:28.835 [DEBUG] [Thread-66633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:40:28.870 [INFO] [Thread-66633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:40:28.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:40:29.518 [DEBUG] [Thread-66633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:40:29.519 [DEBUG] [Thread-66633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:40:29.519 [DEBUG] [Thread-66633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:40:29.559 [DEBUG] [Thread-66633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:40:29.559 [DEBUG] [Thread-66633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:40:29.562 [DEBUG] [Thread-66633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:40:29.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:40:29.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:40:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:40:29.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:40:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:40:29.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:40:29.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:40:29.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:40:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:40:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.319485 -999.00  +13.90  26.06     34   -1.30 1 2 1 1 1   888    0 16.91 47.89 ----- 28.7 26.1 347.5 45.7 16.4 -11.6 16.1 -11.7 16.0 -10.6 16.3 -10.7
2025-12-12T09:40:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:40:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:40:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.319485
2025-12-12T09:40:29.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:40:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:40:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:40:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:40:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:40:29.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:40:08', tmtdew=17.55, humidity=29.27, cloud=0.0, wind=37.62, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:40:03.504', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:40:29.585 [DEBUG] [Thread-66633] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:40:29.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:40:29.682 [DEBUG] [Thread-66636] [transport.py] [_log()] starting thread (client mode): 0xf5771ae0
2025-12-12T09:40:29.682 [DEBUG] [Thread-66636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:40:29.696 [DEBUG] [Thread-66636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:40:29.697 [INFO] [Thread-66636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:40:29.704 [DEBUG] [Thread-66636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] client lang: <none>
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] server lang: <none>
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] kex follows: False
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] Compression: none
2025-12-12T09:40:29.705 [DEBUG] [Thread-66636] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:40:29.761 [DEBUG] [Thread-66636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:40:29.762 [DEBUG] [Thread-66636] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:40:29.762 [DEBUG] [Thread-66636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:40:29.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:40:29.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:40:29.817 [DEBUG] [Thread-66636] [transport.py] [_log()] userauth is OK
2025-12-12T09:40:29.818 [DEBUG] [Thread-66636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:40:29.818 [DEBUG] [Thread-66636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:40:29.818 [DEBUG] [Thread-66636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:40:29.818 [DEBUG] [Thread-66636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:40:29.836 [INFO] [Thread-66636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:40:29.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:40:29.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:40:30.713 [DEBUG] [Thread-66636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:40:30.713 [DEBUG] [Thread-66636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:40:30.760 [DEBUG] [Thread-66636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:40:30.761 [DEBUG] [Thread-66636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:40:30.769 [DEBUG] [Thread-66636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:40:30.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:40:30.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:40:30.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:40:30.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:40:30.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:40:30.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:40:30.806 [DEBUG] [Thread-66636] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:40:32.401 [DEBUG] [Thread-66638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:33.157 [DEBUG] [Thread-66639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:39.422 [DEBUG] [Thread-66640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:41.447 [DEBUG] [Thread-66641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:50.468 [DEBUG] [Thread-66642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:54.481 [DEBUG] [Thread-66643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:40:59.499 [DEBUG] [Thread-66644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:41:00.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:41:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:41:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 40, 40), 17.21, 30.22, 0.0, 38.22, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:41:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:40:40
2025-12-12T09:41:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:41:01.796 [DEBUG] [Thread-66645] [transport.py] [_log()] starting thread (client mode): 0xf572fbe0
2025-12-12T09:41:01.796 [DEBUG] [Thread-66645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:41:01.810 [DEBUG] [Thread-66645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:41:01.811 [INFO] [Thread-66645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:41:01.813 [DEBUG] [Thread-66645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] client lang: <none>
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] server lang: <none>
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] kex follows: False
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] Compression: none
2025-12-12T09:41:01.814 [DEBUG] [Thread-66645] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:41:01.834 [DEBUG] [Thread-66645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:41:01.835 [DEBUG] [Thread-66645] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:41:01.836 [DEBUG] [Thread-66645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:41:01.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:41:01.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:41:01.838 [DEBUG] [Thread-66645] [transport.py] [_log()] userauth is OK
2025-12-12T09:41:01.838 [DEBUG] [Thread-66645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:41:01.838 [DEBUG] [Thread-66645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:41:01.838 [DEBUG] [Thread-66645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:41:01.838 [DEBUG] [Thread-66645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:41:01.864 [INFO] [Thread-66645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:41:01.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:41:02.495 [DEBUG] [Thread-66645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:41:02.496 [DEBUG] [Thread-66645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:41:02.496 [DEBUG] [Thread-66645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:41:02.536 [DEBUG] [Thread-66645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:41:02.536 [DEBUG] [Thread-66645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:41:02.538 [DEBUG] [Thread-66645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:41:02.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:41:02.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:41:02.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:41:02.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:41:02.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:41:02.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:41:02.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:41:02.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:41:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:41:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.319832 -999.00  +13.90  23.59     36   -0.60 1 2 1 1 1   888    0 16.54 44.81 ----- 34.3 23.6 350.7 44.5 16.5 -11.5 16.3 -12.0 16.1 -10.5 16.3 -10.6
2025-12-12T09:41:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:41:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:41:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.319832
2025-12-12T09:41:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:41:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:41:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:41:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:41:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:41:02.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:40:40', tmtdew=17.21, humidity=30.22, cloud=0.0, wind=38.22, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:40:33.485', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:41:02.558 [DEBUG] [Thread-66645] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:41:02.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:41:02.653 [DEBUG] [Thread-66648] [transport.py] [_log()] starting thread (client mode): 0xf81c1f90
2025-12-12T09:41:02.653 [DEBUG] [Thread-66648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:41:02.670 [DEBUG] [Thread-66648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:41:02.670 [INFO] [Thread-66648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:02.678 [DEBUG] [Thread-66648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] client lang: <none>
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] server lang: <none>
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] kex follows: False
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:41:02.679 [DEBUG] [Thread-66648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:41:02.680 [DEBUG] [Thread-66648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:41:02.680 [DEBUG] [Thread-66648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:41:02.680 [DEBUG] [Thread-66648] [transport.py] [_log()] Compression: none
2025-12-12T09:41:02.680 [DEBUG] [Thread-66648] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:41:02.734 [DEBUG] [Thread-66648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:41:02.734 [DEBUG] [Thread-66648] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:41:02.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:41:02.734 [DEBUG] [Thread-66648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:41:02.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:41:02.790 [DEBUG] [Thread-66648] [transport.py] [_log()] userauth is OK
2025-12-12T09:41:02.790 [DEBUG] [Thread-66648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:41:02.790 [DEBUG] [Thread-66648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:41:02.790 [DEBUG] [Thread-66648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:41:02.790 [DEBUG] [Thread-66648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:41:02.809 [INFO] [Thread-66648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:41:02.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:41:02.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:41:03.688 [DEBUG] [Thread-66648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:41:03.688 [DEBUG] [Thread-66648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:41:03.736 [DEBUG] [Thread-66648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:41:03.736 [DEBUG] [Thread-66648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:41:03.746 [DEBUG] [Thread-66648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:41:03.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:41:03.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:41:03.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:41:03.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:41:03.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:41:03.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:41:03.788 [DEBUG] [Thread-66648] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:41:08.524 [DEBUG] [Thread-66650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:09.532 [DEBUG] [Thread-66651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:11.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:11.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:17.580 [DEBUG] [Thread-66652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:24.594 [DEBUG] [Thread-66653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:26.599 [DEBUG] [Thread-66654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:33.207 [DEBUG] [Thread-66655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:33.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:41:33.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:41:33.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:41:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 41, 12), 17.09, 30.5, 0.0, 40.72, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:41:34.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:41:12
2025-12-12T09:41:34.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:41:34.753 [DEBUG] [Thread-66656] [transport.py] [_log()] starting thread (client mode): 0xf57b7fd0
2025-12-12T09:41:34.754 [DEBUG] [Thread-66656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:41:34.773 [DEBUG] [Thread-66656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:41:34.773 [INFO] [Thread-66656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:34.776 [DEBUG] [Thread-66656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] client lang: <none>
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] server lang: <none>
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] kex follows: False
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] Compression: none
2025-12-12T09:41:34.777 [DEBUG] [Thread-66656] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:41:34.793 [DEBUG] [Thread-66656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:41:34.794 [DEBUG] [Thread-66656] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:41:34.795 [DEBUG] [Thread-66656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:41:34.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:41:34.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:41:34.796 [DEBUG] [Thread-66656] [transport.py] [_log()] userauth is OK
2025-12-12T09:41:34.797 [DEBUG] [Thread-66656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:41:34.797 [DEBUG] [Thread-66656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:41:34.797 [DEBUG] [Thread-66656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:41:34.797 [DEBUG] [Thread-66656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:41:34.814 [INFO] [Thread-66656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:41:34.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:41:35.444 [DEBUG] [Thread-66656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:41:35.444 [DEBUG] [Thread-66656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:41:35.445 [DEBUG] [Thread-66656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:41:35.485 [DEBUG] [Thread-66656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:41:35.485 [DEBUG] [Thread-66656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:41:35.488 [DEBUG] [Thread-66656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:41:35.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:41:35.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:41:35.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:41:35.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:41:35.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:41:35.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:41:35.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:41:35.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:41:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:41:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.320237 -999.00  +14.00  27.12     36   -0.50 1 2 1 1 1   888    0 16.26 36.51 ----- 27.1 27.1 339.6 35.5 16.5 -11.7 16.3 -11.1 16.1 -10.6 16.4 -12.2
2025-12-12T09:41:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:41:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:41:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.320237
2025-12-12T09:41:35.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:41:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:41:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:41:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:41:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:41:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:41:12', tmtdew=17.09, humidity=30.5, cloud=0.0, wind=40.72, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:41:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:41:35.517 [DEBUG] [Thread-66656] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:41:35.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:41:35.614 [DEBUG] [Thread-66659] [transport.py] [_log()] starting thread (client mode): 0xf572c100
2025-12-12T09:41:35.614 [DEBUG] [Thread-66659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:41:35.620 [DEBUG] [Thread-66660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:35.629 [DEBUG] [Thread-66659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:41:35.629 [INFO] [Thread-66659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:41:35.636 [DEBUG] [Thread-66659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:41:35.636 [DEBUG] [Thread-66659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:41:35.636 [DEBUG] [Thread-66659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] client lang: <none>
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] server lang: <none>
2025-12-12T09:41:35.637 [DEBUG] [Thread-66659] [transport.py] [_log()] kex follows: False
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] Compression: none
2025-12-12T09:41:35.638 [DEBUG] [Thread-66659] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:41:35.695 [DEBUG] [Thread-66659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:41:35.696 [DEBUG] [Thread-66659] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:41:35.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:41:35.697 [DEBUG] [Thread-66659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:41:35.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:41:35.751 [DEBUG] [Thread-66659] [transport.py] [_log()] userauth is OK
2025-12-12T09:41:35.751 [DEBUG] [Thread-66659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:41:35.751 [DEBUG] [Thread-66659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:41:35.751 [DEBUG] [Thread-66659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:41:35.751 [DEBUG] [Thread-66659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:41:35.770 [INFO] [Thread-66659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:41:35.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:41:35.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:41:36.623 [DEBUG] [Thread-66659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:41:36.624 [DEBUG] [Thread-66659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:41:36.672 [DEBUG] [Thread-66659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:41:36.672 [DEBUG] [Thread-66659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:41:36.681 [DEBUG] [Thread-66659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:41:36.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:41:36.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:41:36.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:41:36.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:41:36.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:41:36.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:41:36.714 [DEBUG] [Thread-66659] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:41:39.634 [DEBUG] [Thread-66662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:44.667 [DEBUG] [Thread-66663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:53.689 [DEBUG] [Thread-66664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:41:54.696 [DEBUG] [Thread-66665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:02.715 [DEBUG] [Thread-66666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:06.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:42:06.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:42:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:42:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 41, 44), 16.72, 31.53, 0.0, 32.32, 14.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:42:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:41:44
2025-12-12T09:42:07.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:42:07.706 [DEBUG] [Thread-66667] [transport.py] [_log()] starting thread (client mode): 0xf81551b0
2025-12-12T09:42:07.706 [DEBUG] [Thread-66667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:42:07.721 [DEBUG] [Thread-66667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:42:07.721 [INFO] [Thread-66667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:42:07.722 [DEBUG] [Thread-66667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] client lang: <none>
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] server lang: <none>
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] kex follows: False
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] Compression: none
2025-12-12T09:42:07.723 [DEBUG] [Thread-66667] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:42:07.735 [DEBUG] [Thread-66667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:42:07.735 [DEBUG] [Thread-66667] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:42:07.736 [DEBUG] [Thread-66667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:42:07.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:42:07.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:42:07.737 [DEBUG] [Thread-66667] [transport.py] [_log()] userauth is OK
2025-12-12T09:42:07.737 [DEBUG] [Thread-66667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:42:07.737 [DEBUG] [Thread-66667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:42:07.737 [DEBUG] [Thread-66667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:42:07.737 [DEBUG] [Thread-66667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:42:07.752 [INFO] [Thread-66667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:42:07.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:42:08.318 [DEBUG] [Thread-66667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:42:08.319 [DEBUG] [Thread-66667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:42:08.319 [DEBUG] [Thread-66667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:42:08.359 [DEBUG] [Thread-66667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:42:08.359 [DEBUG] [Thread-66667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:42:08.361 [DEBUG] [Thread-66667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:42:08.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:42:08.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:42:08.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:42:08.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:42:08.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:42:08.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:42:08.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:42:08.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:42:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:42:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.320527 -999.00  +13.90  26.68     36   -0.50 1 2 1 1 1   888    0 16.63 31.79 ----- 34.9 26.7 349.5 41.0 16.5 -11.8 16.3 -12.0 16.1 -10.9 16.4 -10.7
2025-12-12T09:42:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:42:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:42:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.320527
2025-12-12T09:42:08.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:42:08.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:42:08.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:42:08.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:42:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:42:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:41:44', tmtdew=16.72, humidity=31.53, cloud=0.0, wind=32.32, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:41:33.533', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:42:08.385 [DEBUG] [Thread-66667] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:42:08.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:42:08.480 [DEBUG] [Thread-66670] [transport.py] [_log()] starting thread (client mode): 0xf8154a00
2025-12-12T09:42:08.480 [DEBUG] [Thread-66670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:42:08.497 [DEBUG] [Thread-66670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:42:08.498 [INFO] [Thread-66670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:42:08.505 [DEBUG] [Thread-66670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:42:08.505 [DEBUG] [Thread-66670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] client lang: <none>
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] server lang: <none>
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] kex follows: False
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] Compression: none
2025-12-12T09:42:08.506 [DEBUG] [Thread-66670] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:42:08.563 [DEBUG] [Thread-66670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:42:08.564 [DEBUG] [Thread-66670] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:42:08.564 [DEBUG] [Thread-66670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:42:08.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:42:08.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:42:08.619 [DEBUG] [Thread-66670] [transport.py] [_log()] userauth is OK
2025-12-12T09:42:08.619 [DEBUG] [Thread-66670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:42:08.619 [DEBUG] [Thread-66670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:42:08.619 [DEBUG] [Thread-66670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:42:08.619 [DEBUG] [Thread-66670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:42:08.639 [INFO] [Thread-66670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:42:08.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:42:08.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:42:09.545 [DEBUG] [Thread-66670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:42:09.545 [DEBUG] [Thread-66670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:42:09.593 [DEBUG] [Thread-66670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:42:09.593 [DEBUG] [Thread-66670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:42:09.606 [DEBUG] [Thread-66670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:42:09.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:42:09.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:42:09.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:42:09.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:42:09.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:42:09.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:42:09.644 [DEBUG] [Thread-66670] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:42:09.731 [DEBUG] [Thread-66672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:11.766 [DEBUG] [Thread-66673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:11.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:11.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:20.787 [DEBUG] [Thread-66674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:24.802 [DEBUG] [Thread-66675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:29.820 [DEBUG] [Thread-66676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:33.266 [DEBUG] [Thread-66677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:38.836 [DEBUG] [Thread-66678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:39.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:42:39.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:42:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:42:39.841 [DEBUG] [Thread-66679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:40.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 42, 16), 16.75, 31.47, 0.0, 32.68, 14.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:42:40.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:42:16
2025-12-12T09:42:40.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:42:40.676 [DEBUG] [Thread-66680] [transport.py] [_log()] starting thread (client mode): 0xf2d0e7d0
2025-12-12T09:42:40.676 [DEBUG] [Thread-66680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:42:40.691 [DEBUG] [Thread-66680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:42:40.691 [INFO] [Thread-66680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] client lang: <none>
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] server lang: <none>
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] kex follows: False
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] Compression: none
2025-12-12T09:42:40.694 [DEBUG] [Thread-66680] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:42:40.708 [DEBUG] [Thread-66680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:42:40.708 [DEBUG] [Thread-66680] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:42:40.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:42:40.708 [DEBUG] [Thread-66680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:42:40.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:42:40.709 [DEBUG] [Thread-66680] [transport.py] [_log()] userauth is OK
2025-12-12T09:42:40.709 [DEBUG] [Thread-66680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:42:40.709 [DEBUG] [Thread-66680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:42:40.709 [DEBUG] [Thread-66680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:42:40.709 [DEBUG] [Thread-66680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:42:40.718 [INFO] [Thread-66680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:42:40.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:42:41.304 [DEBUG] [Thread-66680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:42:41.304 [DEBUG] [Thread-66680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:42:41.304 [DEBUG] [Thread-66680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:42:41.345 [DEBUG] [Thread-66680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:42:41.345 [DEBUG] [Thread-66680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:42:41.346 [DEBUG] [Thread-66680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:42:41.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:42:41.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:42:41.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:42:41.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:42:41.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:42:41.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:42:41.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.321278 -999.00  +13.70  23.57     37   -0.60 1 2 1 1 1   888    0 16.00 17.08 ----- 23.6 23.6 14.0 41.9 16.5 -11.6 16.1 -11.9 16.1 -10.6 16.3 -10.7
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.321278
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:42:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:42:16', tmtdew=16.75, humidity=31.47, cloud=0.0, wind=32.68, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:42:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:42:41.363 [DEBUG] [Thread-66680] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:42:41.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:42:41.451 [DEBUG] [Thread-66683] [transport.py] [_log()] starting thread (client mode): 0xf5788310
2025-12-12T09:42:41.451 [DEBUG] [Thread-66683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:42:41.466 [DEBUG] [Thread-66683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:42:41.466 [INFO] [Thread-66683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] client lang: <none>
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] server lang: <none>
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] kex follows: False
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] Compression: none
2025-12-12T09:42:41.474 [DEBUG] [Thread-66683] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:42:41.536 [DEBUG] [Thread-66683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:42:41.536 [DEBUG] [Thread-66683] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:42:41.536 [DEBUG] [Thread-66683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:42:41.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:42:41.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:42:41.596 [DEBUG] [Thread-66683] [transport.py] [_log()] userauth is OK
2025-12-12T09:42:41.596 [DEBUG] [Thread-66683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:42:41.596 [DEBUG] [Thread-66683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:42:41.596 [DEBUG] [Thread-66683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:42:41.596 [DEBUG] [Thread-66683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:42:41.613 [INFO] [Thread-66683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:42:41.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:42:41.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:42:42.432 [DEBUG] [Thread-66683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:42:42.433 [DEBUG] [Thread-66683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:42:42.480 [DEBUG] [Thread-66683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:42:42.480 [DEBUG] [Thread-66683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:42:42.488 [DEBUG] [Thread-66683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:42:42.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:42:42.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:42:42.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:42:42.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:42:42.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:42:42.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:42:42.520 [DEBUG] [Thread-66683] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:42:47.861 [DEBUG] [Thread-66685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:54.881 [DEBUG] [Thread-66686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:42:56.914 [DEBUG] [Thread-66687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:05.936 [DEBUG] [Thread-66688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:09.950 [DEBUG] [Thread-66689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:12.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:12.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:43:12.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:43:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:43:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 42, 48), 17.06, 30.65, 0.0, 32.25, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:43:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:42:48
2025-12-12T09:43:13.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:43:13.499 [DEBUG] [Thread-66690] [transport.py] [_log()] starting thread (client mode): 0xf572e380
2025-12-12T09:43:13.499 [DEBUG] [Thread-66690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:43:13.514 [DEBUG] [Thread-66690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:43:13.514 [INFO] [Thread-66690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:43:13.517 [DEBUG] [Thread-66690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] client lang: <none>
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] server lang: <none>
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] kex follows: False
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] Compression: none
2025-12-12T09:43:13.518 [DEBUG] [Thread-66690] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:43:13.535 [DEBUG] [Thread-66690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:43:13.535 [DEBUG] [Thread-66690] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:43:13.536 [DEBUG] [Thread-66690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:43:13.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:43:13.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:43:13.538 [DEBUG] [Thread-66690] [transport.py] [_log()] userauth is OK
2025-12-12T09:43:13.538 [DEBUG] [Thread-66690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:43:13.538 [DEBUG] [Thread-66690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:43:13.538 [DEBUG] [Thread-66690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:43:13.538 [DEBUG] [Thread-66690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:43:13.563 [INFO] [Thread-66690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:43:13.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:43:14.182 [DEBUG] [Thread-66690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:43:14.183 [DEBUG] [Thread-66690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:43:14.183 [DEBUG] [Thread-66690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:43:14.223 [DEBUG] [Thread-66690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:43:14.223 [DEBUG] [Thread-66690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:43:14.226 [DEBUG] [Thread-66690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:43:14.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:43:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:43:14.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:43:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:43:14.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:43:14.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:43:14.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:43:14.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:43:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:43:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.321626 -999.00  +13.60  24.47     36   -0.80 1 2 1 1 1   888    0 15.32 11.20 ----- 24.5 24.5 356.1 38.4 16.5 -12.2 16.1 -12.3 16.1 -11.2 16.3 -11.4
2025-12-12T09:43:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:43:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:43:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.321626
2025-12-12T09:43:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:43:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:43:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:43:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:43:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:43:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:42:48', tmtdew=17.06, humidity=30.65, cloud=0.0, wind=32.25, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:43:08.486', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:43:14.250 [DEBUG] [Thread-66690] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:43:14.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:43:14.342 [DEBUG] [Thread-66693] [transport.py] [_log()] starting thread (client mode): 0xf57b4820
2025-12-12T09:43:14.342 [DEBUG] [Thread-66693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:43:14.356 [DEBUG] [Thread-66693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:43:14.356 [INFO] [Thread-66693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] client lang: <none>
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] server lang: <none>
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] kex follows: False
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:43:14.364 [DEBUG] [Thread-66693] [transport.py] [_log()] Compression: none
2025-12-12T09:43:14.365 [DEBUG] [Thread-66693] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:43:14.424 [DEBUG] [Thread-66693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:43:14.425 [DEBUG] [Thread-66693] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:43:14.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:43:14.426 [DEBUG] [Thread-66693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:43:14.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:43:14.481 [DEBUG] [Thread-66693] [transport.py] [_log()] userauth is OK
2025-12-12T09:43:14.481 [DEBUG] [Thread-66693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:43:14.481 [DEBUG] [Thread-66693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:43:14.481 [DEBUG] [Thread-66693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:43:14.481 [DEBUG] [Thread-66693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:43:14.496 [INFO] [Thread-66693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:43:14.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:43:14.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:43:14.970 [DEBUG] [Thread-66695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:15.328 [DEBUG] [Thread-66693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:43:15.328 [DEBUG] [Thread-66693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:43:15.376 [DEBUG] [Thread-66693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:43:15.376 [DEBUG] [Thread-66693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:43:15.385 [DEBUG] [Thread-66693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:43:15.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:43:15.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:43:15.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:43:15.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:43:15.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:43:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:43:15.430 [DEBUG] [Thread-66693] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:43:23.989 [DEBUG] [Thread-66696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:24.998 [DEBUG] [Thread-66697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:33.040 [DEBUG] [Thread-66698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:33.333 [DEBUG] [Thread-66699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:40.059 [DEBUG] [Thread-66700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:42.074 [DEBUG] [Thread-66701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:43:45.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:43:45.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:43:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 43, 20), 17.07, 30.64, 0.0, 34.1, 14.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:43:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:43:20
2025-12-12T09:43:46.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:43:46.411 [DEBUG] [Thread-66702] [transport.py] [_log()] starting thread (client mode): 0xf5788910
2025-12-12T09:43:46.412 [DEBUG] [Thread-66702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:43:46.430 [DEBUG] [Thread-66702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:43:46.430 [INFO] [Thread-66702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:43:46.433 [DEBUG] [Thread-66702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:43:46.433 [DEBUG] [Thread-66702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:43:46.433 [DEBUG] [Thread-66702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:43:46.433 [DEBUG] [Thread-66702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:46.433 [DEBUG] [Thread-66702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] client lang: <none>
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] server lang: <none>
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] kex follows: False
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] Compression: none
2025-12-12T09:43:46.434 [DEBUG] [Thread-66702] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:43:46.451 [DEBUG] [Thread-66702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:43:46.452 [DEBUG] [Thread-66702] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:43:46.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:43:46.453 [DEBUG] [Thread-66702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:43:46.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:43:46.455 [DEBUG] [Thread-66702] [transport.py] [_log()] userauth is OK
2025-12-12T09:43:46.455 [DEBUG] [Thread-66702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:43:46.455 [DEBUG] [Thread-66702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:43:46.455 [DEBUG] [Thread-66702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:43:46.455 [DEBUG] [Thread-66702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:43:46.473 [INFO] [Thread-66702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:43:46.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:43:47.091 [DEBUG] [Thread-66702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:43:47.091 [DEBUG] [Thread-66702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:43:47.091 [DEBUG] [Thread-66702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:43:47.132 [DEBUG] [Thread-66702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:43:47.132 [DEBUG] [Thread-66702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:43:47.136 [DEBUG] [Thread-66702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:43:47.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:43:47.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:43:47.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:43:47.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:43:47.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:43:47.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:43:47.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:43:47.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:43:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:43:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.321626 -999.00  +13.60  24.47     36   -0.80 1 2 1 1 1   888    0 15.32 11.20 ----- 24.5 24.5 356.1 38.4 16.5 -12.2 16.1 -12.3 16.1 -11.2 16.3 -11.4
2025-12-12T09:43:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:43:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:43:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.321626
2025-12-12T09:43:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:43:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:43:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:43:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:43:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:43:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:43:20', tmtdew=17.07, humidity=30.64, cloud=0.0, wind=34.1, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:43:08.486', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:43:47.162 [DEBUG] [Thread-66702] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:43:47.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:43:47.255 [DEBUG] [Thread-66705] [transport.py] [_log()] starting thread (client mode): 0xf81c2710
2025-12-12T09:43:47.255 [DEBUG] [Thread-66705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:43:47.270 [DEBUG] [Thread-66705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:43:47.270 [INFO] [Thread-66705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:43:47.277 [DEBUG] [Thread-66705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:43:47.278 [DEBUG] [Thread-66705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:43:47.278 [DEBUG] [Thread-66705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:43:47.278 [DEBUG] [Thread-66705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:47.278 [DEBUG] [Thread-66705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:43:47.278 [DEBUG] [Thread-66705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] client lang: <none>
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] server lang: <none>
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] kex follows: False
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] Compression: none
2025-12-12T09:43:47.279 [DEBUG] [Thread-66705] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:43:47.335 [DEBUG] [Thread-66705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:43:47.335 [DEBUG] [Thread-66705] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:43:47.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:43:47.336 [DEBUG] [Thread-66705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:43:47.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:43:47.393 [DEBUG] [Thread-66705] [transport.py] [_log()] userauth is OK
2025-12-12T09:43:47.393 [DEBUG] [Thread-66705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:43:47.393 [DEBUG] [Thread-66705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:43:47.394 [DEBUG] [Thread-66705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:43:47.394 [DEBUG] [Thread-66705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:43:47.415 [INFO] [Thread-66705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:43:47.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:43:47.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:43:48.250 [DEBUG] [Thread-66705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:43:48.251 [DEBUG] [Thread-66705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:43:48.299 [DEBUG] [Thread-66705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:43:48.299 [DEBUG] [Thread-66705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:43:48.308 [DEBUG] [Thread-66705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:43:48.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:43:48.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:43:48.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:43:48.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:43:48.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:43:48.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:43:48.350 [DEBUG] [Thread-66705] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:43:51.097 [DEBUG] [Thread-66707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:43:55.108 [DEBUG] [Thread-66708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:00.126 [DEBUG] [Thread-66709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:09.146 [DEBUG] [Thread-66710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:10.155 [DEBUG] [Thread-66711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:12.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:12.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:18.179 [DEBUG] [Thread-66712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:44:18.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:44:18.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:44:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 43, 53), 17.14, 30.2, 0.0, 30.63, 14.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:44:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:43:53
2025-12-12T09:44:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:44:19.329 [DEBUG] [Thread-66713] [transport.py] [_log()] starting thread (client mode): 0xf578aa10
2025-12-12T09:44:19.329 [DEBUG] [Thread-66713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:44:19.348 [DEBUG] [Thread-66713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:44:19.348 [INFO] [Thread-66713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:44:19.351 [DEBUG] [Thread-66713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] client lang: <none>
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] server lang: <none>
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] kex follows: False
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:44:19.352 [DEBUG] [Thread-66713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:44:19.353 [DEBUG] [Thread-66713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:44:19.353 [DEBUG] [Thread-66713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:44:19.353 [DEBUG] [Thread-66713] [transport.py] [_log()] Compression: none
2025-12-12T09:44:19.353 [DEBUG] [Thread-66713] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:44:19.371 [DEBUG] [Thread-66713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:44:19.371 [DEBUG] [Thread-66713] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:44:19.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:44:19.372 [DEBUG] [Thread-66713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:44:19.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:44:19.374 [DEBUG] [Thread-66713] [transport.py] [_log()] userauth is OK
2025-12-12T09:44:19.374 [DEBUG] [Thread-66713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:44:19.374 [DEBUG] [Thread-66713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:44:19.374 [DEBUG] [Thread-66713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:44:19.374 [DEBUG] [Thread-66713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:44:19.392 [INFO] [Thread-66713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:44:19.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:44:20.172 [DEBUG] [Thread-66713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:44:20.172 [DEBUG] [Thread-66713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:44:20.172 [DEBUG] [Thread-66713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:44:20.213 [DEBUG] [Thread-66713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:44:20.213 [DEBUG] [Thread-66713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:44:20.217 [DEBUG] [Thread-66713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:44:20.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:44:20.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:44:20.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:44:20.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:44:20.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:44:20.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:44:20.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:44:20.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:44:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:44:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.321973 -999.00  +13.60  26.11     37   -0.60 1 2 1 1 1   888    0 15.35 5.32 ----- 26.1 26.1 4.8 45.2 16.4 -11.9 16.1 -12.2 16.1 -10.8 16.2 -10.9
2025-12-12T09:44:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:44:20.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:44:20.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.321973
2025-12-12T09:44:20.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:44:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:44:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:44:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:44:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:44:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:43:53', tmtdew=17.14, humidity=30.2, cloud=0.0, wind=30.63, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:43:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:44:20.243 [DEBUG] [Thread-66713] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:44:20.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:44:20.342 [DEBUG] [Thread-66716] [transport.py] [_log()] starting thread (client mode): 0xf578b6a0
2025-12-12T09:44:20.342 [DEBUG] [Thread-66716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:44:20.356 [DEBUG] [Thread-66716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:44:20.356 [INFO] [Thread-66716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] client lang: <none>
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] server lang: <none>
2025-12-12T09:44:20.364 [DEBUG] [Thread-66716] [transport.py] [_log()] kex follows: False
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] Compression: none
2025-12-12T09:44:20.365 [DEBUG] [Thread-66716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:44:20.424 [DEBUG] [Thread-66716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:44:20.424 [DEBUG] [Thread-66716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:44:20.425 [DEBUG] [Thread-66716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:44:20.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:44:20.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:44:20.480 [DEBUG] [Thread-66716] [transport.py] [_log()] userauth is OK
2025-12-12T09:44:20.481 [DEBUG] [Thread-66716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:44:20.481 [DEBUG] [Thread-66716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:44:20.481 [DEBUG] [Thread-66716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:44:20.481 [DEBUG] [Thread-66716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:44:20.504 [INFO] [Thread-66716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:44:20.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:44:20.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:44:21.336 [DEBUG] [Thread-66716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:44:21.336 [DEBUG] [Thread-66716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:44:21.384 [DEBUG] [Thread-66716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:44:21.384 [DEBUG] [Thread-66716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:44:21.393 [DEBUG] [Thread-66716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:44:21.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:44:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:44:21.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:44:21.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:44:21.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:44:21.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:44:21.432 [DEBUG] [Thread-66716] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:44:25.196 [DEBUG] [Thread-66718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:27.219 [DEBUG] [Thread-66719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:33.384 [DEBUG] [Thread-66720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:36.237 [DEBUG] [Thread-66721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:40.246 [DEBUG] [Thread-66722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:45.257 [DEBUG] [Thread-66723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:51.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:44:51.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:44:51.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:44:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 44, 25), 16.96, 30.6, 0.0, 33.06, 14.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:44:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:44:25
2025-12-12T09:44:52.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:44:52.390 [DEBUG] [Thread-66724] [transport.py] [_log()] starting thread (client mode): 0xf81c2710
2025-12-12T09:44:52.390 [DEBUG] [Thread-66724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:44:52.411 [DEBUG] [Thread-66724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:44:52.411 [INFO] [Thread-66724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] client lang: <none>
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] server lang: <none>
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] kex follows: False
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] Compression: none
2025-12-12T09:44:52.412 [DEBUG] [Thread-66724] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:44:52.420 [DEBUG] [Thread-66724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:44:52.420 [DEBUG] [Thread-66724] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:44:52.421 [DEBUG] [Thread-66724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:44:52.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:44:52.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:44:52.422 [DEBUG] [Thread-66724] [transport.py] [_log()] userauth is OK
2025-12-12T09:44:52.423 [DEBUG] [Thread-66724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:44:52.423 [DEBUG] [Thread-66724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:44:52.423 [DEBUG] [Thread-66724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:44:52.423 [DEBUG] [Thread-66724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:44:52.446 [INFO] [Thread-66724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:44:52.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:44:53.089 [DEBUG] [Thread-66724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:44:53.090 [DEBUG] [Thread-66724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:44:53.090 [DEBUG] [Thread-66724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:44:53.131 [DEBUG] [Thread-66724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:44:53.131 [DEBUG] [Thread-66724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:44:53.134 [DEBUG] [Thread-66724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:44:53.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:44:53.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:44:53.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:44:53.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:44:53.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:44:53.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:44:53.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:44:53.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:44:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:44:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.322320 -999.00  +13.70  20.91     37   -0.70 1 2 1 1 1   888    0 14.93 -1.45 ----- 20.9 20.9 353.9 41.7 16.4 -12.0 16.2 -11.8 16.1 -10.8 16.3 -11.6
2025-12-12T09:44:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:44:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:44:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.322320
2025-12-12T09:44:53.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:44:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:44:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:44:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:44:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:44:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:44:25', tmtdew=16.96, humidity=30.6, cloud=0.0, wind=33.06, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:44:08.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:44:53.158 [DEBUG] [Thread-66724] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:44:53.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:44:53.269 [DEBUG] [Thread-66727] [transport.py] [_log()] starting thread (client mode): 0xf8155db0
2025-12-12T09:44:53.269 [DEBUG] [Thread-66727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:44:53.284 [DEBUG] [Thread-66727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:44:53.284 [INFO] [Thread-66727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:44:53.291 [DEBUG] [Thread-66727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:44:53.292 [DEBUG] [Thread-66727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:44:53.292 [DEBUG] [Thread-66727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:44:53.292 [DEBUG] [Thread-66727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] client lang: <none>
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] server lang: <none>
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] kex follows: False
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:44:53.293 [DEBUG] [Thread-66727] [transport.py] [_log()] Compression: none
2025-12-12T09:44:53.294 [DEBUG] [Thread-66727] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:44:53.357 [DEBUG] [Thread-66727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:44:53.357 [DEBUG] [Thread-66727] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:44:53.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:44:53.358 [DEBUG] [Thread-66727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:44:53.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:44:53.418 [DEBUG] [Thread-66727] [transport.py] [_log()] userauth is OK
2025-12-12T09:44:53.418 [DEBUG] [Thread-66727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:44:53.419 [DEBUG] [Thread-66727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:44:53.419 [DEBUG] [Thread-66727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:44:53.419 [DEBUG] [Thread-66727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:44:53.442 [INFO] [Thread-66727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:44:53.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:44:53.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:44:54.282 [DEBUG] [Thread-66729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:44:54.316 [DEBUG] [Thread-66727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:44:54.316 [DEBUG] [Thread-66727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:44:54.364 [DEBUG] [Thread-66727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:44:54.365 [DEBUG] [Thread-66727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:44:54.374 [DEBUG] [Thread-66727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:44:54.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:44:54.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:44:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:44:54.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:44:54.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:44:54.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:44:54.408 [DEBUG] [Thread-66727] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:44:55.291 [DEBUG] [Thread-66730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:03.328 [DEBUG] [Thread-66731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:10.348 [DEBUG] [Thread-66732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:12.361 [DEBUG] [Thread-66733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:12.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:12.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:21.383 [DEBUG] [Thread-66734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:24.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:45:24.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:45: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
2025-12-12T09:45:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 44, 57), 16.92, 31.17, 0.0, 34.78, 14.39, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:45:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:44:57
2025-12-12T09:45:25.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:45:25.383 [DEBUG] [Thread-66735] [transport.py] [_log()] starting thread (client mode): 0xf572a8f0
2025-12-12T09:45:25.383 [DEBUG] [Thread-66735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:45:25.395 [DEBUG] [Thread-66736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:25.405 [DEBUG] [Thread-66735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:45:25.405 [INFO] [Thread-66735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:45:25.408 [DEBUG] [Thread-66735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] client lang: <none>
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] server lang: <none>
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] kex follows: False
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] Compression: none
2025-12-12T09:45:25.409 [DEBUG] [Thread-66735] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:45:25.418 [DEBUG] [Thread-66735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:45:25.418 [DEBUG] [Thread-66735] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:45:25.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:45:25.419 [DEBUG] [Thread-66735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:45:25.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:45:25.421 [DEBUG] [Thread-66735] [transport.py] [_log()] userauth is OK
2025-12-12T09:45:25.421 [DEBUG] [Thread-66735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:45:25.421 [DEBUG] [Thread-66735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:45:25.421 [DEBUG] [Thread-66735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:45:25.422 [DEBUG] [Thread-66735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:45:25.440 [INFO] [Thread-66735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:45:25.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:45:26.248 [DEBUG] [Thread-66735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:45:26.249 [DEBUG] [Thread-66735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:45:26.249 [DEBUG] [Thread-66735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:45:26.289 [DEBUG] [Thread-66735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:45:26.289 [DEBUG] [Thread-66735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:45:26.292 [DEBUG] [Thread-66735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:45:26.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:45:26.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:45:26.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:45:26.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:45:26.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:45:26.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:45:26.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:45:26.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:45:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:45:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.322609 -999.00  +13.90  26.78     36   -0.60 1 2 1 1 1   888    0 15.14 -6.28 ----- 27.1 26.8 341.6 35.8 16.5 -11.4 16.2 -11.3 16.0 -10.3 16.3 -11.0
2025-12-12T09:45:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:45:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:45:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.322609
2025-12-12T09:45:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:45:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:45:26.317 [DEBUG] [Thread-66735] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:45:26.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:45:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:45:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:45:26.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:44:57', tmtdew=16.92, humidity=31.17, cloud=0.0, wind=34.78, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:44:33.418', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:45:26.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:45:26.414 [DEBUG] [Thread-66739] [transport.py] [_log()] starting thread (client mode): 0xf5770610
2025-12-12T09:45:26.414 [DEBUG] [Thread-66739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:45:26.429 [DEBUG] [Thread-66739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:45:26.429 [INFO] [Thread-66739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] client lang: <none>
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] server lang: <none>
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] kex follows: False
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:45:26.437 [DEBUG] [Thread-66739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:45:26.438 [DEBUG] [Thread-66739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:45:26.438 [DEBUG] [Thread-66739] [transport.py] [_log()] Compression: none
2025-12-12T09:45:26.438 [DEBUG] [Thread-66739] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:45:26.498 [DEBUG] [Thread-66739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:45:26.499 [DEBUG] [Thread-66739] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:45:26.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:45:26.500 [DEBUG] [Thread-66739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:45:26.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:45:26.560 [DEBUG] [Thread-66739] [transport.py] [_log()] userauth is OK
2025-12-12T09:45:26.561 [DEBUG] [Thread-66739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:45:26.561 [DEBUG] [Thread-66739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:45:26.561 [DEBUG] [Thread-66739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:45:26.561 [DEBUG] [Thread-66739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:45:26.579 [INFO] [Thread-66739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:45:26.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:45:26.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:45:27.431 [DEBUG] [Thread-66739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:45:27.431 [DEBUG] [Thread-66739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:45:27.479 [DEBUG] [Thread-66739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:45:27.479 [DEBUG] [Thread-66739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:45:27.488 [DEBUG] [Thread-66739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:45:27.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:45:27.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:45:27.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:45:27.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:45:27.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:45:27.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:45:27.528 [DEBUG] [Thread-66739] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:45:30.406 [DEBUG] [Thread-66741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:33.432 [DEBUG] [Thread-66742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:39.430 [DEBUG] [Thread-66743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:40.438 [DEBUG] [Thread-66744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:48.477 [DEBUG] [Thread-66745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:55.494 [DEBUG] [Thread-66746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:57.501 [DEBUG] [Thread-66747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:45:57.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:45:57.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:45:57.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:45:58.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 45, 29), 16.92, 31.15, 0.0, 34.86, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:45:58.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:45:29
2025-12-12T09:45:58.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:45:58.524 [DEBUG] [Thread-66748] [transport.py] [_log()] starting thread (client mode): 0xf572aa70
2025-12-12T09:45:58.524 [DEBUG] [Thread-66748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:45:58.544 [DEBUG] [Thread-66748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:45:58.544 [INFO] [Thread-66748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:45:58.547 [DEBUG] [Thread-66748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] client lang: <none>
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] server lang: <none>
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] kex follows: False
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:45:58.548 [DEBUG] [Thread-66748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:45:58.549 [DEBUG] [Thread-66748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:45:58.549 [DEBUG] [Thread-66748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:45:58.549 [DEBUG] [Thread-66748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:45:58.549 [DEBUG] [Thread-66748] [transport.py] [_log()] Compression: none
2025-12-12T09:45:58.549 [DEBUG] [Thread-66748] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:45:58.569 [DEBUG] [Thread-66748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:45:58.570 [DEBUG] [Thread-66748] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:45:58.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:45:58.571 [DEBUG] [Thread-66748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:45:58.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:45:58.573 [DEBUG] [Thread-66748] [transport.py] [_log()] userauth is OK
2025-12-12T09:45:58.574 [DEBUG] [Thread-66748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:45:58.574 [DEBUG] [Thread-66748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:45:58.574 [DEBUG] [Thread-66748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:45:58.574 [DEBUG] [Thread-66748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:45:58.597 [INFO] [Thread-66748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:45:58.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:45:59.267 [DEBUG] [Thread-66748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:45:59.268 [DEBUG] [Thread-66748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:45:59.268 [DEBUG] [Thread-66748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:45:59.308 [DEBUG] [Thread-66748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:45:59.308 [DEBUG] [Thread-66748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:45:59.312 [DEBUG] [Thread-66748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:45:59.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:45:59.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:45:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:45:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:45:59.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:45:59.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:45:59.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:45:59.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:45:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:45:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.322957 -999.00  +14.10  24.33     36   -0.30 1 2 1 1 1   888    0 14.85 -12.45 ----- 32.7 24.3 345.7 42.0 16.6 -11.5 16.3 -11.6 16.1 -10.4 16.4 -10.5
2025-12-12T09:45:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:45:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:45:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.322957
2025-12-12T09:45:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:45:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:45:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:45:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:45:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:45:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:45:29', tmtdew=16.92, humidity=31.15, cloud=0.0, wind=34.86, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:45:03.485', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:45:59.341 [DEBUG] [Thread-66748] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:45:59.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:45:59.437 [DEBUG] [Thread-66751] [transport.py] [_log()] starting thread (client mode): 0xf8154760
2025-12-12T09:45:59.438 [DEBUG] [Thread-66751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:45:59.452 [DEBUG] [Thread-66751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:45:59.452 [INFO] [Thread-66751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:59.460 [DEBUG] [Thread-66751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] client lang: <none>
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] server lang: <none>
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] kex follows: False
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] Compression: none
2025-12-12T09:45:59.461 [DEBUG] [Thread-66751] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:45:59.517 [DEBUG] [Thread-66751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:45:59.518 [DEBUG] [Thread-66751] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:45:59.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:45:59.519 [DEBUG] [Thread-66751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:45:59.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:45:59.573 [DEBUG] [Thread-66751] [transport.py] [_log()] userauth is OK
2025-12-12T09:45:59.574 [DEBUG] [Thread-66751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:45:59.574 [DEBUG] [Thread-66751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:45:59.574 [DEBUG] [Thread-66751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:45:59.574 [DEBUG] [Thread-66751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:45:59.592 [INFO] [Thread-66751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:45:59.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:45:59.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:46:00.407 [DEBUG] [Thread-66751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:46:00.407 [DEBUG] [Thread-66751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:46:00.455 [DEBUG] [Thread-66751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:46:00.455 [DEBUG] [Thread-66751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:46:00.464 [DEBUG] [Thread-66751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:46:00.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:46:00.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:46:00.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:46:00.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:46:00.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:46:00.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:46:00.500 [DEBUG] [Thread-66751] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:46:06.522 [DEBUG] [Thread-66753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:10.535 [DEBUG] [Thread-66754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:12.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:12.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:15.573 [DEBUG] [Thread-66755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:24.603 [DEBUG] [Thread-66756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:25.611 [DEBUG] [Thread-66757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:46:30.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:46:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:46:31.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 46, 1), 16.84, 31.22, 0.0, 30.93, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:46:31.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:46:01
2025-12-12T09:46:31.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:46:31.495 [DEBUG] [Thread-66758] [transport.py] [_log()] starting thread (client mode): 0xf8154910
2025-12-12T09:46:31.495 [DEBUG] [Thread-66758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:46:31.515 [DEBUG] [Thread-66758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:46:31.515 [INFO] [Thread-66758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] client lang: <none>
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] server lang: <none>
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] kex follows: False
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] Compression: none
2025-12-12T09:46:31.519 [DEBUG] [Thread-66758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:46:31.537 [DEBUG] [Thread-66758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:46:31.537 [DEBUG] [Thread-66758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:46:31.537 [DEBUG] [Thread-66758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:46:31.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:46:31.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:46:31.580 [DEBUG] [Thread-66758] [transport.py] [_log()] userauth is OK
2025-12-12T09:46:31.580 [DEBUG] [Thread-66758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:46:31.580 [DEBUG] [Thread-66758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:46:31.580 [DEBUG] [Thread-66758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:46:31.580 [DEBUG] [Thread-66758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:46:31.608 [INFO] [Thread-66758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:46:31.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:46:32.397 [DEBUG] [Thread-66758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:46:32.398 [DEBUG] [Thread-66758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:46:32.398 [DEBUG] [Thread-66758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:46:32.438 [DEBUG] [Thread-66758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:46:32.438 [DEBUG] [Thread-66758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:46:32.441 [DEBUG] [Thread-66758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:46:32.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:46:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:46:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:46:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:46:32.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:46:32.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:46:32.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:46:32.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:46:32.460 [DEBUG] [Thread-66758] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:46:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:46:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.323362 -999.00  +13.90  28.44     36   -0.60 1 2 1 1 1   888    0 14.39 -17.70 ----- 28.4 28.4 345.8 40.1 16.6 -12.1 16.3 -11.8 16.1 -11.1 16.4 -11.4
2025-12-12T09:46:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:46:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:46:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.323362
2025-12-12T09:46:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:46:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:46:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:46:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:46:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:46:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:46:01', tmtdew=16.84, humidity=31.22, cloud=0.0, wind=30.93, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:45:38.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:46:32.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:46:32.561 [DEBUG] [Thread-66761] [transport.py] [_log()] starting thread (client mode): 0xf571a9e0
2025-12-12T09:46:32.561 [DEBUG] [Thread-66761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:46:32.576 [DEBUG] [Thread-66761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:46:32.576 [INFO] [Thread-66761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:46:32.583 [DEBUG] [Thread-66761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] client lang: <none>
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] server lang: <none>
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] kex follows: False
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] Compression: none
2025-12-12T09:46:32.584 [DEBUG] [Thread-66761] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:46:32.642 [DEBUG] [Thread-66761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:46:32.642 [DEBUG] [Thread-66761] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:46:32.642 [DEBUG] [Thread-66761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:46:32.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:46:32.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:46:32.699 [DEBUG] [Thread-66761] [transport.py] [_log()] userauth is OK
2025-12-12T09:46:32.699 [DEBUG] [Thread-66761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:46:32.699 [DEBUG] [Thread-66761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:46:32.699 [DEBUG] [Thread-66761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:46:32.699 [DEBUG] [Thread-66761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:46:32.712 [INFO] [Thread-66761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:46:32.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:46:32.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:46:33.482 [DEBUG] [Thread-66763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:33.557 [DEBUG] [Thread-66761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:46:33.557 [DEBUG] [Thread-66761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:46:33.604 [DEBUG] [Thread-66761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:46:33.605 [DEBUG] [Thread-66761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:46:33.613 [DEBUG] [Thread-66761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:46:33.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:46: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')
2025-12-12T09:46: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
2025-12-12T09:46:33.633 [DEBUG] [Thread-66764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:33.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:46:33.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:46:33.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:46:33.644 [DEBUG] [Thread-66761] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:46:40.651 [DEBUG] [Thread-66765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:42.686 [DEBUG] [Thread-66766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:51.708 [DEBUG] [Thread-66767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:46:55.720 [DEBUG] [Thread-66768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:00.740 [DEBUG] [Thread-66769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:03.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:47:03.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:47:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:47:04.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 46, 33), 16.83, 31.25, 0.0, 32.85, 14.29, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:47:04.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:46:33
2025-12-12T09:47:04.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:47:04.620 [DEBUG] [Thread-66770] [transport.py] [_log()] starting thread (client mode): 0xf578b5b0
2025-12-12T09:47:04.620 [DEBUG] [Thread-66770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:47:04.640 [DEBUG] [Thread-66770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:47:04.640 [INFO] [Thread-66770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:47:04.643 [DEBUG] [Thread-66770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] client lang: <none>
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] server lang: <none>
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] kex follows: False
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] Compression: none
2025-12-12T09:47:04.644 [DEBUG] [Thread-66770] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:47:04.660 [DEBUG] [Thread-66770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:47:04.661 [DEBUG] [Thread-66770] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:47:04.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:47:04.661 [DEBUG] [Thread-66770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:47:04.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:47:04.663 [DEBUG] [Thread-66770] [transport.py] [_log()] userauth is OK
2025-12-12T09:47:04.663 [DEBUG] [Thread-66770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:47:04.663 [DEBUG] [Thread-66770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:47:04.663 [DEBUG] [Thread-66770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:47:04.663 [DEBUG] [Thread-66770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:47:04.682 [INFO] [Thread-66770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:47:04.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:47:05.295 [DEBUG] [Thread-66770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:47:05.295 [DEBUG] [Thread-66770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:47:05.295 [DEBUG] [Thread-66770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:47:05.336 [DEBUG] [Thread-66770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:47:05.336 [DEBUG] [Thread-66770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:47:05.338 [DEBUG] [Thread-66770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:47:05.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:47:05.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:47:05.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:47:05.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:47:05.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:47:05.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:47:05.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.323709 -999.00  +13.90  23.31     36   -0.60 1 2 1 1 1   888    0 14.87 -25.65 ----- 23.3 23.3 357.2 36.0 16.5 -12.6 16.3 -11.7 16.1 -11.5 16.3 -13.3
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.323709
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:47:05.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:47:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:46:33', tmtdew=16.83, humidity=31.25, cloud=0.0, wind=32.85, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:46:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:47:05.356 [DEBUG] [Thread-66770] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:47:05.442 [DEBUG] [Thread-66773] [transport.py] [_log()] starting thread (client mode): 0xf5789930
2025-12-12T09:47:05.442 [DEBUG] [Thread-66773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:47:05.457 [DEBUG] [Thread-66773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:47:05.457 [INFO] [Thread-66773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] client lang: <none>
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] server lang: <none>
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] kex follows: False
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] Compression: none
2025-12-12T09:47:05.678 [DEBUG] [Thread-66773] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:47:05.692 [DEBUG] [Thread-66773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:47:05.692 [DEBUG] [Thread-66773] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:47:05.692 [DEBUG] [Thread-66773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:47:05.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:47:05.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:47:05.753 [DEBUG] [Thread-66773] [transport.py] [_log()] userauth is OK
2025-12-12T09:47:05.753 [DEBUG] [Thread-66773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:47:05.753 [DEBUG] [Thread-66773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:47:05.753 [DEBUG] [Thread-66773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:47:05.753 [DEBUG] [Thread-66773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:47:05.767 [INFO] [Thread-66773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:47:05.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:47:05.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:47:06.621 [DEBUG] [Thread-66773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:47:06.621 [DEBUG] [Thread-66773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:47:06.677 [DEBUG] [Thread-66773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:47:06.677 [DEBUG] [Thread-66773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:47:06.689 [DEBUG] [Thread-66773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:47:06.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:47: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')
2025-12-12T09:47:06.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:47:06.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:47:06.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:47:06.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:47:06.743 [DEBUG] [Thread-66773] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:47:09.758 [DEBUG] [Thread-66775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:10.762 [DEBUG] [Thread-66776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:12.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:12.696 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:18.791 [DEBUG] [Thread-66777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:25.813 [DEBUG] [Thread-66778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:27.825 [DEBUG] [Thread-66779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:33.531 [DEBUG] [Thread-66780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:47:36.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:47:36.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:47:36.846 [DEBUG] [Thread-66781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:37.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 47, 5), 16.89, 31.12, 0.0, 34.7, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:47:37.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:47:05
2025-12-12T09:47:37.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:47:37.725 [DEBUG] [Thread-66782] [transport.py] [_log()] starting thread (client mode): 0xf8154460
2025-12-12T09:47:37.725 [DEBUG] [Thread-66782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:47:37.746 [DEBUG] [Thread-66782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:47:37.746 [INFO] [Thread-66782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] client lang: <none>
2025-12-12T09:47:37.749 [DEBUG] [Thread-66782] [transport.py] [_log()] server lang: <none>
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] kex follows: False
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] Compression: none
2025-12-12T09:47:37.750 [DEBUG] [Thread-66782] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:47:37.766 [DEBUG] [Thread-66782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:47:37.766 [DEBUG] [Thread-66782] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:47:37.767 [DEBUG] [Thread-66782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:47:37.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:47:37.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:47:37.767 [DEBUG] [Thread-66782] [transport.py] [_log()] userauth is OK
2025-12-12T09:47:37.767 [DEBUG] [Thread-66782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:47:37.767 [DEBUG] [Thread-66782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:47:37.767 [DEBUG] [Thread-66782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:47:37.767 [DEBUG] [Thread-66782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:47:37.780 [INFO] [Thread-66782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:47:37.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:47:38.584 [DEBUG] [Thread-66782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:47:38.584 [DEBUG] [Thread-66782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:47:38.584 [DEBUG] [Thread-66782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:47:38.626 [DEBUG] [Thread-66782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:47:38.626 [DEBUG] [Thread-66782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:47:38.628 [DEBUG] [Thread-66782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:47:38.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:47:38.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:47:38.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:47:38.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:47:38.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:47:38.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:47:38.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.324346 -999.00  +13.90  19.61     36   -0.60 1 2 1 1 1   888    0 14.00 -33.48 ----- 25.4 19.6 351.6 40.6 16.4 -11.7 16.2 -11.9 16.1 -10.9 16.3 -10.9
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.324346
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:47:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:47:05', tmtdew=16.89, humidity=31.12, cloud=0.0, wind=34.7, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:47:03.494', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:47:38.649 [DEBUG] [Thread-66782] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:47:38.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:47:38.735 [DEBUG] [Thread-66785] [transport.py] [_log()] starting thread (client mode): 0xf57716f0
2025-12-12T09:47:38.735 [DEBUG] [Thread-66785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:47:38.756 [DEBUG] [Thread-66785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:47:38.756 [INFO] [Thread-66785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] client lang: <none>
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] server lang: <none>
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] kex follows: False
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] Compression: none
2025-12-12T09:47:38.764 [DEBUG] [Thread-66785] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:47:38.822 [DEBUG] [Thread-66785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:47:38.822 [DEBUG] [Thread-66785] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:47:38.823 [DEBUG] [Thread-66785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:47:38.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:47:38.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:47:38.879 [DEBUG] [Thread-66785] [transport.py] [_log()] userauth is OK
2025-12-12T09:47:38.880 [DEBUG] [Thread-66785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:47:38.880 [DEBUG] [Thread-66785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:47:38.880 [DEBUG] [Thread-66785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:47:38.880 [DEBUG] [Thread-66785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:47:38.894 [INFO] [Thread-66785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:47:38.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:47:38.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:47:39.746 [DEBUG] [Thread-66785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:47:39.746 [DEBUG] [Thread-66785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:47:39.794 [DEBUG] [Thread-66785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:47:39.795 [DEBUG] [Thread-66785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:47:39.804 [DEBUG] [Thread-66785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:47:39.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:47:39.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:47:39.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:47:39.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:47:39.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:47:39.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:47:39.840 [DEBUG] [Thread-66785] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:47:40.858 [DEBUG] [Thread-66787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:45.900 [DEBUG] [Thread-66788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:54.920 [DEBUG] [Thread-66789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:47:55.929 [DEBUG] [Thread-66790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:03.956 [DEBUG] [Thread-66791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:09.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:48:09.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:48:09.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:48:10.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 47, 37), 17.11, 30.57, 0.0, 30.26, 14.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:48:10.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:47:37
2025-12-12T09:48:10.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:48:10.870 [DEBUG] [Thread-66792] [transport.py] [_log()] starting thread (client mode): 0xf5728160
2025-12-12T09:48:10.870 [DEBUG] [Thread-66792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:48:10.890 [DEBUG] [Thread-66792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:48:10.890 [INFO] [Thread-66792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] client lang: <none>
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] server lang: <none>
2025-12-12T09:48:10.893 [DEBUG] [Thread-66792] [transport.py] [_log()] kex follows: False
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] Compression: none
2025-12-12T09:48:10.894 [DEBUG] [Thread-66792] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:48:10.911 [DEBUG] [Thread-66792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:48:10.911 [DEBUG] [Thread-66792] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:48:10.911 [DEBUG] [Thread-66792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:48:10.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:48:10.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:48:10.912 [DEBUG] [Thread-66792] [transport.py] [_log()] userauth is OK
2025-12-12T09:48:10.912 [DEBUG] [Thread-66792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:48:10.912 [DEBUG] [Thread-66792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:48:10.912 [DEBUG] [Thread-66792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:48:10.912 [DEBUG] [Thread-66792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:48:10.927 [INFO] [Thread-66792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:48:10.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:48:10.973 [DEBUG] [Thread-66794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:11.592 [DEBUG] [Thread-66792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:48:11.592 [DEBUG] [Thread-66792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:48:11.592 [DEBUG] [Thread-66792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:48:11.634 [DEBUG] [Thread-66792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:48:11.634 [DEBUG] [Thread-66792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:48:11.637 [DEBUG] [Thread-66792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:48:11.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:48:11.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:48:11.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:48:11.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:48:11.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:48:11.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:48:11.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:48:11.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:48:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:48:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.324693 -999.00  +13.80  31.28     36   -0.60 1 2 2 1 1   888    0 14.26 -35.20 ----- 18.2 31.3 356.7 39.9 16.5 -11.9 16.3 -12.4 16.1 -11.0 16.3 -11.5
2025-12-12T09:48:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:48:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:48:11.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.324693
2025-12-12T09:48:11.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:48:11.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:48:11.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:48:11.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:48:11.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:48:11.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:47:37', tmtdew=17.11, humidity=30.57, cloud=0.0, wind=30.26, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:47:33.475', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:48:11.660 [DEBUG] [Thread-66792] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:48:11.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:48:11.754 [DEBUG] [Thread-66796] [transport.py] [_log()] starting thread (client mode): 0xf57bdc00
2025-12-12T09:48:11.754 [DEBUG] [Thread-66796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:48:11.770 [DEBUG] [Thread-66796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:48:11.770 [INFO] [Thread-66796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:48:11.777 [DEBUG] [Thread-66796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:48:11.778 [DEBUG] [Thread-66796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:48:11.778 [DEBUG] [Thread-66796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:48:11.778 [DEBUG] [Thread-66796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:11.778 [DEBUG] [Thread-66796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:11.778 [DEBUG] [Thread-66796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:11.778 [DEBUG] [Thread-66796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] client lang: <none>
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] server lang: <none>
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] kex follows: False
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:48:11.779 [DEBUG] [Thread-66796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:48:11.780 [DEBUG] [Thread-66796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:48:11.780 [DEBUG] [Thread-66796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:48:11.780 [DEBUG] [Thread-66796] [transport.py] [_log()] Compression: none
2025-12-12T09:48:11.780 [DEBUG] [Thread-66796] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:48:11.839 [DEBUG] [Thread-66796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:48:11.839 [DEBUG] [Thread-66796] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:48:11.840 [DEBUG] [Thread-66796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:48:11.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:48:11.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:48:11.896 [DEBUG] [Thread-66796] [transport.py] [_log()] userauth is OK
2025-12-12T09:48:11.896 [DEBUG] [Thread-66796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:48:11.896 [DEBUG] [Thread-66796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:48:11.896 [DEBUG] [Thread-66796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:48:11.896 [DEBUG] [Thread-66796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:48:11.917 [INFO] [Thread-66796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:48:11.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:48:11.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:48:12.774 [DEBUG] [Thread-66796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:48:12.774 [DEBUG] [Thread-66796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:48:12.823 [DEBUG] [Thread-66796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:48:12.823 [DEBUG] [Thread-66796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:48:12.832 [DEBUG] [Thread-66796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:48:12.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:12.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:12.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:48:12.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:48:12.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:48:12.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:48:12.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:48:12.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:48:12.866 [DEBUG] [Thread-66796] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:48:12.981 [DEBUG] [Thread-66798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:22.006 [DEBUG] [Thread-66799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:26.020 [DEBUG] [Thread-66800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:31.049 [DEBUG] [Thread-66801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:33.583 [DEBUG] [Thread-66802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:40.070 [DEBUG] [Thread-66803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:41.078 [DEBUG] [Thread-66804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:42.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:48:42.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:48:42.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:48:43.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 48, 9), 17.09, 30.6, 0.0, 28.71, 14.47, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:48:43.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:48:09
2025-12-12T09:48:43.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:48:43.898 [DEBUG] [Thread-66805] [transport.py] [_log()] starting thread (client mode): 0xf578b430
2025-12-12T09:48:43.898 [DEBUG] [Thread-66805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:48:43.917 [DEBUG] [Thread-66805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:48:43.918 [INFO] [Thread-66805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:48:43.921 [DEBUG] [Thread-66805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:48:43.921 [DEBUG] [Thread-66805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:48:43.921 [DEBUG] [Thread-66805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:48:43.921 [DEBUG] [Thread-66805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] client lang: <none>
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] server lang: <none>
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] kex follows: False
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:48:43.922 [DEBUG] [Thread-66805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:48:43.923 [DEBUG] [Thread-66805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:48:43.923 [DEBUG] [Thread-66805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:48:43.923 [DEBUG] [Thread-66805] [transport.py] [_log()] Compression: none
2025-12-12T09:48:43.923 [DEBUG] [Thread-66805] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:48:43.943 [DEBUG] [Thread-66805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:48:43.944 [DEBUG] [Thread-66805] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:48:43.944 [DEBUG] [Thread-66805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:48:43.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:48:43.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:48:43.947 [DEBUG] [Thread-66805] [transport.py] [_log()] userauth is OK
2025-12-12T09:48:43.947 [DEBUG] [Thread-66805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:48:43.947 [DEBUG] [Thread-66805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:48:43.947 [DEBUG] [Thread-66805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:48:43.947 [DEBUG] [Thread-66805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:48:43.971 [INFO] [Thread-66805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:48:43.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:48:44.747 [DEBUG] [Thread-66805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:48:44.748 [DEBUG] [Thread-66805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:48:44.748 [DEBUG] [Thread-66805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:48:44.788 [DEBUG] [Thread-66805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:48:44.788 [DEBUG] [Thread-66805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:48:44.791 [DEBUG] [Thread-66805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:48:44.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:48:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:48:44.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:48:44.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:48:44.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:48:44.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:48:44.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:48:44.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:48:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:48:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.325040 -999.00  +13.80  33.79     37   -0.50 1 2 2 1 1   888    0 14.01 -38.31 ----- 30.8 33.8 325.6 46.4 16.5 -11.7 16.3 -12.0 16.1 -10.8 16.3 -10.8
2025-12-12T09:48:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:48:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:48:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.325040
2025-12-12T09:48:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:48:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:48:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:48:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:48:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:48:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:48:09', tmtdew=17.09, humidity=30.6, cloud=0.0, wind=28.71, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:48:03.456', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:48:44.816 [DEBUG] [Thread-66805] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:48:44.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:48:44.914 [DEBUG] [Thread-66808] [transport.py] [_log()] starting thread (client mode): 0xf578b280
2025-12-12T09:48:44.915 [DEBUG] [Thread-66808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:48:44.930 [DEBUG] [Thread-66808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:48:44.930 [INFO] [Thread-66808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:48:44.937 [DEBUG] [Thread-66808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:48:44.937 [DEBUG] [Thread-66808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:48:44.937 [DEBUG] [Thread-66808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] client lang: <none>
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] server lang: <none>
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] kex follows: False
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] Compression: none
2025-12-12T09:48:44.938 [DEBUG] [Thread-66808] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:48:44.997 [DEBUG] [Thread-66808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:48:44.997 [DEBUG] [Thread-66808] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:48:44.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:48:44.999 [DEBUG] [Thread-66808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:48:44.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:48:45.052 [DEBUG] [Thread-66808] [transport.py] [_log()] userauth is OK
2025-12-12T09:48:45.053 [DEBUG] [Thread-66808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:48:45.053 [DEBUG] [Thread-66808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:48:45.053 [DEBUG] [Thread-66808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:48:45.053 [DEBUG] [Thread-66808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:48:45.073 [INFO] [Thread-66808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:48:45.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:48:45.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:48:45.890 [DEBUG] [Thread-66808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:48:45.890 [DEBUG] [Thread-66808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:48:45.939 [DEBUG] [Thread-66808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:48:45.939 [DEBUG] [Thread-66808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:48:45.949 [DEBUG] [Thread-66808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:48:45.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:48:45.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:48:45.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:48:45.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:48:45.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:48:45.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:48:45.989 [DEBUG] [Thread-66808] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:48:49.102 [DEBUG] [Thread-66810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:56.119 [DEBUG] [Thread-66811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:48:58.151 [DEBUG] [Thread-66812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:07.167 [DEBUG] [Thread-66813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:11.175 [DEBUG] [Thread-66814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:12.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:12.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:16.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:49:16.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:49:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:49:16.185 [DEBUG] [Thread-66815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 49, 13), 17.03, 30.86, 0.0, 28.28, 14.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:49:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:49:13
2025-12-12T09:49:16.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:49:16.977 [DEBUG] [Thread-66816] [transport.py] [_log()] starting thread (client mode): 0xf57bd870
2025-12-12T09:49:16.977 [DEBUG] [Thread-66816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:49:16.998 [DEBUG] [Thread-66816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:49:16.998 [INFO] [Thread-66816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:49:17.001 [DEBUG] [Thread-66816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] client lang: <none>
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] server lang: <none>
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] kex follows: False
2025-12-12T09:49:17.002 [DEBUG] [Thread-66816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:49:17.003 [DEBUG] [Thread-66816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:49:17.003 [DEBUG] [Thread-66816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:49:17.003 [DEBUG] [Thread-66816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:49:17.003 [DEBUG] [Thread-66816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:49:17.003 [DEBUG] [Thread-66816] [transport.py] [_log()] Compression: none
2025-12-12T09:49:17.003 [DEBUG] [Thread-66816] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:49:17.020 [DEBUG] [Thread-66816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:49:17.020 [DEBUG] [Thread-66816] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:49:17.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:49:17.022 [DEBUG] [Thread-66816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:49:17.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:49:17.024 [DEBUG] [Thread-66816] [transport.py] [_log()] userauth is OK
2025-12-12T09:49:17.024 [DEBUG] [Thread-66816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:49:17.024 [DEBUG] [Thread-66816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:49:17.024 [DEBUG] [Thread-66816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:49:17.024 [DEBUG] [Thread-66816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:49:17.049 [INFO] [Thread-66816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:49:17.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:49:17.648 [DEBUG] [Thread-66816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:49:17.648 [DEBUG] [Thread-66816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:49:17.649 [DEBUG] [Thread-66816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:49:17.689 [DEBUG] [Thread-66816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:49:17.689 [DEBUG] [Thread-66816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:49:17.693 [DEBUG] [Thread-66816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:49:17.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:49:17.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:49:17.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:49:17.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:49:17.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:49:17.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:49:17.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:49:17.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:49:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:49:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.325445 -999.00  +13.70  24.49     37   -0.40 1 2 1 1 1   888    0 13.82 -43.76 ----- 24.5 24.5 344.0 41.5 16.5 -12.4 16.3 -12.5 16.1 -11.0 16.3 -12.2
2025-12-12T09:49:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:49:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:49:17.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.325445
2025-12-12T09:49:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:49:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:49:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:49:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:49:17.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:49:17.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:49:13', tmtdew=17.03, humidity=30.86, cloud=0.0, wind=28.28, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:48:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:49:17.721 [DEBUG] [Thread-66816] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:49:17.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:49:17.815 [DEBUG] [Thread-66819] [transport.py] [_log()] starting thread (client mode): 0xf5789480
2025-12-12T09:49:17.815 [DEBUG] [Thread-66819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:49:17.830 [DEBUG] [Thread-66819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:49:17.830 [INFO] [Thread-66819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] client lang: <none>
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] server lang: <none>
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] kex follows: False
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:49:17.838 [DEBUG] [Thread-66819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:49:17.839 [DEBUG] [Thread-66819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:49:17.839 [DEBUG] [Thread-66819] [transport.py] [_log()] Compression: none
2025-12-12T09:49:17.839 [DEBUG] [Thread-66819] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:49:17.895 [DEBUG] [Thread-66819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:49:17.896 [DEBUG] [Thread-66819] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:49:17.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:49:17.897 [DEBUG] [Thread-66819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:49:17.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:49:17.951 [DEBUG] [Thread-66819] [transport.py] [_log()] userauth is OK
2025-12-12T09:49:17.952 [DEBUG] [Thread-66819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:49:17.952 [DEBUG] [Thread-66819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:49:17.953 [DEBUG] [Thread-66819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:49:17.953 [DEBUG] [Thread-66819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:49:17.971 [INFO] [Thread-66819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:49:17.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:49:17.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:49:18.794 [DEBUG] [Thread-66819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:49:18.794 [DEBUG] [Thread-66819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:49:18.842 [DEBUG] [Thread-66819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:49:18.843 [DEBUG] [Thread-66819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:49:18.852 [DEBUG] [Thread-66819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:49:18.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:49:18.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:49:18.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:49:18.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:49:18.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:49:18.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:49:18.889 [DEBUG] [Thread-66819] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:49:25.209 [DEBUG] [Thread-66821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:26.218 [DEBUG] [Thread-66822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:33.634 [DEBUG] [Thread-66823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:34.261 [DEBUG] [Thread-66824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:41.282 [DEBUG] [Thread-66825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:43.296 [DEBUG] [Thread-66826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:49:48.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:49:48.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:49:49.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 49, 45), 16.82, 31.4, 0.0, 34.86, 14.39, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:49:49.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:49:45
2025-12-12T09:49:49.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:49:49.907 [DEBUG] [Thread-66827] [transport.py] [_log()] starting thread (client mode): 0xf57b6710
2025-12-12T09:49:49.907 [DEBUG] [Thread-66827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:49:49.927 [DEBUG] [Thread-66827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:49:49.927 [INFO] [Thread-66827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:49:49.930 [DEBUG] [Thread-66827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:49:49.930 [DEBUG] [Thread-66827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:49:49.930 [DEBUG] [Thread-66827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:49:49.930 [DEBUG] [Thread-66827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:49.930 [DEBUG] [Thread-66827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:49.930 [DEBUG] [Thread-66827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] client lang: <none>
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] server lang: <none>
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] kex follows: False
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] Compression: none
2025-12-12T09:49:49.931 [DEBUG] [Thread-66827] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:49:49.942 [DEBUG] [Thread-66827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:49:49.943 [DEBUG] [Thread-66827] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:49:49.943 [DEBUG] [Thread-66827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:49:49.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:49:49.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:49:49.944 [DEBUG] [Thread-66827] [transport.py] [_log()] userauth is OK
2025-12-12T09:49:49.944 [DEBUG] [Thread-66827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:49:49.944 [DEBUG] [Thread-66827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:49:49.944 [DEBUG] [Thread-66827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:49:49.944 [DEBUG] [Thread-66827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:49:49.953 [INFO] [Thread-66827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:49:49.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:49:50.762 [DEBUG] [Thread-66827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:49:50.762 [DEBUG] [Thread-66827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:49:50.762 [DEBUG] [Thread-66827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:49:50.803 [DEBUG] [Thread-66827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:49:50.804 [DEBUG] [Thread-66827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:49:50.806 [DEBUG] [Thread-66827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:49:50.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:49:50.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:49:50.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:49:50.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:49:50.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:49:50.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:49:50.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:49:50.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:49:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:49:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.325792 -999.00  +13.80  25.99     37   -0.30 1 2 1 1 1   888    0 13.36 -50.86 ----- 30.3 26.0 0.5 36.2 16.6 -11.6 16.3 -11.8 16.1 -10.7 16.4 -10.8
2025-12-12T09:49:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:49:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:49:50.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.325792
2025-12-12T09:49:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:49:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:49:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:49:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:49:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:49:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:49:45', tmtdew=16.82, humidity=31.4, cloud=0.0, wind=34.86, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:49:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:49:50.825 [DEBUG] [Thread-66827] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:49:50.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:49:50.910 [DEBUG] [Thread-66830] [transport.py] [_log()] starting thread (client mode): 0xf572b430
2025-12-12T09:49:50.911 [DEBUG] [Thread-66830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:49:50.925 [DEBUG] [Thread-66830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:49:50.926 [INFO] [Thread-66830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] client lang: <none>
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] server lang: <none>
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] kex follows: False
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:49:50.933 [DEBUG] [Thread-66830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:49:50.934 [DEBUG] [Thread-66830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:49:50.934 [DEBUG] [Thread-66830] [transport.py] [_log()] Compression: none
2025-12-12T09:49:50.934 [DEBUG] [Thread-66830] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:49:50.994 [DEBUG] [Thread-66830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:49:50.995 [DEBUG] [Thread-66830] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:49:50.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:49:50.996 [DEBUG] [Thread-66830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:49:50.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:49:51.050 [DEBUG] [Thread-66830] [transport.py] [_log()] userauth is OK
2025-12-12T09:49:51.051 [DEBUG] [Thread-66830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:49:51.051 [DEBUG] [Thread-66830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:49:51.051 [DEBUG] [Thread-66830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:49:51.051 [DEBUG] [Thread-66830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:49:51.069 [INFO] [Thread-66830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:49:51.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:49:51.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:49:51.931 [DEBUG] [Thread-66830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:49:51.931 [DEBUG] [Thread-66830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:49:51.982 [DEBUG] [Thread-66830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:49:51.982 [DEBUG] [Thread-66830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:49:51.991 [DEBUG] [Thread-66830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:49:52.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:49:52.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:49:52.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:49:52.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:49:52.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:49:52.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:49:52.028 [DEBUG] [Thread-66830] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:49:52.318 [DEBUG] [Thread-66832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:49:56.331 [DEBUG] [Thread-66833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:01.364 [DEBUG] [Thread-66834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:10.387 [DEBUG] [Thread-66835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:11.395 [DEBUG] [Thread-66836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:13.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:13.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:19.416 [DEBUG] [Thread-66837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:50:22.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:50:22.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:50:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 50, 17), 16.83, 31.38, 0.0, 32.34, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:50:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:50:17
2025-12-12T09:50:22.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:50:23.015 [DEBUG] [Thread-66838] [transport.py] [_log()] starting thread (client mode): 0xf5719060
2025-12-12T09:50:23.015 [DEBUG] [Thread-66838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:50:23.038 [DEBUG] [Thread-66838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:50:23.038 [INFO] [Thread-66838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] client lang: <none>
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] server lang: <none>
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] kex follows: False
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:50:23.042 [DEBUG] [Thread-66838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:50:23.043 [DEBUG] [Thread-66838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:50:23.043 [DEBUG] [Thread-66838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:50:23.043 [DEBUG] [Thread-66838] [transport.py] [_log()] Compression: none
2025-12-12T09:50:23.043 [DEBUG] [Thread-66838] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:50:23.062 [DEBUG] [Thread-66838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:50:23.063 [DEBUG] [Thread-66838] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:50:23.063 [DEBUG] [Thread-66838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:50:23.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:50:23.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:50:23.066 [DEBUG] [Thread-66838] [transport.py] [_log()] userauth is OK
2025-12-12T09:50:23.066 [DEBUG] [Thread-66838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:50:23.066 [DEBUG] [Thread-66838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:50:23.066 [DEBUG] [Thread-66838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:50:23.066 [DEBUG] [Thread-66838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:50:23.102 [INFO] [Thread-66838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:50:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:50:23.737 [DEBUG] [Thread-66838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:50:23.737 [DEBUG] [Thread-66838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:50:23.737 [DEBUG] [Thread-66838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:50:23.778 [DEBUG] [Thread-66838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:50:23.778 [DEBUG] [Thread-66838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:50:23.780 [DEBUG] [Thread-66838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:50:23.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:50:23.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:50:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:50:23.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:50:23.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:50:23.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:50:23.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.326139 -999.00  +13.70  38.04     38   -0.20 1 2 2 1 1   888    0 13.52 -60.11 ----- 23.4 38.0 339.7 51.9 16.6 -11.8 16.2 -12.4 16.1 -11.0 16.4 -11.0
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.326139
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:50:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:50:17', tmtdew=16.83, humidity=31.38, cloud=0.0, wind=32.34, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:49:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:50:23.800 [DEBUG] [Thread-66838] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:50:23.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:50:23.886 [DEBUG] [Thread-66841] [transport.py] [_log()] starting thread (client mode): 0xf57bc2b0
2025-12-12T09:50:23.886 [DEBUG] [Thread-66841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:50:23.900 [DEBUG] [Thread-66841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:50:23.900 [INFO] [Thread-66841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] client lang: <none>
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] server lang: <none>
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] kex follows: False
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] Compression: none
2025-12-12T09:50:23.908 [DEBUG] [Thread-66841] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:50:23.963 [DEBUG] [Thread-66841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:50:23.963 [DEBUG] [Thread-66841] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:50:23.963 [DEBUG] [Thread-66841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:50:23.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:50:23.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:50:24.020 [DEBUG] [Thread-66841] [transport.py] [_log()] userauth is OK
2025-12-12T09:50:24.020 [DEBUG] [Thread-66841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:50:24.020 [DEBUG] [Thread-66841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:50:24.020 [DEBUG] [Thread-66841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:50:24.020 [DEBUG] [Thread-66841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:50:24.033 [INFO] [Thread-66841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:50:24.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:50:24.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:50:24.935 [DEBUG] [Thread-66841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:50:24.935 [DEBUG] [Thread-66841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:50:24.983 [DEBUG] [Thread-66841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:50:24.983 [DEBUG] [Thread-66841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:50:24.991 [DEBUG] [Thread-66841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:50:24.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:50: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')
2025-12-12T09:50:25.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:50:25.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:50:25.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:50:25.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:50:25.023 [DEBUG] [Thread-66841] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:50:26.431 [DEBUG] [Thread-66843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:28.445 [DEBUG] [Thread-66844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:33.690 [DEBUG] [Thread-66845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:37.468 [DEBUG] [Thread-66846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:41.484 [DEBUG] [Thread-66847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:46.503 [DEBUG] [Thread-66848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:50:55.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:50:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:50:55.520 [DEBUG] [Thread-66849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 50, 49), 16.59, 31.48, 0.0, 37.33, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:50:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:50:49
2025-12-12T09:50:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:50:56.008 [DEBUG] [Thread-66850] [transport.py] [_log()] starting thread (client mode): 0xf57be230
2025-12-12T09:50:56.008 [DEBUG] [Thread-66850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:50:56.027 [DEBUG] [Thread-66850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:50:56.028 [INFO] [Thread-66850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] client lang: <none>
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] server lang: <none>
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] kex follows: False
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] Compression: none
2025-12-12T09:50:56.031 [DEBUG] [Thread-66850] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:50:56.047 [DEBUG] [Thread-66850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:50:56.048 [DEBUG] [Thread-66850] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:50:56.048 [DEBUG] [Thread-66850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:50:56.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:50:56.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:50:56.050 [DEBUG] [Thread-66850] [transport.py] [_log()] userauth is OK
2025-12-12T09:50:56.051 [DEBUG] [Thread-66850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:50:56.051 [DEBUG] [Thread-66850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:50:56.051 [DEBUG] [Thread-66850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:50:56.051 [DEBUG] [Thread-66850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:50:56.076 [INFO] [Thread-66850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:50:56.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:50:56.527 [DEBUG] [Thread-66852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:50:56.709 [DEBUG] [Thread-66850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:50:56.710 [DEBUG] [Thread-66850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:50:56.710 [DEBUG] [Thread-66850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:50:56.750 [DEBUG] [Thread-66850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:50:56.750 [DEBUG] [Thread-66850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:50:56.754 [DEBUG] [Thread-66850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:50:56.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:50:56.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:50:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:50:56.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:50:56.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:50:56.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:50:56.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:50:56.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:50:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:50:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.326429 -999.00  +13.60  35.04     38   -0.20 1 2 2 1 1   888    0 13.11 -59.42 ----- 28.6 35.0 343.7 53.2 16.6 -12.2 16.3 -11.8 16.1 -11.0 16.4 -11.2
2025-12-12T09:50:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:50:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:50:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.326429
2025-12-12T09:50:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:50:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:50:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:50:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:50:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:50:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:50:49', tmtdew=16.59, humidity=31.48, cloud=0.0, wind=37.33, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:50:03.466', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:50:56.781 [DEBUG] [Thread-66850] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:50:56.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:50:56.878 [DEBUG] [Thread-66854] [transport.py] [_log()] starting thread (client mode): 0xf2d0c0a0
2025-12-12T09:50:56.879 [DEBUG] [Thread-66854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:50:56.894 [DEBUG] [Thread-66854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:50:56.894 [INFO] [Thread-66854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:50:56.902 [DEBUG] [Thread-66854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:50:56.902 [DEBUG] [Thread-66854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:50:56.902 [DEBUG] [Thread-66854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:50:56.902 [DEBUG] [Thread-66854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] client lang: <none>
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] server lang: <none>
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] kex follows: False
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] Compression: none
2025-12-12T09:50:56.903 [DEBUG] [Thread-66854] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:50:56.960 [DEBUG] [Thread-66854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:50:56.960 [DEBUG] [Thread-66854] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:50:56.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:50:56.962 [DEBUG] [Thread-66854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:50:56.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:50:57.019 [DEBUG] [Thread-66854] [transport.py] [_log()] userauth is OK
2025-12-12T09:50:57.020 [DEBUG] [Thread-66854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:50:57.020 [DEBUG] [Thread-66854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:50:57.020 [DEBUG] [Thread-66854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:50:57.020 [DEBUG] [Thread-66854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:50:57.040 [INFO] [Thread-66854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:50:57.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:50:57.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:50:57.862 [DEBUG] [Thread-66854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:50:57.862 [DEBUG] [Thread-66854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:50:57.910 [DEBUG] [Thread-66854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:50:57.910 [DEBUG] [Thread-66854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:50:57.919 [DEBUG] [Thread-66854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:50:57.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:50:57.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:50:57.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
2025-12-12T09:50:57.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:50:57.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:50:57.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:50:57.956 [DEBUG] [Thread-66854] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:51:04.547 [DEBUG] [Thread-66856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:11.562 [DEBUG] [Thread-66857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:13.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:13.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:13.600 [DEBUG] [Thread-66858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:22.621 [DEBUG] [Thread-66859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:26.634 [DEBUG] [Thread-66860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:27.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:51:27.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:51:27.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:51:28.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 51, 21), 16.47, 31.73, 0.0, 35.78, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:51:28.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:51:21
2025-12-12T09:51:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:51:28.933 [DEBUG] [Thread-66861] [transport.py] [_log()] starting thread (client mode): 0xf8156320
2025-12-12T09:51:28.933 [DEBUG] [Thread-66861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:51:28.954 [DEBUG] [Thread-66861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:51:28.954 [INFO] [Thread-66861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] client lang: <none>
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] server lang: <none>
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] kex follows: False
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:51:28.957 [DEBUG] [Thread-66861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:51:28.958 [DEBUG] [Thread-66861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:51:28.958 [DEBUG] [Thread-66861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:51:28.958 [DEBUG] [Thread-66861] [transport.py] [_log()] Compression: none
2025-12-12T09:51:28.958 [DEBUG] [Thread-66861] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:51:28.975 [DEBUG] [Thread-66861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:51:28.976 [DEBUG] [Thread-66861] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:51:28.977 [DEBUG] [Thread-66861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:51:28.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:51:28.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:51:28.979 [DEBUG] [Thread-66861] [transport.py] [_log()] userauth is OK
2025-12-12T09:51:28.979 [DEBUG] [Thread-66861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:51:28.979 [DEBUG] [Thread-66861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:51:28.979 [DEBUG] [Thread-66861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:51:28.979 [DEBUG] [Thread-66861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:51:29.004 [INFO] [Thread-66861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:51:29.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:51:29.638 [DEBUG] [Thread-66861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:51:29.638 [DEBUG] [Thread-66861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:51:29.638 [DEBUG] [Thread-66861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:51:29.679 [DEBUG] [Thread-66861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:51:29.680 [DEBUG] [Thread-66861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:51:29.683 [DEBUG] [Thread-66861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:51:29.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:51:29.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:51:29.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:51:29.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:51:29.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:51:29.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:51:29.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:51:29.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:51:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:51:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.326834 -999.00  +13.60  20.51     37   -0.40 1 2 1 1 1   888    0 13.07 -62.96 ----- 27.2 20.5 349.3 38.2 16.5 -11.5 16.3 -11.4 16.1 -10.7 16.3 -11.0
2025-12-12T09:51:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:51:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:51:29.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.326834
2025-12-12T09:51:29.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:51:29.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:51:29.709 [DEBUG] [Thread-66861] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:51:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:51:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:51:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:51:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:51:21', tmtdew=16.47, humidity=31.73, cloud=0.0, wind=35.78, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:50:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:51:29.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:51:29.800 [DEBUG] [Thread-66864] [transport.py] [_log()] starting thread (client mode): 0xf5719270
2025-12-12T09:51:29.801 [DEBUG] [Thread-66864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:51:29.816 [DEBUG] [Thread-66864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:51:29.816 [INFO] [Thread-66864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:51:29.823 [DEBUG] [Thread-66864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:51:29.824 [DEBUG] [Thread-66864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:51:29.824 [DEBUG] [Thread-66864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:51:29.824 [DEBUG] [Thread-66864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:51:29.824 [DEBUG] [Thread-66864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:51:29.824 [DEBUG] [Thread-66864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:51:29.824 [DEBUG] [Thread-66864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] client lang: <none>
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] server lang: <none>
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] kex follows: False
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:51:29.825 [DEBUG] [Thread-66864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:51:29.826 [DEBUG] [Thread-66864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:51:29.826 [DEBUG] [Thread-66864] [transport.py] [_log()] Compression: none
2025-12-12T09:51:29.826 [DEBUG] [Thread-66864] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:51:29.883 [DEBUG] [Thread-66864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:51:29.884 [DEBUG] [Thread-66864] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:51:29.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:51:29.885 [DEBUG] [Thread-66864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:51:29.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:51:29.942 [DEBUG] [Thread-66864] [transport.py] [_log()] userauth is OK
2025-12-12T09:51:29.943 [DEBUG] [Thread-66864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:51:29.943 [DEBUG] [Thread-66864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:51:29.943 [DEBUG] [Thread-66864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:51:29.943 [DEBUG] [Thread-66864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:51:29.967 [INFO] [Thread-66864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:51:29.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:51:29.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:51:30.837 [DEBUG] [Thread-66864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:51:30.837 [DEBUG] [Thread-66864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:51:30.885 [DEBUG] [Thread-66864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:51:30.885 [DEBUG] [Thread-66864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:51:30.894 [DEBUG] [Thread-66864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:51:30.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:51:30.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:51: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') -> 00000000
2025-12-12T09:51:30.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:51:30.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:51:30.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:51:30.931 [DEBUG] [Thread-66864] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:51:31.649 [DEBUG] [Thread-66866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:33.744 [DEBUG] [Thread-66867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:40.671 [DEBUG] [Thread-66868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:41.676 [DEBUG] [Thread-66869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:49.703 [DEBUG] [Thread-66870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:56.722 [DEBUG] [Thread-66871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:51:58.737 [DEBUG] [Thread-66872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:00.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:52:00.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:52:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:52:01.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 51, 53), 16.43, 31.83, 0.0, 30.93, 14.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:52:01.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:51:53
2025-12-12T09:52:01.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:52:01.916 [DEBUG] [Thread-66873] [transport.py] [_log()] starting thread (client mode): 0xf571b400
2025-12-12T09:52:01.916 [DEBUG] [Thread-66873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:52:01.935 [DEBUG] [Thread-66873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:52:01.935 [INFO] [Thread-66873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:52:01.938 [DEBUG] [Thread-66873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:52:01.938 [DEBUG] [Thread-66873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:52:01.938 [DEBUG] [Thread-66873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:52:01.938 [DEBUG] [Thread-66873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:01.938 [DEBUG] [Thread-66873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] client lang: <none>
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] server lang: <none>
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] kex follows: False
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] Compression: none
2025-12-12T09:52:01.939 [DEBUG] [Thread-66873] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:52:01.948 [DEBUG] [Thread-66873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:52:01.948 [DEBUG] [Thread-66873] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:52:01.949 [DEBUG] [Thread-66873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:52:01.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:52:01.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:52:01.951 [DEBUG] [Thread-66873] [transport.py] [_log()] userauth is OK
2025-12-12T09:52:01.951 [DEBUG] [Thread-66873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:52:01.951 [DEBUG] [Thread-66873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:52:01.951 [DEBUG] [Thread-66873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:52:01.951 [DEBUG] [Thread-66873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:52:01.969 [INFO] [Thread-66873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:52:01.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:52:02.628 [DEBUG] [Thread-66873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:52:02.628 [DEBUG] [Thread-66873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:52:02.629 [DEBUG] [Thread-66873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:52:02.670 [DEBUG] [Thread-66873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:52:02.670 [DEBUG] [Thread-66873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:52:02.673 [DEBUG] [Thread-66873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:52:02.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:52:02.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:52:02.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:52:02.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:52:02.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:52:02.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:52:02.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:52:02.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:52:02.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:52:02.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.327528 -999.00  +13.90  33.69     38   -0.10 1 2 2 1 1   888    0 12.74 -76.56 ----- 33.7 33.7 2.2 41.1 16.6 -11.7 16.4 -11.4 16.2 -10.7 16.5 -10.6
2025-12-12T09:52:02.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:52:02.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:52:02.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.327528
2025-12-12T09:52:02.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:52:02.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:52:02.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:52:02.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:52:02.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:52:02.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:51:53', tmtdew=16.43, humidity=31.83, cloud=0.0, wind=30.93, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:51:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:52:02.694 [DEBUG] [Thread-66873] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:52:02.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:52:02.783 [DEBUG] [Thread-66876] [transport.py] [_log()] starting thread (client mode): 0xf572feb0
2025-12-12T09:52:02.783 [DEBUG] [Thread-66876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:52:02.798 [DEBUG] [Thread-66876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:52:02.798 [INFO] [Thread-66876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:52:02.805 [DEBUG] [Thread-66876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:52:02.805 [DEBUG] [Thread-66876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] client lang: <none>
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] server lang: <none>
2025-12-12T09:52:02.806 [DEBUG] [Thread-66876] [transport.py] [_log()] kex follows: False
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] Compression: none
2025-12-12T09:52:02.807 [DEBUG] [Thread-66876] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:52:02.864 [DEBUG] [Thread-66876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:52:02.865 [DEBUG] [Thread-66876] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:52:02.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:52:02.866 [DEBUG] [Thread-66876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:52:02.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:52:02.921 [DEBUG] [Thread-66876] [transport.py] [_log()] userauth is OK
2025-12-12T09:52:02.921 [DEBUG] [Thread-66876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:52:02.921 [DEBUG] [Thread-66876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:52:02.922 [DEBUG] [Thread-66876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:52:02.922 [DEBUG] [Thread-66876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:52:02.940 [INFO] [Thread-66876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:52:02.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:52:02.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:52:03.789 [DEBUG] [Thread-66876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:52:03.789 [DEBUG] [Thread-66876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:52:03.837 [DEBUG] [Thread-66876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:52:03.837 [DEBUG] [Thread-66876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:52:03.846 [DEBUG] [Thread-66876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:52:03.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:52:03.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:52:03.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:52:03.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:52:03.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:52:03.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:52:03.883 [DEBUG] [Thread-66876] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:52:07.760 [DEBUG] [Thread-66878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:11.774 [DEBUG] [Thread-66879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:13.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:13.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:16.811 [DEBUG] [Thread-66880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:25.831 [DEBUG] [Thread-66881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:26.837 [DEBUG] [Thread-66882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:33.797 [DEBUG] [Thread-66883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:33.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:52:33.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:52:33.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:52:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 52, 25), 16.46, 31.8, 0.0, 31.56, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:52:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:52:25
2025-12-12T09:52:34.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:52:34.855 [DEBUG] [Thread-66884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:34.861 [DEBUG] [Thread-66885] [transport.py] [_log()] starting thread (client mode): 0xf571b430
2025-12-12T09:52:34.861 [DEBUG] [Thread-66885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:52:34.880 [DEBUG] [Thread-66885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:52:34.880 [INFO] [Thread-66885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:52:34.883 [DEBUG] [Thread-66885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:52:34.883 [DEBUG] [Thread-66885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] client lang: <none>
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] server lang: <none>
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] kex follows: False
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:52:34.884 [DEBUG] [Thread-66885] [transport.py] [_log()] Compression: none
2025-12-12T09:52:34.885 [DEBUG] [Thread-66885] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:52:34.900 [DEBUG] [Thread-66885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:52:34.901 [DEBUG] [Thread-66885] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:52:34.901 [DEBUG] [Thread-66885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:52:34.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:52:34.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:52:34.903 [DEBUG] [Thread-66885] [transport.py] [_log()] userauth is OK
2025-12-12T09:52:34.903 [DEBUG] [Thread-66885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:52:34.903 [DEBUG] [Thread-66885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:52:34.903 [DEBUG] [Thread-66885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:52:34.903 [DEBUG] [Thread-66885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:52:34.923 [INFO] [Thread-66885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:52:34.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:52:35.583 [DEBUG] [Thread-66885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:52:35.583 [DEBUG] [Thread-66885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:52:35.584 [DEBUG] [Thread-66885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:52:35.624 [DEBUG] [Thread-66885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:52:35.625 [DEBUG] [Thread-66885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:52:35.627 [DEBUG] [Thread-66885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:52:35.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:52:35.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:52:35.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:52:35.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:52:35.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:52:35.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:52:35.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:52:35.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:52:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:52:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.327818 -999.00  +13.80  34.34     38   +0.00 1 2 2 1 1   888    0 12.53 -86.96 ----- 31.4 34.3 358.9 41.1 16.6 -11.6 16.4 -12.0 16.2 -10.7 16.4 -10.7
2025-12-12T09:52:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:52:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:52:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.327818
2025-12-12T09:52:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:52:35.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:52:35.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:52:35.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:52:35.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:52:35.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:52:25', tmtdew=16.46, humidity=31.8, cloud=0.0, wind=31.56, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:52:03.475', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:52:35.654 [DEBUG] [Thread-66885] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:52:35.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:52:35.750 [DEBUG] [Thread-66888] [transport.py] [_log()] starting thread (client mode): 0xf572c250
2025-12-12T09:52:35.751 [DEBUG] [Thread-66888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:52:35.766 [DEBUG] [Thread-66888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:52:35.766 [INFO] [Thread-66888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:52:35.774 [DEBUG] [Thread-66888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:52:35.774 [DEBUG] [Thread-66888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:52:35.774 [DEBUG] [Thread-66888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:52:35.774 [DEBUG] [Thread-66888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:35.774 [DEBUG] [Thread-66888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] client lang: <none>
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] server lang: <none>
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] kex follows: False
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] Compression: none
2025-12-12T09:52:35.775 [DEBUG] [Thread-66888] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:52:35.831 [DEBUG] [Thread-66888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:52:35.832 [DEBUG] [Thread-66888] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:52:35.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:52:35.833 [DEBUG] [Thread-66888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:52:35.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:52:35.889 [DEBUG] [Thread-66888] [transport.py] [_log()] userauth is OK
2025-12-12T09:52:35.889 [DEBUG] [Thread-66888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:52:35.889 [DEBUG] [Thread-66888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:52:35.890 [DEBUG] [Thread-66888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:52:35.890 [DEBUG] [Thread-66888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:52:35.909 [INFO] [Thread-66888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:52:35.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:52:35.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:52:36.776 [DEBUG] [Thread-66888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:52:36.776 [DEBUG] [Thread-66888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:52:36.824 [DEBUG] [Thread-66888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:52:36.824 [DEBUG] [Thread-66888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:52:36.833 [DEBUG] [Thread-66888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:52:36.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:52:36.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:52:36.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:52:36.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:52:36.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:52:36.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:52:36.870 [DEBUG] [Thread-66888] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:52:41.874 [DEBUG] [Thread-66890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:43.906 [DEBUG] [Thread-66891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:52.928 [DEBUG] [Thread-66892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:52:56.943 [DEBUG] [Thread-66893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:01.959 [DEBUG] [Thread-66894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:53:06.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:53:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:53:07.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 52, 57), 16.39, 32.23, 0.0, 33.31, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:53:07.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:52:57
2025-12-12T09:53:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:53:07.847 [DEBUG] [Thread-66895] [transport.py] [_log()] starting thread (client mode): 0xf57bc2b0
2025-12-12T09:53:07.847 [DEBUG] [Thread-66895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:53:07.867 [DEBUG] [Thread-66895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:53:07.867 [INFO] [Thread-66895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:53:07.870 [DEBUG] [Thread-66895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:53:07.870 [DEBUG] [Thread-66895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:53:07.870 [DEBUG] [Thread-66895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:53:07.870 [DEBUG] [Thread-66895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:07.870 [DEBUG] [Thread-66895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:07.870 [DEBUG] [Thread-66895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] client lang: <none>
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] server lang: <none>
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] kex follows: False
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] Compression: none
2025-12-12T09:53:07.871 [DEBUG] [Thread-66895] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:53:07.888 [DEBUG] [Thread-66895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:53:07.888 [DEBUG] [Thread-66895] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:53:07.888 [DEBUG] [Thread-66895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:53:07.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:53:07.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:53:07.889 [DEBUG] [Thread-66895] [transport.py] [_log()] userauth is OK
2025-12-12T09:53:07.889 [DEBUG] [Thread-66895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:53:07.889 [DEBUG] [Thread-66895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:53:07.889 [DEBUG] [Thread-66895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:53:07.889 [DEBUG] [Thread-66895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:53:07.899 [INFO] [Thread-66895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:53:07.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:53:08.538 [DEBUG] [Thread-66895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:53:08.539 [DEBUG] [Thread-66895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:53:08.539 [DEBUG] [Thread-66895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:53:08.579 [DEBUG] [Thread-66895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:53:08.580 [DEBUG] [Thread-66895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:53:08.583 [DEBUG] [Thread-66895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:53:08.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:53:08.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:53:08.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:53:08.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:53:08.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:53:08.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:53:08.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:53:08.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:53:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:53:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.328223 -999.00  +13.80  33.28     38   +0.00 1 2 2 1 1   888    0 12.16 -95.01 ----- 33.3 33.3 341.9 40.2 16.6 -11.6 16.4 -11.6 16.2 -10.5 16.4 -11.4
2025-12-12T09:53:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:53:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:53:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.328223
2025-12-12T09:53:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:53:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:53:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:53:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:53:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:53:08.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:52:57', tmtdew=16.39, humidity=32.23, cloud=0.0, wind=33.31, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:52:38.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:53:08.608 [DEBUG] [Thread-66895] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:53:08.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:53:08.700 [DEBUG] [Thread-66898] [transport.py] [_log()] starting thread (client mode): 0xf81559f0
2025-12-12T09:53:08.700 [DEBUG] [Thread-66898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:53:08.715 [DEBUG] [Thread-66898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:53:08.715 [INFO] [Thread-66898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:53:08.723 [DEBUG] [Thread-66898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:53:08.723 [DEBUG] [Thread-66898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:53:08.723 [DEBUG] [Thread-66898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:53:08.723 [DEBUG] [Thread-66898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] client lang: <none>
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] server lang: <none>
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] kex follows: False
2025-12-12T09:53:08.724 [DEBUG] [Thread-66898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:53:08.725 [DEBUG] [Thread-66898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:53:08.725 [DEBUG] [Thread-66898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:53:08.725 [DEBUG] [Thread-66898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:53:08.725 [DEBUG] [Thread-66898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:53:08.725 [DEBUG] [Thread-66898] [transport.py] [_log()] Compression: none
2025-12-12T09:53:08.725 [DEBUG] [Thread-66898] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:53:08.784 [DEBUG] [Thread-66898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:53:08.785 [DEBUG] [Thread-66898] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:53:08.786 [DEBUG] [Thread-66898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:53:08.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:53:08.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:53:08.844 [DEBUG] [Thread-66898] [transport.py] [_log()] userauth is OK
2025-12-12T09:53:08.845 [DEBUG] [Thread-66898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:53:08.845 [DEBUG] [Thread-66898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:53:08.845 [DEBUG] [Thread-66898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:53:08.845 [DEBUG] [Thread-66898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:53:08.865 [INFO] [Thread-66898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:53:08.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:53:08.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:53:09.740 [DEBUG] [Thread-66898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:53:09.740 [DEBUG] [Thread-66898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:53:09.788 [DEBUG] [Thread-66898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:53:09.788 [DEBUG] [Thread-66898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:53:09.797 [DEBUG] [Thread-66898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:53:09.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:53:09.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:53:09.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:53:09.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:53:09.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:53:09.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:53:09.832 [DEBUG] [Thread-66898] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:53:10.976 [DEBUG] [Thread-66900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:11.983 [DEBUG] [Thread-66901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:13.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:13.553 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:20.020 [DEBUG] [Thread-66902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:27.041 [DEBUG] [Thread-66903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:29.056 [DEBUG] [Thread-66904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:33.848 [DEBUG] [Thread-66905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:38.075 [DEBUG] [Thread-66906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:53:39.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:53:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:53:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 53, 29), 16.44, 32.1, 0.0, 30.54, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:53:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:53:29
2025-12-12T09:53:40.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:53:40.862 [DEBUG] [Thread-66907] [transport.py] [_log()] starting thread (client mode): 0xf2d0e830
2025-12-12T09:53:40.862 [DEBUG] [Thread-66907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:53:40.878 [DEBUG] [Thread-66907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:53:40.878 [INFO] [Thread-66907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] client lang: <none>
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] server lang: <none>
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] kex follows: False
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] Compression: none
2025-12-12T09:53:40.881 [DEBUG] [Thread-66907] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:53:40.898 [DEBUG] [Thread-66907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:53:40.898 [DEBUG] [Thread-66907] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:53:40.898 [DEBUG] [Thread-66907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:53:40.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:53:40.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:53:40.898 [DEBUG] [Thread-66907] [transport.py] [_log()] userauth is OK
2025-12-12T09:53:40.898 [DEBUG] [Thread-66907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:53:40.898 [DEBUG] [Thread-66907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:53:40.899 [DEBUG] [Thread-66907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:53:40.899 [DEBUG] [Thread-66907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:53:40.908 [INFO] [Thread-66907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:53:40.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:53:41.538 [DEBUG] [Thread-66907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:53:41.538 [DEBUG] [Thread-66907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:53:41.538 [DEBUG] [Thread-66907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:53:41.578 [DEBUG] [Thread-66907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:53:41.578 [DEBUG] [Thread-66907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:53:41.580 [DEBUG] [Thread-66907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:53:41.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:53:41.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:53:41.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:53:41.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:53:41.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:53:41.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:53:41.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:53:41.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:53:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:53:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.328570 -999.00  +14.00  22.13     38   +0.20 1 2 1 1 1   888    0 11.77 -98.13 ----- 21.3 22.1 353.6 40.2 16.8 -11.5 16.5 -11.2 16.3 -10.9 16.5 -10.6
2025-12-12T09:53:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:53:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:53:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.328570
2025-12-12T09:53:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:53:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:53:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:53:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:53:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:53:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:53:29', tmtdew=16.44, humidity=32.1, cloud=0.0, wind=30.54, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:53:08.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:53:41.600 [DEBUG] [Thread-66907] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:53:41.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:53:41.685 [DEBUG] [Thread-66910] [transport.py] [_log()] starting thread (client mode): 0xf578b280
2025-12-12T09:53:41.686 [DEBUG] [Thread-66910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:53:41.700 [DEBUG] [Thread-66910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:53:41.700 [INFO] [Thread-66910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] client lang: <none>
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] server lang: <none>
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] kex follows: False
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] Compression: none
2025-12-12T09:53:41.708 [DEBUG] [Thread-66910] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:53:41.766 [DEBUG] [Thread-66910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:53:41.766 [DEBUG] [Thread-66910] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:53:41.766 [DEBUG] [Thread-66910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:53:41.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:53:41.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:53:41.822 [DEBUG] [Thread-66910] [transport.py] [_log()] userauth is OK
2025-12-12T09:53:41.822 [DEBUG] [Thread-66910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:53:41.822 [DEBUG] [Thread-66910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:53:41.822 [DEBUG] [Thread-66910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:53:41.822 [DEBUG] [Thread-66910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:53:41.835 [INFO] [Thread-66910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:53:41.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:53:41.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:53:42.084 [DEBUG] [Thread-66912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:42.705 [DEBUG] [Thread-66910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:53:42.705 [DEBUG] [Thread-66910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:53:42.752 [DEBUG] [Thread-66910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:53:42.752 [DEBUG] [Thread-66910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:53:42.761 [DEBUG] [Thread-66910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:53:42.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:53:42.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:53:42.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:53:42.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:53:42.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:53:42.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:53:42.801 [DEBUG] [Thread-66910] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:53:47.107 [DEBUG] [Thread-66913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:56.130 [DEBUG] [Thread-66914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:53:57.140 [DEBUG] [Thread-66915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:05.165 [DEBUG] [Thread-66916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:12.185 [DEBUG] [Thread-66917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:54:12.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:54:12.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:54:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 54, 1), 16.39, 32.23, 0.0, 34.9, 14.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:54:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:54:01
2025-12-12T09:54:13.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:54:13.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:13.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:13.789 [DEBUG] [Thread-66918] [transport.py] [_log()] starting thread (client mode): 0xf571b130
2025-12-12T09:54:13.790 [DEBUG] [Thread-66918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:54:13.811 [DEBUG] [Thread-66918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:54:13.811 [INFO] [Thread-66918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] client lang: <none>
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] server lang: <none>
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] kex follows: False
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] Compression: none
2025-12-12T09:54:13.814 [DEBUG] [Thread-66918] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:54:13.831 [DEBUG] [Thread-66918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:54:13.832 [DEBUG] [Thread-66918] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:54:13.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:54:13.833 [DEBUG] [Thread-66918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:54:13.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:54:13.835 [DEBUG] [Thread-66918] [transport.py] [_log()] userauth is OK
2025-12-12T09:54:13.835 [DEBUG] [Thread-66918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:54:13.835 [DEBUG] [Thread-66918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:54:13.835 [DEBUG] [Thread-66918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:54:13.835 [DEBUG] [Thread-66918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:54:13.852 [INFO] [Thread-66918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:54:13.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:54:14.201 [DEBUG] [Thread-66920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:14.535 [DEBUG] [Thread-66918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:54:14.535 [DEBUG] [Thread-66918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:54:14.536 [DEBUG] [Thread-66918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:54:14.576 [DEBUG] [Thread-66918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:54:14.576 [DEBUG] [Thread-66918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:54:14.579 [DEBUG] [Thread-66918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:54:14.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:54:14.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:54:14.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:54:14.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:54:14.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:54:14.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:54:14.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:54:14.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:54:14.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:54:14.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.328917 -999.00  +14.20  22.78     37   +0.00 1 2 1 1 1   888    0 11.44 -102.88 ----- 21.1 22.8 346.7 33.8 16.8 -11.3 16.6 -11.5 16.4 -10.4 16.6 -10.7
2025-12-12T09:54:14.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:54:14.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:54:14.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.328917
2025-12-12T09:54:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:54:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:54:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:54:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:54:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:54:14.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:54:01', tmtdew=16.39, humidity=32.23, cloud=0.0, wind=34.9, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:53:38.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:54:14.603 [DEBUG] [Thread-66918] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:54:14.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:54:14.695 [DEBUG] [Thread-66922] [transport.py] [_log()] starting thread (client mode): 0xf57b5870
2025-12-12T09:54:14.695 [DEBUG] [Thread-66922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:54:14.709 [DEBUG] [Thread-66922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:54:14.709 [INFO] [Thread-66922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] client lang: <none>
2025-12-12T09:54:14.717 [DEBUG] [Thread-66922] [transport.py] [_log()] server lang: <none>
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] kex follows: False
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] Compression: none
2025-12-12T09:54:14.718 [DEBUG] [Thread-66922] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:54:14.782 [DEBUG] [Thread-66922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:54:14.783 [DEBUG] [Thread-66922] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:54:14.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:54:14.784 [DEBUG] [Thread-66922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:54:14.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:54:14.846 [DEBUG] [Thread-66922] [transport.py] [_log()] userauth is OK
2025-12-12T09:54:14.846 [DEBUG] [Thread-66922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:54:14.846 [DEBUG] [Thread-66922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:54:14.846 [DEBUG] [Thread-66922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:54:14.846 [DEBUG] [Thread-66922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:54:14.866 [INFO] [Thread-66922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:54:14.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:54:14.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:54:15.692 [DEBUG] [Thread-66922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:54:15.692 [DEBUG] [Thread-66922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:54:15.744 [DEBUG] [Thread-66922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:54:15.744 [DEBUG] [Thread-66922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:54:15.754 [DEBUG] [Thread-66922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:54:15.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:54:15.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:54:15.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:54:15.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:54:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:54:15.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:54:15.795 [DEBUG] [Thread-66922] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:54:23.221 [DEBUG] [Thread-66924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:27.235 [DEBUG] [Thread-66925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:32.269 [DEBUG] [Thread-66926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:33.897 [DEBUG] [Thread-66927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:41.296 [DEBUG] [Thread-66928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:42.305 [DEBUG] [Thread-66929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:45.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:54:45.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:54:45.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:54:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 54, 33), 16.65, 31.79, 0.0, 46.29, 15.04, 0, 0, 0, 2, 1, 0),)
2025-12-12T09:54:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:54:33
2025-12-12T09:54:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:54:46.775 [DEBUG] [Thread-66930] [transport.py] [_log()] starting thread (client mode): 0xf81c1810
2025-12-12T09:54:46.775 [DEBUG] [Thread-66930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:54:46.798 [DEBUG] [Thread-66930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:54:46.799 [INFO] [Thread-66930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:54:46.802 [DEBUG] [Thread-66930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:54:46.803 [DEBUG] [Thread-66930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] client lang: <none>
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] server lang: <none>
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] kex follows: False
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] Compression: none
2025-12-12T09:54:46.804 [DEBUG] [Thread-66930] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:54:46.821 [DEBUG] [Thread-66930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:54:46.822 [DEBUG] [Thread-66930] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:54:46.822 [DEBUG] [Thread-66930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:54:46.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:54:46.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:54:46.865 [DEBUG] [Thread-66930] [transport.py] [_log()] userauth is OK
2025-12-12T09:54:46.865 [DEBUG] [Thread-66930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:54:46.865 [DEBUG] [Thread-66930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:54:46.865 [DEBUG] [Thread-66930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:54:46.866 [DEBUG] [Thread-66930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:54:46.889 [INFO] [Thread-66930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:54:46.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:54:47.530 [DEBUG] [Thread-66930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:54:47.530 [DEBUG] [Thread-66930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:54:47.530 [DEBUG] [Thread-66930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:54:47.571 [DEBUG] [Thread-66930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:54:47.571 [DEBUG] [Thread-66930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:54:47.574 [DEBUG] [Thread-66930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:54:47.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:54:47.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:54:47.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:54:47.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:54:47.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:54:47.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:54:47.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:54:47.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:54:47.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:54:47.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.329264 -999.00  +14.10  34.15     37   -0.10 1 2 2 1 1   888    0 11.86 -107.84 ----- 26.9 34.1 359.8 47.2 16.8 -12.5 16.6 -12.7 16.4 -11.1 16.7 -11.9
2025-12-12T09:54:47.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:54:47.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:54:47.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.329264
2025-12-12T09:54:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:54:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:54:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:54:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:54:47.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:54:47.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:54:33', tmtdew=16.65, humidity=31.79, cloud=0.0, wind=46.29, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:54:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:54:47.598 [DEBUG] [Thread-66930] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:54:47.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:54:47.703 [DEBUG] [Thread-66933] [transport.py] [_log()] starting thread (client mode): 0xf572f4c0
2025-12-12T09:54:47.703 [DEBUG] [Thread-66933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:54:47.718 [DEBUG] [Thread-66933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:54:47.718 [INFO] [Thread-66933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:54:47.725 [DEBUG] [Thread-66933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] client lang: <none>
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] server lang: <none>
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] kex follows: False
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:54:47.726 [DEBUG] [Thread-66933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:54:47.727 [DEBUG] [Thread-66933] [transport.py] [_log()] Compression: none
2025-12-12T09:54:47.727 [DEBUG] [Thread-66933] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:54:47.785 [DEBUG] [Thread-66933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:54:47.786 [DEBUG] [Thread-66933] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:54:47.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:54:47.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:54:47.788 [DEBUG] [Thread-66933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:54:47.841 [DEBUG] [Thread-66933] [transport.py] [_log()] userauth is OK
2025-12-12T09:54:47.841 [DEBUG] [Thread-66933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:54:47.841 [DEBUG] [Thread-66933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:54:47.841 [DEBUG] [Thread-66933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:54:47.841 [DEBUG] [Thread-66933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:54:47.860 [INFO] [Thread-66933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:54:47.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:54:47.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:54:48.732 [DEBUG] [Thread-66933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:54:48.732 [DEBUG] [Thread-66933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:54:48.780 [DEBUG] [Thread-66933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:54:48.780 [DEBUG] [Thread-66933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:54:48.790 [DEBUG] [Thread-66933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:54:48.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:54:48.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:54:48.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:54:48.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:54:48.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:54:48.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:54:48.826 [DEBUG] [Thread-66933] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:54:50.330 [DEBUG] [Thread-66935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:57.347 [DEBUG] [Thread-66936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:54:59.361 [DEBUG] [Thread-66937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:08.381 [DEBUG] [Thread-66938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:12.396 [DEBUG] [Thread-66939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:13.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:13.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:17.413 [DEBUG] [Thread-66940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:18.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:55:18.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:55:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:55:19.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 55, 5), 16.37, 32.11, 0.0, 41.41, 14.47, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:55:19.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:55:05
2025-12-12T09:55:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:55:19.822 [DEBUG] [Thread-66941] [transport.py] [_log()] starting thread (client mode): 0xf571bb50
2025-12-12T09:55:19.822 [DEBUG] [Thread-66941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:55:19.842 [DEBUG] [Thread-66941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:55:19.842 [INFO] [Thread-66941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:55:19.845 [DEBUG] [Thread-66941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] client lang: <none>
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] server lang: <none>
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] kex follows: False
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] Compression: none
2025-12-12T09:55:19.846 [DEBUG] [Thread-66941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:55:19.863 [DEBUG] [Thread-66941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:55:19.864 [DEBUG] [Thread-66941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:55:19.864 [DEBUG] [Thread-66941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:55:19.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:55:19.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:55:19.866 [DEBUG] [Thread-66941] [transport.py] [_log()] userauth is OK
2025-12-12T09:55:19.866 [DEBUG] [Thread-66941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:55:19.866 [DEBUG] [Thread-66941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:55:19.866 [DEBUG] [Thread-66941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:55:19.866 [DEBUG] [Thread-66941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:55:19.889 [INFO] [Thread-66941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:55:19.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:55:20.539 [DEBUG] [Thread-66941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:55:20.539 [DEBUG] [Thread-66941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:55:20.539 [DEBUG] [Thread-66941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:55:20.579 [DEBUG] [Thread-66941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:55:20.580 [DEBUG] [Thread-66941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:55:20.582 [DEBUG] [Thread-66941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:55:20.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:55:20.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:55:20.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:55:20.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:55:20.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:55:20.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:55:20.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:55:20.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.329612 -999.00  +14.00  32.55     38   +0.10 1 2 2 1 1   888    0 11.76 -100.56 ----- 25.4 32.5 351.5 40.6 16.8 -12.5 16.5 -11.9 16.4 -11.5 16.5 -12.9
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.329612
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:55:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:55:05', tmtdew=16.37, humidity=32.11, cloud=0.0, wind=41.41, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:54:38.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:55:20.603 [DEBUG] [Thread-66941] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:55:20.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:55:20.737 [DEBUG] [Thread-66944] [transport.py] [_log()] starting thread (client mode): 0xf2d0cf40
2025-12-12T09:55:20.737 [DEBUG] [Thread-66944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:55:20.751 [DEBUG] [Thread-66944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:55:20.751 [INFO] [Thread-66944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:55:20.759 [DEBUG] [Thread-66944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:55:20.759 [DEBUG] [Thread-66944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:55:20.759 [DEBUG] [Thread-66944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:55:20.759 [DEBUG] [Thread-66944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] client lang: <none>
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] server lang: <none>
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] kex follows: False
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] Compression: none
2025-12-12T09:55:20.760 [DEBUG] [Thread-66944] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:55:20.816 [DEBUG] [Thread-66944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:55:20.816 [DEBUG] [Thread-66944] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:55:20.817 [DEBUG] [Thread-66944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:55:20.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:55:20.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:55:20.871 [DEBUG] [Thread-66944] [transport.py] [_log()] userauth is OK
2025-12-12T09:55:20.872 [DEBUG] [Thread-66944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:55:20.872 [DEBUG] [Thread-66944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:55:20.872 [DEBUG] [Thread-66944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:55:20.872 [DEBUG] [Thread-66944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:55:20.893 [INFO] [Thread-66944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:55:20.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:55:20.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:55:21.695 [DEBUG] [Thread-66944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:55:21.695 [DEBUG] [Thread-66944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:55:21.743 [DEBUG] [Thread-66944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:55:21.743 [DEBUG] [Thread-66944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:55:21.752 [DEBUG] [Thread-66944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:55:21.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:55:21.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:55:21.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:55:21.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:55:21.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:55:21.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:55:21.786 [DEBUG] [Thread-66944] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:55:26.432 [DEBUG] [Thread-66946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:27.439 [DEBUG] [Thread-66947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:33.942 [DEBUG] [Thread-66948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:35.471 [DEBUG] [Thread-66949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:42.487 [DEBUG] [Thread-66950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:44.500 [DEBUG] [Thread-66951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:51.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:55:51.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:55:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:55:52.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 55, 37), 16.2, 32.66, 0.0, 45.93, 14.59, 0, 0, 0, 2, 1, 0),)
2025-12-12T09:55:52.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:55:37
2025-12-12T09:55:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:55:52.750 [DEBUG] [Thread-66952] [transport.py] [_log()] starting thread (client mode): 0xf2d0fd00
2025-12-12T09:55:52.750 [DEBUG] [Thread-66952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:55:52.770 [DEBUG] [Thread-66952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:55:52.770 [INFO] [Thread-66952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:52.773 [DEBUG] [Thread-66952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] client lang: <none>
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] server lang: <none>
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] kex follows: False
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] Compression: none
2025-12-12T09:55:52.774 [DEBUG] [Thread-66952] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:55:52.791 [DEBUG] [Thread-66952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:55:52.792 [DEBUG] [Thread-66952] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:55:52.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:55:52.792 [DEBUG] [Thread-66952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:55:52.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:55:52.794 [DEBUG] [Thread-66952] [transport.py] [_log()] userauth is OK
2025-12-12T09:55:52.794 [DEBUG] [Thread-66952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:55:52.795 [DEBUG] [Thread-66952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:55:52.795 [DEBUG] [Thread-66952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:55:52.795 [DEBUG] [Thread-66952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:55:52.830 [INFO] [Thread-66952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:55:52.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:55:53.462 [DEBUG] [Thread-66952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:55:53.462 [DEBUG] [Thread-66952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:55:53.463 [DEBUG] [Thread-66952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:55:53.503 [DEBUG] [Thread-66952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:55:53.503 [DEBUG] [Thread-66952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:55:53.507 [DEBUG] [Thread-66952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:55:53.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:55:53.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:55:53.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:55:53.524 [DEBUG] [Thread-66954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:55:53.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:55:53.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:55:53.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:55:53.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:55:53.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:55:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:55:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.330306 -999.00  +14.00  31.99     38   +0.20 1 2 2 1 1   888    0 11.47 -112.60 ----- 32.0 32.0 354.8 42.7 16.8 -12.0 16.5 -12.2 16.3 -10.9 16.5 -11.6
2025-12-12T09:55:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:55:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:55:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.330306
2025-12-12T09:55:53.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:55:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:55:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:55:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:55:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:55:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:55:37', tmtdew=16.2, humidity=32.66, cloud=0.0, wind=45.93, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:55:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:55:53.534 [DEBUG] [Thread-66952] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:55:53.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:55:53.630 [DEBUG] [Thread-66956] [transport.py] [_log()] starting thread (client mode): 0xf2d0c8b0
2025-12-12T09:55:53.630 [DEBUG] [Thread-66956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:55:53.646 [DEBUG] [Thread-66956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:55:53.646 [INFO] [Thread-66956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] client lang: <none>
2025-12-12T09:55:53.659 [DEBUG] [Thread-66956] [transport.py] [_log()] server lang: <none>
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] kex follows: False
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] Compression: none
2025-12-12T09:55:53.660 [DEBUG] [Thread-66956] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:55:53.716 [DEBUG] [Thread-66956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:55:53.717 [DEBUG] [Thread-66956] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:55:53.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:55:53.718 [DEBUG] [Thread-66956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:55:53.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:55:53.775 [DEBUG] [Thread-66956] [transport.py] [_log()] userauth is OK
2025-12-12T09:55:53.775 [DEBUG] [Thread-66956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:55:53.775 [DEBUG] [Thread-66956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:55:53.775 [DEBUG] [Thread-66956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:55:53.775 [DEBUG] [Thread-66956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:55:53.793 [INFO] [Thread-66956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:55:53.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:55:53.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:55:54.628 [DEBUG] [Thread-66956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:55:54.628 [DEBUG] [Thread-66956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:55:54.676 [DEBUG] [Thread-66956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:55:54.676 [DEBUG] [Thread-66956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:55:54.685 [DEBUG] [Thread-66956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:55:54.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:55:54.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:55:54.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:55:54.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:55:54.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:55:54.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:55:54.722 [DEBUG] [Thread-66956] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:55:57.538 [DEBUG] [Thread-66958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:02.577 [DEBUG] [Thread-66959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:11.601 [DEBUG] [Thread-66960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:12.605 [DEBUG] [Thread-66961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:13.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:13.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:20.624 [DEBUG] [Thread-66962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:24.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:56:24.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:56:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:56:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 56, 9), 16.16, 32.78, 0.0, 42.24, 14.64, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:56:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:56:09
2025-12-12T09:56:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:56:25.712 [DEBUG] [Thread-66963] [transport.py] [_log()] starting thread (client mode): 0xf572dcc0
2025-12-12T09:56:25.712 [DEBUG] [Thread-66963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:56:25.733 [DEBUG] [Thread-66963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:56:25.733 [INFO] [Thread-66963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:56:25.736 [DEBUG] [Thread-66963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:56:25.736 [DEBUG] [Thread-66963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] client lang: <none>
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] server lang: <none>
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] kex follows: False
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:56:25.737 [DEBUG] [Thread-66963] [transport.py] [_log()] Compression: none
2025-12-12T09:56:25.738 [DEBUG] [Thread-66963] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:56:25.756 [DEBUG] [Thread-66963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:56:25.757 [DEBUG] [Thread-66963] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:56:25.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:56:25.758 [DEBUG] [Thread-66963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:56:25.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:56:25.760 [DEBUG] [Thread-66963] [transport.py] [_log()] userauth is OK
2025-12-12T09:56:25.761 [DEBUG] [Thread-66963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:56:25.761 [DEBUG] [Thread-66963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:56:25.761 [DEBUG] [Thread-66963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:56:25.761 [DEBUG] [Thread-66963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:56:25.785 [INFO] [Thread-66963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:56:25.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:56:26.431 [DEBUG] [Thread-66963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:56:26.431 [DEBUG] [Thread-66963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:56:26.432 [DEBUG] [Thread-66963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:56:26.472 [DEBUG] [Thread-66963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:56:26.472 [DEBUG] [Thread-66963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:56:26.475 [DEBUG] [Thread-66963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:56:26.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:56:26.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:56:26.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:56:26.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:56:26.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:56:26.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:56:26.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:56:26.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:56:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:56:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.330653 -999.00  +14.10  22.43     39   +0.40 1 2 1 1 1   888    0 11.39 -121.32 ----- 22.4 22.4 337.9 31.3 16.7 -11.8 16.5 -11.7 16.3 -10.8 16.4 -11.8
2025-12-12T09:56:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:56:26.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:56:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.330653
2025-12-12T09:56:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:56:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:56:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:56:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:56:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:56:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:56:09', tmtdew=16.16, humidity=32.78, cloud=0.0, wind=42.24, temperature=14.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:56:08.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:56:26.501 [DEBUG] [Thread-66963] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:56:26.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:56:26.607 [DEBUG] [Thread-66966] [transport.py] [_log()] starting thread (client mode): 0xf2d0f820
2025-12-12T09:56:26.607 [DEBUG] [Thread-66966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:56:26.621 [DEBUG] [Thread-66966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:56:26.621 [INFO] [Thread-66966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:56:26.628 [DEBUG] [Thread-66966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] client lang: <none>
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] server lang: <none>
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] kex follows: False
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] Compression: none
2025-12-12T09:56:26.629 [DEBUG] [Thread-66966] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:56:26.687 [DEBUG] [Thread-66966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:56:26.688 [DEBUG] [Thread-66966] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:56:26.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:56:26.689 [DEBUG] [Thread-66966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:56:26.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:56:26.747 [DEBUG] [Thread-66966] [transport.py] [_log()] userauth is OK
2025-12-12T09:56:26.747 [DEBUG] [Thread-66966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:56:26.747 [DEBUG] [Thread-66966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:56:26.747 [DEBUG] [Thread-66966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:56:26.747 [DEBUG] [Thread-66966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:56:26.765 [INFO] [Thread-66966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:56:26.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:56:26.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:56:27.605 [DEBUG] [Thread-66966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:56:27.605 [DEBUG] [Thread-66966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:56:27.642 [DEBUG] [Thread-66968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:27.654 [DEBUG] [Thread-66966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:56:27.654 [DEBUG] [Thread-66966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:56:27.663 [DEBUG] [Thread-66966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:56:27.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:56:27.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:56:27.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:56:27.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:56:27.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:56:27.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:56:27.698 [DEBUG] [Thread-66966] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:56:29.669 [DEBUG] [Thread-66969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:33.992 [DEBUG] [Thread-66970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:38.696 [DEBUG] [Thread-66971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:42.708 [DEBUG] [Thread-66972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:47.722 [DEBUG] [Thread-66973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:56.743 [DEBUG] [Thread-66974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:57.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:56:57.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:56:57.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:56:57.747 [DEBUG] [Thread-66975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:56:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 56, 41), 16.03, 33.34, 0.0, 30.91, 14.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:56:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:56:41
2025-12-12T09:56:58.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:56:58.661 [DEBUG] [Thread-66976] [transport.py] [_log()] starting thread (client mode): 0xf2d0f070
2025-12-12T09:56:58.661 [DEBUG] [Thread-66976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:56:58.681 [DEBUG] [Thread-66976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:56:58.682 [INFO] [Thread-66976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:56:58.684 [DEBUG] [Thread-66976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] client lang: <none>
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] server lang: <none>
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] kex follows: False
2025-12-12T09:56:58.685 [DEBUG] [Thread-66976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:56:58.686 [DEBUG] [Thread-66976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:56:58.686 [DEBUG] [Thread-66976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:56:58.686 [DEBUG] [Thread-66976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:56:58.686 [DEBUG] [Thread-66976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:56:58.686 [DEBUG] [Thread-66976] [transport.py] [_log()] Compression: none
2025-12-12T09:56:58.686 [DEBUG] [Thread-66976] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:56:58.706 [DEBUG] [Thread-66976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:56:58.706 [DEBUG] [Thread-66976] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:56:58.707 [DEBUG] [Thread-66976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:56:58.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:56:58.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:56:58.709 [DEBUG] [Thread-66976] [transport.py] [_log()] userauth is OK
2025-12-12T09:56:58.709 [DEBUG] [Thread-66976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:56:58.709 [DEBUG] [Thread-66976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:56:58.709 [DEBUG] [Thread-66976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:56:58.709 [DEBUG] [Thread-66976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:56:58.734 [INFO] [Thread-66976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:56:58.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:56:59.372 [DEBUG] [Thread-66976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:56:59.372 [DEBUG] [Thread-66976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:56:59.373 [DEBUG] [Thread-66976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:56:59.413 [DEBUG] [Thread-66976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:56:59.414 [DEBUG] [Thread-66976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:56:59.417 [DEBUG] [Thread-66976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:56:59.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:56:59.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:56:59.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:56:59.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:56:59.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:56:59.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:56:59.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:56:59.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:56:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:56:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.331000 -999.00  +14.10  35.17     39   +0.30 1 2 2 1 1   888    0 11.25 -114.21 ----- 29.3 35.2 350.9 38.8 16.8 -12.2 16.4 -12.4 16.3 -11.1 16.5 -12.7
2025-12-12T09:56:59.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:56:59.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:56:59.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.331000
2025-12-12T09:56:59.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:56:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:56:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:56:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:56:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:56:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:56:41', tmtdew=16.03, humidity=33.34, cloud=0.0, wind=30.91, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:56:38.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:56:59.444 [DEBUG] [Thread-66976] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:56:59.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:56:59.553 [DEBUG] [Thread-66979] [transport.py] [_log()] starting thread (client mode): 0xf572d210
2025-12-12T09:56:59.553 [DEBUG] [Thread-66979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:56:59.570 [DEBUG] [Thread-66979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:56:59.570 [INFO] [Thread-66979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:56:59.581 [DEBUG] [Thread-66979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:56:59.581 [DEBUG] [Thread-66979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:56:59.581 [DEBUG] [Thread-66979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:56:59.581 [DEBUG] [Thread-66979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:59.581 [DEBUG] [Thread-66979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] client lang: <none>
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] server lang: <none>
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] kex follows: False
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] Compression: none
2025-12-12T09:56:59.582 [DEBUG] [Thread-66979] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:56:59.638 [DEBUG] [Thread-66979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:56:59.638 [DEBUG] [Thread-66979] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:56:59.639 [DEBUG] [Thread-66979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:56:59.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:56:59.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:56:59.694 [DEBUG] [Thread-66979] [transport.py] [_log()] userauth is OK
2025-12-12T09:56:59.694 [DEBUG] [Thread-66979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:56:59.695 [DEBUG] [Thread-66979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:56:59.695 [DEBUG] [Thread-66979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:56:59.695 [DEBUG] [Thread-66979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:56:59.714 [INFO] [Thread-66979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:56:59.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:56:59.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:57:00.525 [DEBUG] [Thread-66979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:57:00.525 [DEBUG] [Thread-66979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:57:00.573 [DEBUG] [Thread-66979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:57:00.573 [DEBUG] [Thread-66979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:57:00.582 [DEBUG] [Thread-66979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:57:00.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:57:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:57: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
2025-12-12T09:57:00.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:57:00.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:57:00.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:57:00.617 [DEBUG] [Thread-66979] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:57:05.766 [DEBUG] [Thread-66981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:12.785 [DEBUG] [Thread-66982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:14.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:14.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:14.807 [DEBUG] [Thread-66983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:23.830 [DEBUG] [Thread-66984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:27.843 [DEBUG] [Thread-66985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:30.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:57:30.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:57:30.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:57:31.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 57, 13), 16.09, 33.23, 0.0, 31.83, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:57:31.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:57:13
2025-12-12T09:57:31.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:57:31.652 [DEBUG] [Thread-66986] [transport.py] [_log()] starting thread (client mode): 0xf572f220
2025-12-12T09:57:31.652 [DEBUG] [Thread-66986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:57:31.672 [DEBUG] [Thread-66986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:57:31.672 [INFO] [Thread-66986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:57:31.675 [DEBUG] [Thread-66986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] client lang: <none>
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] server lang: <none>
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] kex follows: False
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] Compression: none
2025-12-12T09:57:31.676 [DEBUG] [Thread-66986] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:57:31.693 [DEBUG] [Thread-66986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:57:31.693 [DEBUG] [Thread-66986] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:57:31.694 [DEBUG] [Thread-66986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:57:31.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:57:31.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:57:31.694 [DEBUG] [Thread-66986] [transport.py] [_log()] userauth is OK
2025-12-12T09:57:31.694 [DEBUG] [Thread-66986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:57:31.694 [DEBUG] [Thread-66986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:57:31.694 [DEBUG] [Thread-66986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:57:31.694 [DEBUG] [Thread-66986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:57:31.707 [INFO] [Thread-66986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:57:31.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:57:32.806 [DEBUG] [Thread-66986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:57:32.806 [DEBUG] [Thread-66986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:57:32.806 [DEBUG] [Thread-66986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:57:32.847 [DEBUG] [Thread-66986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:57:32.847 [DEBUG] [Thread-66986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:57:32.849 [DEBUG] [Thread-66986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:57:32.858 [DEBUG] [Thread-66988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:32.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:57:32.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:57:32.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:57:32.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:57:32.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:57:32.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:57:32.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:57:32.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:57:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:57:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.331348 -999.00  +14.00  28.21     39   +0.50 1 2 1 1 1   888    0 11.20 -117.68 ----- 28.2 28.2 337.3 42.9 16.8 -11.8 16.5 -12.4 16.2 -10.7 16.4 -10.7
2025-12-12T09:57:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:57:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:57:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.331348
2025-12-12T09:57:32.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:57:32.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:57:32.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:57:32.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:57:32.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:57:32.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:57:13', tmtdew=16.09, humidity=33.23, cloud=0.0, wind=31.83, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:57:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:57:32.870 [DEBUG] [Thread-66986] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:57:32.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:57:32.965 [DEBUG] [Thread-66990] [transport.py] [_log()] starting thread (client mode): 0xf572e290
2025-12-12T09:57:32.965 [DEBUG] [Thread-66990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:57:32.980 [DEBUG] [Thread-66990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:57:32.980 [INFO] [Thread-66990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] client lang: <none>
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] server lang: <none>
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] kex follows: False
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:57:32.987 [DEBUG] [Thread-66990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:57:32.988 [DEBUG] [Thread-66990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:57:32.988 [DEBUG] [Thread-66990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:57:32.988 [DEBUG] [Thread-66990] [transport.py] [_log()] Compression: none
2025-12-12T09:57:32.988 [DEBUG] [Thread-66990] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:57:33.044 [DEBUG] [Thread-66990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:57:33.044 [DEBUG] [Thread-66990] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:57:33.044 [DEBUG] [Thread-66990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:57:33.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:57:33.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:57:33.101 [DEBUG] [Thread-66990] [transport.py] [_log()] userauth is OK
2025-12-12T09:57:33.101 [DEBUG] [Thread-66990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:57:33.101 [DEBUG] [Thread-66990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:57:33.101 [DEBUG] [Thread-66990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:57:33.101 [DEBUG] [Thread-66990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:57:33.115 [INFO] [Thread-66990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:57:33.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:57:33.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:57:33.957 [DEBUG] [Thread-66990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:57:33.957 [DEBUG] [Thread-66990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:57:34.005 [DEBUG] [Thread-66990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:57:34.005 [DEBUG] [Thread-66990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:57:34.014 [DEBUG] [Thread-66990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:57:34.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:57:34.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:57:34.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:57:34.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:57:34.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:57:34.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:57:34.038 [DEBUG] [Thread-66992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:34.045 [DEBUG] [Thread-66990] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:57:41.882 [DEBUG] [Thread-66993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:42.889 [DEBUG] [Thread-66994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:50.924 [DEBUG] [Thread-66995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:57.945 [DEBUG] [Thread-66996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:57:59.959 [DEBUG] [Thread-66997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:04.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:58:04.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:58:04.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:58:04.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 57, 45), 16.23, 32.63, 0.0, 39.75, 14.87, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:58:04.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:57:45
2025-12-12T09:58:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:58:05.034 [DEBUG] [Thread-66998] [transport.py] [_log()] starting thread (client mode): 0xf57b7fa0
2025-12-12T09:58:05.034 [DEBUG] [Thread-66998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:58:05.054 [DEBUG] [Thread-66998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:58:05.054 [INFO] [Thread-66998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] client lang: <none>
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] server lang: <none>
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] kex follows: False
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] Compression: none
2025-12-12T09:58:05.057 [DEBUG] [Thread-66998] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:58:05.072 [DEBUG] [Thread-66998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:58:05.072 [DEBUG] [Thread-66998] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:58:05.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:58:05.073 [DEBUG] [Thread-66998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:58:05.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:58:05.075 [DEBUG] [Thread-66998] [transport.py] [_log()] userauth is OK
2025-12-12T09:58:05.075 [DEBUG] [Thread-66998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:58:05.075 [DEBUG] [Thread-66998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:58:05.075 [DEBUG] [Thread-66998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:58:05.075 [DEBUG] [Thread-66998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:58:05.110 [INFO] [Thread-66998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:58:05.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:58:05.733 [DEBUG] [Thread-66998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:58:05.734 [DEBUG] [Thread-66998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:58:05.734 [DEBUG] [Thread-66998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:58:05.776 [DEBUG] [Thread-66998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:58:05.776 [DEBUG] [Thread-66998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:58:05.779 [DEBUG] [Thread-66998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:58:05.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:58:05.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:58:05.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:58:05.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:58:05.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:58:05.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:58:05.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:58:05.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:58:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:58:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.331695 -999.00  +13.90  27.58     39   +0.30 1 2 1 1 1   888    0 11.27 -117.00 ----- 23.9 27.6 13.6 42.2 16.7 -12.1 16.4 -12.3 16.2 -11.0 16.5 -11.2
2025-12-12T09:58:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:58:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:58:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.331695
2025-12-12T09:58:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:58:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:58:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:58:05.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:58:05.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:58:05.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:57:45', tmtdew=16.23, humidity=32.63, cloud=0.0, wind=39.75, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:57:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:58:05.807 [DEBUG] [Thread-66998] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:58:05.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:58:05.904 [DEBUG] [Thread-67001] [transport.py] [_log()] starting thread (client mode): 0xf5719090
2025-12-12T09:58:05.904 [DEBUG] [Thread-67001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:58:05.918 [DEBUG] [Thread-67001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:58:05.919 [INFO] [Thread-67001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:58:05.926 [DEBUG] [Thread-67001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:58:05.927 [DEBUG] [Thread-67001] [transport.py] [_log()] client lang: <none>
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] server lang: <none>
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] kex follows: False
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:58:05.928 [DEBUG] [Thread-67001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:58:05.929 [DEBUG] [Thread-67001] [transport.py] [_log()] Compression: none
2025-12-12T09:58:05.929 [DEBUG] [Thread-67001] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:58:05.993 [DEBUG] [Thread-67001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:58:05.994 [DEBUG] [Thread-67001] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:58:05.995 [DEBUG] [Thread-67001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:58:05.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:58:05.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:58:06.049 [DEBUG] [Thread-67001] [transport.py] [_log()] userauth is OK
2025-12-12T09:58:06.049 [DEBUG] [Thread-67001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:58:06.049 [DEBUG] [Thread-67001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:58:06.049 [DEBUG] [Thread-67001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:58:06.049 [DEBUG] [Thread-67001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:58:06.063 [INFO] [Thread-67001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:58:06.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:58:06.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:58:06.967 [DEBUG] [Thread-67001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:58:06.967 [DEBUG] [Thread-67001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:58:07.016 [DEBUG] [Thread-67001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:58:07.017 [DEBUG] [Thread-67001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:58:07.026 [DEBUG] [Thread-67001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:58:07.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:58:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:58: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
2025-12-12T09:58:07.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:58:07.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:58:07.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:58:07.061 [DEBUG] [Thread-67001] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:58:08.980 [DEBUG] [Thread-67003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:12.988 [DEBUG] [Thread-67004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:14.264 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:14.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:18.019 [DEBUG] [Thread-67005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:27.043 [DEBUG] [Thread-67006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:28.051 [DEBUG] [Thread-67007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:34.091 [DEBUG] [Thread-67008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:36.082 [DEBUG] [Thread-67009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:58:37.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:58:37.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:58:37.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 58, 17), 16.23, 32.64, 0.0, 39.29, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:58:37.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:58:17
2025-12-12T09:58:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:58:38.052 [DEBUG] [Thread-67010] [transport.py] [_log()] starting thread (client mode): 0xf571b670
2025-12-12T09:58:38.052 [DEBUG] [Thread-67010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:58:38.071 [DEBUG] [Thread-67010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:58:38.071 [INFO] [Thread-67010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:58:38.075 [DEBUG] [Thread-67010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:58:38.075 [DEBUG] [Thread-67010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:58:38.075 [DEBUG] [Thread-67010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] client lang: <none>
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] server lang: <none>
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] kex follows: False
2025-12-12T09:58:38.084 [DEBUG] [Thread-67010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:58:38.085 [DEBUG] [Thread-67010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:58:38.085 [DEBUG] [Thread-67010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:58:38.085 [DEBUG] [Thread-67010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:58:38.085 [DEBUG] [Thread-67010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:58:38.085 [DEBUG] [Thread-67010] [transport.py] [_log()] Compression: none
2025-12-12T09:58:38.085 [DEBUG] [Thread-67010] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:58:38.104 [DEBUG] [Thread-67010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:58:38.105 [DEBUG] [Thread-67010] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:58:38.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:58:38.105 [DEBUG] [Thread-67010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:58:38.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:58:38.107 [DEBUG] [Thread-67010] [transport.py] [_log()] userauth is OK
2025-12-12T09:58:38.107 [DEBUG] [Thread-67010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:58:38.108 [DEBUG] [Thread-67010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:58:38.108 [DEBUG] [Thread-67010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:58:38.108 [DEBUG] [Thread-67010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:58:38.132 [INFO] [Thread-67010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:58:38.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:58:38.731 [DEBUG] [Thread-67010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:58:38.731 [DEBUG] [Thread-67010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:58:38.732 [DEBUG] [Thread-67010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:58:38.772 [DEBUG] [Thread-67010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:58:38.772 [DEBUG] [Thread-67010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:58:38.776 [DEBUG] [Thread-67010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:58:38.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:58:38.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:58:38.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:58:38.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:58:38.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:58:38.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:58:38.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:58:38.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:58:38.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:58:38.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.332042 -999.00  +14.10  37.81     39   +0.50 1 2 2 1 1   888    0 11.38 -113.18 ----- 29.3 37.8 11.6 45.7 16.7 -12.0 16.4 -11.7 16.3 -11.2 16.4 -12.1
2025-12-12T09:58:38.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:58:38.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:58:38.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.332042
2025-12-12T09:58:38.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:58:38.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:58:38.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:58:38.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:58:38.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:58:38.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:58:17', tmtdew=16.23, humidity=32.64, cloud=0.0, wind=39.29, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:58:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:58:38.804 [DEBUG] [Thread-67010] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:58:38.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:58:38.903 [DEBUG] [Thread-67013] [transport.py] [_log()] starting thread (client mode): 0xf2d0f970
2025-12-12T09:58:38.903 [DEBUG] [Thread-67013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:58:38.918 [DEBUG] [Thread-67013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:58:38.919 [INFO] [Thread-67013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:58:38.926 [DEBUG] [Thread-67013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:58:38.927 [DEBUG] [Thread-67013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] client lang: <none>
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] server lang: <none>
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] kex follows: False
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:58:38.928 [DEBUG] [Thread-67013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:58:38.929 [DEBUG] [Thread-67013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:58:38.929 [DEBUG] [Thread-67013] [transport.py] [_log()] Compression: none
2025-12-12T09:58:38.929 [DEBUG] [Thread-67013] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:58:38.985 [DEBUG] [Thread-67013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:58:38.985 [DEBUG] [Thread-67013] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:58:38.986 [DEBUG] [Thread-67013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:58:38.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:58:38.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:58:39.041 [DEBUG] [Thread-67013] [transport.py] [_log()] userauth is OK
2025-12-12T09:58:39.041 [DEBUG] [Thread-67013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:58:39.041 [DEBUG] [Thread-67013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:58:39.042 [DEBUG] [Thread-67013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:58:39.042 [DEBUG] [Thread-67013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:58:39.061 [INFO] [Thread-67013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:58:39.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:58:39.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:58:39.913 [DEBUG] [Thread-67013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:58:39.913 [DEBUG] [Thread-67013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:58:39.961 [DEBUG] [Thread-67013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:58:39.962 [DEBUG] [Thread-67013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:58:39.971 [DEBUG] [Thread-67013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:58:39.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:58:39.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:58:39.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:58:39.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:58:39.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:58:39.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:58:40.007 [DEBUG] [Thread-67013] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:58:43.100 [DEBUG] [Thread-67015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:45.124 [DEBUG] [Thread-67016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:54.147 [DEBUG] [Thread-67017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:58:58.162 [DEBUG] [Thread-67018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:03.181 [DEBUG] [Thread-67019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:59:10.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:59:10.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T09:59:10.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 58, 49), 16.14, 33.08, 0.0, 40.44, 14.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:59:10.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:58:49
2025-12-12T09:59:10.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:59:10.971 [DEBUG] [Thread-67020] [transport.py] [_log()] starting thread (client mode): 0xf5718430
2025-12-12T09:59:10.972 [DEBUG] [Thread-67020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:59:10.990 [DEBUG] [Thread-67020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:59:10.990 [INFO] [Thread-67020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:59:10.991 [DEBUG] [Thread-67020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:59:10.991 [DEBUG] [Thread-67020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:59:10.991 [DEBUG] [Thread-67020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] client lang: <none>
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] server lang: <none>
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] kex follows: False
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] Compression: none
2025-12-12T09:59:10.992 [DEBUG] [Thread-67020] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:59:10.999 [DEBUG] [Thread-67020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:59:11.000 [DEBUG] [Thread-67020] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:59:11.000 [DEBUG] [Thread-67020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:59:11.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:59:11.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:59:11.001 [DEBUG] [Thread-67020] [transport.py] [_log()] userauth is OK
2025-12-12T09:59:11.001 [DEBUG] [Thread-67020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:59:11.002 [DEBUG] [Thread-67020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:59:11.002 [DEBUG] [Thread-67020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:59:11.002 [DEBUG] [Thread-67020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:59:11.017 [INFO] [Thread-67020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:59:11.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:59:11.653 [DEBUG] [Thread-67020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:59:11.653 [DEBUG] [Thread-67020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:59:11.654 [DEBUG] [Thread-67020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:59:11.695 [DEBUG] [Thread-67020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:59:11.695 [DEBUG] [Thread-67020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:59:11.698 [DEBUG] [Thread-67020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:59:11.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:59:11.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:59:11.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:59:11.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:59:11.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:59:11.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:59:11.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:59:11.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:59:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:59:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.332389 -999.00  +14.00  27.52     39   +0.30 1 2 1 1 1   888    0 10.80 -118.45 ----- 27.4 27.5 350.3 45.2 16.7 -12.6 16.4 -12.4 16.3 -11.4 16.5 -11.8
2025-12-12T09:59:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:59:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:59:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.332389
2025-12-12T09:59:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:59:11.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:59:11.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:59:11.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:59:11.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:59:11.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:58:49', tmtdew=16.14, humidity=33.08, cloud=0.0, wind=40.44, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:58:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:59:11.719 [DEBUG] [Thread-67020] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:59:11.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:59:11.816 [DEBUG] [Thread-67023] [transport.py] [_log()] starting thread (client mode): 0xf57bc2b0
2025-12-12T09:59:11.816 [DEBUG] [Thread-67023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:59:11.832 [DEBUG] [Thread-67023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:59:11.833 [INFO] [Thread-67023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:59:11.844 [DEBUG] [Thread-67023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:59:11.844 [DEBUG] [Thread-67023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:59:11.844 [DEBUG] [Thread-67023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:59:11.844 [DEBUG] [Thread-67023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:11.844 [DEBUG] [Thread-67023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:11.844 [DEBUG] [Thread-67023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] client lang: <none>
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] server lang: <none>
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] kex follows: False
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] Compression: none
2025-12-12T09:59:11.845 [DEBUG] [Thread-67023] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:59:11.904 [DEBUG] [Thread-67023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:59:11.904 [DEBUG] [Thread-67023] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:59:11.905 [DEBUG] [Thread-67023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:59:11.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:59:11.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:59:11.959 [DEBUG] [Thread-67023] [transport.py] [_log()] userauth is OK
2025-12-12T09:59:11.959 [DEBUG] [Thread-67023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:59:11.960 [DEBUG] [Thread-67023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:59:11.960 [DEBUG] [Thread-67023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:59:11.960 [DEBUG] [Thread-67023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:59:11.983 [INFO] [Thread-67023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:59:11.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:59:11.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:59:12.205 [DEBUG] [Thread-67025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:12.814 [DEBUG] [Thread-67023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:59:12.814 [DEBUG] [Thread-67023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:59:12.862 [DEBUG] [Thread-67023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:59:12.862 [DEBUG] [Thread-67023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:59:12.870 [DEBUG] [Thread-67023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:59:12.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:59:12.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:59:12.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:59:12.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:59:12.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:59:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:59:12.904 [DEBUG] [Thread-67023] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:59:13.213 [DEBUG] [Thread-67026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:14.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:14.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:21.255 [DEBUG] [Thread-67027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:28.271 [DEBUG] [Thread-67028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:30.278 [DEBUG] [Thread-67029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:34.153 [DEBUG] [Thread-67030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:39.299 [DEBUG] [Thread-67031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T09:59:42.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T09:59: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
2025-12-12T09:59:43.309 [DEBUG] [Thread-67032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 59, 22), 16.1, 33.18, 0.0, 44.55, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T09:59:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:59:22
2025-12-12T09:59:43.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T09:59:43.875 [DEBUG] [Thread-67033] [transport.py] [_log()] starting thread (client mode): 0xf57bdc30
2025-12-12T09:59:43.875 [DEBUG] [Thread-67033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:59:43.895 [DEBUG] [Thread-67033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T09:59:43.895 [INFO] [Thread-67033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T09:59:43.898 [DEBUG] [Thread-67033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:59:43.898 [DEBUG] [Thread-67033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T09:59:43.898 [DEBUG] [Thread-67033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:59:43.898 [DEBUG] [Thread-67033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] client lang: <none>
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] server lang: <none>
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] kex follows: False
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] Compression: none
2025-12-12T09:59:43.899 [DEBUG] [Thread-67033] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:59:43.916 [DEBUG] [Thread-67033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:59:43.917 [DEBUG] [Thread-67033] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:59:43.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T09:59:43.917 [DEBUG] [Thread-67033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T09:59:43.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:59:43.919 [DEBUG] [Thread-67033] [transport.py] [_log()] userauth is OK
2025-12-12T09:59:43.919 [DEBUG] [Thread-67033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:59:43.919 [DEBUG] [Thread-67033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:59:43.919 [DEBUG] [Thread-67033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T09:59:43.920 [DEBUG] [Thread-67033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:59:43.939 [INFO] [Thread-67033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:59:43.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:59:44.595 [DEBUG] [Thread-67033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:59:44.595 [DEBUG] [Thread-67033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:59:44.596 [DEBUG] [Thread-67033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T09:59:44.636 [DEBUG] [Thread-67033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:59:44.636 [DEBUG] [Thread-67033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:59:44.640 [DEBUG] [Thread-67033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:59:44.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:59:44.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T09:59:44.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T09:59:44.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T09:59:44.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:59:44.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T09:59:44.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:59:44.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:59:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T09:59:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.332737 -999.00  +13.90  29.81     39   +0.20 1 2 1 1 1   888    0 10.79 -121.29 ----- 33.5 29.8 354.4 44.8 16.8 -12.1 16.4 -12.2 16.2 -10.8 16.4 -11.5
2025-12-12T09:59:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T09:59:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T09:59:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.332737
2025-12-12T09:59:44.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T09:59:44.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T09:59:44.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T09:59:44.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T09:59:44.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T09:59:44.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:59:22', tmtdew=16.1, humidity=33.18, cloud=0.0, wind=44.55, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T07:59:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T09:59:44.664 [DEBUG] [Thread-67033] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:59:44.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T09:59:44.764 [DEBUG] [Thread-67036] [transport.py] [_log()] starting thread (client mode): 0xf2d0c640
2025-12-12T09:59:44.764 [DEBUG] [Thread-67036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T09:59:44.779 [DEBUG] [Thread-67036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T09:59:44.779 [INFO] [Thread-67036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] client lang: <none>
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] server lang: <none>
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] kex follows: False
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T09:59:44.787 [DEBUG] [Thread-67036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T09:59:44.788 [DEBUG] [Thread-67036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T09:59:44.788 [DEBUG] [Thread-67036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T09:59:44.788 [DEBUG] [Thread-67036] [transport.py] [_log()] Compression: none
2025-12-12T09:59:44.788 [DEBUG] [Thread-67036] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T09:59:44.847 [DEBUG] [Thread-67036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T09:59:44.848 [DEBUG] [Thread-67036] [transport.py] [_log()] Switch to new keys ...
2025-12-12T09:59:44.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T09:59:44.849 [DEBUG] [Thread-67036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T09:59:44.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T09:59:44.904 [DEBUG] [Thread-67036] [transport.py] [_log()] userauth is OK
2025-12-12T09:59:44.904 [DEBUG] [Thread-67036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T09:59:44.904 [DEBUG] [Thread-67036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T09:59:44.904 [DEBUG] [Thread-67036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T09:59:44.904 [DEBUG] [Thread-67036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T09:59:44.922 [INFO] [Thread-67036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T09:59:44.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T09:59:44.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T09:59:45.779 [DEBUG] [Thread-67036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T09:59:45.779 [DEBUG] [Thread-67036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T09:59:45.827 [DEBUG] [Thread-67036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T09:59:45.827 [DEBUG] [Thread-67036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T09:59:45.836 [DEBUG] [Thread-67036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T09:59:45.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T09:59:45.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T09:59:45.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T09:59:45.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T09:59:45.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T09:59:45.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T09:59:45.873 [DEBUG] [Thread-67036] [transport.py] [_log()] EOF in transport thread
2025-12-12T09:59:48.324 [DEBUG] [Thread-67038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:57.346 [DEBUG] [Thread-67039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T09:59:58.354 [DEBUG] [Thread-67040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:06.390 [DEBUG] [Thread-67041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:13.407 [DEBUG] [Thread-67042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:14.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:14.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:15.420 [DEBUG] [Thread-67043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:15.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:00:15.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:00:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:00:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 9, 59, 54), 16.0, 33.29, 0.0, 28.95, 14.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:00:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 09:59:54
2025-12-12T10:00:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:00:16.831 [DEBUG] [Thread-67044] [transport.py] [_log()] starting thread (client mode): 0xf2d0dfc0
2025-12-12T10:00:16.831 [DEBUG] [Thread-67044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:00:16.843 [DEBUG] [Thread-67044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:00:16.843 [INFO] [Thread-67044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:16.846 [DEBUG] [Thread-67044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] client lang: <none>
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] server lang: <none>
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] kex follows: False
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] Compression: none
2025-12-12T10:00:16.847 [DEBUG] [Thread-67044] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:00:16.855 [DEBUG] [Thread-67044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:00:16.856 [DEBUG] [Thread-67044] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:00:16.856 [DEBUG] [Thread-67044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:00:16.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:00:16.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:00:16.858 [DEBUG] [Thread-67044] [transport.py] [_log()] userauth is OK
2025-12-12T10:00:16.858 [DEBUG] [Thread-67044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:00:16.858 [DEBUG] [Thread-67044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:00:16.859 [DEBUG] [Thread-67044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:00:16.859 [DEBUG] [Thread-67044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:00:16.883 [INFO] [Thread-67044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:00:16.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:00:17.507 [DEBUG] [Thread-67044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:00:17.507 [DEBUG] [Thread-67044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:00:17.507 [DEBUG] [Thread-67044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:00:17.548 [DEBUG] [Thread-67044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:00:17.548 [DEBUG] [Thread-67044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:00:17.552 [DEBUG] [Thread-67044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:00:17.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:00:17.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:00:17.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:00:17.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:00:17.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:00:17.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:00:17.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:00:17.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:00:17.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:00:17.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.333373 -999.00  +14.20  27.10     38   +0.40 1 2 1 1 1   888    0 10.94 -119.96 ----- 27.9 27.1 10.2 34.9 16.6 -11.6 16.4 -11.3 16.2 -10.7 16.4 -10.9
2025-12-12T10:00:17.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:00:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:00:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.333373
2025-12-12T10:00:17.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:00:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:00:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:00:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:00:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:00:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T09:59:54', tmtdew=16.0, humidity=33.29, cloud=0.0, wind=28.95, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:00:03.427', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:00:17.577 [DEBUG] [Thread-67044] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:00:17.673 [DEBUG] [Thread-67047] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-12T10:00:17.673 [DEBUG] [Thread-67047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:00:17.688 [DEBUG] [Thread-67047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:00:17.689 [INFO] [Thread-67047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:00:17.696 [DEBUG] [Thread-67047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:00:17.696 [DEBUG] [Thread-67047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] client lang: <none>
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] server lang: <none>
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] kex follows: False
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] Compression: none
2025-12-12T10:00:17.697 [DEBUG] [Thread-67047] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:00:17.755 [DEBUG] [Thread-67047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:00:17.755 [DEBUG] [Thread-67047] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:00:17.756 [DEBUG] [Thread-67047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:00:17.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:00:17.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:00:17.810 [DEBUG] [Thread-67047] [transport.py] [_log()] userauth is OK
2025-12-12T10:00:17.811 [DEBUG] [Thread-67047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:00:17.811 [DEBUG] [Thread-67047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:00:17.811 [DEBUG] [Thread-67047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:00:17.811 [DEBUG] [Thread-67047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:00:17.830 [INFO] [Thread-67047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:00:17.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:00:17.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:00:18.696 [DEBUG] [Thread-67047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:00:18.696 [DEBUG] [Thread-67047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:00:18.747 [DEBUG] [Thread-67047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:00:18.747 [DEBUG] [Thread-67047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:00:18.756 [DEBUG] [Thread-67047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:00:18.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:00:18.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:00:18.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:00:18.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:00:18.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:00:18.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:00:18.790 [DEBUG] [Thread-67047] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:00:24.441 [DEBUG] [Thread-67049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:28.452 [DEBUG] [Thread-67050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:33.484 [DEBUG] [Thread-67051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:34.204 [DEBUG] [Thread-67052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:42.509 [DEBUG] [Thread-67053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:43.517 [DEBUG] [Thread-67054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:00:48.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:00:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:00:49.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 0, 26), 15.81, 33.71, 0.0, 30.77, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:00:49.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:00:26
2025-12-12T10:00:49.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:00:49.788 [DEBUG] [Thread-67055] [transport.py] [_log()] starting thread (client mode): 0xf5770250
2025-12-12T10:00:49.788 [DEBUG] [Thread-67055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:00:49.808 [DEBUG] [Thread-67055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:00:49.809 [INFO] [Thread-67055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] client lang: <none>
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] server lang: <none>
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] kex follows: False
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:00:49.812 [DEBUG] [Thread-67055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:00:49.813 [DEBUG] [Thread-67055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:00:49.813 [DEBUG] [Thread-67055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:00:49.813 [DEBUG] [Thread-67055] [transport.py] [_log()] Compression: none
2025-12-12T10:00:49.813 [DEBUG] [Thread-67055] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:00:49.830 [DEBUG] [Thread-67055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:00:49.830 [DEBUG] [Thread-67055] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:00:49.831 [DEBUG] [Thread-67055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:00:49.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:00:49.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:00:49.833 [DEBUG] [Thread-67055] [transport.py] [_log()] userauth is OK
2025-12-12T10:00:49.833 [DEBUG] [Thread-67055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:00:49.833 [DEBUG] [Thread-67055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:00:49.833 [DEBUG] [Thread-67055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:00:49.833 [DEBUG] [Thread-67055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:00:49.869 [INFO] [Thread-67055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:00:49.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:00:50.527 [DEBUG] [Thread-67055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:00:50.528 [DEBUG] [Thread-67055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:00:50.528 [DEBUG] [Thread-67055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:00:50.569 [DEBUG] [Thread-67055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:00:50.569 [DEBUG] [Thread-67055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:00:50.572 [DEBUG] [Thread-67055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:00:50.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:00:50.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:00:50.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:00:50.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:00:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:00:50.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:00:50.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:00:50.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:00:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:00:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.333778 -999.00  +14.30  26.61     39   +0.50 1 2 1 1 1   888    0 11.30 -109.21 ----- 23.9 26.6 355.9 43.6 16.7 -12.2 16.4 -11.8 16.3 -11.4 16.5 -12.6
2025-12-12T10:00:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:00:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:00:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.333778
2025-12-12T10:00:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:00:50.595 [DEBUG] [Thread-67055] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:00:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:00:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:00:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:00:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:00:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:00:26', tmtdew=15.81, humidity=33.71, cloud=0.0, wind=30.77, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:00:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:00:50.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:00:50.691 [DEBUG] [Thread-67058] [transport.py] [_log()] starting thread (client mode): 0xf2d0d5a0
2025-12-12T10:00:50.691 [DEBUG] [Thread-67058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:00:50.705 [DEBUG] [Thread-67058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:00:50.706 [INFO] [Thread-67058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:00:50.713 [DEBUG] [Thread-67058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:00:50.713 [DEBUG] [Thread-67058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:00:50.713 [DEBUG] [Thread-67058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:00:50.713 [DEBUG] [Thread-67058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:50.713 [DEBUG] [Thread-67058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:00:50.713 [DEBUG] [Thread-67058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] client lang: <none>
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] server lang: <none>
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] kex follows: False
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] Compression: none
2025-12-12T10:00:50.714 [DEBUG] [Thread-67058] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:00:50.771 [DEBUG] [Thread-67058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:00:50.772 [DEBUG] [Thread-67058] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:00:50.772 [DEBUG] [Thread-67058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:00:50.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:00:50.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:00:50.828 [DEBUG] [Thread-67058] [transport.py] [_log()] userauth is OK
2025-12-12T10:00:50.829 [DEBUG] [Thread-67058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:00:50.829 [DEBUG] [Thread-67058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:00:50.829 [DEBUG] [Thread-67058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:00:50.829 [DEBUG] [Thread-67058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:00:50.848 [INFO] [Thread-67058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:00:50.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:00:50.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:00:51.537 [DEBUG] [Thread-67060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:00:51.735 [DEBUG] [Thread-67058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:00:51.735 [DEBUG] [Thread-67058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:00:51.784 [DEBUG] [Thread-67058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:00:51.784 [DEBUG] [Thread-67058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:00:51.793 [DEBUG] [Thread-67058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:00:51.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:00:51.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:00:51.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:00:51.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:00:51.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:00:51.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:00:51.830 [DEBUG] [Thread-67058] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:00:58.553 [DEBUG] [Thread-67061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:00.571 [DEBUG] [Thread-67062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:09.595 [DEBUG] [Thread-67063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:13.610 [DEBUG] [Thread-67064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:14.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:14.707 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:18.630 [DEBUG] [Thread-67065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:21.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:01:21.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:01:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:01:22.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 0, 58), 15.91, 33.21, 0.0, 44.73, 14.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:01:22.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:00:58
2025-12-12T10:01:22.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:01:22.826 [DEBUG] [Thread-67066] [transport.py] [_log()] starting thread (client mode): 0xf5719ba0
2025-12-12T10:01:22.826 [DEBUG] [Thread-67066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:01:22.841 [DEBUG] [Thread-67066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:01:22.841 [INFO] [Thread-67066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] client lang: <none>
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] server lang: <none>
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] kex follows: False
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] Compression: none
2025-12-12T10:01:22.843 [DEBUG] [Thread-67066] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:01:22.850 [DEBUG] [Thread-67066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:01:22.850 [DEBUG] [Thread-67066] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:01:22.851 [DEBUG] [Thread-67066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:01:22.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:01:22.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:01:22.852 [DEBUG] [Thread-67066] [transport.py] [_log()] userauth is OK
2025-12-12T10:01:22.852 [DEBUG] [Thread-67066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:01:22.852 [DEBUG] [Thread-67066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:01:22.852 [DEBUG] [Thread-67066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:01:22.852 [DEBUG] [Thread-67066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:01:22.864 [INFO] [Thread-67066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:01:22.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:01:23.428 [DEBUG] [Thread-67066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:01:23.428 [DEBUG] [Thread-67066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:01:23.428 [DEBUG] [Thread-67066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:01:23.469 [DEBUG] [Thread-67066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:01:23.469 [DEBUG] [Thread-67066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:01:23.471 [DEBUG] [Thread-67066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:01:23.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:01:23.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:01:23.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:01:23.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:01:23.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:01:23.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:01:23.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.334125 -999.00  +14.00  25.88     39   +0.40 1 2 1 1 1   888    0 11.11 -111.84 ----- 27.4 25.9 352.0 39.3 16.6 -14.0 16.4 -13.1 16.2 -12.2 16.4 -14.4
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.334125
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:01:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:01:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:01:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:01:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:01:23.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:00:58', tmtdew=15.91, humidity=33.21, cloud=0.0, wind=44.73, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:01:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:01:23.498 [DEBUG] [Thread-67066] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:01:23.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:01:23.584 [DEBUG] [Thread-67069] [transport.py] [_log()] starting thread (client mode): 0xf572b400
2025-12-12T10:01:23.584 [DEBUG] [Thread-67069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:01:23.599 [DEBUG] [Thread-67069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:01:23.599 [INFO] [Thread-67069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] client lang: <none>
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] server lang: <none>
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] kex follows: False
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] Compression: none
2025-12-12T10:01:23.607 [DEBUG] [Thread-67069] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:01:23.673 [DEBUG] [Thread-67069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:01:23.673 [DEBUG] [Thread-67069] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:01:23.673 [DEBUG] [Thread-67069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:01:23.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:01:23.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:01:23.729 [DEBUG] [Thread-67069] [transport.py] [_log()] userauth is OK
2025-12-12T10:01:23.729 [DEBUG] [Thread-67069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:01:23.729 [DEBUG] [Thread-67069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:01:23.729 [DEBUG] [Thread-67069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:01:23.729 [DEBUG] [Thread-67069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:01:23.743 [INFO] [Thread-67069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:01:23.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:01:23.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:01:24.632 [DEBUG] [Thread-67069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:01:24.632 [DEBUG] [Thread-67069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:01:24.679 [DEBUG] [Thread-67069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:01:24.680 [DEBUG] [Thread-67069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:01:24.688 [DEBUG] [Thread-67069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:01:24.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:01:24.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:01:24.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:01:24.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:01:24.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:01:24.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:01:24.720 [DEBUG] [Thread-67069] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:01:27.650 [DEBUG] [Thread-67071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:28.656 [DEBUG] [Thread-67072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:34.239 [DEBUG] [Thread-67073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:36.696 [DEBUG] [Thread-67074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:43.713 [DEBUG] [Thread-67075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:45.724 [DEBUG] [Thread-67076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:54.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:01:54.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:01:54.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:01:54.748 [DEBUG] [Thread-67077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:01:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 1, 30), 15.84, 33.37, 0.0, 41.02, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:01:55.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:01:30
2025-12-12T10:01:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:01:55.705 [DEBUG] [Thread-67078] [transport.py] [_log()] starting thread (client mode): 0xf5729e10
2025-12-12T10:01:55.706 [DEBUG] [Thread-67078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:01:55.726 [DEBUG] [Thread-67078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:01:55.726 [INFO] [Thread-67078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:01:55.729 [DEBUG] [Thread-67078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] client lang: <none>
2025-12-12T10:01:55.730 [DEBUG] [Thread-67078] [transport.py] [_log()] server lang: <none>
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] kex follows: False
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] Compression: none
2025-12-12T10:01:55.731 [DEBUG] [Thread-67078] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:01:55.748 [DEBUG] [Thread-67078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:01:55.748 [DEBUG] [Thread-67078] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:01:55.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:01:55.749 [DEBUG] [Thread-67078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:01:55.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:01:55.751 [DEBUG] [Thread-67078] [transport.py] [_log()] userauth is OK
2025-12-12T10:01:55.752 [DEBUG] [Thread-67078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:01:55.752 [DEBUG] [Thread-67078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:01:55.752 [DEBUG] [Thread-67078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:01:55.752 [DEBUG] [Thread-67078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:01:55.771 [INFO] [Thread-67078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:01:55.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:01:56.386 [DEBUG] [Thread-67078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:01:56.387 [DEBUG] [Thread-67078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:01:56.387 [DEBUG] [Thread-67078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:01:56.428 [DEBUG] [Thread-67078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:01:56.428 [DEBUG] [Thread-67078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:01:56.432 [DEBUG] [Thread-67078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:01:56.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:01:56.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:01:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:01:56.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:01:56.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:01:56.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:01:56.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:01:56.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:01:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:01:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.334472 -999.00  +14.10  26.28     39   +0.50 1 2 1 1 1   888    0 11.06 -114.87 ----- 21.5 26.3 11.4 39.6 16.6 -12.2 16.3 -12.5 16.2 -11.1 16.3 -12.4
2025-12-12T10:01:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:01:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:01:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.334472
2025-12-12T10:01:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:01:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:01:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:01:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:01:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:01:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:01:30', tmtdew=15.84, humidity=33.37, cloud=0.0, wind=41.02, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:01:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:01:56.457 [DEBUG] [Thread-67078] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:01:56.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:01:56.554 [DEBUG] [Thread-67081] [transport.py] [_log()] starting thread (client mode): 0xf57bc0d0
2025-12-12T10:01:56.554 [DEBUG] [Thread-67081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:01:56.570 [DEBUG] [Thread-67081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:01:56.571 [INFO] [Thread-67081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:01:56.578 [DEBUG] [Thread-67081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:01:56.578 [DEBUG] [Thread-67081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:01:56.578 [DEBUG] [Thread-67081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:01:56.578 [DEBUG] [Thread-67081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] client lang: <none>
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] server lang: <none>
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] kex follows: False
2025-12-12T10:01:56.579 [DEBUG] [Thread-67081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:01:56.580 [DEBUG] [Thread-67081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:01:56.580 [DEBUG] [Thread-67081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:01:56.580 [DEBUG] [Thread-67081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:01:56.580 [DEBUG] [Thread-67081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:01:56.581 [DEBUG] [Thread-67081] [transport.py] [_log()] Compression: none
2025-12-12T10:01:56.581 [DEBUG] [Thread-67081] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:01:56.638 [DEBUG] [Thread-67081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:01:56.638 [DEBUG] [Thread-67081] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:01:56.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:01:56.639 [DEBUG] [Thread-67081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:01:56.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:01:56.694 [DEBUG] [Thread-67081] [transport.py] [_log()] userauth is OK
2025-12-12T10:01:56.694 [DEBUG] [Thread-67081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:01:56.694 [DEBUG] [Thread-67081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:01:56.695 [DEBUG] [Thread-67081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:01:56.695 [DEBUG] [Thread-67081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:01:56.714 [INFO] [Thread-67081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:01:56.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:01:56.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:01:57.556 [DEBUG] [Thread-67081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:01:57.557 [DEBUG] [Thread-67081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:01:57.605 [DEBUG] [Thread-67081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:01:57.605 [DEBUG] [Thread-67081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:01:57.614 [DEBUG] [Thread-67081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:01:57.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:01:57.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:01: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') -> 00000000
2025-12-12T10:01:57.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:01:57.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:01:57.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:01:57.649 [DEBUG] [Thread-67081] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:01:58.762 [DEBUG] [Thread-67083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:03.802 [DEBUG] [Thread-67084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:12.820 [DEBUG] [Thread-67085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:13.828 [DEBUG] [Thread-67086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:14.848 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:14.849 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:21.854 [DEBUG] [Thread-67087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:27.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:02:27.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:02:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:02:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 2, 2), 15.88, 33.26, 0.0, 44.64, 14.39, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:02:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:02:02
2025-12-12T10:02:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:02:28.621 [DEBUG] [Thread-67088] [transport.py] [_log()] starting thread (client mode): 0xf8156230
2025-12-12T10:02:28.621 [DEBUG] [Thread-67088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:02:28.641 [DEBUG] [Thread-67088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:02:28.642 [INFO] [Thread-67088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:02:28.643 [DEBUG] [Thread-67088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:02:28.643 [DEBUG] [Thread-67088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:02:28.643 [DEBUG] [Thread-67088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:02:28.643 [DEBUG] [Thread-67088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] client lang: <none>
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] server lang: <none>
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] kex follows: False
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] Compression: none
2025-12-12T10:02:28.644 [DEBUG] [Thread-67088] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:02:28.659 [DEBUG] [Thread-67088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:02:28.660 [DEBUG] [Thread-67088] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:02:28.660 [DEBUG] [Thread-67088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:02:28.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:02:28.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:02:28.662 [DEBUG] [Thread-67088] [transport.py] [_log()] userauth is OK
2025-12-12T10:02:28.662 [DEBUG] [Thread-67088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:02:28.662 [DEBUG] [Thread-67088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:02:28.662 [DEBUG] [Thread-67088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:02:28.662 [DEBUG] [Thread-67088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:02:28.682 [INFO] [Thread-67088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:02:28.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:02:28.871 [DEBUG] [Thread-67090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:29.325 [DEBUG] [Thread-67088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:02:29.326 [DEBUG] [Thread-67088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:02:29.326 [DEBUG] [Thread-67088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:02:29.366 [DEBUG] [Thread-67088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:02:29.366 [DEBUG] [Thread-67088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:02:29.369 [DEBUG] [Thread-67088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:02:29.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:02:29.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:02:29.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:02:29.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:02:29.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:02:29.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:02:29.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:02:29.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:02:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:02:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.334472 -999.00  +14.10  26.28     39   +0.50 1 2 1 1 1   888    0 11.06 -114.87 ----- 21.5 26.3 11.4 39.6 16.6 -12.2 16.3 -12.5 16.2 -11.1 16.3 -12.4
2025-12-12T10:02:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:02:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:02:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.334472
2025-12-12T10:02:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:02:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:02:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:02:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:02:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:02:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:02:02', tmtdew=15.88, humidity=33.26, cloud=0.0, wind=44.64, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:01:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:02:29.389 [DEBUG] [Thread-67088] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:02:29.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:02:29.483 [DEBUG] [Thread-67092] [transport.py] [_log()] starting thread (client mode): 0xf2d0c0d0
2025-12-12T10:02:29.483 [DEBUG] [Thread-67092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:02:29.498 [DEBUG] [Thread-67092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:02:29.498 [INFO] [Thread-67092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:02:29.506 [DEBUG] [Thread-67092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:02:29.506 [DEBUG] [Thread-67092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:02:29.506 [DEBUG] [Thread-67092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:02:29.506 [DEBUG] [Thread-67092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:02:29.506 [DEBUG] [Thread-67092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] client lang: <none>
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] server lang: <none>
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] kex follows: False
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] Compression: none
2025-12-12T10:02:29.507 [DEBUG] [Thread-67092] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:02:29.566 [DEBUG] [Thread-67092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:02:29.566 [DEBUG] [Thread-67092] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:02:29.567 [DEBUG] [Thread-67092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:02:29.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:02:29.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:02:29.625 [DEBUG] [Thread-67092] [transport.py] [_log()] userauth is OK
2025-12-12T10:02:29.626 [DEBUG] [Thread-67092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:02:29.626 [DEBUG] [Thread-67092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:02:29.626 [DEBUG] [Thread-67092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:02:29.626 [DEBUG] [Thread-67092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:02:29.645 [INFO] [Thread-67092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:02:29.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:02:29.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:02:30.548 [DEBUG] [Thread-67092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:02:30.548 [DEBUG] [Thread-67092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:02:30.596 [DEBUG] [Thread-67092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:02:30.596 [DEBUG] [Thread-67092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:02:30.605 [DEBUG] [Thread-67092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:02:30.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:02:30.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:02:30.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:02:30.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:02:30.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:02:30.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:02:30.642 [DEBUG] [Thread-67092] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:02:30.885 [DEBUG] [Thread-67094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:34.293 [DEBUG] [Thread-67095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:39.906 [DEBUG] [Thread-67096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:43.916 [DEBUG] [Thread-67097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:48.939 [DEBUG] [Thread-67098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:57.970 [DEBUG] [Thread-67099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:02:58.977 [DEBUG] [Thread-67100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:00.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:03:00.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:03:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:03:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 2, 34), 15.66, 33.69, 0.0, 35.78, 14.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:03:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:02:34
2025-12-12T10:03:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:03:01.606 [DEBUG] [Thread-67101] [transport.py] [_log()] starting thread (client mode): 0xf5788160
2025-12-12T10:03:01.606 [DEBUG] [Thread-67101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:03:01.626 [DEBUG] [Thread-67101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:03:01.626 [INFO] [Thread-67101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:03:01.629 [DEBUG] [Thread-67101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] client lang: <none>
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] server lang: <none>
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] kex follows: False
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] Compression: none
2025-12-12T10:03:01.630 [DEBUG] [Thread-67101] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:03:01.647 [DEBUG] [Thread-67101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:03:01.647 [DEBUG] [Thread-67101] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:03:01.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:03:01.648 [DEBUG] [Thread-67101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:03:01.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:03:01.649 [DEBUG] [Thread-67101] [transport.py] [_log()] userauth is OK
2025-12-12T10:03:01.649 [DEBUG] [Thread-67101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:03:01.649 [DEBUG] [Thread-67101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:03:01.649 [DEBUG] [Thread-67101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:03:01.649 [DEBUG] [Thread-67101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:03:01.660 [INFO] [Thread-67101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:03:01.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:03:02.307 [DEBUG] [Thread-67101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:03:02.307 [DEBUG] [Thread-67101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:03:02.308 [DEBUG] [Thread-67101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:03:02.348 [DEBUG] [Thread-67101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:03:02.349 [DEBUG] [Thread-67101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:03:02.352 [DEBUG] [Thread-67101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:03:02.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:03:02.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:03:02.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:03:02.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:03:02.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:03:02.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:03:02.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:03:02.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:03:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:03:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.334762 -999.00  +14.20  18.53     39   +0.50 1 2 1 1 1   888    0 10.67 -123.74 ----- 22.7 18.5 342.5 29.9 16.7 -11.9 16.4 -11.8 16.2 -11.3 16.5 -11.3
2025-12-12T10:03:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:03:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:03:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.334762
2025-12-12T10:03:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:03:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:03:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:03:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:02:34', tmtdew=15.66, humidity=33.69, cloud=0.0, wind=35.78, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:02:03.437', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:03:02.381 [DEBUG] [Thread-67101] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:03:02.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:03:02.470 [DEBUG] [Thread-67104] [transport.py] [_log()] starting thread (client mode): 0xf578b7f0
2025-12-12T10:03:02.470 [DEBUG] [Thread-67104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:03:02.488 [DEBUG] [Thread-67104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:03:02.488 [INFO] [Thread-67104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:03:02.495 [DEBUG] [Thread-67104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] client lang: <none>
2025-12-12T10:03:02.496 [DEBUG] [Thread-67104] [transport.py] [_log()] server lang: <none>
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] kex follows: False
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] Compression: none
2025-12-12T10:03:02.497 [DEBUG] [Thread-67104] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:03:02.557 [DEBUG] [Thread-67104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:03:02.558 [DEBUG] [Thread-67104] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:03:02.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:03:02.559 [DEBUG] [Thread-67104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:03:02.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:03:02.613 [DEBUG] [Thread-67104] [transport.py] [_log()] userauth is OK
2025-12-12T10:03:02.613 [DEBUG] [Thread-67104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:03:02.614 [DEBUG] [Thread-67104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:03:02.614 [DEBUG] [Thread-67104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:03:02.614 [DEBUG] [Thread-67104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:03:02.632 [INFO] [Thread-67104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:03:02.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:03:02.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:03:03.497 [DEBUG] [Thread-67104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:03:03.497 [DEBUG] [Thread-67104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:03:03.545 [DEBUG] [Thread-67104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:03:03.545 [DEBUG] [Thread-67104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:03:03.554 [DEBUG] [Thread-67104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:03:03.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:03:03.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:03:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:03:03.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:03:03.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:03:03.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:03:03.591 [DEBUG] [Thread-67104] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:03:06.992 [DEBUG] [Thread-67106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:14.013 [DEBUG] [Thread-67107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:14.990 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:14.991 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:16.041 [DEBUG] [Thread-67108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:25.059 [DEBUG] [Thread-67109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:29.073 [DEBUG] [Thread-67110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:03:33.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:03:33.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:03:34.092 [DEBUG] [Thread-67111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 3, 6), 15.68, 33.62, 0.0, 30.14, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:03:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:03:06
2025-12-12T10:03:34.338 [DEBUG] [Thread-67112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:34.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:03:34.566 [DEBUG] [Thread-67113] [transport.py] [_log()] starting thread (client mode): 0xf2d0c640
2025-12-12T10:03:34.566 [DEBUG] [Thread-67113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:03:34.589 [DEBUG] [Thread-67113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:03:34.589 [INFO] [Thread-67113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:03:34.592 [DEBUG] [Thread-67113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:03:34.592 [DEBUG] [Thread-67113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:03:34.592 [DEBUG] [Thread-67113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:03:34.592 [DEBUG] [Thread-67113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] client lang: <none>
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] server lang: <none>
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] kex follows: False
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] Compression: none
2025-12-12T10:03:34.593 [DEBUG] [Thread-67113] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:03:34.607 [DEBUG] [Thread-67113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:03:34.608 [DEBUG] [Thread-67113] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:03:34.608 [DEBUG] [Thread-67113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:03:34.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:03:34.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:03:34.610 [DEBUG] [Thread-67113] [transport.py] [_log()] userauth is OK
2025-12-12T10:03:34.611 [DEBUG] [Thread-67113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:03:34.611 [DEBUG] [Thread-67113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:03:34.611 [DEBUG] [Thread-67113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:03:34.611 [DEBUG] [Thread-67113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:03:34.634 [INFO] [Thread-67113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:03:34.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:03:35.397 [DEBUG] [Thread-67113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:03:35.398 [DEBUG] [Thread-67113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:03:35.398 [DEBUG] [Thread-67113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:03:35.439 [DEBUG] [Thread-67113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:03:35.439 [DEBUG] [Thread-67113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:03:35.442 [DEBUG] [Thread-67113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:03:35.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:03:35.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:03:35.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:03:35.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:03:35.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:03:35.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:03:35.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:03:35.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:03:35.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:03:35.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.335167 -999.00  +14.40  21.14     38   +0.50 1 2 1 1 1   888    0 11.04 -111.15 ----- 24.4 21.1 17.4 37.2 16.8 -11.6 16.6 -12.2 16.2 -11.0 16.6 -11.3
2025-12-12T10:03:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:03:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:03:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.335167
2025-12-12T10:03:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:03:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:03:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:03:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:03:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:03:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:03:06', tmtdew=15.68, humidity=33.62, cloud=0.0, wind=30.14, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:02:38.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:03:35.463 [DEBUG] [Thread-67113] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:03:35.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:03:35.562 [DEBUG] [Thread-67116] [transport.py] [_log()] starting thread (client mode): 0xf5729ae0
2025-12-12T10:03:35.563 [DEBUG] [Thread-67116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:03:35.578 [DEBUG] [Thread-67116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:03:35.579 [INFO] [Thread-67116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:03:35.586 [DEBUG] [Thread-67116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:03:35.587 [DEBUG] [Thread-67116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:03:35.587 [DEBUG] [Thread-67116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:03:35.587 [DEBUG] [Thread-67116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] client lang: <none>
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] server lang: <none>
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] kex follows: False
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:03:35.588 [DEBUG] [Thread-67116] [transport.py] [_log()] Compression: none
2025-12-12T10:03:35.589 [DEBUG] [Thread-67116] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:03:35.644 [DEBUG] [Thread-67116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:03:35.645 [DEBUG] [Thread-67116] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:03:35.646 [DEBUG] [Thread-67116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:03:35.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:03:35.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:03:35.701 [DEBUG] [Thread-67116] [transport.py] [_log()] userauth is OK
2025-12-12T10:03:35.701 [DEBUG] [Thread-67116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:03:35.701 [DEBUG] [Thread-67116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:03:35.702 [DEBUG] [Thread-67116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:03:35.702 [DEBUG] [Thread-67116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:03:35.721 [INFO] [Thread-67116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:03:35.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:03:35.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:03:36.588 [DEBUG] [Thread-67116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:03:36.589 [DEBUG] [Thread-67116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:03:36.636 [DEBUG] [Thread-67116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:03:36.636 [DEBUG] [Thread-67116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:03:36.646 [DEBUG] [Thread-67116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:03:36.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:03:36.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:03:36.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:03:36.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:03:36.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:03:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:03:36.683 [DEBUG] [Thread-67116] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:03:43.111 [DEBUG] [Thread-67118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:44.118 [DEBUG] [Thread-67119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:52.156 [DEBUG] [Thread-67120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:03:59.173 [DEBUG] [Thread-67121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:01.178 [DEBUG] [Thread-67122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:06.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:04:06.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:04:06.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:04:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 3, 38), 15.73, 33.64, 0.0, 43.47, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:04:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:03:38
2025-12-12T10:04:07.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:04:07.641 [DEBUG] [Thread-67123] [transport.py] [_log()] starting thread (client mode): 0xf57bc1f0
2025-12-12T10:04:07.641 [DEBUG] [Thread-67123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:04:07.657 [DEBUG] [Thread-67123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:04:07.657 [INFO] [Thread-67123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:04:07.660 [DEBUG] [Thread-67123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:04:07.666 [DEBUG] [Thread-67123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:04:07.666 [DEBUG] [Thread-67123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:04:07.666 [DEBUG] [Thread-67123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] client lang: <none>
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] server lang: <none>
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] kex follows: False
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] Compression: none
2025-12-12T10:04:07.667 [DEBUG] [Thread-67123] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:04:07.685 [DEBUG] [Thread-67123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:04:07.685 [DEBUG] [Thread-67123] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:04:07.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:04:07.686 [DEBUG] [Thread-67123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:04:07.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:04:07.689 [DEBUG] [Thread-67123] [transport.py] [_log()] userauth is OK
2025-12-12T10:04:07.689 [DEBUG] [Thread-67123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:04:07.689 [DEBUG] [Thread-67123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:04:07.689 [DEBUG] [Thread-67123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:04:07.689 [DEBUG] [Thread-67123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:04:07.726 [INFO] [Thread-67123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:04:07.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:04:08.354 [DEBUG] [Thread-67123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:04:08.354 [DEBUG] [Thread-67123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:04:08.355 [DEBUG] [Thread-67123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:04:08.395 [DEBUG] [Thread-67123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:04:08.395 [DEBUG] [Thread-67123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:04:08.399 [DEBUG] [Thread-67123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:04:08.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:04:08.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:04:08.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:04:08.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:04:08.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:04:08.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:04:08.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:04:08.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:04:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:04:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.335514 -999.00  +14.30  27.25     38   +0.30 1 2 1 1 1   888    0 10.81 -115.19 ----- 27.2 27.2 339.6 35.3 16.8 -11.9 16.5 -13.0 16.4 -11.4 16.6 -11.4
2025-12-12T10:04:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:04:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:04:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.335514
2025-12-12T10:04:08.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:04:08.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:04:08.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:04:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:04:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:04:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:03:38', tmtdew=15.73, humidity=33.64, cloud=0.0, wind=43.47, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:03:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:04:08.426 [DEBUG] [Thread-67123] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:04:08.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:04:08.532 [DEBUG] [Thread-67126] [transport.py] [_log()] starting thread (client mode): 0xf572a500
2025-12-12T10:04:08.532 [DEBUG] [Thread-67126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:04:08.547 [DEBUG] [Thread-67126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:04:08.547 [INFO] [Thread-67126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:04:08.554 [DEBUG] [Thread-67126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] client lang: <none>
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] server lang: <none>
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] kex follows: False
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] Compression: none
2025-12-12T10:04:08.555 [DEBUG] [Thread-67126] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:04:08.617 [DEBUG] [Thread-67126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:04:08.617 [DEBUG] [Thread-67126] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:04:08.618 [DEBUG] [Thread-67126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:04:08.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:04:08.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:04:08.672 [DEBUG] [Thread-67126] [transport.py] [_log()] userauth is OK
2025-12-12T10:04:08.673 [DEBUG] [Thread-67126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:04:08.673 [DEBUG] [Thread-67126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:04:08.673 [DEBUG] [Thread-67126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:04:08.673 [DEBUG] [Thread-67126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:04:08.692 [INFO] [Thread-67126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:04:08.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:04:08.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:04:09.554 [DEBUG] [Thread-67126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:04:09.554 [DEBUG] [Thread-67126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:04:09.602 [DEBUG] [Thread-67126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:04:09.602 [DEBUG] [Thread-67126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:04:09.612 [DEBUG] [Thread-67126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:04:09.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:04:09.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:04:09.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
2025-12-12T10:04:09.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:04:09.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:04:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:04:09.648 [DEBUG] [Thread-67126] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:04:10.199 [DEBUG] [Thread-67128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:14.210 [DEBUG] [Thread-67129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:15.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:15.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:19.241 [DEBUG] [Thread-67130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:28.271 [DEBUG] [Thread-67131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:29.279 [DEBUG] [Thread-67132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:34.401 [DEBUG] [Thread-67133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:37.299 [DEBUG] [Thread-67134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:39.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:04:39.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:04:39.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:04:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 4, 10), 15.62, 33.97, 0.0, 41.27, 14.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:04:40.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:04:10
2025-12-12T10:04:40.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:04:40.649 [DEBUG] [Thread-67135] [transport.py] [_log()] starting thread (client mode): 0xf8157a60
2025-12-12T10:04:40.650 [DEBUG] [Thread-67135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:04:40.670 [DEBUG] [Thread-67135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:04:40.670 [INFO] [Thread-67135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] client lang: <none>
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] server lang: <none>
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] kex follows: False
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:04:40.673 [DEBUG] [Thread-67135] [transport.py] [_log()] Compression: none
2025-12-12T10:04:40.674 [DEBUG] [Thread-67135] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:04:40.689 [DEBUG] [Thread-67135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:04:40.689 [DEBUG] [Thread-67135] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:04:40.690 [DEBUG] [Thread-67135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:04:40.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:04:40.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:04:40.690 [DEBUG] [Thread-67135] [transport.py] [_log()] userauth is OK
2025-12-12T10:04:40.690 [DEBUG] [Thread-67135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:04:40.690 [DEBUG] [Thread-67135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:04:40.690 [DEBUG] [Thread-67135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:04:40.691 [DEBUG] [Thread-67135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:04:40.702 [INFO] [Thread-67135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:04:40.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:04:41.431 [DEBUG] [Thread-67135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:04:41.431 [DEBUG] [Thread-67135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:04:41.431 [DEBUG] [Thread-67135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:04:41.472 [DEBUG] [Thread-67135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:04:41.472 [DEBUG] [Thread-67135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:04:41.474 [DEBUG] [Thread-67135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:04:41.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:04:41.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:04:41.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:04:41.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:04:41.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:04:41.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:04:41.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.336209 -999.00  +14.40  22.20     38   +0.50 1 2 1 1 1   888    0 10.69 -111.20 ----- 17.4 22.2 351.9 33.1 16.8 -12.4 16.4 -12.4 16.3 -11.5 16.5 -12.9
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.336209
2025-12-12T10:04:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:04:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:04:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:04:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:04:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:04:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:04:10', tmtdew=15.62, humidity=33.97, cloud=0.0, wind=41.27, temperature=14.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:04:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:04:41.493 [DEBUG] [Thread-67135] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:04:41.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:04:41.579 [DEBUG] [Thread-67138] [transport.py] [_log()] starting thread (client mode): 0xf5770250
2025-12-12T10:04:41.579 [DEBUG] [Thread-67138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:04:41.599 [DEBUG] [Thread-67138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:04:41.599 [INFO] [Thread-67138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] client lang: <none>
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] server lang: <none>
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] kex follows: False
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] Compression: none
2025-12-12T10:04:41.607 [DEBUG] [Thread-67138] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:04:41.664 [DEBUG] [Thread-67138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:04:41.664 [DEBUG] [Thread-67138] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:04:41.665 [DEBUG] [Thread-67138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:04:41.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:04:41.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:04:41.719 [DEBUG] [Thread-67138] [transport.py] [_log()] userauth is OK
2025-12-12T10:04:41.719 [DEBUG] [Thread-67138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:04:41.719 [DEBUG] [Thread-67138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:04:41.719 [DEBUG] [Thread-67138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:04:41.719 [DEBUG] [Thread-67138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:04:41.737 [INFO] [Thread-67138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:04:41.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:04:41.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:04:42.620 [DEBUG] [Thread-67138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:04:42.620 [DEBUG] [Thread-67138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:04:42.668 [DEBUG] [Thread-67138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:04:42.668 [DEBUG] [Thread-67138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:04:42.676 [DEBUG] [Thread-67138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:04:42.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:04:42.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:04:42.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:04:42.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:04:42.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:04:42.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:04:42.708 [DEBUG] [Thread-67138] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:04:44.312 [DEBUG] [Thread-67140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:46.328 [DEBUG] [Thread-67141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:55.352 [DEBUG] [Thread-67142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:04:59.366 [DEBUG] [Thread-67143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:04.385 [DEBUG] [Thread-67144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:05:12.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:05:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:05:13.405 [DEBUG] [Thread-67145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 4, 42), 15.58, 34.32, 0.0, 39.24, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:05:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:04:42
2025-12-12T10:05:13.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:05:13.711 [DEBUG] [Thread-67146] [transport.py] [_log()] starting thread (client mode): 0xf572a500
2025-12-12T10:05:13.711 [DEBUG] [Thread-67146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:05:13.731 [DEBUG] [Thread-67146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:05:13.731 [INFO] [Thread-67146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:05:13.735 [DEBUG] [Thread-67146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:05:13.735 [DEBUG] [Thread-67146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:05:13.735 [DEBUG] [Thread-67146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:05:13.735 [DEBUG] [Thread-67146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:13.735 [DEBUG] [Thread-67146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:13.735 [DEBUG] [Thread-67146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] client lang: <none>
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] server lang: <none>
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] kex follows: False
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] Compression: none
2025-12-12T10:05:13.736 [DEBUG] [Thread-67146] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:05:13.758 [DEBUG] [Thread-67146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:05:13.758 [DEBUG] [Thread-67146] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:05:13.759 [DEBUG] [Thread-67146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:05:13.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:05:13.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:05:13.801 [DEBUG] [Thread-67146] [transport.py] [_log()] userauth is OK
2025-12-12T10:05:13.801 [DEBUG] [Thread-67146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:05:13.801 [DEBUG] [Thread-67146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:05:13.802 [DEBUG] [Thread-67146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:05:13.802 [DEBUG] [Thread-67146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:05:13.834 [INFO] [Thread-67146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:05:13.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:05:14.412 [DEBUG] [Thread-67148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:14.497 [DEBUG] [Thread-67146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:05:14.497 [DEBUG] [Thread-67146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:05:14.498 [DEBUG] [Thread-67146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:05:14.538 [DEBUG] [Thread-67146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:05:14.538 [DEBUG] [Thread-67146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:05:14.541 [DEBUG] [Thread-67146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:05:14.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:05:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:05:14.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:05:14.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:05:14.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:05:14.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:05:14.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:05:14.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.336556 -999.00  +14.50  26.63     39   +0.80 1 2 1 1 1   888    0 10.47 -113.65 ----- 29.7 26.6 347.5 35.3 16.8 -12.1 16.6 -12.6 16.4 -11.5 16.6 -12.3
2025-12-12T10:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.336556
2025-12-12T10:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:05:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:05:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:05:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:05:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:05:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:04:42', tmtdew=15.58, humidity=34.32, cloud=0.0, wind=39.24, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:04:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:05:14.567 [DEBUG] [Thread-67146] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:05:14.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:05:14.661 [DEBUG] [Thread-67150] [transport.py] [_log()] starting thread (client mode): 0xf8157700
2025-12-12T10:05:14.661 [DEBUG] [Thread-67150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:05:14.675 [DEBUG] [Thread-67150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:05:14.675 [INFO] [Thread-67150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] client lang: <none>
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] server lang: <none>
2025-12-12T10:05:14.682 [DEBUG] [Thread-67150] [transport.py] [_log()] kex follows: False
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] Compression: none
2025-12-12T10:05:14.683 [DEBUG] [Thread-67150] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:05:14.738 [DEBUG] [Thread-67150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:05:14.738 [DEBUG] [Thread-67150] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:05:14.739 [DEBUG] [Thread-67150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:05:14.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:05:14.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:05:14.795 [DEBUG] [Thread-67150] [transport.py] [_log()] userauth is OK
2025-12-12T10:05:14.795 [DEBUG] [Thread-67150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:05:14.795 [DEBUG] [Thread-67150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:05:14.795 [DEBUG] [Thread-67150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:05:14.795 [DEBUG] [Thread-67150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:05:14.809 [INFO] [Thread-67150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:05:14.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:05:14.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:05:15.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:15.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:15.636 [DEBUG] [Thread-67150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:05:15.636 [DEBUG] [Thread-67150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:05:15.683 [DEBUG] [Thread-67150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:05:15.684 [DEBUG] [Thread-67150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:05:15.692 [DEBUG] [Thread-67150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:05:15.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:05:15.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:05:15.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:05:15.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:05:15.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:05:15.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:05:15.723 [DEBUG] [Thread-67150] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:05:22.431 [DEBUG] [Thread-67152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:29.452 [DEBUG] [Thread-67153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:31.481 [DEBUG] [Thread-67154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:34.473 [DEBUG] [Thread-67155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:40.504 [DEBUG] [Thread-67156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:44.518 [DEBUG] [Thread-67157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:45.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:05:45.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:05: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
2025-12-12T10:05:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 5, 14), 15.5, 34.52, 0.0, 41.06, 14.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:05:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:05:14
2025-12-12T10:05:46.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:05:46.706 [DEBUG] [Thread-67158] [transport.py] [_log()] starting thread (client mode): 0xf572a1a0
2025-12-12T10:05:46.707 [DEBUG] [Thread-67158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:05:46.728 [DEBUG] [Thread-67158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:05:46.728 [INFO] [Thread-67158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] client lang: <none>
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] server lang: <none>
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] kex follows: False
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] Compression: none
2025-12-12T10:05:46.731 [DEBUG] [Thread-67158] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:05:46.748 [DEBUG] [Thread-67158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:05:46.748 [DEBUG] [Thread-67158] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:05:46.749 [DEBUG] [Thread-67158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:05:46.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:05:46.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:05:46.751 [DEBUG] [Thread-67158] [transport.py] [_log()] userauth is OK
2025-12-12T10:05:46.751 [DEBUG] [Thread-67158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:05:46.751 [DEBUG] [Thread-67158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:05:46.751 [DEBUG] [Thread-67158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:05:46.751 [DEBUG] [Thread-67158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:05:46.769 [INFO] [Thread-67158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:05:46.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:05:47.386 [DEBUG] [Thread-67158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:05:47.386 [DEBUG] [Thread-67158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:05:47.386 [DEBUG] [Thread-67158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:05:47.426 [DEBUG] [Thread-67158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:05:47.426 [DEBUG] [Thread-67158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:05:47.429 [DEBUG] [Thread-67158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:05:47.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:05:47.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:05:47.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:05:47.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:05:47.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:05:47.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:05:47.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.336845 -999.00  +14.40  26.29     39   +0.90 1 2 1 1 1   888    0 10.99 -112.36 ----- 34.2 26.3 3.9 44.2 16.8 -12.7 16.6 -13.0 16.4 -12.2 16.6 -12.6
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.336845
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:05:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:05:14', tmtdew=15.5, humidity=34.52, cloud=0.0, wind=41.06, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:05:03.408', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:05:47.445 [DEBUG] [Thread-67158] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:05:47.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:05:47.531 [DEBUG] [Thread-67161] [transport.py] [_log()] starting thread (client mode): 0xf2d16d70
2025-12-12T10:05:47.531 [DEBUG] [Thread-67161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:05:47.546 [DEBUG] [Thread-67161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:05:47.546 [INFO] [Thread-67161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:05:47.553 [DEBUG] [Thread-67161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] client lang: <none>
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] server lang: <none>
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] kex follows: False
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] Compression: none
2025-12-12T10:05:47.554 [DEBUG] [Thread-67161] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:05:47.609 [DEBUG] [Thread-67161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:05:47.609 [DEBUG] [Thread-67161] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:05:47.610 [DEBUG] [Thread-67161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:05:47.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:05:47.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:05:47.667 [DEBUG] [Thread-67161] [transport.py] [_log()] userauth is OK
2025-12-12T10:05:47.667 [DEBUG] [Thread-67161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:05:47.667 [DEBUG] [Thread-67161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:05:47.667 [DEBUG] [Thread-67161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:05:47.667 [DEBUG] [Thread-67161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:05:47.681 [INFO] [Thread-67161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:05:47.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:05:47.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:05:48.525 [DEBUG] [Thread-67161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:05:48.525 [DEBUG] [Thread-67161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:05:48.579 [DEBUG] [Thread-67161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:05:48.579 [DEBUG] [Thread-67161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:05:48.587 [DEBUG] [Thread-67161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:05:48.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:05:48.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:05:48.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:05:48.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:05:48.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:05:48.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:05:48.619 [DEBUG] [Thread-67161] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:05:49.534 [DEBUG] [Thread-67163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:58.550 [DEBUG] [Thread-67164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:05:59.553 [DEBUG] [Thread-67165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:07.581 [DEBUG] [Thread-67166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:14.602 [DEBUG] [Thread-67167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:15.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:15.416 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:16.616 [DEBUG] [Thread-67168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:06:18.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:06:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:06:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 5, 46), 15.04, 35.54, 0.0, 39.17, 14.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:06:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:05:46
2025-12-12T10:06:19.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:06:19.660 [DEBUG] [Thread-67169] [transport.py] [_log()] starting thread (client mode): 0xf2d156f0
2025-12-12T10:06:19.660 [DEBUG] [Thread-67169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:06:19.681 [DEBUG] [Thread-67169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:06:19.681 [INFO] [Thread-67169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] client lang: <none>
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] server lang: <none>
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] kex follows: False
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] Compression: none
2025-12-12T10:06:19.685 [DEBUG] [Thread-67169] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:06:19.701 [DEBUG] [Thread-67169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:06:19.701 [DEBUG] [Thread-67169] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:06:19.701 [DEBUG] [Thread-67169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:06:19.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:06:19.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:06:19.702 [DEBUG] [Thread-67169] [transport.py] [_log()] userauth is OK
2025-12-12T10:06:19.702 [DEBUG] [Thread-67169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:06:19.702 [DEBUG] [Thread-67169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:06:19.702 [DEBUG] [Thread-67169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:06:19.702 [DEBUG] [Thread-67169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:06:19.722 [INFO] [Thread-67169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:06:19.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:06:20.348 [DEBUG] [Thread-67169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:06:20.348 [DEBUG] [Thread-67169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:06:20.348 [DEBUG] [Thread-67169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:06:20.389 [DEBUG] [Thread-67169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:06:20.389 [DEBUG] [Thread-67169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:06:20.392 [DEBUG] [Thread-67169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:06:20.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:06:20.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:06:20.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:06:20.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:06:20.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:06:20.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:06:20.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.337250 -999.00  +14.40  19.64     40   +1.00 1 2 1 1 1   888    0 11.12 -103.32 ----- 31.5 19.6 346.0 38.4 16.8 -11.8 16.5 -12.4 16.4 -11.6 16.6 -11.4
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.337250
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:06:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:05:46', tmtdew=15.04, humidity=35.54, cloud=0.0, wind=39.17, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:05:38.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:06:20.406 [DEBUG] [Thread-67169] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:06:20.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:06:20.491 [DEBUG] [Thread-67172] [transport.py] [_log()] starting thread (client mode): 0xf2d14850
2025-12-12T10:06:20.491 [DEBUG] [Thread-67172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:06:20.505 [DEBUG] [Thread-67172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:06:20.505 [INFO] [Thread-67172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:20.513 [DEBUG] [Thread-67172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] client lang: <none>
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] server lang: <none>
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] kex follows: False
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] Compression: none
2025-12-12T10:06:20.514 [DEBUG] [Thread-67172] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:06:20.569 [DEBUG] [Thread-67172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:06:20.569 [DEBUG] [Thread-67172] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:06:20.570 [DEBUG] [Thread-67172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:06:20.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:06:20.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:06:20.627 [DEBUG] [Thread-67172] [transport.py] [_log()] userauth is OK
2025-12-12T10:06:20.627 [DEBUG] [Thread-67172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:06:20.627 [DEBUG] [Thread-67172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:06:20.627 [DEBUG] [Thread-67172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:06:20.627 [DEBUG] [Thread-67172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:06:20.641 [INFO] [Thread-67172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:06:20.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:06:20.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:06:21.481 [DEBUG] [Thread-67172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:06:21.481 [DEBUG] [Thread-67172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:06:21.529 [DEBUG] [Thread-67172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:06:21.529 [DEBUG] [Thread-67172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:06:21.540 [DEBUG] [Thread-67172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:06:21.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:06:21.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:06: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
2025-12-12T10:06:21.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:06:21.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:06:21.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:06:21.577 [DEBUG] [Thread-67172] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:06:25.641 [DEBUG] [Thread-67174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:29.654 [DEBUG] [Thread-67175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:34.522 [DEBUG] [Thread-67176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:34.695 [DEBUG] [Thread-67177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:43.716 [DEBUG] [Thread-67178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:44.724 [DEBUG] [Thread-67179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:51.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:06:51.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:06:51.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:06:52.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 6, 18), 15.04, 35.54, 0.0, 40.67, 14.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:06:52.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:06:18
2025-12-12T10:06:52.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:06:52.617 [DEBUG] [Thread-67180] [transport.py] [_log()] starting thread (client mode): 0xf2d16860
2025-12-12T10:06:52.617 [DEBUG] [Thread-67180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:06:52.637 [DEBUG] [Thread-67180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:06:52.637 [INFO] [Thread-67180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] client lang: <none>
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] server lang: <none>
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] kex follows: False
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:06:52.640 [DEBUG] [Thread-67180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:06:52.641 [DEBUG] [Thread-67180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:06:52.641 [DEBUG] [Thread-67180] [transport.py] [_log()] Compression: none
2025-12-12T10:06:52.641 [DEBUG] [Thread-67180] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:06:52.655 [DEBUG] [Thread-67180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:06:52.655 [DEBUG] [Thread-67180] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:06:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:06:52.655 [DEBUG] [Thread-67180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:06:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:06:52.656 [DEBUG] [Thread-67180] [transport.py] [_log()] userauth is OK
2025-12-12T10:06:52.656 [DEBUG] [Thread-67180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:06:52.656 [DEBUG] [Thread-67180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:06:52.656 [DEBUG] [Thread-67180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:06:52.656 [DEBUG] [Thread-67180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:06:52.671 [INFO] [Thread-67180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:06:52.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:06:52.747 [DEBUG] [Thread-67182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:06:53.333 [DEBUG] [Thread-67180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:06:53.334 [DEBUG] [Thread-67180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:06:53.334 [DEBUG] [Thread-67180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:06:53.375 [DEBUG] [Thread-67180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:06:53.375 [DEBUG] [Thread-67180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:06:53.379 [DEBUG] [Thread-67180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:06:53.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:06:53.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:06:53.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:06:53.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:06:53.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:06:53.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:06:53.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:06:53.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:06:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:06:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.337597 -999.00  +14.20  28.93     41   +1.30 1 2 1 1 1   888    0 10.14 -117.81 ----- 31.8 28.9 358.0 45.2 16.8 -12.1 16.5 -12.7 16.4 -11.9 16.6 -11.7
2025-12-12T10:06:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:06:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:06:53.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.337597
2025-12-12T10:06:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:06:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:06:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:06:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:06:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:06:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:06:18', tmtdew=15.04, humidity=35.54, cloud=0.0, wind=40.67, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:06:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:06:53.402 [DEBUG] [Thread-67180] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:06:53.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:06:53.498 [DEBUG] [Thread-67184] [transport.py] [_log()] starting thread (client mode): 0xf2d15f00
2025-12-12T10:06:53.498 [DEBUG] [Thread-67184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:06:53.513 [DEBUG] [Thread-67184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:06:53.513 [INFO] [Thread-67184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:06:53.520 [DEBUG] [Thread-67184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] client lang: <none>
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] server lang: <none>
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] kex follows: False
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:06:53.521 [DEBUG] [Thread-67184] [transport.py] [_log()] Compression: none
2025-12-12T10:06:53.522 [DEBUG] [Thread-67184] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:06:53.579 [DEBUG] [Thread-67184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:06:53.579 [DEBUG] [Thread-67184] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:06:53.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:06:53.580 [DEBUG] [Thread-67184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:06:53.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:06:53.635 [DEBUG] [Thread-67184] [transport.py] [_log()] userauth is OK
2025-12-12T10:06:53.635 [DEBUG] [Thread-67184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:06:53.635 [DEBUG] [Thread-67184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:06:53.636 [DEBUG] [Thread-67184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:06:53.636 [DEBUG] [Thread-67184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:06:53.654 [INFO] [Thread-67184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:06:53.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:06:53.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:06:54.504 [DEBUG] [Thread-67184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:06:54.505 [DEBUG] [Thread-67184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:06:54.552 [DEBUG] [Thread-67184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:06:54.552 [DEBUG] [Thread-67184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:06:54.561 [DEBUG] [Thread-67184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:06:54.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:06:54.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:06:54.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:06:54.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:06:54.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:06:54.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:06:54.598 [DEBUG] [Thread-67184] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:06:59.768 [DEBUG] [Thread-67186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:01.796 [DEBUG] [Thread-67187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:10.819 [DEBUG] [Thread-67188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:14.827 [DEBUG] [Thread-67189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:15.557 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:15.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:19.841 [DEBUG] [Thread-67190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:24.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:07:24.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:07:24.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:07:25.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 6, 50), 14.62, 36.6, 0.0, 45.17, 14.27, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:07:25.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:06:50
2025-12-12T10:07:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:07:25.584 [DEBUG] [Thread-67191] [transport.py] [_log()] starting thread (client mode): 0xf578bf70
2025-12-12T10:07:25.584 [DEBUG] [Thread-67191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:07:25.605 [DEBUG] [Thread-67191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:07:25.605 [INFO] [Thread-67191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:07:25.609 [DEBUG] [Thread-67191] [transport.py] [_log()] client lang: <none>
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] server lang: <none>
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] kex follows: False
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] Compression: none
2025-12-12T10:07:25.610 [DEBUG] [Thread-67191] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:07:25.628 [DEBUG] [Thread-67191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:07:25.628 [DEBUG] [Thread-67191] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:07:25.629 [DEBUG] [Thread-67191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:07:25.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:07:25.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:07:25.631 [DEBUG] [Thread-67191] [transport.py] [_log()] userauth is OK
2025-12-12T10:07:25.631 [DEBUG] [Thread-67191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:07:25.631 [DEBUG] [Thread-67191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:07:25.631 [DEBUG] [Thread-67191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:07:25.631 [DEBUG] [Thread-67191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:07:25.652 [INFO] [Thread-67191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:07:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:07:26.258 [DEBUG] [Thread-67191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:07:26.258 [DEBUG] [Thread-67191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:07:26.258 [DEBUG] [Thread-67191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:07:26.299 [DEBUG] [Thread-67191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:07:26.299 [DEBUG] [Thread-67191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:07:26.303 [DEBUG] [Thread-67191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:07:26.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:07:26.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:07:26.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:07:26.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:07:26.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:07:26.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:07:26.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:07:26.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:07:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:07:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.337945 -999.00  +14.20  38.08     41   +1.40 1 2 2 1 1   888    0 11.01 -104.18 ----- 21.9 38.1 359.2 43.2 16.8 -12.1 16.4 -12.3 16.2 -12.2 16.5 -11.7
2025-12-12T10:07:26.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:07:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:07:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.337945
2025-12-12T10:07:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:07:26.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:07:26.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:07:26.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:07:26.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:07:26.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:06:50', tmtdew=14.62, humidity=36.6, cloud=0.0, wind=45.17, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:06:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:07:26.330 [DEBUG] [Thread-67191] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:07:26.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:07:26.427 [DEBUG] [Thread-67194] [transport.py] [_log()] starting thread (client mode): 0xf5789b40
2025-12-12T10:07:26.427 [DEBUG] [Thread-67194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:07:26.442 [DEBUG] [Thread-67194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:07:26.443 [INFO] [Thread-67194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:07:26.450 [DEBUG] [Thread-67194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:07:26.450 [DEBUG] [Thread-67194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:07:26.450 [DEBUG] [Thread-67194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] client lang: <none>
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] server lang: <none>
2025-12-12T10:07:26.451 [DEBUG] [Thread-67194] [transport.py] [_log()] kex follows: False
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] Compression: none
2025-12-12T10:07:26.452 [DEBUG] [Thread-67194] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:07:26.512 [DEBUG] [Thread-67194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:07:26.512 [DEBUG] [Thread-67194] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:07:26.513 [DEBUG] [Thread-67194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:07:26.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:07:26.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:07:26.570 [DEBUG] [Thread-67194] [transport.py] [_log()] userauth is OK
2025-12-12T10:07:26.570 [DEBUG] [Thread-67194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:07:26.571 [DEBUG] [Thread-67194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:07:26.571 [DEBUG] [Thread-67194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:07:26.571 [DEBUG] [Thread-67194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:07:26.586 [INFO] [Thread-67194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:07:26.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:07:26.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:07:27.511 [DEBUG] [Thread-67194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:07:27.512 [DEBUG] [Thread-67194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:07:27.559 [DEBUG] [Thread-67194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:07:27.559 [DEBUG] [Thread-67194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:07:27.568 [DEBUG] [Thread-67194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:07:27.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:07:27.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:07:27.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:07:27.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:07:27.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:07:27.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:07:27.605 [DEBUG] [Thread-67194] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:07:28.865 [DEBUG] [Thread-67196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:29.873 [DEBUG] [Thread-67197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:34.576 [DEBUG] [Thread-67198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:37.922 [DEBUG] [Thread-67199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:44.943 [DEBUG] [Thread-67200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:46.958 [DEBUG] [Thread-67201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:55.974 [DEBUG] [Thread-67202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:07:57.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:07:57.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:07:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:07:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 7, 54), 14.56, 36.65, 0.0, 46.37, 14.38, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:07:58.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:07:54
2025-12-12T10:07:58.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:07:58.622 [DEBUG] [Thread-67203] [transport.py] [_log()] starting thread (client mode): 0xf2d16110
2025-12-12T10:07:58.622 [DEBUG] [Thread-67203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:07:58.643 [DEBUG] [Thread-67203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:07:58.643 [INFO] [Thread-67203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] client lang: <none>
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] server lang: <none>
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] kex follows: False
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] Compression: none
2025-12-12T10:07:58.644 [DEBUG] [Thread-67203] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:07:58.659 [DEBUG] [Thread-67203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:07:58.660 [DEBUG] [Thread-67203] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:07:58.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:07:58.661 [DEBUG] [Thread-67203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:07:58.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:07:58.664 [DEBUG] [Thread-67203] [transport.py] [_log()] userauth is OK
2025-12-12T10:07:58.664 [DEBUG] [Thread-67203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:07:58.664 [DEBUG] [Thread-67203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:07:58.664 [DEBUG] [Thread-67203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:07:58.664 [DEBUG] [Thread-67203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:07:58.683 [INFO] [Thread-67203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:07:58.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:07:59.429 [DEBUG] [Thread-67203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:07:59.429 [DEBUG] [Thread-67203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:07:59.430 [DEBUG] [Thread-67203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:07:59.471 [DEBUG] [Thread-67203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:07:59.471 [DEBUG] [Thread-67203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:07:59.474 [DEBUG] [Thread-67203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:07:59.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:07:59.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:07:59.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:07:59.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:07:59.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:07:59.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:07:59.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:07:59.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:07:59.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:07:59.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.338292 -999.00  +14.30  22.55     42   +1.60 1 2 1 1 1   888    0 10.42 -106.79 ----- 24.7 22.6 9.5 38.7 16.8 -12.8 16.5 -12.7 16.3 -12.6 16.5 -13.8
2025-12-12T10:07:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:07:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:07:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.338292
2025-12-12T10:07:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:07:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:07:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:07:59.503 [DEBUG] [Thread-67203] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:07:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:07:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:07:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:07:54', tmtdew=14.56, humidity=36.65, cloud=0.0, wind=46.37, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:07:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:07:59.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:07:59.599 [DEBUG] [Thread-67206] [transport.py] [_log()] starting thread (client mode): 0xf2d14a60
2025-12-12T10:07:59.599 [DEBUG] [Thread-67206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:07:59.613 [DEBUG] [Thread-67206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:07:59.613 [INFO] [Thread-67206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:07:59.620 [DEBUG] [Thread-67206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] client lang: <none>
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] server lang: <none>
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] kex follows: False
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] Compression: none
2025-12-12T10:07:59.621 [DEBUG] [Thread-67206] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:07:59.678 [DEBUG] [Thread-67206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:07:59.679 [DEBUG] [Thread-67206] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:07:59.679 [DEBUG] [Thread-67206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:07:59.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:07:59.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:07:59.735 [DEBUG] [Thread-67206] [transport.py] [_log()] userauth is OK
2025-12-12T10:07:59.735 [DEBUG] [Thread-67206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:07:59.735 [DEBUG] [Thread-67206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:07:59.736 [DEBUG] [Thread-67206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:07:59.736 [DEBUG] [Thread-67206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:07:59.754 [INFO] [Thread-67206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:07:59.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:07:59.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:07:59.989 [DEBUG] [Thread-67208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:00.607 [DEBUG] [Thread-67206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:08:00.608 [DEBUG] [Thread-67206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:08:00.658 [DEBUG] [Thread-67206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:08:00.658 [DEBUG] [Thread-67206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:08:00.672 [DEBUG] [Thread-67206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:08:00.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:08:00.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:08:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:08:00.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:08:00.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:08:00.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:08:00.711 [DEBUG] [Thread-67206] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:08:05.021 [DEBUG] [Thread-67209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:14.043 [DEBUG] [Thread-67210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:15.051 [DEBUG] [Thread-67211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:15.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:15.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:23.076 [DEBUG] [Thread-67212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:30.091 [DEBUG] [Thread-67213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:30.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:08:30.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:08:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:08:31.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 8, 26), 14.33, 37.23, 0.0, 44.73, 14.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:08:31.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:08:26
2025-12-12T10:08:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:08:31.735 [DEBUG] [Thread-67214] [transport.py] [_log()] starting thread (client mode): 0xf8154250
2025-12-12T10:08:31.735 [DEBUG] [Thread-67214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:08:31.757 [DEBUG] [Thread-67214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:08:31.757 [INFO] [Thread-67214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:08:31.761 [DEBUG] [Thread-67214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] client lang: <none>
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] server lang: <none>
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] kex follows: False
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] Compression: none
2025-12-12T10:08:31.762 [DEBUG] [Thread-67214] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:08:31.783 [DEBUG] [Thread-67214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:08:31.783 [DEBUG] [Thread-67214] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:08:31.783 [DEBUG] [Thread-67214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:08:31.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:08:31.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:08:31.784 [DEBUG] [Thread-67214] [transport.py] [_log()] userauth is OK
2025-12-12T10:08:31.784 [DEBUG] [Thread-67214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:08:31.784 [DEBUG] [Thread-67214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:08:31.784 [DEBUG] [Thread-67214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:08:31.784 [DEBUG] [Thread-67214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:08:31.803 [INFO] [Thread-67214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:08:31.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:08:32.097 [DEBUG] [Thread-67216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:32.440 [DEBUG] [Thread-67214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:08:32.440 [DEBUG] [Thread-67214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:08:32.440 [DEBUG] [Thread-67214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:08:32.482 [DEBUG] [Thread-67214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:08:32.482 [DEBUG] [Thread-67214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:08:32.485 [DEBUG] [Thread-67214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:08:32.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:08:32.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:08:32.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:08:32.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:08:32.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:08:32.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:08:32.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:08:32.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.338639 -999.00  +14.30  32.00     41   +1.30 1 2 2 1 1   888    0 10.45 -112.84 ----- 30.2 32.0 359.0 52.9 16.8 -12.1 16.5 -12.8 16.3 -12.0 16.5 -12.4
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.338639
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:08:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:08:26', tmtdew=14.33, humidity=37.23, cloud=0.0, wind=44.73, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:07:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:08:32.507 [DEBUG] [Thread-67214] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:08:32.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:08:32.596 [DEBUG] [Thread-67218] [transport.py] [_log()] starting thread (client mode): 0xf8157190
2025-12-12T10:08:32.596 [DEBUG] [Thread-67218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:08:32.611 [DEBUG] [Thread-67218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:08:32.611 [INFO] [Thread-67218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] client lang: <none>
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] server lang: <none>
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] kex follows: False
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] Compression: none
2025-12-12T10:08:32.618 [DEBUG] [Thread-67218] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:08:32.677 [DEBUG] [Thread-67218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:08:32.677 [DEBUG] [Thread-67218] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:08:32.677 [DEBUG] [Thread-67218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:08:32.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:08:32.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:08:32.734 [DEBUG] [Thread-67218] [transport.py] [_log()] userauth is OK
2025-12-12T10:08:32.734 [DEBUG] [Thread-67218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:08:32.734 [DEBUG] [Thread-67218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:08:32.734 [DEBUG] [Thread-67218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:08:32.734 [DEBUG] [Thread-67218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:08:32.751 [INFO] [Thread-67218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:08:32.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:08:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:08:33.582 [DEBUG] [Thread-67218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:08:33.583 [DEBUG] [Thread-67218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:08:33.630 [DEBUG] [Thread-67218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:08:33.630 [DEBUG] [Thread-67218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:08:33.639 [DEBUG] [Thread-67218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:08:33.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:08:33.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:08:33.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:08:33.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:08:33.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:08:33.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:08:33.670 [DEBUG] [Thread-67218] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:08:34.620 [DEBUG] [Thread-67220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:41.119 [DEBUG] [Thread-67221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:45.133 [DEBUG] [Thread-67222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:50.176 [DEBUG] [Thread-67223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:08:59.200 [DEBUG] [Thread-67224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:00.204 [DEBUG] [Thread-67225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:03.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:09:03.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:09:03.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:09:04.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 8, 58), 14.19, 37.86, 0.0, 40.93, 14.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:09:04.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:08:58
2025-12-12T10:09:04.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:09:04.640 [DEBUG] [Thread-67226] [transport.py] [_log()] starting thread (client mode): 0xf2d16b30
2025-12-12T10:09:04.640 [DEBUG] [Thread-67226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:09:04.651 [DEBUG] [Thread-67226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:09:04.651 [INFO] [Thread-67226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] client lang: <none>
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] server lang: <none>
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] kex follows: False
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] Compression: none
2025-12-12T10:09:04.653 [DEBUG] [Thread-67226] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:09:04.663 [DEBUG] [Thread-67226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:09:04.663 [DEBUG] [Thread-67226] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:09:04.664 [DEBUG] [Thread-67226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:09:04.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:09:04.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:09:04.665 [DEBUG] [Thread-67226] [transport.py] [_log()] userauth is OK
2025-12-12T10:09:04.665 [DEBUG] [Thread-67226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:09:04.665 [DEBUG] [Thread-67226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:09:04.665 [DEBUG] [Thread-67226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:09:04.665 [DEBUG] [Thread-67226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:09:04.678 [INFO] [Thread-67226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:09:04.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:09:05.448 [DEBUG] [Thread-67226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:09:05.448 [DEBUG] [Thread-67226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:09:05.448 [DEBUG] [Thread-67226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:09:05.489 [DEBUG] [Thread-67226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:09:05.489 [DEBUG] [Thread-67226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:09:05.491 [DEBUG] [Thread-67226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:09:05.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:09:05.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:09:05.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:09:05.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:09:05.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:09:05.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:09:05.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:09:05.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:09:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:09:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.339333 -999.00  +14.40  26.95     43   +2.10 1 2 1 1 1   888    0 10.62 -111.29 ----- 19.5 26.9 341.9 36.4 16.8 -12.1 16.6 -12.4 16.3 -13.5 16.6 -12.2
2025-12-12T10:09:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:09:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:09:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.339333
2025-12-12T10:09:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:09:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:09:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:09:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:09:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:09:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:08:58', tmtdew=14.19, humidity=37.86, cloud=0.0, wind=40.93, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:08:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:09:05.506 [DEBUG] [Thread-67226] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:09:05.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:09:05.596 [DEBUG] [Thread-67229] [transport.py] [_log()] starting thread (client mode): 0xf2d14100
2025-12-12T10:09:05.596 [DEBUG] [Thread-67229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:09:05.611 [DEBUG] [Thread-67229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:09:05.611 [INFO] [Thread-67229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:09:05.618 [DEBUG] [Thread-67229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] client lang: <none>
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] server lang: <none>
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] kex follows: False
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] Compression: none
2025-12-12T10:09:05.619 [DEBUG] [Thread-67229] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:09:05.679 [DEBUG] [Thread-67229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:09:05.680 [DEBUG] [Thread-67229] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:09:05.680 [DEBUG] [Thread-67229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:09:05.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:09:05.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:09:05.741 [DEBUG] [Thread-67229] [transport.py] [_log()] userauth is OK
2025-12-12T10:09:05.741 [DEBUG] [Thread-67229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:09:05.741 [DEBUG] [Thread-67229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:09:05.741 [DEBUG] [Thread-67229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:09:05.741 [DEBUG] [Thread-67229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:09:05.759 [INFO] [Thread-67229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:09:05.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:09:05.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:09:06.627 [DEBUG] [Thread-67229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:09:06.628 [DEBUG] [Thread-67229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:09:06.675 [DEBUG] [Thread-67229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:09:06.675 [DEBUG] [Thread-67229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:09:06.684 [DEBUG] [Thread-67229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:09:06.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:09:06.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:09: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') -> 00000000
2025-12-12T10:09:06.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:09:06.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:09:06.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:09:06.721 [DEBUG] [Thread-67229] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:09:08.221 [DEBUG] [Thread-67231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:15.236 [DEBUG] [Thread-67232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:15.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:15.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:17.264 [DEBUG] [Thread-67233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:26.290 [DEBUG] [Thread-67234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:30.304 [DEBUG] [Thread-67235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:34.673 [DEBUG] [Thread-67236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:35.326 [DEBUG] [Thread-67237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:09:36.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:09:36.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:09:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 9, 30), 14.34, 37.48, 0.0, 39.54, 14.57, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:09:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:09:30
2025-12-12T10:09:37.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:09:37.678 [DEBUG] [Thread-67238] [transport.py] [_log()] starting thread (client mode): 0xf578a740
2025-12-12T10:09:37.678 [DEBUG] [Thread-67238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:09:37.698 [DEBUG] [Thread-67238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:09:37.698 [INFO] [Thread-67238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] client lang: <none>
2025-12-12T10:09:37.702 [DEBUG] [Thread-67238] [transport.py] [_log()] server lang: <none>
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] kex follows: False
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] Compression: none
2025-12-12T10:09:37.703 [DEBUG] [Thread-67238] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:09:37.720 [DEBUG] [Thread-67238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:09:37.721 [DEBUG] [Thread-67238] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:09:37.721 [DEBUG] [Thread-67238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:09:37.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:09:37.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:09:37.724 [DEBUG] [Thread-67238] [transport.py] [_log()] userauth is OK
2025-12-12T10:09:37.724 [DEBUG] [Thread-67238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:09:37.724 [DEBUG] [Thread-67238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:09:37.724 [DEBUG] [Thread-67238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:09:37.724 [DEBUG] [Thread-67238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:09:37.748 [INFO] [Thread-67238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:09:37.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:09:38.426 [DEBUG] [Thread-67238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:09:38.426 [DEBUG] [Thread-67238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:09:38.427 [DEBUG] [Thread-67238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:09:38.467 [DEBUG] [Thread-67238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:09:38.467 [DEBUG] [Thread-67238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:09:38.470 [DEBUG] [Thread-67238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:09:38.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:09:38.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:09:38.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:09:38.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:09:38.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:09:38.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:09:38.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:09:38.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:09:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:09:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.339681 -999.00  +14.40  39.30     42   +1.90 1 2 2 1 1   888    0 10.40 -107.43 ----- 28.5 39.3 12.1 52.2 16.9 -12.4 16.6 -13.4 16.3 -12.8 16.6 -12.6
2025-12-12T10:09:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:09:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:09:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.339681
2025-12-12T10:09:38.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:09:38.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:09:38.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:09:38.495 [DEBUG] [Thread-67238] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:09:38.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:09:38.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:09:38.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:09:30', tmtdew=14.34, humidity=37.48, cloud=0.0, wind=39.54, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:09:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:09:38.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:09:38.588 [DEBUG] [Thread-67241] [transport.py] [_log()] starting thread (client mode): 0xf5788070
2025-12-12T10:09:38.589 [DEBUG] [Thread-67241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:09:38.603 [DEBUG] [Thread-67241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:09:38.604 [INFO] [Thread-67241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:09:38.611 [DEBUG] [Thread-67241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:09:38.612 [DEBUG] [Thread-67241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:09:38.612 [DEBUG] [Thread-67241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:09:38.612 [DEBUG] [Thread-67241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:38.612 [DEBUG] [Thread-67241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:09:38.612 [DEBUG] [Thread-67241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] client lang: <none>
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] server lang: <none>
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] kex follows: False
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] Compression: none
2025-12-12T10:09:38.613 [DEBUG] [Thread-67241] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:09:38.670 [DEBUG] [Thread-67241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:09:38.670 [DEBUG] [Thread-67241] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:09:38.671 [DEBUG] [Thread-67241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:09:38.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:09:38.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:09:38.726 [DEBUG] [Thread-67241] [transport.py] [_log()] userauth is OK
2025-12-12T10:09:38.726 [DEBUG] [Thread-67241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:09:38.726 [DEBUG] [Thread-67241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:09:38.726 [DEBUG] [Thread-67241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:09:38.726 [DEBUG] [Thread-67241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:09:38.744 [INFO] [Thread-67241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:09:38.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:09:38.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:09:39.601 [DEBUG] [Thread-67241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:09:39.601 [DEBUG] [Thread-67241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:09:39.649 [DEBUG] [Thread-67241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:09:39.649 [DEBUG] [Thread-67241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:09:39.658 [DEBUG] [Thread-67241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:09:39.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:09:39.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:09:39.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:09:39.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:09:39.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:09:39.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:09:39.694 [DEBUG] [Thread-67241] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:09:44.347 [DEBUG] [Thread-67243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:45.355 [DEBUG] [Thread-67244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:09:53.391 [DEBUG] [Thread-67245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:00.411 [DEBUG] [Thread-67246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:02.419 [DEBUG] [Thread-67247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:09.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:10:09.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:10:09.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:10:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 10, 2), 14.37, 37.41, 0.0, 42.1, 14.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:10:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:10:02
2025-12-12T10:10:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:10:10.678 [DEBUG] [Thread-67248] [transport.py] [_log()] starting thread (client mode): 0xf2d14490
2025-12-12T10:10:10.678 [DEBUG] [Thread-67248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:10:10.690 [DEBUG] [Thread-67248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:10:10.690 [INFO] [Thread-67248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] client lang: <none>
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] server lang: <none>
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] kex follows: False
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] Compression: none
2025-12-12T10:10:10.692 [DEBUG] [Thread-67248] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:10:10.709 [DEBUG] [Thread-67248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:10:10.709 [DEBUG] [Thread-67248] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:10:10.709 [DEBUG] [Thread-67248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:10:10.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:10:10.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:10:10.710 [DEBUG] [Thread-67248] [transport.py] [_log()] userauth is OK
2025-12-12T10:10:10.710 [DEBUG] [Thread-67248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:10:10.710 [DEBUG] [Thread-67248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:10:10.710 [DEBUG] [Thread-67248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:10:10.710 [DEBUG] [Thread-67248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:10:10.720 [INFO] [Thread-67248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:10:10.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:10:11.435 [DEBUG] [Thread-67250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:11.784 [DEBUG] [Thread-67248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:10:11.784 [DEBUG] [Thread-67248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:10:11.784 [DEBUG] [Thread-67248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:10:11.825 [DEBUG] [Thread-67248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:10:11.825 [DEBUG] [Thread-67248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:10:11.828 [DEBUG] [Thread-67248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:10:11.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:10:11.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:10:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:10:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:10:11.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:10:11.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:10:11.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.340028 -999.00  +14.20  36.20     42   +1.70 1 2 2 1 1   888    0 10.39 -108.57 ----- 27.2 36.2 333.8 43.6 16.8 -13.7 16.4 -13.0 16.3 -13.7 16.5 -15.3
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.340028
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:10:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:10:02', tmtdew=14.37, humidity=37.41, cloud=0.0, wind=42.1, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:09:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:10:11.849 [DEBUG] [Thread-67248] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:10:11.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:10:11.931 [DEBUG] [Thread-67252] [transport.py] [_log()] starting thread (client mode): 0xf57bd9c0
2025-12-12T10:10:11.932 [DEBUG] [Thread-67252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:10:11.947 [DEBUG] [Thread-67252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:10:11.947 [INFO] [Thread-67252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:10:11.954 [DEBUG] [Thread-67252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] client lang: <none>
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] server lang: <none>
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] kex follows: False
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] Compression: none
2025-12-12T10:10:11.955 [DEBUG] [Thread-67252] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:10:12.013 [DEBUG] [Thread-67252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:10:12.013 [DEBUG] [Thread-67252] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:10:12.013 [DEBUG] [Thread-67252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:10:12.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:10:12.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:10:12.070 [DEBUG] [Thread-67252] [transport.py] [_log()] userauth is OK
2025-12-12T10:10:12.070 [DEBUG] [Thread-67252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:10:12.070 [DEBUG] [Thread-67252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:10:12.070 [DEBUG] [Thread-67252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:10:12.070 [DEBUG] [Thread-67252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:10:12.089 [INFO] [Thread-67252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:10:12.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:10:12.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:10:12.944 [DEBUG] [Thread-67252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:10:12.944 [DEBUG] [Thread-67252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:10:12.992 [DEBUG] [Thread-67252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:10:12.992 [DEBUG] [Thread-67252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:10:13.000 [DEBUG] [Thread-67252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:10:13.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:10: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')
2025-12-12T10:10:13.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:10:13.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:10:13.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:10:13.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:10:13.032 [DEBUG] [Thread-67252] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:10:15.443 [DEBUG] [Thread-67254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:15.999 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:16.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:20.464 [DEBUG] [Thread-67255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:29.480 [DEBUG] [Thread-67256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:30.484 [DEBUG] [Thread-67257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:34.720 [DEBUG] [Thread-67258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:38.501 [DEBUG] [Thread-67259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:43.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:10:43.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:10:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:10:43.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 10, 34), 14.14, 38.14, 0.0, 35.13, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:10:43.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:10:34
2025-12-12T10:10:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:10:44.019 [DEBUG] [Thread-67260] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-12T10:10:44.019 [DEBUG] [Thread-67260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:10:44.038 [DEBUG] [Thread-67260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:10:44.038 [INFO] [Thread-67260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] client lang: <none>
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] server lang: <none>
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] kex follows: False
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:10:44.041 [DEBUG] [Thread-67260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:10:44.042 [DEBUG] [Thread-67260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:10:44.042 [DEBUG] [Thread-67260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:10:44.042 [DEBUG] [Thread-67260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:10:44.042 [DEBUG] [Thread-67260] [transport.py] [_log()] Compression: none
2025-12-12T10:10:44.042 [DEBUG] [Thread-67260] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:10:44.059 [DEBUG] [Thread-67260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:10:44.059 [DEBUG] [Thread-67260] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:10:44.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:10:44.060 [DEBUG] [Thread-67260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:10:44.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:10:44.062 [DEBUG] [Thread-67260] [transport.py] [_log()] userauth is OK
2025-12-12T10:10:44.062 [DEBUG] [Thread-67260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:10:44.062 [DEBUG] [Thread-67260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:10:44.062 [DEBUG] [Thread-67260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:10:44.062 [DEBUG] [Thread-67260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:10:44.079 [INFO] [Thread-67260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:10:44.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:10:44.704 [DEBUG] [Thread-67260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:10:44.704 [DEBUG] [Thread-67260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:10:44.704 [DEBUG] [Thread-67260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:10:44.745 [DEBUG] [Thread-67260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:10:44.745 [DEBUG] [Thread-67260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:10:44.748 [DEBUG] [Thread-67260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:10:44.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:10:44.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:10:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:10:44.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:10:44.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:10:44.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:10:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:10:44.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:10:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:10:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.340317 -999.00  +14.40  38.43     42   +1.70 1 2 2 1 1   888    0 10.68 -108.10 ----- 26.0 38.4 8.4 42.9 16.9 -12.7 16.6 -14.2 16.4 -13.2 16.6 -13.2
2025-12-12T10:10:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:10:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:10:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.340317
2025-12-12T10:10:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:10:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:10:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:10:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:10:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:10:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:10:34', tmtdew=14.14, humidity=38.14, cloud=0.0, wind=35.13, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:10:03.389', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:10:44.775 [DEBUG] [Thread-67260] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:10:44.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:10:44.870 [DEBUG] [Thread-67263] [transport.py] [_log()] starting thread (client mode): 0xf578b5b0
2025-12-12T10:10:44.870 [DEBUG] [Thread-67263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:10:44.885 [DEBUG] [Thread-67263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:10:44.885 [INFO] [Thread-67263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:10:44.892 [DEBUG] [Thread-67263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] client lang: <none>
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] server lang: <none>
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] kex follows: False
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:10:44.893 [DEBUG] [Thread-67263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:10:44.894 [DEBUG] [Thread-67263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:10:44.894 [DEBUG] [Thread-67263] [transport.py] [_log()] Compression: none
2025-12-12T10:10:44.894 [DEBUG] [Thread-67263] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:10:44.949 [DEBUG] [Thread-67263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:10:44.950 [DEBUG] [Thread-67263] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:10:44.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:10:44.951 [DEBUG] [Thread-67263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:10:44.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:10:45.006 [DEBUG] [Thread-67263] [transport.py] [_log()] userauth is OK
2025-12-12T10:10:45.006 [DEBUG] [Thread-67263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:10:45.006 [DEBUG] [Thread-67263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:10:45.007 [DEBUG] [Thread-67263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:10:45.007 [DEBUG] [Thread-67263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:10:45.026 [INFO] [Thread-67263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:10:45.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:10:45.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:10:45.521 [DEBUG] [Thread-67265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:45.871 [DEBUG] [Thread-67263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:10:45.871 [DEBUG] [Thread-67263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:10:45.918 [DEBUG] [Thread-67263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:10:45.919 [DEBUG] [Thread-67263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:10:45.928 [DEBUG] [Thread-67263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:10:45.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:10:45.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:10:45.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:10:45.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:10:45.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:10:45.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:10:45.961 [DEBUG] [Thread-67263] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:10:47.549 [DEBUG] [Thread-67266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:10:56.572 [DEBUG] [Thread-67267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:00.585 [DEBUG] [Thread-67268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:05.602 [DEBUG] [Thread-67269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:14.622 [DEBUG] [Thread-67270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:15.630 [DEBUG] [Thread-67271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:15.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:11:15.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:11:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:11:16.140 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:16.141 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 11, 6), 14.26, 37.81, 0.0, 34.76, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:11:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:11:06
2025-12-12T10:11:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:11:16.945 [DEBUG] [Thread-67272] [transport.py] [_log()] starting thread (client mode): 0xf578a650
2025-12-12T10:11:16.945 [DEBUG] [Thread-67272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:11:16.966 [DEBUG] [Thread-67272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:11:16.966 [INFO] [Thread-67272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] client lang: <none>
2025-12-12T10:11:16.970 [DEBUG] [Thread-67272] [transport.py] [_log()] server lang: <none>
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] kex follows: False
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] Compression: none
2025-12-12T10:11:16.971 [DEBUG] [Thread-67272] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:11:16.991 [DEBUG] [Thread-67272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:11:16.991 [DEBUG] [Thread-67272] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:11:16.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:11:16.992 [DEBUG] [Thread-67272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:11:17.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:11:17.003 [DEBUG] [Thread-67272] [transport.py] [_log()] userauth is OK
2025-12-12T10:11:17.003 [DEBUG] [Thread-67272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:11:17.003 [DEBUG] [Thread-67272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:11:17.003 [DEBUG] [Thread-67272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:11:17.003 [DEBUG] [Thread-67272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:11:17.028 [INFO] [Thread-67272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:11:17.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:11:17.842 [DEBUG] [Thread-67272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:11:17.842 [DEBUG] [Thread-67272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:11:17.842 [DEBUG] [Thread-67272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:11:17.883 [DEBUG] [Thread-67272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:11:17.883 [DEBUG] [Thread-67272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:11:17.887 [DEBUG] [Thread-67272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:11:17.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:11:17.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:11:17.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:11:17.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:11:17.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:11:17.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:11:17.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:11:17.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:11:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:11:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.340722 -999.00  +14.60  24.41     43   +2.20 1 2 1 1 1   888    0 10.62 -104.04 ----- 24.9 24.4 2.4 38.7 17.0 -13.2 16.7 -13.5 16.4 -13.9 16.7 -14.0
2025-12-12T10:11:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:11:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:11:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.340722
2025-12-12T10:11:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:11:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:11:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:11:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:11:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:11:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:11:06', tmtdew=14.26, humidity=37.81, cloud=0.0, wind=34.76, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:10:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:11:17.916 [DEBUG] [Thread-67272] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:11:18.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:11:18.026 [DEBUG] [Thread-67275] [transport.py] [_log()] starting thread (client mode): 0xf572dc30
2025-12-12T10:11:18.027 [DEBUG] [Thread-67275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:11:18.041 [DEBUG] [Thread-67275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:11:18.041 [INFO] [Thread-67275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:11:18.048 [DEBUG] [Thread-67275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] client lang: <none>
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] server lang: <none>
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] kex follows: False
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:11:18.049 [DEBUG] [Thread-67275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:11:18.050 [DEBUG] [Thread-67275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:11:18.050 [DEBUG] [Thread-67275] [transport.py] [_log()] Compression: none
2025-12-12T10:11:18.050 [DEBUG] [Thread-67275] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:11:18.109 [DEBUG] [Thread-67275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:11:18.109 [DEBUG] [Thread-67275] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:11:18.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:11:18.110 [DEBUG] [Thread-67275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:11:18.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:11:18.167 [DEBUG] [Thread-67275] [transport.py] [_log()] userauth is OK
2025-12-12T10:11:18.168 [DEBUG] [Thread-67275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:11:18.168 [DEBUG] [Thread-67275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:11:18.168 [DEBUG] [Thread-67275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:11:18.168 [DEBUG] [Thread-67275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:11:18.187 [INFO] [Thread-67275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:11:18.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:11:18.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:11:19.019 [DEBUG] [Thread-67275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:11:19.019 [DEBUG] [Thread-67275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:11:19.067 [DEBUG] [Thread-67275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:11:19.067 [DEBUG] [Thread-67275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:11:19.077 [DEBUG] [Thread-67275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:11:19.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:11:19.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:11:19.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:11:19.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:11:19.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:11:19.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:11:19.118 [DEBUG] [Thread-67275] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:11:23.657 [DEBUG] [Thread-67277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:30.678 [DEBUG] [Thread-67278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:32.707 [DEBUG] [Thread-67279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:34.773 [DEBUG] [Thread-67280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:41.730 [DEBUG] [Thread-67281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:45.741 [DEBUG] [Thread-67282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:11:49.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:11:49.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:11:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 11, 38), 14.7, 36.68, 0.0, 32.62, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:11:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:11:38
2025-12-12T10:11:49.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:11:50.099 [DEBUG] [Thread-67283] [transport.py] [_log()] starting thread (client mode): 0xf2d16c20
2025-12-12T10:11:50.099 [DEBUG] [Thread-67283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:11:50.119 [DEBUG] [Thread-67283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:11:50.120 [INFO] [Thread-67283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] client lang: <none>
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] server lang: <none>
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] kex follows: False
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] Compression: none
2025-12-12T10:11:50.123 [DEBUG] [Thread-67283] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:11:50.141 [DEBUG] [Thread-67283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:11:50.142 [DEBUG] [Thread-67283] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:11:50.142 [DEBUG] [Thread-67283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:11:50.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:11:50.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:11:50.145 [DEBUG] [Thread-67283] [transport.py] [_log()] userauth is OK
2025-12-12T10:11:50.145 [DEBUG] [Thread-67283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:11:50.145 [DEBUG] [Thread-67283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:11:50.145 [DEBUG] [Thread-67283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:11:50.145 [DEBUG] [Thread-67283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:11:50.170 [INFO] [Thread-67283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:11:50.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:11:50.754 [DEBUG] [Thread-67285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:11:50.790 [DEBUG] [Thread-67283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:11:50.790 [DEBUG] [Thread-67283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:11:50.790 [DEBUG] [Thread-67283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:11:50.831 [DEBUG] [Thread-67283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:11:50.832 [DEBUG] [Thread-67283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:11:50.835 [DEBUG] [Thread-67283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:11:50.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:11:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:11:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:11:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:11:50.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:11:50.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:11:50.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:11:50.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:11:50.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:11:50.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.341070 -999.00  +14.50  36.63     41   +1.60 1 2 2 1 1   888    0 10.78 -104.02 ----- 29.1 36.6 349.3 48.9 17.0 -14.1 16.7 -14.2 16.4 -15.0 16.6 -14.9
2025-12-12T10:11:50.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:11:50.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:11:50.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.341070
2025-12-12T10:11:50.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:11:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:11:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:11:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:11:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:11:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:11:38', tmtdew=14.7, humidity=36.68, cloud=0.0, wind=32.62, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:11:08.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:11:50.859 [DEBUG] [Thread-67283] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:11:50.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:11:50.954 [DEBUG] [Thread-67287] [transport.py] [_log()] starting thread (client mode): 0xf5770fa0
2025-12-12T10:11:50.955 [DEBUG] [Thread-67287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:11:50.969 [DEBUG] [Thread-67287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:11:50.970 [INFO] [Thread-67287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:11:50.977 [DEBUG] [Thread-67287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] client lang: <none>
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] server lang: <none>
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] kex follows: False
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] Compression: none
2025-12-12T10:11:50.978 [DEBUG] [Thread-67287] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:11:51.037 [DEBUG] [Thread-67287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:11:51.038 [DEBUG] [Thread-67287] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:11:51.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:11:51.039 [DEBUG] [Thread-67287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:11:51.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:11:51.093 [DEBUG] [Thread-67287] [transport.py] [_log()] userauth is OK
2025-12-12T10:11:51.094 [DEBUG] [Thread-67287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:11:51.094 [DEBUG] [Thread-67287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:11:51.094 [DEBUG] [Thread-67287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:11:51.094 [DEBUG] [Thread-67287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:11:51.113 [INFO] [Thread-67287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:11:51.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:11:51.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:11:51.941 [DEBUG] [Thread-67287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:11:51.941 [DEBUG] [Thread-67287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:11:51.989 [DEBUG] [Thread-67287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:11:51.990 [DEBUG] [Thread-67287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:11:51.999 [DEBUG] [Thread-67287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:11:52.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:11:52.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:11:52.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:11:52.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:11:52.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:11:52.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:11:52.036 [DEBUG] [Thread-67287] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:11:59.777 [DEBUG] [Thread-67289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:00.785 [DEBUG] [Thread-67290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:08.832 [DEBUG] [Thread-67291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:15.851 [DEBUG] [Thread-67292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:16.280 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:16.281 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:17.864 [DEBUG] [Thread-67293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:22.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:12:22.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:12:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:12:22.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 12, 10), 14.77, 36.5, 0.0, 35.73, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:12:22.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:12:10
2025-12-12T10:12:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:12:23.075 [DEBUG] [Thread-67294] [transport.py] [_log()] starting thread (client mode): 0xf2d16b30
2025-12-12T10:12:23.075 [DEBUG] [Thread-67294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:12:23.094 [DEBUG] [Thread-67294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:12:23.094 [INFO] [Thread-67294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:12:23.097 [DEBUG] [Thread-67294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:12:23.097 [DEBUG] [Thread-67294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:12:23.097 [DEBUG] [Thread-67294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:12:23.097 [DEBUG] [Thread-67294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:23.097 [DEBUG] [Thread-67294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] client lang: <none>
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] server lang: <none>
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] kex follows: False
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] Compression: none
2025-12-12T10:12:23.098 [DEBUG] [Thread-67294] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:12:23.113 [DEBUG] [Thread-67294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:12:23.113 [DEBUG] [Thread-67294] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:12:23.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:12:23.114 [DEBUG] [Thread-67294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:12:23.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:12:23.114 [DEBUG] [Thread-67294] [transport.py] [_log()] userauth is OK
2025-12-12T10:12:23.114 [DEBUG] [Thread-67294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:12:23.114 [DEBUG] [Thread-67294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:12:23.114 [DEBUG] [Thread-67294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:12:23.114 [DEBUG] [Thread-67294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:12:23.127 [INFO] [Thread-67294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:12:23.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:12:23.918 [DEBUG] [Thread-67294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:12:23.918 [DEBUG] [Thread-67294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:12:23.918 [DEBUG] [Thread-67294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:12:23.959 [DEBUG] [Thread-67294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:12:23.959 [DEBUG] [Thread-67294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:12:23.961 [DEBUG] [Thread-67294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:12:23.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:12:23.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:12:23.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:12:23.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:12:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:12:23.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:12:23.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.341417 -999.00  +14.30  27.02     40   +1.20 1 2 1 1 1   888    0 10.91 -95.99 ----- 33.1 27.0 323.5 55.3 16.9 -15.6 16.6 -15.2 16.3 -15.9 16.6 -16.6
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.341417
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:12:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:12:10', tmtdew=14.77, humidity=36.5, cloud=0.0, wind=35.73, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:11:38.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:12:23.980 [DEBUG] [Thread-67294] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:12:24.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:12:24.066 [DEBUG] [Thread-67297] [transport.py] [_log()] starting thread (client mode): 0xf57bf9a0
2025-12-12T10:12:24.066 [DEBUG] [Thread-67297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:12:24.080 [DEBUG] [Thread-67297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:12:24.081 [INFO] [Thread-67297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] client lang: <none>
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] server lang: <none>
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] kex follows: False
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:12:24.088 [DEBUG] [Thread-67297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:12:24.089 [DEBUG] [Thread-67297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:12:24.089 [DEBUG] [Thread-67297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:12:24.089 [DEBUG] [Thread-67297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:12:24.089 [DEBUG] [Thread-67297] [transport.py] [_log()] Compression: none
2025-12-12T10:12:24.089 [DEBUG] [Thread-67297] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:12:24.143 [DEBUG] [Thread-67297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:12:24.143 [DEBUG] [Thread-67297] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:12:24.144 [DEBUG] [Thread-67297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:12:24.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:12:24.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:12:24.204 [DEBUG] [Thread-67297] [transport.py] [_log()] userauth is OK
2025-12-12T10:12:24.204 [DEBUG] [Thread-67297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:12:24.204 [DEBUG] [Thread-67297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:12:24.204 [DEBUG] [Thread-67297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:12:24.204 [DEBUG] [Thread-67297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:12:24.217 [INFO] [Thread-67297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:12:24.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:12:24.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:12:25.068 [DEBUG] [Thread-67297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:12:25.068 [DEBUG] [Thread-67297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:12:25.115 [DEBUG] [Thread-67297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:12:25.115 [DEBUG] [Thread-67297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:12:25.124 [DEBUG] [Thread-67297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:12:25.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:12:25.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:12:25.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:12:25.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:12:25.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:12:25.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:12:25.156 [DEBUG] [Thread-67297] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:12:26.882 [DEBUG] [Thread-67299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:30.894 [DEBUG] [Thread-67300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:34.828 [DEBUG] [Thread-67301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:35.928 [DEBUG] [Thread-67302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:44.953 [DEBUG] [Thread-67303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:45.960 [DEBUG] [Thread-67304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:53.988 [DEBUG] [Thread-67305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:12:55.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:12:55.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:12:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:12:55.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 12, 42), 14.26, 37.89, 0.0, 43.16, 14.97, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:12:55.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:12:42
2025-12-12T10:12:55.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:12:56.128 [DEBUG] [Thread-67306] [transport.py] [_log()] starting thread (client mode): 0xf2d15570
2025-12-12T10:12:56.128 [DEBUG] [Thread-67306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:12:56.148 [DEBUG] [Thread-67306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:12:56.148 [INFO] [Thread-67306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:12:56.151 [DEBUG] [Thread-67306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:12:56.151 [DEBUG] [Thread-67306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:12:56.151 [DEBUG] [Thread-67306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] client lang: <none>
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] server lang: <none>
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] kex follows: False
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:12:56.152 [DEBUG] [Thread-67306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:12:56.153 [DEBUG] [Thread-67306] [transport.py] [_log()] Compression: none
2025-12-12T10:12:56.153 [DEBUG] [Thread-67306] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:12:56.172 [DEBUG] [Thread-67306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:12:56.173 [DEBUG] [Thread-67306] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:12:56.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:12:56.174 [DEBUG] [Thread-67306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:12:56.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:12:56.176 [DEBUG] [Thread-67306] [transport.py] [_log()] userauth is OK
2025-12-12T10:12:56.177 [DEBUG] [Thread-67306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:12:56.177 [DEBUG] [Thread-67306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:12:56.177 [DEBUG] [Thread-67306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:12:56.177 [DEBUG] [Thread-67306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:12:56.199 [INFO] [Thread-67306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:12:56.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:12:56.850 [DEBUG] [Thread-67306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:12:56.850 [DEBUG] [Thread-67306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:12:56.851 [DEBUG] [Thread-67306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:12:56.891 [DEBUG] [Thread-67306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:12:56.891 [DEBUG] [Thread-67306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:12:56.894 [DEBUG] [Thread-67306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:12:56.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:12:56.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:12:56.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:12:56.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:12:56.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:12:56.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:12:56.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:12:56.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:12:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:12:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.342111 -999.00  +14.40  25.40     44   +2.50 1 2 1 1 1   888    0 10.61 -101.36 ----- 32.2 25.4 4.3 35.5 17.0 -14.2 16.8 -15.4 16.4 -15.5 16.7 -14.5
2025-12-12T10:12:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:12:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:12:56.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.342111
2025-12-12T10:12:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:12:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:12:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:12:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:12:56.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:12:56.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:12:42', tmtdew=14.26, humidity=37.89, cloud=0.0, wind=43.16, temperature=14.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:12:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:12:56.921 [DEBUG] [Thread-67306] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:12:57.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:12:57.017 [DEBUG] [Thread-67309] [transport.py] [_log()] starting thread (client mode): 0xf572be20
2025-12-12T10:12:57.017 [DEBUG] [Thread-67309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:12:57.032 [DEBUG] [Thread-67309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:12:57.032 [INFO] [Thread-67309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:12:57.040 [DEBUG] [Thread-67309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:12:57.040 [DEBUG] [Thread-67309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:12:57.040 [DEBUG] [Thread-67309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:12:57.040 [DEBUG] [Thread-67309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:57.040 [DEBUG] [Thread-67309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:12:57.040 [DEBUG] [Thread-67309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] client lang: <none>
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] server lang: <none>
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] kex follows: False
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:12:57.041 [DEBUG] [Thread-67309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:12:57.042 [DEBUG] [Thread-67309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:12:57.042 [DEBUG] [Thread-67309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:12:57.042 [DEBUG] [Thread-67309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:12:57.042 [DEBUG] [Thread-67309] [transport.py] [_log()] Compression: none
2025-12-12T10:12:57.042 [DEBUG] [Thread-67309] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:12:57.098 [DEBUG] [Thread-67309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:12:57.098 [DEBUG] [Thread-67309] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:12:57.099 [DEBUG] [Thread-67309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:12:57.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:12:57.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:12:57.157 [DEBUG] [Thread-67309] [transport.py] [_log()] userauth is OK
2025-12-12T10:12:57.157 [DEBUG] [Thread-67309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:12:57.157 [DEBUG] [Thread-67309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:12:57.157 [DEBUG] [Thread-67309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:12:57.158 [DEBUG] [Thread-67309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:12:57.177 [INFO] [Thread-67309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:12:57.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:12:57.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:12:58.051 [DEBUG] [Thread-67309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:12:58.051 [DEBUG] [Thread-67309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:12:58.100 [DEBUG] [Thread-67309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:12:58.100 [DEBUG] [Thread-67309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:12:58.109 [DEBUG] [Thread-67309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:12:58.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:12:58.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:12:58.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:12:58.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:12:58.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:12:58.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:12:58.148 [DEBUG] [Thread-67309] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:13:01.005 [DEBUG] [Thread-67311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:03.018 [DEBUG] [Thread-67312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:12.039 [DEBUG] [Thread-67313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:16.051 [DEBUG] [Thread-67314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:16.422 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:16.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:21.065 [DEBUG] [Thread-67315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:28.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:13:28.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:13:28.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:13:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 13, 14), 14.14, 38.22, 0.0, 42.26, 15.02, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:13:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:13:14
2025-12-12T10:13:28.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:13:29.127 [DEBUG] [Thread-67316] [transport.py] [_log()] starting thread (client mode): 0xf2d172b0
2025-12-12T10:13:29.127 [DEBUG] [Thread-67316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:13:29.142 [DEBUG] [Thread-67316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:13:29.142 [INFO] [Thread-67316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] client lang: <none>
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] server lang: <none>
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] kex follows: False
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] Compression: none
2025-12-12T10:13:29.146 [DEBUG] [Thread-67316] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:13:29.165 [DEBUG] [Thread-67316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:13:29.165 [DEBUG] [Thread-67316] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:13:29.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:13:29.166 [DEBUG] [Thread-67316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:13:29.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:13:29.168 [DEBUG] [Thread-67316] [transport.py] [_log()] userauth is OK
2025-12-12T10:13:29.168 [DEBUG] [Thread-67316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:13:29.168 [DEBUG] [Thread-67316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:13:29.168 [DEBUG] [Thread-67316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:13:29.168 [DEBUG] [Thread-67316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:13:29.186 [INFO] [Thread-67316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:13:29.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:13:29.976 [DEBUG] [Thread-67316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:13:29.976 [DEBUG] [Thread-67316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:13:29.976 [DEBUG] [Thread-67316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:13:30.017 [DEBUG] [Thread-67316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:13:30.017 [DEBUG] [Thread-67316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:13:30.021 [DEBUG] [Thread-67316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:13:30.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:13:30.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:13:30.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:13:30.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:13:30.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:13:30.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:13:30.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:13:30.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:13:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:13:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.342458 -999.00  +14.30  40.95     46   +2.90 1 2 2 1 1   888    0 10.24 -111.61 ----- 29.1 41.0 339.2 48.7 17.0 -15.3 16.7 -16.2 16.4 -15.9 16.6 -16.0
2025-12-12T10:13:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:13:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:13:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.342458
2025-12-12T10:13:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:13:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:13:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:13:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:13:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:13:30.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:13:14', tmtdew=14.14, humidity=38.22, cloud=0.0, wind=42.26, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:13:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:13:30.048 [DEBUG] [Thread-67316] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:13:30.086 [DEBUG] [Thread-67319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:30.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:13:30.143 [DEBUG] [Thread-67320] [transport.py] [_log()] starting thread (client mode): 0xf5789a50
2025-12-12T10:13:30.143 [DEBUG] [Thread-67320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:13:30.158 [DEBUG] [Thread-67320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:13:30.158 [INFO] [Thread-67320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:13:30.165 [DEBUG] [Thread-67320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] client lang: <none>
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] server lang: <none>
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] kex follows: False
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:13:30.166 [DEBUG] [Thread-67320] [transport.py] [_log()] Compression: none
2025-12-12T10:13:30.167 [DEBUG] [Thread-67320] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:13:30.230 [DEBUG] [Thread-67320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:13:30.231 [DEBUG] [Thread-67320] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:13:30.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:13:30.233 [DEBUG] [Thread-67320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:13:30.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:13:30.289 [DEBUG] [Thread-67320] [transport.py] [_log()] userauth is OK
2025-12-12T10:13:30.290 [DEBUG] [Thread-67320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:13:30.290 [DEBUG] [Thread-67320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:13:30.290 [DEBUG] [Thread-67320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:13:30.290 [DEBUG] [Thread-67320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:13:30.308 [INFO] [Thread-67320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:13:30.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:13:30.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:13:31.093 [DEBUG] [Thread-67322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:31.177 [DEBUG] [Thread-67320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:13:31.177 [DEBUG] [Thread-67320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:13:31.225 [DEBUG] [Thread-67320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:13:31.225 [DEBUG] [Thread-67320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:13:31.234 [DEBUG] [Thread-67320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:13:31.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:13:31.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:13:31.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:13:31.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:13:31.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:13:31.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:13:31.271 [DEBUG] [Thread-67320] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:13:34.892 [DEBUG] [Thread-67323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:39.141 [DEBUG] [Thread-67324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:46.157 [DEBUG] [Thread-67325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:48.166 [DEBUG] [Thread-67326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:13:57.190 [DEBUG] [Thread-67327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:01.204 [DEBUG] [Thread-67328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:14:01.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:14:01.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:14:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 13, 46), 13.48, 39.89, 0.0, 49.68, 14.77, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:14:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:13:46
2025-12-12T10:14:02.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:14:02.262 [DEBUG] [Thread-67329] [transport.py] [_log()] starting thread (client mode): 0xf57bdc00
2025-12-12T10:14:02.262 [DEBUG] [Thread-67329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:14:02.283 [DEBUG] [Thread-67329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:14:02.283 [INFO] [Thread-67329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] client lang: <none>
2025-12-12T10:14:02.286 [DEBUG] [Thread-67329] [transport.py] [_log()] server lang: <none>
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] kex follows: False
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] Compression: none
2025-12-12T10:14:02.287 [DEBUG] [Thread-67329] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:14:02.303 [DEBUG] [Thread-67329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:14:02.304 [DEBUG] [Thread-67329] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:14:02.304 [DEBUG] [Thread-67329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:14:02.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:14:02.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:14:02.307 [DEBUG] [Thread-67329] [transport.py] [_log()] userauth is OK
2025-12-12T10:14:02.307 [DEBUG] [Thread-67329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:14:02.307 [DEBUG] [Thread-67329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:14:02.307 [DEBUG] [Thread-67329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:14:02.307 [DEBUG] [Thread-67329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:14:02.331 [INFO] [Thread-67329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:14:02.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:14:02.958 [DEBUG] [Thread-67329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:14:02.958 [DEBUG] [Thread-67329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:14:02.958 [DEBUG] [Thread-67329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:14:02.998 [DEBUG] [Thread-67329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:14:02.998 [DEBUG] [Thread-67329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:14:03.001 [DEBUG] [Thread-67329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:14:03.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:14:03.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:14:03.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:14:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:14:03.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:14:03.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:14:03.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:14:03.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.342806 -999.00  +14.40  36.48     45   +2.80 1 2 2 1 1   888    0 9.75 -117.45 ----- 41.9 36.5 13.6 46.3 17.0 -14.8 16.6 -15.7 16.4 -15.8 16.6 -15.1
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.342806
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:14:03.020 [DEBUG] [Thread-67329] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:14:03.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:13:46', tmtdew=13.48, humidity=39.89, cloud=0.0, wind=49.68, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:13:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:14:03.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:14:03.111 [DEBUG] [Thread-67332] [transport.py] [_log()] starting thread (client mode): 0xf2d17eb0
2025-12-12T10:14:03.111 [DEBUG] [Thread-67332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:14:03.129 [DEBUG] [Thread-67332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:14:03.130 [INFO] [Thread-67332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:14:03.141 [DEBUG] [Thread-67332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:14:03.142 [DEBUG] [Thread-67332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] client lang: <none>
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] server lang: <none>
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] kex follows: False
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:14:03.143 [DEBUG] [Thread-67332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:14:03.144 [DEBUG] [Thread-67332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:14:03.144 [DEBUG] [Thread-67332] [transport.py] [_log()] Compression: none
2025-12-12T10:14:03.144 [DEBUG] [Thread-67332] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:14:03.199 [DEBUG] [Thread-67332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:14:03.200 [DEBUG] [Thread-67332] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:14:03.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:14:03.201 [DEBUG] [Thread-67332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:14:03.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:14:03.257 [DEBUG] [Thread-67332] [transport.py] [_log()] userauth is OK
2025-12-12T10:14:03.257 [DEBUG] [Thread-67332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:14:03.257 [DEBUG] [Thread-67332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:14:03.257 [DEBUG] [Thread-67332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:14:03.257 [DEBUG] [Thread-67332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:14:03.277 [INFO] [Thread-67332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:14:03.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:14:03.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:14:04.162 [DEBUG] [Thread-67332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:14:04.162 [DEBUG] [Thread-67332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:14:04.210 [DEBUG] [Thread-67332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:14:04.211 [DEBUG] [Thread-67332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:14:04.220 [DEBUG] [Thread-67332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:14:04.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:14:04.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:14:04.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:14:04.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:14:04.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:14:04.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:14:04.257 [DEBUG] [Thread-67332] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:14:06.226 [DEBUG] [Thread-67334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:15.255 [DEBUG] [Thread-67335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:16.263 [DEBUG] [Thread-67336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:16.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:16.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:24.288 [DEBUG] [Thread-67337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:31.305 [DEBUG] [Thread-67338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:33.316 [DEBUG] [Thread-67339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:34.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:14:34.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:14:34.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:14:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 14, 18), 13.4, 40.1, 0.0, 47.0, 14.68, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:14:34.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:14:18
2025-12-12T10:14:34.939 [DEBUG] [Thread-67340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:35.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:14:35.214 [DEBUG] [Thread-67341] [transport.py] [_log()] starting thread (client mode): 0xf2d175e0
2025-12-12T10:14:35.215 [DEBUG] [Thread-67341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:14:35.235 [DEBUG] [Thread-67341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:14:35.235 [INFO] [Thread-67341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:14:35.238 [DEBUG] [Thread-67341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:14:35.239 [DEBUG] [Thread-67341] [transport.py] [_log()] client lang: <none>
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] server lang: <none>
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] kex follows: False
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] Compression: none
2025-12-12T10:14:35.240 [DEBUG] [Thread-67341] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:14:35.257 [DEBUG] [Thread-67341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:14:35.257 [DEBUG] [Thread-67341] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:14:35.257 [DEBUG] [Thread-67341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:14:35.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:14:35.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:14:35.258 [DEBUG] [Thread-67341] [transport.py] [_log()] userauth is OK
2025-12-12T10:14:35.258 [DEBUG] [Thread-67341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:14:35.258 [DEBUG] [Thread-67341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:14:35.259 [DEBUG] [Thread-67341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:14:35.259 [DEBUG] [Thread-67341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:14:35.268 [INFO] [Thread-67341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:14:35.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:14:35.911 [DEBUG] [Thread-67341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:14:35.911 [DEBUG] [Thread-67341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:14:35.912 [DEBUG] [Thread-67341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:14:35.952 [DEBUG] [Thread-67341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:14:35.952 [DEBUG] [Thread-67341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:14:35.956 [DEBUG] [Thread-67341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:14:35.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:14:35.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:14:35.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:14:35.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:14:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:14:35.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:14:35.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:14:35.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:14:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:14:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.343153 -999.00  +14.40  36.73     45   +2.80 1 2 2 1 1   888    0 9.76 -125.30 ----- 29.1 36.7 5.7 50.3 17.1 -15.3 16.7 -17.0 16.4 -15.6 16.7 -15.9
2025-12-12T10:14:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:14:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:14:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.343153
2025-12-12T10:14:35.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:14:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:14:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:14:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:14:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:14:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:14:18', tmtdew=13.4, humidity=40.1, cloud=0.0, wind=47.0, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:14:08.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:14:35.984 [DEBUG] [Thread-67341] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:14:36.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:14:36.080 [DEBUG] [Thread-67344] [transport.py] [_log()] starting thread (client mode): 0xf5729b10
2025-12-12T10:14:36.080 [DEBUG] [Thread-67344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:14:36.096 [DEBUG] [Thread-67344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:14:36.096 [INFO] [Thread-67344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:14:36.104 [DEBUG] [Thread-67344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:14:36.104 [DEBUG] [Thread-67344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:14:36.104 [DEBUG] [Thread-67344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:14:36.104 [DEBUG] [Thread-67344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:36.104 [DEBUG] [Thread-67344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] client lang: <none>
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] server lang: <none>
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] kex follows: False
2025-12-12T10:14:36.105 [DEBUG] [Thread-67344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:14:36.106 [DEBUG] [Thread-67344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:14:36.106 [DEBUG] [Thread-67344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:14:36.106 [DEBUG] [Thread-67344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:14:36.106 [DEBUG] [Thread-67344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:14:36.106 [DEBUG] [Thread-67344] [transport.py] [_log()] Compression: none
2025-12-12T10:14:36.106 [DEBUG] [Thread-67344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:14:36.161 [DEBUG] [Thread-67344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:14:36.162 [DEBUG] [Thread-67344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:14:36.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:14:36.163 [DEBUG] [Thread-67344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:14:36.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:14:36.221 [DEBUG] [Thread-67344] [transport.py] [_log()] userauth is OK
2025-12-12T10:14:36.221 [DEBUG] [Thread-67344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:14:36.221 [DEBUG] [Thread-67344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:14:36.222 [DEBUG] [Thread-67344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:14:36.222 [DEBUG] [Thread-67344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:14:36.240 [INFO] [Thread-67344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:14:36.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:14:36.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:14:37.082 [DEBUG] [Thread-67344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:14:37.082 [DEBUG] [Thread-67344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:14:37.132 [DEBUG] [Thread-67344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:14:37.132 [DEBUG] [Thread-67344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:14:37.141 [DEBUG] [Thread-67344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:14:37.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:14:37.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:14:37.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:14:37.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:14:37.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:14:37.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:14:37.179 [DEBUG] [Thread-67344] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:14:42.342 [DEBUG] [Thread-67346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:46.356 [DEBUG] [Thread-67347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:14:51.390 [DEBUG] [Thread-67348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:00.408 [DEBUG] [Thread-67349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:01.411 [DEBUG] [Thread-67350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:07.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:15:07.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:15:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:15:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 14, 50), 13.33, 40.24, 0.0, 46.92, 14.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:15:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:14:50
2025-12-12T10:15:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:15:08.145 [DEBUG] [Thread-67351] [transport.py] [_log()] starting thread (client mode): 0xf578b760
2025-12-12T10:15:08.145 [DEBUG] [Thread-67351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:15:08.166 [DEBUG] [Thread-67351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:15:08.166 [INFO] [Thread-67351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] client lang: <none>
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] server lang: <none>
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] kex follows: False
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] Compression: none
2025-12-12T10:15:08.169 [DEBUG] [Thread-67351] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:15:08.187 [DEBUG] [Thread-67351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:15:08.187 [DEBUG] [Thread-67351] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:15:08.188 [DEBUG] [Thread-67351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:15:08.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:15:08.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:15:08.190 [DEBUG] [Thread-67351] [transport.py] [_log()] userauth is OK
2025-12-12T10:15:08.190 [DEBUG] [Thread-67351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:15:08.190 [DEBUG] [Thread-67351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:15:08.191 [DEBUG] [Thread-67351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:15:08.191 [DEBUG] [Thread-67351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:15:08.214 [INFO] [Thread-67351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:15:08.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:15:09.161 [DEBUG] [Thread-67351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:15:09.161 [DEBUG] [Thread-67351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:15:09.162 [DEBUG] [Thread-67351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:15:09.202 [DEBUG] [Thread-67351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:15:09.202 [DEBUG] [Thread-67351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:15:09.205 [DEBUG] [Thread-67351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:15:09.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:15:09.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:15:09.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:15:09.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:15:09.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:15:09.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:15:09.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:15:09.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:15:09.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:15:09.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.343500 -999.00  +14.20  30.33     45   +2.50 1 2 2 1 1   888    0 9.44 -129.06 ----- 29.1 30.3 356.0 38.2 17.0 -15.3 16.7 -16.2 16.4 -16.1 16.6 -15.4
2025-12-12T10:15:09.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:15:09.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:15:09.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.343500
2025-12-12T10:15:09.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:15:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:15:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:15:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:15:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:15:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:14:50', tmtdew=13.33, humidity=40.24, cloud=0.0, wind=46.92, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:14:38.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:15:09.232 [DEBUG] [Thread-67351] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:15:09.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:15:09.327 [DEBUG] [Thread-67354] [transport.py] [_log()] starting thread (client mode): 0xf578aa70
2025-12-12T10:15:09.327 [DEBUG] [Thread-67354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:15:09.342 [DEBUG] [Thread-67354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:15:09.343 [INFO] [Thread-67354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:15:09.350 [DEBUG] [Thread-67354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:15:09.351 [DEBUG] [Thread-67354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:15:09.351 [DEBUG] [Thread-67354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:15:09.351 [DEBUG] [Thread-67354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:09.351 [DEBUG] [Thread-67354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:09.351 [DEBUG] [Thread-67354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:09.351 [DEBUG] [Thread-67354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] client lang: <none>
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] server lang: <none>
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] kex follows: False
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:15:09.352 [DEBUG] [Thread-67354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:15:09.353 [DEBUG] [Thread-67354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:15:09.353 [DEBUG] [Thread-67354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:15:09.353 [DEBUG] [Thread-67354] [transport.py] [_log()] Compression: none
2025-12-12T10:15:09.353 [DEBUG] [Thread-67354] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:15:09.409 [DEBUG] [Thread-67354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:15:09.410 [DEBUG] [Thread-67354] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:15:09.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:15:09.411 [DEBUG] [Thread-67354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:15:09.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:15:09.432 [DEBUG] [Thread-67356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:09.468 [DEBUG] [Thread-67354] [transport.py] [_log()] userauth is OK
2025-12-12T10:15:09.469 [DEBUG] [Thread-67354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:15:09.469 [DEBUG] [Thread-67354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:15:09.469 [DEBUG] [Thread-67354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:15:09.469 [DEBUG] [Thread-67354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:15:09.487 [INFO] [Thread-67354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:15:09.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:15:09.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:15:10.374 [DEBUG] [Thread-67354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:15:10.375 [DEBUG] [Thread-67354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:15:10.422 [DEBUG] [Thread-67354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:15:10.422 [DEBUG] [Thread-67354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:15:10.431 [DEBUG] [Thread-67354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:15:10.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:15:10.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:15:10.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:15:10.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:15:10.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:15:10.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:15:10.467 [DEBUG] [Thread-67354] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:15:16.451 [DEBUG] [Thread-67357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:16.706 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:16.707 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:18.480 [DEBUG] [Thread-67358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:27.501 [DEBUG] [Thread-67359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:31.516 [DEBUG] [Thread-67360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:34.990 [DEBUG] [Thread-67361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:36.534 [DEBUG] [Thread-67362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:15:40.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:15:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:15:41.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 15, 22), 13.46, 39.86, 0.0, 42.31, 14.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:15:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:15:22
2025-12-12T10:15:41.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:15:41.493 [DEBUG] [Thread-67363] [transport.py] [_log()] starting thread (client mode): 0xf2d175e0
2025-12-12T10:15:41.493 [DEBUG] [Thread-67363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:15:41.514 [DEBUG] [Thread-67363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:15:41.514 [INFO] [Thread-67363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] client lang: <none>
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] server lang: <none>
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] kex follows: False
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] Compression: none
2025-12-12T10:15:41.518 [DEBUG] [Thread-67363] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:15:41.534 [DEBUG] [Thread-67363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:15:41.534 [DEBUG] [Thread-67363] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:15:41.534 [DEBUG] [Thread-67363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:15:41.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:15:41.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:15:41.535 [DEBUG] [Thread-67363] [transport.py] [_log()] userauth is OK
2025-12-12T10:15:41.535 [DEBUG] [Thread-67363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:15:41.535 [DEBUG] [Thread-67363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:15:41.535 [DEBUG] [Thread-67363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:15:41.535 [DEBUG] [Thread-67363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:15:41.545 [INFO] [Thread-67363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:15:41.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:15:42.184 [DEBUG] [Thread-67363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:15:42.184 [DEBUG] [Thread-67363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:15:42.184 [DEBUG] [Thread-67363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:15:42.225 [DEBUG] [Thread-67363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:15:42.225 [DEBUG] [Thread-67363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:15:42.227 [DEBUG] [Thread-67363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:15:42.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:15:42.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:15:42.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:15:42.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:15:42.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:15:42.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:15:42.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:15:42.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.343790 -999.00  +14.40  30.72     44   +2.30 1 2 2 1 1   888    0 9.78 -118.93 ----- 27.4 30.7 332.4 39.1 17.1 -15.3 16.7 -16.3 16.4 -16.1 16.6 -14.9
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.343790
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:15:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:15:22', tmtdew=13.46, humidity=39.86, cloud=0.0, wind=42.31, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:15:03.456', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:15:42.246 [DEBUG] [Thread-67363] [transport.py] [_log()] EOF in transport thread
2025-12-12T10: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
2025-12-12T10:15:42.335 [DEBUG] [Thread-67366] [transport.py] [_log()] starting thread (client mode): 0xf2d173a0
2025-12-12T10:15:42.335 [DEBUG] [Thread-67366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:15:42.349 [DEBUG] [Thread-67366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:15:42.349 [INFO] [Thread-67366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] client lang: <none>
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] server lang: <none>
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] kex follows: False
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] Compression: none
2025-12-12T10:15:42.357 [DEBUG] [Thread-67366] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:15:42.414 [DEBUG] [Thread-67366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:15:42.414 [DEBUG] [Thread-67366] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:15:42.415 [DEBUG] [Thread-67366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:15:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:15:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:15:42.472 [DEBUG] [Thread-67366] [transport.py] [_log()] userauth is OK
2025-12-12T10:15:42.472 [DEBUG] [Thread-67366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:15:42.472 [DEBUG] [Thread-67366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:15:42.472 [DEBUG] [Thread-67366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:15:42.472 [DEBUG] [Thread-67366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:15:42.489 [INFO] [Thread-67366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:15:42.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:15:42.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:15:43.307 [DEBUG] [Thread-67366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:15:43.307 [DEBUG] [Thread-67366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:15:43.355 [DEBUG] [Thread-67366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:15:43.355 [DEBUG] [Thread-67366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:15:43.364 [DEBUG] [Thread-67366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:15:43.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:15:43.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:15:43.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:15:43.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:15:43.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:15:43.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:15:43.399 [DEBUG] [Thread-67366] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:15:45.553 [DEBUG] [Thread-67368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:46.562 [DEBUG] [Thread-67369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:15:54.603 [DEBUG] [Thread-67370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:01.622 [DEBUG] [Thread-67371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:03.636 [DEBUG] [Thread-67372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:12.660 [DEBUG] [Thread-67373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:16:13.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:16:13.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:16:14.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 15, 54), 13.89, 38.78, 0.0, 45.36, 14.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:16:14.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:15:54
2025-12-12T10:16:14.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:16:14.371 [DEBUG] [Thread-67374] [transport.py] [_log()] starting thread (client mode): 0xf572ff10
2025-12-12T10:16:14.371 [DEBUG] [Thread-67374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:16:14.391 [DEBUG] [Thread-67374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:16:14.391 [INFO] [Thread-67374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:14.394 [DEBUG] [Thread-67374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] client lang: <none>
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] server lang: <none>
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] kex follows: False
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] Compression: none
2025-12-12T10:16:14.395 [DEBUG] [Thread-67374] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:16:14.413 [DEBUG] [Thread-67374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:16:14.414 [DEBUG] [Thread-67374] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:16:14.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:16:14.414 [DEBUG] [Thread-67374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:16:14.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:16:14.416 [DEBUG] [Thread-67374] [transport.py] [_log()] userauth is OK
2025-12-12T10:16:14.416 [DEBUG] [Thread-67374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:16:14.416 [DEBUG] [Thread-67374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:16:14.416 [DEBUG] [Thread-67374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:16:14.416 [DEBUG] [Thread-67374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:16:14.430 [INFO] [Thread-67374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:16:14.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:16:15.092 [DEBUG] [Thread-67374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:16:15.092 [DEBUG] [Thread-67374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:16:15.093 [DEBUG] [Thread-67374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:16:15.133 [DEBUG] [Thread-67374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:16:15.134 [DEBUG] [Thread-67374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:16:15.137 [DEBUG] [Thread-67374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:16:15.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:16:15.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:16:15.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:16:15.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:16:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:16:15.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:16:15.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:16:15.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:16:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:16:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.344194 -999.00  +14.40  32.50     43   +2.20 1 2 2 1 1   888    0 9.47 -124.80 ----- 28.8 32.5 2.8 43.1 17.1 -15.3 16.7 -16.3 16.4 -15.9 16.6 -15.3
2025-12-12T10:16:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:16:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:16:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.344194
2025-12-12T10:16:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:16:15.162 [DEBUG] [Thread-67374] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:16:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:16:15.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:16:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:16:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:16:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:15:54', tmtdew=13.89, humidity=38.78, cloud=0.0, wind=45.36, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:15:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:16:15.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:16:15.253 [DEBUG] [Thread-67377] [transport.py] [_log()] starting thread (client mode): 0xf57bfa30
2025-12-12T10:16:15.253 [DEBUG] [Thread-67377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:16:15.269 [DEBUG] [Thread-67377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:16:15.270 [INFO] [Thread-67377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] client lang: <none>
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] server lang: <none>
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] kex follows: False
2025-12-12T10:16:15.278 [DEBUG] [Thread-67377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:16:15.279 [DEBUG] [Thread-67377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:16:15.279 [DEBUG] [Thread-67377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:16:15.279 [DEBUG] [Thread-67377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:16:15.279 [DEBUG] [Thread-67377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:16:15.279 [DEBUG] [Thread-67377] [transport.py] [_log()] Compression: none
2025-12-12T10:16:15.279 [DEBUG] [Thread-67377] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:16:15.340 [DEBUG] [Thread-67377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:16:15.341 [DEBUG] [Thread-67377] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:16:15.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:16:15.342 [DEBUG] [Thread-67377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:16:15.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:16:15.398 [DEBUG] [Thread-67377] [transport.py] [_log()] userauth is OK
2025-12-12T10:16:15.398 [DEBUG] [Thread-67377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:16:15.398 [DEBUG] [Thread-67377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:16:15.398 [DEBUG] [Thread-67377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:16:15.398 [DEBUG] [Thread-67377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:16:15.423 [INFO] [Thread-67377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:16:15.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:16:15.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:16:16.262 [DEBUG] [Thread-67377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:16:16.262 [DEBUG] [Thread-67377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:16:16.310 [DEBUG] [Thread-67377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:16:16.311 [DEBUG] [Thread-67377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:16:16.323 [DEBUG] [Thread-67377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:16:16.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:16:16.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:16:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:16:16.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:16:16.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:16:16.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:16:16.355 [DEBUG] [Thread-67377] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:16:16.671 [DEBUG] [Thread-67379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:16.848 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:16.849 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:21.690 [DEBUG] [Thread-67380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:30.712 [DEBUG] [Thread-67381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:31.717 [DEBUG] [Thread-67382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:35.049 [DEBUG] [Thread-67383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:39.735 [DEBUG] [Thread-67384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:16:46.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:16:46.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
2025-12-12T10:16:46.752 [DEBUG] [Thread-67385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:47.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 16, 26), 13.78, 39.09, 0.0, 46.35, 14.67, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:16:47.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:16:26
2025-12-12T10:16:47.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:16:47.339 [DEBUG] [Thread-67386] [transport.py] [_log()] starting thread (client mode): 0xf81c37f0
2025-12-12T10:16:47.339 [DEBUG] [Thread-67386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:16:47.359 [DEBUG] [Thread-67386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:16:47.359 [INFO] [Thread-67386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:16:47.360 [DEBUG] [Thread-67386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] client lang: <none>
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] server lang: <none>
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] kex follows: False
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] Compression: none
2025-12-12T10:16:47.361 [DEBUG] [Thread-67386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:16:47.374 [DEBUG] [Thread-67386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:16:47.375 [DEBUG] [Thread-67386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:16:47.375 [DEBUG] [Thread-67386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:16:47.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:16:47.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:16:47.377 [DEBUG] [Thread-67386] [transport.py] [_log()] userauth is OK
2025-12-12T10:16:47.378 [DEBUG] [Thread-67386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:16:47.378 [DEBUG] [Thread-67386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:16:47.378 [DEBUG] [Thread-67386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:16:47.378 [DEBUG] [Thread-67386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:16:47.403 [INFO] [Thread-67386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:16:47.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:16:48.010 [DEBUG] [Thread-67386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:16:48.011 [DEBUG] [Thread-67386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:16:48.011 [DEBUG] [Thread-67386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:16:48.051 [DEBUG] [Thread-67386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:16:48.051 [DEBUG] [Thread-67386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:16:48.054 [DEBUG] [Thread-67386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:16:48.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:16:48.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:16:48.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:16:48.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:16:48.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:16:48.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:16:48.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:16:48.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:16:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:16:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.344542 -999.00  +14.40  21.77     43   +2.30 1 2 1 1 1   888    0 9.31 -124.21 ----- 26.1 21.8 345.7 35.8 17.1 -16.0 16.8 -16.8 16.4 -15.7 16.6 -16.3
2025-12-12T10:16:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:16:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:16:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.344542
2025-12-12T10:16:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:16:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:16:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:16:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:16:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:16:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:16:26', tmtdew=13.78, humidity=39.09, cloud=0.0, wind=46.35, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:16:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:16:48.078 [DEBUG] [Thread-67386] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:16:48.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:16:48.175 [DEBUG] [Thread-67389] [transport.py] [_log()] starting thread (client mode): 0xf2d0d5a0
2025-12-12T10:16:48.176 [DEBUG] [Thread-67389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:16:48.190 [DEBUG] [Thread-67389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:16:48.190 [INFO] [Thread-67389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:16:48.197 [DEBUG] [Thread-67389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] client lang: <none>
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] server lang: <none>
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] kex follows: False
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] Compression: none
2025-12-12T10:16:48.198 [DEBUG] [Thread-67389] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:16:48.260 [DEBUG] [Thread-67389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:16:48.261 [DEBUG] [Thread-67389] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:16:48.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:16:48.262 [DEBUG] [Thread-67389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:16:48.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:16:48.320 [DEBUG] [Thread-67389] [transport.py] [_log()] userauth is OK
2025-12-12T10:16:48.320 [DEBUG] [Thread-67389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:16:48.321 [DEBUG] [Thread-67389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:16:48.321 [DEBUG] [Thread-67389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:16:48.321 [DEBUG] [Thread-67389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:16:48.340 [INFO] [Thread-67389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:16:48.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:16:48.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:16:48.762 [DEBUG] [Thread-67391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:16:49.194 [DEBUG] [Thread-67389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:16:49.195 [DEBUG] [Thread-67389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:16:49.242 [DEBUG] [Thread-67389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:16:49.242 [DEBUG] [Thread-67389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:16:49.251 [DEBUG] [Thread-67389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:16:49.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:16:49.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:16:49.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:16:49.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:16:49.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:16:49.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:16:49.288 [DEBUG] [Thread-67389] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:16:57.782 [DEBUG] [Thread-67392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:01.789 [DEBUG] [Thread-67393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:06.812 [DEBUG] [Thread-67394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:15.837 [DEBUG] [Thread-67395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:16.846 [DEBUG] [Thread-67396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:16.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:16.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:17:19.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:17:19.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:17:19.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 16, 58), 13.86, 38.76, 0.0, 35.53, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:17:19.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:16:58
2025-12-12T10:17:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:17:20.265 [DEBUG] [Thread-67397] [transport.py] [_log()] starting thread (client mode): 0xf57b6200
2025-12-12T10:17:20.265 [DEBUG] [Thread-67397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:17:20.284 [DEBUG] [Thread-67397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:17:20.285 [INFO] [Thread-67397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:17:20.287 [DEBUG] [Thread-67397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] client lang: <none>
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] server lang: <none>
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] kex follows: False
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] Compression: none
2025-12-12T10:17:20.288 [DEBUG] [Thread-67397] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:17:20.307 [DEBUG] [Thread-67397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:17:20.307 [DEBUG] [Thread-67397] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:17:20.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:17:20.308 [DEBUG] [Thread-67397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:17:20.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:17:20.311 [DEBUG] [Thread-67397] [transport.py] [_log()] userauth is OK
2025-12-12T10:17:20.311 [DEBUG] [Thread-67397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:17:20.311 [DEBUG] [Thread-67397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:17:20.311 [DEBUG] [Thread-67397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:17:20.311 [DEBUG] [Thread-67397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:17:20.330 [INFO] [Thread-67397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:17:20.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:17:20.980 [DEBUG] [Thread-67397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:17:20.981 [DEBUG] [Thread-67397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:17:20.981 [DEBUG] [Thread-67397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:17:21.021 [DEBUG] [Thread-67397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:17:21.021 [DEBUG] [Thread-67397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:17:21.024 [DEBUG] [Thread-67397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:17:21.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:17:21.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:17:21.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:17:21.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:17:21.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:17:21.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:17:21.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:17:21.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:17:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:17:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.345236 -999.00  +14.40  27.20     43   +2.20 1 2 1 1 1   888    0 9.63 -124.97 ----- 23.1 27.2 3.1 44.7 17.1 -16.1 16.8 -17.1 16.5 -15.7 16.7 -17.4
2025-12-12T10:17:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:17:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:17:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.345236
2025-12-12T10:17:21.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:17:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:17:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:17:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:17:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:17:21.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:16:58', tmtdew=13.86, humidity=38.76, cloud=0.0, wind=35.53, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:17:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:17:21.049 [DEBUG] [Thread-67397] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:17:21.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:17:21.141 [DEBUG] [Thread-67400] [transport.py] [_log()] starting thread (client mode): 0xf57b48b0
2025-12-12T10:17:21.141 [DEBUG] [Thread-67400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:17:21.157 [DEBUG] [Thread-67400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:17:21.157 [INFO] [Thread-67400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:17:21.164 [DEBUG] [Thread-67400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] client lang: <none>
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] server lang: <none>
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] kex follows: False
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] Compression: none
2025-12-12T10:17:21.165 [DEBUG] [Thread-67400] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:17:21.225 [DEBUG] [Thread-67400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:17:21.225 [DEBUG] [Thread-67400] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:17:21.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:17:21.226 [DEBUG] [Thread-67400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:17:21.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:17:21.286 [DEBUG] [Thread-67400] [transport.py] [_log()] userauth is OK
2025-12-12T10:17:21.287 [DEBUG] [Thread-67400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:17:21.287 [DEBUG] [Thread-67400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:17:21.287 [DEBUG] [Thread-67400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:17:21.287 [DEBUG] [Thread-67400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:17:21.307 [INFO] [Thread-67400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:17:21.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:17:21.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:17:22.157 [DEBUG] [Thread-67400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:17:22.157 [DEBUG] [Thread-67400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:17:22.205 [DEBUG] [Thread-67400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:17:22.205 [DEBUG] [Thread-67400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:17:22.214 [DEBUG] [Thread-67400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:17:22.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:17:22.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:17:22.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:17:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:17:22.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:17:22.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:17:22.251 [DEBUG] [Thread-67400] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:17:24.870 [DEBUG] [Thread-67402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:31.884 [DEBUG] [Thread-67403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:33.901 [DEBUG] [Thread-67404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:35.095 [DEBUG] [Thread-67405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:42.920 [DEBUG] [Thread-67406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:46.934 [DEBUG] [Thread-67407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:51.953 [DEBUG] [Thread-67408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:17:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:17:52.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:17:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:17:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 17, 31), 14.24, 37.75, 0.0, 31.04, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:17:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:17:31
2025-12-12T10:17:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:17:53.216 [DEBUG] [Thread-67409] [transport.py] [_log()] starting thread (client mode): 0xf57c8970
2025-12-12T10:17:53.216 [DEBUG] [Thread-67409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:17:53.237 [DEBUG] [Thread-67409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:17:53.237 [INFO] [Thread-67409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] client lang: <none>
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] server lang: <none>
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] kex follows: False
2025-12-12T10:17:53.240 [DEBUG] [Thread-67409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:17:53.241 [DEBUG] [Thread-67409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:17:53.241 [DEBUG] [Thread-67409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:17:53.241 [DEBUG] [Thread-67409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:17:53.241 [DEBUG] [Thread-67409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:17:53.241 [DEBUG] [Thread-67409] [transport.py] [_log()] Compression: none
2025-12-12T10:17:53.241 [DEBUG] [Thread-67409] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:17:53.255 [DEBUG] [Thread-67409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:17:53.255 [DEBUG] [Thread-67409] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:17:53.255 [DEBUG] [Thread-67409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:17:53.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:17:53.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:17:53.256 [DEBUG] [Thread-67409] [transport.py] [_log()] userauth is OK
2025-12-12T10:17:53.257 [DEBUG] [Thread-67409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:17:53.257 [DEBUG] [Thread-67409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:17:53.257 [DEBUG] [Thread-67409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:17:53.257 [DEBUG] [Thread-67409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:17:53.276 [INFO] [Thread-67409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:17:53.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:17:53.940 [DEBUG] [Thread-67409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:17:53.940 [DEBUG] [Thread-67409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:17:53.940 [DEBUG] [Thread-67409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:17:53.981 [DEBUG] [Thread-67409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:17:53.981 [DEBUG] [Thread-67409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:17:53.984 [DEBUG] [Thread-67409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:17:53.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:17:53.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:17:53.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:17:54.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:17:54.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:17:54.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:17:54.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:17:54.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:17:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:17:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.345584 -999.00  +14.40  27.48     42   +1.80 1 2 1 1 1   888    0 9.76 -119.98 ----- 28.3 27.5 358.0 29.9 17.1 -15.9 16.8 -16.5 16.5 -16.0 16.7 -15.6
2025-12-12T10:17:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:17:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:17:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.345584
2025-12-12T10:17:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:17:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:17:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:17:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:17:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:17:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:17:31', tmtdew=14.24, humidity=37.75, cloud=0.0, wind=31.04, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:17:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:17:54.009 [DEBUG] [Thread-67409] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:17:54.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:17:54.102 [DEBUG] [Thread-67412] [transport.py] [_log()] starting thread (client mode): 0xf57c8ac0
2025-12-12T10:17:54.102 [DEBUG] [Thread-67412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:17:54.118 [DEBUG] [Thread-67412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:17:54.119 [INFO] [Thread-67412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:17:54.126 [DEBUG] [Thread-67412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:17:54.126 [DEBUG] [Thread-67412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:17:54.126 [DEBUG] [Thread-67412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] client lang: <none>
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] server lang: <none>
2025-12-12T10:17:54.127 [DEBUG] [Thread-67412] [transport.py] [_log()] kex follows: False
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] Compression: none
2025-12-12T10:17:54.128 [DEBUG] [Thread-67412] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:17:54.184 [DEBUG] [Thread-67412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:17:54.185 [DEBUG] [Thread-67412] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:17:54.185 [DEBUG] [Thread-67412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:17:54.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:17:54.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:17:54.241 [DEBUG] [Thread-67412] [transport.py] [_log()] userauth is OK
2025-12-12T10:17:54.241 [DEBUG] [Thread-67412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:17:54.241 [DEBUG] [Thread-67412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:17:54.241 [DEBUG] [Thread-67412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:17:54.241 [DEBUG] [Thread-67412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:17:54.260 [INFO] [Thread-67412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:17:54.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:17:54.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:17:55.115 [DEBUG] [Thread-67412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:17:55.115 [DEBUG] [Thread-67412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:17:55.163 [DEBUG] [Thread-67412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:17:55.163 [DEBUG] [Thread-67412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:17:55.173 [DEBUG] [Thread-67412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:17:55.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:17:55.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:17: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') -> 00000000
2025-12-12T10:17:55.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:17:55.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:17:55.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:17:55.210 [DEBUG] [Thread-67412] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:18:00.979 [DEBUG] [Thread-67414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:01.990 [DEBUG] [Thread-67415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:10.028 [DEBUG] [Thread-67416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:17.043 [DEBUG] [Thread-67417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:17.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:17.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:19.052 [DEBUG] [Thread-67418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:18:25.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:18:25.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
2025-12-12T10:18:25.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 18, 3), 14.41, 37.33, 0.0, 34.3, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:18:25.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:18:03
2025-12-12T10:18:26.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:18:26.192 [DEBUG] [Thread-67419] [transport.py] [_log()] starting thread (client mode): 0xf57cae60
2025-12-12T10:18:26.192 [DEBUG] [Thread-67419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:18:26.211 [DEBUG] [Thread-67419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:18:26.211 [INFO] [Thread-67419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:18:26.214 [DEBUG] [Thread-67419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:18:26.214 [DEBUG] [Thread-67419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] client lang: <none>
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] server lang: <none>
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] kex follows: False
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:18:26.215 [DEBUG] [Thread-67419] [transport.py] [_log()] Compression: none
2025-12-12T10:18:26.216 [DEBUG] [Thread-67419] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:18:26.233 [DEBUG] [Thread-67419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:18:26.233 [DEBUG] [Thread-67419] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:18:26.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:18:26.234 [DEBUG] [Thread-67419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:18:26.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:18:26.236 [DEBUG] [Thread-67419] [transport.py] [_log()] userauth is OK
2025-12-12T10:18:26.237 [DEBUG] [Thread-67419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:18:26.237 [DEBUG] [Thread-67419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:18:26.237 [DEBUG] [Thread-67419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:18:26.237 [DEBUG] [Thread-67419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:18:26.265 [INFO] [Thread-67419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:18:26.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:18:26.910 [DEBUG] [Thread-67419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:18:26.910 [DEBUG] [Thread-67419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:18:26.910 [DEBUG] [Thread-67419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:18:26.951 [DEBUG] [Thread-67419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:18:26.952 [DEBUG] [Thread-67419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:18:26.955 [DEBUG] [Thread-67419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:18:26.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:18:26.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:18:26.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:18:26.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:18:26.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:18:26.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:18:26.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:18:26.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:18:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:18:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.345931 -999.00  +14.50  25.46     42   +1.80 1 2 1 1 1   888    0 9.47 -119.03 ----- 33.0 25.5 352.5 34.7 17.3 -15.4 16.9 -16.2 16.6 -15.1 16.9 -14.9
2025-12-12T10:18:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:18:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:18:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.345931
2025-12-12T10:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:18:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:18:03', tmtdew=14.41, humidity=37.33, cloud=0.0, wind=34.3, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:18:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:18:26.983 [DEBUG] [Thread-67419] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:18:27.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:18:27.078 [DEBUG] [Thread-67422] [transport.py] [_log()] starting thread (client mode): 0xf57cafb0
2025-12-12T10:18:27.079 [DEBUG] [Thread-67422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:18:27.094 [DEBUG] [Thread-67422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:18:27.094 [INFO] [Thread-67422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:18:27.101 [DEBUG] [Thread-67422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:18:27.101 [DEBUG] [Thread-67422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] client lang: <none>
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] server lang: <none>
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] kex follows: False
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] Compression: none
2025-12-12T10:18:27.102 [DEBUG] [Thread-67422] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:18:27.161 [DEBUG] [Thread-67422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:18:27.162 [DEBUG] [Thread-67422] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:18:27.162 [DEBUG] [Thread-67422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:18:27.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:18:27.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:18:27.221 [DEBUG] [Thread-67422] [transport.py] [_log()] userauth is OK
2025-12-12T10:18:27.222 [DEBUG] [Thread-67422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:18:27.222 [DEBUG] [Thread-67422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:18:27.222 [DEBUG] [Thread-67422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:18:27.222 [DEBUG] [Thread-67422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:18:27.241 [INFO] [Thread-67422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:18:27.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:18:27.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:18:28.075 [DEBUG] [Thread-67424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:28.129 [DEBUG] [Thread-67422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:18:28.129 [DEBUG] [Thread-67422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:18:28.177 [DEBUG] [Thread-67422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:18:28.177 [DEBUG] [Thread-67422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:18:28.186 [DEBUG] [Thread-67422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:18:28.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:18:28.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:18:28.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:18:28.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:18:28.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:18:28.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:18:28.226 [DEBUG] [Thread-67422] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:18:32.089 [DEBUG] [Thread-67425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:35.151 [DEBUG] [Thread-67426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:37.119 [DEBUG] [Thread-67427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:46.139 [DEBUG] [Thread-67428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:47.148 [DEBUG] [Thread-67429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:55.170 [DEBUG] [Thread-67430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:18:58.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:18:58.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:18:58.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:18:58.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 18, 35), 14.45, 37.52, 0.0, 40.03, 15.0, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:18:58.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:18:35
2025-12-12T10:18:59.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:18:59.213 [DEBUG] [Thread-67431] [transport.py] [_log()] starting thread (client mode): 0xf57cbbb0
2025-12-12T10:18:59.213 [DEBUG] [Thread-67431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:18:59.233 [DEBUG] [Thread-67431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:18:59.234 [INFO] [Thread-67431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:18:59.237 [DEBUG] [Thread-67431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] client lang: <none>
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] server lang: <none>
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] kex follows: False
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] Compression: none
2025-12-12T10:18:59.238 [DEBUG] [Thread-67431] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:18:59.250 [DEBUG] [Thread-67431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:18:59.251 [DEBUG] [Thread-67431] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:18:59.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:18:59.252 [DEBUG] [Thread-67431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:18:59.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:18:59.254 [DEBUG] [Thread-67431] [transport.py] [_log()] userauth is OK
2025-12-12T10:18:59.255 [DEBUG] [Thread-67431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:18:59.255 [DEBUG] [Thread-67431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:18:59.255 [DEBUG] [Thread-67431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:18:59.255 [DEBUG] [Thread-67431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:18:59.280 [INFO] [Thread-67431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:18:59.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:18:59.916 [DEBUG] [Thread-67431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:18:59.917 [DEBUG] [Thread-67431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:18:59.917 [DEBUG] [Thread-67431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:18:59.957 [DEBUG] [Thread-67431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:18:59.958 [DEBUG] [Thread-67431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:18:59.961 [DEBUG] [Thread-67431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:18:59.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:18:59.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:18:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:18:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:18:59.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:18:59.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:18:59.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:18:59.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:18:59.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:18:59.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.346278 -999.00  +14.50  22.98     44   +2.60 1 2 1 1 1   888    0 9.81 -111.71 ----- 22.9 23.0 355.9 38.6 17.3 -14.8 16.9 -15.4 16.6 -14.7 16.9 -14.1
2025-12-12T10:18:59.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:18:59.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:18:59.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.346278
2025-12-12T10:18:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:18:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:18:59.990 [DEBUG] [Thread-67431] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:18:59.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:18:59.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:18:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:18:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:18:35', tmtdew=14.45, humidity=37.52, cloud=0.0, wind=40.03, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:18:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:19:00.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:19:00.083 [DEBUG] [Thread-67434] [transport.py] [_log()] starting thread (client mode): 0xf57c9f30
2025-12-12T10:19:00.083 [DEBUG] [Thread-67434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:19:00.097 [DEBUG] [Thread-67434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:19:00.097 [INFO] [Thread-67434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] client lang: <none>
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] server lang: <none>
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] kex follows: False
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:19:00.105 [DEBUG] [Thread-67434] [transport.py] [_log()] Compression: none
2025-12-12T10:19:00.106 [DEBUG] [Thread-67434] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:19:00.165 [DEBUG] [Thread-67434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:19:00.165 [DEBUG] [Thread-67434] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:19:00.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:19:00.167 [DEBUG] [Thread-67434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:19:00.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:19:00.222 [DEBUG] [Thread-67434] [transport.py] [_log()] userauth is OK
2025-12-12T10:19:00.222 [DEBUG] [Thread-67434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:19:00.222 [DEBUG] [Thread-67434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:19:00.222 [DEBUG] [Thread-67434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:19:00.223 [DEBUG] [Thread-67434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:19:00.247 [INFO] [Thread-67434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:19:00.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:19:00.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:19:01.098 [DEBUG] [Thread-67434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:19:01.098 [DEBUG] [Thread-67434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:19:01.146 [DEBUG] [Thread-67434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:19:01.146 [DEBUG] [Thread-67434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:19:01.156 [DEBUG] [Thread-67434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:19:01.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:19:01.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:19:01.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:19:01.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:19:01.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:19:01.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:19:01.192 [DEBUG] [Thread-67434] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:19:02.188 [DEBUG] [Thread-67436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:04.225 [DEBUG] [Thread-67437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:13.247 [DEBUG] [Thread-67438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:17.262 [DEBUG] [Thread-67439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:17.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:17.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:22.280 [DEBUG] [Thread-67440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:19:31.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:19:31.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
2025-12-12T10:19:31.300 [DEBUG] [Thread-67441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:31.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 19, 7), 14.06, 38.53, 0.0, 39.72, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:19:31.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:19:07
2025-12-12T10:19:32.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:19:32.194 [DEBUG] [Thread-67442] [transport.py] [_log()] starting thread (client mode): 0xf57c8970
2025-12-12T10:19:32.194 [DEBUG] [Thread-67442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:19:32.214 [DEBUG] [Thread-67442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:19:32.214 [INFO] [Thread-67442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:19:32.217 [DEBUG] [Thread-67442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] client lang: <none>
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] server lang: <none>
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] kex follows: False
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] Compression: none
2025-12-12T10:19:32.218 [DEBUG] [Thread-67442] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:19:32.234 [DEBUG] [Thread-67442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:19:32.235 [DEBUG] [Thread-67442] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:19:32.235 [DEBUG] [Thread-67442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:19:32.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:19:32.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:19:32.236 [DEBUG] [Thread-67442] [transport.py] [_log()] userauth is OK
2025-12-12T10:19:32.236 [DEBUG] [Thread-67442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:19:32.236 [DEBUG] [Thread-67442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:19:32.236 [DEBUG] [Thread-67442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:19:32.236 [DEBUG] [Thread-67442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:19:32.245 [INFO] [Thread-67442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:19:32.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:19:32.304 [DEBUG] [Thread-67444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:32.879 [DEBUG] [Thread-67442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:19:32.879 [DEBUG] [Thread-67442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:19:32.879 [DEBUG] [Thread-67442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:19:32.921 [DEBUG] [Thread-67442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:19:32.921 [DEBUG] [Thread-67442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:19:32.923 [DEBUG] [Thread-67442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:19:32.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:19:32.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:19:32.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:19:32.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:19:32.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:19:32.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:19:32.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:19:32.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.346625 -999.00  +14.60  27.44     45   +2.80 1 2 1 1 1   888    0 9.53 -113.83 ----- 33.5 27.4 9.6 38.5 17.4 -15.8 17.0 -16.3 16.6 -15.1 16.9 -17.0
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.346625
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:19:32.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:19:07', tmtdew=14.06, humidity=38.53, cloud=0.0, wind=39.72, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:19:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:19:32.942 [DEBUG] [Thread-67442] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:19:33.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:19:33.028 [DEBUG] [Thread-67446] [transport.py] [_log()] starting thread (client mode): 0xf57c8100
2025-12-12T10:19:33.028 [DEBUG] [Thread-67446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:19:33.043 [DEBUG] [Thread-67446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:19:33.043 [INFO] [Thread-67446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:19:33.050 [DEBUG] [Thread-67446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:19:33.050 [DEBUG] [Thread-67446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:19:33.050 [DEBUG] [Thread-67446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:19:33.050 [DEBUG] [Thread-67446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:19:33.050 [DEBUG] [Thread-67446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] client lang: <none>
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] server lang: <none>
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] kex follows: False
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] Compression: none
2025-12-12T10:19:33.051 [DEBUG] [Thread-67446] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:19:33.107 [DEBUG] [Thread-67446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:19:33.107 [DEBUG] [Thread-67446] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:19:33.108 [DEBUG] [Thread-67446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:19:33.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:19:33.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:19:33.164 [DEBUG] [Thread-67446] [transport.py] [_log()] userauth is OK
2025-12-12T10:19:33.164 [DEBUG] [Thread-67446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:19:33.164 [DEBUG] [Thread-67446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:19:33.164 [DEBUG] [Thread-67446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:19:33.164 [DEBUG] [Thread-67446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:19:33.182 [INFO] [Thread-67446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:19:33.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:19:33.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:19:34.033 [DEBUG] [Thread-67446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:19:34.033 [DEBUG] [Thread-67446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:19:34.081 [DEBUG] [Thread-67446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:19:34.081 [DEBUG] [Thread-67446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:19:34.090 [DEBUG] [Thread-67446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:19:34.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:19:34.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:19:34.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:19:34.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:19:34.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:19:34.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:19:34.124 [DEBUG] [Thread-67446] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:19:35.198 [DEBUG] [Thread-67448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:40.321 [DEBUG] [Thread-67449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:47.338 [DEBUG] [Thread-67450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:49.363 [DEBUG] [Thread-67451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:19:58.386 [DEBUG] [Thread-67452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:02.400 [DEBUG] [Thread-67453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:20:04.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:20:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:20:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 19, 39), 13.54, 39.84, 0.0, 38.59, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:20:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:19:39
2025-12-12T10:20:04.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:20:05.081 [DEBUG] [Thread-67454] [transport.py] [_log()] starting thread (client mode): 0xf57cb910
2025-12-12T10:20:05.082 [DEBUG] [Thread-67454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:20:05.101 [DEBUG] [Thread-67454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:20:05.101 [INFO] [Thread-67454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:20:05.104 [DEBUG] [Thread-67454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:20:05.104 [DEBUG] [Thread-67454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] client lang: <none>
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] server lang: <none>
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] kex follows: False
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] Compression: none
2025-12-12T10:20:05.105 [DEBUG] [Thread-67454] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:20:05.121 [DEBUG] [Thread-67454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:20:05.121 [DEBUG] [Thread-67454] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:20:05.122 [DEBUG] [Thread-67454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:20:05.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:20:05.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:20:05.124 [DEBUG] [Thread-67454] [transport.py] [_log()] userauth is OK
2025-12-12T10:20:05.124 [DEBUG] [Thread-67454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:20:05.124 [DEBUG] [Thread-67454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:20:05.124 [DEBUG] [Thread-67454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:20:05.124 [DEBUG] [Thread-67454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:20:05.142 [INFO] [Thread-67454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:20:05.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:20:06.736 [DEBUG] [Thread-67454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:20:06.736 [DEBUG] [Thread-67454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:20:06.737 [DEBUG] [Thread-67454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:20:06.777 [DEBUG] [Thread-67454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:20:06.778 [DEBUG] [Thread-67454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:20:06.781 [DEBUG] [Thread-67454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:20:06.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:20:06.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:20:06.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:20:06.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:20:06.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:20:06.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:20:06.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:20:06.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:20:06.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:20:06.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.346972 -999.00  +14.80  29.90     44   +2.80 1 2 1 1 1   888    0 9.79 -101.37 ----- 29.9 29.9 14.2 40.1 17.5 -15.6 17.1 -16.4 16.8 -15.1 17.0 -15.6
2025-12-12T10:20:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:20:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:20:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.346972
2025-12-12T10:20:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:20:06.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:20:06.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:20:06.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:20:06.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:20:06.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:19:39', tmtdew=13.54, humidity=39.84, cloud=0.0, wind=38.59, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:19:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:20:06.828 [DEBUG] [Thread-67454] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:20:06.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:20:06.924 [DEBUG] [Thread-67457] [transport.py] [_log()] starting thread (client mode): 0xf57c8d00
2025-12-12T10:20:06.924 [DEBUG] [Thread-67457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:20:06.939 [DEBUG] [Thread-67457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:20:06.939 [INFO] [Thread-67457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] client lang: <none>
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] server lang: <none>
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] kex follows: False
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] Compression: none
2025-12-12T10:20:06.947 [DEBUG] [Thread-67457] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:20:07.005 [DEBUG] [Thread-67457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:20:07.005 [DEBUG] [Thread-67457] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:20:07.006 [DEBUG] [Thread-67457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:20:07.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:20:07.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:20:07.065 [DEBUG] [Thread-67457] [transport.py] [_log()] userauth is OK
2025-12-12T10:20:07.065 [DEBUG] [Thread-67457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:20:07.065 [DEBUG] [Thread-67457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:20:07.065 [DEBUG] [Thread-67457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:20:07.066 [DEBUG] [Thread-67457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:20:07.084 [INFO] [Thread-67457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:20:07.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:20:07.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:20:07.416 [DEBUG] [Thread-67459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:08.009 [DEBUG] [Thread-67457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:20:08.009 [DEBUG] [Thread-67457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:20:08.057 [DEBUG] [Thread-67457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:20:08.057 [DEBUG] [Thread-67457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:20:08.065 [DEBUG] [Thread-67457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:20:08.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:20:08.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:20:08.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:20:08.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:20:08.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:20:08.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:20:08.100 [DEBUG] [Thread-67457] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:20:16.436 [DEBUG] [Thread-67460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:17.413 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:17.414 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:17.444 [DEBUG] [Thread-67461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:25.492 [DEBUG] [Thread-67462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:32.512 [DEBUG] [Thread-67463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:34.524 [DEBUG] [Thread-67464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:35.255 [DEBUG] [Thread-67465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:38.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:20:38.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:20:38.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:20:38.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 20, 11), 13.43, 40.11, 0.0, 40.23, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:20:38.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:20:11
2025-12-12T10:20:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:20:39.054 [DEBUG] [Thread-67466] [transport.py] [_log()] starting thread (client mode): 0xf57c94b0
2025-12-12T10:20:39.055 [DEBUG] [Thread-67466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:20:39.073 [DEBUG] [Thread-67466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:20:39.073 [INFO] [Thread-67466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] client lang: <none>
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] server lang: <none>
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] kex follows: False
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] Compression: none
2025-12-12T10:20:39.077 [DEBUG] [Thread-67466] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:20:39.093 [DEBUG] [Thread-67466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:20:39.093 [DEBUG] [Thread-67466] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:20:39.094 [DEBUG] [Thread-67466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:20:39.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:20:39.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:20:39.096 [DEBUG] [Thread-67466] [transport.py] [_log()] userauth is OK
2025-12-12T10:20:39.096 [DEBUG] [Thread-67466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:20:39.096 [DEBUG] [Thread-67466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:20:39.096 [DEBUG] [Thread-67466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:20:39.096 [DEBUG] [Thread-67466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:20:39.113 [INFO] [Thread-67466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:20:39.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:20:39.681 [DEBUG] [Thread-67466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:20:39.681 [DEBUG] [Thread-67466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:20:39.681 [DEBUG] [Thread-67466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:20:39.722 [DEBUG] [Thread-67466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:20:39.722 [DEBUG] [Thread-67466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:20:39.726 [DEBUG] [Thread-67466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:20:39.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:20:39.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:20:39.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:20:39.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:20:39.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:20:39.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:20:39.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:20:39.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:20:39.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:20:39.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.347262 -999.00  +14.70  29.73     44   +2.60 1 2 1 1 1   888    0 9.35 -110.96 ----- 24.4 29.7 1.5 39.5 17.5 -17.0 -999.0 -999.0 16.8 -15.8 17.0 -18.2
2025-12-12T10:20:39.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:20:39.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:20:39.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.347262
2025-12-12T10:20:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:20:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:20:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:20:39.756 [DEBUG] [Thread-67466] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:20:39.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:20:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:20:39.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:20:11', tmtdew=13.43, humidity=40.11, cloud=0.0, wind=40.23, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:20:03.437', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:20:39.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:20:39.851 [DEBUG] [Thread-67469] [transport.py] [_log()] starting thread (client mode): 0xf57c8370
2025-12-12T10:20:39.851 [DEBUG] [Thread-67469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:20:39.867 [DEBUG] [Thread-67469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:20:39.867 [INFO] [Thread-67469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] client lang: <none>
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] server lang: <none>
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] kex follows: False
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:20:39.875 [DEBUG] [Thread-67469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:20:39.876 [DEBUG] [Thread-67469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:20:39.876 [DEBUG] [Thread-67469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:20:39.876 [DEBUG] [Thread-67469] [transport.py] [_log()] Compression: none
2025-12-12T10:20:39.876 [DEBUG] [Thread-67469] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:20:39.933 [DEBUG] [Thread-67469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:20:39.934 [DEBUG] [Thread-67469] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:20:39.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:20:39.935 [DEBUG] [Thread-67469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:20:39.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:20:39.989 [DEBUG] [Thread-67469] [transport.py] [_log()] userauth is OK
2025-12-12T10:20:39.989 [DEBUG] [Thread-67469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:20:39.990 [DEBUG] [Thread-67469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:20:39.990 [DEBUG] [Thread-67469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:20:39.990 [DEBUG] [Thread-67469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:20:40.008 [INFO] [Thread-67469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:20:40.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:20:40.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:20:40.841 [DEBUG] [Thread-67469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:20:40.841 [DEBUG] [Thread-67469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:20:40.889 [DEBUG] [Thread-67469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:20:40.889 [DEBUG] [Thread-67469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:20:40.898 [DEBUG] [Thread-67469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:20:40.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:20:40.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:20:40.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:20:40.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:20:40.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:20:40.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:20:40.935 [DEBUG] [Thread-67469] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:20:43.546 [DEBUG] [Thread-67471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:47.558 [DEBUG] [Thread-67472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:20:52.582 [DEBUG] [Thread-67473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:01.610 [DEBUG] [Thread-67474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:02.617 [DEBUG] [Thread-67475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:10.642 [DEBUG] [Thread-67476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:21:10.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:21:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:21:11.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 20, 43), 13.78, 39.34, 0.0, 36.84, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:21:11.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:20:43
2025-12-12T10:21:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:21:11.903 [DEBUG] [Thread-67477] [transport.py] [_log()] starting thread (client mode): 0xf57c97e0
2025-12-12T10:21:11.903 [DEBUG] [Thread-67477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:21:11.925 [DEBUG] [Thread-67477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:21:11.926 [INFO] [Thread-67477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] client lang: <none>
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] server lang: <none>
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] kex follows: False
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] Compression: none
2025-12-12T10:21:11.928 [DEBUG] [Thread-67477] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:21:11.945 [DEBUG] [Thread-67477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:21:11.946 [DEBUG] [Thread-67477] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:21:11.946 [DEBUG] [Thread-67477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:21:11.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:21:11.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:21:11.948 [DEBUG] [Thread-67477] [transport.py] [_log()] userauth is OK
2025-12-12T10:21:11.948 [DEBUG] [Thread-67477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:21:11.948 [DEBUG] [Thread-67477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:21:11.948 [DEBUG] [Thread-67477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:21:11.949 [DEBUG] [Thread-67477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:21:11.983 [INFO] [Thread-67477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:21:11.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:21:12.708 [DEBUG] [Thread-67477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:21:12.708 [DEBUG] [Thread-67477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:21:12.708 [DEBUG] [Thread-67477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:21:12.750 [DEBUG] [Thread-67477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:21:12.750 [DEBUG] [Thread-67477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:21:12.752 [DEBUG] [Thread-67477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:21:12.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:21:12.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:21:12.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:21:12.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:21:12.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:21:12.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:21:12.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:21:12.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:21:12.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:21:12.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.348014 -999.00  +14.60  27.73     44   +2.50 1 2 1 1 1   888    0 9.65 -112.32 ----- 22.2 27.7 21.5 41.8 17.5 -17.7 17.1 -17.8 16.8 -16.4 17.0 -19.1
2025-12-12T10:21:12.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:21:12.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:21:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.348014
2025-12-12T10:21:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:21:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:21:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:21:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:21:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:21:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:20:43', tmtdew=13.78, humidity=39.34, cloud=0.0, wind=36.84, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:21:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:21:12.773 [DEBUG] [Thread-67477] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:21:12.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:21:12.862 [DEBUG] [Thread-67480] [transport.py] [_log()] starting thread (client mode): 0xf57cba60
2025-12-12T10:21:12.862 [DEBUG] [Thread-67480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:21:12.880 [DEBUG] [Thread-67480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:21:12.880 [INFO] [Thread-67480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:21:12.890 [DEBUG] [Thread-67480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:21:12.890 [DEBUG] [Thread-67480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:21:12.890 [DEBUG] [Thread-67480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] client lang: <none>
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] server lang: <none>
2025-12-12T10:21:12.891 [DEBUG] [Thread-67480] [transport.py] [_log()] kex follows: False
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] Compression: none
2025-12-12T10:21:12.892 [DEBUG] [Thread-67480] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:21:12.949 [DEBUG] [Thread-67480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:21:12.949 [DEBUG] [Thread-67480] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:21:12.950 [DEBUG] [Thread-67480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:21:12.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:21:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:21:13.005 [DEBUG] [Thread-67480] [transport.py] [_log()] userauth is OK
2025-12-12T10:21:13.006 [DEBUG] [Thread-67480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:21:13.006 [DEBUG] [Thread-67480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:21:13.006 [DEBUG] [Thread-67480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:21:13.006 [DEBUG] [Thread-67480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:21:13.024 [INFO] [Thread-67480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:21:13.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:21:13.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:21:13.875 [DEBUG] [Thread-67480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:21:13.875 [DEBUG] [Thread-67480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:21:13.923 [DEBUG] [Thread-67480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:21:13.923 [DEBUG] [Thread-67480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:21:13.934 [DEBUG] [Thread-67480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:21:13.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:21:13.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:21:13.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:21:13.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:21:13.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:21:13.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:21:13.973 [DEBUG] [Thread-67480] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:21:17.553 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:17.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:17.660 [DEBUG] [Thread-67482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:19.699 [DEBUG] [Thread-67483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:28.720 [DEBUG] [Thread-67484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:32.730 [DEBUG] [Thread-67485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:35.305 [DEBUG] [Thread-67486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:37.747 [DEBUG] [Thread-67487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:21:43.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:21:43.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:21:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 21, 15), 13.81, 39.26, 0.0, 35.41, 14.77, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:21:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:21:15
2025-12-12T10:21:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:21:44.917 [DEBUG] [Thread-67488] [transport.py] [_log()] starting thread (client mode): 0xf57c9ed0
2025-12-12T10:21:44.917 [DEBUG] [Thread-67488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:21:44.937 [DEBUG] [Thread-67488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:21:44.937 [INFO] [Thread-67488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:21:44.940 [DEBUG] [Thread-67488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] client lang: <none>
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] server lang: <none>
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] kex follows: False
2025-12-12T10:21:44.941 [DEBUG] [Thread-67488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:21:44.942 [DEBUG] [Thread-67488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:21:44.942 [DEBUG] [Thread-67488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:21:44.942 [DEBUG] [Thread-67488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:21:44.942 [DEBUG] [Thread-67488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:21:44.942 [DEBUG] [Thread-67488] [transport.py] [_log()] Compression: none
2025-12-12T10:21:44.942 [DEBUG] [Thread-67488] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:21:44.959 [DEBUG] [Thread-67488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:21:44.959 [DEBUG] [Thread-67488] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:21:44.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:21:44.960 [DEBUG] [Thread-67488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:21:44.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:21:44.963 [DEBUG] [Thread-67488] [transport.py] [_log()] userauth is OK
2025-12-12T10:21:44.963 [DEBUG] [Thread-67488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:21:44.963 [DEBUG] [Thread-67488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:21:44.963 [DEBUG] [Thread-67488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:21:44.963 [DEBUG] [Thread-67488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:21:44.998 [INFO] [Thread-67488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:21:44.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:21:45.594 [DEBUG] [Thread-67488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:21:45.594 [DEBUG] [Thread-67488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:21:45.595 [DEBUG] [Thread-67488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:21:45.635 [DEBUG] [Thread-67488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:21:45.635 [DEBUG] [Thread-67488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:21:45.638 [DEBUG] [Thread-67488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:21:45.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:21:45.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:21:45.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:21:45.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:21:45.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:21:45.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:21:45.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:21:45.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:21:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:21:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.348014 -999.00  +14.60  27.73     44   +2.50 1 2 1 1 1   888    0 9.65 -112.32 ----- 22.2 27.7 21.5 41.8 17.5 -17.7 17.1 -17.8 16.8 -16.4 17.0 -19.1
2025-12-12T10:21:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:21:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:21:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.348014
2025-12-12T10:21:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:21:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:21:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:21:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:21:45.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:21:45.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:21:15', tmtdew=13.81, humidity=39.26, cloud=0.0, wind=35.41, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:21:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:21:45.666 [DEBUG] [Thread-67488] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:21:45.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:21:45.762 [DEBUG] [Thread-67491] [transport.py] [_log()] starting thread (client mode): 0xf57caad0
2025-12-12T10:21:45.762 [DEBUG] [Thread-67491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:21:45.777 [DEBUG] [Thread-67491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:21:45.777 [INFO] [Thread-67491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:21:45.784 [DEBUG] [Thread-67491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:21:45.784 [DEBUG] [Thread-67491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:21:45.784 [DEBUG] [Thread-67491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] client lang: <none>
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] server lang: <none>
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] kex follows: False
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] Compression: none
2025-12-12T10:21:45.785 [DEBUG] [Thread-67491] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:21:45.846 [DEBUG] [Thread-67491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:21:45.847 [DEBUG] [Thread-67491] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:21:45.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:21:45.848 [DEBUG] [Thread-67491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:21:45.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:21:45.908 [DEBUG] [Thread-67491] [transport.py] [_log()] userauth is OK
2025-12-12T10:21:45.908 [DEBUG] [Thread-67491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:21:45.908 [DEBUG] [Thread-67491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:21:45.908 [DEBUG] [Thread-67491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:21:45.908 [DEBUG] [Thread-67491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:21:45.932 [INFO] [Thread-67491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:21:45.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:21:45.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:21:46.770 [DEBUG] [Thread-67493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:46.794 [DEBUG] [Thread-67491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:21:46.794 [DEBUG] [Thread-67491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:21:46.842 [DEBUG] [Thread-67491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:21:46.842 [DEBUG] [Thread-67491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:21:46.851 [DEBUG] [Thread-67491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:21:46.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:21:46.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:21:46.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:21:46.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:21:46.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:21:46.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:21:46.891 [DEBUG] [Thread-67491] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:21:47.775 [DEBUG] [Thread-67494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:21:55.802 [DEBUG] [Thread-67495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:02.819 [DEBUG] [Thread-67496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:04.828 [DEBUG] [Thread-67497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:13.850 [DEBUG] [Thread-67498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:16.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:22:16.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:22:16.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:22:17.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 21, 47), 13.79, 39.19, 0.0, 44.53, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:22:17.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:21:47
2025-12-12T10:22:17.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:17.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:22:17.862 [DEBUG] [Thread-67499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:17.907 [DEBUG] [Thread-67500] [transport.py] [_log()] starting thread (client mode): 0xf57cb070
2025-12-12T10:22:17.907 [DEBUG] [Thread-67500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:22:17.921 [DEBUG] [Thread-67500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:22:17.921 [INFO] [Thread-67500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:22:17.924 [DEBUG] [Thread-67500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:22:17.924 [DEBUG] [Thread-67500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:22:17.924 [DEBUG] [Thread-67500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:22:17.924 [DEBUG] [Thread-67500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] client lang: <none>
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] server lang: <none>
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] kex follows: False
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] Compression: none
2025-12-12T10:22:17.925 [DEBUG] [Thread-67500] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:22:17.942 [DEBUG] [Thread-67500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:22:17.943 [DEBUG] [Thread-67500] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:22:17.943 [DEBUG] [Thread-67500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:22:17.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:22:17.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:22:17.945 [DEBUG] [Thread-67500] [transport.py] [_log()] userauth is OK
2025-12-12T10:22:17.946 [DEBUG] [Thread-67500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:22:17.946 [DEBUG] [Thread-67500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:22:17.946 [DEBUG] [Thread-67500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:22:17.946 [DEBUG] [Thread-67500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:22:17.970 [INFO] [Thread-67500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:22:17.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:22:18.609 [DEBUG] [Thread-67500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:22:18.610 [DEBUG] [Thread-67500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:22:18.610 [DEBUG] [Thread-67500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:22:18.651 [DEBUG] [Thread-67500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:22:18.651 [DEBUG] [Thread-67500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:22:18.654 [DEBUG] [Thread-67500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:22:18.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:22:18.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:22:18.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:22:18.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:22:18.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:22:18.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:22:18.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:22:18.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.348361 -999.00  +14.80  20.92     44   +2.70 1 2 1 1 1   888    0 9.55 -106.66 ----- 21.8 20.9 341.0 38.4 17.6 -16.0 17.2 -15.9 16.8 -16.0 17.1 -15.6
2025-12-12T10:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.348361
2025-12-12T10:22:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:22:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:22:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:22:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:22:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:22:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:21:47', tmtdew=13.79, humidity=39.19, cloud=0.0, wind=44.53, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:21:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:22:18.679 [DEBUG] [Thread-67500] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:22:18.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:22:18.774 [DEBUG] [Thread-67503] [transport.py] [_log()] starting thread (client mode): 0xf2d0e3e0
2025-12-12T10:22:18.775 [DEBUG] [Thread-67503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:22:18.789 [DEBUG] [Thread-67503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:22:18.789 [INFO] [Thread-67503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:22:18.797 [DEBUG] [Thread-67503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:22:18.798 [DEBUG] [Thread-67503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:22:18.798 [DEBUG] [Thread-67503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:22:18.798 [DEBUG] [Thread-67503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:18.798 [DEBUG] [Thread-67503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] client lang: <none>
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] server lang: <none>
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] kex follows: False
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] Compression: none
2025-12-12T10:22:18.799 [DEBUG] [Thread-67503] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:22:18.858 [DEBUG] [Thread-67503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:22:18.858 [DEBUG] [Thread-67503] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:22:18.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:22:18.859 [DEBUG] [Thread-67503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:22:18.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:22:18.913 [DEBUG] [Thread-67503] [transport.py] [_log()] userauth is OK
2025-12-12T10:22:18.914 [DEBUG] [Thread-67503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:22:18.914 [DEBUG] [Thread-67503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:22:18.914 [DEBUG] [Thread-67503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:22:18.914 [DEBUG] [Thread-67503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:22:18.932 [INFO] [Thread-67503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:22:18.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:22:18.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:22:19.787 [DEBUG] [Thread-67503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:22:19.787 [DEBUG] [Thread-67503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:22:19.834 [DEBUG] [Thread-67503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:22:19.834 [DEBUG] [Thread-67503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:22:19.842 [DEBUG] [Thread-67503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:22:19.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:22:19.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:22:19.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:22:19.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:22:19.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:22:19.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:22:19.874 [DEBUG] [Thread-67503] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:22:22.882 [DEBUG] [Thread-67505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:31.908 [DEBUG] [Thread-67506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:32.917 [DEBUG] [Thread-67507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:35.355 [DEBUG] [Thread-67508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:40.955 [DEBUG] [Thread-67509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:47.972 [DEBUG] [Thread-67510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:49.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:22:49.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:22:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:22:49.978 [DEBUG] [Thread-67511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:22:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 22, 19), 13.78, 39.24, 0.0, 41.57, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:22:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:22:19
2025-12-12T10:22:50.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:22:50.805 [DEBUG] [Thread-67512] [transport.py] [_log()] starting thread (client mode): 0xf2d0e140
2025-12-12T10:22:50.805 [DEBUG] [Thread-67512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:22:50.825 [DEBUG] [Thread-67512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:22:50.825 [INFO] [Thread-67512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] client lang: <none>
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] server lang: <none>
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] kex follows: False
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:22:50.829 [DEBUG] [Thread-67512] [transport.py] [_log()] Compression: none
2025-12-12T10:22:50.830 [DEBUG] [Thread-67512] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:22:50.845 [DEBUG] [Thread-67512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:22:50.846 [DEBUG] [Thread-67512] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:22:50.846 [DEBUG] [Thread-67512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:22:50.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:22:50.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:22:50.848 [DEBUG] [Thread-67512] [transport.py] [_log()] userauth is OK
2025-12-12T10:22:50.848 [DEBUG] [Thread-67512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:22:50.848 [DEBUG] [Thread-67512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:22:50.848 [DEBUG] [Thread-67512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:22:50.849 [DEBUG] [Thread-67512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:22:50.883 [INFO] [Thread-67512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:22:50.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:22:51.520 [DEBUG] [Thread-67512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:22:51.521 [DEBUG] [Thread-67512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:22:51.521 [DEBUG] [Thread-67512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:22:51.561 [DEBUG] [Thread-67512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:22:51.562 [DEBUG] [Thread-67512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:22:51.565 [DEBUG] [Thread-67512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:22:51.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:22:51.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:22:51.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:22:51.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:22:51.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:22:51.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:22:51.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:22:51.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:22:51.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:22:51.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.348708 -999.00  +14.80  31.79     44   +2.90 1 2 2 1 1   888    0 9.59 -104.48 ----- 25.8 31.8 19.0 40.5 17.9 -15.7 17.4 -16.0 17.1 -14.3 17.3 -17.9
2025-12-12T10:22:51.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:22:51.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:22:51.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.348708
2025-12-12T10:22:51.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:22:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:22:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:22:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:22:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:22:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:22:19', tmtdew=13.78, humidity=39.24, cloud=0.0, wind=41.57, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:22:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:22:51.589 [DEBUG] [Thread-67512] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:22:51.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:22:51.698 [DEBUG] [Thread-67515] [transport.py] [_log()] starting thread (client mode): 0xf2d0d3f0
2025-12-12T10:22:51.698 [DEBUG] [Thread-67515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:22:51.713 [DEBUG] [Thread-67515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:22:51.713 [INFO] [Thread-67515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:22:51.720 [DEBUG] [Thread-67515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:22:51.720 [DEBUG] [Thread-67515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:22:51.720 [DEBUG] [Thread-67515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:22:51.720 [DEBUG] [Thread-67515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:51.720 [DEBUG] [Thread-67515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:22:51.720 [DEBUG] [Thread-67515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] client lang: <none>
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] server lang: <none>
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] kex follows: False
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] Compression: none
2025-12-12T10:22:51.721 [DEBUG] [Thread-67515] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:22:51.777 [DEBUG] [Thread-67515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:22:51.777 [DEBUG] [Thread-67515] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:22:51.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:22:51.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:22:51.777 [DEBUG] [Thread-67515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:22:51.833 [DEBUG] [Thread-67515] [transport.py] [_log()] userauth is OK
2025-12-12T10:22:51.833 [DEBUG] [Thread-67515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:22:51.833 [DEBUG] [Thread-67515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:22:51.833 [DEBUG] [Thread-67515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:22:51.833 [DEBUG] [Thread-67515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:22:51.848 [INFO] [Thread-67515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:22:51.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:22:51.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:22:52.718 [DEBUG] [Thread-67515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:22:52.718 [DEBUG] [Thread-67515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:22:52.765 [DEBUG] [Thread-67515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:22:52.765 [DEBUG] [Thread-67515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:22:52.773 [DEBUG] [Thread-67515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:22:52.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:22:52.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:22:52.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:22:52.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:22:52.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:22:52.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:22:52.805 [DEBUG] [Thread-67515] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:22:58.995 [DEBUG] [Thread-67517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:03.004 [DEBUG] [Thread-67518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:08.036 [DEBUG] [Thread-67519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:17.059 [DEBUG] [Thread-67520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:17.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:17.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:18.067 [DEBUG] [Thread-67521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:23:22.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:23:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:23:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 22, 51), 13.72, 39.64, 0.0, 35.31, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:23:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:22:51
2025-12-12T10:23:23.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:23:23.828 [DEBUG] [Thread-67522] [transport.py] [_log()] starting thread (client mode): 0xf2d0c610
2025-12-12T10:23:23.828 [DEBUG] [Thread-67522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:23:23.848 [DEBUG] [Thread-67522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:23:23.848 [INFO] [Thread-67522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:23:23.851 [DEBUG] [Thread-67522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:23:23.851 [DEBUG] [Thread-67522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:23:23.851 [DEBUG] [Thread-67522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:23:23.851 [DEBUG] [Thread-67522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] client lang: <none>
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] server lang: <none>
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] kex follows: False
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] Compression: none
2025-12-12T10:23:23.852 [DEBUG] [Thread-67522] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:23:23.867 [DEBUG] [Thread-67522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:23:23.867 [DEBUG] [Thread-67522] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:23:23.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:23:23.868 [DEBUG] [Thread-67522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:23:23.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:23:23.869 [DEBUG] [Thread-67522] [transport.py] [_log()] userauth is OK
2025-12-12T10:23:23.869 [DEBUG] [Thread-67522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:23:23.869 [DEBUG] [Thread-67522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:23:23.869 [DEBUG] [Thread-67522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:23:23.869 [DEBUG] [Thread-67522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:23:23.884 [INFO] [Thread-67522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:23:23.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:23:24.515 [DEBUG] [Thread-67522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:23:24.515 [DEBUG] [Thread-67522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:23:24.516 [DEBUG] [Thread-67522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:23:24.557 [DEBUG] [Thread-67522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:23:24.557 [DEBUG] [Thread-67522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:23:24.559 [DEBUG] [Thread-67522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:23:24.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:23:24.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:23:24.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:23:24.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:23:24.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:23:24.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:23:24.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:23:24.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.349055 -999.00  +14.70  23.90     44   +2.80 1 2 1 1 1   888    0 9.79 -99.67 ----- 29.0 23.9 1.8 37.5 18.0 -14.8 17.6 -14.8 17.1 -13.6 17.4 -15.6
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.349055
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:23:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:22:51', tmtdew=13.72, humidity=39.64, cloud=0.0, wind=35.31, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:22:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:23:24.577 [DEBUG] [Thread-67522] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:23:24.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:23:24.663 [DEBUG] [Thread-67525] [transport.py] [_log()] starting thread (client mode): 0xf57ca4d0
2025-12-12T10:23:24.663 [DEBUG] [Thread-67525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:23:24.678 [DEBUG] [Thread-67525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:23:24.678 [INFO] [Thread-67525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] client lang: <none>
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] server lang: <none>
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] kex follows: False
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:23:24.687 [DEBUG] [Thread-67525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:23:24.688 [DEBUG] [Thread-67525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:23:24.688 [DEBUG] [Thread-67525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:23:24.688 [DEBUG] [Thread-67525] [transport.py] [_log()] Compression: none
2025-12-12T10:23:24.688 [DEBUG] [Thread-67525] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:23:24.744 [DEBUG] [Thread-67525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:23:24.744 [DEBUG] [Thread-67525] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:23:24.745 [DEBUG] [Thread-67525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:23:24.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:23:24.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:23:24.801 [DEBUG] [Thread-67525] [transport.py] [_log()] userauth is OK
2025-12-12T10:23:24.801 [DEBUG] [Thread-67525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:23:24.801 [DEBUG] [Thread-67525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:23:24.801 [DEBUG] [Thread-67525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:23:24.801 [DEBUG] [Thread-67525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:23:24.814 [INFO] [Thread-67525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:23:24.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:23:24.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:23:25.653 [DEBUG] [Thread-67525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:23:25.653 [DEBUG] [Thread-67525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:23:25.702 [DEBUG] [Thread-67525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:23:25.702 [DEBUG] [Thread-67525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:23:25.710 [DEBUG] [Thread-67525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:23:25.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:23:25.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:23:25.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:23:25.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:23:25.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:23:25.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:23:25.744 [DEBUG] [Thread-67525] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:23:26.090 [DEBUG] [Thread-67527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:33.107 [DEBUG] [Thread-67528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:35.136 [DEBUG] [Thread-67529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:35.397 [DEBUG] [Thread-67530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:44.159 [DEBUG] [Thread-67531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:48.173 [DEBUG] [Thread-67532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:53.191 [DEBUG] [Thread-67533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:23:55.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:23:55.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:23:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:23:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 23, 23), 13.77, 39.51, 0.0, 38.75, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:23:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:23:23
2025-12-12T10:23:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:23:56.775 [DEBUG] [Thread-67534] [transport.py] [_log()] starting thread (client mode): 0xf2d0cdf0
2025-12-12T10:23:56.775 [DEBUG] [Thread-67534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:23:56.795 [DEBUG] [Thread-67534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:23:56.795 [INFO] [Thread-67534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] client lang: <none>
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] server lang: <none>
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] kex follows: False
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] Compression: none
2025-12-12T10:23:56.799 [DEBUG] [Thread-67534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:23:56.814 [DEBUG] [Thread-67534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:23:56.815 [DEBUG] [Thread-67534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:23:56.815 [DEBUG] [Thread-67534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:23:56.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:23:56.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:23:56.816 [DEBUG] [Thread-67534] [transport.py] [_log()] userauth is OK
2025-12-12T10:23:56.816 [DEBUG] [Thread-67534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:23:56.816 [DEBUG] [Thread-67534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:23:56.816 [DEBUG] [Thread-67534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:23:56.816 [DEBUG] [Thread-67534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:23:56.827 [INFO] [Thread-67534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:23:56.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:23:57.497 [DEBUG] [Thread-67534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:23:57.497 [DEBUG] [Thread-67534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:23:57.497 [DEBUG] [Thread-67534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:23:57.537 [DEBUG] [Thread-67534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:23:57.537 [DEBUG] [Thread-67534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:23:57.540 [DEBUG] [Thread-67534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:23:57.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:23:57.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:23:57.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:23:57.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:23:57.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:23:57.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:23:57.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.349403 -999.00  +15.00  25.57     44   +2.80 1 2 1 1 1   888    0 9.69 -97.51 ----- 19.4 25.6 19.2 45.4 18.2 -15.6 17.8 -15.5 17.3 -15.0 17.6 -15.3
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.349403
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:23:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:23:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:23:23', tmtdew=13.77, humidity=39.51, cloud=0.0, wind=38.75, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:23:08.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:23:57.558 [DEBUG] [Thread-67534] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:23:57.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:23:57.647 [DEBUG] [Thread-67537] [transport.py] [_log()] starting thread (client mode): 0xf2d0d9f0
2025-12-12T10:23:57.648 [DEBUG] [Thread-67537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:23:57.666 [DEBUG] [Thread-67537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:23:57.666 [INFO] [Thread-67537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] client lang: <none>
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] server lang: <none>
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] kex follows: False
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:23:57.678 [DEBUG] [Thread-67537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:23:57.679 [DEBUG] [Thread-67537] [transport.py] [_log()] Compression: none
2025-12-12T10:23:57.679 [DEBUG] [Thread-67537] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:23:57.739 [DEBUG] [Thread-67537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:23:57.739 [DEBUG] [Thread-67537] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:23:57.739 [DEBUG] [Thread-67537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:23:57.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:23:57.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:23:57.803 [DEBUG] [Thread-67537] [transport.py] [_log()] userauth is OK
2025-12-12T10:23:57.803 [DEBUG] [Thread-67537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:23:57.803 [DEBUG] [Thread-67537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:23:57.803 [DEBUG] [Thread-67537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:23:57.803 [DEBUG] [Thread-67537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:23:57.826 [INFO] [Thread-67537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:23:57.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:23:57.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:23:58.702 [DEBUG] [Thread-67537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:23:58.702 [DEBUG] [Thread-67537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:23:58.750 [DEBUG] [Thread-67537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:23:58.751 [DEBUG] [Thread-67537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:23:58.759 [DEBUG] [Thread-67537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:23:58.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:23:58.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:23:58.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:23:58.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:23:58.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:23:58.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:23:58.797 [DEBUG] [Thread-67537] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:24:02.211 [DEBUG] [Thread-67539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:03.215 [DEBUG] [Thread-67540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:11.253 [DEBUG] [Thread-67541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:17.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:17.982 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:18.272 [DEBUG] [Thread-67542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:20.285 [DEBUG] [Thread-67543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:24:28.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:24:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:24:29.303 [DEBUG] [Thread-67544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 23, 55), 13.8, 39.08, 0.0, 30.08, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:24:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:23:55
2025-12-12T10:24:29.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:24:29.811 [DEBUG] [Thread-67545] [transport.py] [_log()] starting thread (client mode): 0xf2d0ff10
2025-12-12T10:24:29.811 [DEBUG] [Thread-67545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:24:29.831 [DEBUG] [Thread-67545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:24:29.831 [INFO] [Thread-67545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:24:29.834 [DEBUG] [Thread-67545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] client lang: <none>
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] server lang: <none>
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] kex follows: False
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] Compression: none
2025-12-12T10:24:29.835 [DEBUG] [Thread-67545] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:24:29.851 [DEBUG] [Thread-67545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:24:29.852 [DEBUG] [Thread-67545] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:24:29.852 [DEBUG] [Thread-67545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:24:29.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:24:29.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:24:29.854 [DEBUG] [Thread-67545] [transport.py] [_log()] userauth is OK
2025-12-12T10:24:29.854 [DEBUG] [Thread-67545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:24:29.854 [DEBUG] [Thread-67545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:24:29.854 [DEBUG] [Thread-67545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:24:29.854 [DEBUG] [Thread-67545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:24:29.872 [INFO] [Thread-67545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:24:29.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:24:30.474 [DEBUG] [Thread-67545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:24:30.474 [DEBUG] [Thread-67545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:24:30.474 [DEBUG] [Thread-67545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:24:30.515 [DEBUG] [Thread-67545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:24:30.515 [DEBUG] [Thread-67545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:24:30.519 [DEBUG] [Thread-67545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:24:30.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:24:30.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:24:30.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:24:30.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:24:30.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:24:30.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:24:30.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:24:30.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:24:30.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:24:30.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.349750 -999.00  +15.00  29.17     43   +2.60 1 2 1 1 1   888    0 9.96 -93.79 ----- 30.9 29.2 11.9 40.6 18.4 -16.5 17.8 -16.8 17.3 -15.6 17.6 -17.1
2025-12-12T10:24:30.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:24:30.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:24:30.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.349750
2025-12-12T10:24:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:24:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:24:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:24:30.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:24:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:24:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:23:55', tmtdew=13.8, humidity=39.08, cloud=0.0, wind=30.08, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:23:38.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:24:30.543 [DEBUG] [Thread-67545] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:24:30.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:24:30.635 [DEBUG] [Thread-67548] [transport.py] [_log()] starting thread (client mode): 0xf2d0fdc0
2025-12-12T10:24:30.636 [DEBUG] [Thread-67548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:24:30.650 [DEBUG] [Thread-67548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:24:30.650 [INFO] [Thread-67548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] client lang: <none>
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] server lang: <none>
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] kex follows: False
2025-12-12T10:24:30.658 [DEBUG] [Thread-67548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:24:30.659 [DEBUG] [Thread-67548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:24:30.659 [DEBUG] [Thread-67548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:24:30.659 [DEBUG] [Thread-67548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:24:30.659 [DEBUG] [Thread-67548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:24:30.659 [DEBUG] [Thread-67548] [transport.py] [_log()] Compression: none
2025-12-12T10:24:30.659 [DEBUG] [Thread-67548] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:24:30.717 [DEBUG] [Thread-67548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:24:30.718 [DEBUG] [Thread-67548] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:24:30.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:24:30.719 [DEBUG] [Thread-67548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:24:30.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:24:30.773 [DEBUG] [Thread-67548] [transport.py] [_log()] userauth is OK
2025-12-12T10:24:30.774 [DEBUG] [Thread-67548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:24:30.774 [DEBUG] [Thread-67548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:24:30.774 [DEBUG] [Thread-67548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:24:30.774 [DEBUG] [Thread-67548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:24:30.792 [INFO] [Thread-67548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:24:30.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:24:30.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:24:31.704 [DEBUG] [Thread-67548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:24:31.704 [DEBUG] [Thread-67548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:24:31.751 [DEBUG] [Thread-67548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:24:31.751 [DEBUG] [Thread-67548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:24:31.760 [DEBUG] [Thread-67548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:24:31.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:24:31.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:24:31.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:24:31.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:24:31.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:24:31.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:24:31.791 [DEBUG] [Thread-67548] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:24:33.317 [DEBUG] [Thread-67550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:35.460 [DEBUG] [Thread-67551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:38.349 [DEBUG] [Thread-67552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:47.369 [DEBUG] [Thread-67553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:48.376 [DEBUG] [Thread-67554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:24:56.400 [DEBUG] [Thread-67555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:01.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:25:01.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:25:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:25:02.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 24, 27), 13.77, 39.19, 0.0, 30.91, 15.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:25:02.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:24:27
2025-12-12T10:25:02.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:25:02.771 [DEBUG] [Thread-67556] [transport.py] [_log()] starting thread (client mode): 0xf57c8ee0
2025-12-12T10:25:02.771 [DEBUG] [Thread-67556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:25:02.792 [DEBUG] [Thread-67556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:25:02.793 [INFO] [Thread-67556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:02.796 [DEBUG] [Thread-67556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] client lang: <none>
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] server lang: <none>
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] kex follows: False
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] Compression: none
2025-12-12T10:25:02.797 [DEBUG] [Thread-67556] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:25:02.815 [DEBUG] [Thread-67556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:25:02.815 [DEBUG] [Thread-67556] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:25:02.815 [DEBUG] [Thread-67556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:25:02.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:25:02.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:25:02.817 [DEBUG] [Thread-67556] [transport.py] [_log()] userauth is OK
2025-12-12T10:25:02.817 [DEBUG] [Thread-67556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:25:02.818 [DEBUG] [Thread-67556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:25:02.818 [DEBUG] [Thread-67556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:25:02.818 [DEBUG] [Thread-67556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:25:02.842 [INFO] [Thread-67556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:25:02.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:25:03.418 [DEBUG] [Thread-67558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:03.715 [DEBUG] [Thread-67556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:25:03.715 [DEBUG] [Thread-67556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:25:03.716 [DEBUG] [Thread-67556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:25:03.756 [DEBUG] [Thread-67556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:25:03.756 [DEBUG] [Thread-67556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:25:03.758 [DEBUG] [Thread-67556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:25:03.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:25:03.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:25:03.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:25:03.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:25:03.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:25:03.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:25:03.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:25:03.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:25:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:25:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.350098 -999.00  +14.90  27.22     43   +2.70 1 2 1 1 1   888    0 9.95 -95.72 ----- 36.6 27.2 344.4 37.8 18.4 -16.9 18.0 -17.0 17.4 -16.2 17.7 -17.4
2025-12-12T10:25:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:25:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:25:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.350098
2025-12-12T10:25:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:25:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:25:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:25:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:25:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:25:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:24:27', tmtdew=13.77, humidity=39.19, cloud=0.0, wind=30.91, temperature=15.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:24:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:25:03.785 [DEBUG] [Thread-67556] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:25:03.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:25:03.883 [DEBUG] [Thread-67560] [transport.py] [_log()] starting thread (client mode): 0xf57c9ae0
2025-12-12T10:25:03.884 [DEBUG] [Thread-67560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:25:03.898 [DEBUG] [Thread-67560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:25:03.898 [INFO] [Thread-67560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:03.905 [DEBUG] [Thread-67560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] client lang: <none>
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] server lang: <none>
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] kex follows: False
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] Compression: none
2025-12-12T10:25:03.906 [DEBUG] [Thread-67560] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:25:03.965 [DEBUG] [Thread-67560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:25:03.966 [DEBUG] [Thread-67560] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:25:03.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:25:03.968 [DEBUG] [Thread-67560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:25:03.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:25:04.021 [DEBUG] [Thread-67560] [transport.py] [_log()] userauth is OK
2025-12-12T10:25:04.021 [DEBUG] [Thread-67560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:25:04.022 [DEBUG] [Thread-67560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:25:04.022 [DEBUG] [Thread-67560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:25:04.022 [DEBUG] [Thread-67560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:25:04.052 [INFO] [Thread-67560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:25:04.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:25:04.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:25:04.922 [DEBUG] [Thread-67560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:25:04.923 [DEBUG] [Thread-67560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:25:04.971 [DEBUG] [Thread-67560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:25:04.971 [DEBUG] [Thread-67560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:25:04.979 [DEBUG] [Thread-67560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:25:04.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:25:04.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:25:04.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:25:05.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:25:05.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:25:05.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:25:05.013 [DEBUG] [Thread-67560] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:25:05.427 [DEBUG] [Thread-67562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:14.447 [DEBUG] [Thread-67563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:18.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:18.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:18.458 [DEBUG] [Thread-67564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:23.476 [DEBUG] [Thread-67565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:32.496 [DEBUG] [Thread-67566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:33.502 [DEBUG] [Thread-67567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:35.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:25:35.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:25:35.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:25:35.510 [DEBUG] [Thread-67568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 24, 59), 13.79, 39.16, 0.0, 42.5, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:25:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:24:59
2025-12-12T10:25:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:25:36.001 [DEBUG] [Thread-67569] [transport.py] [_log()] starting thread (client mode): 0xf57ca0e0
2025-12-12T10:25:36.001 [DEBUG] [Thread-67569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:25:36.022 [DEBUG] [Thread-67569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:25:36.022 [INFO] [Thread-67569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:25:36.025 [DEBUG] [Thread-67569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:25:36.025 [DEBUG] [Thread-67569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] client lang: <none>
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] server lang: <none>
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] kex follows: False
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:25:36.026 [DEBUG] [Thread-67569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:25:36.027 [DEBUG] [Thread-67569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:25:36.027 [DEBUG] [Thread-67569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:25:36.027 [DEBUG] [Thread-67569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:25:36.027 [DEBUG] [Thread-67569] [transport.py] [_log()] Compression: none
2025-12-12T10:25:36.027 [DEBUG] [Thread-67569] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:25:36.046 [DEBUG] [Thread-67569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:25:36.047 [DEBUG] [Thread-67569] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:25:36.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:25:36.049 [DEBUG] [Thread-67569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:25:36.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:25:36.051 [DEBUG] [Thread-67569] [transport.py] [_log()] userauth is OK
2025-12-12T10:25:36.051 [DEBUG] [Thread-67569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:25:36.052 [DEBUG] [Thread-67569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:25:36.052 [DEBUG] [Thread-67569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:25:36.052 [DEBUG] [Thread-67569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:25:36.084 [INFO] [Thread-67569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:25:36.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:25:36.730 [DEBUG] [Thread-67569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:25:36.730 [DEBUG] [Thread-67569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:25:36.731 [DEBUG] [Thread-67569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:25:36.771 [DEBUG] [Thread-67569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:25:36.771 [DEBUG] [Thread-67569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:25:36.774 [DEBUG] [Thread-67569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:25:36.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:25:36.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:25:36.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:25:36.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:25:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:25:36.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:25:36.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:25:36.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:25:36.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:25:36.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.350734 -999.00  +14.80  39.00     46   +3.50 1 2 2 1 1   888    0 9.77 -94.01 ----- 38.0 39.0 4.7 54.0 18.1 -21.0 17.7 -19.9 17.1 -18.3 17.4 -20.0
2025-12-12T10:25:36.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:25:36.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:25:36.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.350734
2025-12-12T10:25:36.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:25:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:25:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:25:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:25:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:25:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:24:59', tmtdew=13.79, humidity=39.16, cloud=0.0, wind=42.5, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:25:03.418', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:25:36.798 [DEBUG] [Thread-67569] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:25:36.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:25:36.890 [DEBUG] [Thread-67572] [transport.py] [_log()] starting thread (client mode): 0xf2d0e4a0
2025-12-12T10:25:36.890 [DEBUG] [Thread-67572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:25:36.905 [DEBUG] [Thread-67572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:25:36.905 [INFO] [Thread-67572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:25:36.912 [DEBUG] [Thread-67572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:25:36.912 [DEBUG] [Thread-67572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] client lang: <none>
2025-12-12T10:25:36.913 [DEBUG] [Thread-67572] [transport.py] [_log()] server lang: <none>
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] kex follows: False
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:25:36.914 [DEBUG] [Thread-67572] [transport.py] [_log()] Compression: none
2025-12-12T10:25:36.915 [DEBUG] [Thread-67572] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:25:36.968 [DEBUG] [Thread-67572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:25:36.969 [DEBUG] [Thread-67572] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:25:36.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:25:36.970 [DEBUG] [Thread-67572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:25:36.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:25:37.025 [DEBUG] [Thread-67572] [transport.py] [_log()] userauth is OK
2025-12-12T10:25:37.025 [DEBUG] [Thread-67572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:25:37.025 [DEBUG] [Thread-67572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:25:37.025 [DEBUG] [Thread-67572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:25:37.025 [DEBUG] [Thread-67572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:25:37.040 [INFO] [Thread-67572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:25:37.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:25:37.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:25:37.944 [DEBUG] [Thread-67572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:25:37.944 [DEBUG] [Thread-67572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:25:37.992 [DEBUG] [Thread-67572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:25:37.993 [DEBUG] [Thread-67572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:25:38.002 [DEBUG] [Thread-67572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:25:38.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:25:38.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:25:38.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:25:38.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:25:38.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:25:38.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:25:38.043 [DEBUG] [Thread-67572] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:25:41.521 [DEBUG] [Thread-67574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:48.541 [DEBUG] [Thread-67575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:50.568 [DEBUG] [Thread-67576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:25:59.590 [DEBUG] [Thread-67577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:03.599 [DEBUG] [Thread-67578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:08.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:26:08.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:26:08.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:26:08.609 [DEBUG] [Thread-67579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:08.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 26, 5), 13.7, 39.44, 0.0, 41.13, 15.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:26:08.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:26:05
2025-12-12T10:26:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:26:09.018 [DEBUG] [Thread-67580] [transport.py] [_log()] starting thread (client mode): 0xf2d0e3b0
2025-12-12T10:26:09.018 [DEBUG] [Thread-67580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:26:09.037 [DEBUG] [Thread-67580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:26:09.037 [INFO] [Thread-67580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:26:09.040 [DEBUG] [Thread-67580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] client lang: <none>
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] server lang: <none>
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] kex follows: False
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] Compression: none
2025-12-12T10:26:09.041 [DEBUG] [Thread-67580] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:26:09.057 [DEBUG] [Thread-67580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:26:09.058 [DEBUG] [Thread-67580] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:26:09.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:26:09.059 [DEBUG] [Thread-67580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:26:09.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:26:09.061 [DEBUG] [Thread-67580] [transport.py] [_log()] userauth is OK
2025-12-12T10:26:09.061 [DEBUG] [Thread-67580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:26:09.061 [DEBUG] [Thread-67580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:26:09.061 [DEBUG] [Thread-67580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:26:09.061 [DEBUG] [Thread-67580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:26:09.085 [INFO] [Thread-67580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:26:09.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:26:09.723 [DEBUG] [Thread-67580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:26:09.723 [DEBUG] [Thread-67580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:26:09.723 [DEBUG] [Thread-67580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:26:09.764 [DEBUG] [Thread-67580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:26:09.764 [DEBUG] [Thread-67580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:26:09.768 [DEBUG] [Thread-67580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:26:09.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:26:09.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:26:09.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:26:09.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:26:09.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:26:09.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:26:09.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:26:09.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:26:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:26:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.351139 -999.00  +14.90  25.37     46   +3.50 1 2 1 1 1   888    0 9.85 -93.30 ----- 30.1 25.4 343.4 37.4 18.2 -18.9 17.8 -18.4 17.2 -17.3 17.5 -18.4
2025-12-12T10:26:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:26:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:26:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.351139
2025-12-12T10:26:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:26:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:26:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:26:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:26:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:26:09.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:26:05', tmtdew=13.7, humidity=39.44, cloud=0.0, wind=41.13, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:25:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:26:09.794 [DEBUG] [Thread-67580] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:26:09.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:26:09.893 [DEBUG] [Thread-67583] [transport.py] [_log()] starting thread (client mode): 0xf2d0d1e0
2025-12-12T10:26:09.893 [DEBUG] [Thread-67583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:26:09.907 [DEBUG] [Thread-67583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:26:09.908 [INFO] [Thread-67583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:26:09.915 [DEBUG] [Thread-67583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:26:09.916 [DEBUG] [Thread-67583] [transport.py] [_log()] client lang: <none>
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] server lang: <none>
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] kex follows: False
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:26:09.917 [DEBUG] [Thread-67583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:26:09.918 [DEBUG] [Thread-67583] [transport.py] [_log()] Compression: none
2025-12-12T10:26:09.918 [DEBUG] [Thread-67583] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:26:09.978 [DEBUG] [Thread-67583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:26:09.979 [DEBUG] [Thread-67583] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:26:09.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:26:09.981 [DEBUG] [Thread-67583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:26:09.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:26:10.037 [DEBUG] [Thread-67583] [transport.py] [_log()] userauth is OK
2025-12-12T10:26:10.038 [DEBUG] [Thread-67583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:26:10.038 [DEBUG] [Thread-67583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:26:10.038 [DEBUG] [Thread-67583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:26:10.038 [DEBUG] [Thread-67583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:26:10.061 [INFO] [Thread-67583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:26:10.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:26:10.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:26:10.898 [DEBUG] [Thread-67583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:26:10.899 [DEBUG] [Thread-67583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:26:10.946 [DEBUG] [Thread-67583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:26:10.946 [DEBUG] [Thread-67583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:26:10.956 [DEBUG] [Thread-67583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:26:10.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:26:10.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:26:10.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:26:10.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:26:10.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:26:10.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:26:10.992 [DEBUG] [Thread-67583] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:26:17.632 [DEBUG] [Thread-67585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:18.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:18.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:18.639 [DEBUG] [Thread-67586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:26.681 [DEBUG] [Thread-67587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:33.702 [DEBUG] [Thread-67588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:35.560 [DEBUG] [Thread-67589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:35.715 [DEBUG] [Thread-67590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:26:41.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:26:41.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:26:41.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 26, 37), 13.39, 40.31, 0.0, 38.25, 15.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:26:41.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:26:37
2025-12-12T10:26:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:26:41.984 [DEBUG] [Thread-67591] [transport.py] [_log()] starting thread (client mode): 0xf2d0ff10
2025-12-12T10:26:41.984 [DEBUG] [Thread-67591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:26:42.003 [DEBUG] [Thread-67591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:26:42.003 [INFO] [Thread-67591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:26:42.006 [DEBUG] [Thread-67591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:26:42.006 [DEBUG] [Thread-67591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:26:42.006 [DEBUG] [Thread-67591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:26:42.006 [DEBUG] [Thread-67591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] client lang: <none>
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] server lang: <none>
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] kex follows: False
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] Compression: none
2025-12-12T10:26:42.007 [DEBUG] [Thread-67591] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:26:42.021 [DEBUG] [Thread-67591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:26:42.022 [DEBUG] [Thread-67591] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:26:42.022 [DEBUG] [Thread-67591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:26:42.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:26:42.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:26:42.023 [DEBUG] [Thread-67591] [transport.py] [_log()] userauth is OK
2025-12-12T10:26:42.023 [DEBUG] [Thread-67591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:26:42.023 [DEBUG] [Thread-67591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:26:42.023 [DEBUG] [Thread-67591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:26:42.023 [DEBUG] [Thread-67591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:26:42.034 [INFO] [Thread-67591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:26:42.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:26:42.683 [DEBUG] [Thread-67591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:26:42.683 [DEBUG] [Thread-67591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:26:42.683 [DEBUG] [Thread-67591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:26:42.725 [DEBUG] [Thread-67591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:26:42.725 [DEBUG] [Thread-67591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:26:42.727 [DEBUG] [Thread-67591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:26:42.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:26:42.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:26:42.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:26:42.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:26:42.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:26:42.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:26:42.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.351486 -999.00  +15.10  30.91     46   +3.80 1 2 2 1 1   888    0 9.66 -94.95 ----- 26.1 30.9 329.3 50.0 18.4 -18.6 17.9 -18.3 17.3 -18.5 17.6 -18.1
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.351486
2025-12-12T10:26:42.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:26:42.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:26:42.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:26:42.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:26:42.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:26:42.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:26:37', tmtdew=13.39, humidity=40.31, cloud=0.0, wind=38.25, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:26:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:26:42.746 [DEBUG] [Thread-67591] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:26:42.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:26:42.832 [DEBUG] [Thread-67594] [transport.py] [_log()] starting thread (client mode): 0xf57b7850
2025-12-12T10:26:42.832 [DEBUG] [Thread-67594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:26:42.846 [DEBUG] [Thread-67594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:26:42.846 [INFO] [Thread-67594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:26:42.853 [DEBUG] [Thread-67594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:26:42.853 [DEBUG] [Thread-67594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:26:42.853 [DEBUG] [Thread-67594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] client lang: <none>
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] server lang: <none>
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] kex follows: False
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] Compression: none
2025-12-12T10:26:42.854 [DEBUG] [Thread-67594] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:26:42.913 [DEBUG] [Thread-67594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:26:42.914 [DEBUG] [Thread-67594] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:26:42.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:26:42.915 [DEBUG] [Thread-67594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:26:42.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:26:42.970 [DEBUG] [Thread-67594] [transport.py] [_log()] userauth is OK
2025-12-12T10:26:42.970 [DEBUG] [Thread-67594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:26:42.970 [DEBUG] [Thread-67594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:26:42.970 [DEBUG] [Thread-67594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:26:42.970 [DEBUG] [Thread-67594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:26:42.989 [INFO] [Thread-67594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:26:42.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:26:42.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:26:43.847 [DEBUG] [Thread-67594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:26:43.848 [DEBUG] [Thread-67594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:26:43.895 [DEBUG] [Thread-67594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:26:43.895 [DEBUG] [Thread-67594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:26:43.904 [DEBUG] [Thread-67594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:26:43.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:26:43.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:26:43.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:26:43.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:26:43.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:26:43.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:26:43.942 [DEBUG] [Thread-67594] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:26:44.736 [DEBUG] [Thread-67596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:48.751 [DEBUG] [Thread-67597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:26:53.785 [DEBUG] [Thread-67598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:02.810 [DEBUG] [Thread-67599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:03.818 [DEBUG] [Thread-67600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:11.840 [DEBUG] [Thread-67601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:27:13.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:27:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:27:14.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 27, 9), 13.55, 39.91, 0.0, 36.58, 15.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:27:14.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:27:09
2025-12-12T10:27:14.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:27:14.924 [DEBUG] [Thread-67602] [transport.py] [_log()] starting thread (client mode): 0xf57b60b0
2025-12-12T10:27:14.924 [DEBUG] [Thread-67602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:27:14.945 [DEBUG] [Thread-67602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:27:14.945 [INFO] [Thread-67602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:27:14.949 [DEBUG] [Thread-67602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:27:14.949 [DEBUG] [Thread-67602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:27:14.949 [DEBUG] [Thread-67602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:27:14.949 [DEBUG] [Thread-67602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:14.949 [DEBUG] [Thread-67602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:14.949 [DEBUG] [Thread-67602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] client lang: <none>
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] server lang: <none>
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] kex follows: False
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] Compression: none
2025-12-12T10:27:14.950 [DEBUG] [Thread-67602] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:27:14.967 [DEBUG] [Thread-67602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:27:14.968 [DEBUG] [Thread-67602] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:27:14.968 [DEBUG] [Thread-67602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:27:14.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:27:14.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:27:14.970 [DEBUG] [Thread-67602] [transport.py] [_log()] userauth is OK
2025-12-12T10:27:14.970 [DEBUG] [Thread-67602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:27:14.970 [DEBUG] [Thread-67602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:27:14.970 [DEBUG] [Thread-67602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:27:14.970 [DEBUG] [Thread-67602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:27:15.007 [INFO] [Thread-67602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:27:15.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:27:15.669 [DEBUG] [Thread-67602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:27:15.670 [DEBUG] [Thread-67602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:27:15.670 [DEBUG] [Thread-67602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:27:15.711 [DEBUG] [Thread-67602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:27:15.711 [DEBUG] [Thread-67602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:27:15.714 [DEBUG] [Thread-67602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:27:15.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:27:15.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:27:15.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:27:15.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:27:15.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:27:15.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:27:15.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:27:15.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:27:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:27:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.351833 -999.00  +15.10  30.96     45   +3.50 1 2 2 1 1   888    0 9.45 -101.03 ----- 38.1 31.0 12.9 45.8 18.3 -19.7 17.9 -19.1 17.3 -19.0 17.6 -19.3
2025-12-12T10:27:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:27:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:27:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.351833
2025-12-12T10:27:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:27:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:27:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:27:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:27:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:27:15.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:27:09', tmtdew=13.55, humidity=39.91, cloud=0.0, wind=36.58, temperature=15.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:26:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:27:15.737 [DEBUG] [Thread-67602] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:27:15.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:27:15.833 [DEBUG] [Thread-67605] [transport.py] [_log()] starting thread (client mode): 0xf57b4370
2025-12-12T10:27:15.833 [DEBUG] [Thread-67605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:27:15.848 [DEBUG] [Thread-67605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:27:15.848 [INFO] [Thread-67605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] client lang: <none>
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] server lang: <none>
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] kex follows: False
2025-12-12T10:27:15.855 [DEBUG] [Thread-67605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:27:15.856 [DEBUG] [Thread-67605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:27:15.856 [DEBUG] [Thread-67605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:27:15.856 [DEBUG] [Thread-67605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:27:15.856 [DEBUG] [Thread-67605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:27:15.856 [DEBUG] [Thread-67605] [transport.py] [_log()] Compression: none
2025-12-12T10:27:15.856 [DEBUG] [Thread-67605] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:27:15.917 [DEBUG] [Thread-67605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:27:15.917 [DEBUG] [Thread-67605] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:27:15.917 [DEBUG] [Thread-67605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:27:15.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:27:15.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:27:15.973 [DEBUG] [Thread-67605] [transport.py] [_log()] userauth is OK
2025-12-12T10:27:15.973 [DEBUG] [Thread-67605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:27:15.973 [DEBUG] [Thread-67605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:27:15.973 [DEBUG] [Thread-67605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:27:15.973 [DEBUG] [Thread-67605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:27:15.991 [INFO] [Thread-67605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:27:15.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:27:15.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:27:16.833 [DEBUG] [Thread-67605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:27:16.833 [DEBUG] [Thread-67605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:27:16.881 [DEBUG] [Thread-67605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:27:16.882 [DEBUG] [Thread-67605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:27:16.890 [DEBUG] [Thread-67605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:27:16.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:27:16.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:27:16.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:27:16.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:27:16.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:27:16.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:27:16.922 [DEBUG] [Thread-67605] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:27:18.403 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:18.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:18.852 [DEBUG] [Thread-67607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:20.874 [DEBUG] [Thread-67608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:29.897 [DEBUG] [Thread-67609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:33.913 [DEBUG] [Thread-67610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:35.625 [DEBUG] [Thread-67611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:38.935 [DEBUG] [Thread-67612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:46.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:27:46.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:27:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:27:47.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 27, 41), 13.89, 39.16, 0.0, 39.15, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:27:47.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:27:41
2025-12-12T10:27:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:27:47.889 [DEBUG] [Thread-67613] [transport.py] [_log()] starting thread (client mode): 0xf57b5780
2025-12-12T10:27:47.889 [DEBUG] [Thread-67613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:27:47.908 [DEBUG] [Thread-67613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:27:47.908 [INFO] [Thread-67613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:27:47.911 [DEBUG] [Thread-67613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:27:47.911 [DEBUG] [Thread-67613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:27:47.911 [DEBUG] [Thread-67613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:27:47.911 [DEBUG] [Thread-67613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:47.911 [DEBUG] [Thread-67613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:47.911 [DEBUG] [Thread-67613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] client lang: <none>
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] server lang: <none>
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] kex follows: False
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] Compression: none
2025-12-12T10:27:47.912 [DEBUG] [Thread-67613] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:27:47.920 [DEBUG] [Thread-67613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:27:47.920 [DEBUG] [Thread-67613] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:27:47.920 [DEBUG] [Thread-67613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:27:47.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:27:47.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:27:47.922 [DEBUG] [Thread-67613] [transport.py] [_log()] userauth is OK
2025-12-12T10:27:47.922 [DEBUG] [Thread-67613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:27:47.922 [DEBUG] [Thread-67613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:27:47.922 [DEBUG] [Thread-67613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:27:47.922 [DEBUG] [Thread-67613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:27:47.950 [INFO] [Thread-67613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:27:47.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:27:47.956 [DEBUG] [Thread-67615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:48.542 [DEBUG] [Thread-67613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:27:48.542 [DEBUG] [Thread-67613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:27:48.543 [DEBUG] [Thread-67613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:27:48.583 [DEBUG] [Thread-67613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:27:48.584 [DEBUG] [Thread-67613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:27:48.587 [DEBUG] [Thread-67613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:27:48.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:27:48.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:27:48.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:27:48.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:27:48.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:27:48.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:27:48.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:27:48.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:27:48.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:27:48.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.352180 -999.00  +15.30  29.54     44   +3.30 1 2 1 1 1   888    0 9.38 -99.75 ----- 32.1 29.5 348.1 49.6 18.5 -19.9 18.0 -19.2 17.4 -18.1 17.7 -20.2
2025-12-12T10:27:48.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:27:48.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:27:48.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.352180
2025-12-12T10:27:48.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:27:48.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:27:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:27:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:27:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:27:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:27:41', tmtdew=13.89, humidity=39.16, cloud=0.0, wind=39.15, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:27:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:27:48.614 [DEBUG] [Thread-67613] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:27:48.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:27:48.710 [DEBUG] [Thread-67617] [transport.py] [_log()] starting thread (client mode): 0xf57b4430
2025-12-12T10:27:48.710 [DEBUG] [Thread-67617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:27:48.724 [DEBUG] [Thread-67617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:27:48.724 [INFO] [Thread-67617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] client lang: <none>
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] server lang: <none>
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] kex follows: False
2025-12-12T10:27:48.732 [DEBUG] [Thread-67617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:27:48.733 [DEBUG] [Thread-67617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:27:48.733 [DEBUG] [Thread-67617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:27:48.733 [DEBUG] [Thread-67617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:27:48.733 [DEBUG] [Thread-67617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:27:48.733 [DEBUG] [Thread-67617] [transport.py] [_log()] Compression: none
2025-12-12T10:27:48.733 [DEBUG] [Thread-67617] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:27:48.791 [DEBUG] [Thread-67617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:27:48.791 [DEBUG] [Thread-67617] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:27:48.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:27:48.793 [DEBUG] [Thread-67617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:27:48.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:27:48.853 [DEBUG] [Thread-67617] [transport.py] [_log()] userauth is OK
2025-12-12T10:27:48.853 [DEBUG] [Thread-67617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:27:48.853 [DEBUG] [Thread-67617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:27:48.854 [DEBUG] [Thread-67617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:27:48.854 [DEBUG] [Thread-67617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:27:48.872 [INFO] [Thread-67617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:27:48.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:27:48.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:27:48.964 [DEBUG] [Thread-67619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:27:49.727 [DEBUG] [Thread-67617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:27:49.727 [DEBUG] [Thread-67617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:27:49.776 [DEBUG] [Thread-67617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:27:49.776 [DEBUG] [Thread-67617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:27:49.785 [DEBUG] [Thread-67617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:27:49.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:27:49.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:27:49.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:27:49.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:27:49.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:27:49.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:27:49.822 [DEBUG] [Thread-67617] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:27:56.999 [DEBUG] [Thread-67620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:04.023 [DEBUG] [Thread-67621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:06.036 [DEBUG] [Thread-67622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:15.056 [DEBUG] [Thread-67623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:18.543 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:18.544 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:19.069 [DEBUG] [Thread-67624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:28:19.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:28:19.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:28:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 28, 13), 13.9, 39.13, 0.0, 36.21, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:28:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:28:13
2025-12-12T10:28:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:28:20.802 [DEBUG] [Thread-67625] [transport.py] [_log()] starting thread (client mode): 0xf57b7a60
2025-12-12T10:28:20.802 [DEBUG] [Thread-67625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:28:20.822 [DEBUG] [Thread-67625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:28:20.822 [INFO] [Thread-67625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] client lang: <none>
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] server lang: <none>
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] kex follows: False
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] Compression: none
2025-12-12T10:28:20.826 [DEBUG] [Thread-67625] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:28:20.842 [DEBUG] [Thread-67625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:28:20.843 [DEBUG] [Thread-67625] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:28:20.843 [DEBUG] [Thread-67625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:28:20.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:28:20.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:28:20.845 [DEBUG] [Thread-67625] [transport.py] [_log()] userauth is OK
2025-12-12T10:28:20.845 [DEBUG] [Thread-67625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:28:20.845 [DEBUG] [Thread-67625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:28:20.845 [DEBUG] [Thread-67625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:28:20.845 [DEBUG] [Thread-67625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:28:20.859 [INFO] [Thread-67625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:28:20.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:28:21.502 [DEBUG] [Thread-67625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:28:21.502 [DEBUG] [Thread-67625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:28:21.502 [DEBUG] [Thread-67625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:28:21.543 [DEBUG] [Thread-67625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:28:21.543 [DEBUG] [Thread-67625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:28:21.547 [DEBUG] [Thread-67625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:28:21.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:28:21.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:28:21.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:28:21.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:28:21.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:28:21.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:28:21.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:28:21.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:28:21.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:28:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.352528 -999.00  +15.40  31.62     44   +3.30 1 2 2 1 1   888    0 9.63 -95.91 ----- 27.8 31.6 18.2 39.0 18.7 -18.5 18.2 -17.6 17.6 -16.7 17.9 -17.9
2025-12-12T10:28:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:28:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:28:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.352528
2025-12-12T10:28:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:28:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:28:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:28:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:28:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:28:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:28:13', tmtdew=13.9, humidity=39.13, cloud=0.0, wind=36.21, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:27:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:28:21.572 [DEBUG] [Thread-67625] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:28:21.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:28:21.667 [DEBUG] [Thread-67628] [transport.py] [_log()] starting thread (client mode): 0xf57b5e70
2025-12-12T10:28:21.667 [DEBUG] [Thread-67628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:28:21.682 [DEBUG] [Thread-67628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:28:21.682 [INFO] [Thread-67628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] client lang: <none>
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] server lang: <none>
2025-12-12T10:28:21.689 [DEBUG] [Thread-67628] [transport.py] [_log()] kex follows: False
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] Compression: none
2025-12-12T10:28:21.690 [DEBUG] [Thread-67628] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:28:21.749 [DEBUG] [Thread-67628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:28:21.749 [DEBUG] [Thread-67628] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:28:21.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:28:21.750 [DEBUG] [Thread-67628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:28:21.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:28:21.807 [DEBUG] [Thread-67628] [transport.py] [_log()] userauth is OK
2025-12-12T10:28:21.808 [DEBUG] [Thread-67628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:28:21.808 [DEBUG] [Thread-67628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:28:21.808 [DEBUG] [Thread-67628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:28:21.808 [DEBUG] [Thread-67628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:28:21.828 [INFO] [Thread-67628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:28:21.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:28:21.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:28:22.680 [DEBUG] [Thread-67628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:28:22.680 [DEBUG] [Thread-67628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:28:22.728 [DEBUG] [Thread-67628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:28:22.728 [DEBUG] [Thread-67628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:28:22.737 [DEBUG] [Thread-67628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:28:22.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:28:22.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:28:22.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:28:22.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:28:22.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:28:22.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:28:22.770 [DEBUG] [Thread-67628] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:28:24.086 [DEBUG] [Thread-67630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:33.114 [DEBUG] [Thread-67631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:34.121 [DEBUG] [Thread-67632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:35.677 [DEBUG] [Thread-67633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:42.145 [DEBUG] [Thread-67634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:49.163 [DEBUG] [Thread-67635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:51.178 [DEBUG] [Thread-67636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:28:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:28:52.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:28:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:28:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 28, 45), 14.21, 37.98, 0.0, 36.42, 15.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:28:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:28:45
2025-12-12T10:28:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:28:53.744 [DEBUG] [Thread-67637] [transport.py] [_log()] starting thread (client mode): 0xf57b52a0
2025-12-12T10:28:53.744 [DEBUG] [Thread-67637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:28:53.764 [DEBUG] [Thread-67637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:28:53.765 [INFO] [Thread-67637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] client lang: <none>
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] server lang: <none>
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] kex follows: False
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:28:53.768 [DEBUG] [Thread-67637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:28:53.769 [DEBUG] [Thread-67637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:28:53.769 [DEBUG] [Thread-67637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:28:53.769 [DEBUG] [Thread-67637] [transport.py] [_log()] Compression: none
2025-12-12T10:28:53.769 [DEBUG] [Thread-67637] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:28:53.786 [DEBUG] [Thread-67637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:28:53.786 [DEBUG] [Thread-67637] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:28:53.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:28:53.788 [DEBUG] [Thread-67637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:28:53.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:28:53.789 [DEBUG] [Thread-67637] [transport.py] [_log()] userauth is OK
2025-12-12T10:28:53.789 [DEBUG] [Thread-67637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:28:53.789 [DEBUG] [Thread-67637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:28:53.789 [DEBUG] [Thread-67637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:28:53.789 [DEBUG] [Thread-67637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:28:53.803 [INFO] [Thread-67637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:28:53.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:28:54.442 [DEBUG] [Thread-67637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:28:54.442 [DEBUG] [Thread-67637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:28:54.443 [DEBUG] [Thread-67637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:28:54.483 [DEBUG] [Thread-67637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:28:54.483 [DEBUG] [Thread-67637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:28:54.485 [DEBUG] [Thread-67637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:28:54.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:28:54.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:28:54.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:28:54.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:28:54.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:28:54.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:28:54.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:28:54.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:28:54.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:28:54.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.352875 -999.00  +15.50  32.18     43   +3.00 1 2 2 1 1   888    0 9.59 -92.74 ----- 24.5 32.2 20.8 37.1 18.8 -20.6 18.2 -19.9 17.6 -19.4 17.9 -19.4
2025-12-12T10:28:54.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:28:54.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:28:54.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.352875
2025-12-12T10:28:54.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:28:54.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:28:54.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:28:54.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:28:54.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:28:54.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:28:45', tmtdew=14.21, humidity=37.98, cloud=0.0, wind=36.42, temperature=15.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:28:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:28:54.511 [DEBUG] [Thread-67637] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:28:54.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:28:54.606 [DEBUG] [Thread-67640] [transport.py] [_log()] starting thread (client mode): 0xf57b4a60
2025-12-12T10:28:54.606 [DEBUG] [Thread-67640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:28:54.621 [DEBUG] [Thread-67640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:28:54.621 [INFO] [Thread-67640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:28:54.629 [DEBUG] [Thread-67640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] client lang: <none>
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] server lang: <none>
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] kex follows: False
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] Compression: none
2025-12-12T10:28:54.630 [DEBUG] [Thread-67640] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:28:54.686 [DEBUG] [Thread-67640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:28:54.686 [DEBUG] [Thread-67640] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:28:54.687 [DEBUG] [Thread-67640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:28:54.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:28:54.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:28:54.742 [DEBUG] [Thread-67640] [transport.py] [_log()] userauth is OK
2025-12-12T10:28:54.742 [DEBUG] [Thread-67640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:28:54.742 [DEBUG] [Thread-67640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:28:54.742 [DEBUG] [Thread-67640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:28:54.742 [DEBUG] [Thread-67640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:28:54.761 [INFO] [Thread-67640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:28:54.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:28:54.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:28:55.615 [DEBUG] [Thread-67640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:28:55.615 [DEBUG] [Thread-67640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:28:55.663 [DEBUG] [Thread-67640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:28:55.663 [DEBUG] [Thread-67640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:28:55.672 [DEBUG] [Thread-67640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:28:55.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:28:55.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:28:55.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
2025-12-12T10:28:55.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:28:55.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:28:55.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:28:55.707 [DEBUG] [Thread-67640] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:29:00.204 [DEBUG] [Thread-67642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:04.219 [DEBUG] [Thread-67643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:09.253 [DEBUG] [Thread-67644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:18.269 [DEBUG] [Thread-67645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:18.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:18.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:19.272 [DEBUG] [Thread-67646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:29:25.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:29:25.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:29:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 29, 17), 14.2, 37.99, 0.0, 35.99, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:29:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:29:17
2025-12-12T10:29:26.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:29:26.651 [DEBUG] [Thread-67647] [transport.py] [_log()] starting thread (client mode): 0xf57b5630
2025-12-12T10:29:26.651 [DEBUG] [Thread-67647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:29:26.670 [DEBUG] [Thread-67647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:29:26.670 [INFO] [Thread-67647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:29:26.673 [DEBUG] [Thread-67647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:29:26.673 [DEBUG] [Thread-67647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:29:26.673 [DEBUG] [Thread-67647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:29:26.673 [DEBUG] [Thread-67647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:29:26.673 [DEBUG] [Thread-67647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:29:26.673 [DEBUG] [Thread-67647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] client lang: <none>
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] server lang: <none>
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] kex follows: False
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] Compression: none
2025-12-12T10:29:26.674 [DEBUG] [Thread-67647] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:29:26.691 [DEBUG] [Thread-67647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:29:26.692 [DEBUG] [Thread-67647] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:29:26.692 [DEBUG] [Thread-67647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:29:26.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:29:26.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:29:26.695 [DEBUG] [Thread-67647] [transport.py] [_log()] userauth is OK
2025-12-12T10:29:26.695 [DEBUG] [Thread-67647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:29:26.695 [DEBUG] [Thread-67647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:29:26.695 [DEBUG] [Thread-67647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:29:26.695 [DEBUG] [Thread-67647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:29:26.719 [INFO] [Thread-67647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:29:26.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:29:27.292 [DEBUG] [Thread-67649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:27.348 [DEBUG] [Thread-67647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:29:27.348 [DEBUG] [Thread-67647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:29:27.349 [DEBUG] [Thread-67647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:29:27.389 [DEBUG] [Thread-67647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:29:27.389 [DEBUG] [Thread-67647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:29:27.392 [DEBUG] [Thread-67647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:29:27.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:29:27.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:29:27.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:29:27.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:29:27.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:29:27.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:29:27.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:29:27.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:29:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:29:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.353569 -999.00  +15.50  23.44     44   +3.40 1 2 1 1 1   888    0 9.96 -85.03 ----- 28.7 23.4 5.1 43.7 19.2 -17.4 18.6 -17.4 18.0 -16.4 18.3 -16.9
2025-12-12T10:29:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:29:27.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:29:27.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.353569
2025-12-12T10:29:27.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:29:27.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:29:27.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:29:27.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:29:27.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:29:27.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:29:17', tmtdew=14.2, humidity=37.99, cloud=0.0, wind=35.99, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:29:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:29:27.411 [DEBUG] [Thread-67647] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:29:27.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:29:27.514 [DEBUG] [Thread-67651] [transport.py] [_log()] starting thread (client mode): 0xf57b79a0
2025-12-12T10:29:27.515 [DEBUG] [Thread-67651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:29:27.529 [DEBUG] [Thread-67651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:29:27.529 [INFO] [Thread-67651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:29:27.537 [DEBUG] [Thread-67651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] client lang: <none>
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] server lang: <none>
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] kex follows: False
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] Compression: none
2025-12-12T10:29:27.538 [DEBUG] [Thread-67651] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:29:27.598 [DEBUG] [Thread-67651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:29:27.598 [DEBUG] [Thread-67651] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:29:27.599 [DEBUG] [Thread-67651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:29:27.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:29:27.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:29:27.658 [DEBUG] [Thread-67651] [transport.py] [_log()] userauth is OK
2025-12-12T10:29:27.658 [DEBUG] [Thread-67651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:29:27.659 [DEBUG] [Thread-67651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:29:27.659 [DEBUG] [Thread-67651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:29:27.659 [DEBUG] [Thread-67651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:29:27.679 [INFO] [Thread-67651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:29:27.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:29:27.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:29:28.522 [DEBUG] [Thread-67651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:29:28.522 [DEBUG] [Thread-67651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:29:28.570 [DEBUG] [Thread-67651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:29:28.570 [DEBUG] [Thread-67651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:29:28.579 [DEBUG] [Thread-67651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:29:28.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:29:28.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:29:28.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
2025-12-12T10:29:28.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:29:28.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:29:28.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:29:28.616 [DEBUG] [Thread-67651] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:29:34.317 [DEBUG] [Thread-67653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:35.731 [DEBUG] [Thread-67654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:36.343 [DEBUG] [Thread-67655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:45.367 [DEBUG] [Thread-67656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:49.380 [DEBUG] [Thread-67657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:54.392 [DEBUG] [Thread-67658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:29:58.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:29:58.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:29:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:29:59.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 29, 49), 14.07, 38.66, 0.0, 42.49, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:29:59.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:29:49
2025-12-12T10:29:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:29:59.597 [DEBUG] [Thread-67659] [transport.py] [_log()] starting thread (client mode): 0xf57b7af0
2025-12-12T10:29:59.597 [DEBUG] [Thread-67659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:29:59.618 [DEBUG] [Thread-67659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:29:59.618 [INFO] [Thread-67659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] client lang: <none>
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] server lang: <none>
2025-12-12T10:29:59.621 [DEBUG] [Thread-67659] [transport.py] [_log()] kex follows: False
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] Compression: none
2025-12-12T10:29:59.622 [DEBUG] [Thread-67659] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:29:59.643 [DEBUG] [Thread-67659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:29:59.643 [DEBUG] [Thread-67659] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:29:59.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:29:59.644 [DEBUG] [Thread-67659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:29:59.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:29:59.646 [DEBUG] [Thread-67659] [transport.py] [_log()] userauth is OK
2025-12-12T10:29:59.647 [DEBUG] [Thread-67659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:29:59.647 [DEBUG] [Thread-67659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:29:59.647 [DEBUG] [Thread-67659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:29:59.647 [DEBUG] [Thread-67659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:29:59.673 [INFO] [Thread-67659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:29:59.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:30:00.317 [DEBUG] [Thread-67659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:30:00.317 [DEBUG] [Thread-67659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:30:00.318 [DEBUG] [Thread-67659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:30:00.358 [DEBUG] [Thread-67659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:30:00.358 [DEBUG] [Thread-67659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:30:00.361 [DEBUG] [Thread-67659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:30:00.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:30:00.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:30:00.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:30:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:30:00.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:30:00.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:30:00.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:30:00.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:30:00.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:30:00.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.353916 -999.00  +15.70  29.29     44   +3.50 1 2 1 1 1   888    0 9.81 -81.47 ----- 26.3 29.3 14.9 45.9 19.5 -17.8 18.7 -18.7 18.1 -17.1 18.5 -16.7
2025-12-12T10:30:00.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:30:00.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:30:00.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.353916
2025-12-12T10:30:00.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:30:00.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:30:00.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:30:00.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:30:00.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:30:00.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:29:49', tmtdew=14.07, humidity=38.66, cloud=0.0, wind=42.49, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:29:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:30:00.385 [DEBUG] [Thread-67659] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:30:00.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:30:00.480 [DEBUG] [Thread-67662] [transport.py] [_log()] starting thread (client mode): 0xf57b4460
2025-12-12T10:30:00.480 [DEBUG] [Thread-67662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:30:00.495 [DEBUG] [Thread-67662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:30:00.495 [INFO] [Thread-67662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] client lang: <none>
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] server lang: <none>
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] kex follows: False
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:30:00.503 [DEBUG] [Thread-67662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:30:00.504 [DEBUG] [Thread-67662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:30:00.504 [DEBUG] [Thread-67662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:30:00.504 [DEBUG] [Thread-67662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:30:00.504 [DEBUG] [Thread-67662] [transport.py] [_log()] Compression: none
2025-12-12T10:30:00.504 [DEBUG] [Thread-67662] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:30:00.562 [DEBUG] [Thread-67662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:30:00.563 [DEBUG] [Thread-67662] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:30:00.563 [DEBUG] [Thread-67662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:30:00.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:30:00.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:30:00.617 [DEBUG] [Thread-67662] [transport.py] [_log()] userauth is OK
2025-12-12T10:30:00.618 [DEBUG] [Thread-67662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:30:00.618 [DEBUG] [Thread-67662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:30:00.618 [DEBUG] [Thread-67662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:30:00.618 [DEBUG] [Thread-67662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:30:00.636 [INFO] [Thread-67662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:30:00.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:30:00.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:30:01.486 [DEBUG] [Thread-67662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:30:01.487 [DEBUG] [Thread-67662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:30:01.534 [DEBUG] [Thread-67662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:30:01.535 [DEBUG] [Thread-67662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:30:01.544 [DEBUG] [Thread-67662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:30:01.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:30:01.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:30: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
2025-12-12T10:30:01.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:30:01.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:30:01.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:30:01.576 [DEBUG] [Thread-67662] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:30:03.413 [DEBUG] [Thread-67664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:04.421 [DEBUG] [Thread-67665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:12.458 [DEBUG] [Thread-67666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:18.826 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:18.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:19.478 [DEBUG] [Thread-67667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:21.490 [DEBUG] [Thread-67668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:30.510 [DEBUG] [Thread-67669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:31.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:30:31.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:30:31.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:30:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 30, 21), 14.32, 38.0, 0.0, 42.33, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:30:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:30:21
2025-12-12T10:30:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:30:32.622 [DEBUG] [Thread-67670] [transport.py] [_log()] starting thread (client mode): 0xf57b4fd0
2025-12-12T10:30:32.623 [DEBUG] [Thread-67670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:30:32.642 [DEBUG] [Thread-67670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:30:32.642 [INFO] [Thread-67670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] client lang: <none>
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] server lang: <none>
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] kex follows: False
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] Compression: none
2025-12-12T10:30:32.645 [DEBUG] [Thread-67670] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:30:32.661 [DEBUG] [Thread-67670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:30:32.661 [DEBUG] [Thread-67670] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:30:32.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:30:32.661 [DEBUG] [Thread-67670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:30:32.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:30:32.662 [DEBUG] [Thread-67670] [transport.py] [_log()] userauth is OK
2025-12-12T10:30:32.662 [DEBUG] [Thread-67670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:30:32.662 [DEBUG] [Thread-67670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:30:32.662 [DEBUG] [Thread-67670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:30:32.662 [DEBUG] [Thread-67670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:30:32.674 [INFO] [Thread-67670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:30:32.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:30:33.313 [DEBUG] [Thread-67670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:30:33.314 [DEBUG] [Thread-67670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:30:33.314 [DEBUG] [Thread-67670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:30:33.355 [DEBUG] [Thread-67670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:30:33.355 [DEBUG] [Thread-67670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:30:33.357 [DEBUG] [Thread-67670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:30:33.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:30:33.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:30:33.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:30:33.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:30:33.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:30:33.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.354206 -999.00  +15.70  32.88     44   +3.50 1 2 2 1 1   888    0 9.92 -80.26 ----- 27.3 32.9 13.8 39.5 19.8 -18.7 19.0 -18.7 18.3 -16.6 18.7 -18.3
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:30:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.354206
2025-12-12T10:30:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:30:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:30:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:30:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:30:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:30:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:30:21', tmtdew=14.32, humidity=38.0, cloud=0.0, wind=42.33, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:30:03.398', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:30:33.373 [DEBUG] [Thread-67670] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:30:33.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:30:33.459 [DEBUG] [Thread-67673] [transport.py] [_log()] starting thread (client mode): 0xf57b5cf0
2025-12-12T10:30:33.459 [DEBUG] [Thread-67673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:30:33.474 [DEBUG] [Thread-67673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:30:33.474 [INFO] [Thread-67673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] client lang: <none>
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] server lang: <none>
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] kex follows: False
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] Compression: none
2025-12-12T10:30:33.482 [DEBUG] [Thread-67673] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:30:33.540 [DEBUG] [Thread-67673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:30:33.540 [DEBUG] [Thread-67673] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:30:33.541 [DEBUG] [Thread-67673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:30:33.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:30:33.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:30:33.597 [DEBUG] [Thread-67673] [transport.py] [_log()] userauth is OK
2025-12-12T10:30:33.597 [DEBUG] [Thread-67673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:30:33.597 [DEBUG] [Thread-67673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:30:33.597 [DEBUG] [Thread-67673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:30:33.597 [DEBUG] [Thread-67673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:30:33.611 [INFO] [Thread-67673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:30:33.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:30:33.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:30:34.464 [DEBUG] [Thread-67673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:30:34.464 [DEBUG] [Thread-67673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:30:34.511 [DEBUG] [Thread-67673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:30:34.511 [DEBUG] [Thread-67673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:30:34.519 [DEBUG] [Thread-67675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:34.520 [DEBUG] [Thread-67673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:30:34.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:30:34.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:30:34.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:30:34.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:30:34.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:30:34.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:30:34.552 [DEBUG] [Thread-67673] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:30:35.785 [DEBUG] [Thread-67676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:39.543 [DEBUG] [Thread-67677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:48.566 [DEBUG] [Thread-67678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:49.575 [DEBUG] [Thread-67679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:30:57.600 [DEBUG] [Thread-67680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:04.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:31:04.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:31:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:31:04.616 [DEBUG] [Thread-67681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 30, 53), 14.62, 37.43, 0.0, 38.01, 16.54, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:31:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:30:53
2025-12-12T10:31:05.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:31:05.520 [DEBUG] [Thread-67682] [transport.py] [_log()] starting thread (client mode): 0xf57b5f30
2025-12-12T10:31:05.520 [DEBUG] [Thread-67682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:31:05.540 [DEBUG] [Thread-67682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:31:05.541 [INFO] [Thread-67682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] client lang: <none>
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] server lang: <none>
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] kex follows: False
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] Compression: none
2025-12-12T10:31:05.544 [DEBUG] [Thread-67682] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:31:05.561 [DEBUG] [Thread-67682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:31:05.561 [DEBUG] [Thread-67682] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:31:05.562 [DEBUG] [Thread-67682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:31:05.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:31:05.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:31:05.564 [DEBUG] [Thread-67682] [transport.py] [_log()] userauth is OK
2025-12-12T10:31:05.564 [DEBUG] [Thread-67682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:31:05.564 [DEBUG] [Thread-67682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:31:05.564 [DEBUG] [Thread-67682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:31:05.564 [DEBUG] [Thread-67682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:31:05.582 [INFO] [Thread-67682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:31:05.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:31:06.229 [DEBUG] [Thread-67682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:31:06.229 [DEBUG] [Thread-67682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:31:06.229 [DEBUG] [Thread-67682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:31:06.270 [DEBUG] [Thread-67682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:31:06.270 [DEBUG] [Thread-67682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:31:06.272 [DEBUG] [Thread-67682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:31:06.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:31:06.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:31:06.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:31:06.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:31:06.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:31:06.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:31:06.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:31:06.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:31:06.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:31:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.354611 -999.00  +16.10  23.54     43   +3.60 1 2 1 1 1   888    0 10.06 -73.46 ----- 29.9 23.5 336.2 38.2 20.0 -18.1 19.3 -18.1 18.5 -16.3 18.9 -17.6
2025-12-12T10:31:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:31:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:31:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.354611
2025-12-12T10:31:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:31:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:31:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:31:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:31:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:31:06.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:30:53', tmtdew=14.62, humidity=37.43, cloud=0.0, wind=38.01, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:30:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:31:06.297 [DEBUG] [Thread-67682] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:31:06.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:31:06.396 [DEBUG] [Thread-67685] [transport.py] [_log()] starting thread (client mode): 0xf57b62f0
2025-12-12T10:31:06.396 [DEBUG] [Thread-67685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:31:06.411 [DEBUG] [Thread-67685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:31:06.411 [INFO] [Thread-67685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:06.419 [DEBUG] [Thread-67685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] client lang: <none>
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] server lang: <none>
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] kex follows: False
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] Compression: none
2025-12-12T10:31:06.420 [DEBUG] [Thread-67685] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:31:06.477 [DEBUG] [Thread-67685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:31:06.478 [DEBUG] [Thread-67685] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:31:06.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:31:06.479 [DEBUG] [Thread-67685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:31:06.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:31:06.533 [DEBUG] [Thread-67685] [transport.py] [_log()] userauth is OK
2025-12-12T10:31:06.533 [DEBUG] [Thread-67685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:31:06.534 [DEBUG] [Thread-67685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:31:06.534 [DEBUG] [Thread-67685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:31:06.534 [DEBUG] [Thread-67685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:31:06.553 [INFO] [Thread-67685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:31:06.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:31:06.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:31:06.624 [DEBUG] [Thread-67687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:07.494 [DEBUG] [Thread-67685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:31:07.495 [DEBUG] [Thread-67685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:31:07.543 [DEBUG] [Thread-67685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:31:07.543 [DEBUG] [Thread-67685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:31:07.551 [DEBUG] [Thread-67685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:31:07.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:31: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')
2025-12-12T10:31:07.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:31:07.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:31:07.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:31:07.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:31:07.588 [DEBUG] [Thread-67685] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:31:15.647 [DEBUG] [Thread-67688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:18.968 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:18.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:19.661 [DEBUG] [Thread-67689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:24.694 [DEBUG] [Thread-67690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:33.716 [DEBUG] [Thread-67691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:34.724 [DEBUG] [Thread-67692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:35.840 [DEBUG] [Thread-67693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:37.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:31:37.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:31:37.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:31:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 31, 25), 14.58, 37.53, 0.0, 42.19, 16.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:31:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:31:25
2025-12-12T10:31:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:31:38.550 [DEBUG] [Thread-67694] [transport.py] [_log()] starting thread (client mode): 0xf2d0e2c0
2025-12-12T10:31:38.550 [DEBUG] [Thread-67694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:31:38.571 [DEBUG] [Thread-67694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:31:38.571 [INFO] [Thread-67694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] client lang: <none>
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] server lang: <none>
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] kex follows: False
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] Compression: none
2025-12-12T10:31:38.574 [DEBUG] [Thread-67694] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:31:38.591 [DEBUG] [Thread-67694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:31:38.591 [DEBUG] [Thread-67694] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:31:38.592 [DEBUG] [Thread-67694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:31:38.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:31:38.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:31:38.594 [DEBUG] [Thread-67694] [transport.py] [_log()] userauth is OK
2025-12-12T10:31:38.594 [DEBUG] [Thread-67694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:31:38.595 [DEBUG] [Thread-67694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:31:38.595 [DEBUG] [Thread-67694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:31:38.595 [DEBUG] [Thread-67694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:31:38.612 [INFO] [Thread-67694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:31:38.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:31:39.231 [DEBUG] [Thread-67694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:31:39.231 [DEBUG] [Thread-67694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:31:39.231 [DEBUG] [Thread-67694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:31:39.272 [DEBUG] [Thread-67694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:31:39.272 [DEBUG] [Thread-67694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:31:39.275 [DEBUG] [Thread-67694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:31:39.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:31:39.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:31:39.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:31:39.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:31:39.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:31:39.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:31:39.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:31:39.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:31:39.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:31:39.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.354901 -999.00  +16.20  33.05     43   +3.70 1 2 2 1 1   888    0 10.28 -66.82 ----- 28.6 33.0 18.5 45.2 20.1 -19.8 19.5 -19.5 18.6 -17.3 19.0 -18.4
2025-12-12T10:31:39.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:31:39.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:31:39.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.354901
2025-12-12T10:31:39.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:31:39.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:31:39.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:31:39.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:31:39.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:31:39.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:31:25', tmtdew=14.58, humidity=37.53, cloud=0.0, wind=42.19, temperature=16.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:31:03.446', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:31:39.301 [DEBUG] [Thread-67694] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:31:39.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:31:39.397 [DEBUG] [Thread-67697] [transport.py] [_log()] starting thread (client mode): 0xf2d0c0a0
2025-12-12T10:31:39.397 [DEBUG] [Thread-67697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:31:39.411 [DEBUG] [Thread-67697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:31:39.412 [INFO] [Thread-67697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:31:39.419 [DEBUG] [Thread-67697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:31:39.419 [DEBUG] [Thread-67697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:31:39.419 [DEBUG] [Thread-67697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] client lang: <none>
2025-12-12T10:31:39.420 [DEBUG] [Thread-67697] [transport.py] [_log()] server lang: <none>
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] kex follows: False
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] Compression: none
2025-12-12T10:31:39.421 [DEBUG] [Thread-67697] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:31:39.479 [DEBUG] [Thread-67697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:31:39.480 [DEBUG] [Thread-67697] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:31:39.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:31:39.481 [DEBUG] [Thread-67697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:31:39.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:31:39.538 [DEBUG] [Thread-67697] [transport.py] [_log()] userauth is OK
2025-12-12T10:31:39.539 [DEBUG] [Thread-67697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:31:39.539 [DEBUG] [Thread-67697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:31:39.539 [DEBUG] [Thread-67697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:31:39.539 [DEBUG] [Thread-67697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:31:39.559 [INFO] [Thread-67697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:31:39.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:31:39.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:31:40.425 [DEBUG] [Thread-67697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:31:40.426 [DEBUG] [Thread-67697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:31:40.474 [DEBUG] [Thread-67697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:31:40.474 [DEBUG] [Thread-67697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:31:40.484 [DEBUG] [Thread-67697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:31:40.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:31:40.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:31:40.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:31:40.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:31:40.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:31:40.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:31:40.520 [DEBUG] [Thread-67697] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:31:42.743 [DEBUG] [Thread-67699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:49.760 [DEBUG] [Thread-67700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:31:51.782 [DEBUG] [Thread-67701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:00.803 [DEBUG] [Thread-67702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:04.816 [DEBUG] [Thread-67703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:09.833 [DEBUG] [Thread-67704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:32:10.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:32: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
2025-12-12T10:32:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 31, 57), 14.33, 38.19, 0.0, 42.4, 16.51, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:32:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:31:57
2025-12-12T10:32:11.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:32:11.482 [DEBUG] [Thread-67705] [transport.py] [_log()] starting thread (client mode): 0xf57b77c0
2025-12-12T10:32:11.482 [DEBUG] [Thread-67705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:32:11.501 [DEBUG] [Thread-67705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:32:11.501 [INFO] [Thread-67705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] client lang: <none>
2025-12-12T10:32:11.504 [DEBUG] [Thread-67705] [transport.py] [_log()] server lang: <none>
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] kex follows: False
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] Compression: none
2025-12-12T10:32:11.505 [DEBUG] [Thread-67705] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:32:11.515 [DEBUG] [Thread-67705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:32:11.516 [DEBUG] [Thread-67705] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:32:11.516 [DEBUG] [Thread-67705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:32:11.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:32:11.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:32:11.518 [DEBUG] [Thread-67705] [transport.py] [_log()] userauth is OK
2025-12-12T10:32:11.518 [DEBUG] [Thread-67705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:32:11.518 [DEBUG] [Thread-67705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:32:11.518 [DEBUG] [Thread-67705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:32:11.518 [DEBUG] [Thread-67705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:32:11.543 [INFO] [Thread-67705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:32:11.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:32:12.167 [DEBUG] [Thread-67705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:32:12.168 [DEBUG] [Thread-67705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:32:12.168 [DEBUG] [Thread-67705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:32:12.208 [DEBUG] [Thread-67705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:32:12.208 [DEBUG] [Thread-67705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:32:12.212 [DEBUG] [Thread-67705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:32:12.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:32:12.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:32:12.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:32:12.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:32:12.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:32:12.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:32:12.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:32:12.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:32:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:32:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.355305 -999.00  +15.90  37.27     43   +3.60 1 2 2 1 1   888    0 10.42 -65.67 ----- 34.4 37.3 10.6 44.7 20.3 -20.2 19.5 -20.5 18.7 -17.6 19.1 -20.0
2025-12-12T10:32:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:32:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:32:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.355305
2025-12-12T10:32:12.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:32:12.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:32:12.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:32:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:32:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:32:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:31:57', tmtdew=14.33, humidity=38.19, cloud=0.0, wind=42.4, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:31:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:32:12.237 [DEBUG] [Thread-67705] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:32:12.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:32:12.332 [DEBUG] [Thread-67708] [transport.py] [_log()] starting thread (client mode): 0xf57b6170
2025-12-12T10:32:12.333 [DEBUG] [Thread-67708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:32:12.348 [DEBUG] [Thread-67708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:32:12.348 [INFO] [Thread-67708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:32:12.356 [DEBUG] [Thread-67708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:32:12.356 [DEBUG] [Thread-67708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:32:12.356 [DEBUG] [Thread-67708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:32:12.356 [DEBUG] [Thread-67708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:12.356 [DEBUG] [Thread-67708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:12.356 [DEBUG] [Thread-67708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] client lang: <none>
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] server lang: <none>
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] kex follows: False
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:32:12.357 [DEBUG] [Thread-67708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:32:12.358 [DEBUG] [Thread-67708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:32:12.358 [DEBUG] [Thread-67708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:32:12.358 [DEBUG] [Thread-67708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:32:12.358 [DEBUG] [Thread-67708] [transport.py] [_log()] Compression: none
2025-12-12T10:32:12.358 [DEBUG] [Thread-67708] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:32:12.423 [DEBUG] [Thread-67708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:32:12.424 [DEBUG] [Thread-67708] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:32:12.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:32:12.425 [DEBUG] [Thread-67708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:32:12.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:32:12.482 [DEBUG] [Thread-67708] [transport.py] [_log()] userauth is OK
2025-12-12T10:32:12.483 [DEBUG] [Thread-67708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:32:12.483 [DEBUG] [Thread-67708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:32:12.483 [DEBUG] [Thread-67708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:32:12.483 [DEBUG] [Thread-67708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:32:12.503 [INFO] [Thread-67708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:32:12.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:32:12.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:32:13.388 [DEBUG] [Thread-67708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:32:13.389 [DEBUG] [Thread-67708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:32:13.436 [DEBUG] [Thread-67708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:32:13.436 [DEBUG] [Thread-67708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:32:13.446 [DEBUG] [Thread-67708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:32:13.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:32:13.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:32:13.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:32:13.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:32:13.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:32:13.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:32:13.482 [DEBUG] [Thread-67708] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:32:18.858 [DEBUG] [Thread-67710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:19.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:19.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:19.865 [DEBUG] [Thread-67711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:27.902 [DEBUG] [Thread-67712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:34.918 [DEBUG] [Thread-67713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:35.890 [DEBUG] [Thread-67714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:36.932 [DEBUG] [Thread-67715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:32:43.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:32:43.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:32:44.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 32, 29), 14.45, 37.86, 0.0, 44.53, 16.51, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:32:44.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:32:29
2025-12-12T10:32:44.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:32:44.467 [DEBUG] [Thread-67716] [transport.py] [_log()] starting thread (client mode): 0xf57b5540
2025-12-12T10:32:44.467 [DEBUG] [Thread-67716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:32:44.487 [DEBUG] [Thread-67716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:32:44.487 [INFO] [Thread-67716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:32:44.490 [DEBUG] [Thread-67716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:32:44.490 [DEBUG] [Thread-67716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] client lang: <none>
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] server lang: <none>
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] kex follows: False
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] Compression: none
2025-12-12T10:32:44.491 [DEBUG] [Thread-67716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:32:44.500 [DEBUG] [Thread-67716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:32:44.500 [DEBUG] [Thread-67716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:32:44.500 [DEBUG] [Thread-67716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:32:44.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:32:44.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:32:44.502 [DEBUG] [Thread-67716] [transport.py] [_log()] userauth is OK
2025-12-12T10:32:44.502 [DEBUG] [Thread-67716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:32:44.502 [DEBUG] [Thread-67716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:32:44.502 [DEBUG] [Thread-67716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:32:44.502 [DEBUG] [Thread-67716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:32:44.516 [INFO] [Thread-67716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:32:44.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:32:45.181 [DEBUG] [Thread-67716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:32:45.181 [DEBUG] [Thread-67716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:32:45.182 [DEBUG] [Thread-67716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:32:45.222 [DEBUG] [Thread-67716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:32:45.222 [DEBUG] [Thread-67716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:32:45.226 [DEBUG] [Thread-67716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:32:45.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:32:45.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:32:45.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:32:45.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:32:45.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:32:45.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:32:45.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:32:45.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:32:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:32:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.355653 -999.00  +15.70  28.56     44   +3.60 1 2 1 1 1   888    0 10.48 -60.75 ----- 29.0 28.6 7.1 45.2 20.3 -20.4 19.6 -20.5 18.7 -18.2 19.1 -19.0
2025-12-12T10:32:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:32:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:32:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.355653
2025-12-12T10:32:45.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:32:45.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:32:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:32:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:32:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:32:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:32:29', tmtdew=14.45, humidity=37.86, cloud=0.0, wind=44.53, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:32:08.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:32:45.252 [DEBUG] [Thread-67716] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:32:45.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:32:45.348 [DEBUG] [Thread-67719] [transport.py] [_log()] starting thread (client mode): 0xf2d0e7a0
2025-12-12T10:32:45.348 [DEBUG] [Thread-67719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:32:45.362 [DEBUG] [Thread-67719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:32:45.363 [INFO] [Thread-67719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:32:45.370 [DEBUG] [Thread-67719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] client lang: <none>
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] server lang: <none>
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] kex follows: False
2025-12-12T10:32:45.371 [DEBUG] [Thread-67719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:32:45.372 [DEBUG] [Thread-67719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:32:45.372 [DEBUG] [Thread-67719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:32:45.372 [DEBUG] [Thread-67719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:32:45.372 [DEBUG] [Thread-67719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:32:45.372 [DEBUG] [Thread-67719] [transport.py] [_log()] Compression: none
2025-12-12T10:32:45.372 [DEBUG] [Thread-67719] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:32:45.430 [DEBUG] [Thread-67719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:32:45.430 [DEBUG] [Thread-67719] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:32:45.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:32:45.431 [DEBUG] [Thread-67719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:32:45.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:32:45.486 [DEBUG] [Thread-67719] [transport.py] [_log()] userauth is OK
2025-12-12T10:32:45.486 [DEBUG] [Thread-67719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:32:45.486 [DEBUG] [Thread-67719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:32:45.486 [DEBUG] [Thread-67719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:32:45.486 [DEBUG] [Thread-67719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:32:45.505 [INFO] [Thread-67719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:32:45.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:32:45.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:32:45.955 [DEBUG] [Thread-67721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:46.400 [DEBUG] [Thread-67719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:32:46.400 [DEBUG] [Thread-67719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:32:46.448 [DEBUG] [Thread-67719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:32:46.448 [DEBUG] [Thread-67719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:32:46.458 [DEBUG] [Thread-67719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:32:46.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:32:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:32:46.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:32:46.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:32:46.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:32:46.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:32:46.494 [DEBUG] [Thread-67719] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:32:49.970 [DEBUG] [Thread-67722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:32:55.004 [DEBUG] [Thread-67723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:04.026 [DEBUG] [Thread-67724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:05.033 [DEBUG] [Thread-67725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:13.055 [DEBUG] [Thread-67726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:16.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:33:16.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:33:16.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:33:17.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 33, 1), 14.34, 38.18, 0.0, 50.06, 16.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:33:17.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:33:01
2025-12-12T10:33:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:33:17.480 [DEBUG] [Thread-67727] [transport.py] [_log()] starting thread (client mode): 0xf2d0f070
2025-12-12T10:33:17.480 [DEBUG] [Thread-67727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:33:17.501 [DEBUG] [Thread-67727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:33:17.501 [INFO] [Thread-67727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] client lang: <none>
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] server lang: <none>
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] kex follows: False
2025-12-12T10:33:17.505 [DEBUG] [Thread-67727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:33:17.506 [DEBUG] [Thread-67727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:33:17.506 [DEBUG] [Thread-67727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:33:17.506 [DEBUG] [Thread-67727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:33:17.506 [DEBUG] [Thread-67727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:33:17.506 [DEBUG] [Thread-67727] [transport.py] [_log()] Compression: none
2025-12-12T10:33:17.506 [DEBUG] [Thread-67727] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:33:17.522 [DEBUG] [Thread-67727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:33:17.523 [DEBUG] [Thread-67727] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:33:17.523 [DEBUG] [Thread-67727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:33:17.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:33:17.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:33:17.525 [DEBUG] [Thread-67727] [transport.py] [_log()] userauth is OK
2025-12-12T10:33:17.526 [DEBUG] [Thread-67727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:33:17.526 [DEBUG] [Thread-67727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:33:17.526 [DEBUG] [Thread-67727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:33:17.526 [DEBUG] [Thread-67727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:33:17.541 [INFO] [Thread-67727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:33:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:33:18.199 [DEBUG] [Thread-67727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:33:18.200 [DEBUG] [Thread-67727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:33:18.200 [DEBUG] [Thread-67727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:33:18.240 [DEBUG] [Thread-67727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:33:18.240 [DEBUG] [Thread-67727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:33:18.244 [DEBUG] [Thread-67727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:33:18.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:33:18.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:33:18.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:33:18.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:33:18.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:33:18.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:33:18.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:33:18.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:33:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:33:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.356347 -999.00  +16.50  27.34     43   +4.00 1 2 1 1 1   888    0 10.69 -48.85 ----- 25.4 27.3 11.0 40.0 20.7 -20.7 19.9 -19.9 19.0 -17.4 19.5 -18.8
2025-12-12T10:33:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:33:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:33:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.356347
2025-12-12T10:33:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:33:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:33:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:33:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:33:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:33:18.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:33:01', tmtdew=14.34, humidity=38.18, cloud=0.0, wind=50.06, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:33:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:33:18.264 [DEBUG] [Thread-67727] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:33:18.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:33:18.369 [DEBUG] [Thread-67730] [transport.py] [_log()] starting thread (client mode): 0xf2d0ff40
2025-12-12T10:33:18.369 [DEBUG] [Thread-67730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:33:18.387 [DEBUG] [Thread-67730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:33:18.387 [INFO] [Thread-67730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:33:18.394 [DEBUG] [Thread-67730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] client lang: <none>
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] server lang: <none>
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] kex follows: False
2025-12-12T10:33:18.395 [DEBUG] [Thread-67730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:33:18.396 [DEBUG] [Thread-67730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:33:18.396 [DEBUG] [Thread-67730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:33:18.396 [DEBUG] [Thread-67730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:33:18.396 [DEBUG] [Thread-67730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:33:18.396 [DEBUG] [Thread-67730] [transport.py] [_log()] Compression: none
2025-12-12T10:33:18.396 [DEBUG] [Thread-67730] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:33:18.454 [DEBUG] [Thread-67730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:33:18.455 [DEBUG] [Thread-67730] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:33:18.455 [DEBUG] [Thread-67730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:33:18.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:33:18.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:33:18.510 [DEBUG] [Thread-67730] [transport.py] [_log()] userauth is OK
2025-12-12T10:33:18.510 [DEBUG] [Thread-67730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:33:18.510 [DEBUG] [Thread-67730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:33:18.511 [DEBUG] [Thread-67730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:33:18.511 [DEBUG] [Thread-67730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:33:18.530 [INFO] [Thread-67730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:33:18.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:33:18.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:33:19.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:19.254 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:19.402 [DEBUG] [Thread-67730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:33:19.402 [DEBUG] [Thread-67730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:33:19.450 [DEBUG] [Thread-67730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:33:19.451 [DEBUG] [Thread-67730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:33:19.460 [DEBUG] [Thread-67730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:33:19.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:33:19.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:33:19.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:33:19.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:33:19.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:33:19.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:33:19.495 [DEBUG] [Thread-67730] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:33:20.073 [DEBUG] [Thread-67732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:22.102 [DEBUG] [Thread-67733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:31.125 [DEBUG] [Thread-67734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:35.134 [DEBUG] [Thread-67735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:35.949 [DEBUG] [Thread-67736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:40.150 [DEBUG] [Thread-67737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:49.170 [DEBUG] [Thread-67738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:49.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:33:49.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:33:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:33:50.175 [DEBUG] [Thread-67739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:33:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 33, 33), 14.49, 37.82, 0.0, 50.67, 17.18, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:33:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:33:33
2025-12-12T10:33:50.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:33:50.459 [DEBUG] [Thread-67740] [transport.py] [_log()] starting thread (client mode): 0xf2d0d720
2025-12-12T10:33:50.459 [DEBUG] [Thread-67740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:33:50.479 [DEBUG] [Thread-67740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:33:50.479 [INFO] [Thread-67740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:33:50.482 [DEBUG] [Thread-67740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:33:50.482 [DEBUG] [Thread-67740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:33:50.482 [DEBUG] [Thread-67740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:33:50.482 [DEBUG] [Thread-67740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:50.482 [DEBUG] [Thread-67740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:50.482 [DEBUG] [Thread-67740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] client lang: <none>
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] server lang: <none>
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] kex follows: False
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] Compression: none
2025-12-12T10:33:50.483 [DEBUG] [Thread-67740] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:33:50.500 [DEBUG] [Thread-67740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:33:50.501 [DEBUG] [Thread-67740] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:33:50.501 [DEBUG] [Thread-67740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:33:50.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:33:50.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:33:50.544 [DEBUG] [Thread-67740] [transport.py] [_log()] userauth is OK
2025-12-12T10:33:50.545 [DEBUG] [Thread-67740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:33:50.545 [DEBUG] [Thread-67740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:33:50.545 [DEBUG] [Thread-67740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:33:50.546 [DEBUG] [Thread-67740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:33:50.577 [INFO] [Thread-67740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:33:50.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:33:51.201 [DEBUG] [Thread-67740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:33:51.202 [DEBUG] [Thread-67740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:33:51.202 [DEBUG] [Thread-67740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:33:51.243 [DEBUG] [Thread-67740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:33:51.244 [DEBUG] [Thread-67740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:33:51.247 [DEBUG] [Thread-67740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:33:51.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:33:51.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:33:51.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:33:51.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:33:51.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:33:51.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:33:51.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:33:51.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:33:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:33:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.356694 -999.00  +16.80  30.43     43   +4.20 1 2 2 1 1   888    0 11.26 -39.27 ----- 35.9 30.4 359.3 37.7 20.8 -19.8 19.9 -20.6 19.2 -17.7 19.6 -17.7
2025-12-12T10:33:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:33:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:33:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.356694
2025-12-12T10:33:51.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:33:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:33:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:33:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:33:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:33:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:33:33', tmtdew=14.49, humidity=37.82, cloud=0.0, wind=50.67, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:33:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:33:51.274 [DEBUG] [Thread-67740] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:33:51.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:33:51.371 [DEBUG] [Thread-67743] [transport.py] [_log()] starting thread (client mode): 0xf2d0fdc0
2025-12-12T10:33:51.371 [DEBUG] [Thread-67743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:33:51.390 [DEBUG] [Thread-67743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:33:51.390 [INFO] [Thread-67743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:33:51.400 [DEBUG] [Thread-67743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:33:51.400 [DEBUG] [Thread-67743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:33:51.400 [DEBUG] [Thread-67743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:33:51.400 [DEBUG] [Thread-67743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] client lang: <none>
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] server lang: <none>
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] kex follows: False
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] Compression: none
2025-12-12T10:33:51.401 [DEBUG] [Thread-67743] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:33:51.461 [DEBUG] [Thread-67743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:33:51.461 [DEBUG] [Thread-67743] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:33:51.462 [DEBUG] [Thread-67743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:33:51.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:33:51.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:33:51.524 [DEBUG] [Thread-67743] [transport.py] [_log()] userauth is OK
2025-12-12T10:33:51.524 [DEBUG] [Thread-67743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:33:51.524 [DEBUG] [Thread-67743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:33:51.524 [DEBUG] [Thread-67743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:33:51.525 [DEBUG] [Thread-67743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:33:51.543 [INFO] [Thread-67743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:33:51.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:33:51.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:33:52.456 [DEBUG] [Thread-67743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:33:52.456 [DEBUG] [Thread-67743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:33:52.504 [DEBUG] [Thread-67743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:33:52.504 [DEBUG] [Thread-67743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:33:52.513 [DEBUG] [Thread-67743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:33:52.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:33:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:33:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:33:52.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:33:52.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:33:52.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:33:52.548 [DEBUG] [Thread-67743] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:33:58.196 [DEBUG] [Thread-67745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:05.217 [DEBUG] [Thread-67746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:07.242 [DEBUG] [Thread-67747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:16.266 [DEBUG] [Thread-67748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:19.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:19.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:20.281 [DEBUG] [Thread-67749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:22.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:34:22.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:34:22.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:34:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 34, 5), 14.15, 38.51, 0.0, 36.95, 16.54, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:34:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:34:05
2025-12-12T10:34:23.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:34:23.585 [DEBUG] [Thread-67750] [transport.py] [_log()] starting thread (client mode): 0xf57c8550
2025-12-12T10:34:23.585 [DEBUG] [Thread-67750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:34:23.605 [DEBUG] [Thread-67750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:34:23.605 [INFO] [Thread-67750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:23.608 [DEBUG] [Thread-67750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] client lang: <none>
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] server lang: <none>
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] kex follows: False
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] Compression: none
2025-12-12T10:34:23.609 [DEBUG] [Thread-67750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:34:23.624 [DEBUG] [Thread-67750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:34:23.624 [DEBUG] [Thread-67750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:34:23.624 [DEBUG] [Thread-67750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:34:23.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:34:23.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:34:23.625 [DEBUG] [Thread-67750] [transport.py] [_log()] userauth is OK
2025-12-12T10:34:23.626 [DEBUG] [Thread-67750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:34:23.626 [DEBUG] [Thread-67750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:34:23.626 [DEBUG] [Thread-67750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:34:23.626 [DEBUG] [Thread-67750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:34:23.645 [INFO] [Thread-67750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:34:23.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:34:24.277 [DEBUG] [Thread-67750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:34:24.277 [DEBUG] [Thread-67750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:34:24.277 [DEBUG] [Thread-67750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:34:24.317 [DEBUG] [Thread-67750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:34:24.317 [DEBUG] [Thread-67750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:34:24.319 [DEBUG] [Thread-67750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:34:24.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:34:24.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:34:24.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:34:24.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:34:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:34:24.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:34:24.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.357041 -999.00  +17.00  35.27     43   +4.40 1 2 2 1 1   888    0 11.23 -33.48 ----- 38.4 35.3 27.0 47.3 20.9 -20.7 20.1 -19.6 19.3 -17.4 19.8 -19.4
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.357041
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:34:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:34:05', tmtdew=14.15, humidity=38.51, cloud=0.0, wind=36.95, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:34:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:34:24.340 [DEBUG] [Thread-67750] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:34:24.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:34:24.426 [DEBUG] [Thread-67753] [transport.py] [_log()] starting thread (client mode): 0xf57c9a50
2025-12-12T10:34:24.426 [DEBUG] [Thread-67753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:34:24.443 [DEBUG] [Thread-67753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:34:24.443 [INFO] [Thread-67753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:34:24.453 [DEBUG] [Thread-67753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] client lang: <none>
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] server lang: <none>
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] kex follows: False
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] Compression: none
2025-12-12T10:34:24.454 [DEBUG] [Thread-67753] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:34:24.511 [DEBUG] [Thread-67753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:34:24.511 [DEBUG] [Thread-67753] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:34:24.512 [DEBUG] [Thread-67753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:34:24.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:34:24.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:34:24.569 [DEBUG] [Thread-67753] [transport.py] [_log()] userauth is OK
2025-12-12T10:34:24.569 [DEBUG] [Thread-67753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:34:24.569 [DEBUG] [Thread-67753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:34:24.569 [DEBUG] [Thread-67753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:34:24.569 [DEBUG] [Thread-67753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:34:24.584 [INFO] [Thread-67753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:34:24.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:34:24.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:34:25.295 [DEBUG] [Thread-67755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:25.439 [DEBUG] [Thread-67753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:34:25.439 [DEBUG] [Thread-67753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:34:25.486 [DEBUG] [Thread-67753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:34:25.486 [DEBUG] [Thread-67753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:34:25.494 [DEBUG] [Thread-67753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:34:25.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:34:25.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:34: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
2025-12-12T10:34:25.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:34:25.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:34:25.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:34:25.526 [DEBUG] [Thread-67753] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:34:34.319 [DEBUG] [Thread-67756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:35.327 [DEBUG] [Thread-67757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:36.000 [DEBUG] [Thread-67758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:43.365 [DEBUG] [Thread-67759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:50.384 [DEBUG] [Thread-67760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:52.397 [DEBUG] [Thread-67761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:34:55.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:34:55.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:34:55.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:34:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 34, 37), 14.14, 38.44, 0.0, 41.25, 16.89, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:34:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:34:37
2025-12-12T10:34:56.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:34:56.518 [DEBUG] [Thread-67762] [transport.py] [_log()] starting thread (client mode): 0xf57b5870
2025-12-12T10:34:56.518 [DEBUG] [Thread-67762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:34:56.539 [DEBUG] [Thread-67762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:34:56.539 [INFO] [Thread-67762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] client lang: <none>
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] server lang: <none>
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] kex follows: False
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:34:56.542 [DEBUG] [Thread-67762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:34:56.543 [DEBUG] [Thread-67762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:34:56.543 [DEBUG] [Thread-67762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:34:56.543 [DEBUG] [Thread-67762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:34:56.543 [DEBUG] [Thread-67762] [transport.py] [_log()] Compression: none
2025-12-12T10:34:56.543 [DEBUG] [Thread-67762] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:34:56.558 [DEBUG] [Thread-67762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:34:56.559 [DEBUG] [Thread-67762] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:34:56.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:34:56.560 [DEBUG] [Thread-67762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:34:56.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:34:56.562 [DEBUG] [Thread-67762] [transport.py] [_log()] userauth is OK
2025-12-12T10:34:56.562 [DEBUG] [Thread-67762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:34:56.562 [DEBUG] [Thread-67762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:34:56.563 [DEBUG] [Thread-67762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:34:56.563 [DEBUG] [Thread-67762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:34:56.587 [INFO] [Thread-67762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:34:56.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:34:57.218 [DEBUG] [Thread-67762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:34:57.218 [DEBUG] [Thread-67762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:34:57.218 [DEBUG] [Thread-67762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:34:57.259 [DEBUG] [Thread-67762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:34:57.259 [DEBUG] [Thread-67762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:34:57.262 [DEBUG] [Thread-67762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:34:57.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:34:57.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:34:57.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:34:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:34:57.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:34:57.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:34:57.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:34:57.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:34:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:34:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.357389 -999.00  +16.90  33.82     43   +4.30 1 2 2 1 1   888    0 11.54 -26.44 ----- 28.4 33.8 5.6 43.9 20.9 -21.7 20.2 -22.0 19.4 -18.7 19.8 -21.1
2025-12-12T10:34:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:34:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:34:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.357389
2025-12-12T10:34:57.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:34:57.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:34:57.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:34:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:34:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:34:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:34:37', tmtdew=14.14, humidity=38.44, cloud=0.0, wind=41.25, temperature=16.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:34:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:34:57.290 [DEBUG] [Thread-67762] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:34:57.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:34:57.388 [DEBUG] [Thread-67765] [transport.py] [_log()] starting thread (client mode): 0xf57c8220
2025-12-12T10:34:57.388 [DEBUG] [Thread-67765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:34:57.403 [DEBUG] [Thread-67765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:34:57.403 [INFO] [Thread-67765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:34:57.411 [DEBUG] [Thread-67765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:34:57.411 [DEBUG] [Thread-67765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:34:57.411 [DEBUG] [Thread-67765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] client lang: <none>
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] server lang: <none>
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] kex follows: False
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] Compression: none
2025-12-12T10:34:57.412 [DEBUG] [Thread-67765] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:34:57.470 [DEBUG] [Thread-67765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:34:57.470 [DEBUG] [Thread-67765] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:34:57.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:34:57.471 [DEBUG] [Thread-67765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:34:57.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:34:57.526 [DEBUG] [Thread-67765] [transport.py] [_log()] userauth is OK
2025-12-12T10:34:57.526 [DEBUG] [Thread-67765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:34:57.526 [DEBUG] [Thread-67765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:34:57.527 [DEBUG] [Thread-67765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:34:57.527 [DEBUG] [Thread-67765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:34:57.551 [INFO] [Thread-67765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:34:57.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:34:57.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:34:58.422 [DEBUG] [Thread-67765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:34:58.423 [DEBUG] [Thread-67765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:34:58.470 [DEBUG] [Thread-67765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:34:58.470 [DEBUG] [Thread-67765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:34:58.479 [DEBUG] [Thread-67765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:34:58.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:34:58.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:34:58.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:34:58.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:34:58.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:34:58.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:34:58.516 [DEBUG] [Thread-67765] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:35:01.417 [DEBUG] [Thread-67767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:05.426 [DEBUG] [Thread-67768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:10.444 [DEBUG] [Thread-67769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:19.467 [DEBUG] [Thread-67770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:19.536 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:19.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:20.475 [DEBUG] [Thread-67771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:28.501 [DEBUG] [Thread-67772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:35:28.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:35:28.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
2025-12-12T10:35:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 35, 9), 14.12, 38.51, 0.0, 38.8, 16.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:35:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:35:09
2025-12-12T10:35:29.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:35:29.490 [DEBUG] [Thread-67773] [transport.py] [_log()] starting thread (client mode): 0xf57c8a00
2025-12-12T10:35:29.490 [DEBUG] [Thread-67773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:35:29.509 [DEBUG] [Thread-67773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:35:29.509 [INFO] [Thread-67773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:35:29.512 [DEBUG] [Thread-67773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:35:29.512 [DEBUG] [Thread-67773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] client lang: <none>
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] server lang: <none>
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] kex follows: False
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] Compression: none
2025-12-12T10:35:29.513 [DEBUG] [Thread-67773] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:35:29.526 [DEBUG] [Thread-67773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:35:29.526 [DEBUG] [Thread-67773] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:35:29.527 [DEBUG] [Thread-67773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:35:29.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:35:29.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:35:29.528 [DEBUG] [Thread-67773] [transport.py] [_log()] userauth is OK
2025-12-12T10:35:29.529 [DEBUG] [Thread-67773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:35:29.529 [DEBUG] [Thread-67773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:35:29.529 [DEBUG] [Thread-67773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:35:29.529 [DEBUG] [Thread-67773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:35:29.542 [INFO] [Thread-67773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:35:29.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:35:30.156 [DEBUG] [Thread-67773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:35:30.156 [DEBUG] [Thread-67773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:35:30.156 [DEBUG] [Thread-67773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:35:30.197 [DEBUG] [Thread-67773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:35:30.197 [DEBUG] [Thread-67773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:35:30.201 [DEBUG] [Thread-67773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:35:30.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:35:30.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:35:30.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:35:30.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:35:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:35:30.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:35:30.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:35:30.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:35:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:35:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.357678 -999.00  +17.20  26.48     43   +4.60 1 2 1 1 1   888    0 11.53 -20.74 ----- 32.5 26.5 3.1 40.6 21.2 -20.0 20.4 -19.6 19.6 -17.3 20.1 -17.7
2025-12-12T10:35:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:35:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:35:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.357678
2025-12-12T10:35:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:35:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:35:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:35:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:35:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:35:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:35:09', tmtdew=14.12, humidity=38.51, cloud=0.0, wind=38.8, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:35:03.379', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:35:30.233 [DEBUG] [Thread-67773] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:35:30.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:35:30.327 [DEBUG] [Thread-67776] [transport.py] [_log()] starting thread (client mode): 0xf57c8ca0
2025-12-12T10:35:30.327 [DEBUG] [Thread-67776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:35:30.342 [DEBUG] [Thread-67776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:35:30.343 [INFO] [Thread-67776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:35:30.350 [DEBUG] [Thread-67776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:35:30.351 [DEBUG] [Thread-67776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:35:30.351 [DEBUG] [Thread-67776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:35:30.351 [DEBUG] [Thread-67776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:35:30.351 [DEBUG] [Thread-67776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:35:30.351 [DEBUG] [Thread-67776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:35:30.351 [DEBUG] [Thread-67776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] client lang: <none>
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] server lang: <none>
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] kex follows: False
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] Compression: none
2025-12-12T10:35:30.352 [DEBUG] [Thread-67776] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:35:30.418 [DEBUG] [Thread-67776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:35:30.419 [DEBUG] [Thread-67776] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:35:30.419 [DEBUG] [Thread-67776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:35:30.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:35:30.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:35:30.474 [DEBUG] [Thread-67776] [transport.py] [_log()] userauth is OK
2025-12-12T10:35:30.474 [DEBUG] [Thread-67776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:35:30.474 [DEBUG] [Thread-67776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:35:30.475 [DEBUG] [Thread-67776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:35:30.475 [DEBUG] [Thread-67776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:35:30.500 [INFO] [Thread-67776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:35:30.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:35:30.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:35:31.367 [DEBUG] [Thread-67776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:35:31.368 [DEBUG] [Thread-67776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:35:31.415 [DEBUG] [Thread-67776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:35:31.415 [DEBUG] [Thread-67776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:35:31.424 [DEBUG] [Thread-67776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:35:31.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:35:31.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:35:31.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:35:31.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:35:31.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:35:31.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:35:31.461 [DEBUG] [Thread-67776] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:35:35.521 [DEBUG] [Thread-67778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:36.048 [DEBUG] [Thread-67779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:37.558 [DEBUG] [Thread-67780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:46.577 [DEBUG] [Thread-67781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:50.592 [DEBUG] [Thread-67782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:35:55.609 [DEBUG] [Thread-67783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:36:01.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:36:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:36:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 35, 41), 14.26, 38.38, 0.0, 43.65, 16.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:36:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:35:41
2025-12-12T10:36:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:36:02.427 [DEBUG] [Thread-67784] [transport.py] [_log()] starting thread (client mode): 0xf57c8c10
2025-12-12T10:36:02.427 [DEBUG] [Thread-67784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:36:02.451 [DEBUG] [Thread-67784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:36:02.451 [INFO] [Thread-67784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] client lang: <none>
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] server lang: <none>
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] kex follows: False
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:36:02.453 [DEBUG] [Thread-67784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:36:02.454 [DEBUG] [Thread-67784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:36:02.454 [DEBUG] [Thread-67784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:36:02.454 [DEBUG] [Thread-67784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:36:02.454 [DEBUG] [Thread-67784] [transport.py] [_log()] Compression: none
2025-12-12T10:36:02.454 [DEBUG] [Thread-67784] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:36:02.476 [DEBUG] [Thread-67784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:36:02.476 [DEBUG] [Thread-67784] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:36:02.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:36:02.478 [DEBUG] [Thread-67784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:36:02.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:36:02.480 [DEBUG] [Thread-67784] [transport.py] [_log()] userauth is OK
2025-12-12T10:36:02.480 [DEBUG] [Thread-67784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:36:02.480 [DEBUG] [Thread-67784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:36:02.480 [DEBUG] [Thread-67784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:36:02.480 [DEBUG] [Thread-67784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:36:02.503 [INFO] [Thread-67784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:36:02.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:36:03.104 [DEBUG] [Thread-67784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:36:03.105 [DEBUG] [Thread-67784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:36:03.105 [DEBUG] [Thread-67784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:36:03.146 [DEBUG] [Thread-67784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:36:03.146 [DEBUG] [Thread-67784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:36:03.149 [DEBUG] [Thread-67784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:36:03.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:36:03.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:36:03.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:36:03.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:36:03.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:36:03.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:36:03.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:36:03.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:36:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:36:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.358083 -999.00  +17.20  41.49     42   +4.40 1 2 2 1 1   888    0 11.89 -12.70 ----- 37.6 41.5 21.9 52.3 21.4 -20.5 20.5 -21.6 19.7 -19.0 20.1 -17.7
2025-12-12T10:36:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:36:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:36:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.358083
2025-12-12T10:36:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:36:03.170 [DEBUG] [Thread-67784] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:36:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:36:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:36:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:36:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:36:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:35:41', tmtdew=14.26, humidity=38.38, cloud=0.0, wind=43.65, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:35:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:36:03.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:36:03.268 [DEBUG] [Thread-67787] [transport.py] [_log()] starting thread (client mode): 0xf57c86a0
2025-12-12T10:36:03.269 [DEBUG] [Thread-67787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:36:03.283 [DEBUG] [Thread-67787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:36:03.283 [INFO] [Thread-67787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:36:03.291 [DEBUG] [Thread-67787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:36:03.291 [DEBUG] [Thread-67787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] client lang: <none>
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] server lang: <none>
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] kex follows: False
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] Compression: none
2025-12-12T10:36:03.292 [DEBUG] [Thread-67787] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:36:03.351 [DEBUG] [Thread-67787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:36:03.352 [DEBUG] [Thread-67787] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:36:03.353 [DEBUG] [Thread-67787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:36:03.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:36:03.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:36:03.409 [DEBUG] [Thread-67787] [transport.py] [_log()] userauth is OK
2025-12-12T10:36:03.410 [DEBUG] [Thread-67787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:36:03.410 [DEBUG] [Thread-67787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:36:03.410 [DEBUG] [Thread-67787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:36:03.410 [DEBUG] [Thread-67787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:36:03.429 [INFO] [Thread-67787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:36:03.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:36:03.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:36:04.342 [DEBUG] [Thread-67787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:36:04.342 [DEBUG] [Thread-67787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:36:04.391 [DEBUG] [Thread-67787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:36:04.392 [DEBUG] [Thread-67787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:36:04.400 [DEBUG] [Thread-67787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:36:04.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:36:04.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:36:04.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:36:04.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:36:04.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:36:04.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:36:04.434 [DEBUG] [Thread-67787] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:36:04.631 [DEBUG] [Thread-67789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:05.637 [DEBUG] [Thread-67790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:13.675 [DEBUG] [Thread-67791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:19.677 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:19.678 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:20.691 [DEBUG] [Thread-67792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:22.697 [DEBUG] [Thread-67793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:31.716 [DEBUG] [Thread-67794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:36:34.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:36:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:36:35.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 36, 13), 14.23, 38.46, 0.0, 45.22, 16.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:36:35.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:36:13
2025-12-12T10:36:35.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:36:35.395 [DEBUG] [Thread-67795] [transport.py] [_log()] starting thread (client mode): 0xf57c9cc0
2025-12-12T10:36:35.396 [DEBUG] [Thread-67795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:36:35.406 [DEBUG] [Thread-67795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:36:35.406 [INFO] [Thread-67795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:36:35.407 [DEBUG] [Thread-67795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] client lang: <none>
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] server lang: <none>
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] kex follows: False
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] Compression: none
2025-12-12T10:36:35.408 [DEBUG] [Thread-67795] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:36:35.421 [DEBUG] [Thread-67795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:36:35.421 [DEBUG] [Thread-67795] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:36:35.422 [DEBUG] [Thread-67795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:36:35.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:36:35.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:36:35.423 [DEBUG] [Thread-67795] [transport.py] [_log()] userauth is OK
2025-12-12T10:36:35.423 [DEBUG] [Thread-67795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:36:35.423 [DEBUG] [Thread-67795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:36:35.423 [DEBUG] [Thread-67795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:36:35.423 [DEBUG] [Thread-67795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:36:35.437 [INFO] [Thread-67795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:36:35.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:36:35.727 [DEBUG] [Thread-67797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:36.019 [DEBUG] [Thread-67795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:36:36.019 [DEBUG] [Thread-67795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:36:36.019 [DEBUG] [Thread-67795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:36:36.060 [DEBUG] [Thread-67795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:36:36.060 [DEBUG] [Thread-67795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:36:36.062 [DEBUG] [Thread-67795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:36:36.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:36:36.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:36:36.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:36:36.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:36:36.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:36:36.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:36:36.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:36:36.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:36:36.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:36:36.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.358430 -999.00  +17.00  29.18     42   +4.30 1 2 1 1 1   888    0 12.25 -5.47 ----- 33.3 29.2 321.4 43.7 21.4 -19.3 20.5 -19.8 19.8 -17.5 20.1 -16.6
2025-12-12T10:36:36.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:36:36.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:36:36.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.358430
2025-12-12T10:36:36.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:36:36.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:36:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:36:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:36:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:36:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:36:13', tmtdew=14.23, humidity=38.46, cloud=0.0, wind=45.22, temperature=16.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:36:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:36:36.081 [DEBUG] [Thread-67795] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:36:36.113 [DEBUG] [Thread-67799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:36.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:36:36.173 [DEBUG] [Thread-67800] [transport.py] [_log()] starting thread (client mode): 0xf57cb820
2025-12-12T10:36:36.173 [DEBUG] [Thread-67800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:36:36.190 [DEBUG] [Thread-67800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:36:36.190 [INFO] [Thread-67800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:36:36.201 [DEBUG] [Thread-67800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] client lang: <none>
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] server lang: <none>
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] kex follows: False
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:36:36.202 [DEBUG] [Thread-67800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:36:36.203 [DEBUG] [Thread-67800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:36:36.203 [DEBUG] [Thread-67800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:36:36.203 [DEBUG] [Thread-67800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:36:36.203 [DEBUG] [Thread-67800] [transport.py] [_log()] Compression: none
2025-12-12T10:36:36.203 [DEBUG] [Thread-67800] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:36:36.257 [DEBUG] [Thread-67800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:36:36.258 [DEBUG] [Thread-67800] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:36:36.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:36:36.259 [DEBUG] [Thread-67800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:36:36.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:36:36.314 [DEBUG] [Thread-67800] [transport.py] [_log()] userauth is OK
2025-12-12T10:36:36.314 [DEBUG] [Thread-67800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:36:36.314 [DEBUG] [Thread-67800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:36:36.315 [DEBUG] [Thread-67800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:36:36.315 [DEBUG] [Thread-67800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:36:36.337 [INFO] [Thread-67800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:36:36.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:36:36.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:36:37.225 [DEBUG] [Thread-67800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:36:37.225 [DEBUG] [Thread-67800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:36:37.273 [DEBUG] [Thread-67800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:36:37.273 [DEBUG] [Thread-67800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:36:37.283 [DEBUG] [Thread-67800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:36:37.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:36:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:36:37.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:36:37.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:36:37.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:36:37.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:36:37.319 [DEBUG] [Thread-67800] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:36:40.744 [DEBUG] [Thread-67802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:49.765 [DEBUG] [Thread-67803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:50.773 [DEBUG] [Thread-67804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:36:58.812 [DEBUG] [Thread-67805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:05.827 [DEBUG] [Thread-67806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:07.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:37:07.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:37:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:37:07.836 [DEBUG] [Thread-67807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 36, 45), 14.19, 38.59, 0.0, 38.73, 16.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:37:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:36:45
2025-12-12T10:37:08.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:37:08.313 [DEBUG] [Thread-67808] [transport.py] [_log()] starting thread (client mode): 0xf2d0ff40
2025-12-12T10:37:08.313 [DEBUG] [Thread-67808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:37:08.330 [DEBUG] [Thread-67808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:37:08.330 [INFO] [Thread-67808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] client lang: <none>
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] server lang: <none>
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] kex follows: False
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] Compression: none
2025-12-12T10:37:08.331 [DEBUG] [Thread-67808] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:37:08.345 [DEBUG] [Thread-67808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:37:08.346 [DEBUG] [Thread-67808] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:37:08.346 [DEBUG] [Thread-67808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:37:08.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:37:08.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:37:08.347 [DEBUG] [Thread-67808] [transport.py] [_log()] userauth is OK
2025-12-12T10:37:08.347 [DEBUG] [Thread-67808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:37:08.347 [DEBUG] [Thread-67808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:37:08.347 [DEBUG] [Thread-67808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:37:08.347 [DEBUG] [Thread-67808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:37:08.360 [INFO] [Thread-67808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:37:08.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:37:08.938 [DEBUG] [Thread-67808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:37:08.939 [DEBUG] [Thread-67808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:37:08.939 [DEBUG] [Thread-67808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:37:08.980 [DEBUG] [Thread-67808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:37:08.981 [DEBUG] [Thread-67808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:37:08.982 [DEBUG] [Thread-67808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:37:08.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:37:08.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:37:08.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:37:08.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:37:08.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:37:08.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:37:08.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:37:08.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:37:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:37:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.358777 -999.00  +17.00  38.77     43   +4.40 1 2 2 1 1   888    0 11.86 -0.74 ----- 35.7 38.8 13.4 44.9 21.4 -20.3 20.6 -20.7 19.9 -17.8 20.2 -18.7
2025-12-12T10:37:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:37:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:37:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.358777
2025-12-12T10:37:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:37:08.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:37:08.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:37:08.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:37:08.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:37:08.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:36:45', tmtdew=14.19, humidity=38.59, cloud=0.0, wind=38.73, temperature=16.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:36:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:37:08.997 [DEBUG] [Thread-67808] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:37:09.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:37:09.095 [DEBUG] [Thread-67811] [transport.py] [_log()] starting thread (client mode): 0xf57a8c40
2025-12-12T10:37:09.096 [DEBUG] [Thread-67811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:37:09.115 [DEBUG] [Thread-67811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:37:09.115 [INFO] [Thread-67811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:09.123 [DEBUG] [Thread-67811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] client lang: <none>
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] server lang: <none>
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] kex follows: False
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] Compression: none
2025-12-12T10:37:09.124 [DEBUG] [Thread-67811] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:37:09.182 [DEBUG] [Thread-67811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:37:09.182 [DEBUG] [Thread-67811] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:37:09.183 [DEBUG] [Thread-67811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:37:09.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:37:09.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:37:09.238 [DEBUG] [Thread-67811] [transport.py] [_log()] userauth is OK
2025-12-12T10:37:09.239 [DEBUG] [Thread-67811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:37:09.239 [DEBUG] [Thread-67811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:37:09.239 [DEBUG] [Thread-67811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:37:09.239 [DEBUG] [Thread-67811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:37:09.261 [INFO] [Thread-67811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:37:09.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:37:09.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:37:10.112 [DEBUG] [Thread-67811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:37:10.113 [DEBUG] [Thread-67811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:37:10.160 [DEBUG] [Thread-67811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:37:10.161 [DEBUG] [Thread-67811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:37:10.170 [DEBUG] [Thread-67811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:37:10.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:37:10.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:37:10.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:37:10.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:37:10.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:37:10.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:37:10.210 [DEBUG] [Thread-67811] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:37:16.859 [DEBUG] [Thread-67813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:19.817 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:19.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:20.871 [DEBUG] [Thread-67814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:25.907 [DEBUG] [Thread-67815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:34.933 [DEBUG] [Thread-67816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:35.941 [DEBUG] [Thread-67817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:36.165 [DEBUG] [Thread-67818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:37:40.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:37:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:37:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 37, 17), 14.33, 38.24, 0.0, 39.96, 17.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:37:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:37:17
2025-12-12T10:37:41.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:37:41.235 [DEBUG] [Thread-67819] [transport.py] [_log()] starting thread (client mode): 0xf57aba60
2025-12-12T10:37:41.235 [DEBUG] [Thread-67819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:37:41.255 [DEBUG] [Thread-67819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:37:41.255 [INFO] [Thread-67819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] client lang: <none>
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] server lang: <none>
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] kex follows: False
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] Compression: none
2025-12-12T10:37:41.258 [DEBUG] [Thread-67819] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:37:41.276 [DEBUG] [Thread-67819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:37:41.276 [DEBUG] [Thread-67819] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:37:41.276 [DEBUG] [Thread-67819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:37:41.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:37:41.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:37:41.277 [DEBUG] [Thread-67819] [transport.py] [_log()] userauth is OK
2025-12-12T10:37:41.277 [DEBUG] [Thread-67819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:37:41.277 [DEBUG] [Thread-67819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:37:41.277 [DEBUG] [Thread-67819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:37:41.277 [DEBUG] [Thread-67819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:37:41.286 [INFO] [Thread-67819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:37:41.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:37:41.923 [DEBUG] [Thread-67819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:37:41.923 [DEBUG] [Thread-67819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:37:41.923 [DEBUG] [Thread-67819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:37:41.964 [DEBUG] [Thread-67819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:37:41.964 [DEBUG] [Thread-67819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:37:41.966 [DEBUG] [Thread-67819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:37:41.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:37:41.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:37:41.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:37:41.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:37:41.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:37:41.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:37:41.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.358777 -999.00  +17.00  38.77     43   +4.40 1 2 2 1 1   888    0 11.86 -0.74 ----- 35.7 38.8 13.4 44.9 21.4 -20.3 20.6 -20.7 19.9 -17.8 20.2 -18.7
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.358777
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:37:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:37:17', tmtdew=14.33, humidity=38.24, cloud=0.0, wind=39.96, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:36:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:37:41.986 [DEBUG] [Thread-67819] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:37:42.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:37:42.072 [DEBUG] [Thread-67822] [transport.py] [_log()] starting thread (client mode): 0xf57a9480
2025-12-12T10:37:42.072 [DEBUG] [Thread-67822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:37:42.087 [DEBUG] [Thread-67822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:37:42.087 [INFO] [Thread-67822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] client lang: <none>
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] server lang: <none>
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] kex follows: False
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] Compression: none
2025-12-12T10:37:42.095 [DEBUG] [Thread-67822] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:37:42.154 [DEBUG] [Thread-67822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:37:42.154 [DEBUG] [Thread-67822] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:37:42.154 [DEBUG] [Thread-67822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:37:42.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:37:42.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:37:42.209 [DEBUG] [Thread-67822] [transport.py] [_log()] userauth is OK
2025-12-12T10:37:42.209 [DEBUG] [Thread-67822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:37:42.209 [DEBUG] [Thread-67822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:37:42.209 [DEBUG] [Thread-67822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:37:42.209 [DEBUG] [Thread-67822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:37:42.226 [INFO] [Thread-67822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:37:42.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:37:42.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:37:43.055 [DEBUG] [Thread-67822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:37:43.055 [DEBUG] [Thread-67822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:37:43.103 [DEBUG] [Thread-67822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:37:43.104 [DEBUG] [Thread-67822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:37:43.113 [DEBUG] [Thread-67822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:37:43.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:37:43.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:37:43.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:37:43.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:37:43.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:37:43.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:37:43.149 [DEBUG] [Thread-67822] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:37:43.961 [DEBUG] [Thread-67824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:50.975 [DEBUG] [Thread-67825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:37:52.998 [DEBUG] [Thread-67826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:02.023 [DEBUG] [Thread-67827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:06.036 [DEBUG] [Thread-67828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:11.055 [DEBUG] [Thread-67829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:13.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:38:13.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:38:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:38:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 37, 49), 14.12, 38.49, 0.0, 45.12, 16.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:38:13.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:37:49
2025-12-12T10:38:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:38:14.133 [DEBUG] [Thread-67830] [transport.py] [_log()] starting thread (client mode): 0xf57ab850
2025-12-12T10:38:14.133 [DEBUG] [Thread-67830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:38:14.153 [DEBUG] [Thread-67830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:38:14.153 [INFO] [Thread-67830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:38:14.156 [DEBUG] [Thread-67830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] client lang: <none>
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] server lang: <none>
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] kex follows: False
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] Compression: none
2025-12-12T10:38:14.157 [DEBUG] [Thread-67830] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:38:14.174 [DEBUG] [Thread-67830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:38:14.175 [DEBUG] [Thread-67830] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:38:14.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:38:14.176 [DEBUG] [Thread-67830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:38:14.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:38:14.178 [DEBUG] [Thread-67830] [transport.py] [_log()] userauth is OK
2025-12-12T10:38:14.178 [DEBUG] [Thread-67830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:38:14.178 [DEBUG] [Thread-67830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:38:14.178 [DEBUG] [Thread-67830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:38:14.178 [DEBUG] [Thread-67830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:38:14.202 [INFO] [Thread-67830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:38:14.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:38:14.842 [DEBUG] [Thread-67830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:38:14.842 [DEBUG] [Thread-67830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:38:14.842 [DEBUG] [Thread-67830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:38:14.883 [DEBUG] [Thread-67830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:38:14.883 [DEBUG] [Thread-67830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:38:14.887 [DEBUG] [Thread-67830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:38:14.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:38:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:38:14.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:38:14.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:38:14.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:38:14.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:38:14.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:38:14.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:38:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:38:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.359472 -999.00  +16.50  39.33     44   +4.20 1 2 2 1 1   888    0 12.30 6.49 ----- 28.9 39.3 12.4 48.2 21.6 -20.0 20.6 -20.5 19.9 -16.8 20.3 -16.5
2025-12-12T10:38:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:38:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:38:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.359472
2025-12-12T10:38:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:38:14.912 [DEBUG] [Thread-67830] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:38:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:38:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:38:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:38:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:38:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:37:49', tmtdew=14.12, humidity=38.49, cloud=0.0, wind=45.12, temperature=16.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:37:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:38:15.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:38:15.020 [DEBUG] [Thread-67833] [transport.py] [_log()] starting thread (client mode): 0xf57ab9a0
2025-12-12T10:38:15.020 [DEBUG] [Thread-67833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:38:15.035 [DEBUG] [Thread-67833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:38:15.035 [INFO] [Thread-67833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:38:15.042 [DEBUG] [Thread-67833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:38:15.042 [DEBUG] [Thread-67833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] client lang: <none>
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] server lang: <none>
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] kex follows: False
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] Compression: none
2025-12-12T10:38:15.043 [DEBUG] [Thread-67833] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:38:15.102 [DEBUG] [Thread-67833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:38:15.102 [DEBUG] [Thread-67833] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:38:15.103 [DEBUG] [Thread-67833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:38:15.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:38:15.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:38:15.157 [DEBUG] [Thread-67833] [transport.py] [_log()] userauth is OK
2025-12-12T10:38:15.158 [DEBUG] [Thread-67833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:38:15.158 [DEBUG] [Thread-67833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:38:15.158 [DEBUG] [Thread-67833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:38:15.158 [DEBUG] [Thread-67833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:38:15.178 [INFO] [Thread-67833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:38:15.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:38:15.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:38:16.044 [DEBUG] [Thread-67833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:38:16.044 [DEBUG] [Thread-67833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:38:16.092 [DEBUG] [Thread-67833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:38:16.093 [DEBUG] [Thread-67833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:38:16.101 [DEBUG] [Thread-67833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:38:16.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:38:16.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:38:16.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:38:16.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:38:16.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:38:16.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:38:16.132 [DEBUG] [Thread-67833] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:38:19.958 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:19.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:20.072 [DEBUG] [Thread-67835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:21.076 [DEBUG] [Thread-67836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:29.101 [DEBUG] [Thread-67837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:36.120 [DEBUG] [Thread-67838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:36.215 [DEBUG] [Thread-67839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:38.131 [DEBUG] [Thread-67840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:46.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:38:46.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:38:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:38:46.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 38, 21), 13.98, 38.84, 0.0, 48.17, 16.49, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:38:46.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:38:21
2025-12-12T10:38:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:38:47.114 [DEBUG] [Thread-67841] [transport.py] [_log()] starting thread (client mode): 0xf2d0e8f0
2025-12-12T10:38:47.114 [DEBUG] [Thread-67841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:38:47.136 [DEBUG] [Thread-67841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:38:47.136 [INFO] [Thread-67841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:38:47.139 [DEBUG] [Thread-67841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:38:47.139 [DEBUG] [Thread-67841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:38:47.139 [DEBUG] [Thread-67841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:38:47.139 [DEBUG] [Thread-67841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] client lang: <none>
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] server lang: <none>
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] kex follows: False
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:38:47.140 [DEBUG] [Thread-67841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:38:47.141 [DEBUG] [Thread-67841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:38:47.141 [DEBUG] [Thread-67841] [transport.py] [_log()] Compression: none
2025-12-12T10:38:47.141 [DEBUG] [Thread-67841] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:38:47.155 [DEBUG] [Thread-67843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:47.159 [DEBUG] [Thread-67841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:38:47.160 [DEBUG] [Thread-67841] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:38:47.161 [DEBUG] [Thread-67841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:38:47.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:38:47.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:38:47.163 [DEBUG] [Thread-67841] [transport.py] [_log()] userauth is OK
2025-12-12T10:38:47.163 [DEBUG] [Thread-67841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:38:47.164 [DEBUG] [Thread-67841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:38:47.164 [DEBUG] [Thread-67841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:38:47.164 [DEBUG] [Thread-67841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:38:47.187 [INFO] [Thread-67841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:38:47.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:38:47.851 [DEBUG] [Thread-67841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:38:47.851 [DEBUG] [Thread-67841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:38:47.851 [DEBUG] [Thread-67841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:38:47.892 [DEBUG] [Thread-67841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:38:47.892 [DEBUG] [Thread-67841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:38:47.896 [DEBUG] [Thread-67841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:38:47.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:38:47.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:38:47.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:38:47.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:38:47.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:38:47.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:38:47.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:38:47.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:38:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:38:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.359819 -999.00  +16.60  30.74     44   +4.30 1 2 2 1 1   888    0 12.57 10.09 ----- 29.3 30.7 9.3 42.3 21.6 -20.1 20.8 -21.1 20.1 -18.2 20.4 -17.1
2025-12-12T10:38:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:38:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:38:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.359819
2025-12-12T10:38:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:38:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:38:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:38:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:38:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:38:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:38:21', tmtdew=13.98, humidity=38.84, cloud=0.0, wind=48.17, temperature=16.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:38:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:38:47.922 [DEBUG] [Thread-67841] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:38:48.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:38:48.018 [DEBUG] [Thread-67845] [transport.py] [_log()] starting thread (client mode): 0xf57ab580
2025-12-12T10:38:48.018 [DEBUG] [Thread-67845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:38:48.033 [DEBUG] [Thread-67845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:38:48.033 [INFO] [Thread-67845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:38:48.041 [DEBUG] [Thread-67845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:38:48.041 [DEBUG] [Thread-67845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:38:48.041 [DEBUG] [Thread-67845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:38:48.041 [DEBUG] [Thread-67845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:48.041 [DEBUG] [Thread-67845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] client lang: <none>
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] server lang: <none>
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] kex follows: False
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] Compression: none
2025-12-12T10:38:48.042 [DEBUG] [Thread-67845] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:38:48.104 [DEBUG] [Thread-67845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:38:48.105 [DEBUG] [Thread-67845] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:38:48.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:38:48.106 [DEBUG] [Thread-67845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:38:48.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:38:48.165 [DEBUG] [Thread-67845] [transport.py] [_log()] userauth is OK
2025-12-12T10:38:48.165 [DEBUG] [Thread-67845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:38:48.165 [DEBUG] [Thread-67845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:38:48.166 [DEBUG] [Thread-67845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:38:48.166 [DEBUG] [Thread-67845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:38:48.188 [INFO] [Thread-67845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:38:48.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:38:48.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:38:49.058 [DEBUG] [Thread-67845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:38:49.058 [DEBUG] [Thread-67845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:38:49.106 [DEBUG] [Thread-67845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:38:49.106 [DEBUG] [Thread-67845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:38:49.115 [DEBUG] [Thread-67845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:38:49.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:38:49.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:38:49.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:38:49.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:38:49.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:38:49.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:38:49.152 [DEBUG] [Thread-67845] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:38:51.167 [DEBUG] [Thread-67847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:38:56.198 [DEBUG] [Thread-67848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:05.218 [DEBUG] [Thread-67849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:06.226 [DEBUG] [Thread-67850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:14.254 [DEBUG] [Thread-67851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:39:19.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:39:19.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:39:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 38, 53), 13.79, 39.34, 0.0, 44.8, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:39:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:38:53
2025-12-12T10:39:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:39:20.098 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:20.099 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:20.104 [DEBUG] [Thread-67852] [transport.py] [_log()] starting thread (client mode): 0xf57aaad0
2025-12-12T10:39:20.104 [DEBUG] [Thread-67852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:39:20.124 [DEBUG] [Thread-67852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:39:20.125 [INFO] [Thread-67852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] client lang: <none>
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] server lang: <none>
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] kex follows: False
2025-12-12T10:39:20.128 [DEBUG] [Thread-67852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:39:20.129 [DEBUG] [Thread-67852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:39:20.129 [DEBUG] [Thread-67852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:39:20.129 [DEBUG] [Thread-67852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:39:20.129 [DEBUG] [Thread-67852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:39:20.129 [DEBUG] [Thread-67852] [transport.py] [_log()] Compression: none
2025-12-12T10:39:20.129 [DEBUG] [Thread-67852] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:39:20.148 [DEBUG] [Thread-67852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:39:20.148 [DEBUG] [Thread-67852] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:39:20.149 [DEBUG] [Thread-67852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:39:20.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:39:20.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:39:20.151 [DEBUG] [Thread-67852] [transport.py] [_log()] userauth is OK
2025-12-12T10:39:20.151 [DEBUG] [Thread-67852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:39:20.151 [DEBUG] [Thread-67852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:39:20.151 [DEBUG] [Thread-67852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:39:20.151 [DEBUG] [Thread-67852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:39:20.186 [INFO] [Thread-67852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:39:20.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:39:20.852 [DEBUG] [Thread-67852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:39:20.852 [DEBUG] [Thread-67852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:39:20.853 [DEBUG] [Thread-67852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:39:20.893 [DEBUG] [Thread-67852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:39:20.894 [DEBUG] [Thread-67852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:39:20.896 [DEBUG] [Thread-67852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:39:20.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:39:20.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:39:20.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:39:20.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:39:20.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:39:20.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:39:20.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:39:20.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:39:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:39:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.360166 -999.00  +16.50  32.90     44   +4.30 1 2 2 1 1   888    0 12.32 10.56 ----- 23.6 32.9 347.8 43.6 21.6 -20.5 20.7 -21.4 20.1 -17.9 20.3 -17.7
2025-12-12T10:39:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:39:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:39:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.360166
2025-12-12T10:39:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:39:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:39:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:39:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:39:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:39:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:38:53', tmtdew=13.79, humidity=39.34, cloud=0.0, wind=44.8, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:38:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:39:20.926 [DEBUG] [Thread-67852] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:39:21.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:39:21.021 [DEBUG] [Thread-67855] [transport.py] [_log()] starting thread (client mode): 0xf57aa260
2025-12-12T10:39:21.022 [DEBUG] [Thread-67855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:39:21.036 [DEBUG] [Thread-67855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:39:21.036 [INFO] [Thread-67855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] client lang: <none>
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] server lang: <none>
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] kex follows: False
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:39:21.044 [DEBUG] [Thread-67855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:39:21.045 [DEBUG] [Thread-67855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:39:21.045 [DEBUG] [Thread-67855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:39:21.045 [DEBUG] [Thread-67855] [transport.py] [_log()] Compression: none
2025-12-12T10:39:21.045 [DEBUG] [Thread-67855] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:39:21.101 [DEBUG] [Thread-67855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:39:21.102 [DEBUG] [Thread-67855] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:39:21.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:39:21.103 [DEBUG] [Thread-67855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:39:21.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:39:21.158 [DEBUG] [Thread-67855] [transport.py] [_log()] userauth is OK
2025-12-12T10:39:21.158 [DEBUG] [Thread-67855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:39:21.158 [DEBUG] [Thread-67855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:39:21.158 [DEBUG] [Thread-67855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:39:21.158 [DEBUG] [Thread-67855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:39:21.177 [INFO] [Thread-67855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:39:21.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:39:21.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:39:21.276 [DEBUG] [Thread-67857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:22.070 [DEBUG] [Thread-67855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:39:22.071 [DEBUG] [Thread-67855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:39:22.119 [DEBUG] [Thread-67855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:39:22.119 [DEBUG] [Thread-67855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:39:22.128 [DEBUG] [Thread-67855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:39:22.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:39:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:39:22.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:39:22.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:39:22.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:39:22.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:39:22.165 [DEBUG] [Thread-67855] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:39:23.302 [DEBUG] [Thread-67858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:32.326 [DEBUG] [Thread-67859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:36.264 [DEBUG] [Thread-67860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:36.334 [DEBUG] [Thread-67861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:41.347 [DEBUG] [Thread-67862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:50.370 [DEBUG] [Thread-67863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:51.378 [DEBUG] [Thread-67864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:39:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:39:52.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:39:52.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:39:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 39, 25), 13.8, 39.36, 0.0, 45.72, 16.64, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:39:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:39:25
2025-12-12T10:39:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:39:53.147 [DEBUG] [Thread-67865] [transport.py] [_log()] starting thread (client mode): 0xf57a9300
2025-12-12T10:39:53.147 [DEBUG] [Thread-67865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:39:53.168 [DEBUG] [Thread-67865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:39:53.168 [INFO] [Thread-67865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] client lang: <none>
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] server lang: <none>
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] kex follows: False
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] Compression: none
2025-12-12T10:39:53.170 [DEBUG] [Thread-67865] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:39:53.179 [DEBUG] [Thread-67865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:39:53.179 [DEBUG] [Thread-67865] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:39:53.180 [DEBUG] [Thread-67865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:39:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:39:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:39:53.181 [DEBUG] [Thread-67865] [transport.py] [_log()] userauth is OK
2025-12-12T10:39:53.181 [DEBUG] [Thread-67865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:39:53.181 [DEBUG] [Thread-67865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:39:53.181 [DEBUG] [Thread-67865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:39:53.182 [DEBUG] [Thread-67865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:39:53.204 [INFO] [Thread-67865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:39:53.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:39:53.866 [DEBUG] [Thread-67865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:39:53.867 [DEBUG] [Thread-67865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:39:53.867 [DEBUG] [Thread-67865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:39:53.908 [DEBUG] [Thread-67865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:39:53.908 [DEBUG] [Thread-67865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:39:53.911 [DEBUG] [Thread-67865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:39:53.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:39:53.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:39:53.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:39:53.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:39:53.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:39:53.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:39:53.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:39:53.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:39:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:39:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.360514 -999.00  +16.90  38.51     44   +4.70 1 2 2 1 1   888    0 12.83 12.07 ----- 36.3 38.5 358.9 43.8 21.7 -20.5 20.8 -20.9 20.1 -17.0 20.5 -17.9
2025-12-12T10:39:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:39:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:39:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.360514
2025-12-12T10:39:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:39:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:39:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:39:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:39:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:39:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:39:25', tmtdew=13.8, humidity=39.36, cloud=0.0, wind=45.72, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:39:08.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:39:53.935 [DEBUG] [Thread-67865] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:39:54.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:39:54.033 [DEBUG] [Thread-67868] [transport.py] [_log()] starting thread (client mode): 0xf57abc70
2025-12-12T10:39:54.033 [DEBUG] [Thread-67868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:39:54.047 [DEBUG] [Thread-67868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:39:54.047 [INFO] [Thread-67868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:39:54.054 [DEBUG] [Thread-67868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:39:54.054 [DEBUG] [Thread-67868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:39:54.054 [DEBUG] [Thread-67868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] client lang: <none>
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] server lang: <none>
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] kex follows: False
2025-12-12T10:39:54.055 [DEBUG] [Thread-67868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:39:54.056 [DEBUG] [Thread-67868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:39:54.056 [DEBUG] [Thread-67868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:39:54.056 [DEBUG] [Thread-67868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:39:54.056 [DEBUG] [Thread-67868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:39:54.056 [DEBUG] [Thread-67868] [transport.py] [_log()] Compression: none
2025-12-12T10:39:54.056 [DEBUG] [Thread-67868] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:39:54.112 [DEBUG] [Thread-67868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:39:54.113 [DEBUG] [Thread-67868] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:39:54.113 [DEBUG] [Thread-67868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:39:54.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:39:54.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:39:54.173 [DEBUG] [Thread-67868] [transport.py] [_log()] userauth is OK
2025-12-12T10:39:54.173 [DEBUG] [Thread-67868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:39:54.173 [DEBUG] [Thread-67868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:39:54.173 [DEBUG] [Thread-67868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:39:54.173 [DEBUG] [Thread-67868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:39:54.191 [INFO] [Thread-67868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:39:54.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:39:54.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:39:55.022 [DEBUG] [Thread-67868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:39:55.022 [DEBUG] [Thread-67868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:39:55.069 [DEBUG] [Thread-67868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:39:55.070 [DEBUG] [Thread-67868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:39:55.078 [DEBUG] [Thread-67868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:39:55.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:39:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:39:55.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:39:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:39:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:39:55.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:39:55.112 [DEBUG] [Thread-67868] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:39:59.396 [DEBUG] [Thread-67870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:06.414 [DEBUG] [Thread-67871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:08.453 [DEBUG] [Thread-67872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:17.471 [DEBUG] [Thread-67873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:20.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:20.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:21.484 [DEBUG] [Thread-67874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:25.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:40:25.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:40:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:40:25.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 39, 57), 13.62, 39.94, 0.0, 49.97, 16.76, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:40:25.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:39:57
2025-12-12T10:40:25.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:40:26.062 [DEBUG] [Thread-67875] [transport.py] [_log()] starting thread (client mode): 0xf57aae60
2025-12-12T10:40:26.063 [DEBUG] [Thread-67875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:40:26.083 [DEBUG] [Thread-67875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:40:26.083 [INFO] [Thread-67875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:40:26.086 [DEBUG] [Thread-67875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] client lang: <none>
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] server lang: <none>
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] kex follows: False
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:40:26.087 [DEBUG] [Thread-67875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:40:26.088 [DEBUG] [Thread-67875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:40:26.088 [DEBUG] [Thread-67875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:40:26.088 [DEBUG] [Thread-67875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:40:26.088 [DEBUG] [Thread-67875] [transport.py] [_log()] Compression: none
2025-12-12T10:40:26.088 [DEBUG] [Thread-67875] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:40:26.107 [DEBUG] [Thread-67875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:40:26.107 [DEBUG] [Thread-67875] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:40:26.109 [DEBUG] [Thread-67875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:40:26.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:40:26.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:40:26.111 [DEBUG] [Thread-67875] [transport.py] [_log()] userauth is OK
2025-12-12T10:40:26.111 [DEBUG] [Thread-67875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:40:26.111 [DEBUG] [Thread-67875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:40:26.111 [DEBUG] [Thread-67875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:40:26.111 [DEBUG] [Thread-67875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:40:26.126 [INFO] [Thread-67875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:40:26.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:40:26.501 [DEBUG] [Thread-67877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:28.007 [DEBUG] [Thread-67875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:40:28.007 [DEBUG] [Thread-67875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:40:28.008 [DEBUG] [Thread-67875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:40:28.048 [DEBUG] [Thread-67875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:40:28.048 [DEBUG] [Thread-67875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:40:28.052 [DEBUG] [Thread-67875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:40:28.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:40:28.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:40:28.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:40:28.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:40:28.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:40:28.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:40:28.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:40:28.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:40:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:40:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.360861 -999.00  +16.90  34.52     44   +4.60 1 2 2 1 1   888    0 12.81 13.19 ----- 38.9 34.5 7.6 49.9 21.6 -20.3 20.9 -21.5 20.1 -17.6 20.4 -16.9
2025-12-12T10:40:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:40:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:40:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.360861
2025-12-12T10:40:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:40:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:40:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:40:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:40:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:40:28.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:39:57', tmtdew=13.62, humidity=39.94, cloud=0.0, wind=49.97, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:39:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:40:28.078 [DEBUG] [Thread-67875] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:40:28.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:40:28.180 [DEBUG] [Thread-67879] [transport.py] [_log()] starting thread (client mode): 0xf57ab340
2025-12-12T10:40:28.180 [DEBUG] [Thread-67879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:40:28.195 [DEBUG] [Thread-67879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:40:28.195 [INFO] [Thread-67879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] client lang: <none>
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] server lang: <none>
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] kex follows: False
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:40:28.203 [DEBUG] [Thread-67879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:40:28.204 [DEBUG] [Thread-67879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:40:28.204 [DEBUG] [Thread-67879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:40:28.204 [DEBUG] [Thread-67879] [transport.py] [_log()] Compression: none
2025-12-12T10:40:28.204 [DEBUG] [Thread-67879] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:40:28.261 [DEBUG] [Thread-67879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:40:28.262 [DEBUG] [Thread-67879] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:40:28.262 [DEBUG] [Thread-67879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:40:28.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:40:28.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:40:28.317 [DEBUG] [Thread-67879] [transport.py] [_log()] userauth is OK
2025-12-12T10:40:28.318 [DEBUG] [Thread-67879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:40:28.318 [DEBUG] [Thread-67879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:40:28.318 [DEBUG] [Thread-67879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:40:28.318 [DEBUG] [Thread-67879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:40:28.337 [INFO] [Thread-67879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:40:28.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:40:28.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:40:29.220 [DEBUG] [Thread-67879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:40:29.220 [DEBUG] [Thread-67879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:40:29.268 [DEBUG] [Thread-67879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:40:29.268 [DEBUG] [Thread-67879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:40:29.277 [DEBUG] [Thread-67879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:40:29.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:40:29.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:40:29.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:40:29.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:40:29.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:40:29.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:40:29.314 [DEBUG] [Thread-67879] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:40:35.525 [DEBUG] [Thread-67881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:36.326 [DEBUG] [Thread-67882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:36.533 [DEBUG] [Thread-67883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:44.573 [DEBUG] [Thread-67884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:51.590 [DEBUG] [Thread-67885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:53.595 [DEBUG] [Thread-67886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:40:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:40:59.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:40:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:41:00.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 40, 29), 13.68, 39.81, 0.0, 52.84, 16.84, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:41:00.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:40:29
2025-12-12T10:41:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:41:00.287 [DEBUG] [Thread-67887] [transport.py] [_log()] starting thread (client mode): 0xf57a94e0
2025-12-12T10:41:00.287 [DEBUG] [Thread-67887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:41:00.309 [DEBUG] [Thread-67887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:41:00.309 [INFO] [Thread-67887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:41:00.311 [DEBUG] [Thread-67887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] client lang: <none>
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] server lang: <none>
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] kex follows: False
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] Compression: none
2025-12-12T10:41:00.312 [DEBUG] [Thread-67887] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:41:00.331 [DEBUG] [Thread-67887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:41:00.331 [DEBUG] [Thread-67887] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:41:00.332 [DEBUG] [Thread-67887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:41:00.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:41:00.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:41:00.334 [DEBUG] [Thread-67887] [transport.py] [_log()] userauth is OK
2025-12-12T10:41:00.335 [DEBUG] [Thread-67887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:41:00.335 [DEBUG] [Thread-67887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:41:00.335 [DEBUG] [Thread-67887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:41:00.335 [DEBUG] [Thread-67887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:41:00.379 [INFO] [Thread-67887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:41:00.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:41:01.005 [DEBUG] [Thread-67887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:41:01.006 [DEBUG] [Thread-67887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:41:01.006 [DEBUG] [Thread-67887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:41:01.047 [DEBUG] [Thread-67887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:41:01.047 [DEBUG] [Thread-67887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:41:01.049 [DEBUG] [Thread-67887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:41:01.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:41:01.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:41:01.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:41:01.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:41:01.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:41:01.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:41:01.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:41:01.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:41:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:41:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.361150 -999.00  +16.60  45.11     45   +4.70 1 2 2 1 1   888    0 12.90 15.28 ----- 37.5 45.1 351.9 57.7 21.4 -21.0 20.7 -22.2 20.0 -19.0 20.3 -18.7
2025-12-12T10:41:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:41:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:41:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.361150
2025-12-12T10:41:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:41:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:41:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:41:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:41:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:41:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:40:29', tmtdew=13.68, humidity=39.81, cloud=0.0, wind=52.84, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:40:03.360', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:41:01.071 [DEBUG] [Thread-67887] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:41:01.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:41:01.168 [DEBUG] [Thread-67890] [transport.py] [_log()] starting thread (client mode): 0xf57a8e20
2025-12-12T10:41:01.168 [DEBUG] [Thread-67890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:41:01.183 [DEBUG] [Thread-67890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:41:01.183 [INFO] [Thread-67890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:41:01.190 [DEBUG] [Thread-67890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:41:01.191 [DEBUG] [Thread-67890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] client lang: <none>
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] server lang: <none>
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] kex follows: False
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:41:01.192 [DEBUG] [Thread-67890] [transport.py] [_log()] Compression: none
2025-12-12T10:41:01.193 [DEBUG] [Thread-67890] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:41:01.248 [DEBUG] [Thread-67890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:41:01.249 [DEBUG] [Thread-67890] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:41:01.249 [DEBUG] [Thread-67890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:41:01.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:41:01.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:41:01.305 [DEBUG] [Thread-67890] [transport.py] [_log()] userauth is OK
2025-12-12T10:41:01.305 [DEBUG] [Thread-67890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:41:01.305 [DEBUG] [Thread-67890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:41:01.305 [DEBUG] [Thread-67890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:41:01.305 [DEBUG] [Thread-67890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:41:01.320 [INFO] [Thread-67890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:41:01.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:41:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:41:02.189 [DEBUG] [Thread-67890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:41:02.189 [DEBUG] [Thread-67890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:41:02.237 [DEBUG] [Thread-67890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:41:02.238 [DEBUG] [Thread-67890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:41:02.247 [DEBUG] [Thread-67890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:41:02.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:41:02.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:41:02.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:41:02.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:41:02.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:41:02.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:41:02.284 [DEBUG] [Thread-67890] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:41:02.615 [DEBUG] [Thread-67892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:06.627 [DEBUG] [Thread-67893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:11.663 [DEBUG] [Thread-67894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:20.380 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:20.382 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:20.687 [DEBUG] [Thread-67895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:21.696 [DEBUG] [Thread-67896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:29.722 [DEBUG] [Thread-67897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:41:32.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:41:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:41:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 41, 2), 13.52, 40.19, 0.0, 46.51, 16.71, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:41:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:41:02
2025-12-12T10:41:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:41:33.336 [DEBUG] [Thread-67898] [transport.py] [_log()] starting thread (client mode): 0xf57aaef0
2025-12-12T10:41:33.336 [DEBUG] [Thread-67898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:41:33.357 [DEBUG] [Thread-67898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:41:33.357 [INFO] [Thread-67898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:41:33.358 [DEBUG] [Thread-67898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:41:33.358 [DEBUG] [Thread-67898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] client lang: <none>
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] server lang: <none>
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] kex follows: False
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] Compression: none
2025-12-12T10:41:33.359 [DEBUG] [Thread-67898] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:41:33.371 [DEBUG] [Thread-67898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:41:33.371 [DEBUG] [Thread-67898] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:41:33.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:41:33.371 [DEBUG] [Thread-67898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:41:33.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:41:33.372 [DEBUG] [Thread-67898] [transport.py] [_log()] userauth is OK
2025-12-12T10:41:33.372 [DEBUG] [Thread-67898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:41:33.372 [DEBUG] [Thread-67898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:41:33.372 [DEBUG] [Thread-67898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:41:33.372 [DEBUG] [Thread-67898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:41:33.381 [INFO] [Thread-67898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:41:33.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:41:34.107 [DEBUG] [Thread-67898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:41:34.107 [DEBUG] [Thread-67898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:41:34.107 [DEBUG] [Thread-67898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:41:34.147 [DEBUG] [Thread-67898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:41:34.147 [DEBUG] [Thread-67898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:41:34.150 [DEBUG] [Thread-67898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:41:34.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:41:34.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:41:34.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:41:34.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:41:34.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:41:34.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:41:34.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.361555 -999.00  +17.00  31.48     45   +5.00 1 2 2 1 1   888    0 12.91 16.55 ----- 31.2 31.5 12.6 52.4 21.4 -22.0 20.6 -20.6 19.9 -18.1 20.3 -19.7
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.361555
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:41:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:41:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:41:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:41:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:41:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:41:02', tmtdew=13.52, humidity=40.19, cloud=0.0, wind=46.51, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:40:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:41:34.167 [DEBUG] [Thread-67898] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:41:34.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:41:34.253 [DEBUG] [Thread-67901] [transport.py] [_log()] starting thread (client mode): 0xf57aa3b0
2025-12-12T10:41:34.253 [DEBUG] [Thread-67901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:41:34.268 [DEBUG] [Thread-67901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:41:34.268 [INFO] [Thread-67901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] client lang: <none>
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] server lang: <none>
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] kex follows: False
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:41:34.275 [DEBUG] [Thread-67901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:41:34.276 [DEBUG] [Thread-67901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:41:34.276 [DEBUG] [Thread-67901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:41:34.276 [DEBUG] [Thread-67901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:41:34.276 [DEBUG] [Thread-67901] [transport.py] [_log()] Compression: none
2025-12-12T10:41:34.276 [DEBUG] [Thread-67901] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:41:34.331 [DEBUG] [Thread-67901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:41:34.332 [DEBUG] [Thread-67901] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:41:34.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:41:34.332 [DEBUG] [Thread-67901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:41:34.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:41:34.389 [DEBUG] [Thread-67901] [transport.py] [_log()] userauth is OK
2025-12-12T10:41:34.389 [DEBUG] [Thread-67901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:41:34.389 [DEBUG] [Thread-67901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:41:34.389 [DEBUG] [Thread-67901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:41:34.389 [DEBUG] [Thread-67901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:41:34.403 [INFO] [Thread-67901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:41:34.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:41:34.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:41:35.264 [DEBUG] [Thread-67901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:41:35.264 [DEBUG] [Thread-67901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:41:35.311 [DEBUG] [Thread-67901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:41:35.312 [DEBUG] [Thread-67901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:41:35.320 [DEBUG] [Thread-67901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:41:35.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:41:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:41:35.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:41:35.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:41:35.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:41:35.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:41:35.353 [DEBUG] [Thread-67901] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:41:36.376 [DEBUG] [Thread-67903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:36.738 [DEBUG] [Thread-67904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:38.769 [DEBUG] [Thread-67905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:47.795 [DEBUG] [Thread-67906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:51.809 [DEBUG] [Thread-67907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:41:56.827 [DEBUG] [Thread-67908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:05.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:42:05.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:42:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:42:05.844 [DEBUG] [Thread-67909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 41, 34), 13.55, 40.49, 0.0, 44.73, 16.87, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:42:06.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:41:34
2025-12-12T10:42:06.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:42:06.332 [DEBUG] [Thread-67910] [transport.py] [_log()] starting thread (client mode): 0xf57ab0d0
2025-12-12T10:42:06.332 [DEBUG] [Thread-67910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:42:06.352 [DEBUG] [Thread-67910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:42:06.352 [INFO] [Thread-67910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] client lang: <none>
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] server lang: <none>
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] kex follows: False
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:42:06.356 [DEBUG] [Thread-67910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:42:06.357 [DEBUG] [Thread-67910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:42:06.357 [DEBUG] [Thread-67910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:42:06.357 [DEBUG] [Thread-67910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:42:06.357 [DEBUG] [Thread-67910] [transport.py] [_log()] Compression: none
2025-12-12T10:42:06.357 [DEBUG] [Thread-67910] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:42:06.365 [DEBUG] [Thread-67910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:42:06.365 [DEBUG] [Thread-67910] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:42:06.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:42:06.365 [DEBUG] [Thread-67910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:42:06.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:42:06.366 [DEBUG] [Thread-67910] [transport.py] [_log()] userauth is OK
2025-12-12T10:42:06.366 [DEBUG] [Thread-67910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:42:06.367 [DEBUG] [Thread-67910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:42:06.367 [DEBUG] [Thread-67910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:42:06.367 [DEBUG] [Thread-67910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:42:06.385 [INFO] [Thread-67910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:42:06.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:42:06.848 [DEBUG] [Thread-67912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:07.024 [DEBUG] [Thread-67910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:42:07.024 [DEBUG] [Thread-67910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:42:07.024 [DEBUG] [Thread-67910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:42:07.065 [DEBUG] [Thread-67910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:42:07.065 [DEBUG] [Thread-67910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:42:07.067 [DEBUG] [Thread-67910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:42:07.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:42:07.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:42:07.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:42:07.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:42:07.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:42:07.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:42:07.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.362249 -999.00  +16.90  38.66     45   +5.00 1 2 2 1 1   888    0 12.85 19.01 ----- 41.2 38.7 354.4 45.3 21.0 -24.5 20.4 -22.6 19.7 -19.8 20.1 -24.3
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.362249
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:42:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:41:34', tmtdew=13.55, humidity=40.49, cloud=0.0, wind=44.73, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:41:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:42:07.088 [DEBUG] [Thread-67910] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:42:07.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:42:07.173 [DEBUG] [Thread-67914] [transport.py] [_log()] starting thread (client mode): 0xf57a96f0
2025-12-12T10:42:07.173 [DEBUG] [Thread-67914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:42:07.188 [DEBUG] [Thread-67914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:42:07.188 [INFO] [Thread-67914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] client lang: <none>
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] server lang: <none>
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] kex follows: False
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] Compression: none
2025-12-12T10:42:07.196 [DEBUG] [Thread-67914] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:42:07.252 [DEBUG] [Thread-67914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:42:07.252 [DEBUG] [Thread-67914] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:42:07.253 [DEBUG] [Thread-67914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:42:07.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:42:07.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:42:07.309 [DEBUG] [Thread-67914] [transport.py] [_log()] userauth is OK
2025-12-12T10:42:07.309 [DEBUG] [Thread-67914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:42:07.309 [DEBUG] [Thread-67914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:42:07.309 [DEBUG] [Thread-67914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:42:07.309 [DEBUG] [Thread-67914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:42:07.323 [INFO] [Thread-67914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:42:07.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:42:07.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:42:08.165 [DEBUG] [Thread-67914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:42:08.165 [DEBUG] [Thread-67914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:42:08.212 [DEBUG] [Thread-67914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:42:08.212 [DEBUG] [Thread-67914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:42:08.220 [DEBUG] [Thread-67914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:42:08.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:42: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')
2025-12-12T10:42:08.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:42:08.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:42:08.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:42:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:42:08.252 [DEBUG] [Thread-67914] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:42:14.867 [DEBUG] [Thread-67916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:20.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:20.522 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:21.890 [DEBUG] [Thread-67917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:23.918 [DEBUG] [Thread-67918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:32.940 [DEBUG] [Thread-67919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:36.430 [DEBUG] [Thread-67920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:36.954 [DEBUG] [Thread-67921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:38.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:42:38.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:42:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:42:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 42, 6), 13.55, 40.47, 0.0, 42.79, 16.77, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:42:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:42:06
2025-12-12T10:42:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:42:39.297 [DEBUG] [Thread-67922] [transport.py] [_log()] starting thread (client mode): 0xf57cbcd0
2025-12-12T10:42:39.298 [DEBUG] [Thread-67922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:42:39.317 [DEBUG] [Thread-67922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:42:39.317 [INFO] [Thread-67922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:42:39.320 [DEBUG] [Thread-67922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:42:39.320 [DEBUG] [Thread-67922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] client lang: <none>
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] server lang: <none>
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] kex follows: False
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] Compression: none
2025-12-12T10:42:39.321 [DEBUG] [Thread-67922] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:42:39.337 [DEBUG] [Thread-67922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:42:39.337 [DEBUG] [Thread-67922] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:42:39.338 [DEBUG] [Thread-67922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:42:39.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:42:39.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:42:39.339 [DEBUG] [Thread-67922] [transport.py] [_log()] userauth is OK
2025-12-12T10:42:39.339 [DEBUG] [Thread-67922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:42:39.339 [DEBUG] [Thread-67922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:42:39.339 [DEBUG] [Thread-67922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:42:39.339 [DEBUG] [Thread-67922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:42:39.349 [INFO] [Thread-67922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:42:39.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:42:40.077 [DEBUG] [Thread-67922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:42:40.077 [DEBUG] [Thread-67922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:42:40.077 [DEBUG] [Thread-67922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:42:40.119 [DEBUG] [Thread-67922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:42:40.119 [DEBUG] [Thread-67922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:42:40.121 [DEBUG] [Thread-67922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:42:40.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:42:40.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:42:40.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:42:40.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:42:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:42:40.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:42:40.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.362597 -999.00  +17.00  37.09     45   +5.10 1 2 2 1 1   888    0 12.73 20.81 ----- 39.2 37.1 10.5 56.3 21.1 -18.7 20.3 -19.0 19.8 -16.7 20.1 -16.8
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.362597
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:42:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:42:06', tmtdew=13.55, humidity=40.47, cloud=0.0, wind=42.79, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:42:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:42:40.140 [DEBUG] [Thread-67922] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:42:40.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:42:40.226 [DEBUG] [Thread-67925] [transport.py] [_log()] starting thread (client mode): 0xf57c9720
2025-12-12T10:42:40.226 [DEBUG] [Thread-67925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:42:40.240 [DEBUG] [Thread-67925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:42:40.240 [INFO] [Thread-67925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] client lang: <none>
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] server lang: <none>
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] kex follows: False
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] Compression: none
2025-12-12T10:42:40.248 [DEBUG] [Thread-67925] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:42:40.303 [DEBUG] [Thread-67925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:42:40.303 [DEBUG] [Thread-67925] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:42:40.303 [DEBUG] [Thread-67925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:42:40.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:42:40.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:42:40.363 [DEBUG] [Thread-67925] [transport.py] [_log()] userauth is OK
2025-12-12T10:42:40.364 [DEBUG] [Thread-67925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:42:40.364 [DEBUG] [Thread-67925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:42:40.364 [DEBUG] [Thread-67925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:42:40.364 [DEBUG] [Thread-67925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:42:40.382 [INFO] [Thread-67925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:42:40.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:42:40.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:42:41.217 [DEBUG] [Thread-67925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:42:41.217 [DEBUG] [Thread-67925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:42:41.265 [DEBUG] [Thread-67925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:42:41.266 [DEBUG] [Thread-67925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:42:41.275 [DEBUG] [Thread-67925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:42:41.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:42:41.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:42:41.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:42:41.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:42:41.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:42:41.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:42:41.312 [DEBUG] [Thread-67925] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:42:41.971 [DEBUG] [Thread-67927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:50.989 [DEBUG] [Thread-67928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:42:51.993 [DEBUG] [Thread-67929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:00.022 [DEBUG] [Thread-67930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:07.041 [DEBUG] [Thread-67931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:09.055 [DEBUG] [Thread-67932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:43:11.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:43:11.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:43:12.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 42, 38), 13.63, 40.17, 0.0, 48.24, 16.96, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:43:12.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:42:38
2025-12-12T10:43:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:43:12.329 [DEBUG] [Thread-67933] [transport.py] [_log()] starting thread (client mode): 0xf57c9c30
2025-12-12T10:43:12.329 [DEBUG] [Thread-67933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:43:12.351 [DEBUG] [Thread-67933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:43:12.351 [INFO] [Thread-67933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] client lang: <none>
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] server lang: <none>
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] kex follows: False
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] Compression: none
2025-12-12T10:43:12.355 [DEBUG] [Thread-67933] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:43:12.373 [DEBUG] [Thread-67933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:43:12.373 [DEBUG] [Thread-67933] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:43:12.374 [DEBUG] [Thread-67933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:43:12.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:43:12.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:43:12.375 [DEBUG] [Thread-67933] [transport.py] [_log()] userauth is OK
2025-12-12T10:43:12.375 [DEBUG] [Thread-67933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:43:12.375 [DEBUG] [Thread-67933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:43:12.375 [DEBUG] [Thread-67933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:43:12.375 [DEBUG] [Thread-67933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:43:12.392 [INFO] [Thread-67933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:43:12.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:43:13.033 [DEBUG] [Thread-67933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:43:13.033 [DEBUG] [Thread-67933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:43:13.033 [DEBUG] [Thread-67933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:43:13.075 [DEBUG] [Thread-67933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:43:13.075 [DEBUG] [Thread-67933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:43:13.078 [DEBUG] [Thread-67933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:43:13.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:43:13.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:43:13.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:43:13.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:43:13.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:43:13.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:43:13.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:43:13.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:43:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:43:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.362944 -999.00  +17.40  36.96     43   +4.90 1 2 2 1 1   888    0 12.94 22.38 ----- 30.1 37.0 18.2 59.1 21.2 -20.8 20.6 -20.1 19.9 -18.8 20.3 -20.4
2025-12-12T10:43:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:43:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:43:13.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.362944
2025-12-12T10:43:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:43:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:43:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:43:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:43:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:43:13.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:42:38', tmtdew=13.63, humidity=40.17, cloud=0.0, wind=48.24, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:42:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:43:13.102 [DEBUG] [Thread-67933] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:43:13.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:43:13.198 [DEBUG] [Thread-67936] [transport.py] [_log()] starting thread (client mode): 0xf2d0ee60
2025-12-12T10:43:13.198 [DEBUG] [Thread-67936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:43:13.213 [DEBUG] [Thread-67936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:43:13.213 [INFO] [Thread-67936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] client lang: <none>
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] server lang: <none>
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] kex follows: False
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:43:13.221 [DEBUG] [Thread-67936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:43:13.222 [DEBUG] [Thread-67936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:43:13.222 [DEBUG] [Thread-67936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:43:13.222 [DEBUG] [Thread-67936] [transport.py] [_log()] Compression: none
2025-12-12T10:43:13.222 [DEBUG] [Thread-67936] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:43:13.277 [DEBUG] [Thread-67936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:43:13.278 [DEBUG] [Thread-67936] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:43:13.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:43:13.279 [DEBUG] [Thread-67936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:43:13.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:43:13.333 [DEBUG] [Thread-67936] [transport.py] [_log()] userauth is OK
2025-12-12T10:43:13.334 [DEBUG] [Thread-67936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:43:13.334 [DEBUG] [Thread-67936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:43:13.334 [DEBUG] [Thread-67936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:43:13.334 [DEBUG] [Thread-67936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:43:13.356 [INFO] [Thread-67936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:43:13.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:43:13.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:43:14.199 [DEBUG] [Thread-67936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:43:14.199 [DEBUG] [Thread-67936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:43:14.247 [DEBUG] [Thread-67936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:43:14.247 [DEBUG] [Thread-67936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:43:14.256 [DEBUG] [Thread-67936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:43:14.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:43:14.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:43:14.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:43:14.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:43:14.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:43:14.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:43:14.293 [DEBUG] [Thread-67936] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:43:18.078 [DEBUG] [Thread-67938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:20.663 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:20.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:22.091 [DEBUG] [Thread-67939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:27.131 [DEBUG] [Thread-67940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:36.152 [DEBUG] [Thread-67941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:36.484 [DEBUG] [Thread-67942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:37.159 [DEBUG] [Thread-67943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:44.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:43:44.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:43:44.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:43:44.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 43, 10), 13.62, 40.2, 0.0, 48.73, 16.96, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:43:44.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:43:10
2025-12-12T10:43:45.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:43:45.180 [DEBUG] [Thread-67944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:45.275 [DEBUG] [Thread-67945] [transport.py] [_log()] starting thread (client mode): 0xf57a96f0
2025-12-12T10:43:45.275 [DEBUG] [Thread-67945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:43:45.296 [DEBUG] [Thread-67945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:43:45.296 [INFO] [Thread-67945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:43:45.299 [DEBUG] [Thread-67945] [transport.py] [_log()] client lang: <none>
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] server lang: <none>
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] kex follows: False
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] Compression: none
2025-12-12T10:43:45.300 [DEBUG] [Thread-67945] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:43:45.318 [DEBUG] [Thread-67945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:43:45.319 [DEBUG] [Thread-67945] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:43:45.319 [DEBUG] [Thread-67945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:43:45.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:43:45.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:43:45.321 [DEBUG] [Thread-67945] [transport.py] [_log()] userauth is OK
2025-12-12T10:43:45.322 [DEBUG] [Thread-67945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:43:45.322 [DEBUG] [Thread-67945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:43:45.322 [DEBUG] [Thread-67945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:43:45.322 [DEBUG] [Thread-67945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:43:45.346 [INFO] [Thread-67945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:43:45.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:43:46.092 [DEBUG] [Thread-67945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:43:46.092 [DEBUG] [Thread-67945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:43:46.093 [DEBUG] [Thread-67945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:43:46.133 [DEBUG] [Thread-67945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:43:46.134 [DEBUG] [Thread-67945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:43:46.136 [DEBUG] [Thread-67945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:43:46.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:43:46.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:43:46.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:43:46.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:43:46.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:43:46.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:43:46.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:43:46.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:43:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:43:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.363291 -999.00  +17.10  36.95     44   +4.80 1 2 2 1 1   888    0 12.91 22.45 ----- 27.9 37.0 353.5 46.4 21.1 -19.2 20.4 -19.9 19.9 -17.3 20.1 -19.4
2025-12-12T10:43:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:43:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:43:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.363291
2025-12-12T10:43:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:43:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:43:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:43:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:43:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:43:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:43:10', tmtdew=13.62, humidity=40.2, cloud=0.0, wind=48.73, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:43:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:43:46.163 [DEBUG] [Thread-67945] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:43:46.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:43:46.259 [DEBUG] [Thread-67948] [transport.py] [_log()] starting thread (client mode): 0xf57a9300
2025-12-12T10:43:46.259 [DEBUG] [Thread-67948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:43:46.274 [DEBUG] [Thread-67948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:43:46.274 [INFO] [Thread-67948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:43:46.281 [DEBUG] [Thread-67948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] client lang: <none>
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] server lang: <none>
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] kex follows: False
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] Compression: none
2025-12-12T10:43:46.282 [DEBUG] [Thread-67948] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:43:46.341 [DEBUG] [Thread-67948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:43:46.342 [DEBUG] [Thread-67948] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:43:46.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:43:46.343 [DEBUG] [Thread-67948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:43:46.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:43:46.399 [DEBUG] [Thread-67948] [transport.py] [_log()] userauth is OK
2025-12-12T10:43:46.400 [DEBUG] [Thread-67948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:43:46.400 [DEBUG] [Thread-67948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:43:46.400 [DEBUG] [Thread-67948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:43:46.400 [DEBUG] [Thread-67948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:43:46.428 [INFO] [Thread-67948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:43:46.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:43:46.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:43:47.330 [DEBUG] [Thread-67948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:43:47.330 [DEBUG] [Thread-67948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:43:47.378 [DEBUG] [Thread-67948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:43:47.378 [DEBUG] [Thread-67948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:43:47.387 [DEBUG] [Thread-67948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:43:47.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:43:47.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:43:47.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:43:47.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:43:47.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:43:47.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:43:47.423 [DEBUG] [Thread-67948] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:43:52.200 [DEBUG] [Thread-67950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:43:54.235 [DEBUG] [Thread-67951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:03.258 [DEBUG] [Thread-67952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:07.268 [DEBUG] [Thread-67953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:12.280 [DEBUG] [Thread-67954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:17.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:44:17.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:44:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:44:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 44, 14), 13.78, 39.77, 0.0, 48.5, 16.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:44:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:44:14
2025-12-12T10:44:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:44:18.419 [DEBUG] [Thread-67955] [transport.py] [_log()] starting thread (client mode): 0xf57aa230
2025-12-12T10:44:18.419 [DEBUG] [Thread-67955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:44:18.440 [DEBUG] [Thread-67955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:44:18.440 [INFO] [Thread-67955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:44:18.443 [DEBUG] [Thread-67955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] client lang: <none>
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] server lang: <none>
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] kex follows: False
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:44:18.444 [DEBUG] [Thread-67955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:44:18.445 [DEBUG] [Thread-67955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:44:18.445 [DEBUG] [Thread-67955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:44:18.445 [DEBUG] [Thread-67955] [transport.py] [_log()] Compression: none
2025-12-12T10:44:18.445 [DEBUG] [Thread-67955] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:44:18.457 [DEBUG] [Thread-67955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:44:18.458 [DEBUG] [Thread-67955] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:44:18.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:44:18.459 [DEBUG] [Thread-67955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:44:18.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:44:18.461 [DEBUG] [Thread-67955] [transport.py] [_log()] userauth is OK
2025-12-12T10:44:18.461 [DEBUG] [Thread-67955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:44:18.461 [DEBUG] [Thread-67955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:44:18.462 [DEBUG] [Thread-67955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:44:18.462 [DEBUG] [Thread-67955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:44:18.498 [INFO] [Thread-67955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:44:18.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:44:19.123 [DEBUG] [Thread-67955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:44:19.124 [DEBUG] [Thread-67955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:44:19.124 [DEBUG] [Thread-67955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:44:19.165 [DEBUG] [Thread-67955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:44:19.165 [DEBUG] [Thread-67955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:44:19.169 [DEBUG] [Thread-67955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:44:19.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:44:19.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:44:19.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:44:19.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:44:19.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:44:19.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:44:19.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:44:19.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:44:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:44:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.363638 -999.00  +17.10  30.25     44   +5.00 1 2 2 1 1   888    0 12.94 19.96 ----- 31.0 30.2 5.1 53.4 21.4 -18.8 20.6 -18.8 20.0 -16.6 20.5 -17.5
2025-12-12T10:44:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:44:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:44:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.363638
2025-12-12T10:44:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:44:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:44:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:44:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:44:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:44:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:44:14', tmtdew=13.78, humidity=39.77, cloud=0.0, wind=48.5, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:43:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:44:19.203 [DEBUG] [Thread-67955] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:44:19.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:44:19.298 [DEBUG] [Thread-67958] [transport.py] [_log()] starting thread (client mode): 0xf57a89a0
2025-12-12T10:44:19.298 [DEBUG] [Thread-67958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:44:19.316 [DEBUG] [Thread-67958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:44:19.316 [INFO] [Thread-67958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:44:19.324 [DEBUG] [Thread-67958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:44:19.324 [DEBUG] [Thread-67958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:44:19.324 [DEBUG] [Thread-67958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:44:19.324 [DEBUG] [Thread-67958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] client lang: <none>
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] server lang: <none>
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] kex follows: False
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] Compression: none
2025-12-12T10:44:19.325 [DEBUG] [Thread-67958] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:44:19.381 [DEBUG] [Thread-67958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:44:19.382 [DEBUG] [Thread-67958] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:44:19.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:44:19.383 [DEBUG] [Thread-67958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:44:19.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:44:19.437 [DEBUG] [Thread-67958] [transport.py] [_log()] userauth is OK
2025-12-12T10:44:19.437 [DEBUG] [Thread-67958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:44:19.437 [DEBUG] [Thread-67958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:44:19.437 [DEBUG] [Thread-67958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:44:19.438 [DEBUG] [Thread-67958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:44:19.457 [INFO] [Thread-67958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:44:19.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:44:19.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:44:20.318 [DEBUG] [Thread-67958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:44:20.318 [DEBUG] [Thread-67958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:44:20.366 [DEBUG] [Thread-67958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:44:20.366 [DEBUG] [Thread-67958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:44:20.375 [DEBUG] [Thread-67958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:44:20.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:44:20.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:44:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:44:20.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:44:20.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:44:20.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:44:20.409 [DEBUG] [Thread-67958] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:44:20.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:20.808 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:21.300 [DEBUG] [Thread-67960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:22.308 [DEBUG] [Thread-67961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:30.347 [DEBUG] [Thread-67962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:36.534 [DEBUG] [Thread-67963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:37.365 [DEBUG] [Thread-67964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:39.379 [DEBUG] [Thread-67965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:48.396 [DEBUG] [Thread-67966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:44:50.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:44:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:44:51.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 44, 46), 13.48, 40.54, 0.0, 45.63, 16.86, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:44:51.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:44:46
2025-12-12T10:44:51.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:44:51.396 [DEBUG] [Thread-67967] [transport.py] [_log()] starting thread (client mode): 0xf2d0db10
2025-12-12T10:44:51.396 [DEBUG] [Thread-67967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:44:51.411 [DEBUG] [Thread-67967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:44:51.411 [INFO] [Thread-67967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:51.414 [DEBUG] [Thread-67967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] client lang: <none>
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] server lang: <none>
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] kex follows: False
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] Compression: none
2025-12-12T10:44:51.415 [DEBUG] [Thread-67967] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:44:51.430 [DEBUG] [Thread-67967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:44:51.431 [DEBUG] [Thread-67967] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:44:51.431 [DEBUG] [Thread-67967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:44:51.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:44:51.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:44:51.433 [DEBUG] [Thread-67967] [transport.py] [_log()] userauth is OK
2025-12-12T10:44:51.433 [DEBUG] [Thread-67967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:44:51.433 [DEBUG] [Thread-67967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:44:51.433 [DEBUG] [Thread-67967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:44:51.433 [DEBUG] [Thread-67967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:44:51.457 [INFO] [Thread-67967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:44:51.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:44:52.182 [DEBUG] [Thread-67967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:44:52.182 [DEBUG] [Thread-67967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:44:52.182 [DEBUG] [Thread-67967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:44:52.223 [DEBUG] [Thread-67967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:44:52.223 [DEBUG] [Thread-67967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:44:52.226 [DEBUG] [Thread-67967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:44:52.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:44:52.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:44:52.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:44:52.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:44:52.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:44:52.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:44:52.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:44:52.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:44:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:44:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.363986 -999.00  +16.90  34.91     44   +4.80 1 2 2 1 1   888    0 12.98 17.36 ----- 32.5 34.9 349.0 48.9 21.4 -18.3 20.6 -19.4 20.1 -16.9 20.5 -16.7
2025-12-12T10:44:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:44:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:44:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.363986
2025-12-12T10:44:52.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:44:52.248 [DEBUG] [Thread-67967] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:44:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:44:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:44:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:44:52.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:44:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:44:46', tmtdew=13.48, humidity=40.54, cloud=0.0, wind=45.63, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:44:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:44:52.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:44:52.350 [DEBUG] [Thread-67970] [transport.py] [_log()] starting thread (client mode): 0xf2d0f850
2025-12-12T10:44:52.350 [DEBUG] [Thread-67970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:44:52.365 [DEBUG] [Thread-67970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:44:52.366 [INFO] [Thread-67970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:44:52.373 [DEBUG] [Thread-67970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:44:52.374 [DEBUG] [Thread-67970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] client lang: <none>
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] server lang: <none>
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] kex follows: False
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:44:52.375 [DEBUG] [Thread-67970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:44:52.376 [DEBUG] [Thread-67970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:44:52.376 [DEBUG] [Thread-67970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:44:52.376 [DEBUG] [Thread-67970] [transport.py] [_log()] Compression: none
2025-12-12T10:44:52.376 [DEBUG] [Thread-67970] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:44:52.406 [DEBUG] [Thread-67972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:44:52.434 [DEBUG] [Thread-67970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:44:52.434 [DEBUG] [Thread-67970] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:44:52.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:44:52.436 [DEBUG] [Thread-67970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:44:52.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:44:52.489 [DEBUG] [Thread-67970] [transport.py] [_log()] userauth is OK
2025-12-12T10:44:52.489 [DEBUG] [Thread-67970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:44:52.490 [DEBUG] [Thread-67970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:44:52.490 [DEBUG] [Thread-67970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:44:52.490 [DEBUG] [Thread-67970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:44:52.512 [INFO] [Thread-67970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:44:52.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:44:52.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:44:53.374 [DEBUG] [Thread-67970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:44:53.374 [DEBUG] [Thread-67970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:44:53.422 [DEBUG] [Thread-67970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:44:53.423 [DEBUG] [Thread-67970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:44:53.432 [DEBUG] [Thread-67970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:44:53.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:44:53.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:44:53.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:44:53.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:44:53.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:44:53.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:44:53.473 [DEBUG] [Thread-67970] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:44:57.448 [DEBUG] [Thread-67973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:06.471 [DEBUG] [Thread-67974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:07.479 [DEBUG] [Thread-67975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:15.506 [DEBUG] [Thread-67976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:20.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:20.951 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:22.521 [DEBUG] [Thread-67977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:23.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:45:23.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:45:23.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:45:24.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 45, 18), 13.46, 40.59, 0.0, 42.94, 16.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:45:24.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:45:18
2025-12-12T10:45:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:45:24.504 [DEBUG] [Thread-67978] [transport.py] [_log()] starting thread (client mode): 0xf57ca890
2025-12-12T10:45:24.504 [DEBUG] [Thread-67978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:45:24.524 [DEBUG] [Thread-67978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:45:24.524 [INFO] [Thread-67978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:45:24.527 [DEBUG] [Thread-67980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:24.527 [DEBUG] [Thread-67978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] client lang: <none>
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] server lang: <none>
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] kex follows: False
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] Compression: none
2025-12-12T10:45:24.528 [DEBUG] [Thread-67978] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:45:24.542 [DEBUG] [Thread-67978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:45:24.543 [DEBUG] [Thread-67978] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:45:24.543 [DEBUG] [Thread-67978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:45:24.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:45:24.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:45:24.544 [DEBUG] [Thread-67978] [transport.py] [_log()] userauth is OK
2025-12-12T10:45:24.544 [DEBUG] [Thread-67978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:45:24.544 [DEBUG] [Thread-67978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:45:24.544 [DEBUG] [Thread-67978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:45:24.544 [DEBUG] [Thread-67978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:45:24.561 [INFO] [Thread-67978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:45:24.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:45:25.209 [DEBUG] [Thread-67978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:45:25.209 [DEBUG] [Thread-67978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:45:25.209 [DEBUG] [Thread-67978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:45:25.249 [DEBUG] [Thread-67978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:45:25.250 [DEBUG] [Thread-67978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:45:25.252 [DEBUG] [Thread-67978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:45:25.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:45:25.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:45:25.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:45:25.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:45:25.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:45:25.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:45:25.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.364333 -999.00  +17.10  32.35     43   +4.60 1 2 2 1 1   888    0 12.44 15.74 ----- 37.9 32.4 341.9 42.0 21.4 -19.7 20.7 -20.3 20.1 -17.5 20.4 -23.2
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.364333
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:45:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:45:18', tmtdew=13.46, humidity=40.59, cloud=0.0, wind=42.94, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:44:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:45:25.269 [DEBUG] [Thread-67978] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:45:25.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:45:25.355 [DEBUG] [Thread-67982] [transport.py] [_log()] starting thread (client mode): 0xf57c8070
2025-12-12T10:45:25.355 [DEBUG] [Thread-67982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:45:25.369 [DEBUG] [Thread-67982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:45:25.369 [INFO] [Thread-67982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:45:25.377 [DEBUG] [Thread-67982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:45:25.377 [DEBUG] [Thread-67982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:45:25.377 [DEBUG] [Thread-67982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:45:25.377 [DEBUG] [Thread-67982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:25.377 [DEBUG] [Thread-67982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:25.377 [DEBUG] [Thread-67982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] client lang: <none>
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] server lang: <none>
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] kex follows: False
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] Compression: none
2025-12-12T10:45:25.378 [DEBUG] [Thread-67982] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:45:25.437 [DEBUG] [Thread-67982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:45:25.437 [DEBUG] [Thread-67982] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:45:25.438 [DEBUG] [Thread-67982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:45:25.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:45:25.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:45:25.492 [DEBUG] [Thread-67982] [transport.py] [_log()] userauth is OK
2025-12-12T10:45:25.492 [DEBUG] [Thread-67982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:45:25.493 [DEBUG] [Thread-67982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:45:25.493 [DEBUG] [Thread-67982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:45:25.493 [DEBUG] [Thread-67982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:45:25.510 [INFO] [Thread-67982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:45:25.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:45:25.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:45:26.366 [DEBUG] [Thread-67982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:45:26.366 [DEBUG] [Thread-67982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:45:26.413 [DEBUG] [Thread-67982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:45:26.413 [DEBUG] [Thread-67982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:45:26.422 [DEBUG] [Thread-67982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:45:26.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:45:26.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:45:26.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:45:26.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:45:26.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:45:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:45:26.453 [DEBUG] [Thread-67982] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:45:33.549 [DEBUG] [Thread-67984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:36.568 [DEBUG] [Thread-67985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:37.563 [DEBUG] [Thread-67986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:42.605 [DEBUG] [Thread-67987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:51.625 [DEBUG] [Thread-67988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:52.631 [DEBUG] [Thread-67989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:45:56.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:45:56.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:45:56.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:45:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 45, 50), 13.73, 40.04, 0.0, 42.43, 17.02, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:45:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:45:50
2025-12-12T10:45:57.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:45:57.455 [DEBUG] [Thread-67990] [transport.py] [_log()] starting thread (client mode): 0xf57c81f0
2025-12-12T10:45:57.455 [DEBUG] [Thread-67990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:45:57.475 [DEBUG] [Thread-67990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:45:57.475 [INFO] [Thread-67990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] client lang: <none>
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] server lang: <none>
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] kex follows: False
2025-12-12T10:45:57.479 [DEBUG] [Thread-67990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:45:57.480 [DEBUG] [Thread-67990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:45:57.480 [DEBUG] [Thread-67990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:45:57.480 [DEBUG] [Thread-67990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:45:57.480 [DEBUG] [Thread-67990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:45:57.480 [DEBUG] [Thread-67990] [transport.py] [_log()] Compression: none
2025-12-12T10:45:57.480 [DEBUG] [Thread-67990] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:45:57.497 [DEBUG] [Thread-67990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:45:57.498 [DEBUG] [Thread-67990] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:45:57.498 [DEBUG] [Thread-67990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:45:57.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:45:57.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:45:57.541 [DEBUG] [Thread-67990] [transport.py] [_log()] userauth is OK
2025-12-12T10:45:57.541 [DEBUG] [Thread-67990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:45:57.541 [DEBUG] [Thread-67990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:45:57.541 [DEBUG] [Thread-67990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:45:57.542 [DEBUG] [Thread-67990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:45:57.574 [INFO] [Thread-67990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:45:57.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:45:58.343 [DEBUG] [Thread-67990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:45:58.343 [DEBUG] [Thread-67990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:45:58.344 [DEBUG] [Thread-67990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:45:58.384 [DEBUG] [Thread-67990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:45:58.384 [DEBUG] [Thread-67990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:45:58.387 [DEBUG] [Thread-67990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:45:58.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:45:58.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:45:58.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:45:58.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:45:58.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:45:58.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:45:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:45:58.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:45:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:45:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.364680 -999.00  +16.90  25.77     44   +4.80 1 2 1 1 1   888    0 12.40 14.69 ----- 33.2 25.8 3.7 44.3 21.5 -18.7 20.7 -18.9 20.2 -17.1 20.5 -17.4
2025-12-12T10:45:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:45:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:45:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.364680
2025-12-12T10:45:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:45:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:45:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:45:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:45:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:45:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:45:50', tmtdew=13.73, humidity=40.04, cloud=0.0, wind=42.43, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:45:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:45:58.408 [DEBUG] [Thread-67990] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:45:58.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:45:58.502 [DEBUG] [Thread-67993] [transport.py] [_log()] starting thread (client mode): 0xf57c8e50
2025-12-12T10:45:58.502 [DEBUG] [Thread-67993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:45:58.516 [DEBUG] [Thread-67993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:45:58.517 [INFO] [Thread-67993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:45:58.524 [DEBUG] [Thread-67993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:45:58.524 [DEBUG] [Thread-67993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:45:58.524 [DEBUG] [Thread-67993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:45:58.524 [DEBUG] [Thread-67993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:58.524 [DEBUG] [Thread-67993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:45:58.524 [DEBUG] [Thread-67993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] client lang: <none>
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] server lang: <none>
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] kex follows: False
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] Compression: none
2025-12-12T10:45:58.525 [DEBUG] [Thread-67993] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:45:58.579 [DEBUG] [Thread-67993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:45:58.579 [DEBUG] [Thread-67993] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:45:58.580 [DEBUG] [Thread-67993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:45:58.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:45:58.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:45:58.637 [DEBUG] [Thread-67993] [transport.py] [_log()] userauth is OK
2025-12-12T10:45:58.637 [DEBUG] [Thread-67993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:45:58.638 [DEBUG] [Thread-67993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:45:58.638 [DEBUG] [Thread-67993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:45:58.638 [DEBUG] [Thread-67993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:45:58.656 [INFO] [Thread-67993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:45:58.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:45:58.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:45:59.484 [DEBUG] [Thread-67993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:45:59.484 [DEBUG] [Thread-67993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:45:59.532 [DEBUG] [Thread-67993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:45:59.532 [DEBUG] [Thread-67993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:45:59.541 [DEBUG] [Thread-67993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:45:59.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:45:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:45:59.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:45:59.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:45:59.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:45:59.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:45:59.578 [DEBUG] [Thread-67993] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:46:00.653 [DEBUG] [Thread-67995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:07.666 [DEBUG] [Thread-67996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:09.694 [DEBUG] [Thread-67997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:18.714 [DEBUG] [Thread-67998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:21.090 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:21.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:22.725 [DEBUG] [Thread-67999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:27.739 [DEBUG] [Thread-68000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:46:29.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:46:29.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:46:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 46, 22), 13.67, 40.19, 0.0, 41.02, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:46:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:46:22
2025-12-12T10:46:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:46:30.558 [DEBUG] [Thread-68001] [transport.py] [_log()] starting thread (client mode): 0xf2d0e410
2025-12-12T10:46:30.558 [DEBUG] [Thread-68001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:46:30.579 [DEBUG] [Thread-68001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:46:30.579 [INFO] [Thread-68001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:46:30.582 [DEBUG] [Thread-68001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:46:30.582 [DEBUG] [Thread-68001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:46:30.582 [DEBUG] [Thread-68001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] client lang: <none>
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] server lang: <none>
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] kex follows: False
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] Compression: none
2025-12-12T10:46:30.583 [DEBUG] [Thread-68001] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:46:30.602 [DEBUG] [Thread-68001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:46:30.602 [DEBUG] [Thread-68001] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:46:30.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:46:30.603 [DEBUG] [Thread-68001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:46:30.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:46:30.605 [DEBUG] [Thread-68001] [transport.py] [_log()] userauth is OK
2025-12-12T10:46:30.605 [DEBUG] [Thread-68001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:46:30.605 [DEBUG] [Thread-68001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:46:30.605 [DEBUG] [Thread-68001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:46:30.605 [DEBUG] [Thread-68001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:46:30.621 [INFO] [Thread-68001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:46:30.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:46:31.209 [DEBUG] [Thread-68001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:46:31.209 [DEBUG] [Thread-68001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:46:31.210 [DEBUG] [Thread-68001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:46:31.250 [DEBUG] [Thread-68001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:46:31.250 [DEBUG] [Thread-68001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:46:31.254 [DEBUG] [Thread-68001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:46:31.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:46:31.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:46:31.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:46:31.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:46:31.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:46:31.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:46:31.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:46:31.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:46:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:46:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.365375 -999.00  +17.50  31.75     43   +5.00 1 2 2 1 1   888    0 12.86 14.29 ----- 26.4 31.8 23.4 46.9 21.6 -19.4 20.9 -19.9 20.2 -17.7 20.6 -18.0
2025-12-12T10:46:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:46:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:46:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.365375
2025-12-12T10:46:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:46:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:46:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:46:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:46:31.279 [DEBUG] [Thread-68001] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:46:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:46:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:46:22', tmtdew=13.67, humidity=40.19, cloud=0.0, wind=41.02, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:46:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:46:31.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:46:31.370 [DEBUG] [Thread-68004] [transport.py] [_log()] starting thread (client mode): 0xf2d0d5a0
2025-12-12T10:46:31.370 [DEBUG] [Thread-68004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:46:31.386 [DEBUG] [Thread-68004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:46:31.386 [INFO] [Thread-68004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] client lang: <none>
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] server lang: <none>
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] kex follows: False
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:46:31.394 [DEBUG] [Thread-68004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:46:31.395 [DEBUG] [Thread-68004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:46:31.395 [DEBUG] [Thread-68004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:46:31.395 [DEBUG] [Thread-68004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:46:31.395 [DEBUG] [Thread-68004] [transport.py] [_log()] Compression: none
2025-12-12T10:46:31.395 [DEBUG] [Thread-68004] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:46:31.457 [DEBUG] [Thread-68004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:46:31.457 [DEBUG] [Thread-68004] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:46:31.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:46:31.458 [DEBUG] [Thread-68004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:46:31.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:46:31.513 [DEBUG] [Thread-68004] [transport.py] [_log()] userauth is OK
2025-12-12T10:46:31.513 [DEBUG] [Thread-68004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:46:31.513 [DEBUG] [Thread-68004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:46:31.514 [DEBUG] [Thread-68004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:46:31.514 [DEBUG] [Thread-68004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:46:31.539 [INFO] [Thread-68004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:46:31.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:46:31.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:46:32.377 [DEBUG] [Thread-68004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:46:32.377 [DEBUG] [Thread-68004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:46:32.426 [DEBUG] [Thread-68004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:46:32.426 [DEBUG] [Thread-68004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:46:32.435 [DEBUG] [Thread-68004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:46:32.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:46:32.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:46:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:46:32.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:46:32.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:46:32.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:46:32.470 [DEBUG] [Thread-68004] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:46:36.623 [DEBUG] [Thread-68006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:36.761 [DEBUG] [Thread-68007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:37.768 [DEBUG] [Thread-68008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:45.800 [DEBUG] [Thread-68009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:52.817 [DEBUG] [Thread-68010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:46:54.825 [DEBUG] [Thread-68011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:47:02.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:47:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:47:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 46, 54), 13.76, 39.7, 0.0, 43.07, 17.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:47:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:46:54
2025-12-12T10:47:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:47:03.460 [DEBUG] [Thread-68012] [transport.py] [_log()] starting thread (client mode): 0xf57b4d00
2025-12-12T10:47:03.460 [DEBUG] [Thread-68012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:47:03.480 [DEBUG] [Thread-68012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:47:03.480 [INFO] [Thread-68012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:47:03.483 [DEBUG] [Thread-68012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:47:03.483 [DEBUG] [Thread-68012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:47:03.483 [DEBUG] [Thread-68012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:47:03.483 [DEBUG] [Thread-68012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:03.483 [DEBUG] [Thread-68012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:03.483 [DEBUG] [Thread-68012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] client lang: <none>
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] server lang: <none>
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] kex follows: False
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] Compression: none
2025-12-12T10:47:03.484 [DEBUG] [Thread-68012] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:47:03.503 [DEBUG] [Thread-68012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:47:03.503 [DEBUG] [Thread-68012] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:47:03.504 [DEBUG] [Thread-68012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:47:03.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:47:03.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:47:03.506 [DEBUG] [Thread-68012] [transport.py] [_log()] userauth is OK
2025-12-12T10:47:03.506 [DEBUG] [Thread-68012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:47:03.506 [DEBUG] [Thread-68012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:47:03.506 [DEBUG] [Thread-68012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:47:03.506 [DEBUG] [Thread-68012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:47:03.531 [INFO] [Thread-68012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:47:03.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:47:03.845 [DEBUG] [Thread-68014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:04.252 [DEBUG] [Thread-68012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:47:04.252 [DEBUG] [Thread-68012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:47:04.253 [DEBUG] [Thread-68012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:47:04.293 [DEBUG] [Thread-68012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:47:04.293 [DEBUG] [Thread-68012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:47:04.296 [DEBUG] [Thread-68012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:47:04.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:47:04.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:47:04.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:47:04.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:47:04.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:47:04.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:47:04.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:47:04.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:47:04.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:47:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.365722 -999.00  +17.40  35.37     43   +4.90 1 2 2 1 1   888    0 12.65 15.60 ----- 37.1 35.4 8.8 45.5 21.6 -19.6 20.9 -20.7 20.3 -17.7 20.6 -19.5
2025-12-12T10:47:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:47:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:47:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.365722
2025-12-12T10:47:04.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:47:04.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:47:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:47:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:47:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:47:04.323 [DEBUG] [Thread-68012] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:47:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:46:54', tmtdew=13.76, humidity=39.7, cloud=0.0, wind=43.07, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:46:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:47:04.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:47:04.417 [DEBUG] [Thread-68016] [transport.py] [_log()] starting thread (client mode): 0xf57b4790
2025-12-12T10:47:04.417 [DEBUG] [Thread-68016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:47:04.432 [DEBUG] [Thread-68016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:47:04.432 [INFO] [Thread-68016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] client lang: <none>
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] server lang: <none>
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] kex follows: False
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:47:04.445 [DEBUG] [Thread-68016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:47:04.446 [DEBUG] [Thread-68016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:47:04.446 [DEBUG] [Thread-68016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:47:04.446 [DEBUG] [Thread-68016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:47:04.446 [DEBUG] [Thread-68016] [transport.py] [_log()] Compression: none
2025-12-12T10:47:04.446 [DEBUG] [Thread-68016] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:47:04.496 [DEBUG] [Thread-68016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:47:04.496 [DEBUG] [Thread-68016] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:47:04.497 [DEBUG] [Thread-68016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:47:04.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:47:04.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:47:04.556 [DEBUG] [Thread-68016] [transport.py] [_log()] userauth is OK
2025-12-12T10:47:04.557 [DEBUG] [Thread-68016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:47:04.557 [DEBUG] [Thread-68016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:47:04.557 [DEBUG] [Thread-68016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:47:04.557 [DEBUG] [Thread-68016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:47:04.576 [INFO] [Thread-68016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:47:04.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:47:04.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:47:05.458 [DEBUG] [Thread-68016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:47:05.458 [DEBUG] [Thread-68016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:47:05.506 [DEBUG] [Thread-68016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:47:05.506 [DEBUG] [Thread-68016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:47:05.515 [DEBUG] [Thread-68016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:47:05.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:47:05.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:47:05.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:47:05.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:47:05.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:47:05.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:47:05.549 [DEBUG] [Thread-68016] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:47:07.858 [DEBUG] [Thread-68018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:12.901 [DEBUG] [Thread-68019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:21.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:21.231 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:21.920 [DEBUG] [Thread-68020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:22.923 [DEBUG] [Thread-68021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:30.943 [DEBUG] [Thread-68022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:35.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:47:35.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:47:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:47:36.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 47, 26), 13.85, 39.52, 0.0, 43.63, 17.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:47:36.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:47:26
2025-12-12T10:47:36.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:47:36.530 [DEBUG] [Thread-68023] [transport.py] [_log()] starting thread (client mode): 0xf57b7970
2025-12-12T10:47:36.531 [DEBUG] [Thread-68023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:47:36.551 [DEBUG] [Thread-68023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:47:36.551 [INFO] [Thread-68023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:47:36.554 [DEBUG] [Thread-68023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] client lang: <none>
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] server lang: <none>
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] kex follows: False
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] Compression: none
2025-12-12T10:47:36.555 [DEBUG] [Thread-68023] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:47:36.573 [DEBUG] [Thread-68023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:47:36.573 [DEBUG] [Thread-68023] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:47:36.574 [DEBUG] [Thread-68023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:47:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:47:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:47:36.617 [DEBUG] [Thread-68023] [transport.py] [_log()] userauth is OK
2025-12-12T10:47:36.617 [DEBUG] [Thread-68023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:47:36.617 [DEBUG] [Thread-68023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:47:36.617 [DEBUG] [Thread-68023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:47:36.617 [DEBUG] [Thread-68023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:47:36.654 [INFO] [Thread-68023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:47:36.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:47:36.678 [DEBUG] [Thread-68025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:37.324 [DEBUG] [Thread-68023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:47:37.324 [DEBUG] [Thread-68023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:47:37.324 [DEBUG] [Thread-68023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:47:37.366 [DEBUG] [Thread-68023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:47:37.366 [DEBUG] [Thread-68023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:47:37.369 [DEBUG] [Thread-68023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:47:37.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:47:37.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:47:37.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:47:37.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:47:37.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:47:37.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:47:37.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:47:37.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:47:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:47:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.366069 -999.00  +17.30  33.92     43   +4.80 1 2 2 1 1   888    0 12.83 18.90 ----- 39.1 33.9 12.8 48.6 21.7 -20.3 20.9 -20.5 20.4 -18.5 20.7 -17.4
2025-12-12T10:47:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:47:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:47:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.366069
2025-12-12T10:47:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:47:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:47:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:47:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:47:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:47:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:47:26', tmtdew=13.85, humidity=39.52, cloud=0.0, wind=43.63, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:47:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:47:37.393 [DEBUG] [Thread-68023] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:47:37.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:47:37.485 [DEBUG] [Thread-68027] [transport.py] [_log()] starting thread (client mode): 0xf57cb310
2025-12-12T10:47:37.485 [DEBUG] [Thread-68027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:47:37.499 [DEBUG] [Thread-68027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:47:37.499 [INFO] [Thread-68027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:47:37.506 [DEBUG] [Thread-68027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:47:37.506 [DEBUG] [Thread-68027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:47:37.506 [DEBUG] [Thread-68027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:47:37.506 [DEBUG] [Thread-68027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] client lang: <none>
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] server lang: <none>
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] kex follows: False
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] Compression: none
2025-12-12T10:47:37.507 [DEBUG] [Thread-68027] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:47:37.564 [DEBUG] [Thread-68027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:47:37.565 [DEBUG] [Thread-68027] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:47:37.565 [DEBUG] [Thread-68027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:47:37.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:47:37.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:47:37.621 [DEBUG] [Thread-68027] [transport.py] [_log()] userauth is OK
2025-12-12T10:47:37.621 [DEBUG] [Thread-68027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:47:37.621 [DEBUG] [Thread-68027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:47:37.621 [DEBUG] [Thread-68027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:47:37.621 [DEBUG] [Thread-68027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:47:37.640 [INFO] [Thread-68027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:47:37.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:47:37.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:47:37.961 [DEBUG] [Thread-68029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:38.595 [DEBUG] [Thread-68027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:47:38.595 [DEBUG] [Thread-68027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:47:38.643 [DEBUG] [Thread-68027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:47:38.644 [DEBUG] [Thread-68027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:47:38.653 [DEBUG] [Thread-68027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:47:38.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:47:38.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:47:38.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:47:38.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:47:38.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:47:38.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:47:38.689 [DEBUG] [Thread-68027] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:47:39.987 [DEBUG] [Thread-68030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:49.011 [DEBUG] [Thread-68031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:53.025 [DEBUG] [Thread-68032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:47:58.042 [DEBUG] [Thread-68033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:07.060 [DEBUG] [Thread-68034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:08.067 [DEBUG] [Thread-68035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:48:08.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:48:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:48:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 47, 58), 14.16, 38.76, 0.0, 47.71, 17.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:48:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:47:58
2025-12-12T10:48:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:48:09.666 [DEBUG] [Thread-68036] [transport.py] [_log()] starting thread (client mode): 0xf57a93f0
2025-12-12T10:48:09.666 [DEBUG] [Thread-68036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:48:09.687 [DEBUG] [Thread-68036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:48:09.687 [INFO] [Thread-68036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:48:09.690 [DEBUG] [Thread-68036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:48:09.690 [DEBUG] [Thread-68036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:48:09.690 [DEBUG] [Thread-68036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:48:09.690 [DEBUG] [Thread-68036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:09.690 [DEBUG] [Thread-68036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] client lang: <none>
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] server lang: <none>
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] kex follows: False
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] Compression: none
2025-12-12T10:48:09.691 [DEBUG] [Thread-68036] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:48:09.710 [DEBUG] [Thread-68036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:48:09.710 [DEBUG] [Thread-68036] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:48:09.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:48:09.711 [DEBUG] [Thread-68036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:48:09.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:48:09.713 [DEBUG] [Thread-68036] [transport.py] [_log()] userauth is OK
2025-12-12T10:48:09.713 [DEBUG] [Thread-68036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:48:09.713 [DEBUG] [Thread-68036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:48:09.713 [DEBUG] [Thread-68036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:48:09.713 [DEBUG] [Thread-68036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:48:09.735 [INFO] [Thread-68036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:48:09.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:48:10.528 [DEBUG] [Thread-68036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:48:10.528 [DEBUG] [Thread-68036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:48:10.528 [DEBUG] [Thread-68036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:48:10.569 [DEBUG] [Thread-68036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:48:10.569 [DEBUG] [Thread-68036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:48:10.572 [DEBUG] [Thread-68036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:48:10.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:48:10.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:48:10.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:48:10.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:48:10.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:48:10.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:48:10.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:48:10.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:48:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:48:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.366416 -999.00  +16.90  38.95     44   +4.80 1 2 2 1 1   888    0 12.71 17.47 ----- 35.3 39.0 6.8 46.6 21.6 -19.2 20.9 -20.4 20.2 -18.7 20.6 -17.6
2025-12-12T10:48:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:48:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:48:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.366416
2025-12-12T10:48:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:48:10.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:48:10.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:48:10.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:48:10.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:48:10.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:47:58', tmtdew=14.16, humidity=38.76, cloud=0.0, wind=47.71, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:47:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:48:10.603 [DEBUG] [Thread-68036] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:48:10.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:48:10.697 [DEBUG] [Thread-68039] [transport.py] [_log()] starting thread (client mode): 0xf57ab7f0
2025-12-12T10:48:10.697 [DEBUG] [Thread-68039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:48:10.713 [DEBUG] [Thread-68039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:48:10.713 [INFO] [Thread-68039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:48:10.720 [DEBUG] [Thread-68039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] client lang: <none>
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] server lang: <none>
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] kex follows: False
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] Compression: none
2025-12-12T10:48:10.721 [DEBUG] [Thread-68039] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:48:10.784 [DEBUG] [Thread-68039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:48:10.784 [DEBUG] [Thread-68039] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:48:10.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:48:10.785 [DEBUG] [Thread-68039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:48:10.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:48:10.842 [DEBUG] [Thread-68039] [transport.py] [_log()] userauth is OK
2025-12-12T10:48:10.843 [DEBUG] [Thread-68039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:48:10.843 [DEBUG] [Thread-68039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:48:10.843 [DEBUG] [Thread-68039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:48:10.843 [DEBUG] [Thread-68039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:48:10.863 [INFO] [Thread-68039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:48:10.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:48:10.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:48:11.702 [DEBUG] [Thread-68039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:48:11.702 [DEBUG] [Thread-68039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:48:11.750 [DEBUG] [Thread-68039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:48:11.750 [DEBUG] [Thread-68039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:48:11.759 [DEBUG] [Thread-68039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:48:11.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:48: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')
2025-12-12T10:48:11.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:48:11.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:48:11.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:48:11.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:48:11.795 [DEBUG] [Thread-68039] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:48:16.092 [DEBUG] [Thread-68041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:21.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:21.372 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:23.109 [DEBUG] [Thread-68042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:25.133 [DEBUG] [Thread-68043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:34.154 [DEBUG] [Thread-68044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:36.709 [DEBUG] [Thread-68045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:38.166 [DEBUG] [Thread-68046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:41.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:48:41.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:48:41.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:48:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 48, 30), 14.3, 38.41, 0.0, 47.06, 17.67, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:48:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:48:30
2025-12-12T10:48:42.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:48:42.775 [DEBUG] [Thread-68047] [transport.py] [_log()] starting thread (client mode): 0xf57b6ef0
2025-12-12T10:48:42.775 [DEBUG] [Thread-68047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:48:42.796 [DEBUG] [Thread-68047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:48:42.796 [INFO] [Thread-68047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] client lang: <none>
2025-12-12T10:48:42.799 [DEBUG] [Thread-68047] [transport.py] [_log()] server lang: <none>
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] kex follows: False
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] Compression: none
2025-12-12T10:48:42.800 [DEBUG] [Thread-68047] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:48:42.818 [DEBUG] [Thread-68047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:48:42.819 [DEBUG] [Thread-68047] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:48:42.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:48:42.820 [DEBUG] [Thread-68047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:48:42.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:48:42.821 [DEBUG] [Thread-68047] [transport.py] [_log()] userauth is OK
2025-12-12T10:48:42.821 [DEBUG] [Thread-68047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:48:42.821 [DEBUG] [Thread-68047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:48:42.821 [DEBUG] [Thread-68047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:48:42.821 [DEBUG] [Thread-68047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:48:42.839 [INFO] [Thread-68047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:48:42.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:48:43.179 [DEBUG] [Thread-68049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:43.486 [DEBUG] [Thread-68047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:48:43.486 [DEBUG] [Thread-68047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:48:43.487 [DEBUG] [Thread-68047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:48:43.527 [DEBUG] [Thread-68047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:48:43.527 [DEBUG] [Thread-68047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:48:43.530 [DEBUG] [Thread-68047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:48:43.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:48:43.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:48:43.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:48:43.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:48:43.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:48:43.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:48:43.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:48:43.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:48:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:48:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.366763 -999.00  +17.10  27.87     44   +4.80 1 2 1 1 1   888    0 12.81 21.39 ----- 34.0 27.9 338.4 43.1 21.3 -23.6 20.7 -23.4 20.1 -21.5 20.2 -21.1
2025-12-12T10:48:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:48:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:48:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.366763
2025-12-12T10:48:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:48:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:48:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:48:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:48:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:48:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:48:30', tmtdew=14.3, humidity=38.41, cloud=0.0, wind=47.06, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:48:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:48:43.557 [DEBUG] [Thread-68047] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:48:43.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:48:43.649 [DEBUG] [Thread-68051] [transport.py] [_log()] starting thread (client mode): 0xf57a9300
2025-12-12T10:48:43.649 [DEBUG] [Thread-68051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:48:43.664 [DEBUG] [Thread-68051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:48:43.665 [INFO] [Thread-68051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:48:43.672 [DEBUG] [Thread-68051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:48:43.672 [DEBUG] [Thread-68051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:48:43.673 [DEBUG] [Thread-68051] [transport.py] [_log()] client lang: <none>
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] server lang: <none>
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] kex follows: False
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:48:43.674 [DEBUG] [Thread-68051] [transport.py] [_log()] Compression: none
2025-12-12T10:48:43.675 [DEBUG] [Thread-68051] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:48:43.733 [DEBUG] [Thread-68051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:48:43.734 [DEBUG] [Thread-68051] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:48:43.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:48:43.735 [DEBUG] [Thread-68051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:48:43.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:48:43.789 [DEBUG] [Thread-68051] [transport.py] [_log()] userauth is OK
2025-12-12T10:48:43.789 [DEBUG] [Thread-68051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:48:43.789 [DEBUG] [Thread-68051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:48:43.789 [DEBUG] [Thread-68051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:48:43.789 [DEBUG] [Thread-68051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:48:43.810 [INFO] [Thread-68051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:48:43.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:48:43.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:48:44.655 [DEBUG] [Thread-68051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:48:44.656 [DEBUG] [Thread-68051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:48:44.703 [DEBUG] [Thread-68051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:48:44.703 [DEBUG] [Thread-68051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:48:44.713 [DEBUG] [Thread-68051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:48:44.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:48:44.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:48:44.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:48:44.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:48:44.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:48:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:48:44.749 [DEBUG] [Thread-68051] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:48:52.204 [DEBUG] [Thread-68053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:48:53.212 [DEBUG] [Thread-68054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:01.252 [DEBUG] [Thread-68055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:08.270 [DEBUG] [Thread-68056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:10.283 [DEBUG] [Thread-68057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:49:14.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:49:14.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:49:15.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 49, 2), 14.42, 38.11, 0.0, 49.6, 17.74, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:49:15.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:49:02
2025-12-12T10:49:15.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:49:15.762 [DEBUG] [Thread-68058] [transport.py] [_log()] starting thread (client mode): 0xf57c9e10
2025-12-12T10:49:15.762 [DEBUG] [Thread-68058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:49:15.783 [DEBUG] [Thread-68058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:49:15.783 [INFO] [Thread-68058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] client lang: <none>
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] server lang: <none>
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] kex follows: False
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:49:15.786 [DEBUG] [Thread-68058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:49:15.787 [DEBUG] [Thread-68058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:49:15.787 [DEBUG] [Thread-68058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:49:15.787 [DEBUG] [Thread-68058] [transport.py] [_log()] Compression: none
2025-12-12T10:49:15.787 [DEBUG] [Thread-68058] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:49:15.801 [DEBUG] [Thread-68058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:49:15.801 [DEBUG] [Thread-68058] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:49:15.801 [DEBUG] [Thread-68058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:49:15.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:49:15.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:49:15.802 [DEBUG] [Thread-68058] [transport.py] [_log()] userauth is OK
2025-12-12T10:49:15.802 [DEBUG] [Thread-68058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:49:15.802 [DEBUG] [Thread-68058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:49:15.802 [DEBUG] [Thread-68058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:49:15.802 [DEBUG] [Thread-68058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:49:15.819 [INFO] [Thread-68058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:49:15.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:49:16.419 [DEBUG] [Thread-68058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:49:16.419 [DEBUG] [Thread-68058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:49:16.419 [DEBUG] [Thread-68058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:49:16.460 [DEBUG] [Thread-68058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:49:16.460 [DEBUG] [Thread-68058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:49:16.461 [DEBUG] [Thread-68058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:49:16.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:49:16.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:49:16.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:49:16.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:49:16.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:49:16.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:49:16.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.367110 -999.00  +17.10  25.34     44   +4.90 1 2 1 1 1   888    0 12.91 21.56 ----- 32.4 25.3 8.9 42.2 21.4 -19.2 20.7 -19.3 20.2 -17.2 20.5 -18.2
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.367110
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:49:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:49:02', tmtdew=14.42, humidity=38.11, cloud=0.0, wind=49.6, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:48:38.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:49:16.470 [DEBUG] [Thread-68058] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:49:16.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:49:16.556 [DEBUG] [Thread-68061] [transport.py] [_log()] starting thread (client mode): 0xf57b7ac0
2025-12-12T10:49:16.556 [DEBUG] [Thread-68061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:49:16.571 [DEBUG] [Thread-68061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:49:16.571 [INFO] [Thread-68061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] client lang: <none>
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] server lang: <none>
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] kex follows: False
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:49:16.579 [DEBUG] [Thread-68061] [transport.py] [_log()] Compression: none
2025-12-12T10:49:16.580 [DEBUG] [Thread-68061] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:49:16.636 [DEBUG] [Thread-68061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:49:16.636 [DEBUG] [Thread-68061] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:49:16.636 [DEBUG] [Thread-68061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:49:16.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:49:16.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:49:16.692 [DEBUG] [Thread-68061] [transport.py] [_log()] userauth is OK
2025-12-12T10:49:16.692 [DEBUG] [Thread-68061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:49:16.692 [DEBUG] [Thread-68061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:49:16.692 [DEBUG] [Thread-68061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:49:16.692 [DEBUG] [Thread-68061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:49:16.706 [INFO] [Thread-68061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:49:16.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:49:16.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:49:17.637 [DEBUG] [Thread-68061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:49:17.637 [DEBUG] [Thread-68061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:49:17.685 [DEBUG] [Thread-68061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:49:17.685 [DEBUG] [Thread-68061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:49:17.693 [DEBUG] [Thread-68061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:49:17.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:49:17.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:49:17.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:49:17.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:49:17.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:49:17.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:49:17.725 [DEBUG] [Thread-68061] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:49:19.300 [DEBUG] [Thread-68063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:21.512 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:21.513 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:23.312 [DEBUG] [Thread-68064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:28.345 [DEBUG] [Thread-68065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:36.759 [DEBUG] [Thread-68066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:37.367 [DEBUG] [Thread-68067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:38.374 [DEBUG] [Thread-68068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:46.399 [DEBUG] [Thread-68069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:47.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:49:47.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:49:47.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:49:48.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 49, 34), 14.19, 38.83, 0.0, 46.17, 17.67, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:49:48.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:49:34
2025-12-12T10:49:48.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:49:48.706 [DEBUG] [Thread-68070] [transport.py] [_log()] starting thread (client mode): 0xf570dc90
2025-12-12T10:49:48.706 [DEBUG] [Thread-68070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:49:48.726 [DEBUG] [Thread-68070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:49:48.726 [INFO] [Thread-68070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:49:48.729 [DEBUG] [Thread-68070] [transport.py] [_log()] client lang: <none>
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] server lang: <none>
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] kex follows: False
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] Compression: none
2025-12-12T10:49:48.730 [DEBUG] [Thread-68070] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:49:48.749 [DEBUG] [Thread-68070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:49:48.750 [DEBUG] [Thread-68070] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:49:48.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:49:48.751 [DEBUG] [Thread-68070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:49:48.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:49:48.753 [DEBUG] [Thread-68070] [transport.py] [_log()] userauth is OK
2025-12-12T10:49:48.753 [DEBUG] [Thread-68070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:49:48.753 [DEBUG] [Thread-68070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:49:48.753 [DEBUG] [Thread-68070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:49:48.753 [DEBUG] [Thread-68070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:49:48.774 [INFO] [Thread-68070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:49:48.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:49:49.404 [DEBUG] [Thread-68070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:49:49.404 [DEBUG] [Thread-68070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:49:49.404 [DEBUG] [Thread-68070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:49:49.445 [DEBUG] [Thread-68070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:49:49.445 [DEBUG] [Thread-68070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:49:49.449 [DEBUG] [Thread-68070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:49:49.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:49:49.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:49:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:49:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:49:49.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:49:49.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:49:49.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:49:49.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:49:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:49:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.367458 -999.00  +17.30  33.65     44   +5.10 1 2 2 1 1   888    0 12.79 19.90 ----- 50.1 33.6 354.0 53.3 21.7 -18.4 21.0 -18.9 20.4 -17.1 20.8 -16.7
2025-12-12T10:49:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:49:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:49:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.367458
2025-12-12T10:49:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:49:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:49:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:49:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:49:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:49:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:49:34', tmtdew=14.19, humidity=38.83, cloud=0.0, wind=46.17, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:49:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:49:49.477 [DEBUG] [Thread-68070] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:49:49.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:49:49.572 [DEBUG] [Thread-68073] [transport.py] [_log()] starting thread (client mode): 0xf570db40
2025-12-12T10:49:49.572 [DEBUG] [Thread-68073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:49:49.586 [DEBUG] [Thread-68073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:49:49.586 [INFO] [Thread-68073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:49:49.594 [DEBUG] [Thread-68073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] client lang: <none>
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] server lang: <none>
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] kex follows: False
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] Compression: none
2025-12-12T10:49:49.595 [DEBUG] [Thread-68073] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:49:49.653 [DEBUG] [Thread-68073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:49:49.653 [DEBUG] [Thread-68073] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:49:49.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:49:49.654 [DEBUG] [Thread-68073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:49:49.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:49:49.709 [DEBUG] [Thread-68073] [transport.py] [_log()] userauth is OK
2025-12-12T10:49:49.709 [DEBUG] [Thread-68073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:49:49.709 [DEBUG] [Thread-68073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:49:49.709 [DEBUG] [Thread-68073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:49:49.709 [DEBUG] [Thread-68073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:49:49.728 [INFO] [Thread-68073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:49:49.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:49:49.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:49:50.607 [DEBUG] [Thread-68073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:49:50.608 [DEBUG] [Thread-68073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:49:50.655 [DEBUG] [Thread-68073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:49:50.655 [DEBUG] [Thread-68073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:49:50.664 [DEBUG] [Thread-68073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:49:50.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:49:50.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:49:50.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:49:50.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:49:50.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:49:50.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:49:50.706 [DEBUG] [Thread-68073] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:49:53.419 [DEBUG] [Thread-68075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:49:55.444 [DEBUG] [Thread-68076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:04.464 [DEBUG] [Thread-68077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:08.476 [DEBUG] [Thread-68078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:13.492 [DEBUG] [Thread-68079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:50:20.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:50:20.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:50:21.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 50, 6), 14.31, 38.56, 0.0, 46.97, 17.85, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:50:21.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:50:06
2025-12-12T10:50:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:50:21.654 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:21.654 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:21.677 [DEBUG] [Thread-68080] [transport.py] [_log()] starting thread (client mode): 0xf570eb30
2025-12-12T10:50:21.677 [DEBUG] [Thread-68080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:50:21.696 [DEBUG] [Thread-68080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:50:21.696 [INFO] [Thread-68080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:50:21.699 [DEBUG] [Thread-68080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:50:21.699 [DEBUG] [Thread-68080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] client lang: <none>
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] server lang: <none>
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] kex follows: False
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:50:21.700 [DEBUG] [Thread-68080] [transport.py] [_log()] Compression: none
2025-12-12T10:50:21.701 [DEBUG] [Thread-68080] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:50:21.717 [DEBUG] [Thread-68080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:50:21.717 [DEBUG] [Thread-68080] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:50:21.718 [DEBUG] [Thread-68080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:50:21.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:50:21.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:50:21.720 [DEBUG] [Thread-68080] [transport.py] [_log()] userauth is OK
2025-12-12T10:50:21.720 [DEBUG] [Thread-68080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:50:21.720 [DEBUG] [Thread-68080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:50:21.720 [DEBUG] [Thread-68080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:50:21.720 [DEBUG] [Thread-68080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:50:21.744 [INFO] [Thread-68080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:50:21.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:50:22.398 [DEBUG] [Thread-68080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:50:22.398 [DEBUG] [Thread-68080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:50:22.398 [DEBUG] [Thread-68080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:50:22.439 [DEBUG] [Thread-68080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:50:22.439 [DEBUG] [Thread-68080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:50:22.442 [DEBUG] [Thread-68080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:50:22.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:50:22.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:50:22.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:50:22.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:50:22.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:50:22.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:50:22.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:50:22.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:50:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:50:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.368152 -999.00  +16.70  31.15     46   +5.00 1 2 2 1 1   888    0 12.42 11.96 ----- 34.2 31.1 359.8 47.7 21.7 -21.0 21.0 -20.4 20.4 -19.1 20.7 -21.9
2025-12-12T10:50:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:50:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:50:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.368152
2025-12-12T10:50:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:50:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:50:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:50:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:50:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:50:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:50:06', tmtdew=14.31, humidity=38.56, cloud=0.0, wind=46.97, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:50:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:50:22.471 [DEBUG] [Thread-68080] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:50:22.514 [DEBUG] [Thread-68083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:22.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:50:22.566 [DEBUG] [Thread-68084] [transport.py] [_log()] starting thread (client mode): 0xf570d360
2025-12-12T10:50:22.566 [DEBUG] [Thread-68084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:50:22.581 [DEBUG] [Thread-68084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:50:22.581 [INFO] [Thread-68084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:50:22.589 [DEBUG] [Thread-68084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:50:22.589 [DEBUG] [Thread-68084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] client lang: <none>
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] server lang: <none>
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] kex follows: False
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] Compression: none
2025-12-12T10:50:22.590 [DEBUG] [Thread-68084] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:50:22.649 [DEBUG] [Thread-68084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:50:22.649 [DEBUG] [Thread-68084] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:50:22.650 [DEBUG] [Thread-68084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:50:22.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:50:22.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:50:22.704 [DEBUG] [Thread-68084] [transport.py] [_log()] userauth is OK
2025-12-12T10:50:22.705 [DEBUG] [Thread-68084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:50:22.705 [DEBUG] [Thread-68084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:50:22.705 [DEBUG] [Thread-68084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:50:22.705 [DEBUG] [Thread-68084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:50:22.726 [INFO] [Thread-68084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:50:22.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:50:22.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:50:23.519 [DEBUG] [Thread-68086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:23.557 [DEBUG] [Thread-68084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:50:23.557 [DEBUG] [Thread-68084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:50:23.605 [DEBUG] [Thread-68084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:50:23.605 [DEBUG] [Thread-68084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:50:23.616 [DEBUG] [Thread-68084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:50:23.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:50:23.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:50:23.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:50:23.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:50:23.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:50:23.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:50:23.652 [DEBUG] [Thread-68084] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:50:31.565 [DEBUG] [Thread-68087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:36.810 [DEBUG] [Thread-68088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:38.580 [DEBUG] [Thread-68089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:40.588 [DEBUG] [Thread-68090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:49.611 [DEBUG] [Thread-68091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:53.627 [DEBUG] [Thread-68092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:50:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:50:53.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:50:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:50:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 50, 38), 14.16, 39.31, 0.0, 47.34, 17.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:50:54.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:50:38
2025-12-12T10:50:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:50:54.625 [DEBUG] [Thread-68093] [transport.py] [_log()] starting thread (client mode): 0xf570f250
2025-12-12T10:50:54.625 [DEBUG] [Thread-68093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:50:54.646 [DEBUG] [Thread-68093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:50:54.646 [INFO] [Thread-68093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] client lang: <none>
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] server lang: <none>
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] kex follows: False
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] Compression: none
2025-12-12T10:50:54.650 [DEBUG] [Thread-68093] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:50:54.665 [DEBUG] [Thread-68093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:50:54.666 [DEBUG] [Thread-68093] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:50:54.666 [DEBUG] [Thread-68093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:50:54.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:50:54.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:50:54.668 [DEBUG] [Thread-68093] [transport.py] [_log()] userauth is OK
2025-12-12T10:50:54.669 [DEBUG] [Thread-68093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:50:54.669 [DEBUG] [Thread-68093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:50:54.669 [DEBUG] [Thread-68093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:50:54.669 [DEBUG] [Thread-68093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:50:54.705 [INFO] [Thread-68093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:50:54.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:50:55.371 [DEBUG] [Thread-68093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:50:55.372 [DEBUG] [Thread-68093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:50:55.372 [DEBUG] [Thread-68093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:50:55.413 [DEBUG] [Thread-68093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:50:55.414 [DEBUG] [Thread-68093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:50:55.417 [DEBUG] [Thread-68093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:50:55.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:50:55.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:50:55.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:50:55.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:50:55.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:50:55.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:50:55.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:50:55.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.368500 -999.00  +16.40  39.54     46   +4.80 1 2 2 1 1   888    0 12.74 10.40 ----- 22.5 39.5 345.7 52.6 21.7 -19.0 20.9 -19.6 20.4 -17.0 20.8 -18.4
2025-12-12T10:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:50:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.368500
2025-12-12T10:50:55.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:50:55.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:50:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:50:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:50:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:50:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:50:38', tmtdew=14.16, humidity=39.31, cloud=0.0, wind=47.34, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:50:38.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:50:55.442 [DEBUG] [Thread-68093] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:50:55.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:50:55.536 [DEBUG] [Thread-68096] [transport.py] [_log()] starting thread (client mode): 0xf570d300
2025-12-12T10:50:55.536 [DEBUG] [Thread-68096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:50:55.551 [DEBUG] [Thread-68096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:50:55.551 [INFO] [Thread-68096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:50:55.558 [DEBUG] [Thread-68096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] client lang: <none>
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] server lang: <none>
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] kex follows: False
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] Compression: none
2025-12-12T10:50:55.559 [DEBUG] [Thread-68096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:50:55.616 [DEBUG] [Thread-68096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:50:55.617 [DEBUG] [Thread-68096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:50:55.617 [DEBUG] [Thread-68096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:50:55.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:50:55.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:50:55.676 [DEBUG] [Thread-68096] [transport.py] [_log()] userauth is OK
2025-12-12T10:50:55.677 [DEBUG] [Thread-68096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:50:55.677 [DEBUG] [Thread-68096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:50:55.677 [DEBUG] [Thread-68096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:50:55.678 [DEBUG] [Thread-68096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:50:55.697 [INFO] [Thread-68096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:50:55.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:50:55.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:50:56.555 [DEBUG] [Thread-68096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:50:56.555 [DEBUG] [Thread-68096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:50:56.603 [DEBUG] [Thread-68096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:50:56.603 [DEBUG] [Thread-68096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:50:56.612 [DEBUG] [Thread-68096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:50:56.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:50:56.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:50:56.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:50:56.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:50:56.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:50:56.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:50:56.649 [DEBUG] [Thread-68096] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:50:58.645 [DEBUG] [Thread-68098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:07.667 [DEBUG] [Thread-68099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:08.674 [DEBUG] [Thread-68100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:16.697 [DEBUG] [Thread-68101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:21.794 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:21.795 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:23.716 [DEBUG] [Thread-68102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:25.729 [DEBUG] [Thread-68103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:26.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:51:26.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:51:26.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:51:27.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 51, 10), 14.1, 39.48, 0.0, 54.4, 17.67, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:51:27.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:51:10
2025-12-12T10:51:27.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:51:27.635 [DEBUG] [Thread-68104] [transport.py] [_log()] starting thread (client mode): 0xf57b41c0
2025-12-12T10:51:27.635 [DEBUG] [Thread-68104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:51:27.655 [DEBUG] [Thread-68104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:51:27.655 [INFO] [Thread-68104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:51:27.658 [DEBUG] [Thread-68104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] client lang: <none>
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] server lang: <none>
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] kex follows: False
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] Compression: none
2025-12-12T10:51:27.659 [DEBUG] [Thread-68104] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:51:27.676 [DEBUG] [Thread-68104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:51:27.676 [DEBUG] [Thread-68104] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:51:27.677 [DEBUG] [Thread-68104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:51:27.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:51:27.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:51:27.679 [DEBUG] [Thread-68104] [transport.py] [_log()] userauth is OK
2025-12-12T10:51:27.679 [DEBUG] [Thread-68104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:51:27.679 [DEBUG] [Thread-68104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:51:27.679 [DEBUG] [Thread-68104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:51:27.679 [DEBUG] [Thread-68104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:51:27.701 [INFO] [Thread-68104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:51:27.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:51:28.295 [DEBUG] [Thread-68104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:51:28.295 [DEBUG] [Thread-68104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:51:28.295 [DEBUG] [Thread-68104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:51:28.336 [DEBUG] [Thread-68104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:51:28.336 [DEBUG] [Thread-68104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:51:28.339 [DEBUG] [Thread-68104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:51:28.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:51:28.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:51:28.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:51:28.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:51:28.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:51:28.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:51:28.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:51:28.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:51:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:51:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.368847 -999.00  +16.70  28.12     46   +5.00 1 2 1 1 1   888    0 12.32 7.01 ----- 22.6 28.1 1.9 38.7 21.9 -20.4 21.1 -19.0 20.6 -16.3 20.9 -19.5
2025-12-12T10:51:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:51:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:51:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.368847
2025-12-12T10:51:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:51:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:51:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:51:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:51:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:51:28.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:51:10', tmtdew=14.1, humidity=39.48, cloud=0.0, wind=54.4, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:51:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:51:28.362 [DEBUG] [Thread-68104] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:51:28.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:51:28.453 [DEBUG] [Thread-68107] [transport.py] [_log()] starting thread (client mode): 0xf57b7d00
2025-12-12T10:51:28.453 [DEBUG] [Thread-68107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:51:28.467 [DEBUG] [Thread-68107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:51:28.468 [INFO] [Thread-68107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:51:28.475 [DEBUG] [Thread-68107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:51:28.475 [DEBUG] [Thread-68107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:51:28.475 [DEBUG] [Thread-68107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:51:28.475 [DEBUG] [Thread-68107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] client lang: <none>
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] server lang: <none>
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] kex follows: False
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:51:28.476 [DEBUG] [Thread-68107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:51:28.477 [DEBUG] [Thread-68107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:51:28.477 [DEBUG] [Thread-68107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:51:28.477 [DEBUG] [Thread-68107] [transport.py] [_log()] Compression: none
2025-12-12T10:51:28.477 [DEBUG] [Thread-68107] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:51:28.533 [DEBUG] [Thread-68107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:51:28.533 [DEBUG] [Thread-68107] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:51:28.534 [DEBUG] [Thread-68107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:51:28.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:51:28.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:51:28.589 [DEBUG] [Thread-68107] [transport.py] [_log()] userauth is OK
2025-12-12T10:51:28.589 [DEBUG] [Thread-68107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:51:28.590 [DEBUG] [Thread-68107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:51:28.590 [DEBUG] [Thread-68107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:51:28.590 [DEBUG] [Thread-68107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:51:28.609 [INFO] [Thread-68107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:51:28.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:51:28.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:51:29.543 [DEBUG] [Thread-68107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:51:29.543 [DEBUG] [Thread-68107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:51:29.591 [DEBUG] [Thread-68107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:51:29.591 [DEBUG] [Thread-68107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:51:29.601 [DEBUG] [Thread-68107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:51:29.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:51:29.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:51:29.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:51:29.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:51:29.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:51:29.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:51:29.636 [DEBUG] [Thread-68107] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:51:34.751 [DEBUG] [Thread-68109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:36.866 [DEBUG] [Thread-68110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:38.765 [DEBUG] [Thread-68111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:43.806 [DEBUG] [Thread-68112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:52.824 [DEBUG] [Thread-68113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:53.828 [DEBUG] [Thread-68114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:51:59.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:51:59.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:51:59.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:52:00.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 51, 42), 14.27, 38.38, 0.0, 35.27, 17.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:52:00.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:51:42
2025-12-12T10:52:00.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:52:00.621 [DEBUG] [Thread-68115] [transport.py] [_log()] starting thread (client mode): 0xf570c100
2025-12-12T10:52:00.621 [DEBUG] [Thread-68115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:52:00.640 [DEBUG] [Thread-68115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:52:00.640 [INFO] [Thread-68115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:52:00.643 [DEBUG] [Thread-68115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] client lang: <none>
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] server lang: <none>
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] kex follows: False
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] Compression: none
2025-12-12T10:52:00.644 [DEBUG] [Thread-68115] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:52:00.652 [DEBUG] [Thread-68115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:52:00.653 [DEBUG] [Thread-68115] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:52:00.653 [DEBUG] [Thread-68115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:52:00.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:52:00.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:52:00.655 [DEBUG] [Thread-68115] [transport.py] [_log()] userauth is OK
2025-12-12T10:52:00.655 [DEBUG] [Thread-68115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:52:00.655 [DEBUG] [Thread-68115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:52:00.655 [DEBUG] [Thread-68115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:52:00.655 [DEBUG] [Thread-68115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:52:00.679 [INFO] [Thread-68115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:52:00.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:52:01.288 [DEBUG] [Thread-68115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:52:01.289 [DEBUG] [Thread-68115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:52:01.289 [DEBUG] [Thread-68115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:52:01.330 [DEBUG] [Thread-68115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:52:01.330 [DEBUG] [Thread-68115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:52:01.332 [DEBUG] [Thread-68115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:52:01.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:52:01.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:52:01.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:52:01.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:52:01.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:52:01.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:52:01.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.369194 -999.00  +17.10  34.34     45   +5.20 1 2 2 1 1   888    0 12.48 4.92 ----- 34.9 34.3 357.6 53.9 21.7 -21.4 21.0 -21.4 20.4 -19.0 20.7 -21.1
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.369194
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:52:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:51:42', tmtdew=14.27, humidity=38.38, cloud=0.0, wind=35.27, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:51:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:52:01.350 [DEBUG] [Thread-68115] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:52:01.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:52:01.436 [DEBUG] [Thread-68118] [transport.py] [_log()] starting thread (client mode): 0xf570fc40
2025-12-12T10:52:01.436 [DEBUG] [Thread-68118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:52:01.451 [DEBUG] [Thread-68118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:52:01.451 [INFO] [Thread-68118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:52:01.459 [DEBUG] [Thread-68118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:52:01.459 [DEBUG] [Thread-68118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:52:01.459 [DEBUG] [Thread-68118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:52:01.459 [DEBUG] [Thread-68118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] client lang: <none>
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] server lang: <none>
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] kex follows: False
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] Compression: none
2025-12-12T10:52:01.460 [DEBUG] [Thread-68118] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:52:01.517 [DEBUG] [Thread-68118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:52:01.518 [DEBUG] [Thread-68118] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:52:01.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:52:01.519 [DEBUG] [Thread-68118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:52:01.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:52:01.573 [DEBUG] [Thread-68118] [transport.py] [_log()] userauth is OK
2025-12-12T10:52:01.573 [DEBUG] [Thread-68118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:52:01.573 [DEBUG] [Thread-68118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:52:01.573 [DEBUG] [Thread-68118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:52:01.573 [DEBUG] [Thread-68118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:52:01.593 [INFO] [Thread-68118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:52:01.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:52:01.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:52:01.846 [DEBUG] [Thread-68120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:02.470 [DEBUG] [Thread-68118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:52:02.471 [DEBUG] [Thread-68118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:52:02.522 [DEBUG] [Thread-68118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:52:02.522 [DEBUG] [Thread-68118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:52:02.534 [DEBUG] [Thread-68118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:52:02.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:52:02.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:52:02.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:52:02.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:52:02.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:52:02.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:52:02.582 [DEBUG] [Thread-68118] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:52:08.865 [DEBUG] [Thread-68121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:10.896 [DEBUG] [Thread-68122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:19.918 [DEBUG] [Thread-68123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:21.935 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:21.936 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:23.932 [DEBUG] [Thread-68124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:28.950 [DEBUG] [Thread-68125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:32.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:52:32.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:52:32.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:52:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 52, 14), 14.13, 38.74, 0.0, 31.25, 17.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:52:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:52:14
2025-12-12T10:52:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:52:33.604 [DEBUG] [Thread-68126] [transport.py] [_log()] starting thread (client mode): 0xf570f8b0
2025-12-12T10:52:33.604 [DEBUG] [Thread-68126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:52:33.623 [DEBUG] [Thread-68126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:52:33.623 [INFO] [Thread-68126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:52:33.626 [DEBUG] [Thread-68126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:52:33.626 [DEBUG] [Thread-68126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:52:33.626 [DEBUG] [Thread-68126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] client lang: <none>
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] server lang: <none>
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] kex follows: False
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] Compression: none
2025-12-12T10:52:33.627 [DEBUG] [Thread-68126] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:52:33.644 [DEBUG] [Thread-68126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:52:33.644 [DEBUG] [Thread-68126] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:52:33.644 [DEBUG] [Thread-68126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:52:33.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:52:33.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:52:33.645 [DEBUG] [Thread-68126] [transport.py] [_log()] userauth is OK
2025-12-12T10:52:33.645 [DEBUG] [Thread-68126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:52:33.645 [DEBUG] [Thread-68126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:52:33.645 [DEBUG] [Thread-68126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:52:33.645 [DEBUG] [Thread-68126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:52:33.657 [INFO] [Thread-68126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:52:33.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:52:34.341 [DEBUG] [Thread-68126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:52:34.341 [DEBUG] [Thread-68126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:52:34.341 [DEBUG] [Thread-68126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:52:34.383 [DEBUG] [Thread-68126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:52:34.383 [DEBUG] [Thread-68126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:52:34.385 [DEBUG] [Thread-68126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:52:34.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:52:34.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:52:34.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:52:34.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:52:34.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:52:34.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:52:34.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.369541 -999.00  +17.60  23.85     44   +5.50 1 2 1 1 1   888    0 12.33 3.76 ----- 22.1 23.9 331.0 52.0 22.1 -18.1 21.3 -17.7 20.7 -15.4 21.1 -16.4
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.369541
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:52:34.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:52:14', tmtdew=14.13, humidity=38.74, cloud=0.0, wind=31.25, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:52:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:52:34.405 [DEBUG] [Thread-68126] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:52:34.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:52:34.491 [DEBUG] [Thread-68129] [transport.py] [_log()] starting thread (client mode): 0xf570f7f0
2025-12-12T10:52:34.491 [DEBUG] [Thread-68129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:52:34.506 [DEBUG] [Thread-68129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:52:34.506 [INFO] [Thread-68129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] client lang: <none>
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] server lang: <none>
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] kex follows: False
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] Compression: none
2025-12-12T10:52:34.514 [DEBUG] [Thread-68129] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:52:34.574 [DEBUG] [Thread-68129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:52:34.574 [DEBUG] [Thread-68129] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:52:34.574 [DEBUG] [Thread-68129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:52:34.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:52:34.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:52:34.632 [DEBUG] [Thread-68129] [transport.py] [_log()] userauth is OK
2025-12-12T10:52:34.632 [DEBUG] [Thread-68129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:52:34.632 [DEBUG] [Thread-68129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:52:34.632 [DEBUG] [Thread-68129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:52:34.633 [DEBUG] [Thread-68129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:52:34.647 [INFO] [Thread-68129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:52:34.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:52:34.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:52:35.505 [DEBUG] [Thread-68129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:52:35.505 [DEBUG] [Thread-68129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:52:35.552 [DEBUG] [Thread-68129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:52:35.552 [DEBUG] [Thread-68129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:52:35.560 [DEBUG] [Thread-68129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:52:35.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:52: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')
2025-12-12T10:52:35.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:52:35.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:52:35.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:52:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:52:35.600 [DEBUG] [Thread-68129] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:52:36.917 [DEBUG] [Thread-68131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:37.970 [DEBUG] [Thread-68132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:38.976 [DEBUG] [Thread-68133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:47.017 [DEBUG] [Thread-68134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:54.040 [DEBUG] [Thread-68135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:52:56.053 [DEBUG] [Thread-68136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:05.077 [DEBUG] [Thread-68137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:53:05.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:53:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:53:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 52, 46), 13.92, 39.52, 0.0, 44.55, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:53:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:52:46
2025-12-12T10:53:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:53:06.584 [DEBUG] [Thread-68138] [transport.py] [_log()] starting thread (client mode): 0xf570f760
2025-12-12T10:53:06.584 [DEBUG] [Thread-68138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:53:06.606 [DEBUG] [Thread-68138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:53:06.606 [INFO] [Thread-68138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] client lang: <none>
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] server lang: <none>
2025-12-12T10:53:06.609 [DEBUG] [Thread-68138] [transport.py] [_log()] kex follows: False
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] Compression: none
2025-12-12T10:53:06.610 [DEBUG] [Thread-68138] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:53:06.626 [DEBUG] [Thread-68138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:53:06.626 [DEBUG] [Thread-68138] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:53:06.627 [DEBUG] [Thread-68138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:53:06.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:53:06.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:53:06.629 [DEBUG] [Thread-68138] [transport.py] [_log()] userauth is OK
2025-12-12T10:53:06.629 [DEBUG] [Thread-68138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:53:06.629 [DEBUG] [Thread-68138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:53:06.629 [DEBUG] [Thread-68138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:53:06.629 [DEBUG] [Thread-68138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:53:06.647 [INFO] [Thread-68138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:53:06.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:53:07.234 [DEBUG] [Thread-68138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:53:07.235 [DEBUG] [Thread-68138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:53:07.235 [DEBUG] [Thread-68138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:53:07.275 [DEBUG] [Thread-68138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:53:07.276 [DEBUG] [Thread-68138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:53:07.279 [DEBUG] [Thread-68138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:53:07.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:53:07.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:53:07.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:53:07.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:53:07.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:53:07.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:53:07.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:53:07.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:53:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:53:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.369888 -999.00  +18.00  31.80     43   +5.20 1 2 2 1 1   888    0 12.48 3.81 ----- 36.7 31.8 14.9 42.5 22.1 -21.1 21.4 -20.8 20.8 -17.6 21.1 -19.3
2025-12-12T10:53:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:53:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:53:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.369888
2025-12-12T10:53:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:53:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:53:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:53:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:53:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:53:07.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:52:46', tmtdew=13.92, humidity=39.52, cloud=0.0, wind=44.55, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:52:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:53:07.306 [DEBUG] [Thread-68138] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:53:07.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:53:07.402 [DEBUG] [Thread-68141] [transport.py] [_log()] starting thread (client mode): 0xf57b6200
2025-12-12T10:53:07.402 [DEBUG] [Thread-68141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:53:07.417 [DEBUG] [Thread-68141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:53:07.417 [INFO] [Thread-68141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] client lang: <none>
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] server lang: <none>
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] kex follows: False
2025-12-12T10:53:07.425 [DEBUG] [Thread-68141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:53:07.426 [DEBUG] [Thread-68141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:53:07.426 [DEBUG] [Thread-68141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:53:07.426 [DEBUG] [Thread-68141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:53:07.426 [DEBUG] [Thread-68141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:53:07.426 [DEBUG] [Thread-68141] [transport.py] [_log()] Compression: none
2025-12-12T10:53:07.426 [DEBUG] [Thread-68141] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:53:07.486 [DEBUG] [Thread-68141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:53:07.487 [DEBUG] [Thread-68141] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:53:07.487 [DEBUG] [Thread-68141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:53:07.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:53:07.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:53:07.545 [DEBUG] [Thread-68141] [transport.py] [_log()] userauth is OK
2025-12-12T10:53:07.545 [DEBUG] [Thread-68141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:53:07.546 [DEBUG] [Thread-68141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:53:07.546 [DEBUG] [Thread-68141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:53:07.546 [DEBUG] [Thread-68141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:53:07.563 [INFO] [Thread-68141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:53:07.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:53:07.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:53:08.438 [DEBUG] [Thread-68141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:53:08.438 [DEBUG] [Thread-68141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:53:08.486 [DEBUG] [Thread-68141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:53:08.486 [DEBUG] [Thread-68141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:53:08.496 [DEBUG] [Thread-68141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:53:08.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:53:08.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:53:08.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:53:08.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:53:08.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:53:08.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:53:08.532 [DEBUG] [Thread-68141] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:53:09.087 [DEBUG] [Thread-68143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:14.117 [DEBUG] [Thread-68144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:22.076 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:22.077 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:23.137 [DEBUG] [Thread-68145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:24.144 [DEBUG] [Thread-68146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:32.170 [DEBUG] [Thread-68147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:36.968 [DEBUG] [Thread-68148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:38.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:53:38.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:53:38.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:53:39.190 [DEBUG] [Thread-68149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 53, 18), 14.11, 39.06, 0.0, 46.81, 17.59, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:53:39.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:53:18
2025-12-12T10:53:39.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:53:39.487 [DEBUG] [Thread-68150] [transport.py] [_log()] starting thread (client mode): 0xf57b5030
2025-12-12T10:53:39.487 [DEBUG] [Thread-68150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:53:39.507 [DEBUG] [Thread-68150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:53:39.507 [INFO] [Thread-68150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:53:39.510 [DEBUG] [Thread-68150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:53:39.510 [DEBUG] [Thread-68150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:53:39.510 [DEBUG] [Thread-68150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] client lang: <none>
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] server lang: <none>
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] kex follows: False
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] Compression: none
2025-12-12T10:53:39.511 [DEBUG] [Thread-68150] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:53:39.529 [DEBUG] [Thread-68150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:53:39.529 [DEBUG] [Thread-68150] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:53:39.530 [DEBUG] [Thread-68150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:53:39.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:53:39.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:53:39.572 [DEBUG] [Thread-68150] [transport.py] [_log()] userauth is OK
2025-12-12T10:53:39.572 [DEBUG] [Thread-68150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:53:39.573 [DEBUG] [Thread-68150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:53:39.573 [DEBUG] [Thread-68150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:53:39.573 [DEBUG] [Thread-68150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:53:39.593 [INFO] [Thread-68150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:53:39.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:53:40.239 [DEBUG] [Thread-68150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:53:40.240 [DEBUG] [Thread-68150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:53:40.240 [DEBUG] [Thread-68150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:53:40.280 [DEBUG] [Thread-68150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:53:40.280 [DEBUG] [Thread-68150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:53:40.283 [DEBUG] [Thread-68150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:53:40.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:53:40.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:53:40.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:53:40.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:53:40.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:53:40.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:53:40.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:53:40.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:53:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:53:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.370236 -999.00  +17.30  36.22     44   +5.00 1 2 2 1 1   888    0 12.06 4.68 ----- 41.0 36.2 353.9 46.0 22.1 -18.9 21.3 -19.0 20.7 -17.3 21.1 -16.9
2025-12-12T10:53:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:53:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:53:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.370236
2025-12-12T10:53:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:53:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:53:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:53:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:53:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:53:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:53:18', tmtdew=14.11, humidity=39.06, cloud=0.0, wind=46.81, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:53:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:53:40.313 [DEBUG] [Thread-68150] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:53:40.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:53:40.407 [DEBUG] [Thread-68153] [transport.py] [_log()] starting thread (client mode): 0xf570d060
2025-12-12T10:53:40.407 [DEBUG] [Thread-68153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:53:40.422 [DEBUG] [Thread-68153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:53:40.422 [INFO] [Thread-68153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:40.429 [DEBUG] [Thread-68153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] client lang: <none>
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] server lang: <none>
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] kex follows: False
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] Compression: none
2025-12-12T10:53:40.430 [DEBUG] [Thread-68153] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:53:40.489 [DEBUG] [Thread-68153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:53:40.490 [DEBUG] [Thread-68153] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:53:40.491 [DEBUG] [Thread-68153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:53:40.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:53:40.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:53:40.545 [DEBUG] [Thread-68153] [transport.py] [_log()] userauth is OK
2025-12-12T10:53:40.545 [DEBUG] [Thread-68153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:53:40.545 [DEBUG] [Thread-68153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:53:40.545 [DEBUG] [Thread-68153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:53:40.545 [DEBUG] [Thread-68153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:53:40.572 [INFO] [Thread-68153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:53:40.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:53:40.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:53:41.200 [DEBUG] [Thread-68155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:41.446 [DEBUG] [Thread-68153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:53:41.446 [DEBUG] [Thread-68153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:53:41.494 [DEBUG] [Thread-68153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:53:41.494 [DEBUG] [Thread-68153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:53:41.503 [DEBUG] [Thread-68153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:53:41.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:53:41.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')
2025-12-12T10:53:41.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:53:41.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:53:41.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:53:41.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:53:41.540 [DEBUG] [Thread-68153] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:53:50.218 [DEBUG] [Thread-68156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:54.233 [DEBUG] [Thread-68157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:53:59.276 [DEBUG] [Thread-68158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:08.298 [DEBUG] [Thread-68159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:09.306 [DEBUG] [Thread-68160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:11.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:54:11.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:54:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:54:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 53, 50), 14.6, 38.0, 0.0, 42.22, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:54:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:53:50
2025-12-12T10:54:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:54:12.504 [DEBUG] [Thread-68161] [transport.py] [_log()] starting thread (client mode): 0xf57b7df0
2025-12-12T10:54:12.504 [DEBUG] [Thread-68161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:54:12.514 [DEBUG] [Thread-68161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:54:12.514 [INFO] [Thread-68161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] client lang: <none>
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] server lang: <none>
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] kex follows: False
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] Compression: none
2025-12-12T10:54:12.517 [DEBUG] [Thread-68161] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:54:12.525 [DEBUG] [Thread-68161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:54:12.526 [DEBUG] [Thread-68161] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:54:12.526 [DEBUG] [Thread-68161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:54:12.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:54:12.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:54:12.527 [DEBUG] [Thread-68161] [transport.py] [_log()] userauth is OK
2025-12-12T10:54:12.527 [DEBUG] [Thread-68161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:54:12.527 [DEBUG] [Thread-68161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:54:12.527 [DEBUG] [Thread-68161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:54:12.527 [DEBUG] [Thread-68161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:54:12.545 [INFO] [Thread-68161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:54:12.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:54:13.196 [DEBUG] [Thread-68161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:54:13.196 [DEBUG] [Thread-68161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:54:13.197 [DEBUG] [Thread-68161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:54:13.237 [DEBUG] [Thread-68161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:54:13.237 [DEBUG] [Thread-68161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:54:13.241 [DEBUG] [Thread-68161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:54:13.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:54:13.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:54:13.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:54:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:54:13.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:54:13.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:54:13.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:54:13.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:54:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:54:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.370930 -999.00  +17.70  34.55     43   +5.30 1 1 2 1 1   888    0 12.45 5.58 ----- 39.2 34.5 19.0 47.1 21.8 -24.7 21.3 -26.5 20.6 -21.8 20.8 -22.3
2025-12-12T10:54:13.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:54:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:54:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.370930
2025-12-12T10:54:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:54:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:54:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:54:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:54:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T10:54:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:53:50', tmtdew=14.6, humidity=38.0, cloud=0.0, wind=42.22, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:54:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:54:13.264 [DEBUG] [Thread-68161] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:54:13.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:54:13.359 [DEBUG] [Thread-68164] [transport.py] [_log()] starting thread (client mode): 0xf57b6ad0
2025-12-12T10:54:13.359 [DEBUG] [Thread-68164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:54:13.374 [DEBUG] [Thread-68164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:54:13.374 [INFO] [Thread-68164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:54:13.381 [DEBUG] [Thread-68164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:54:13.381 [DEBUG] [Thread-68164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:54:13.381 [DEBUG] [Thread-68164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] client lang: <none>
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] server lang: <none>
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] kex follows: False
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] Compression: none
2025-12-12T10:54:13.382 [DEBUG] [Thread-68164] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:54:13.446 [DEBUG] [Thread-68164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:54:13.446 [DEBUG] [Thread-68164] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:54:13.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:54:13.447 [DEBUG] [Thread-68164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:54:13.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:54:13.501 [DEBUG] [Thread-68164] [transport.py] [_log()] userauth is OK
2025-12-12T10:54:13.501 [DEBUG] [Thread-68164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:54:13.502 [DEBUG] [Thread-68164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:54:13.502 [DEBUG] [Thread-68164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:54:13.502 [DEBUG] [Thread-68164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:54:13.521 [INFO] [Thread-68164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:54:13.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:54:13.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:54:14.390 [DEBUG] [Thread-68164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:54:14.391 [DEBUG] [Thread-68164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:54:14.439 [DEBUG] [Thread-68164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:54:14.439 [DEBUG] [Thread-68164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:54:14.449 [DEBUG] [Thread-68164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:54:14.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:54:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:54:14.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:54:14.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:54:14.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:54:14.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:54:14.485 [DEBUG] [Thread-68164] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:54:17.329 [DEBUG] [Thread-68166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:22.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:22.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:24.345 [DEBUG] [Thread-68167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:26.359 [DEBUG] [Thread-68168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:35.379 [DEBUG] [Thread-68169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:37.027 [DEBUG] [Thread-68170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:39.393 [DEBUG] [Thread-68171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:44.410 [DEBUG] [Thread-68172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:54:44.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:54:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:54:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 54, 22), 14.46, 38.26, 0.0, 36.42, 17.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:54:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:54:22
2025-12-12T10:54:45.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:54:45.462 [DEBUG] [Thread-68173] [transport.py] [_log()] starting thread (client mode): 0xf570eef0
2025-12-12T10:54:45.462 [DEBUG] [Thread-68173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:54:45.482 [DEBUG] [Thread-68173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:54:45.482 [INFO] [Thread-68173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:54:45.485 [DEBUG] [Thread-68173] [transport.py] [_log()] client lang: <none>
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] server lang: <none>
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] kex follows: False
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] Compression: none
2025-12-12T10:54:45.486 [DEBUG] [Thread-68173] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:54:45.498 [DEBUG] [Thread-68173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:54:45.499 [DEBUG] [Thread-68173] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:54:45.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:54:45.499 [DEBUG] [Thread-68173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:54:45.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:54:45.501 [DEBUG] [Thread-68173] [transport.py] [_log()] userauth is OK
2025-12-12T10:54:45.502 [DEBUG] [Thread-68173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:54:45.502 [DEBUG] [Thread-68173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:54:45.502 [DEBUG] [Thread-68173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:54:45.502 [DEBUG] [Thread-68173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:54:45.524 [INFO] [Thread-68173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:54:45.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:54:46.086 [DEBUG] [Thread-68173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:54:46.086 [DEBUG] [Thread-68173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:54:46.086 [DEBUG] [Thread-68173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:54:46.127 [DEBUG] [Thread-68173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:54:46.127 [DEBUG] [Thread-68173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:54:46.129 [DEBUG] [Thread-68173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:54:46.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:54:46.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:54:46.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:54:46.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:54:46.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:54:46.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:54:46.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.371277 -999.00  +17.10  30.29     44   +4.90 1 2 2 1 1   888    0 12.36 5.05 ----- 31.8 30.3 343.0 48.0 21.7 -22.7 21.1 -23.2 20.6 -19.9 20.6 -21.2
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.371277
2025-12-12T10:54:46.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:54:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:54:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:54:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:54:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:54:46.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:54:22', tmtdew=14.46, humidity=38.26, cloud=0.0, wind=36.42, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:54:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:54:46.151 [DEBUG] [Thread-68173] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:54:46.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:54:46.236 [DEBUG] [Thread-68176] [transport.py] [_log()] starting thread (client mode): 0xf570d750
2025-12-12T10:54:46.236 [DEBUG] [Thread-68176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:54:46.252 [DEBUG] [Thread-68176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:54:46.253 [INFO] [Thread-68176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] client lang: <none>
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] server lang: <none>
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] kex follows: False
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:54:46.260 [DEBUG] [Thread-68176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:54:46.261 [DEBUG] [Thread-68176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:54:46.261 [DEBUG] [Thread-68176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:54:46.261 [DEBUG] [Thread-68176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:54:46.261 [DEBUG] [Thread-68176] [transport.py] [_log()] Compression: none
2025-12-12T10:54:46.261 [DEBUG] [Thread-68176] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:54:46.320 [DEBUG] [Thread-68176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:54:46.321 [DEBUG] [Thread-68176] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:54:46.321 [DEBUG] [Thread-68176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:54:46.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:54:46.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:54:46.377 [DEBUG] [Thread-68176] [transport.py] [_log()] userauth is OK
2025-12-12T10:54:46.377 [DEBUG] [Thread-68176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:54:46.377 [DEBUG] [Thread-68176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:54:46.377 [DEBUG] [Thread-68176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:54:46.377 [DEBUG] [Thread-68176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:54:46.395 [INFO] [Thread-68176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:54:46.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:54:46.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:54:47.294 [DEBUG] [Thread-68176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:54:47.294 [DEBUG] [Thread-68176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:54:47.345 [DEBUG] [Thread-68176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:54:47.345 [DEBUG] [Thread-68176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:54:47.357 [DEBUG] [Thread-68176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:54:47.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:54:47.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:54:47.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:54:47.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:54:47.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:54:47.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:54:47.403 [DEBUG] [Thread-68176] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:54:53.431 [DEBUG] [Thread-68178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:54:54.439 [DEBUG] [Thread-68179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:02.476 [DEBUG] [Thread-68180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:09.488 [DEBUG] [Thread-68181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:11.497 [DEBUG] [Thread-68182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:17.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:55:17.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:55:17.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:55:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 54, 54), 14.63, 37.56, 0.0, 47.71, 17.95, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:55:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:54:54
2025-12-12T10:55:18.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:55:18.370 [DEBUG] [Thread-68183] [transport.py] [_log()] starting thread (client mode): 0xf2d0ee90
2025-12-12T10:55:18.370 [DEBUG] [Thread-68183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:55:18.384 [DEBUG] [Thread-68183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:55:18.385 [INFO] [Thread-68183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:55:18.387 [DEBUG] [Thread-68183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] client lang: <none>
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] server lang: <none>
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] kex follows: False
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] Compression: none
2025-12-12T10:55:18.388 [DEBUG] [Thread-68183] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:55:18.408 [DEBUG] [Thread-68183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:55:18.408 [DEBUG] [Thread-68183] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:55:18.408 [DEBUG] [Thread-68183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:55:18.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:55:18.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:55:18.410 [DEBUG] [Thread-68183] [transport.py] [_log()] userauth is OK
2025-12-12T10:55:18.410 [DEBUG] [Thread-68183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:55:18.411 [DEBUG] [Thread-68183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:55:18.411 [DEBUG] [Thread-68183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:55:18.411 [DEBUG] [Thread-68183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:55:18.435 [INFO] [Thread-68183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:55:18.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:55:19.005 [DEBUG] [Thread-68183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:55:19.005 [DEBUG] [Thread-68183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:55:19.005 [DEBUG] [Thread-68183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:55:19.046 [DEBUG] [Thread-68183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:55:19.046 [DEBUG] [Thread-68183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:55:19.049 [DEBUG] [Thread-68183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:55:19.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:55:19.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:55:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:55:19.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:55:19.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:55:19.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:55:19.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:55:19.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:55:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:55:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.371566 -999.00  +17.00  37.32     45   +5.10 1 2 2 1 1   888    0 12.28 1.41 ----- 32.9 37.3 4.0 50.6 21.7 -21.6 21.1 -21.5 20.6 -18.3 20.7 -21.3
2025-12-12T10:55:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:55:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:55:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.371566
2025-12-12T10:55:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:55:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:55:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:55:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:55:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:55:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:54:54', tmtdew=14.63, humidity=37.56, cloud=0.0, wind=47.71, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:55:03.302', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:55:19.070 [DEBUG] [Thread-68183] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:55:19.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:55:19.164 [DEBUG] [Thread-68186] [transport.py] [_log()] starting thread (client mode): 0xf2d0f7f0
2025-12-12T10:55:19.164 [DEBUG] [Thread-68186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:55:19.180 [DEBUG] [Thread-68186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:55:19.180 [INFO] [Thread-68186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] client lang: <none>
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] server lang: <none>
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] kex follows: False
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] Compression: none
2025-12-12T10:55:19.188 [DEBUG] [Thread-68186] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:55:19.245 [DEBUG] [Thread-68186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:55:19.246 [DEBUG] [Thread-68186] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:55:19.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:55:19.247 [DEBUG] [Thread-68186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:55:19.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:55:19.301 [DEBUG] [Thread-68186] [transport.py] [_log()] userauth is OK
2025-12-12T10:55:19.301 [DEBUG] [Thread-68186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:55:19.301 [DEBUG] [Thread-68186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:55:19.301 [DEBUG] [Thread-68186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:55:19.301 [DEBUG] [Thread-68186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:55:19.317 [INFO] [Thread-68186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:55:19.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:55:19.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:55:20.159 [DEBUG] [Thread-68186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:55:20.159 [DEBUG] [Thread-68186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:55:20.207 [DEBUG] [Thread-68186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:55:20.207 [DEBUG] [Thread-68186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:55:20.217 [DEBUG] [Thread-68186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:55:20.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:55:20.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:55:20.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:55:20.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:55:20.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:55:20.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:55:20.253 [DEBUG] [Thread-68186] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:55:20.520 [DEBUG] [Thread-68188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:22.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:22.359 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:24.533 [DEBUG] [Thread-68189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:29.574 [DEBUG] [Thread-68190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:37.083 [DEBUG] [Thread-68191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:38.597 [DEBUG] [Thread-68192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:39.606 [DEBUG] [Thread-68193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:47.625 [DEBUG] [Thread-68194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:50.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:55:50.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:55:50.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:55:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 55, 26), 14.75, 37.31, 0.0, 50.62, 18.1, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:55:50.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:55:26
2025-12-12T10:55:51.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:55:51.211 [DEBUG] [Thread-68195] [transport.py] [_log()] starting thread (client mode): 0xf2d0c8b0
2025-12-12T10:55:51.211 [DEBUG] [Thread-68195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:55:51.231 [DEBUG] [Thread-68195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:55:51.231 [INFO] [Thread-68195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] client lang: <none>
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] server lang: <none>
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] kex follows: False
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:55:51.234 [DEBUG] [Thread-68195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:55:51.235 [DEBUG] [Thread-68195] [transport.py] [_log()] Compression: none
2025-12-12T10:55:51.235 [DEBUG] [Thread-68195] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:55:51.255 [DEBUG] [Thread-68195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:55:51.255 [DEBUG] [Thread-68195] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:55:51.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:55:51.256 [DEBUG] [Thread-68195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:55:51.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:55:51.258 [DEBUG] [Thread-68195] [transport.py] [_log()] userauth is OK
2025-12-12T10:55:51.258 [DEBUG] [Thread-68195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:55:51.258 [DEBUG] [Thread-68195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:55:51.258 [DEBUG] [Thread-68195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:55:51.258 [DEBUG] [Thread-68195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:55:51.282 [INFO] [Thread-68195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:55:51.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:55:51.863 [DEBUG] [Thread-68195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:55:51.864 [DEBUG] [Thread-68195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:55:51.864 [DEBUG] [Thread-68195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:55:51.905 [DEBUG] [Thread-68195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:55:51.905 [DEBUG] [Thread-68195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:55:51.908 [DEBUG] [Thread-68195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:55:51.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:55:51.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:55:51.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:55:51.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:55:51.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:55:51.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:55:51.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:55:51.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:55:51.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:55:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.371972 -999.00  +16.90  30.38     45   +5.00 1 2 2 1 1   888    0 12.03 -3.92 ----- 23.3 30.4 347.0 44.1 21.8 -20.0 21.2 -22.0 20.6 -18.0 20.9 -17.4
2025-12-12T10:55:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:55:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:55:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.371972
2025-12-12T10:55:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:55:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:55:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:55:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:55:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:55:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:55:26', tmtdew=14.75, humidity=37.31, cloud=0.0, wind=50.62, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:55:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:55:51.934 [DEBUG] [Thread-68195] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:55:52.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:55:52.029 [DEBUG] [Thread-68198] [transport.py] [_log()] starting thread (client mode): 0xf2d0e7a0
2025-12-12T10:55:52.029 [DEBUG] [Thread-68198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:55:52.044 [DEBUG] [Thread-68198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:55:52.044 [INFO] [Thread-68198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:55:52.052 [DEBUG] [Thread-68198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:55:52.052 [DEBUG] [Thread-68198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:55:52.052 [DEBUG] [Thread-68198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] client lang: <none>
2025-12-12T10:55:52.053 [DEBUG] [Thread-68198] [transport.py] [_log()] server lang: <none>
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] kex follows: False
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] Compression: none
2025-12-12T10:55:52.054 [DEBUG] [Thread-68198] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:55:52.110 [DEBUG] [Thread-68198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:55:52.110 [DEBUG] [Thread-68198] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:55:52.111 [DEBUG] [Thread-68198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:55:52.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:55:52.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:55:52.165 [DEBUG] [Thread-68198] [transport.py] [_log()] userauth is OK
2025-12-12T10:55:52.166 [DEBUG] [Thread-68198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:55:52.166 [DEBUG] [Thread-68198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:55:52.166 [DEBUG] [Thread-68198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:55:52.166 [DEBUG] [Thread-68198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:55:52.191 [INFO] [Thread-68198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:55:52.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:55:52.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:55:53.059 [DEBUG] [Thread-68198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:55:53.059 [DEBUG] [Thread-68198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:55:53.106 [DEBUG] [Thread-68198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:55:53.106 [DEBUG] [Thread-68198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:55:53.115 [DEBUG] [Thread-68198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:55:53.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:55:53.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:55: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') -> 00000000
2025-12-12T10:55:53.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:55:53.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:55:53.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:55:53.149 [DEBUG] [Thread-68198] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:55:54.642 [DEBUG] [Thread-68200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:55:56.672 [DEBUG] [Thread-68201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:05.693 [DEBUG] [Thread-68202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:09.708 [DEBUG] [Thread-68203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:14.726 [DEBUG] [Thread-68204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:22.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:22.499 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:23.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:56:23.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:56:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:56:23.745 [DEBUG] [Thread-68205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:23.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 55, 58), 14.14, 38.83, 0.0, 50.52, 17.42, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:56:23.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:55:58
2025-12-12T10:56:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:56:24.141 [DEBUG] [Thread-68206] [transport.py] [_log()] starting thread (client mode): 0xf57b6200
2025-12-12T10:56:24.141 [DEBUG] [Thread-68206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:56:24.161 [DEBUG] [Thread-68206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:56:24.161 [INFO] [Thread-68206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:24.164 [DEBUG] [Thread-68206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] client lang: <none>
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] server lang: <none>
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] kex follows: False
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] Compression: none
2025-12-12T10:56:24.165 [DEBUG] [Thread-68206] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:56:24.180 [DEBUG] [Thread-68206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:56:24.180 [DEBUG] [Thread-68206] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:56:24.180 [DEBUG] [Thread-68206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:56:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:56:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:56:24.181 [DEBUG] [Thread-68206] [transport.py] [_log()] userauth is OK
2025-12-12T10:56:24.181 [DEBUG] [Thread-68206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:56:24.181 [DEBUG] [Thread-68206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:56:24.181 [DEBUG] [Thread-68206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:56:24.181 [DEBUG] [Thread-68206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:56:24.190 [INFO] [Thread-68206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:56:24.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:56:24.749 [DEBUG] [Thread-68208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:24.831 [DEBUG] [Thread-68206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:56:24.831 [DEBUG] [Thread-68206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:56:24.831 [DEBUG] [Thread-68206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:56:24.873 [DEBUG] [Thread-68206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:56:24.873 [DEBUG] [Thread-68206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:56:24.875 [DEBUG] [Thread-68206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:56:24.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:56:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:56:24.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:56:24.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:56:24.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:56:24.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:56:24.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.371972 -999.00  +16.90  30.38     45   +5.00 1 2 2 1 1   888    0 12.03 -3.92 ----- 23.3 30.4 347.0 44.1 21.8 -20.0 21.2 -22.0 20.6 -18.0 20.9 -17.4
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.371972
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:56:24.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:55:58', tmtdew=14.14, humidity=38.83, cloud=0.0, wind=50.52, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:55:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:56:24.894 [DEBUG] [Thread-68206] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:56:24.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:56:24.979 [DEBUG] [Thread-68210] [transport.py] [_log()] starting thread (client mode): 0xf2d0fca0
2025-12-12T10:56:24.979 [DEBUG] [Thread-68210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:56:24.994 [DEBUG] [Thread-68210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:56:24.995 [INFO] [Thread-68210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] client lang: <none>
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] server lang: <none>
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] kex follows: False
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:56:25.002 [DEBUG] [Thread-68210] [transport.py] [_log()] Compression: none
2025-12-12T10:56:25.003 [DEBUG] [Thread-68210] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:56:25.068 [DEBUG] [Thread-68210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:56:25.068 [DEBUG] [Thread-68210] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:56:25.068 [DEBUG] [Thread-68210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:56:25.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:56:25.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:56:25.125 [DEBUG] [Thread-68210] [transport.py] [_log()] userauth is OK
2025-12-12T10:56:25.125 [DEBUG] [Thread-68210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:56:25.125 [DEBUG] [Thread-68210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:56:25.125 [DEBUG] [Thread-68210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:56:25.125 [DEBUG] [Thread-68210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:56:25.139 [INFO] [Thread-68210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:56:25.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:56:25.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:56:26.009 [DEBUG] [Thread-68210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:56:26.009 [DEBUG] [Thread-68210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:56:26.056 [DEBUG] [Thread-68210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:56:26.056 [DEBUG] [Thread-68210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:56:26.065 [DEBUG] [Thread-68210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:56:26.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:56: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')
2025-12-12T10:56:26.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:56:26.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:56:26.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:56:26.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:56:26.096 [DEBUG] [Thread-68210] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:56:32.766 [DEBUG] [Thread-68212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:37.133 [DEBUG] [Thread-68213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:39.783 [DEBUG] [Thread-68214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:41.815 [DEBUG] [Thread-68215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:50.839 [DEBUG] [Thread-68216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:54.851 [DEBUG] [Thread-68217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:56:56.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:56:56.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:56:56.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:56:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 56, 30), 14.27, 38.51, 0.0, 52.16, 17.55, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:56:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:56:30
2025-12-12T10:56:56.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:56:57.086 [DEBUG] [Thread-68218] [transport.py] [_log()] starting thread (client mode): 0xf57c8b50
2025-12-12T10:56:57.086 [DEBUG] [Thread-68218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:56:57.106 [DEBUG] [Thread-68218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:56:57.106 [INFO] [Thread-68218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:56:57.109 [DEBUG] [Thread-68218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:56:57.109 [DEBUG] [Thread-68218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:56:57.109 [DEBUG] [Thread-68218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] client lang: <none>
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] server lang: <none>
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] kex follows: False
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] Compression: none
2025-12-12T10:56:57.110 [DEBUG] [Thread-68218] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:56:57.128 [DEBUG] [Thread-68218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:56:57.129 [DEBUG] [Thread-68218] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:56:57.129 [DEBUG] [Thread-68218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:56:57.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:56:57.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:56:57.131 [DEBUG] [Thread-68218] [transport.py] [_log()] userauth is OK
2025-12-12T10:56:57.131 [DEBUG] [Thread-68218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:56:57.131 [DEBUG] [Thread-68218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:56:57.131 [DEBUG] [Thread-68218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:56:57.131 [DEBUG] [Thread-68218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:56:57.148 [INFO] [Thread-68218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:56:57.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:56:57.787 [DEBUG] [Thread-68218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:56:57.788 [DEBUG] [Thread-68218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:56:57.788 [DEBUG] [Thread-68218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:56:57.829 [DEBUG] [Thread-68218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:56:57.829 [DEBUG] [Thread-68218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:56:57.832 [DEBUG] [Thread-68218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:56:57.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:56:57.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:56:57.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:56:57.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:56:57.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:56:57.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:56:57.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:56:57.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:56:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:56:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.372319 -999.00  +17.20  35.74     44   +5.10 1 2 2 1 1   888    0 11.97 -8.91 ----- 37.9 35.7 352.6 48.8 22.1 -20.5 21.4 -20.4 20.9 -17.4 21.2 -17.4
2025-12-12T10:56:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:56:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:56:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.372319
2025-12-12T10:56:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:56:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:56:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:56:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:56:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:56:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:56:30', tmtdew=14.27, humidity=38.51, cloud=0.0, wind=52.16, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:56:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:56:57.855 [DEBUG] [Thread-68218] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:56:57.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:56:57.953 [DEBUG] [Thread-68221] [transport.py] [_log()] starting thread (client mode): 0xf57c8ac0
2025-12-12T10:56:57.953 [DEBUG] [Thread-68221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:56:57.968 [DEBUG] [Thread-68221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:56:57.968 [INFO] [Thread-68221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:56:57.975 [DEBUG] [Thread-68221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:56:57.975 [DEBUG] [Thread-68221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:56:57.975 [DEBUG] [Thread-68221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] client lang: <none>
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] server lang: <none>
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] kex follows: False
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:56:57.976 [DEBUG] [Thread-68221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:56:57.977 [DEBUG] [Thread-68221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:56:57.977 [DEBUG] [Thread-68221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:56:57.977 [DEBUG] [Thread-68221] [transport.py] [_log()] Compression: none
2025-12-12T10:56:57.977 [DEBUG] [Thread-68221] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:56:58.034 [DEBUG] [Thread-68221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:56:58.035 [DEBUG] [Thread-68221] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:56:58.035 [DEBUG] [Thread-68221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:56:58.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:56:58.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:56:58.093 [DEBUG] [Thread-68221] [transport.py] [_log()] userauth is OK
2025-12-12T10:56:58.093 [DEBUG] [Thread-68221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:56:58.093 [DEBUG] [Thread-68221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:56:58.093 [DEBUG] [Thread-68221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:56:58.093 [DEBUG] [Thread-68221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:56:58.112 [INFO] [Thread-68221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:56:58.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:56:58.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:56:59.041 [DEBUG] [Thread-68221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:56:59.042 [DEBUG] [Thread-68221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:56:59.094 [DEBUG] [Thread-68221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:56:59.094 [DEBUG] [Thread-68221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:56:59.103 [DEBUG] [Thread-68221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:56:59.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:56:59.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:56:59.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:56:59.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:56:59.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:56:59.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:56:59.140 [DEBUG] [Thread-68221] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:56:59.867 [DEBUG] [Thread-68223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:08.886 [DEBUG] [Thread-68224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:09.894 [DEBUG] [Thread-68225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:17.933 [DEBUG] [Thread-68226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:22.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:22.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:24.953 [DEBUG] [Thread-68227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:26.966 [DEBUG] [Thread-68228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:29.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:57:29.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:57:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:57:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 57, 2), 14.22, 38.66, 0.0, 50.04, 17.55, 0, 0, 0, 2, 1, 0),)
2025-12-12T10:57:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:57:02
2025-12-12T10:57:29.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:57:30.095 [DEBUG] [Thread-68229] [transport.py] [_log()] starting thread (client mode): 0xf570df30
2025-12-12T10:57:30.095 [DEBUG] [Thread-68229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:57:30.119 [DEBUG] [Thread-68229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:57:30.119 [INFO] [Thread-68229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:57:30.122 [DEBUG] [Thread-68229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] client lang: <none>
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] server lang: <none>
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] kex follows: False
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] Compression: none
2025-12-12T10:57:30.123 [DEBUG] [Thread-68229] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:57:30.141 [DEBUG] [Thread-68229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:57:30.142 [DEBUG] [Thread-68229] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:57:30.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:57:30.143 [DEBUG] [Thread-68229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:57:30.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:57:30.145 [DEBUG] [Thread-68229] [transport.py] [_log()] userauth is OK
2025-12-12T10:57:30.145 [DEBUG] [Thread-68229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:57:30.146 [DEBUG] [Thread-68229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:57:30.146 [DEBUG] [Thread-68229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:57:30.146 [DEBUG] [Thread-68229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:57:30.170 [INFO] [Thread-68229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:57:30.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:57:30.803 [DEBUG] [Thread-68229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:57:30.804 [DEBUG] [Thread-68229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:57:30.804 [DEBUG] [Thread-68229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:57:30.844 [DEBUG] [Thread-68229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:57:30.844 [DEBUG] [Thread-68229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:57:30.848 [DEBUG] [Thread-68229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:57:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:57:30.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:57:30.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:57:30.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:57:30.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:57:30.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:57:30.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:57:30.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:57:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:57:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.372666 -999.00  +17.00  22.59     45   +5.10 1 2 1 1 1   888    0 11.85 -13.44 ----- 39.6 22.6 5.2 57.1 22.1 -20.9 21.4 -18.8 20.9 -16.7 21.2 -18.8
2025-12-12T10:57:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:57:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:57:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.372666
2025-12-12T10:57:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:57:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:57:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:57:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:57:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:57:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:57:02', tmtdew=14.22, humidity=38.66, cloud=0.0, wind=50.04, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:56:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:57:30.873 [DEBUG] [Thread-68229] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:57:30.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:57:30.967 [DEBUG] [Thread-68232] [transport.py] [_log()] starting thread (client mode): 0xf2d0fca0
2025-12-12T10:57:30.967 [DEBUG] [Thread-68232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:57:30.983 [DEBUG] [Thread-68232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:57:30.984 [INFO] [Thread-68232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:57:30.991 [DEBUG] [Thread-68232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:57:30.992 [DEBUG] [Thread-68232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:57:30.992 [DEBUG] [Thread-68232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:57:30.992 [DEBUG] [Thread-68232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:57:30.992 [DEBUG] [Thread-68232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:57:30.992 [DEBUG] [Thread-68232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:57:30.992 [DEBUG] [Thread-68232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] client lang: <none>
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] server lang: <none>
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] kex follows: False
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:57:30.993 [DEBUG] [Thread-68232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:57:30.994 [DEBUG] [Thread-68232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:57:30.994 [DEBUG] [Thread-68232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:57:30.994 [DEBUG] [Thread-68232] [transport.py] [_log()] Compression: none
2025-12-12T10:57:30.994 [DEBUG] [Thread-68232] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:57:31.050 [DEBUG] [Thread-68232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:57:31.051 [DEBUG] [Thread-68232] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:57:31.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:57:31.052 [DEBUG] [Thread-68232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:57:31.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:57:31.110 [DEBUG] [Thread-68232] [transport.py] [_log()] userauth is OK
2025-12-12T10:57:31.110 [DEBUG] [Thread-68232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:57:31.111 [DEBUG] [Thread-68232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:57:31.111 [DEBUG] [Thread-68232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:57:31.111 [DEBUG] [Thread-68232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:57:31.131 [INFO] [Thread-68232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:57:31.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:57:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:57:32.000 [DEBUG] [Thread-68232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:57:32.001 [DEBUG] [Thread-68232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:57:32.049 [DEBUG] [Thread-68232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:57:32.049 [DEBUG] [Thread-68232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:57:32.058 [DEBUG] [Thread-68232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:57:32.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:57:32.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:57:32.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:57:32.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:57:32.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:57:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:57:32.090 [DEBUG] [Thread-68232] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:57:35.987 [DEBUG] [Thread-68234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:37.183 [DEBUG] [Thread-68235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:39.999 [DEBUG] [Thread-68236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:45.028 [DEBUG] [Thread-68237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:54.052 [DEBUG] [Thread-68238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:57:55.062 [DEBUG] [Thread-68239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:02.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:58:02.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:58:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:58:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 57, 34), 14.75, 37.5, 0.0, 38.73, 18.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:58:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:57:34
2025-12-12T10:58:02.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:58:03.051 [DEBUG] [Thread-68240] [transport.py] [_log()] starting thread (client mode): 0xf570fd60
2025-12-12T10:58:03.051 [DEBUG] [Thread-68240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:58:03.072 [DEBUG] [Thread-68240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:58:03.072 [INFO] [Thread-68240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:58:03.075 [DEBUG] [Thread-68240] [transport.py] [_log()] client lang: <none>
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] server lang: <none>
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] kex follows: False
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] Compression: none
2025-12-12T10:58:03.076 [DEBUG] [Thread-68240] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:58:03.085 [DEBUG] [Thread-68242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:03.092 [DEBUG] [Thread-68240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:58:03.093 [DEBUG] [Thread-68240] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:58:03.093 [DEBUG] [Thread-68240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:58:03.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:58:03.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:58:03.095 [DEBUG] [Thread-68240] [transport.py] [_log()] userauth is OK
2025-12-12T10:58:03.096 [DEBUG] [Thread-68240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:58:03.096 [DEBUG] [Thread-68240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:58:03.096 [DEBUG] [Thread-68240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:58:03.096 [DEBUG] [Thread-68240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:58:03.119 [INFO] [Thread-68240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:58:03.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:58:03.773 [DEBUG] [Thread-68240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:58:03.773 [DEBUG] [Thread-68240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:58:03.773 [DEBUG] [Thread-68240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:58:03.814 [DEBUG] [Thread-68240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:58:03.815 [DEBUG] [Thread-68240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:58:03.818 [DEBUG] [Thread-68240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:58:03.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:58:03.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:58:03.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:58:03.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:58:03.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:58:03.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:58:03.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:58:03.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:58:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:58:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.373013 -999.00  +17.10  25.91     45   +5.00 1 2 1 1 1   888    0 11.63 -17.01 ----- 28.9 25.9 5.0 55.0 22.1 -21.2 21.4 -20.6 20.9 -17.3 21.1 -18.6
2025-12-12T10:58:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:58:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:58:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.373013
2025-12-12T10:58:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:58:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:58:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:58:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:58:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:58:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:57:34', tmtdew=14.75, humidity=37.5, cloud=0.0, wind=38.73, temperature=18.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:57:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:58:03.847 [DEBUG] [Thread-68240] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:58:03.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:58:03.933 [DEBUG] [Thread-68244] [transport.py] [_log()] starting thread (client mode): 0xf570ee00
2025-12-12T10:58:03.934 [DEBUG] [Thread-68244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:58:03.948 [DEBUG] [Thread-68244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:58:03.948 [INFO] [Thread-68244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:58:03.956 [DEBUG] [Thread-68244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] client lang: <none>
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] server lang: <none>
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] kex follows: False
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] Compression: none
2025-12-12T10:58:03.957 [DEBUG] [Thread-68244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:58:04.013 [DEBUG] [Thread-68244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:58:04.014 [DEBUG] [Thread-68244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:58:04.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:58:04.015 [DEBUG] [Thread-68244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:58:04.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:58:04.070 [DEBUG] [Thread-68244] [transport.py] [_log()] userauth is OK
2025-12-12T10:58:04.070 [DEBUG] [Thread-68244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:58:04.070 [DEBUG] [Thread-68244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:58:04.070 [DEBUG] [Thread-68244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:58:04.070 [DEBUG] [Thread-68244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:58:04.089 [INFO] [Thread-68244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:58:04.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:58:04.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:58:04.936 [DEBUG] [Thread-68244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:58:04.936 [DEBUG] [Thread-68244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:58:04.984 [DEBUG] [Thread-68244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:58:04.984 [DEBUG] [Thread-68244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:58:04.992 [DEBUG] [Thread-68244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:58:05.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:58: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')
2025-12-12T10:58: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
2025-12-12T10:58:05.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:58:05.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:58:05.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:58:05.027 [DEBUG] [Thread-68244] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:58:10.104 [DEBUG] [Thread-68246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:12.134 [DEBUG] [Thread-68247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:21.154 [DEBUG] [Thread-68248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:22.784 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:22.784 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:25.165 [DEBUG] [Thread-68249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:30.185 [DEBUG] [Thread-68250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:35.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:58:35.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:58:35.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:58:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 58, 6), 14.76, 37.41, 0.0, 38.16, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:58:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:58:06
2025-12-12T10:58:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:58:36.021 [DEBUG] [Thread-68251] [transport.py] [_log()] starting thread (client mode): 0xf57a8850
2025-12-12T10:58:36.021 [DEBUG] [Thread-68251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:58:36.042 [DEBUG] [Thread-68251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:58:36.043 [INFO] [Thread-68251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:58:36.046 [DEBUG] [Thread-68251] [transport.py] [_log()] client lang: <none>
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] server lang: <none>
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] kex follows: False
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] Compression: none
2025-12-12T10:58:36.047 [DEBUG] [Thread-68251] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:58:36.064 [DEBUG] [Thread-68251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:58:36.064 [DEBUG] [Thread-68251] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:58:36.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:58:36.065 [DEBUG] [Thread-68251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:58:36.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:58:36.067 [DEBUG] [Thread-68251] [transport.py] [_log()] userauth is OK
2025-12-12T10:58:36.068 [DEBUG] [Thread-68251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:58:36.068 [DEBUG] [Thread-68251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:58:36.068 [DEBUG] [Thread-68251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:58:36.068 [DEBUG] [Thread-68251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:58:36.084 [INFO] [Thread-68251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:58:36.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:58:36.713 [DEBUG] [Thread-68251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:58:36.713 [DEBUG] [Thread-68251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:58:36.713 [DEBUG] [Thread-68251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:58:36.754 [DEBUG] [Thread-68251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:58:36.755 [DEBUG] [Thread-68251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:58:36.758 [DEBUG] [Thread-68251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:58:36.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:58:36.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:58:36.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:58:36.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:58:36.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:58:36.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:58:36.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:58:36.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:58:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:58:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.373361 -999.00  +17.50  27.93     44   +5.10 1 2 1 1 1   888    0 11.68 -17.98 ----- 36.7 27.9 18.0 38.5 22.3 -19.7 21.6 -19.3 21.1 -16.1 21.4 -17.4
2025-12-12T10:58:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:58:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:58:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.373361
2025-12-12T10:58:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:58:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:58:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:58:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:58:36.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:58:36.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:58:06', tmtdew=14.76, humidity=37.41, cloud=0.0, wind=38.16, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:57:38.390', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:58:36.785 [DEBUG] [Thread-68251] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:58:36.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:58:36.880 [DEBUG] [Thread-68254] [transport.py] [_log()] starting thread (client mode): 0xf57ab1c0
2025-12-12T10:58:36.880 [DEBUG] [Thread-68254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:58:36.894 [DEBUG] [Thread-68254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:58:36.894 [INFO] [Thread-68254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] client lang: <none>
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] server lang: <none>
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] kex follows: False
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:58:36.902 [DEBUG] [Thread-68254] [transport.py] [_log()] Compression: none
2025-12-12T10:58:36.903 [DEBUG] [Thread-68254] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:58:36.961 [DEBUG] [Thread-68254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:58:36.961 [DEBUG] [Thread-68254] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:58:36.962 [DEBUG] [Thread-68254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:58:36.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:58:36.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:58:37.017 [DEBUG] [Thread-68254] [transport.py] [_log()] userauth is OK
2025-12-12T10:58:37.017 [DEBUG] [Thread-68254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:58:37.018 [DEBUG] [Thread-68254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:58:37.018 [DEBUG] [Thread-68254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:58:37.018 [DEBUG] [Thread-68254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:58:37.036 [INFO] [Thread-68254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:58:37.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:58:37.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:58:37.233 [DEBUG] [Thread-68256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:37.865 [DEBUG] [Thread-68254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:58:37.865 [DEBUG] [Thread-68254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:58:37.913 [DEBUG] [Thread-68254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:58:37.913 [DEBUG] [Thread-68254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:58:37.923 [DEBUG] [Thread-68254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:58:37.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:58:37.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:58:37.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:58:37.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:58:37.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:58:37.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:58:37.959 [DEBUG] [Thread-68254] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:58:39.206 [DEBUG] [Thread-68257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:40.210 [DEBUG] [Thread-68258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:48.238 [DEBUG] [Thread-68259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:55.258 [DEBUG] [Thread-68260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:58:57.271 [DEBUG] [Thread-68261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:06.289 [DEBUG] [Thread-68262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:59:07.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:59:07.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:59:08.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 58, 38), 14.57, 37.86, 0.0, 38.17, 17.93, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:59:08.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:58:38
2025-12-12T10:59:08.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:59:08.945 [DEBUG] [Thread-68263] [transport.py] [_log()] starting thread (client mode): 0xf570f610
2025-12-12T10:59:08.945 [DEBUG] [Thread-68263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:59:08.967 [DEBUG] [Thread-68263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:59:08.967 [INFO] [Thread-68263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] client lang: <none>
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] server lang: <none>
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] kex follows: False
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:59:08.970 [DEBUG] [Thread-68263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:59:08.971 [DEBUG] [Thread-68263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:59:08.971 [DEBUG] [Thread-68263] [transport.py] [_log()] Compression: none
2025-12-12T10:59:08.971 [DEBUG] [Thread-68263] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:59:08.986 [DEBUG] [Thread-68263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:59:08.987 [DEBUG] [Thread-68263] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:59:08.987 [DEBUG] [Thread-68263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:59:08.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:59:08.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:59:08.989 [DEBUG] [Thread-68263] [transport.py] [_log()] userauth is OK
2025-12-12T10:59:08.989 [DEBUG] [Thread-68263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:59:08.990 [DEBUG] [Thread-68263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:59:08.990 [DEBUG] [Thread-68263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:59:08.990 [DEBUG] [Thread-68263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:59:09.014 [INFO] [Thread-68263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:59:09.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:59:09.636 [DEBUG] [Thread-68263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:59:09.637 [DEBUG] [Thread-68263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:59:09.637 [DEBUG] [Thread-68263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:59:09.678 [DEBUG] [Thread-68263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:59:09.678 [DEBUG] [Thread-68263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:59:09.682 [DEBUG] [Thread-68263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:59:09.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:59:09.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:59:09.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:59:09.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:59:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:59:09.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:59:09.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:59:09.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:59:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:59:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.374055 -999.00  +17.80  28.86     43   +5.20 1 2 1 1 1   888    0 11.65 -13.75 ----- 33.8 28.9 296.0 43.5 22.7 -19.4 21.9 -17.6 21.2 -15.4 21.7 -16.8
2025-12-12T10:59:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:59:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:59:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.374055
2025-12-12T10:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:59:09.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:59:09.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:58:38', tmtdew=14.57, humidity=37.86, cloud=0.0, wind=38.17, temperature=17.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:58:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:59:09.710 [DEBUG] [Thread-68263] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:59:09.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:59:09.805 [DEBUG] [Thread-68266] [transport.py] [_log()] starting thread (client mode): 0xf2d0cc70
2025-12-12T10:59:09.805 [DEBUG] [Thread-68266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:59:09.820 [DEBUG] [Thread-68266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:59:09.821 [INFO] [Thread-68266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:59:09.828 [DEBUG] [Thread-68266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] client lang: <none>
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] server lang: <none>
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] kex follows: False
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] Compression: none
2025-12-12T10:59:09.829 [DEBUG] [Thread-68266] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:59:09.886 [DEBUG] [Thread-68266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:59:09.887 [DEBUG] [Thread-68266] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:59:09.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:59:09.888 [DEBUG] [Thread-68266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:59:09.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:59:09.942 [DEBUG] [Thread-68266] [transport.py] [_log()] userauth is OK
2025-12-12T10:59:09.942 [DEBUG] [Thread-68266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:59:09.942 [DEBUG] [Thread-68266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:59:09.943 [DEBUG] [Thread-68266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:59:09.943 [DEBUG] [Thread-68266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:59:09.966 [INFO] [Thread-68266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:59:09.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:59:09.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:59:10.302 [DEBUG] [Thread-68268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:10.830 [DEBUG] [Thread-68266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:59:10.830 [DEBUG] [Thread-68266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:59:10.878 [DEBUG] [Thread-68266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:59:10.878 [DEBUG] [Thread-68266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:59:10.888 [DEBUG] [Thread-68266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:59:10.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:59:10.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:59:10.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:59:10.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:59:10.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:59:10.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:59:10.925 [DEBUG] [Thread-68266] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:59:15.334 [DEBUG] [Thread-68269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:22.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:22.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:24.357 [DEBUG] [Thread-68270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:25.364 [DEBUG] [Thread-68271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:33.390 [DEBUG] [Thread-68272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:37.277 [DEBUG] [Thread-68273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:40.404 [DEBUG] [Thread-68274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:40.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T10:59:40.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T10:59:40.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T10:59:41.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 59, 10), 14.67, 37.68, 0.0, 43.21, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T10:59:41.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:59:10
2025-12-12T10:59:41.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T10:59:41.951 [DEBUG] [Thread-68275] [transport.py] [_log()] starting thread (client mode): 0xf57cb010
2025-12-12T10:59:41.951 [DEBUG] [Thread-68275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:59:41.971 [DEBUG] [Thread-68275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T10:59:41.971 [INFO] [Thread-68275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] client lang: <none>
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] server lang: <none>
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] kex follows: False
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] Compression: none
2025-12-12T10:59:41.975 [DEBUG] [Thread-68275] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:59:41.993 [DEBUG] [Thread-68275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:59:41.993 [DEBUG] [Thread-68275] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:59:41.993 [DEBUG] [Thread-68275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T10:59:41.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T10:59:41.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:59:41.994 [DEBUG] [Thread-68275] [transport.py] [_log()] userauth is OK
2025-12-12T10:59:41.994 [DEBUG] [Thread-68275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:59:41.995 [DEBUG] [Thread-68275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:59:41.995 [DEBUG] [Thread-68275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T10:59:41.995 [DEBUG] [Thread-68275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:59:42.006 [INFO] [Thread-68275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:59:42.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:59:42.410 [DEBUG] [Thread-68277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:42.647 [DEBUG] [Thread-68275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:59:42.647 [DEBUG] [Thread-68275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:59:42.647 [DEBUG] [Thread-68275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T10:59:42.688 [DEBUG] [Thread-68275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:59:42.689 [DEBUG] [Thread-68275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:59:42.691 [DEBUG] [Thread-68275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:59:42.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:59:42.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T10:59:42.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T10:59:42.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T10:59:42.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:59:42.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T10:59:42.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:59:42.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:59:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T10:59:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.374402 -999.00  +17.90  34.70     43   +5.20 1 2 2 1 1   888    0 11.91 -11.89 ----- 36.2 34.7 337.0 52.4 22.7 -19.4 22.0 -19.5 21.4 -15.7 21.8 -16.5
2025-12-12T10:59:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T10:59:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T10:59:42.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.374402
2025-12-12T10:59:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T10:59:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T10:59:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T10:59:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T10:59:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T10:59:42.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:59:10', tmtdew=14.67, humidity=37.68, cloud=0.0, wind=43.21, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:59:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T10:59:42.710 [DEBUG] [Thread-68275] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:59:42.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T10:59:42.798 [DEBUG] [Thread-68279] [transport.py] [_log()] starting thread (client mode): 0xf2d0df30
2025-12-12T10:59:42.798 [DEBUG] [Thread-68279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T10:59:42.812 [DEBUG] [Thread-68279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T10:59:42.812 [INFO] [Thread-68279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T10:59:42.819 [DEBUG] [Thread-68279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] client lang: <none>
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] server lang: <none>
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] kex follows: False
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] Compression: none
2025-12-12T10:59:42.820 [DEBUG] [Thread-68279] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T10:59:42.877 [DEBUG] [Thread-68279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T10:59:42.878 [DEBUG] [Thread-68279] [transport.py] [_log()] Switch to new keys ...
2025-12-12T10:59:42.879 [DEBUG] [Thread-68279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T10:59:42.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T10:59:42.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T10:59:42.938 [DEBUG] [Thread-68279] [transport.py] [_log()] userauth is OK
2025-12-12T10:59:42.938 [DEBUG] [Thread-68279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T10:59:42.938 [DEBUG] [Thread-68279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T10:59:42.938 [DEBUG] [Thread-68279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T10:59:42.938 [DEBUG] [Thread-68279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T10:59:42.956 [INFO] [Thread-68279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T10:59:42.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T10:59:42.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T10:59:43.812 [DEBUG] [Thread-68279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T10:59:43.813 [DEBUG] [Thread-68279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T10:59:43.861 [DEBUG] [Thread-68279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T10:59:43.861 [DEBUG] [Thread-68279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T10:59:43.869 [DEBUG] [Thread-68279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T10:59:43.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T10:59:43.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T10:59:43.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T10:59:43.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T10:59:43.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T10:59:43.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T10:59:43.900 [DEBUG] [Thread-68279] [transport.py] [_log()] EOF in transport thread
2025-12-12T10:59:51.433 [DEBUG] [Thread-68281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T10:59:55.447 [DEBUG] [Thread-68282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:00.483 [DEBUG] [Thread-68283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:09.510 [DEBUG] [Thread-68284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:10.517 [DEBUG] [Thread-68285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:13.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:00:13.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:00:13.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
2025-12-12T11:00:14.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 10, 59, 42), 14.95, 36.96, 0.0, 39.43, 18.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:00:14.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 10:59:42
2025-12-12T11:00:14.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:00:14.896 [DEBUG] [Thread-68286] [transport.py] [_log()] starting thread (client mode): 0xf57ab370
2025-12-12T11:00:14.896 [DEBUG] [Thread-68286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:00:14.917 [DEBUG] [Thread-68286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:00:14.918 [INFO] [Thread-68286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] client lang: <none>
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] server lang: <none>
2025-12-12T11:00:14.921 [DEBUG] [Thread-68286] [transport.py] [_log()] kex follows: False
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] Compression: none
2025-12-12T11:00:14.922 [DEBUG] [Thread-68286] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:00:14.941 [DEBUG] [Thread-68286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:00:14.941 [DEBUG] [Thread-68286] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:00:14.942 [DEBUG] [Thread-68286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:00:14.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:00:14.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:00:14.944 [DEBUG] [Thread-68286] [transport.py] [_log()] userauth is OK
2025-12-12T11:00:14.944 [DEBUG] [Thread-68286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:00:14.944 [DEBUG] [Thread-68286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:00:14.944 [DEBUG] [Thread-68286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:00:14.945 [DEBUG] [Thread-68286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:00:14.979 [INFO] [Thread-68286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:00:14.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:00:15.846 [DEBUG] [Thread-68286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:00:15.846 [DEBUG] [Thread-68286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:00:15.846 [DEBUG] [Thread-68286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:00:15.887 [DEBUG] [Thread-68286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:00:15.887 [DEBUG] [Thread-68286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:00:15.889 [DEBUG] [Thread-68286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:00:15.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:00:15.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:00:15.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:00:15.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:00:15.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:00:15.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:00:15.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.374749 -999.00  +17.70  32.03     43   +5.10 1 2 2 1 1   888    0 12.01 -10.73 ----- 36.0 32.0 349.2 48.1 22.8 -19.3 22.0 -19.3 21.5 -15.8 21.9 -17.7
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.374749
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:00:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T10:59:42', tmtdew=14.95, humidity=36.96, cloud=0.0, wind=39.43, temperature=18.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T08:59:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:00:15.914 [DEBUG] [Thread-68286] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:00:15.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:00:15.998 [DEBUG] [Thread-68289] [transport.py] [_log()] starting thread (client mode): 0xf57a85b0
2025-12-12T11:00:15.998 [DEBUG] [Thread-68289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:00:16.012 [DEBUG] [Thread-68289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:00:16.012 [INFO] [Thread-68289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] client lang: <none>
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] server lang: <none>
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] kex follows: False
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] Compression: none
2025-12-12T11:00:16.020 [DEBUG] [Thread-68289] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:00:16.076 [DEBUG] [Thread-68289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:00:16.076 [DEBUG] [Thread-68289] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:00:16.076 [DEBUG] [Thread-68289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:00:16.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:00:16.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:00:16.133 [DEBUG] [Thread-68289] [transport.py] [_log()] userauth is OK
2025-12-12T11:00:16.133 [DEBUG] [Thread-68289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:00:16.133 [DEBUG] [Thread-68289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:00:16.133 [DEBUG] [Thread-68289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:00:16.133 [DEBUG] [Thread-68289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:00:16.147 [INFO] [Thread-68289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:00:16.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:00:16.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:00:17.004 [DEBUG] [Thread-68289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:00:17.004 [DEBUG] [Thread-68289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:00:17.052 [DEBUG] [Thread-68289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:00:17.052 [DEBUG] [Thread-68289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:00:17.060 [DEBUG] [Thread-68289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:00:17.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:00:17.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:00:17.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:00:17.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:00:17.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:00:17.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:00:17.092 [DEBUG] [Thread-68289] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:00:18.537 [DEBUG] [Thread-68291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:23.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:23.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:25.555 [DEBUG] [Thread-68292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:27.582 [DEBUG] [Thread-68293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:36.606 [DEBUG] [Thread-68294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:37.330 [DEBUG] [Thread-68295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:40.623 [DEBUG] [Thread-68296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:45.641 [DEBUG] [Thread-68297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:00:47.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:00:47.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:00:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 0, 15), 15.07, 36.73, 0.0, 43.51, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:00:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:00:15
2025-12-12T11:00:47.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:00:48.135 [DEBUG] [Thread-68298] [transport.py] [_log()] starting thread (client mode): 0xf57aab60
2025-12-12T11:00:48.135 [DEBUG] [Thread-68298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:00:48.154 [DEBUG] [Thread-68298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:00:48.155 [INFO] [Thread-68298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] client lang: <none>
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] server lang: <none>
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] kex follows: False
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] Compression: none
2025-12-12T11:00:48.158 [DEBUG] [Thread-68298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:00:48.174 [DEBUG] [Thread-68298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:00:48.174 [DEBUG] [Thread-68298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:00:48.174 [DEBUG] [Thread-68298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:00:48.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:00:48.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:00:48.176 [DEBUG] [Thread-68298] [transport.py] [_log()] userauth is OK
2025-12-12T11:00:48.176 [DEBUG] [Thread-68298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:00:48.176 [DEBUG] [Thread-68298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:00:48.176 [DEBUG] [Thread-68298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:00:48.176 [DEBUG] [Thread-68298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:00:48.187 [INFO] [Thread-68298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:00:48.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:00:48.816 [DEBUG] [Thread-68298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:00:48.816 [DEBUG] [Thread-68298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:00:48.816 [DEBUG] [Thread-68298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:00:48.857 [DEBUG] [Thread-68298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:00:48.857 [DEBUG] [Thread-68298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:00:48.859 [DEBUG] [Thread-68298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:00:48.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:00:48.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:00:48.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:00:48.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:00:48.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:00:48.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.375097 -999.00  +17.50  40.38     43   +4.90 1 2 2 1 1   888    0 12.03 -9.36 ----- 32.4 40.4 330.8 49.5 22.9 -20.9 22.1 -19.0 21.6 -15.9 22.1 -16.4
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.375097
2025-12-12T11:00:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:00:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:00:15', tmtdew=15.07, humidity=36.73, cloud=0.0, wind=43.51, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:00:08.381', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:00:48.879 [DEBUG] [Thread-68298] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:00:48.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:00:48.964 [DEBUG] [Thread-68301] [transport.py] [_log()] starting thread (client mode): 0xf57aa860
2025-12-12T11:00:48.964 [DEBUG] [Thread-68301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:00:48.978 [DEBUG] [Thread-68301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:00:48.978 [INFO] [Thread-68301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] client lang: <none>
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] server lang: <none>
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] kex follows: False
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] Compression: none
2025-12-12T11:00:48.986 [DEBUG] [Thread-68301] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:00:49.044 [DEBUG] [Thread-68301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:00:49.044 [DEBUG] [Thread-68301] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:00:49.045 [DEBUG] [Thread-68301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:00:49.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:00:49.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:00:49.101 [DEBUG] [Thread-68301] [transport.py] [_log()] userauth is OK
2025-12-12T11:00:49.101 [DEBUG] [Thread-68301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:00:49.101 [DEBUG] [Thread-68301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:00:49.101 [DEBUG] [Thread-68301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:00:49.101 [DEBUG] [Thread-68301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:00:49.115 [INFO] [Thread-68301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:00:49.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:00:49.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:00:49.957 [DEBUG] [Thread-68301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:00:49.958 [DEBUG] [Thread-68301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:00:50.006 [DEBUG] [Thread-68301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:00:50.006 [DEBUG] [Thread-68301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:00:50.016 [DEBUG] [Thread-68301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:00:50.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:00:50.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:00:50.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:00:50.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:00:50.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:00:50.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:00:50.052 [DEBUG] [Thread-68301] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:00:54.661 [DEBUG] [Thread-68303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:00:55.665 [DEBUG] [Thread-68304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:03.698 [DEBUG] [Thread-68305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:10.715 [DEBUG] [Thread-68306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:12.726 [DEBUG] [Thread-68307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:20.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:01:20.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:01:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:01:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 0, 47), 15.07, 36.91, 0.0, 32.62, 18.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:01:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:00:47
2025-12-12T11:01:20.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:01:21.089 [DEBUG] [Thread-68308] [transport.py] [_log()] starting thread (client mode): 0xf57a9330
2025-12-12T11:01:21.089 [DEBUG] [Thread-68308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:01:21.108 [DEBUG] [Thread-68308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:01:21.108 [INFO] [Thread-68308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] client lang: <none>
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] server lang: <none>
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] kex follows: False
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] Compression: none
2025-12-12T11:01:21.111 [DEBUG] [Thread-68308] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:01:21.126 [DEBUG] [Thread-68308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:01:21.126 [DEBUG] [Thread-68308] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:01:21.127 [DEBUG] [Thread-68308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:01:21.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:01:21.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:01:21.127 [DEBUG] [Thread-68308] [transport.py] [_log()] userauth is OK
2025-12-12T11:01:21.127 [DEBUG] [Thread-68308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:01:21.127 [DEBUG] [Thread-68308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:01:21.127 [DEBUG] [Thread-68308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:01:21.127 [DEBUG] [Thread-68308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:01:21.142 [INFO] [Thread-68308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:01:21.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:01:21.750 [DEBUG] [Thread-68310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:21.805 [DEBUG] [Thread-68308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:01:21.806 [DEBUG] [Thread-68308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:01:21.806 [DEBUG] [Thread-68308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:01:21.846 [DEBUG] [Thread-68308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:01:21.847 [DEBUG] [Thread-68308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:01:21.850 [DEBUG] [Thread-68308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:01:21.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:01:21.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:01:21.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:01:21.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:01:21.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:01:21.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:01:21.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:01:21.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:01:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:01:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.375444 -999.00  +18.10  32.27     42   +5.30 1 2 2 1 1   888    0 11.97 -7.77 ----- 35.2 32.3 11.6 43.1 22.9 -19.1 22.2 -19.2 21.6 -16.2 22.0 -21.2
2025-12-12T11:01:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:01:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:01:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.375444
2025-12-12T11:01:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:01:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:01:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:01:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:01:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:01:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:00:47', tmtdew=15.07, humidity=36.91, cloud=0.0, wind=32.62, temperature=18.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:00:38.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:01:21.873 [DEBUG] [Thread-68308] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:01:21.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:01:21.967 [DEBUG] [Thread-68312] [transport.py] [_log()] starting thread (client mode): 0xf57aa050
2025-12-12T11:01:21.968 [DEBUG] [Thread-68312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:01:21.982 [DEBUG] [Thread-68312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:01:21.982 [INFO] [Thread-68312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:01:21.989 [DEBUG] [Thread-68312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:01:21.989 [DEBUG] [Thread-68312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] client lang: <none>
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] server lang: <none>
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] kex follows: False
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] Compression: none
2025-12-12T11:01:21.990 [DEBUG] [Thread-68312] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:01:22.050 [DEBUG] [Thread-68312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:01:22.051 [DEBUG] [Thread-68312] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:01:22.051 [DEBUG] [Thread-68312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:01:22.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:01:22.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:01:22.106 [DEBUG] [Thread-68312] [transport.py] [_log()] userauth is OK
2025-12-12T11:01:22.106 [DEBUG] [Thread-68312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:01:22.106 [DEBUG] [Thread-68312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:01:22.106 [DEBUG] [Thread-68312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:01:22.106 [DEBUG] [Thread-68312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:01:22.126 [INFO] [Thread-68312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:01:22.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:01:22.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:01:22.952 [DEBUG] [Thread-68312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:01:22.952 [DEBUG] [Thread-68312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:01:23.000 [DEBUG] [Thread-68312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:01:23.000 [DEBUG] [Thread-68312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:01:23.009 [DEBUG] [Thread-68312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:01:23.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:01:23.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:01:23.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:01:23.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:01:23.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:01:23.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:01:23.043 [DEBUG] [Thread-68312] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:01:23.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:23.208 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:25.763 [DEBUG] [Thread-68314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:30.796 [DEBUG] [Thread-68315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:37.378 [DEBUG] [Thread-68316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:39.817 [DEBUG] [Thread-68317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:40.825 [DEBUG] [Thread-68318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:48.852 [DEBUG] [Thread-68319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:01:53.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:01:53.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 1, 19), 15.04, 36.98, 0.0, 34.37, 18.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:01:19
2025-12-12T11:01:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:01:54.042 [DEBUG] [Thread-68320] [transport.py] [_log()] starting thread (client mode): 0xf57c9540
2025-12-12T11:01:54.043 [DEBUG] [Thread-68320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:01:54.058 [DEBUG] [Thread-68320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:01:54.058 [INFO] [Thread-68320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] client lang: <none>
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] server lang: <none>
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] kex follows: False
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] Compression: none
2025-12-12T11:01:54.060 [DEBUG] [Thread-68320] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:01:54.078 [DEBUG] [Thread-68320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:01:54.079 [DEBUG] [Thread-68320] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:01:54.079 [DEBUG] [Thread-68320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:01:54.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:01:54.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:01:54.081 [DEBUG] [Thread-68320] [transport.py] [_log()] userauth is OK
2025-12-12T11:01:54.082 [DEBUG] [Thread-68320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:01:54.082 [DEBUG] [Thread-68320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:01:54.082 [DEBUG] [Thread-68320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:01:54.082 [DEBUG] [Thread-68320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:01:54.099 [INFO] [Thread-68320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:01:54.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:01:54.670 [DEBUG] [Thread-68320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:01:54.670 [DEBUG] [Thread-68320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:01:54.670 [DEBUG] [Thread-68320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:01:54.711 [DEBUG] [Thread-68320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:01:54.711 [DEBUG] [Thread-68320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:01:54.713 [DEBUG] [Thread-68320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:01:54.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:01:54.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:01:54.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:01:54.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:01:54.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:01:54.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:01:54.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:01:54.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:01:54.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.375791 -999.00  +18.10  32.23     42   +5.10 1 2 2 1 1   888    0 12.06 -4.38 ----- 30.6 32.2 16.8 44.4 23.0 -21.1 22.1 -22.6 21.6 -16.4 22.0 -21.2
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.375791
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:01:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:01:19', tmtdew=15.04, humidity=36.98, cloud=0.0, wind=34.37, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:01:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:01:54.733 [DEBUG] [Thread-68320] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:01:54.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:01:54.818 [DEBUG] [Thread-68323] [transport.py] [_log()] starting thread (client mode): 0xf57ca920
2025-12-12T11:01:54.818 [DEBUG] [Thread-68323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:01:54.832 [DEBUG] [Thread-68323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:01:54.832 [INFO] [Thread-68323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] client lang: <none>
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] server lang: <none>
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] kex follows: False
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] Compression: none
2025-12-12T11:01:54.840 [DEBUG] [Thread-68323] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:01:54.897 [DEBUG] [Thread-68323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:01:54.898 [DEBUG] [Thread-68323] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:01:54.898 [DEBUG] [Thread-68323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:01:54.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:01:54.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:01:54.954 [DEBUG] [Thread-68323] [transport.py] [_log()] userauth is OK
2025-12-12T11:01:54.954 [DEBUG] [Thread-68323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:01:54.954 [DEBUG] [Thread-68323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:01:54.954 [DEBUG] [Thread-68323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:01:54.954 [DEBUG] [Thread-68323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:01:54.973 [INFO] [Thread-68323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:01:54.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:01:54.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:01:55.837 [DEBUG] [Thread-68323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:01:55.838 [DEBUG] [Thread-68323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:01:55.869 [DEBUG] [Thread-68325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:01:55.886 [DEBUG] [Thread-68323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:01:55.886 [DEBUG] [Thread-68323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:01:55.895 [DEBUG] [Thread-68323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:01:55.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:01:55.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:01:55.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:01:55.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:01:55.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:01:55.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:01:55.929 [DEBUG] [Thread-68323] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:01:57.897 [DEBUG] [Thread-68326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:06.921 [DEBUG] [Thread-68327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:10.934 [DEBUG] [Thread-68328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:15.947 [DEBUG] [Thread-68329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:23.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:23.350 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:24.967 [DEBUG] [Thread-68330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:25.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:02:25.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:02:25.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:02:25.971 [DEBUG] [Thread-68331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:26.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 2, 23), 15.22, 36.53, 0.0, 43.46, 18.55, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:02:26.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:02:23
2025-12-12T11:02:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:02:26.904 [DEBUG] [Thread-68332] [transport.py] [_log()] starting thread (client mode): 0xf2d0e200
2025-12-12T11:02:26.904 [DEBUG] [Thread-68332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:02:26.924 [DEBUG] [Thread-68332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:02:26.925 [INFO] [Thread-68332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] client lang: <none>
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] server lang: <none>
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] kex follows: False
2025-12-12T11:02:26.928 [DEBUG] [Thread-68332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:02:26.929 [DEBUG] [Thread-68332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:02:26.929 [DEBUG] [Thread-68332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:02:26.929 [DEBUG] [Thread-68332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:02:26.929 [DEBUG] [Thread-68332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:02:26.929 [DEBUG] [Thread-68332] [transport.py] [_log()] Compression: none
2025-12-12T11:02:26.929 [DEBUG] [Thread-68332] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:02:26.947 [DEBUG] [Thread-68332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:02:26.947 [DEBUG] [Thread-68332] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:02:26.948 [DEBUG] [Thread-68332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:02:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:02:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:02:26.949 [DEBUG] [Thread-68332] [transport.py] [_log()] userauth is OK
2025-12-12T11:02:26.950 [DEBUG] [Thread-68332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:02:26.950 [DEBUG] [Thread-68332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:02:26.950 [DEBUG] [Thread-68332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:02:26.950 [DEBUG] [Thread-68332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:02:26.986 [INFO] [Thread-68332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:02:26.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:02:27.656 [DEBUG] [Thread-68332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:02:27.656 [DEBUG] [Thread-68332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:02:27.657 [DEBUG] [Thread-68332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:02:27.697 [DEBUG] [Thread-68332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:02:27.697 [DEBUG] [Thread-68332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:02:27.701 [DEBUG] [Thread-68332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:02:27.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:02:27.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:02:27.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:02:27.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:02:27.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:02:27.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:02:27.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:02:27.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:02:27.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:02:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.376138 -999.00  +18.20  29.91     42   +5.00 1 2 1 1 1   888    0 12.44 -0.44 ----- 25.0 29.9 339.0 46.6 23.0 -19.2 22.1 -23.4 21.4 -18.6 22.1 -16.6
2025-12-12T11:02:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:02:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:02:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.376138
2025-12-12T11:02:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:02:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:02:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:02:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:02:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:02:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:02:23', tmtdew=15.22, humidity=36.53, cloud=0.0, wind=43.46, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:01:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:02:27.729 [DEBUG] [Thread-68332] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:02:27.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:02:27.824 [DEBUG] [Thread-68335] [transport.py] [_log()] starting thread (client mode): 0xf2d0dde0
2025-12-12T11:02:27.824 [DEBUG] [Thread-68335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:02:27.839 [DEBUG] [Thread-68335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:02:27.839 [INFO] [Thread-68335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] client lang: <none>
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] server lang: <none>
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] kex follows: False
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:02:27.847 [DEBUG] [Thread-68335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:02:27.848 [DEBUG] [Thread-68335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:02:27.848 [DEBUG] [Thread-68335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:02:27.848 [DEBUG] [Thread-68335] [transport.py] [_log()] Compression: none
2025-12-12T11:02:27.848 [DEBUG] [Thread-68335] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:02:27.907 [DEBUG] [Thread-68335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:02:27.907 [DEBUG] [Thread-68335] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:02:27.908 [DEBUG] [Thread-68335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:02:27.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:02:27.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:02:27.966 [DEBUG] [Thread-68335] [transport.py] [_log()] userauth is OK
2025-12-12T11:02:27.966 [DEBUG] [Thread-68335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:02:27.967 [DEBUG] [Thread-68335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:02:27.967 [DEBUG] [Thread-68335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:02:27.967 [DEBUG] [Thread-68335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:02:27.986 [INFO] [Thread-68335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:02:27.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:02:27.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:02:28.842 [DEBUG] [Thread-68335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:02:28.842 [DEBUG] [Thread-68335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:02:28.891 [DEBUG] [Thread-68335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:02:28.891 [DEBUG] [Thread-68335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:02:28.900 [DEBUG] [Thread-68335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:02:28.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:02:28.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:02:28.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:02:28.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:02:28.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:02:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:02:28.937 [DEBUG] [Thread-68335] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:02:33.994 [DEBUG] [Thread-68337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:37.439 [DEBUG] [Thread-68338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:41.014 [DEBUG] [Thread-68339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:43.041 [DEBUG] [Thread-68340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:52.061 [DEBUG] [Thread-68341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:56.069 [DEBUG] [Thread-68342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:02:58.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:02:58.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:02:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:02:59.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 2, 55), 14.92, 36.91, 0.0, 33.84, 18.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:02:59.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:02:55
2025-12-12T11:02:59.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:02:59.917 [DEBUG] [Thread-68343] [transport.py] [_log()] starting thread (client mode): 0xf57c8df0
2025-12-12T11:02:59.917 [DEBUG] [Thread-68343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:02:59.938 [DEBUG] [Thread-68343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:02:59.938 [INFO] [Thread-68343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] client lang: <none>
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] server lang: <none>
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] kex follows: False
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] Compression: none
2025-12-12T11:02:59.941 [DEBUG] [Thread-68343] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:02:59.961 [DEBUG] [Thread-68343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:02:59.961 [DEBUG] [Thread-68343] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:02:59.962 [DEBUG] [Thread-68343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:02:59.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:02:59.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:02:59.964 [DEBUG] [Thread-68343] [transport.py] [_log()] userauth is OK
2025-12-12T11:02:59.964 [DEBUG] [Thread-68343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:02:59.964 [DEBUG] [Thread-68343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:02:59.964 [DEBUG] [Thread-68343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:02:59.964 [DEBUG] [Thread-68343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:03:00.000 [INFO] [Thread-68343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:03:00.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:03:00.653 [DEBUG] [Thread-68343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:03:00.653 [DEBUG] [Thread-68343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:03:00.654 [DEBUG] [Thread-68343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:03:00.694 [DEBUG] [Thread-68343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:03:00.694 [DEBUG] [Thread-68343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:03:00.698 [DEBUG] [Thread-68343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:03:00.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:03:00.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:03:00.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:03:00.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:03:00.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:03:00.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:03:00.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:03:00.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:03:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:03:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.376485 -999.00  +17.60  35.24     42   +4.80 1 2 2 1 1   888    0 12.16 1.99 ----- 33.4 35.2 355.2 43.0 22.8 -21.4 22.0 -20.5 21.6 -16.2 21.8 -22.1
2025-12-12T11:03:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:03:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:03:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.376485
2025-12-12T11:03:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:03:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:03:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:03:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:03:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:03:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:02:55', tmtdew=14.92, humidity=36.91, cloud=0.0, wind=33.84, temperature=18.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:02:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:03:00.727 [DEBUG] [Thread-68343] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:03:00.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:03:00.832 [DEBUG] [Thread-68346] [transport.py] [_log()] starting thread (client mode): 0xf57aa050
2025-12-12T11:03:00.833 [DEBUG] [Thread-68346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:03:00.846 [DEBUG] [Thread-68346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:03:00.847 [INFO] [Thread-68346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] client lang: <none>
2025-12-12T11:03:00.854 [DEBUG] [Thread-68346] [transport.py] [_log()] server lang: <none>
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] kex follows: False
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] Compression: none
2025-12-12T11:03:00.855 [DEBUG] [Thread-68346] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:03:00.914 [DEBUG] [Thread-68346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:03:00.914 [DEBUG] [Thread-68346] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:03:00.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:03:00.916 [DEBUG] [Thread-68346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:03:00.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:03:00.970 [DEBUG] [Thread-68346] [transport.py] [_log()] userauth is OK
2025-12-12T11:03:00.970 [DEBUG] [Thread-68346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:03:00.971 [DEBUG] [Thread-68346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:03:00.971 [DEBUG] [Thread-68346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:03:00.971 [DEBUG] [Thread-68346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:03:00.989 [INFO] [Thread-68346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:03:00.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:03:00.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:03:01.084 [DEBUG] [Thread-68348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:01.846 [DEBUG] [Thread-68346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:03:01.847 [DEBUG] [Thread-68346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:03:01.895 [DEBUG] [Thread-68346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:03:01.896 [DEBUG] [Thread-68346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:03:01.905 [DEBUG] [Thread-68346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:03:01.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:03:01.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:03:01.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:03:01.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:03:01.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:03:01.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:03:01.942 [DEBUG] [Thread-68346] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:03:10.108 [DEBUG] [Thread-68349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:11.116 [DEBUG] [Thread-68350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:19.156 [DEBUG] [Thread-68351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:23.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:23.494 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:26.175 [DEBUG] [Thread-68352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:28.187 [DEBUG] [Thread-68353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:03:31.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:03:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:03:32.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 3, 27), 14.66, 37.53, 0.0, 28.5, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:03:32.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:03:27
2025-12-12T11:03:32.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:03:32.990 [DEBUG] [Thread-68354] [transport.py] [_log()] starting thread (client mode): 0xf2d0cbe0
2025-12-12T11:03:32.990 [DEBUG] [Thread-68354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:03:33.009 [DEBUG] [Thread-68354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:03:33.009 [INFO] [Thread-68354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:03:33.012 [DEBUG] [Thread-68354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:03:33.012 [DEBUG] [Thread-68354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:03:33.012 [DEBUG] [Thread-68354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:03:33.012 [DEBUG] [Thread-68354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:03:33.012 [DEBUG] [Thread-68354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] client lang: <none>
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] server lang: <none>
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] kex follows: False
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] Compression: none
2025-12-12T11:03:33.013 [DEBUG] [Thread-68354] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:03:33.029 [DEBUG] [Thread-68354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:03:33.029 [DEBUG] [Thread-68354] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:03:33.030 [DEBUG] [Thread-68354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:03:33.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:03:33.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:03:33.030 [DEBUG] [Thread-68354] [transport.py] [_log()] userauth is OK
2025-12-12T11:03:33.031 [DEBUG] [Thread-68354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:03:33.031 [DEBUG] [Thread-68354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:03:33.031 [DEBUG] [Thread-68354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:03:33.031 [DEBUG] [Thread-68354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:03:33.046 [INFO] [Thread-68354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:03:33.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:03:33.696 [DEBUG] [Thread-68354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:03:33.696 [DEBUG] [Thread-68354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:03:33.696 [DEBUG] [Thread-68354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:03:33.738 [DEBUG] [Thread-68354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:03:33.738 [DEBUG] [Thread-68354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:03:33.740 [DEBUG] [Thread-68354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:03:33.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:03:33.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:03:33.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:03:33.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:03:33.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:03:33.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:03:33.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.377180 -999.00  +18.40  26.16     41   +5.10 1 2 1 1 1   888    0 12.56 6.71 ----- 29.4 26.2 20.4 42.2 23.2 -17.7 22.5 -20.2 21.8 -17.7 22.1 -15.4
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.377180
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:03:33.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:03:27', tmtdew=14.66, humidity=37.53, cloud=0.0, wind=28.5, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:03:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:03:33.758 [DEBUG] [Thread-68354] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:03:33.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:03:33.844 [DEBUG] [Thread-68357] [transport.py] [_log()] starting thread (client mode): 0xf2d0dd50
2025-12-12T11:03:33.844 [DEBUG] [Thread-68357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:03:33.858 [DEBUG] [Thread-68357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:03:33.858 [INFO] [Thread-68357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] client lang: <none>
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] server lang: <none>
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] kex follows: False
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] Compression: none
2025-12-12T11:03:33.866 [DEBUG] [Thread-68357] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:03:33.924 [DEBUG] [Thread-68357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:03:33.924 [DEBUG] [Thread-68357] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:03:33.924 [DEBUG] [Thread-68357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:03:33.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:03:33.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:03:33.982 [DEBUG] [Thread-68357] [transport.py] [_log()] userauth is OK
2025-12-12T11:03:33.982 [DEBUG] [Thread-68357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:03:33.983 [DEBUG] [Thread-68357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:03:33.983 [DEBUG] [Thread-68357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:03:33.983 [DEBUG] [Thread-68357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:03:33.999 [INFO] [Thread-68357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:03:34.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:03:34.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:03:34.865 [DEBUG] [Thread-68357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:03:34.866 [DEBUG] [Thread-68357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:03:34.913 [DEBUG] [Thread-68357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:03:34.913 [DEBUG] [Thread-68357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:03:34.921 [DEBUG] [Thread-68357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:03:34.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:03:34.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:03:34.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:03:34.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:03:34.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:03:34.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:03:34.953 [DEBUG] [Thread-68357] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:03:37.204 [DEBUG] [Thread-68359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:37.494 [DEBUG] [Thread-68360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:41.219 [DEBUG] [Thread-68361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:46.253 [DEBUG] [Thread-68362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:55.279 [DEBUG] [Thread-68363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:03:56.285 [DEBUG] [Thread-68364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:04.307 [DEBUG] [Thread-68365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:04:04.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:04:04.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:04:05.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 3, 59), 15.04, 36.71, 0.0, 42.89, 18.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:04:05.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:03:59
2025-12-12T11:04:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:04:05.931 [DEBUG] [Thread-68366] [transport.py] [_log()] starting thread (client mode): 0xf2d0d180
2025-12-12T11:04:05.932 [DEBUG] [Thread-68366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:04:05.952 [DEBUG] [Thread-68366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:04:05.952 [INFO] [Thread-68366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:04:05.955 [DEBUG] [Thread-68366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:04:05.955 [DEBUG] [Thread-68366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:04:05.955 [DEBUG] [Thread-68366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:04:05.955 [DEBUG] [Thread-68366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:05.955 [DEBUG] [Thread-68366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:05.955 [DEBUG] [Thread-68366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] client lang: <none>
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] server lang: <none>
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] kex follows: False
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] Compression: none
2025-12-12T11:04:05.956 [DEBUG] [Thread-68366] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:04:05.973 [DEBUG] [Thread-68366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:04:05.974 [DEBUG] [Thread-68366] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:04:05.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:04:05.974 [DEBUG] [Thread-68366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:04:05.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:04:05.976 [DEBUG] [Thread-68366] [transport.py] [_log()] userauth is OK
2025-12-12T11:04:05.976 [DEBUG] [Thread-68366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:04:05.976 [DEBUG] [Thread-68366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:04:05.976 [DEBUG] [Thread-68366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:04:05.976 [DEBUG] [Thread-68366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:04:05.990 [INFO] [Thread-68366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:04:05.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:04:06.655 [DEBUG] [Thread-68366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:04:06.656 [DEBUG] [Thread-68366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:04:06.656 [DEBUG] [Thread-68366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:04:06.697 [DEBUG] [Thread-68366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:04:06.697 [DEBUG] [Thread-68366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:04:06.700 [DEBUG] [Thread-68366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:04:06.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:04:06.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:04:06.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:04:06.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:04:06.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:04:06.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:04:06.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:04:06.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:04:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:04:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.377527 -999.00  +18.00  31.64     41   +4.90 1 2 2 1 1   888    0 12.75 11.26 ----- 33.2 31.6 352.1 56.0 23.0 -21.5 22.1 -23.2 21.5 -20.5 22.0 -22.8
2025-12-12T11:04:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:04:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:04:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.377527
2025-12-12T11:04:06.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:04:06.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:04:06.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:04:06.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:04:06.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:04:06.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:03:59', tmtdew=15.04, humidity=36.71, cloud=0.0, wind=42.89, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:03:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:04:06.729 [DEBUG] [Thread-68366] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:04:06.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:04:06.825 [DEBUG] [Thread-68369] [transport.py] [_log()] starting thread (client mode): 0xf2d0c520
2025-12-12T11:04:06.825 [DEBUG] [Thread-68369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:04:06.843 [DEBUG] [Thread-68369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:04:06.843 [INFO] [Thread-68369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:04:06.854 [DEBUG] [Thread-68369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:04:06.854 [DEBUG] [Thread-68369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] client lang: <none>
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] server lang: <none>
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] kex follows: False
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:04:06.855 [DEBUG] [Thread-68369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:04:06.856 [DEBUG] [Thread-68369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:04:06.856 [DEBUG] [Thread-68369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:04:06.856 [DEBUG] [Thread-68369] [transport.py] [_log()] Compression: none
2025-12-12T11:04:06.856 [DEBUG] [Thread-68369] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:04:06.917 [DEBUG] [Thread-68369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:04:06.918 [DEBUG] [Thread-68369] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:04:06.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:04:06.919 [DEBUG] [Thread-68369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:04:06.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:04:06.985 [DEBUG] [Thread-68369] [transport.py] [_log()] userauth is OK
2025-12-12T11:04:06.985 [DEBUG] [Thread-68369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:04:06.985 [DEBUG] [Thread-68369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:04:06.985 [DEBUG] [Thread-68369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:04:06.985 [DEBUG] [Thread-68369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:04:07.004 [INFO] [Thread-68369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:04:07.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:04:07.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:04:07.911 [DEBUG] [Thread-68369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:04:07.911 [DEBUG] [Thread-68369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:04:07.960 [DEBUG] [Thread-68369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:04:07.960 [DEBUG] [Thread-68369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:04:07.974 [DEBUG] [Thread-68369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:04:07.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:04:07.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:04:07.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:04:08.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:04:08.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:04:08.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:04:08.011 [DEBUG] [Thread-68369] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:04:11.320 [DEBUG] [Thread-68371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:13.334 [DEBUG] [Thread-68372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:22.355 [DEBUG] [Thread-68373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:23.641 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:23.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:26.368 [DEBUG] [Thread-68374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:31.386 [DEBUG] [Thread-68375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:37.549 [DEBUG] [Thread-68376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:38.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:04:38.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:04:38.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:04:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 4, 31), 15.19, 36.36, 0.0, 40.48, 18.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:04:38.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:04:31
2025-12-12T11:04:38.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:04:39.001 [DEBUG] [Thread-68377] [transport.py] [_log()] starting thread (client mode): 0xf57a9c30
2025-12-12T11:04:39.001 [DEBUG] [Thread-68377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:04:39.022 [DEBUG] [Thread-68377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:04:39.022 [INFO] [Thread-68377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:04:39.025 [DEBUG] [Thread-68377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:04:39.025 [DEBUG] [Thread-68377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:04:39.025 [DEBUG] [Thread-68377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:04:39.025 [DEBUG] [Thread-68377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:39.025 [DEBUG] [Thread-68377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] client lang: <none>
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] server lang: <none>
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] kex follows: False
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] Compression: none
2025-12-12T11:04:39.026 [DEBUG] [Thread-68377] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:04:39.044 [DEBUG] [Thread-68377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:04:39.045 [DEBUG] [Thread-68377] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:04:39.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:04:39.046 [DEBUG] [Thread-68377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:04:39.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:04:39.048 [DEBUG] [Thread-68377] [transport.py] [_log()] userauth is OK
2025-12-12T11:04:39.048 [DEBUG] [Thread-68377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:04:39.048 [DEBUG] [Thread-68377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:04:39.049 [DEBUG] [Thread-68377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:04:39.049 [DEBUG] [Thread-68377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:04:39.069 [INFO] [Thread-68377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:04:39.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:04:39.739 [DEBUG] [Thread-68377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:04:39.740 [DEBUG] [Thread-68377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:04:39.740 [DEBUG] [Thread-68377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:04:39.780 [DEBUG] [Thread-68377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:04:39.781 [DEBUG] [Thread-68377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:04:39.784 [DEBUG] [Thread-68377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:04:39.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:04:39.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:04:39.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:04:39.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:04:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:04:39.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:04:39.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:04:39.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:04:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:04:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.377875 -999.00  +17.40  29.44     43   +4.70 1 2 1 1 1   888    0 12.89 14.68 ----- 28.4 29.4 355.1 40.2 22.6 -22.7 22.0 -21.4 21.5 -17.8 21.6 -21.9
2025-12-12T11:04:39.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:04:39.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:04:39.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.377875
2025-12-12T11:04:39.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:04:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:04:39.810 [DEBUG] [Thread-68377] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:04:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:04:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:04:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:04:39.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:04:31', tmtdew=15.19, humidity=36.36, cloud=0.0, wind=40.48, temperature=18.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:04:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:04:39.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:04:39.903 [DEBUG] [Thread-68380] [transport.py] [_log()] starting thread (client mode): 0xf57ab850
2025-12-12T11:04:39.903 [DEBUG] [Thread-68380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:04:39.919 [DEBUG] [Thread-68380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:04:39.919 [INFO] [Thread-68380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] client lang: <none>
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] server lang: <none>
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] kex follows: False
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:04:39.927 [DEBUG] [Thread-68380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:04:39.928 [DEBUG] [Thread-68380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:04:39.928 [DEBUG] [Thread-68380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:04:39.928 [DEBUG] [Thread-68380] [transport.py] [_log()] Compression: none
2025-12-12T11:04:39.928 [DEBUG] [Thread-68380] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:04:39.985 [DEBUG] [Thread-68380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:04:39.985 [DEBUG] [Thread-68380] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:04:39.986 [DEBUG] [Thread-68380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:04:39.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:04:39.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:04:40.042 [DEBUG] [Thread-68380] [transport.py] [_log()] userauth is OK
2025-12-12T11:04:40.042 [DEBUG] [Thread-68380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:04:40.042 [DEBUG] [Thread-68380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:04:40.043 [DEBUG] [Thread-68380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:04:40.043 [DEBUG] [Thread-68380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:04:40.062 [INFO] [Thread-68380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:04:40.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:04:40.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:04:40.408 [DEBUG] [Thread-68382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:40.918 [DEBUG] [Thread-68380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:04:40.918 [DEBUG] [Thread-68380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:04:40.966 [DEBUG] [Thread-68380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:04:40.966 [DEBUG] [Thread-68380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:04:40.976 [DEBUG] [Thread-68380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:04:40.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:04:40.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:04:40.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:04:41.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:04:41.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:04:41.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:04:41.013 [DEBUG] [Thread-68380] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:04:41.416 [DEBUG] [Thread-68383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:49.450 [DEBUG] [Thread-68384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:56.466 [DEBUG] [Thread-68385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:04:58.482 [DEBUG] [Thread-68386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:07.503 [DEBUG] [Thread-68387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:11.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:05:11.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:05:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:05:11.514 [DEBUG] [Thread-68388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:11.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 5, 3), 15.25, 36.23, 0.0, 38.11, 18.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:05:11.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:05:03
2025-12-12T11:05:11.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:05:11.995 [DEBUG] [Thread-68389] [transport.py] [_log()] starting thread (client mode): 0xf570fd30
2025-12-12T11:05:11.995 [DEBUG] [Thread-68389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:05:12.011 [DEBUG] [Thread-68389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:05:12.011 [INFO] [Thread-68389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] client lang: <none>
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] server lang: <none>
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] kex follows: False
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:05:12.012 [DEBUG] [Thread-68389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:05:12.013 [DEBUG] [Thread-68389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:05:12.013 [DEBUG] [Thread-68389] [transport.py] [_log()] Compression: none
2025-12-12T11:05:12.013 [DEBUG] [Thread-68389] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:05:12.023 [DEBUG] [Thread-68389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:05:12.023 [DEBUG] [Thread-68389] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:05:12.024 [DEBUG] [Thread-68389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:05:12.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:05:12.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:05:12.025 [DEBUG] [Thread-68389] [transport.py] [_log()] userauth is OK
2025-12-12T11:05:12.025 [DEBUG] [Thread-68389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:05:12.025 [DEBUG] [Thread-68389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:05:12.025 [DEBUG] [Thread-68389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:05:12.026 [DEBUG] [Thread-68389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:05:12.041 [INFO] [Thread-68389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:05:12.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:05:12.641 [DEBUG] [Thread-68389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:05:12.642 [DEBUG] [Thread-68389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:05:12.642 [DEBUG] [Thread-68389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:05:12.683 [DEBUG] [Thread-68389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:05:12.683 [DEBUG] [Thread-68389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:05:12.686 [DEBUG] [Thread-68389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:05:12.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:05:12.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:05:12.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:05:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:05:12.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:05:12.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:05:12.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:05:12.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:05:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:05:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.378221 -999.00  +17.50  21.64     43   +4.90 1 2 1 1 1   888    0 12.97 18.10 ----- 36.1 21.6 0.5 33.8 22.7 -20.3 22.0 -20.7 21.4 -19.4 21.8 -16.9
2025-12-12T11:05:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:05:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:05:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.378221
2025-12-12T11:05:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:05:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:05:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:05:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:05:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:05:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:05:03', tmtdew=15.25, humidity=36.23, cloud=0.0, wind=38.11, temperature=18.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:04:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:05:12.707 [DEBUG] [Thread-68389] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:05:12.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:05:12.800 [DEBUG] [Thread-68392] [transport.py] [_log()] starting thread (client mode): 0xf570c8e0
2025-12-12T11:05:12.800 [DEBUG] [Thread-68392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:05:12.815 [DEBUG] [Thread-68392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:05:12.815 [INFO] [Thread-68392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:05:12.823 [DEBUG] [Thread-68392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] client lang: <none>
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] server lang: <none>
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] kex follows: False
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] Compression: none
2025-12-12T11:05:12.824 [DEBUG] [Thread-68392] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:05:12.881 [DEBUG] [Thread-68392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:05:12.881 [DEBUG] [Thread-68392] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:05:12.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:05:12.882 [DEBUG] [Thread-68392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:05:12.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:05:12.938 [DEBUG] [Thread-68392] [transport.py] [_log()] userauth is OK
2025-12-12T11:05:12.939 [DEBUG] [Thread-68392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:05:12.939 [DEBUG] [Thread-68392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:05:12.939 [DEBUG] [Thread-68392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:05:12.939 [DEBUG] [Thread-68392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:05:12.957 [INFO] [Thread-68392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:05:12.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:05:12.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:05:13.817 [DEBUG] [Thread-68392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:05:13.817 [DEBUG] [Thread-68392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:05:13.865 [DEBUG] [Thread-68392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:05:13.865 [DEBUG] [Thread-68392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:05:13.874 [DEBUG] [Thread-68392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:05:13.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:05:13.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:05:13.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:05:13.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:05:13.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:05:13.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:05:13.910 [DEBUG] [Thread-68392] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:05:16.530 [DEBUG] [Thread-68394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:23.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:23.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:25.551 [DEBUG] [Thread-68395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:26.556 [DEBUG] [Thread-68396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:34.589 [DEBUG] [Thread-68397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:37.592 [DEBUG] [Thread-68398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:41.609 [DEBUG] [Thread-68399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:43.620 [DEBUG] [Thread-68400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:43.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:05:43.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:05:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:05:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 5, 35), 14.68, 37.56, 0.0, 36.93, 17.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:05:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:05:35
2025-12-12T11:05:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:05:44.890 [DEBUG] [Thread-68401] [transport.py] [_log()] starting thread (client mode): 0xf570c280
2025-12-12T11:05:44.890 [DEBUG] [Thread-68401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:05:44.909 [DEBUG] [Thread-68401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:05:44.909 [INFO] [Thread-68401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] client lang: <none>
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] server lang: <none>
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] kex follows: False
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:05:44.913 [DEBUG] [Thread-68401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:05:44.914 [DEBUG] [Thread-68401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:05:44.914 [DEBUG] [Thread-68401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:05:44.914 [DEBUG] [Thread-68401] [transport.py] [_log()] Compression: none
2025-12-12T11:05:44.914 [DEBUG] [Thread-68401] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:05:44.931 [DEBUG] [Thread-68401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:05:44.932 [DEBUG] [Thread-68401] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:05:44.932 [DEBUG] [Thread-68401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:05:44.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:05:44.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:05:44.934 [DEBUG] [Thread-68401] [transport.py] [_log()] userauth is OK
2025-12-12T11:05:44.934 [DEBUG] [Thread-68401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:05:44.934 [DEBUG] [Thread-68401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:05:44.934 [DEBUG] [Thread-68401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:05:44.934 [DEBUG] [Thread-68401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:05:44.954 [INFO] [Thread-68401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:05:44.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:05:45.602 [DEBUG] [Thread-68401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:05:45.602 [DEBUG] [Thread-68401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:05:45.603 [DEBUG] [Thread-68401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:05:45.643 [DEBUG] [Thread-68401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:05:45.643 [DEBUG] [Thread-68401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:05:45.647 [DEBUG] [Thread-68401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:05:45.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:05:45.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:05:45.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:05:45.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:05:45.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:05:45.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:05:45.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:05:45.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:05:45.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:05:45.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.378511 -999.00  +17.40  37.99     43   +4.80 1 2 2 1 1   888    0 12.94 20.42 ----- 28.6 38.0 350.1 49.8 22.5 -22.6 21.8 -21.9 21.2 -18.3 21.7 -22.0
2025-12-12T11:05:45.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:05:45.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:05:45.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.378511
2025-12-12T11:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:05:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:05:35', tmtdew=14.68, humidity=37.56, cloud=0.0, wind=36.93, temperature=17.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:05:03.350', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:05:45.672 [DEBUG] [Thread-68401] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:05:45.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:05:46.803 [DEBUG] [Thread-68404] [transport.py] [_log()] starting thread (client mode): 0xf57b4040
2025-12-12T11:05:46.804 [DEBUG] [Thread-68404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:05:46.817 [DEBUG] [Thread-68404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:05:46.817 [INFO] [Thread-68404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:05:46.825 [DEBUG] [Thread-68404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:05:46.825 [DEBUG] [Thread-68404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:05:46.825 [DEBUG] [Thread-68404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] client lang: <none>
2025-12-12T11:05:46.826 [DEBUG] [Thread-68404] [transport.py] [_log()] server lang: <none>
2025-12-12T11:05:46.827 [DEBUG] [Thread-68404] [transport.py] [_log()] kex follows: False
2025-12-12T11:05:46.827 [DEBUG] [Thread-68404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:05:46.827 [DEBUG] [Thread-68404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:05:46.827 [DEBUG] [Thread-68404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:05:46.828 [DEBUG] [Thread-68404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:05:46.828 [DEBUG] [Thread-68404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:05:46.828 [DEBUG] [Thread-68404] [transport.py] [_log()] Compression: none
2025-12-12T11:05:46.828 [DEBUG] [Thread-68404] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:05:46.886 [DEBUG] [Thread-68404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:05:46.887 [DEBUG] [Thread-68404] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:05:46.887 [DEBUG] [Thread-68404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:05:46.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:05:46.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:05:46.942 [DEBUG] [Thread-68404] [transport.py] [_log()] userauth is OK
2025-12-12T11:05:46.942 [DEBUG] [Thread-68404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:05:46.942 [DEBUG] [Thread-68404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:05:46.943 [DEBUG] [Thread-68404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:05:46.943 [DEBUG] [Thread-68404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:05:46.961 [INFO] [Thread-68404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:05:46.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:05:46.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:05:47.864 [DEBUG] [Thread-68404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:05:47.865 [DEBUG] [Thread-68404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:05:47.913 [DEBUG] [Thread-68404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:05:47.913 [DEBUG] [Thread-68404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:05:47.923 [DEBUG] [Thread-68404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:05:47.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:05:47.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:05:47.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:05:47.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:05:47.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:05:47.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:05:47.959 [DEBUG] [Thread-68404] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:05:52.642 [DEBUG] [Thread-68406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:05:56.657 [DEBUG] [Thread-68407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:01.693 [DEBUG] [Thread-68408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:10.710 [DEBUG] [Thread-68409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:11.717 [DEBUG] [Thread-68410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:17.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:06:17.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:06:17.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:06:18.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 6, 7), 14.79, 37.33, 0.0, 37.99, 17.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:06:18.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:06:07
2025-12-12T11:06:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:06:18.926 [DEBUG] [Thread-68411] [transport.py] [_log()] starting thread (client mode): 0xf2d0c580
2025-12-12T11:06:18.926 [DEBUG] [Thread-68411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:06:18.948 [DEBUG] [Thread-68411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:06:18.948 [INFO] [Thread-68411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:06:18.951 [DEBUG] [Thread-68411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:06:18.951 [DEBUG] [Thread-68411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] client lang: <none>
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] server lang: <none>
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] kex follows: False
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] Compression: none
2025-12-12T11:06:18.952 [DEBUG] [Thread-68411] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:06:18.970 [DEBUG] [Thread-68411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:06:18.971 [DEBUG] [Thread-68411] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:06:18.972 [DEBUG] [Thread-68411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:06:18.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:06:18.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:06:18.974 [DEBUG] [Thread-68411] [transport.py] [_log()] userauth is OK
2025-12-12T11:06:18.974 [DEBUG] [Thread-68411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:06:18.974 [DEBUG] [Thread-68411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:06:18.974 [DEBUG] [Thread-68411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:06:18.975 [DEBUG] [Thread-68411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:06:19.010 [INFO] [Thread-68411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:06:19.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:06:19.674 [DEBUG] [Thread-68411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:06:19.674 [DEBUG] [Thread-68411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:06:19.675 [DEBUG] [Thread-68411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:06:19.715 [DEBUG] [Thread-68411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:06:19.716 [DEBUG] [Thread-68411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:06:19.719 [DEBUG] [Thread-68411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:06:19.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:06:19.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:06:19.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:06:19.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:06:19.740 [DEBUG] [Thread-68414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:19.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:06:19.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:06:19.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:06:19.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:06:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:06:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.378916 -999.00  +17.20  28.45     44   +4.80 1 2 1 1 1   888    0 13.18 24.02 ----- 31.2 28.4 0.6 37.3 22.3 -21.0 21.7 -20.8 21.2 -19.9 21.5 -18.1
2025-12-12T11:06:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:06:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:06:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.378916
2025-12-12T11:06:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:06:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:06:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:06:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:06:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:06:19.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:06:07', tmtdew=14.79, humidity=37.33, cloud=0.0, wind=37.99, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:05:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:06:19.747 [DEBUG] [Thread-68411] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:06:19.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:06:19.843 [DEBUG] [Thread-68415] [transport.py] [_log()] starting thread (client mode): 0xf57cb1f0
2025-12-12T11:06:19.843 [DEBUG] [Thread-68415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:06:19.859 [DEBUG] [Thread-68415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:06:19.859 [INFO] [Thread-68415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:06:19.867 [DEBUG] [Thread-68415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:06:19.867 [DEBUG] [Thread-68415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:06:19.867 [DEBUG] [Thread-68415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:06:19.867 [DEBUG] [Thread-68415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:19.868 [DEBUG] [Thread-68415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:19.868 [DEBUG] [Thread-68415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:19.868 [DEBUG] [Thread-68415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:19.868 [DEBUG] [Thread-68415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:06:19.868 [DEBUG] [Thread-68415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:06:19.868 [DEBUG] [Thread-68415] [transport.py] [_log()] client lang: <none>
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] server lang: <none>
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] kex follows: False
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] Compression: none
2025-12-12T11:06:19.869 [DEBUG] [Thread-68415] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:06:19.930 [DEBUG] [Thread-68415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:06:19.931 [DEBUG] [Thread-68415] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:06:19.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:06:19.932 [DEBUG] [Thread-68415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:06:19.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:06:19.990 [DEBUG] [Thread-68415] [transport.py] [_log()] userauth is OK
2025-12-12T11:06:19.990 [DEBUG] [Thread-68415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:06:19.990 [DEBUG] [Thread-68415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:06:19.991 [DEBUG] [Thread-68415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:06:19.991 [DEBUG] [Thread-68415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:06:20.009 [INFO] [Thread-68415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:06:20.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:06:20.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:06:20.858 [DEBUG] [Thread-68415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:06:20.859 [DEBUG] [Thread-68415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:06:20.907 [DEBUG] [Thread-68415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:06:20.908 [DEBUG] [Thread-68415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:06:20.916 [DEBUG] [Thread-68415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:06:20.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:06:20.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:06:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:06:20.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:06:20.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:06:20.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:06:20.954 [DEBUG] [Thread-68415] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:06:23.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:23.926 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:26.760 [DEBUG] [Thread-68417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:28.787 [DEBUG] [Thread-68418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:37.647 [DEBUG] [Thread-68419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:37.810 [DEBUG] [Thread-68420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:41.822 [DEBUG] [Thread-68421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:46.836 [DEBUG] [Thread-68422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:50.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:06:50.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:06:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:06:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 6, 39), 15.11, 36.63, 0.0, 29.76, 18.36, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:06:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:06:39
2025-12-12T11:06:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:06:51.899 [DEBUG] [Thread-68423] [transport.py] [_log()] starting thread (client mode): 0xf2d0f100
2025-12-12T11:06:51.899 [DEBUG] [Thread-68423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:06:51.921 [DEBUG] [Thread-68423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:06:51.921 [INFO] [Thread-68423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:06:51.925 [DEBUG] [Thread-68423] [transport.py] [_log()] client lang: <none>
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] server lang: <none>
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] kex follows: False
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] Compression: none
2025-12-12T11:06:51.926 [DEBUG] [Thread-68423] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:06:51.945 [DEBUG] [Thread-68423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:06:51.946 [DEBUG] [Thread-68423] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:06:51.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:06:51.948 [DEBUG] [Thread-68423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:06:51.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:06:51.950 [DEBUG] [Thread-68423] [transport.py] [_log()] userauth is OK
2025-12-12T11:06:51.950 [DEBUG] [Thread-68423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:06:51.950 [DEBUG] [Thread-68423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:06:51.951 [DEBUG] [Thread-68423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:06:51.951 [DEBUG] [Thread-68423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:06:51.989 [INFO] [Thread-68423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:06:51.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:06:52.649 [DEBUG] [Thread-68423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:06:52.649 [DEBUG] [Thread-68423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:06:52.650 [DEBUG] [Thread-68423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:06:52.691 [DEBUG] [Thread-68423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:06:52.691 [DEBUG] [Thread-68423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:06:52.693 [DEBUG] [Thread-68423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:06:52.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:06:52.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:06:52.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:06:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:06:52.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:06:52.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:06:52.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:06:52.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:06:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:06:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.379263 -999.00  +17.70  36.63     43   +5.00 1 2 2 1 1   888    0 13.20 27.28 ----- 27.2 36.6 328.2 47.7 22.2 -19.6 21.7 -21.6 21.3 -19.6 21.4 -17.4
2025-12-12T11:06:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:06:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:06:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.379263
2025-12-12T11:06:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:06:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:06:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:06:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:06:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:06:52.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:06:39', tmtdew=15.11, humidity=36.63, cloud=0.0, wind=29.76, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:06:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:06:52.715 [DEBUG] [Thread-68423] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:06:52.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:06:52.812 [DEBUG] [Thread-68426] [transport.py] [_log()] starting thread (client mode): 0xf2d0c580
2025-12-12T11:06:52.812 [DEBUG] [Thread-68426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:06:52.827 [DEBUG] [Thread-68426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:06:52.827 [INFO] [Thread-68426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] client lang: <none>
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] server lang: <none>
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] kex follows: False
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:06:52.835 [DEBUG] [Thread-68426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:06:52.836 [DEBUG] [Thread-68426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:06:52.836 [DEBUG] [Thread-68426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:06:52.836 [DEBUG] [Thread-68426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:06:52.836 [DEBUG] [Thread-68426] [transport.py] [_log()] Compression: none
2025-12-12T11:06:52.836 [DEBUG] [Thread-68426] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:06:52.893 [DEBUG] [Thread-68426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:06:52.894 [DEBUG] [Thread-68426] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:06:52.894 [DEBUG] [Thread-68426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:06:52.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:06:52.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:06:52.950 [DEBUG] [Thread-68426] [transport.py] [_log()] userauth is OK
2025-12-12T11:06:52.950 [DEBUG] [Thread-68426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:06:52.950 [DEBUG] [Thread-68426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:06:52.950 [DEBUG] [Thread-68426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:06:52.950 [DEBUG] [Thread-68426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:06:52.973 [INFO] [Thread-68426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:06:52.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:06:52.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:06:53.838 [DEBUG] [Thread-68426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:06:53.839 [DEBUG] [Thread-68426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:06:53.886 [DEBUG] [Thread-68426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:06:53.887 [DEBUG] [Thread-68426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:06:53.896 [DEBUG] [Thread-68426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:06:53.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:06:53.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:06:53.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:06:53.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:06:53.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:06:53.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:06:53.932 [DEBUG] [Thread-68426] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:06:55.858 [DEBUG] [Thread-68428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:06:56.866 [DEBUG] [Thread-68429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:04.912 [DEBUG] [Thread-68430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:11.930 [DEBUG] [Thread-68431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:13.941 [DEBUG] [Thread-68432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:22.964 [DEBUG] [Thread-68433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:23.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:07:23.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:07:23.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
2025-12-12T11:07:24.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:24.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 7, 11), 15.06, 36.73, 0.0, 31.19, 18.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:07:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:07:11
2025-12-12T11:07:24.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:07:24.954 [DEBUG] [Thread-68434] [transport.py] [_log()] starting thread (client mode): 0xf57b5cc0
2025-12-12T11:07:24.954 [DEBUG] [Thread-68434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:07:24.973 [DEBUG] [Thread-68434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:07:24.973 [INFO] [Thread-68434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] client lang: <none>
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] server lang: <none>
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] kex follows: False
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] Compression: none
2025-12-12T11:07:24.977 [DEBUG] [Thread-68434] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:07:24.991 [DEBUG] [Thread-68434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:07:24.991 [DEBUG] [Thread-68434] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:07:24.991 [DEBUG] [Thread-68434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:07:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:07:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:07:24.992 [DEBUG] [Thread-68434] [transport.py] [_log()] userauth is OK
2025-12-12T11:07:24.992 [DEBUG] [Thread-68434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:07:24.992 [DEBUG] [Thread-68434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:07:24.992 [DEBUG] [Thread-68434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:07:24.992 [DEBUG] [Thread-68434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:07:25.010 [INFO] [Thread-68434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:07:25.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:07:25.581 [DEBUG] [Thread-68434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:07:25.581 [DEBUG] [Thread-68434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:07:25.581 [DEBUG] [Thread-68434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:07:25.622 [DEBUG] [Thread-68434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:07:25.622 [DEBUG] [Thread-68434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:07:25.624 [DEBUG] [Thread-68434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:07:25.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:07:25.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:07:25.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:07:25.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:07:25.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:07:25.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:07:25.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.379957 -999.00  +18.00  28.16     42   +5.00 1 2 1 1 1   888    0 13.39 34.79 ----- 38.0 28.2 5.5 38.7 22.2 -20.4 21.7 -20.4 21.3 -18.9 21.5 -18.2
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.379957
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:07:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:07:11', tmtdew=15.06, humidity=36.73, cloud=0.0, wind=31.19, temperature=18.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:07:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:07:25.644 [DEBUG] [Thread-68434] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:07:25.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:07:25.729 [DEBUG] [Thread-68437] [transport.py] [_log()] starting thread (client mode): 0xf57b40a0
2025-12-12T11:07:25.729 [DEBUG] [Thread-68437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:07:25.746 [DEBUG] [Thread-68437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:07:25.746 [INFO] [Thread-68437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:07:25.753 [DEBUG] [Thread-68437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:07:25.753 [DEBUG] [Thread-68437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:07:25.753 [DEBUG] [Thread-68437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:07:25.753 [DEBUG] [Thread-68437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:25.753 [DEBUG] [Thread-68437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:25.753 [DEBUG] [Thread-68437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] client lang: <none>
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] server lang: <none>
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] kex follows: False
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] Compression: none
2025-12-12T11:07:25.754 [DEBUG] [Thread-68437] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:07:25.818 [DEBUG] [Thread-68437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:07:25.818 [DEBUG] [Thread-68437] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:07:25.818 [DEBUG] [Thread-68437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:07:25.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:07:25.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:07:25.873 [DEBUG] [Thread-68437] [transport.py] [_log()] userauth is OK
2025-12-12T11:07:25.873 [DEBUG] [Thread-68437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:07:25.873 [DEBUG] [Thread-68437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:07:25.873 [DEBUG] [Thread-68437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:07:25.873 [DEBUG] [Thread-68437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:07:25.891 [INFO] [Thread-68437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:07:25.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:07:25.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:07:26.789 [DEBUG] [Thread-68437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:07:26.789 [DEBUG] [Thread-68437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:07:26.836 [DEBUG] [Thread-68437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:07:26.836 [DEBUG] [Thread-68437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:07:26.845 [DEBUG] [Thread-68437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:07:26.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:07:26.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:07:26.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:07:26.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:07:26.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:07:26.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:07:26.876 [DEBUG] [Thread-68437] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:07:26.973 [DEBUG] [Thread-68439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:31.994 [DEBUG] [Thread-68440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:37.689 [DEBUG] [Thread-68441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:41.017 [DEBUG] [Thread-68442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:42.025 [DEBUG] [Thread-68443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:50.046 [DEBUG] [Thread-68444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:56.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:07:56.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:07:56.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:07:57.063 [DEBUG] [Thread-68445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:57.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 7, 43), 15.22, 36.26, 0.0, 42.31, 18.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:07:57.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:07:43
2025-12-12T11:07:57.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:07:57.865 [DEBUG] [Thread-68446] [transport.py] [_log()] starting thread (client mode): 0xf57b62c0
2025-12-12T11:07:57.865 [DEBUG] [Thread-68446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:07:57.886 [DEBUG] [Thread-68446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:07:57.886 [INFO] [Thread-68446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:07:57.889 [DEBUG] [Thread-68446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:07:57.889 [DEBUG] [Thread-68446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] client lang: <none>
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] server lang: <none>
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] kex follows: False
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:07:57.890 [DEBUG] [Thread-68446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:07:57.891 [DEBUG] [Thread-68446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:07:57.891 [DEBUG] [Thread-68446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:07:57.891 [DEBUG] [Thread-68446] [transport.py] [_log()] Compression: none
2025-12-12T11:07:57.891 [DEBUG] [Thread-68446] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:07:57.910 [DEBUG] [Thread-68446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:07:57.911 [DEBUG] [Thread-68446] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:07:57.911 [DEBUG] [Thread-68446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:07:57.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:07:57.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:07:57.913 [DEBUG] [Thread-68446] [transport.py] [_log()] userauth is OK
2025-12-12T11:07:57.914 [DEBUG] [Thread-68446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:07:57.914 [DEBUG] [Thread-68446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:07:57.914 [DEBUG] [Thread-68446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:07:57.914 [DEBUG] [Thread-68446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:07:57.940 [INFO] [Thread-68446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:07:57.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:07:58.603 [DEBUG] [Thread-68446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:07:58.603 [DEBUG] [Thread-68446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:07:58.604 [DEBUG] [Thread-68446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:07:58.644 [DEBUG] [Thread-68446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:07:58.644 [DEBUG] [Thread-68446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:07:58.648 [DEBUG] [Thread-68446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:07:58.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:07:58.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:07:58.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:07:58.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:07:58.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:07:58.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:07:58.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:07:58.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:07:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:07:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.380305 -999.00  +17.60  22.85     42   +4.70 1 2 1 1 1   888    0 13.45 39.84 ----- 32.2 22.9 7.5 43.0 22.2 -21.3 21.6 -23.0 21.1 -18.7 21.5 -21.2
2025-12-12T11:07:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:07:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:07:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.380305
2025-12-12T11:07:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:07:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:07:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:07:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:07:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:07:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:07:43', tmtdew=15.22, humidity=36.26, cloud=0.0, wind=42.31, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:07:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:07:58.675 [DEBUG] [Thread-68446] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:07:58.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:07:58.771 [DEBUG] [Thread-68449] [transport.py] [_log()] starting thread (client mode): 0xf57cb4c0
2025-12-12T11:07:58.772 [DEBUG] [Thread-68449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:07:58.785 [DEBUG] [Thread-68449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:07:58.786 [INFO] [Thread-68449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:07:58.793 [DEBUG] [Thread-68449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:07:58.794 [DEBUG] [Thread-68449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] client lang: <none>
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] server lang: <none>
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] kex follows: False
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:07:58.795 [DEBUG] [Thread-68449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:07:58.796 [DEBUG] [Thread-68449] [transport.py] [_log()] Compression: none
2025-12-12T11:07:58.796 [DEBUG] [Thread-68449] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:07:58.854 [DEBUG] [Thread-68449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:07:58.855 [DEBUG] [Thread-68449] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:07:58.855 [DEBUG] [Thread-68449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:07:58.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:07:58.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:07:58.914 [DEBUG] [Thread-68449] [transport.py] [_log()] userauth is OK
2025-12-12T11:07:58.914 [DEBUG] [Thread-68449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:07:58.914 [DEBUG] [Thread-68449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:07:58.914 [DEBUG] [Thread-68449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:07:58.914 [DEBUG] [Thread-68449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:07:58.933 [INFO] [Thread-68449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:07:58.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:07:58.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:07:59.073 [DEBUG] [Thread-68451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:07:59.796 [DEBUG] [Thread-68449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:07:59.796 [DEBUG] [Thread-68449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:07:59.844 [DEBUG] [Thread-68449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:07:59.844 [DEBUG] [Thread-68449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:07:59.853 [DEBUG] [Thread-68449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:07:59.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:07:59.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:07:59.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:07:59.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:07:59.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:07:59.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:07:59.890 [DEBUG] [Thread-68449] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:08:08.093 [DEBUG] [Thread-68452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:12.107 [DEBUG] [Thread-68453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:17.138 [DEBUG] [Thread-68454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:24.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:24.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:26.162 [DEBUG] [Thread-68455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:27.170 [DEBUG] [Thread-68456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:08:29.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:08:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:08:30.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 8, 15), 15.16, 36.41, 0.0, 40.69, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:08:30.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:08:15
2025-12-12T11:08:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:08:30.867 [DEBUG] [Thread-68457] [transport.py] [_log()] starting thread (client mode): 0xf57ca440
2025-12-12T11:08:30.868 [DEBUG] [Thread-68457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:08:30.888 [DEBUG] [Thread-68457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:08:30.888 [INFO] [Thread-68457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:08:30.891 [DEBUG] [Thread-68457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] client lang: <none>
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] server lang: <none>
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] kex follows: False
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] Compression: none
2025-12-12T11:08:30.892 [DEBUG] [Thread-68457] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:08:30.911 [DEBUG] [Thread-68457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:08:30.911 [DEBUG] [Thread-68457] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:08:30.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:08:30.913 [DEBUG] [Thread-68457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:08:30.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:08:30.915 [DEBUG] [Thread-68457] [transport.py] [_log()] userauth is OK
2025-12-12T11:08:30.915 [DEBUG] [Thread-68457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:08:30.915 [DEBUG] [Thread-68457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:08:30.915 [DEBUG] [Thread-68457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:08:30.915 [DEBUG] [Thread-68457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:08:30.941 [INFO] [Thread-68457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:08:30.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:08:31.544 [DEBUG] [Thread-68457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:08:31.544 [DEBUG] [Thread-68457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:08:31.545 [DEBUG] [Thread-68457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:08:31.585 [DEBUG] [Thread-68457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:08:31.585 [DEBUG] [Thread-68457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:08:31.589 [DEBUG] [Thread-68457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:08:31.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:08:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:08:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:08:31.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:08:31.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:08:31.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:08:31.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:08:31.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:08:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:08:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.380652 -999.00  +17.90  27.68     42   +4.90 1 2 1 1 1   888    0 13.67 43.00 ----- 35.5 27.7 35.4 45.0 22.1 -21.8 21.6 -20.9 21.1 -19.4 21.3 -21.0
2025-12-12T11:08:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:08:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:08:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.380652
2025-12-12T11:08:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:08:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:08:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:08:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:08:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:08:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:08:15', tmtdew=15.16, humidity=36.41, cloud=0.0, wind=40.69, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:08:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:08:31.617 [DEBUG] [Thread-68457] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:08:31.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:08:31.710 [DEBUG] [Thread-68460] [transport.py] [_log()] starting thread (client mode): 0xf57caec0
2025-12-12T11:08:31.710 [DEBUG] [Thread-68460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:08:31.725 [DEBUG] [Thread-68460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:08:31.725 [INFO] [Thread-68460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] client lang: <none>
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] server lang: <none>
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] kex follows: False
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:08:31.732 [DEBUG] [Thread-68460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:08:31.733 [DEBUG] [Thread-68460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:08:31.733 [DEBUG] [Thread-68460] [transport.py] [_log()] Compression: none
2025-12-12T11:08:31.733 [DEBUG] [Thread-68460] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:08:31.788 [DEBUG] [Thread-68460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:08:31.788 [DEBUG] [Thread-68460] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:08:31.788 [DEBUG] [Thread-68460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:08:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:08:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:08:31.845 [DEBUG] [Thread-68460] [transport.py] [_log()] userauth is OK
2025-12-12T11:08:31.845 [DEBUG] [Thread-68460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:08:31.845 [DEBUG] [Thread-68460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:08:31.845 [DEBUG] [Thread-68460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:08:31.845 [DEBUG] [Thread-68460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:08:31.861 [INFO] [Thread-68460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:08:31.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:08:31.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:08:32.700 [DEBUG] [Thread-68460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:08:32.700 [DEBUG] [Thread-68460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:08:32.748 [DEBUG] [Thread-68460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:08:32.748 [DEBUG] [Thread-68460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:08:32.757 [DEBUG] [Thread-68460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:08:32.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:08:32.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:08:32.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:08:32.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:08:32.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:08:32.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:08:32.795 [DEBUG] [Thread-68460] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:08:35.195 [DEBUG] [Thread-68462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:37.740 [DEBUG] [Thread-68463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:42.209 [DEBUG] [Thread-68464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:44.223 [DEBUG] [Thread-68465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:53.243 [DEBUG] [Thread-68466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:08:57.260 [DEBUG] [Thread-68467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:02.278 [DEBUG] [Thread-68468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:02.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:09:02.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:09:02.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:09:03.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 8, 47), 14.97, 36.99, 0.0, 41.38, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:09:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:08:47
2025-12-12T11:09:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:09:03.786 [DEBUG] [Thread-68469] [transport.py] [_log()] starting thread (client mode): 0xf57b7580
2025-12-12T11:09:03.786 [DEBUG] [Thread-68469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:09:03.810 [DEBUG] [Thread-68469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:09:03.810 [INFO] [Thread-68469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:03.813 [DEBUG] [Thread-68469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] client lang: <none>
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] server lang: <none>
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] kex follows: False
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] Compression: none
2025-12-12T11:09:03.814 [DEBUG] [Thread-68469] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:09:03.830 [DEBUG] [Thread-68469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:09:03.830 [DEBUG] [Thread-68469] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:09:03.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:09:03.831 [DEBUG] [Thread-68469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:09:03.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:09:03.834 [DEBUG] [Thread-68469] [transport.py] [_log()] userauth is OK
2025-12-12T11:09:03.834 [DEBUG] [Thread-68469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:09:03.834 [DEBUG] [Thread-68469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:09:03.834 [DEBUG] [Thread-68469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:09:03.834 [DEBUG] [Thread-68469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:09:03.870 [INFO] [Thread-68469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:09:03.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:09:04.552 [DEBUG] [Thread-68469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:09:04.552 [DEBUG] [Thread-68469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:09:04.552 [DEBUG] [Thread-68469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:09:04.593 [DEBUG] [Thread-68469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:09:04.593 [DEBUG] [Thread-68469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:09:04.596 [DEBUG] [Thread-68469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:09:04.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:09:04.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:09:04.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:09:04.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:09:04.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:09:04.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:09:04.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:09:04.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:09:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:09:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.380999 -999.00  +17.70  29.82     42   +4.60 1 2 1 1 1   888    0 13.85 47.51 ----- 25.9 29.8 343.1 42.8 22.0 -21.7 21.3 -23.0 20.9 -21.2 21.3 -20.2
2025-12-12T11:09:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:09:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:09:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.380999
2025-12-12T11:09:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:09:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:09:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:09:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:09:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:09:04.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:08:47', tmtdew=14.97, humidity=36.99, cloud=0.0, wind=41.38, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:08:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:09:04.621 [DEBUG] [Thread-68469] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:09:04.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:09:04.716 [DEBUG] [Thread-68472] [transport.py] [_log()] starting thread (client mode): 0xf57b5030
2025-12-12T11:09:04.716 [DEBUG] [Thread-68472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:09:04.730 [DEBUG] [Thread-68472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:09:04.730 [INFO] [Thread-68472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:04.738 [DEBUG] [Thread-68472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] client lang: <none>
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] server lang: <none>
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] kex follows: False
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:09:04.739 [DEBUG] [Thread-68472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:09:04.740 [DEBUG] [Thread-68472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:09:04.740 [DEBUG] [Thread-68472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:09:04.740 [DEBUG] [Thread-68472] [transport.py] [_log()] Compression: none
2025-12-12T11:09:04.740 [DEBUG] [Thread-68472] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:09:04.797 [DEBUG] [Thread-68472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:09:04.798 [DEBUG] [Thread-68472] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:09:04.798 [DEBUG] [Thread-68472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:09:04.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:09:04.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:09:04.853 [DEBUG] [Thread-68472] [transport.py] [_log()] userauth is OK
2025-12-12T11:09:04.854 [DEBUG] [Thread-68472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:09:04.854 [DEBUG] [Thread-68472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:09:04.854 [DEBUG] [Thread-68472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:09:04.854 [DEBUG] [Thread-68472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:09:04.873 [INFO] [Thread-68472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:09:04.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:09:04.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:09:05.794 [DEBUG] [Thread-68472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:09:05.795 [DEBUG] [Thread-68472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:09:05.843 [DEBUG] [Thread-68472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:09:05.843 [DEBUG] [Thread-68472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:09:05.852 [DEBUG] [Thread-68472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:09:05.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:09:05.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:09:05.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:09:05.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:09:05.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:09:05.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:09:05.889 [DEBUG] [Thread-68472] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:09:11.299 [DEBUG] [Thread-68474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:12.308 [DEBUG] [Thread-68475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:20.353 [DEBUG] [Thread-68476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:24.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:24.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:27.370 [DEBUG] [Thread-68477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:29.382 [DEBUG] [Thread-68478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:35.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:09:35.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:09:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:09:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 9, 19), 14.99, 36.98, 0.0, 46.16, 17.95, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:09:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:09:19
2025-12-12T11:09:36.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:09:36.869 [DEBUG] [Thread-68479] [transport.py] [_log()] starting thread (client mode): 0xf81f12d0
2025-12-12T11:09:36.870 [DEBUG] [Thread-68479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:09:36.890 [DEBUG] [Thread-68479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:09:36.890 [INFO] [Thread-68479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] client lang: <none>
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] server lang: <none>
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] kex follows: False
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:09:36.893 [DEBUG] [Thread-68479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:09:36.894 [DEBUG] [Thread-68479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:09:36.894 [DEBUG] [Thread-68479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:09:36.894 [DEBUG] [Thread-68479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:09:36.894 [DEBUG] [Thread-68479] [transport.py] [_log()] Compression: none
2025-12-12T11:09:36.894 [DEBUG] [Thread-68479] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:09:36.910 [DEBUG] [Thread-68479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:09:36.910 [DEBUG] [Thread-68479] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:09:36.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:09:36.911 [DEBUG] [Thread-68479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:09:36.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:09:36.913 [DEBUG] [Thread-68479] [transport.py] [_log()] userauth is OK
2025-12-12T11:09:36.913 [DEBUG] [Thread-68479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:09:36.913 [DEBUG] [Thread-68479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:09:36.913 [DEBUG] [Thread-68479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:09:36.913 [DEBUG] [Thread-68479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:09:36.948 [INFO] [Thread-68479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:09:36.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:09:37.614 [DEBUG] [Thread-68479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:09:37.614 [DEBUG] [Thread-68479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:09:37.615 [DEBUG] [Thread-68479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:09:37.655 [DEBUG] [Thread-68479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:09:37.655 [DEBUG] [Thread-68479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:09:37.658 [DEBUG] [Thread-68479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:09:37.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:09:37.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:09:37.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:09:37.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:09:37.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:09:37.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:09:37.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:09:37.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:09:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:09:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.381346 -999.00  +17.20  20.20     43   +4.70 1 2 1 1 1   888    0 14.29 52.36 ----- 28.6 20.2 352.1 31.9 21.8 -22.2 21.4 -19.5 21.1 -17.1 21.0 -20.5
2025-12-12T11:09:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:09:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:09:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.381346
2025-12-12T11:09:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:09:37.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:09:37.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:09:37.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:09:37.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:09:37.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:09:19', tmtdew=14.99, humidity=36.98, cloud=0.0, wind=46.16, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:09:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:09:37.682 [DEBUG] [Thread-68479] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:09:37.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:09:37.778 [DEBUG] [Thread-68482] [transport.py] [_log()] starting thread (client mode): 0xf81f18a0
2025-12-12T11:09:37.778 [DEBUG] [Thread-68482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:09:37.789 [DEBUG] [Thread-68483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:37.793 [DEBUG] [Thread-68482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:09:37.793 [INFO] [Thread-68482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] client lang: <none>
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] server lang: <none>
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] kex follows: False
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] Compression: none
2025-12-12T11:09:37.800 [DEBUG] [Thread-68482] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:09:37.857 [DEBUG] [Thread-68482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:09:37.857 [DEBUG] [Thread-68482] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:09:37.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:09:37.858 [DEBUG] [Thread-68482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:09:37.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:09:37.913 [DEBUG] [Thread-68482] [transport.py] [_log()] userauth is OK
2025-12-12T11:09:37.913 [DEBUG] [Thread-68482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:09:37.913 [DEBUG] [Thread-68482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:09:37.914 [DEBUG] [Thread-68482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:09:37.914 [DEBUG] [Thread-68482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:09:37.932 [INFO] [Thread-68482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:09:37.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:09:37.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:09:38.408 [DEBUG] [Thread-68485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:38.777 [DEBUG] [Thread-68482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:09:38.778 [DEBUG] [Thread-68482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:09:38.825 [DEBUG] [Thread-68482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:09:38.826 [DEBUG] [Thread-68482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:09:38.834 [DEBUG] [Thread-68482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:09:38.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:09:38.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:09:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:09:38.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:09:38.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:09:38.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:09:38.868 [DEBUG] [Thread-68482] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:09:42.420 [DEBUG] [Thread-68486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:47.454 [DEBUG] [Thread-68487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:56.475 [DEBUG] [Thread-68488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:09:57.481 [DEBUG] [Thread-68489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:05.498 [DEBUG] [Thread-68490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:10:08.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:10:08.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:10:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 9, 51), 14.47, 38.11, 0.0, 39.67, 17.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:10:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:09:51
2025-12-12T11:10:09.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:10:09.851 [DEBUG] [Thread-68491] [transport.py] [_log()] starting thread (client mode): 0xf57cba90
2025-12-12T11:10:09.851 [DEBUG] [Thread-68491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:10:09.873 [DEBUG] [Thread-68491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:10:09.873 [INFO] [Thread-68491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:10:09.876 [DEBUG] [Thread-68491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] client lang: <none>
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] server lang: <none>
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] kex follows: False
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:10:09.877 [DEBUG] [Thread-68491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:10:09.878 [DEBUG] [Thread-68491] [transport.py] [_log()] Compression: none
2025-12-12T11:10:09.878 [DEBUG] [Thread-68491] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:10:09.893 [DEBUG] [Thread-68491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:10:09.893 [DEBUG] [Thread-68491] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:10:09.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:10:09.894 [DEBUG] [Thread-68491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:10:09.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:10:09.896 [DEBUG] [Thread-68491] [transport.py] [_log()] userauth is OK
2025-12-12T11:10:09.896 [DEBUG] [Thread-68491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:10:09.897 [DEBUG] [Thread-68491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:10:09.897 [DEBUG] [Thread-68491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:10:09.897 [DEBUG] [Thread-68491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:10:09.914 [INFO] [Thread-68491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:10:09.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:10:12.516 [DEBUG] [Thread-68493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:14.528 [DEBUG] [Thread-68494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:17.075 [DEBUG] [Thread-68491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:10:17.075 [DEBUG] [Thread-68491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:10:17.075 [DEBUG] [Thread-68491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:10:17.116 [DEBUG] [Thread-68491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:10:17.116 [DEBUG] [Thread-68491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:10:17.120 [DEBUG] [Thread-68491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:10:17.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:10:17.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:10:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:10:17.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:10:17.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:10:17.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:10:17.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:10:17.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:10:17.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:10:17.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.381693 -999.00  +17.40  29.69     43   +4.80 1 2 1 1 1   888    0 14.09 51.58 ----- 29.9 29.7 14.0 39.2 21.9 -19.1 21.4 -20.3 21.1 -16.5 21.2 -17.7
2025-12-12T11:10:17.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:10:17.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:10:17.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.381693
2025-12-12T11:10:17.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:10:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:10:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:10:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:10:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:10:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:09:51', tmtdew=14.47, humidity=38.11, cloud=0.0, wind=39.67, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:09:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:10:17.254 [DEBUG] [Thread-68491] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:10:17.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:10:17.352 [DEBUG] [Thread-68496] [transport.py] [_log()] starting thread (client mode): 0xf570c3a0
2025-12-12T11:10:17.352 [DEBUG] [Thread-68496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:10:17.367 [DEBUG] [Thread-68496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:10:17.367 [INFO] [Thread-68496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:10:17.374 [DEBUG] [Thread-68496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] client lang: <none>
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] server lang: <none>
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] kex follows: False
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] Compression: none
2025-12-12T11:10:17.375 [DEBUG] [Thread-68496] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:10:17.433 [DEBUG] [Thread-68496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:10:17.434 [DEBUG] [Thread-68496] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:10:17.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:10:17.435 [DEBUG] [Thread-68496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:10:17.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:10:17.490 [DEBUG] [Thread-68496] [transport.py] [_log()] userauth is OK
2025-12-12T11:10:17.490 [DEBUG] [Thread-68496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:10:17.490 [DEBUG] [Thread-68496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:10:17.490 [DEBUG] [Thread-68496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:10:17.490 [DEBUG] [Thread-68496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:10:17.509 [INFO] [Thread-68496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:10:17.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:10:17.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:10:18.357 [DEBUG] [Thread-68496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:10:18.358 [DEBUG] [Thread-68496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:10:18.405 [DEBUG] [Thread-68496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:10:18.405 [DEBUG] [Thread-68496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:10:18.415 [DEBUG] [Thread-68496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:10:18.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:10:18.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:10:18.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:10:18.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:10:18.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:10:18.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:10:18.459 [DEBUG] [Thread-68496] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:10:23.552 [DEBUG] [Thread-68498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:24.506 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:24.507 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:27.565 [DEBUG] [Thread-68499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:32.607 [DEBUG] [Thread-68500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:37.817 [DEBUG] [Thread-68501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:41.625 [DEBUG] [Thread-68502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:42.632 [DEBUG] [Thread-68503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:48.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:10:48.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:10:48.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:10:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 10, 23), 14.45, 38.23, 0.0, 41.08, 17.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:10:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:10:23
2025-12-12T11:10:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:10:49.449 [DEBUG] [Thread-68504] [transport.py] [_log()] starting thread (client mode): 0xf570d210
2025-12-12T11:10:49.449 [DEBUG] [Thread-68504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:10:49.470 [DEBUG] [Thread-68504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:10:49.470 [INFO] [Thread-68504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:10:49.473 [DEBUG] [Thread-68504] [transport.py] [_log()] client lang: <none>
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] server lang: <none>
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] kex follows: False
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] Compression: none
2025-12-12T11:10:49.474 [DEBUG] [Thread-68504] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:10:49.491 [DEBUG] [Thread-68504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:10:49.491 [DEBUG] [Thread-68504] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:10:49.492 [DEBUG] [Thread-68504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:10:49.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:10:49.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:10:49.494 [DEBUG] [Thread-68504] [transport.py] [_log()] userauth is OK
2025-12-12T11:10:49.494 [DEBUG] [Thread-68504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:10:49.494 [DEBUG] [Thread-68504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:10:49.494 [DEBUG] [Thread-68504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:10:49.494 [DEBUG] [Thread-68504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:10:49.519 [INFO] [Thread-68504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:10:49.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:10:50.131 [DEBUG] [Thread-68504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:10:50.132 [DEBUG] [Thread-68504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:10:50.132 [DEBUG] [Thread-68504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:10:50.172 [DEBUG] [Thread-68504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:10:50.173 [DEBUG] [Thread-68504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:10:50.176 [DEBUG] [Thread-68504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:10:50.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:10:50.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:10:50.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:10:50.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:10:50.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:10:50.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:10:50.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:10:50.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:10:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:10:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.381983 -999.00  +17.10  24.09     43   +4.70 1 2 1 1 1   888    0 13.93 46.80 ----- 26.9 24.1 3.1 35.0 22.1 -18.3 21.4 -19.5 21.2 -16.8 21.3 -16.6
2025-12-12T11:10:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:10:50.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:10:50.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.381983
2025-12-12T11:10:50.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:10:50.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:10:50.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:10:50.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:10:50.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:10:50.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:10:23', tmtdew=14.45, humidity=38.23, cloud=0.0, wind=41.08, temperature=17.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:10:03.331', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:10:50.206 [DEBUG] [Thread-68504] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:10:50.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:10:50.302 [DEBUG] [Thread-68507] [transport.py] [_log()] starting thread (client mode): 0xf81f3e50
2025-12-12T11:10:50.302 [DEBUG] [Thread-68507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:10:50.317 [DEBUG] [Thread-68507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:10:50.317 [INFO] [Thread-68507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:10:50.324 [DEBUG] [Thread-68507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] client lang: <none>
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] server lang: <none>
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] kex follows: False
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] Compression: none
2025-12-12T11:10:50.325 [DEBUG] [Thread-68507] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:10:50.382 [DEBUG] [Thread-68507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:10:50.383 [DEBUG] [Thread-68507] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:10:50.383 [DEBUG] [Thread-68507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:10:50.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:10:50.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:10:50.438 [DEBUG] [Thread-68507] [transport.py] [_log()] userauth is OK
2025-12-12T11:10:50.438 [DEBUG] [Thread-68507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:10:50.438 [DEBUG] [Thread-68507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:10:50.438 [DEBUG] [Thread-68507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:10:50.439 [DEBUG] [Thread-68507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:10:50.457 [INFO] [Thread-68507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:10:50.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:10:50.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:10:50.658 [DEBUG] [Thread-68509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:51.324 [DEBUG] [Thread-68507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:10:51.324 [DEBUG] [Thread-68507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:10:51.372 [DEBUG] [Thread-68507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:10:51.373 [DEBUG] [Thread-68507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:10:51.382 [DEBUG] [Thread-68507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:10:51.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:10:51.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:10:51.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:10:51.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:10:51.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:10:51.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:10:51.418 [DEBUG] [Thread-68507] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:10:57.676 [DEBUG] [Thread-68510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:10:59.695 [DEBUG] [Thread-68511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:08.717 [DEBUG] [Thread-68512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:12.731 [DEBUG] [Thread-68513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:17.746 [DEBUG] [Thread-68514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:21.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:11:21.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:11:21.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:11:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 10, 55), 14.68, 37.6, 0.0, 33.79, 18.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:11:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:10:55
2025-12-12T11:11:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:11:22.397 [DEBUG] [Thread-68515] [transport.py] [_log()] starting thread (client mode): 0xf57b7eb0
2025-12-12T11:11:22.397 [DEBUG] [Thread-68515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:11:22.415 [DEBUG] [Thread-68515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:11:22.415 [INFO] [Thread-68515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:11:22.416 [DEBUG] [Thread-68515] [transport.py] [_log()] client lang: <none>
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] server lang: <none>
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] kex follows: False
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] Compression: none
2025-12-12T11:11:22.417 [DEBUG] [Thread-68515] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:11:22.426 [DEBUG] [Thread-68515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:11:22.427 [DEBUG] [Thread-68515] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:11:22.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:11:22.428 [DEBUG] [Thread-68515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:11:22.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:11:22.430 [DEBUG] [Thread-68515] [transport.py] [_log()] userauth is OK
2025-12-12T11:11:22.430 [DEBUG] [Thread-68515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:11:22.430 [DEBUG] [Thread-68515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:11:22.430 [DEBUG] [Thread-68515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:11:22.431 [DEBUG] [Thread-68515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:11:22.452 [INFO] [Thread-68515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:11:22.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:11:23.246 [DEBUG] [Thread-68515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:11:23.246 [DEBUG] [Thread-68515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:11:23.246 [DEBUG] [Thread-68515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:11:23.287 [DEBUG] [Thread-68515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:11:23.287 [DEBUG] [Thread-68515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:11:23.291 [DEBUG] [Thread-68515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:11:23.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:11:23.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:11:23.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:11:23.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:11:23.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:11:23.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:11:23.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:11:23.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:11:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:11:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.382388 -999.00  +17.10  24.00     44   +4.80 1 2 1 1 1   888    0 13.89 46.32 ----- 29.3 24.0 8.2 38.9 22.1 -18.3 21.7 -19.6 21.2 -15.5 21.4 -18.4
2025-12-12T11:11:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:11:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:11:23.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.382388
2025-12-12T11:11:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:11:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:11:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:11:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:11:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:11:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:10:55', tmtdew=14.68, humidity=37.6, cloud=0.0, wind=33.79, temperature=18.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:10:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:11:23.319 [DEBUG] [Thread-68515] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:11:23.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:11:23.410 [DEBUG] [Thread-68518] [transport.py] [_log()] starting thread (client mode): 0xf81f3850
2025-12-12T11:11:23.410 [DEBUG] [Thread-68518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:11:23.425 [DEBUG] [Thread-68518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:11:23.425 [INFO] [Thread-68518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:11:23.433 [DEBUG] [Thread-68518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] client lang: <none>
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] server lang: <none>
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] kex follows: False
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] Compression: none
2025-12-12T11:11:23.434 [DEBUG] [Thread-68518] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:11:23.494 [DEBUG] [Thread-68518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:11:23.495 [DEBUG] [Thread-68518] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:11:23.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:11:23.496 [DEBUG] [Thread-68518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:11:23.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:11:23.550 [DEBUG] [Thread-68518] [transport.py] [_log()] userauth is OK
2025-12-12T11:11:23.550 [DEBUG] [Thread-68518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:11:23.550 [DEBUG] [Thread-68518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:11:23.550 [DEBUG] [Thread-68518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:11:23.550 [DEBUG] [Thread-68518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:11:23.576 [INFO] [Thread-68518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:11:23.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:11:23.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:11:24.460 [DEBUG] [Thread-68518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:11:24.460 [DEBUG] [Thread-68518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:11:24.507 [DEBUG] [Thread-68518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:11:24.508 [DEBUG] [Thread-68518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:11:24.517 [DEBUG] [Thread-68518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:11:24.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:11:24.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:11:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:11:24.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:11:24.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:11:24.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:11:24.553 [DEBUG] [Thread-68518] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:11:24.647 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:24.648 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:26.767 [DEBUG] [Thread-68520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:27.775 [DEBUG] [Thread-68521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:35.814 [DEBUG] [Thread-68522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:37.871 [DEBUG] [Thread-68523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:42.831 [DEBUG] [Thread-68524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:44.842 [DEBUG] [Thread-68525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:53.859 [DEBUG] [Thread-68526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:11:54.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:11:54.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:11:54.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:11:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 11, 27), 14.92, 37.07, 0.0, 33.65, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:11:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:11:27
2025-12-12T11:11:55.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:11:55.577 [DEBUG] [Thread-68527] [transport.py] [_log()] starting thread (client mode): 0xf81f2e60
2025-12-12T11:11:55.577 [DEBUG] [Thread-68527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:11:55.597 [DEBUG] [Thread-68527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:11:55.597 [INFO] [Thread-68527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] client lang: <none>
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] server lang: <none>
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] kex follows: False
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] Compression: none
2025-12-12T11:11:55.601 [DEBUG] [Thread-68527] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:11:55.618 [DEBUG] [Thread-68527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:11:55.618 [DEBUG] [Thread-68527] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:11:55.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:11:55.618 [DEBUG] [Thread-68527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:11:55.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:11:55.619 [DEBUG] [Thread-68527] [transport.py] [_log()] userauth is OK
2025-12-12T11:11:55.619 [DEBUG] [Thread-68527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:11:55.619 [DEBUG] [Thread-68527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:11:55.619 [DEBUG] [Thread-68527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:11:55.619 [DEBUG] [Thread-68527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:11:55.629 [INFO] [Thread-68527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:11:55.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:11:56.273 [DEBUG] [Thread-68527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:11:56.273 [DEBUG] [Thread-68527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:11:56.273 [DEBUG] [Thread-68527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:11:56.314 [DEBUG] [Thread-68527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:11:56.314 [DEBUG] [Thread-68527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:11:56.316 [DEBUG] [Thread-68527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:11:56.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:11:56.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:11:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:11:56.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:11:56.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:11:56.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:11:56.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.383082 -999.00  +18.20  28.14     42   +5.30 1 2 1 1 1   888    0 13.70 40.15 ----- 22.0 28.1 352.8 40.7 22.7 -18.2 22.1 -16.3 21.7 -15.4 21.8 -15.3
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.383082
2025-12-12T11:11:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:11:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:11:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:11:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:11:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:11:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:11:27', tmtdew=14.92, humidity=37.07, cloud=0.0, wind=33.65, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:11:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:11:56.336 [DEBUG] [Thread-68527] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:11:56.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:11:56.423 [DEBUG] [Thread-68530] [transport.py] [_log()] starting thread (client mode): 0xf81f3940
2025-12-12T11:11:56.423 [DEBUG] [Thread-68530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:11:56.438 [DEBUG] [Thread-68530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:11:56.438 [INFO] [Thread-68530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:11:56.445 [DEBUG] [Thread-68530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:11:56.445 [DEBUG] [Thread-68530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:11:56.445 [DEBUG] [Thread-68530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:11:56.445 [DEBUG] [Thread-68530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:56.445 [DEBUG] [Thread-68530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:11:56.445 [DEBUG] [Thread-68530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] client lang: <none>
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] server lang: <none>
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] kex follows: False
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] Compression: none
2025-12-12T11:11:56.446 [DEBUG] [Thread-68530] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:11:56.504 [DEBUG] [Thread-68530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:11:56.504 [DEBUG] [Thread-68530] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:11:56.504 [DEBUG] [Thread-68530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:11:56.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:11:56.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:11:56.561 [DEBUG] [Thread-68530] [transport.py] [_log()] userauth is OK
2025-12-12T11:11:56.561 [DEBUG] [Thread-68530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:11:56.561 [DEBUG] [Thread-68530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:11:56.561 [DEBUG] [Thread-68530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:11:56.561 [DEBUG] [Thread-68530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:11:56.575 [INFO] [Thread-68530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:11:56.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:11:56.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:11:57.417 [DEBUG] [Thread-68530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:11:57.417 [DEBUG] [Thread-68530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:11:57.464 [DEBUG] [Thread-68530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:11:57.464 [DEBUG] [Thread-68530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:11:57.473 [DEBUG] [Thread-68530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:11:57.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:11:57.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:11:57.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:11:57.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:11:57.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:11:57.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:11:57.504 [DEBUG] [Thread-68530] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:11:57.867 [DEBUG] [Thread-68532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:02.886 [DEBUG] [Thread-68533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:11.909 [DEBUG] [Thread-68534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:12.915 [DEBUG] [Thread-68535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:20.941 [DEBUG] [Thread-68536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:24.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:24.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:27.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:12:27.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:12:27.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:12:27.956 [DEBUG] [Thread-68537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:28.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 11, 59), 15.49, 35.92, 0.0, 42.13, 18.98, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:12:28.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:11:59
2025-12-12T11:12:28.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:12:28.504 [DEBUG] [Thread-68538] [transport.py] [_log()] starting thread (client mode): 0xf57b76d0
2025-12-12T11:12:28.504 [DEBUG] [Thread-68538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:12:28.519 [DEBUG] [Thread-68538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:12:28.519 [INFO] [Thread-68538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:12:28.522 [DEBUG] [Thread-68538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:12:28.522 [DEBUG] [Thread-68538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:12:28.522 [DEBUG] [Thread-68538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:12:28.522 [DEBUG] [Thread-68538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:12:28.522 [DEBUG] [Thread-68538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] client lang: <none>
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] server lang: <none>
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] kex follows: False
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] Compression: none
2025-12-12T11:12:28.523 [DEBUG] [Thread-68538] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:12:28.540 [DEBUG] [Thread-68538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:12:28.541 [DEBUG] [Thread-68538] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:12:28.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:12:28.542 [DEBUG] [Thread-68538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:12:28.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:12:28.544 [DEBUG] [Thread-68538] [transport.py] [_log()] userauth is OK
2025-12-12T11:12:28.544 [DEBUG] [Thread-68538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:12:28.544 [DEBUG] [Thread-68538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:12:28.544 [DEBUG] [Thread-68538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:12:28.544 [DEBUG] [Thread-68538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:12:28.581 [INFO] [Thread-68538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:12:28.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:12:29.217 [DEBUG] [Thread-68538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:12:29.217 [DEBUG] [Thread-68538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:12:29.218 [DEBUG] [Thread-68538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:12:29.258 [DEBUG] [Thread-68538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:12:29.259 [DEBUG] [Thread-68538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:12:29.262 [DEBUG] [Thread-68538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:12:29.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:12:29.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:12:29.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:12:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:12:29.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:12:29.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:12:29.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:12:29.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:12:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:12:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.383430 -999.00  +18.60  27.35     40   +4.80 1 2 1 1 1   888    0 13.65 42.15 ----- 28.3 27.4 351.0 44.4 23.1 -17.5 22.4 -18.8 21.8 -17.6 22.2 -15.0
2025-12-12T11:12:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:12:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:12:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.383430
2025-12-12T11:12:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:12:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:12:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:12:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:12:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:12:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:11:59', tmtdew=15.49, humidity=35.92, cloud=0.0, wind=42.13, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:12:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:12:29.294 [DEBUG] [Thread-68538] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:12:29.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:12:29.393 [DEBUG] [Thread-68541] [transport.py] [_log()] starting thread (client mode): 0xf57b6740
2025-12-12T11:12:29.393 [DEBUG] [Thread-68541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:12:29.407 [DEBUG] [Thread-68541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:12:29.408 [INFO] [Thread-68541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:12:29.415 [DEBUG] [Thread-68541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:12:29.416 [DEBUG] [Thread-68541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] client lang: <none>
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] server lang: <none>
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] kex follows: False
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:12:29.417 [DEBUG] [Thread-68541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:12:29.418 [DEBUG] [Thread-68541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:12:29.418 [DEBUG] [Thread-68541] [transport.py] [_log()] Compression: none
2025-12-12T11:12:29.418 [DEBUG] [Thread-68541] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:12:29.475 [DEBUG] [Thread-68541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:12:29.475 [DEBUG] [Thread-68541] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:12:29.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:12:29.477 [DEBUG] [Thread-68541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:12:29.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:12:29.533 [DEBUG] [Thread-68541] [transport.py] [_log()] userauth is OK
2025-12-12T11:12:29.534 [DEBUG] [Thread-68541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:12:29.534 [DEBUG] [Thread-68541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:12:29.534 [DEBUG] [Thread-68541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:12:29.534 [DEBUG] [Thread-68541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:12:29.556 [INFO] [Thread-68541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:12:29.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:12:29.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:12:29.966 [DEBUG] [Thread-68543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:30.435 [DEBUG] [Thread-68541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:12:30.435 [DEBUG] [Thread-68541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:12:30.485 [DEBUG] [Thread-68541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:12:30.485 [DEBUG] [Thread-68541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:12:30.494 [DEBUG] [Thread-68541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:12:30.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:12:30.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:12: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') -> 00000000
2025-12-12T11:12:30.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:12:30.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:12:30.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:12:30.529 [DEBUG] [Thread-68541] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:12:37.915 [DEBUG] [Thread-68544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:38.987 [DEBUG] [Thread-68545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:43.000 [DEBUG] [Thread-68546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:48.031 [DEBUG] [Thread-68547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:57.053 [DEBUG] [Thread-68548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:12:58.069 [DEBUG] [Thread-68549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:00.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:13:00.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:13:00.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:13:01.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 12, 31), 15.82, 35.2, 0.0, 36.52, 19.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:13:01.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:12:31
2025-12-12T11:13:01.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:13:01.499 [DEBUG] [Thread-68550] [transport.py] [_log()] starting thread (client mode): 0xf57b4d00
2025-12-12T11:13:01.499 [DEBUG] [Thread-68550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:13:01.518 [DEBUG] [Thread-68550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:13:01.519 [INFO] [Thread-68550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] client lang: <none>
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] server lang: <none>
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] kex follows: False
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:13:01.522 [DEBUG] [Thread-68550] [transport.py] [_log()] Compression: none
2025-12-12T11:13:01.523 [DEBUG] [Thread-68550] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:13:01.540 [DEBUG] [Thread-68550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:13:01.541 [DEBUG] [Thread-68550] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:13:01.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:13:01.542 [DEBUG] [Thread-68550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:13:01.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:13:01.544 [DEBUG] [Thread-68550] [transport.py] [_log()] userauth is OK
2025-12-12T11:13:01.544 [DEBUG] [Thread-68550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:13:01.544 [DEBUG] [Thread-68550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:13:01.545 [DEBUG] [Thread-68550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:13:01.545 [DEBUG] [Thread-68550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:13:01.569 [INFO] [Thread-68550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:13:01.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:13:02.214 [DEBUG] [Thread-68550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:13:02.214 [DEBUG] [Thread-68550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:13:02.214 [DEBUG] [Thread-68550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:13:02.255 [DEBUG] [Thread-68550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:13:02.256 [DEBUG] [Thread-68550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:13:02.259 [DEBUG] [Thread-68550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:13:02.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:13:02.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:13:02.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:13:02.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:13:02.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:13:02.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:13:02.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:13:02.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:13:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:13:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.383777 -999.00  +17.90  29.34     41   +4.70 1 2 1 1 1   888    0 13.94 44.89 ----- 22.4 29.3 10.6 45.0 23.1 -19.8 22.3 -18.7 21.9 -16.4 22.1 -16.1
2025-12-12T11:13:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:13:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:13:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.383777
2025-12-12T11:13:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:13:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:13:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:13:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:13:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:13:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:12:31', tmtdew=15.82, humidity=35.2, cloud=0.0, wind=36.52, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:12:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:13:02.283 [DEBUG] [Thread-68550] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:13:02.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:13:02.379 [DEBUG] [Thread-68553] [transport.py] [_log()] starting thread (client mode): 0xf81f2bc0
2025-12-12T11:13:02.380 [DEBUG] [Thread-68553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:13:02.395 [DEBUG] [Thread-68553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:13:02.395 [INFO] [Thread-68553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] client lang: <none>
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] server lang: <none>
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] kex follows: False
2025-12-12T11:13:02.403 [DEBUG] [Thread-68553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:13:02.404 [DEBUG] [Thread-68553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:13:02.404 [DEBUG] [Thread-68553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:13:02.404 [DEBUG] [Thread-68553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:13:02.404 [DEBUG] [Thread-68553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:13:02.404 [DEBUG] [Thread-68553] [transport.py] [_log()] Compression: none
2025-12-12T11:13:02.404 [DEBUG] [Thread-68553] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:13:02.465 [DEBUG] [Thread-68553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:13:02.466 [DEBUG] [Thread-68553] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:13:02.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:13:02.467 [DEBUG] [Thread-68553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:13:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:13:02.525 [DEBUG] [Thread-68553] [transport.py] [_log()] userauth is OK
2025-12-12T11:13:02.525 [DEBUG] [Thread-68553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:13:02.525 [DEBUG] [Thread-68553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:13:02.525 [DEBUG] [Thread-68553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:13:02.525 [DEBUG] [Thread-68553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:13:02.545 [INFO] [Thread-68553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:13:02.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:13:02.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:13:03.416 [DEBUG] [Thread-68553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:13:03.416 [DEBUG] [Thread-68553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:13:03.464 [DEBUG] [Thread-68553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:13:03.464 [DEBUG] [Thread-68553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:13:03.476 [DEBUG] [Thread-68553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:13:03.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:13:03.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:13:03.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:13:03.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:13:03.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:13:03.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:13:03.510 [DEBUG] [Thread-68553] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:13:06.092 [DEBUG] [Thread-68555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:13.108 [DEBUG] [Thread-68556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:15.122 [DEBUG] [Thread-68557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:24.144 [DEBUG] [Thread-68558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:24.932 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:24.933 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:28.158 [DEBUG] [Thread-68559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:33.178 [DEBUG] [Thread-68560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:13:33.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:13:33.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:13:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 13, 3), 15.89, 35.02, 0.0, 38.5, 19.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:13:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:13:03
2025-12-12T11:13:34.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:13:34.488 [DEBUG] [Thread-68561] [transport.py] [_log()] starting thread (client mode): 0xf81f2650
2025-12-12T11:13:34.488 [DEBUG] [Thread-68561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:13:34.509 [DEBUG] [Thread-68561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:13:34.509 [INFO] [Thread-68561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:13:34.512 [DEBUG] [Thread-68561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] client lang: <none>
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] server lang: <none>
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] kex follows: False
2025-12-12T11:13:34.513 [DEBUG] [Thread-68561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:13:34.514 [DEBUG] [Thread-68561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:13:34.514 [DEBUG] [Thread-68561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:13:34.514 [DEBUG] [Thread-68561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:13:34.514 [DEBUG] [Thread-68561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:13:34.514 [DEBUG] [Thread-68561] [transport.py] [_log()] Compression: none
2025-12-12T11:13:34.514 [DEBUG] [Thread-68561] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:13:34.532 [DEBUG] [Thread-68561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:13:34.533 [DEBUG] [Thread-68561] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:13:34.534 [DEBUG] [Thread-68561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:13:34.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:13:34.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:13:34.536 [DEBUG] [Thread-68561] [transport.py] [_log()] userauth is OK
2025-12-12T11:13:34.536 [DEBUG] [Thread-68561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:13:34.536 [DEBUG] [Thread-68561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:13:34.536 [DEBUG] [Thread-68561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:13:34.536 [DEBUG] [Thread-68561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:13:34.561 [INFO] [Thread-68561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:13:34.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:13:35.148 [DEBUG] [Thread-68561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:13:35.148 [DEBUG] [Thread-68561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:13:35.148 [DEBUG] [Thread-68561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:13:35.189 [DEBUG] [Thread-68561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:13:35.190 [DEBUG] [Thread-68561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:13:35.193 [DEBUG] [Thread-68561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:13:35.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:13:35.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:13:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:13:35.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:13:35.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:13:35.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:13:35.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:13:35.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:13:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:13:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.384124 -999.00  +17.90  24.67     42   +4.90 1 2 1 1 1   888    0 14.23 56.20 ----- 29.5 24.7 341.3 33.9 23.2 -18.0 22.5 -18.3 21.9 -17.5 22.2 -16.1
2025-12-12T11:13:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:13:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:13:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.384124
2025-12-12T11:13:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:13:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:13:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:13:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:13:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:13:35.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:13:03', tmtdew=15.89, humidity=35.02, cloud=0.0, wind=38.5, temperature=19.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:13:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:13:35.221 [DEBUG] [Thread-68561] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:13:35.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:13:35.319 [DEBUG] [Thread-68564] [transport.py] [_log()] starting thread (client mode): 0xf81f10f0
2025-12-12T11:13:35.319 [DEBUG] [Thread-68564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:13:35.333 [DEBUG] [Thread-68564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:13:35.333 [INFO] [Thread-68564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:13:35.345 [DEBUG] [Thread-68564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] client lang: <none>
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] server lang: <none>
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] kex follows: False
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:13:35.346 [DEBUG] [Thread-68564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:13:35.347 [DEBUG] [Thread-68564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:13:35.347 [DEBUG] [Thread-68564] [transport.py] [_log()] Compression: none
2025-12-12T11:13:35.347 [DEBUG] [Thread-68564] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:13:35.401 [DEBUG] [Thread-68564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:13:35.402 [DEBUG] [Thread-68564] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:13:35.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:13:35.403 [DEBUG] [Thread-68564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:13:35.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:13:35.457 [DEBUG] [Thread-68564] [transport.py] [_log()] userauth is OK
2025-12-12T11:13:35.458 [DEBUG] [Thread-68564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:13:35.458 [DEBUG] [Thread-68564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:13:35.458 [DEBUG] [Thread-68564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:13:35.458 [DEBUG] [Thread-68564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:13:35.476 [INFO] [Thread-68564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:13:35.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:13:35.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:13:36.315 [DEBUG] [Thread-68564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:13:36.315 [DEBUG] [Thread-68564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:13:36.363 [DEBUG] [Thread-68564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:13:36.363 [DEBUG] [Thread-68564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:13:36.371 [DEBUG] [Thread-68564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:13:36.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:13:36.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:13:36.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:13:36.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:13:36.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:13:36.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:13:36.403 [DEBUG] [Thread-68564] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:13:37.963 [DEBUG] [Thread-68566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:42.200 [DEBUG] [Thread-68567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:43.208 [DEBUG] [Thread-68568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:51.252 [DEBUG] [Thread-68569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:13:58.267 [DEBUG] [Thread-68570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:00.280 [DEBUG] [Thread-68571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:14:06.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:14:06.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:14:07.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 13, 35), 15.74, 35.42, 0.0, 24.37, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:14:07.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:13:35
2025-12-12T11:14:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:14:07.382 [DEBUG] [Thread-68572] [transport.py] [_log()] starting thread (client mode): 0xf57c9000
2025-12-12T11:14:07.382 [DEBUG] [Thread-68572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:14:07.402 [DEBUG] [Thread-68572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:14:07.402 [INFO] [Thread-68572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:14:07.405 [DEBUG] [Thread-68572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:14:07.405 [DEBUG] [Thread-68572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:14:07.405 [DEBUG] [Thread-68572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:14:07.405 [DEBUG] [Thread-68572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:07.405 [DEBUG] [Thread-68572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] client lang: <none>
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] server lang: <none>
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] kex follows: False
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] Compression: none
2025-12-12T11:14:07.406 [DEBUG] [Thread-68572] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:14:07.422 [DEBUG] [Thread-68572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:14:07.423 [DEBUG] [Thread-68572] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:14:07.423 [DEBUG] [Thread-68572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:14:07.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:14:07.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:14:07.425 [DEBUG] [Thread-68572] [transport.py] [_log()] userauth is OK
2025-12-12T11:14:07.425 [DEBUG] [Thread-68572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:14:07.426 [DEBUG] [Thread-68572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:14:07.426 [DEBUG] [Thread-68572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:14:07.426 [DEBUG] [Thread-68572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:14:07.441 [INFO] [Thread-68572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:14:07.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:14:08.075 [DEBUG] [Thread-68572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:14:08.075 [DEBUG] [Thread-68572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:14:08.075 [DEBUG] [Thread-68572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:14:08.116 [DEBUG] [Thread-68572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:14:08.116 [DEBUG] [Thread-68572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:14:08.119 [DEBUG] [Thread-68572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:14:08.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:14:08.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:14:08.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:14:08.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:14:08.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:14:08.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:14:08.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:14:08.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:14:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:14:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.384471 -999.00  +17.70  22.75     42   +4.70 1 2 1 1 1   888    0 14.43 60.33 ----- 20.8 22.8 344.3 41.9 23.2 -20.8 22.3 -21.0 21.8 -18.4 22.1 -19.2
2025-12-12T11:14:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:14:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:14:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.384471
2025-12-12T11:14:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:14:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:14:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:14:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:14:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:14:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:13:35', tmtdew=15.74, humidity=35.42, cloud=0.0, wind=24.37, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:13:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:14:08.143 [DEBUG] [Thread-68572] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:14:08.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:14:08.234 [DEBUG] [Thread-68575] [transport.py] [_log()] starting thread (client mode): 0xf57cada0
2025-12-12T11:14:08.235 [DEBUG] [Thread-68575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:14:08.249 [DEBUG] [Thread-68575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:14:08.249 [INFO] [Thread-68575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] client lang: <none>
2025-12-12T11:14:08.256 [DEBUG] [Thread-68575] [transport.py] [_log()] server lang: <none>
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] kex follows: False
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] Compression: none
2025-12-12T11:14:08.257 [DEBUG] [Thread-68575] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:14:08.316 [DEBUG] [Thread-68575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:14:08.316 [DEBUG] [Thread-68575] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:14:08.316 [DEBUG] [Thread-68575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:14:08.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:14:08.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:14:08.373 [DEBUG] [Thread-68575] [transport.py] [_log()] userauth is OK
2025-12-12T11:14:08.373 [DEBUG] [Thread-68575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:14:08.373 [DEBUG] [Thread-68575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:14:08.373 [DEBUG] [Thread-68575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:14:08.373 [DEBUG] [Thread-68575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:14:08.387 [INFO] [Thread-68575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:14:08.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:14:08.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:14:09.232 [DEBUG] [Thread-68575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:14:09.232 [DEBUG] [Thread-68575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:14:09.279 [DEBUG] [Thread-68575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:14:09.280 [DEBUG] [Thread-68575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:14:09.288 [DEBUG] [Thread-68575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:14:09.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:14:09.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:14:09.300 [DEBUG] [Thread-68577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:09.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:14:09.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:14:09.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:14:09.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:14:09.320 [DEBUG] [Thread-68575] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:14:13.313 [DEBUG] [Thread-68578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:18.348 [DEBUG] [Thread-68579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:25.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:25.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:27.371 [DEBUG] [Thread-68580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:28.379 [DEBUG] [Thread-68581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:36.401 [DEBUG] [Thread-68582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:38.018 [DEBUG] [Thread-68583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:14:39.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:14:39.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:14:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 14, 7), 15.49, 35.95, 0.0, 27.14, 18.69, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:14:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:14:07
2025-12-12T11:14:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:14:40.278 [DEBUG] [Thread-68584] [transport.py] [_log()] starting thread (client mode): 0xf57b7ac0
2025-12-12T11:14:40.278 [DEBUG] [Thread-68584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:14:40.298 [DEBUG] [Thread-68584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:14:40.298 [INFO] [Thread-68584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:14:40.301 [DEBUG] [Thread-68584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:14:40.301 [DEBUG] [Thread-68584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:14:40.301 [DEBUG] [Thread-68584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:14:40.301 [DEBUG] [Thread-68584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] client lang: <none>
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] server lang: <none>
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] kex follows: False
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] Compression: none
2025-12-12T11:14:40.302 [DEBUG] [Thread-68584] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:14:40.318 [DEBUG] [Thread-68584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:14:40.318 [DEBUG] [Thread-68584] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:14:40.318 [DEBUG] [Thread-68584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:14:40.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:14:40.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:14:40.319 [DEBUG] [Thread-68584] [transport.py] [_log()] userauth is OK
2025-12-12T11:14:40.319 [DEBUG] [Thread-68584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:14:40.319 [DEBUG] [Thread-68584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:14:40.319 [DEBUG] [Thread-68584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:14:40.319 [DEBUG] [Thread-68584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:14:40.331 [INFO] [Thread-68584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:14:40.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:14:40.981 [DEBUG] [Thread-68584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:14:40.981 [DEBUG] [Thread-68584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:14:40.982 [DEBUG] [Thread-68584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:14:41.023 [DEBUG] [Thread-68584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:14:41.023 [DEBUG] [Thread-68584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:14:41.025 [DEBUG] [Thread-68584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:14:41.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:14:41.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:14:41.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:14:41.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:14:41.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:14:41.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:14:41.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.384819 -999.00  +18.00  24.00     42   +5.10 1 2 1 1 1   888    0 14.24 57.85 ----- 27.4 24.0 347.6 34.2 23.0 -20.6 22.3 -19.8 21.8 -18.2 21.9 -18.2
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.384819
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:14:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:14:07', tmtdew=15.49, humidity=35.95, cloud=0.0, wind=27.14, temperature=18.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:14:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:14:41.043 [DEBUG] [Thread-68584] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:14:41.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:14:41.129 [DEBUG] [Thread-68587] [transport.py] [_log()] starting thread (client mode): 0xf81f20b0
2025-12-12T11:14:41.129 [DEBUG] [Thread-68587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:14:41.143 [DEBUG] [Thread-68587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:14:41.143 [INFO] [Thread-68587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] client lang: <none>
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] server lang: <none>
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] kex follows: False
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] Compression: none
2025-12-12T11:14:41.151 [DEBUG] [Thread-68587] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:14:41.207 [DEBUG] [Thread-68587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:14:41.208 [DEBUG] [Thread-68587] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:14:41.208 [DEBUG] [Thread-68587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:14:41.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:14:41.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:14:41.265 [DEBUG] [Thread-68587] [transport.py] [_log()] userauth is OK
2025-12-12T11:14:41.265 [DEBUG] [Thread-68587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:14:41.265 [DEBUG] [Thread-68587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:14:41.265 [DEBUG] [Thread-68587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:14:41.265 [DEBUG] [Thread-68587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:14:41.279 [INFO] [Thread-68587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:14:41.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:14:41.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:14:42.108 [DEBUG] [Thread-68587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:14:42.108 [DEBUG] [Thread-68587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:14:42.156 [DEBUG] [Thread-68587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:14:42.156 [DEBUG] [Thread-68587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:14:42.164 [DEBUG] [Thread-68587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:14:42.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:14:42.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:14:42.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:14:42.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:14:42.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:14:42.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:14:42.199 [DEBUG] [Thread-68587] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:14:43.418 [DEBUG] [Thread-68589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:45.447 [DEBUG] [Thread-68590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:54.473 [DEBUG] [Thread-68591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:14:58.488 [DEBUG] [Thread-68592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:03.505 [DEBUG] [Thread-68593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:15:12.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:15:12.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:15:12.524 [DEBUG] [Thread-68594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 14, 39), 15.99, 34.55, 0.0, 29.94, 19.11, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:15:12.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:14:39
2025-12-12T11:15:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:15:13.265 [DEBUG] [Thread-68595] [transport.py] [_log()] starting thread (client mode): 0xf57b6680
2025-12-12T11:15:13.265 [DEBUG] [Thread-68595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:15:13.286 [DEBUG] [Thread-68595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:15:13.286 [INFO] [Thread-68595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] client lang: <none>
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] server lang: <none>
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] kex follows: False
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:15:13.289 [DEBUG] [Thread-68595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:15:13.290 [DEBUG] [Thread-68595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:15:13.290 [DEBUG] [Thread-68595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:15:13.290 [DEBUG] [Thread-68595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:15:13.290 [DEBUG] [Thread-68595] [transport.py] [_log()] Compression: none
2025-12-12T11:15:13.290 [DEBUG] [Thread-68595] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:15:13.309 [DEBUG] [Thread-68595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:15:13.310 [DEBUG] [Thread-68595] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:15:13.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:15:13.310 [DEBUG] [Thread-68595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:15:13.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:15:13.311 [DEBUG] [Thread-68595] [transport.py] [_log()] userauth is OK
2025-12-12T11:15:13.311 [DEBUG] [Thread-68595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:15:13.311 [DEBUG] [Thread-68595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:15:13.311 [DEBUG] [Thread-68595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:15:13.311 [DEBUG] [Thread-68595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:15:13.326 [INFO] [Thread-68595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:15:13.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:15:13.528 [DEBUG] [Thread-68597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:13.994 [DEBUG] [Thread-68595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:15:13.994 [DEBUG] [Thread-68595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:15:13.994 [DEBUG] [Thread-68595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:15:14.035 [DEBUG] [Thread-68595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:15:14.035 [DEBUG] [Thread-68595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:15:14.038 [DEBUG] [Thread-68595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:15:14.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:15:14.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:15:14.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:15:14.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:15:14.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:15:14.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:15:14.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.385166 -999.00  +18.30  16.46     41   +5.10 1 2 1 1 1   888    0 14.35 62.66 ----- 24.2 16.5 352.9 35.6 23.0 -21.0 22.1 -21.4 21.5 -21.7 22.1 -18.5
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.385166
2025-12-12T11:15:14.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:15:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:15:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:15:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:15:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:15:14.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:14:39', tmtdew=15.99, humidity=34.55, cloud=0.0, wind=29.94, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:14:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:15:14.055 [DEBUG] [Thread-68595] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:15:14.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:15:14.140 [DEBUG] [Thread-68599] [transport.py] [_log()] starting thread (client mode): 0xf57c8700
2025-12-12T11:15:14.141 [DEBUG] [Thread-68599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:15:14.155 [DEBUG] [Thread-68599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:15:14.155 [INFO] [Thread-68599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:15:14.162 [DEBUG] [Thread-68599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:15:14.162 [DEBUG] [Thread-68599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] client lang: <none>
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] server lang: <none>
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] kex follows: False
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] Compression: none
2025-12-12T11:15:14.163 [DEBUG] [Thread-68599] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:15:14.221 [DEBUG] [Thread-68599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:15:14.221 [DEBUG] [Thread-68599] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:15:14.222 [DEBUG] [Thread-68599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:15:14.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:15:14.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:15:14.278 [DEBUG] [Thread-68599] [transport.py] [_log()] userauth is OK
2025-12-12T11:15:14.278 [DEBUG] [Thread-68599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:15:14.278 [DEBUG] [Thread-68599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:15:14.279 [DEBUG] [Thread-68599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:15:14.279 [DEBUG] [Thread-68599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:15:14.297 [INFO] [Thread-68599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:15:14.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:15:14.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:15:15.123 [DEBUG] [Thread-68599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:15:15.123 [DEBUG] [Thread-68599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:15:15.171 [DEBUG] [Thread-68599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:15:15.171 [DEBUG] [Thread-68599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:15:15.180 [DEBUG] [Thread-68599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:15:15.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:15:15.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:15:15.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:15:15.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:15:15.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:15:15.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:15:15.222 [DEBUG] [Thread-68599] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:15:21.551 [DEBUG] [Thread-68601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:25.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:25.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:28.570 [DEBUG] [Thread-68602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:30.596 [DEBUG] [Thread-68603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:38.069 [DEBUG] [Thread-68604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:39.620 [DEBUG] [Thread-68605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:43.635 [DEBUG] [Thread-68606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:45.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:15:45.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:15:45.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:15:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 15, 11), 15.85, 34.85, 0.0, 30.43, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:15:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:15:11
2025-12-12T11:15:46.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:15:46.259 [DEBUG] [Thread-68607] [transport.py] [_log()] starting thread (client mode): 0xf81f34f0
2025-12-12T11:15:46.259 [DEBUG] [Thread-68607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:15:46.279 [DEBUG] [Thread-68607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:15:46.279 [INFO] [Thread-68607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:46.282 [DEBUG] [Thread-68607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] client lang: <none>
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] server lang: <none>
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] kex follows: False
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] Compression: none
2025-12-12T11:15:46.283 [DEBUG] [Thread-68607] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:15:46.301 [DEBUG] [Thread-68607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:15:46.301 [DEBUG] [Thread-68607] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:15:46.302 [DEBUG] [Thread-68607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:15:46.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:15:46.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:15:46.305 [DEBUG] [Thread-68607] [transport.py] [_log()] userauth is OK
2025-12-12T11:15:46.305 [DEBUG] [Thread-68607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:15:46.305 [DEBUG] [Thread-68607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:15:46.305 [DEBUG] [Thread-68607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:15:46.305 [DEBUG] [Thread-68607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:15:46.320 [INFO] [Thread-68607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:15:46.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:15:46.959 [DEBUG] [Thread-68607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:15:46.959 [DEBUG] [Thread-68607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:15:46.959 [DEBUG] [Thread-68607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:15:46.999 [DEBUG] [Thread-68607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:15:46.999 [DEBUG] [Thread-68607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:15:47.001 [DEBUG] [Thread-68607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:15:47.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:15:47.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:15:47.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:15:47.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:15:47.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:15:47.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.385860 -999.00  +18.30  27.29     41   +4.80 1 2 1 1 1   888    0 14.88 73.91 ----- 16.9 27.3 335.5 43.3 22.5 -22.8 21.9 -22.7 21.4 -20.4 21.8 -21.1
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.385860
2025-12-12T11:15:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:15:47.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:15:47.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:15:47.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:15:47.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:15:47.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:15:11', tmtdew=15.85, humidity=34.85, cloud=0.0, wind=30.43, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:15:38.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:15:47.018 [DEBUG] [Thread-68607] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:15:47.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:15:47.104 [DEBUG] [Thread-68610] [transport.py] [_log()] starting thread (client mode): 0xf81f24d0
2025-12-12T11:15:47.104 [DEBUG] [Thread-68610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:15:47.119 [DEBUG] [Thread-68610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:15:47.119 [INFO] [Thread-68610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] client lang: <none>
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] server lang: <none>
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] kex follows: False
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] Compression: none
2025-12-12T11:15:47.127 [DEBUG] [Thread-68610] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:15:47.183 [DEBUG] [Thread-68610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:15:47.184 [DEBUG] [Thread-68610] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:15:47.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:15:47.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:15:47.184 [DEBUG] [Thread-68610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:15:47.241 [DEBUG] [Thread-68610] [transport.py] [_log()] userauth is OK
2025-12-12T11:15:47.241 [DEBUG] [Thread-68610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:15:47.241 [DEBUG] [Thread-68610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:15:47.241 [DEBUG] [Thread-68610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:15:47.241 [DEBUG] [Thread-68610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:15:47.255 [INFO] [Thread-68610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:15:47.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:15:47.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:15:48.135 [DEBUG] [Thread-68610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:15:48.135 [DEBUG] [Thread-68610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:15:48.182 [DEBUG] [Thread-68610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:15:48.182 [DEBUG] [Thread-68610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:15:48.191 [DEBUG] [Thread-68610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:15:48.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:15:48.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:15:48.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:15:48.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:15:48.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:15:48.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:15:48.222 [DEBUG] [Thread-68610] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:15:48.650 [DEBUG] [Thread-68612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:57.668 [DEBUG] [Thread-68613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:15:58.674 [DEBUG] [Thread-68614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:06.712 [DEBUG] [Thread-68615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:13.731 [DEBUG] [Thread-68616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:15.746 [DEBUG] [Thread-68617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:18.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:16:18.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:16:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:16:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 15, 43), 15.97, 34.51, 0.0, 35.02, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:16:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:15:43
2025-12-12T11:16:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:16:19.198 [DEBUG] [Thread-68618] [transport.py] [_log()] starting thread (client mode): 0xf81f3d90
2025-12-12T11:16:19.198 [DEBUG] [Thread-68618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:16:19.219 [DEBUG] [Thread-68618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:16:19.219 [INFO] [Thread-68618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:16:19.220 [DEBUG] [Thread-68618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] client lang: <none>
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] server lang: <none>
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] kex follows: False
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] Compression: none
2025-12-12T11:16:19.221 [DEBUG] [Thread-68618] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:16:19.229 [DEBUG] [Thread-68618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:16:19.229 [DEBUG] [Thread-68618] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:16:19.230 [DEBUG] [Thread-68618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:16:19.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:16:19.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:16:19.231 [DEBUG] [Thread-68618] [transport.py] [_log()] userauth is OK
2025-12-12T11:16:19.231 [DEBUG] [Thread-68618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:16:19.231 [DEBUG] [Thread-68618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:16:19.231 [DEBUG] [Thread-68618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:16:19.231 [DEBUG] [Thread-68618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:16:19.265 [INFO] [Thread-68618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:16:19.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:16:19.938 [DEBUG] [Thread-68618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:16:19.938 [DEBUG] [Thread-68618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:16:19.939 [DEBUG] [Thread-68618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:16:19.979 [DEBUG] [Thread-68618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:16:19.979 [DEBUG] [Thread-68618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:16:19.983 [DEBUG] [Thread-68618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:16:19.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:16:19.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:16:19.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:16:19.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:16:20.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:16:20.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:16:20.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:16:20.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:16:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:16:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.386208 -999.00  +18.40  26.61     40   +4.70 1 2 1 1 1   888    0 14.94 76.57 ----- 36.5 26.6 2.5 40.4 22.3 -22.1 21.8 -22.3 21.3 -22.0 21.7 -20.4
2025-12-12T11:16:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:16:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:16:20.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.386208
2025-12-12T11:16:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:16:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:16:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:16:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:16:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:16:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:15:43', tmtdew=15.97, humidity=34.51, cloud=0.0, wind=35.02, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:16:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:16:20.009 [DEBUG] [Thread-68618] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:16:20.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:16:20.104 [DEBUG] [Thread-68621] [transport.py] [_log()] starting thread (client mode): 0xf57c9780
2025-12-12T11:16:20.104 [DEBUG] [Thread-68621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:16:20.121 [DEBUG] [Thread-68621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:16:20.121 [INFO] [Thread-68621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:16:20.129 [DEBUG] [Thread-68621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:16:20.129 [DEBUG] [Thread-68621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:16:20.129 [DEBUG] [Thread-68621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:16:20.129 [DEBUG] [Thread-68621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] client lang: <none>
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] server lang: <none>
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] kex follows: False
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] Compression: none
2025-12-12T11:16:20.130 [DEBUG] [Thread-68621] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:16:20.185 [DEBUG] [Thread-68621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:16:20.186 [DEBUG] [Thread-68621] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:16:20.187 [DEBUG] [Thread-68621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:16:20.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:16:20.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:16:20.241 [DEBUG] [Thread-68621] [transport.py] [_log()] userauth is OK
2025-12-12T11:16:20.242 [DEBUG] [Thread-68621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:16:20.242 [DEBUG] [Thread-68621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:16:20.242 [DEBUG] [Thread-68621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:16:20.242 [DEBUG] [Thread-68621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:16:20.261 [INFO] [Thread-68621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:16:20.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:16:20.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:16:21.115 [DEBUG] [Thread-68621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:16:21.116 [DEBUG] [Thread-68621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:16:21.166 [DEBUG] [Thread-68621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:16:21.166 [DEBUG] [Thread-68621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:16:21.176 [DEBUG] [Thread-68621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:16:21.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:16:21.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:16:21.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:16:21.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:16:21.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:16:21.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:16:21.219 [DEBUG] [Thread-68621] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:16:24.768 [DEBUG] [Thread-68623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:25.357 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:25.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:28.778 [DEBUG] [Thread-68624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:33.802 [DEBUG] [Thread-68625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:38.121 [DEBUG] [Thread-68626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:42.824 [DEBUG] [Thread-68627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:43.831 [DEBUG] [Thread-68628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:16:51.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:16:51.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:16:51.850 [DEBUG] [Thread-68629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:16:51.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 16, 48), 15.43, 35.6, 0.0, 42.94, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:16:51.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:16:48
2025-12-12T11:16:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:16:52.190 [DEBUG] [Thread-68630] [transport.py] [_log()] starting thread (client mode): 0xf57aa050
2025-12-12T11:16:52.190 [DEBUG] [Thread-68630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:16:52.205 [DEBUG] [Thread-68630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:16:52.205 [INFO] [Thread-68630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:52.207 [DEBUG] [Thread-68630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] client lang: <none>
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] server lang: <none>
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] kex follows: False
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] Compression: none
2025-12-12T11:16:52.208 [DEBUG] [Thread-68630] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:16:52.223 [DEBUG] [Thread-68630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:16:52.224 [DEBUG] [Thread-68630] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:16:52.225 [DEBUG] [Thread-68630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:16:52.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:16:52.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:16:52.227 [DEBUG] [Thread-68630] [transport.py] [_log()] userauth is OK
2025-12-12T11:16:52.227 [DEBUG] [Thread-68630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:16:52.228 [DEBUG] [Thread-68630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:16:52.228 [DEBUG] [Thread-68630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:16:52.228 [DEBUG] [Thread-68630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:16:52.254 [INFO] [Thread-68630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:16:52.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:16:52.883 [DEBUG] [Thread-68630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:16:52.883 [DEBUG] [Thread-68630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:16:52.883 [DEBUG] [Thread-68630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:16:52.925 [DEBUG] [Thread-68630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:16:52.925 [DEBUG] [Thread-68630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:16:52.928 [DEBUG] [Thread-68630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:16:52.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:16:52.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:16:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:16:52.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:16:52.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:16:52.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:16:52.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:16:52.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:16:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:16:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.386554 -999.00  +18.40  22.47     40   +4.60 1 2 1 1 1   888    0 14.84 79.90 ----- 21.3 22.5 357.9 42.8 22.2 -22.2 21.7 -22.4 21.3 -20.8 21.7 -20.4
2025-12-12T11:16:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:16:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:16:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.386554
2025-12-12T11:16:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:16:52.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:16:52.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:16:52.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:16:52.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:16:52.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:16:48', tmtdew=15.43, humidity=35.6, cloud=0.0, wind=42.94, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:16:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:16:52.952 [DEBUG] [Thread-68630] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:16:53.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:16:53.048 [DEBUG] [Thread-68633] [transport.py] [_log()] starting thread (client mode): 0xf57ca5f0
2025-12-12T11:16:53.048 [DEBUG] [Thread-68633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:16:53.062 [DEBUG] [Thread-68633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:16:53.063 [INFO] [Thread-68633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:16:53.070 [DEBUG] [Thread-68633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:16:53.070 [DEBUG] [Thread-68633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:16:53.070 [DEBUG] [Thread-68633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:16:53.070 [DEBUG] [Thread-68633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] client lang: <none>
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] server lang: <none>
2025-12-12T11:16:53.071 [DEBUG] [Thread-68633] [transport.py] [_log()] kex follows: False
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] Compression: none
2025-12-12T11:16:53.072 [DEBUG] [Thread-68633] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:16:53.134 [DEBUG] [Thread-68633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:16:53.135 [DEBUG] [Thread-68633] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:16:53.135 [DEBUG] [Thread-68633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:16:53.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:16:53.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:16:53.194 [DEBUG] [Thread-68633] [transport.py] [_log()] userauth is OK
2025-12-12T11:16:53.194 [DEBUG] [Thread-68633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:16:53.194 [DEBUG] [Thread-68633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:16:53.195 [DEBUG] [Thread-68633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:16:53.195 [DEBUG] [Thread-68633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:16:53.220 [INFO] [Thread-68633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:16:53.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:16:53.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:16:54.101 [DEBUG] [Thread-68633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:16:54.102 [DEBUG] [Thread-68633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:16:54.150 [DEBUG] [Thread-68633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:16:54.150 [DEBUG] [Thread-68633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:16:54.159 [DEBUG] [Thread-68633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:16:54.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:16:54.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:16:54.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:16:54.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:16:54.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:16:54.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:16:54.195 [DEBUG] [Thread-68633] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:16:58.870 [DEBUG] [Thread-68635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:00.899 [DEBUG] [Thread-68636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:09.915 [DEBUG] [Thread-68637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:13.930 [DEBUG] [Thread-68638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:18.951 [DEBUG] [Thread-68639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:24.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:17:24.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:17:24.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:17:24.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 17, 20), 15.42, 35.65, 0.0, 39.98, 18.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:17:24.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:17:20
2025-12-12T11:17:25.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:17:25.180 [DEBUG] [Thread-68640] [transport.py] [_log()] starting thread (client mode): 0xf57c8700
2025-12-12T11:17:25.180 [DEBUG] [Thread-68640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:17:25.196 [DEBUG] [Thread-68640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:17:25.196 [INFO] [Thread-68640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:17:25.197 [DEBUG] [Thread-68640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:17:25.197 [DEBUG] [Thread-68640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:17:25.197 [DEBUG] [Thread-68640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:17:25.197 [DEBUG] [Thread-68640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] client lang: <none>
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] server lang: <none>
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] kex follows: False
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] Compression: none
2025-12-12T11:17:25.198 [DEBUG] [Thread-68640] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:17:25.206 [DEBUG] [Thread-68640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:17:25.206 [DEBUG] [Thread-68640] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:17:25.206 [DEBUG] [Thread-68640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:17:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:17:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:17:25.207 [DEBUG] [Thread-68640] [transport.py] [_log()] userauth is OK
2025-12-12T11:17:25.207 [DEBUG] [Thread-68640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:17:25.207 [DEBUG] [Thread-68640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:17:25.207 [DEBUG] [Thread-68640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:17:25.207 [DEBUG] [Thread-68640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:17:25.218 [INFO] [Thread-68640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:17:25.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:17:25.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:25.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:25.753 [DEBUG] [Thread-68640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:17:25.753 [DEBUG] [Thread-68640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:17:25.754 [DEBUG] [Thread-68640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:17:25.795 [DEBUG] [Thread-68640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:17:25.795 [DEBUG] [Thread-68640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:17:25.799 [DEBUG] [Thread-68640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:17:25.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:17:25.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:17:25.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:17:25.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:17:25.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:17:25.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:17:25.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:17:25.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:17:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:17:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.386902 -999.00  +18.30  31.81     40   +4.80 1 2 2 1 1   888    0 15.15 79.85 ----- 33.8 31.8 10.8 40.4 22.4 -19.1 21.8 -19.8 21.4 -18.4 21.9 -17.8
2025-12-12T11:17:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:17:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:17:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.386902
2025-12-12T11:17:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:17:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:17:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:17:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:17:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:17:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:17:20', tmtdew=15.42, humidity=35.65, cloud=0.0, wind=39.98, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:17:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:17:25.823 [DEBUG] [Thread-68640] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:17:25.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:17:25.912 [DEBUG] [Thread-68643] [transport.py] [_log()] starting thread (client mode): 0xf570f970
2025-12-12T11:17:25.912 [DEBUG] [Thread-68643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:17:25.926 [DEBUG] [Thread-68643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:17:25.926 [INFO] [Thread-68643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] client lang: <none>
2025-12-12T11:17:25.934 [DEBUG] [Thread-68643] [transport.py] [_log()] server lang: <none>
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] kex follows: False
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] Compression: none
2025-12-12T11:17:25.935 [DEBUG] [Thread-68643] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:17:25.994 [DEBUG] [Thread-68643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:17:25.994 [DEBUG] [Thread-68643] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:17:25.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:17:25.996 [DEBUG] [Thread-68643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:17:25.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:17:26.049 [DEBUG] [Thread-68643] [transport.py] [_log()] userauth is OK
2025-12-12T11:17:26.049 [DEBUG] [Thread-68643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:17:26.050 [DEBUG] [Thread-68643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:17:26.050 [DEBUG] [Thread-68643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:17:26.050 [DEBUG] [Thread-68643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:17:26.069 [INFO] [Thread-68643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:17:26.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:17:26.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:17:26.930 [DEBUG] [Thread-68643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:17:26.930 [DEBUG] [Thread-68643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:17:26.979 [DEBUG] [Thread-68643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:17:26.979 [DEBUG] [Thread-68643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:17:26.988 [DEBUG] [Thread-68643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:17:26.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:17:26.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:17:27.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:17:27.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:17:27.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:17:27.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:17:27.024 [DEBUG] [Thread-68643] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:17:38.180 [DEBUG] [Thread-68645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:41.866 [DEBUG] [Thread-68646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:56.907 [DEBUG] [Thread-68647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:17:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:17:57.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:17:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:17:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 17, 52), 15.21, 36.19, 0.0, 36.49, 18.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:17:57.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:17:52
2025-12-12T11:17:57.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:17:58.000 [DEBUG] [Thread-68648] [transport.py] [_log()] starting thread (client mode): 0xf570c3a0
2025-12-12T11:17:58.000 [DEBUG] [Thread-68648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:17:58.018 [DEBUG] [Thread-68648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:17:58.018 [INFO] [Thread-68648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] client lang: <none>
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] server lang: <none>
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] kex follows: False
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] Compression: none
2025-12-12T11:17:58.019 [DEBUG] [Thread-68648] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:17:58.032 [DEBUG] [Thread-68648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:17:58.033 [DEBUG] [Thread-68648] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:17:58.033 [DEBUG] [Thread-68648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:17:58.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:17:58.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:17:58.035 [DEBUG] [Thread-68648] [transport.py] [_log()] userauth is OK
2025-12-12T11:17:58.035 [DEBUG] [Thread-68648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:17:58.035 [DEBUG] [Thread-68648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:17:58.035 [DEBUG] [Thread-68648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:17:58.035 [DEBUG] [Thread-68648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:17:58.052 [INFO] [Thread-68648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:17:58.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:17:58.640 [DEBUG] [Thread-68648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:17:58.640 [DEBUG] [Thread-68648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:17:58.641 [DEBUG] [Thread-68648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:17:58.681 [DEBUG] [Thread-68648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:17:58.681 [DEBUG] [Thread-68648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:17:58.684 [DEBUG] [Thread-68648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:17:58.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:17:58.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:17:58.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:17:58.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:17:58.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:17:58.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:17:58.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:17:58.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:17:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:17:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.387249 -999.00  +17.90  29.43     42   +4.90 1 2 1 1 1   888    0 15.13 78.86 ----- 34.9 29.4 353.8 48.7 22.2 -21.7 21.9 -18.4 21.5 -19.9 21.6 -22.2
2025-12-12T11:17:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:17:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:17:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.387249
2025-12-12T11:17:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:17:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:17:58.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:17:58.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:17:58.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:17:58.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:17:52', tmtdew=15.21, humidity=36.19, cloud=0.0, wind=36.49, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:17:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:17:58.702 [DEBUG] [Thread-68648] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:17:58.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:17:58.797 [DEBUG] [Thread-68651] [transport.py] [_log()] starting thread (client mode): 0xf57ca5f0
2025-12-12T11:17:58.797 [DEBUG] [Thread-68651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:17:58.811 [DEBUG] [Thread-68651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:17:58.812 [INFO] [Thread-68651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:17:58.819 [DEBUG] [Thread-68651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:17:58.820 [DEBUG] [Thread-68651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] client lang: <none>
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] server lang: <none>
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] kex follows: False
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:17:58.821 [DEBUG] [Thread-68651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:17:58.822 [DEBUG] [Thread-68651] [transport.py] [_log()] Compression: none
2025-12-12T11:17:58.822 [DEBUG] [Thread-68651] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:17:58.883 [DEBUG] [Thread-68651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:17:58.884 [DEBUG] [Thread-68651] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:17:58.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:17:58.885 [DEBUG] [Thread-68651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:17:58.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:17:58.941 [DEBUG] [Thread-68651] [transport.py] [_log()] userauth is OK
2025-12-12T11:17:58.942 [DEBUG] [Thread-68651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:17:58.942 [DEBUG] [Thread-68651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:17:58.942 [DEBUG] [Thread-68651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:17:58.942 [DEBUG] [Thread-68651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:17:58.961 [INFO] [Thread-68651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:17:58.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:17:58.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:17:59.812 [DEBUG] [Thread-68651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:17:59.812 [DEBUG] [Thread-68651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:17:59.860 [DEBUG] [Thread-68651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:17:59.860 [DEBUG] [Thread-68651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:17:59.869 [DEBUG] [Thread-68651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:17:59.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:17:59.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:17:59.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:17:59.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:17:59.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:17:59.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:17:59.906 [DEBUG] [Thread-68651] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:18:11.940 [DEBUG] [Thread-68653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:18:25.639 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:18:25.640 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:18:26.988 [DEBUG] [Thread-68654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:18:29.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:18:29.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:18:29.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:18:30.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 18, 24), 15.41, 35.75, 0.0, 38.98, 18.36, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:18:30.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:18:24
2025-12-12T11:18:30.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:18:30.890 [DEBUG] [Thread-68655] [transport.py] [_log()] starting thread (client mode): 0xf81f2e00
2025-12-12T11:18:30.890 [DEBUG] [Thread-68655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:18:30.910 [DEBUG] [Thread-68655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:18:30.910 [INFO] [Thread-68655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:18:30.913 [DEBUG] [Thread-68655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] client lang: <none>
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] server lang: <none>
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] kex follows: False
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] Compression: none
2025-12-12T11:18:30.914 [DEBUG] [Thread-68655] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:18:30.932 [DEBUG] [Thread-68655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:18:30.933 [DEBUG] [Thread-68655] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:18:30.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:18:30.934 [DEBUG] [Thread-68655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:18:30.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:18:30.937 [DEBUG] [Thread-68655] [transport.py] [_log()] userauth is OK
2025-12-12T11:18:30.937 [DEBUG] [Thread-68655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:18:30.937 [DEBUG] [Thread-68655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:18:30.938 [DEBUG] [Thread-68655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:18:30.938 [DEBUG] [Thread-68655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:18:30.959 [INFO] [Thread-68655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:18:30.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:18:31.609 [DEBUG] [Thread-68655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:18:31.609 [DEBUG] [Thread-68655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:18:31.609 [DEBUG] [Thread-68655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:18:31.650 [DEBUG] [Thread-68655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:18:31.650 [DEBUG] [Thread-68655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:18:31.653 [DEBUG] [Thread-68655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:18:31.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:18:31.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:18:31.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:18:31.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:18:31.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:18:31.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:18:31.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:18:31.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:18:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:18:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.387249 -999.00  +17.90  29.43     42   +4.90 1 2 1 1 1   888    0 15.13 78.86 ----- 34.9 29.4 353.8 48.7 22.2 -21.7 21.9 -18.4 21.5 -19.9 21.6 -22.2
2025-12-12T11:18:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:18:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:18:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.387249
2025-12-12T11:18:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:18:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:18:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:18:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:18:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:18:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:18:24', tmtdew=15.41, humidity=35.75, cloud=0.0, wind=38.98, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:17:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:18:31.681 [DEBUG] [Thread-68655] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:18:31.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:18:31.770 [DEBUG] [Thread-68658] [transport.py] [_log()] starting thread (client mode): 0xf570dc30
2025-12-12T11:18:31.771 [DEBUG] [Thread-68658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:18:31.786 [DEBUG] [Thread-68658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:18:31.786 [INFO] [Thread-68658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] client lang: <none>
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] server lang: <none>
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] kex follows: False
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] Compression: none
2025-12-12T11:18:31.793 [DEBUG] [Thread-68658] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:18:31.855 [DEBUG] [Thread-68658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:18:31.856 [DEBUG] [Thread-68658] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:18:31.856 [DEBUG] [Thread-68658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:18:31.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:18:31.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:18:31.913 [DEBUG] [Thread-68658] [transport.py] [_log()] userauth is OK
2025-12-12T11:18:31.914 [DEBUG] [Thread-68658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:18:31.914 [DEBUG] [Thread-68658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:18:31.914 [DEBUG] [Thread-68658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:18:31.914 [DEBUG] [Thread-68658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:18:31.933 [INFO] [Thread-68658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:18:31.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:18:31.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:18:32.790 [DEBUG] [Thread-68658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:18:32.791 [DEBUG] [Thread-68658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:18:32.839 [DEBUG] [Thread-68658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:18:32.839 [DEBUG] [Thread-68658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:18:32.848 [DEBUG] [Thread-68658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:18:32.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:18:32.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:18:32.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:18:32.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:18:32.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:18:32.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:18:32.884 [DEBUG] [Thread-68658] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:18:38.233 [DEBUG] [Thread-68660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:18:42.024 [DEBUG] [Thread-68661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:18:57.074 [DEBUG] [Thread-68662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:02.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:19:02.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:19:02.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:19:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 18, 56), 15.28, 36.41, 0.0, 32.3, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:19:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:18:56
2025-12-12T11:19:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:19:03.934 [DEBUG] [Thread-68663] [transport.py] [_log()] starting thread (client mode): 0xf570ff40
2025-12-12T11:19:03.934 [DEBUG] [Thread-68663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:19:03.953 [DEBUG] [Thread-68663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:19:03.953 [INFO] [Thread-68663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:19:03.956 [DEBUG] [Thread-68663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:19:03.956 [DEBUG] [Thread-68663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:19:03.956 [DEBUG] [Thread-68663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:19:03.956 [DEBUG] [Thread-68663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] client lang: <none>
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] server lang: <none>
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] kex follows: False
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] Compression: none
2025-12-12T11:19:03.957 [DEBUG] [Thread-68663] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:19:03.972 [DEBUG] [Thread-68663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:19:03.972 [DEBUG] [Thread-68663] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:19:03.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:19:03.973 [DEBUG] [Thread-68663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:19:03.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:19:04.015 [DEBUG] [Thread-68663] [transport.py] [_log()] userauth is OK
2025-12-12T11:19:04.015 [DEBUG] [Thread-68663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:19:04.015 [DEBUG] [Thread-68663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:19:04.015 [DEBUG] [Thread-68663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:19:04.015 [DEBUG] [Thread-68663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:19:04.030 [INFO] [Thread-68663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:19:04.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:19:04.665 [DEBUG] [Thread-68663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:19:04.665 [DEBUG] [Thread-68663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:19:04.665 [DEBUG] [Thread-68663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:19:04.706 [DEBUG] [Thread-68663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:19:04.706 [DEBUG] [Thread-68663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:19:04.708 [DEBUG] [Thread-68663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:19:04.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:19:04.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:19:04.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:19:04.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:19:04.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:19:04.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:19:04.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.387596 -999.00  +17.70  34.64     42   +4.80 1 2 2 1 1   888    0 15.01 75.26 ----- 26.0 34.6 15.0 52.5 22.6 -18.1 21.9 -20.3 21.6 -18.2 21.8 -16.6
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.387596
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:19:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:18:56', tmtdew=15.28, humidity=36.41, cloud=0.0, wind=32.3, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:18:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:19:04.729 [DEBUG] [Thread-68663] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:19:04.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:19:04.814 [DEBUG] [Thread-68666] [transport.py] [_log()] starting thread (client mode): 0xf57ca080
2025-12-12T11:19:04.814 [DEBUG] [Thread-68666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:19:04.831 [DEBUG] [Thread-68666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:19:04.831 [INFO] [Thread-68666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] client lang: <none>
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] server lang: <none>
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] kex follows: False
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] Compression: none
2025-12-12T11:19:04.842 [DEBUG] [Thread-68666] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:19:04.896 [DEBUG] [Thread-68666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:19:04.896 [DEBUG] [Thread-68666] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:19:04.896 [DEBUG] [Thread-68666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:19:04.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:19:04.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:19:04.953 [DEBUG] [Thread-68666] [transport.py] [_log()] userauth is OK
2025-12-12T11:19:04.953 [DEBUG] [Thread-68666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:19:04.953 [DEBUG] [Thread-68666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:19:04.953 [DEBUG] [Thread-68666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:19:04.953 [DEBUG] [Thread-68666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:19:04.967 [INFO] [Thread-68666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:19:04.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:19:04.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:19:05.861 [DEBUG] [Thread-68666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:19:05.861 [DEBUG] [Thread-68666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:19:05.908 [DEBUG] [Thread-68666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:19:05.908 [DEBUG] [Thread-68666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:19:05.916 [DEBUG] [Thread-68666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:19:05.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:19:05.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:19:05.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:19:05.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:19:05.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:19:05.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:19:05.948 [DEBUG] [Thread-68666] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:19:12.106 [DEBUG] [Thread-68668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:25.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:25.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:27.157 [DEBUG] [Thread-68669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:19:35.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:19:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:19:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 19, 28), 15.02, 36.98, 0.0, 29.62, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:19:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:19:28
2025-12-12T11:19:36.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:19:36.937 [DEBUG] [Thread-68670] [transport.py] [_log()] starting thread (client mode): 0xf57a95a0
2025-12-12T11:19:36.937 [DEBUG] [Thread-68670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:19:36.958 [DEBUG] [Thread-68670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:19:36.958 [INFO] [Thread-68670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] client lang: <none>
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] server lang: <none>
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] kex follows: False
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:19:36.961 [DEBUG] [Thread-68670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:19:36.962 [DEBUG] [Thread-68670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:19:36.962 [DEBUG] [Thread-68670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:19:36.962 [DEBUG] [Thread-68670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:19:36.962 [DEBUG] [Thread-68670] [transport.py] [_log()] Compression: none
2025-12-12T11:19:36.962 [DEBUG] [Thread-68670] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:19:36.979 [DEBUG] [Thread-68670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:19:36.979 [DEBUG] [Thread-68670] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:19:36.979 [DEBUG] [Thread-68670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:19:36.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:19:36.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:19:36.980 [DEBUG] [Thread-68670] [transport.py] [_log()] userauth is OK
2025-12-12T11:19:36.980 [DEBUG] [Thread-68670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:19:36.980 [DEBUG] [Thread-68670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:19:36.980 [DEBUG] [Thread-68670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:19:36.980 [DEBUG] [Thread-68670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:19:36.990 [INFO] [Thread-68670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:19:36.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:19:37.659 [DEBUG] [Thread-68670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:19:37.659 [DEBUG] [Thread-68670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:19:37.660 [DEBUG] [Thread-68670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:19:37.700 [DEBUG] [Thread-68670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:19:37.700 [DEBUG] [Thread-68670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:19:37.704 [DEBUG] [Thread-68670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:19:37.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:19:37.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:19:37.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:19:37.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:19:37.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:19:37.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:19:37.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:19:37.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:19:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:19:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.387943 -999.00  +17.70  25.28     42   +4.90 1 2 1 1 1   888    0 15.11 82.07 ----- 25.5 25.3 345.9 43.4 22.5 -19.3 21.9 -20.3 21.5 -17.8 21.8 -18.5
2025-12-12T11:19:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:19:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:19:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.387943
2025-12-12T11:19:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:19:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:19:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:19:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:19:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:19:37.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:19:28', tmtdew=15.02, humidity=36.98, cloud=0.0, wind=29.62, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:18:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:19:37.729 [DEBUG] [Thread-68670] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:19:37.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:19:38.287 [DEBUG] [Thread-68673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:42.188 [DEBUG] [Thread-68674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:19:57.237 [DEBUG] [Thread-68675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:12.275 [DEBUG] [Thread-68676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:25.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:25.922 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:27.304 [DEBUG] [Thread-68677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:38.335 [DEBUG] [Thread-68678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:42.340 [DEBUG] [Thread-68679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:20:57.375 [DEBUG] [Thread-68680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:12.403 [DEBUG] [Thread-68681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:26.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:26.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:27.439 [DEBUG] [Thread-68682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:38.381 [DEBUG] [Thread-68683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:42.473 [DEBUG] [Thread-68684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:21:51.850 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T11:21:57.511 [DEBUG] [Thread-68685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:12.548 [DEBUG] [Thread-68686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:21.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:22:21.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:22:21.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:22:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 22, 8), 16.02, 34.5, 0.0, 37.62, 19.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:22:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:22:08
2025-12-12T11:22:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:22:22.878 [DEBUG] [Thread-68687] [transport.py] [_log()] starting thread (client mode): 0xf2d0fd60
2025-12-12T11:22:22.878 [DEBUG] [Thread-68687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:22:22.898 [DEBUG] [Thread-68687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:22:22.898 [INFO] [Thread-68687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:22:22.901 [DEBUG] [Thread-68687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:22:22.901 [DEBUG] [Thread-68687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:22:22.901 [DEBUG] [Thread-68687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:22:22.901 [DEBUG] [Thread-68687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:22.901 [DEBUG] [Thread-68687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] client lang: <none>
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] server lang: <none>
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] kex follows: False
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] Compression: none
2025-12-12T11:22:22.902 [DEBUG] [Thread-68687] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:22:22.921 [DEBUG] [Thread-68687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:22:22.922 [DEBUG] [Thread-68687] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:22:22.922 [DEBUG] [Thread-68687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:22:22.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:22:22.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:22:22.924 [DEBUG] [Thread-68687] [transport.py] [_log()] userauth is OK
2025-12-12T11:22:22.924 [DEBUG] [Thread-68687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:22:22.924 [DEBUG] [Thread-68687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:22:22.924 [DEBUG] [Thread-68687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:22:22.924 [DEBUG] [Thread-68687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:22:22.948 [INFO] [Thread-68687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:22:22.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:22:23.580 [DEBUG] [Thread-68687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:22:23.580 [DEBUG] [Thread-68687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:22:23.580 [DEBUG] [Thread-68687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:22:23.621 [DEBUG] [Thread-68687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:22:23.621 [DEBUG] [Thread-68687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:22:23.624 [DEBUG] [Thread-68687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:22:23.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:22:23.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:22:23.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:22:23.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:22:23.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:22:23.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:22:23.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:22:23.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:22:23.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:22:23.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.390027 -999.00  +19.00  25.47     40   +5.40 1 2 1 1 1   888    0 14.32 52.07 ----- 20.2 25.5 322.8 34.5 22.8 -17.2 22.4 -18.3 21.7 -17.0 22.1 -16.3
2025-12-12T11:22:23.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:22:23.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:22:23.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.390027
2025-12-12T11:22:23.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:22:23.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:22:23.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:22:23.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:22:23.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:22:23.650 [DEBUG] [Thread-68687] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:22:23.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:22:08', tmtdew=16.02, humidity=34.5, cloud=0.0, wind=37.62, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:21:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:22:23.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:22:23.754 [DEBUG] [Thread-68690] [transport.py] [_log()] starting thread (client mode): 0xf2d0c610
2025-12-12T11:22:23.754 [DEBUG] [Thread-68690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:22:23.769 [DEBUG] [Thread-68690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:22:23.770 [INFO] [Thread-68690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:22:23.777 [DEBUG] [Thread-68690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:22:23.777 [DEBUG] [Thread-68690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:22:23.777 [DEBUG] [Thread-68690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:22:23.777 [DEBUG] [Thread-68690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] client lang: <none>
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] server lang: <none>
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] kex follows: False
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:22:23.778 [DEBUG] [Thread-68690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:22:23.779 [DEBUG] [Thread-68690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:22:23.779 [DEBUG] [Thread-68690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:22:23.779 [DEBUG] [Thread-68690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:22:23.779 [DEBUG] [Thread-68690] [transport.py] [_log()] Compression: none
2025-12-12T11:22:23.779 [DEBUG] [Thread-68690] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:22:23.836 [DEBUG] [Thread-68690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:22:23.837 [DEBUG] [Thread-68690] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:22:23.837 [DEBUG] [Thread-68690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:22:23.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:22:23.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:22:23.893 [DEBUG] [Thread-68690] [transport.py] [_log()] userauth is OK
2025-12-12T11:22:23.893 [DEBUG] [Thread-68690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:22:23.893 [DEBUG] [Thread-68690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:22:23.893 [DEBUG] [Thread-68690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:22:23.893 [DEBUG] [Thread-68690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:22:23.912 [INFO] [Thread-68690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:22:23.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:22:23.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:22:24.771 [DEBUG] [Thread-68690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:22:24.772 [DEBUG] [Thread-68690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:22:24.819 [DEBUG] [Thread-68690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:22:24.820 [DEBUG] [Thread-68690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:22:24.829 [DEBUG] [Thread-68690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:22:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:22:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:22:24.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:22:24.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:22:24.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:22:24.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:22:24.863 [DEBUG] [Thread-68690] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:22:26.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:26.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:27.582 [DEBUG] [Thread-68692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:38.443 [DEBUG] [Thread-68693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:42.634 [DEBUG] [Thread-68694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:22:54.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:22:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:22:55.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 22, 40), 16.16, 34.01, 0.0, 35.09, 19.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:22:55.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:22:40
2025-12-12T11:22:55.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:22:55.919 [DEBUG] [Thread-68695] [transport.py] [_log()] starting thread (client mode): 0xf81f11e0
2025-12-12T11:22:55.919 [DEBUG] [Thread-68695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:22:55.939 [DEBUG] [Thread-68695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:22:55.939 [INFO] [Thread-68695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] client lang: <none>
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] server lang: <none>
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] kex follows: False
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] Compression: none
2025-12-12T11:22:55.941 [DEBUG] [Thread-68695] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:22:55.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:22:55.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] userauth is OK
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:22:55.959 [DEBUG] [Thread-68695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:22:55.972 [INFO] [Thread-68695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:22:55.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:22:56.632 [DEBUG] [Thread-68695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:22:56.632 [DEBUG] [Thread-68695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:22:56.632 [DEBUG] [Thread-68695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:22:56.673 [DEBUG] [Thread-68695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:22:56.673 [DEBUG] [Thread-68695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:22:56.675 [DEBUG] [Thread-68695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:22:56.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:22:56.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:22:56.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:22:56.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:22:56.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:22:56.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:22:56.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.390374 -999.00  +19.20  22.81     39   +5.10 1 2 1 1 1   888    0 14.55 53.03 ----- 16.4 22.8 336.9 36.2 23.1 -20.5 22.4 -18.8 21.9 -18.0 22.4 -19.7
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.390374
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:22:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:22:40', tmtdew=16.16, humidity=34.01, cloud=0.0, wind=35.09, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:22:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:22:56.693 [DEBUG] [Thread-68695] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:22:56.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:22:56.781 [DEBUG] [Thread-68698] [transport.py] [_log()] starting thread (client mode): 0xf57abca0
2025-12-12T11:22:56.781 [DEBUG] [Thread-68698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:22:56.796 [DEBUG] [Thread-68698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:22:56.796 [INFO] [Thread-68698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] client lang: <none>
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] server lang: <none>
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] kex follows: False
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] Compression: none
2025-12-12T11:22:56.804 [DEBUG] [Thread-68698] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:22:56.859 [DEBUG] [Thread-68698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:22:56.859 [DEBUG] [Thread-68698] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:22:56.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:22:56.860 [DEBUG] [Thread-68698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:22:56.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:22:56.918 [DEBUG] [Thread-68698] [transport.py] [_log()] userauth is OK
2025-12-12T11:22:56.918 [DEBUG] [Thread-68698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:22:56.918 [DEBUG] [Thread-68698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:22:56.918 [DEBUG] [Thread-68698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:22:56.918 [DEBUG] [Thread-68698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:22:56.932 [INFO] [Thread-68698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:22:56.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:22:56.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:22:57.667 [DEBUG] [Thread-68700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:22:57.782 [DEBUG] [Thread-68698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:22:57.782 [DEBUG] [Thread-68698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:22:57.830 [DEBUG] [Thread-68698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:22:57.830 [DEBUG] [Thread-68698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:22:57.838 [DEBUG] [Thread-68698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:22:57.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:22:57.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')
2025-12-12T11:22:57.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:22:57.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:22:57.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:22:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:22:57.869 [DEBUG] [Thread-68698] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:23:12.716 [DEBUG] [Thread-68701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:23:26.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:23:26.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:23:27.750 [DEBUG] [Thread-68702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:23:27.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:23:27.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:23:27.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:23:28.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 23, 12), 16.34, 33.65, 0.0, 40.39, 19.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:23:28.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:23:12
2025-12-12T11:23:28.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:23:28.866 [DEBUG] [Thread-68703] [transport.py] [_log()] starting thread (client mode): 0xf570e290
2025-12-12T11:23:28.866 [DEBUG] [Thread-68703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:23:28.887 [DEBUG] [Thread-68703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:23:28.887 [INFO] [Thread-68703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] client lang: <none>
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] server lang: <none>
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] kex follows: False
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] Compression: none
2025-12-12T11:23:28.891 [DEBUG] [Thread-68703] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:23:28.912 [DEBUG] [Thread-68703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:23:28.913 [DEBUG] [Thread-68703] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:23:28.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:23:28.914 [DEBUG] [Thread-68703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:23:28.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:23:28.915 [DEBUG] [Thread-68703] [transport.py] [_log()] userauth is OK
2025-12-12T11:23:28.916 [DEBUG] [Thread-68703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:23:28.916 [DEBUG] [Thread-68703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:23:28.916 [DEBUG] [Thread-68703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:23:28.916 [DEBUG] [Thread-68703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:23:28.942 [INFO] [Thread-68703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:23:28.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:23:29.577 [DEBUG] [Thread-68703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:23:29.577 [DEBUG] [Thread-68703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:23:29.578 [DEBUG] [Thread-68703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:23:29.618 [DEBUG] [Thread-68703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:23:29.618 [DEBUG] [Thread-68703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:23:29.621 [DEBUG] [Thread-68703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:23:29.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:23:29.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:23:29.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:23:29.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:23:29.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:23:29.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:23:29.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:23:29.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:23:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:23:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.390721 -999.00  +19.40  19.87     39   +5.10 1 2 1 1 1   888    0 14.93 59.92 ----- 27.1 19.9 345.1 33.1 23.3 -17.3 22.8 -17.8 22.1 -16.4 22.6 -16.2
2025-12-12T11:23:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:23:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:23:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.390721
2025-12-12T11:23:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:23:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:23:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:23:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:23:29.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:23:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:23:12', tmtdew=16.34, humidity=33.65, cloud=0.0, wind=40.39, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:22:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:23:29.644 [DEBUG] [Thread-68703] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:23:29.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:23:29.748 [DEBUG] [Thread-68706] [transport.py] [_log()] starting thread (client mode): 0xf57c9f00
2025-12-12T11:23:29.748 [DEBUG] [Thread-68706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:23:29.763 [DEBUG] [Thread-68706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:23:29.763 [INFO] [Thread-68706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:23:29.771 [DEBUG] [Thread-68706] [transport.py] [_log()] client lang: <none>
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] server lang: <none>
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] kex follows: False
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] Compression: none
2025-12-12T11:23:29.772 [DEBUG] [Thread-68706] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:23:29.829 [DEBUG] [Thread-68706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:23:29.830 [DEBUG] [Thread-68706] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:23:29.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:23:29.831 [DEBUG] [Thread-68706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:23:29.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:23:29.884 [DEBUG] [Thread-68706] [transport.py] [_log()] userauth is OK
2025-12-12T11:23:29.885 [DEBUG] [Thread-68706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:23:29.885 [DEBUG] [Thread-68706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:23:29.885 [DEBUG] [Thread-68706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:23:29.885 [DEBUG] [Thread-68706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:23:29.899 [INFO] [Thread-68706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:23:29.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:23:29.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:23:30.772 [DEBUG] [Thread-68706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:23:30.772 [DEBUG] [Thread-68706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:23:30.820 [DEBUG] [Thread-68706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:23:30.820 [DEBUG] [Thread-68706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:23:30.830 [DEBUG] [Thread-68706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:23:30.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:23:30.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:23:30.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:23:30.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:23:30.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:23:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:23:30.867 [DEBUG] [Thread-68706] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:23:38.496 [DEBUG] [Thread-68708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:23:42.783 [DEBUG] [Thread-68709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:23:57.835 [DEBUG] [Thread-68710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:00.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:24:00.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:24:00.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:24:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 23, 44), 16.63, 33.17, 0.0, 29.5, 19.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:24:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:23:44
2025-12-12T11:24:01.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:24:01.849 [DEBUG] [Thread-68711] [transport.py] [_log()] starting thread (client mode): 0xf57ca5c0
2025-12-12T11:24:01.849 [DEBUG] [Thread-68711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:24:01.867 [DEBUG] [Thread-68711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:24:01.867 [INFO] [Thread-68711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] client lang: <none>
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] server lang: <none>
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] kex follows: False
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:24:01.870 [DEBUG] [Thread-68711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:24:01.871 [DEBUG] [Thread-68711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:24:01.871 [DEBUG] [Thread-68711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:24:01.871 [DEBUG] [Thread-68711] [transport.py] [_log()] Compression: none
2025-12-12T11:24:01.871 [DEBUG] [Thread-68711] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:24:01.886 [DEBUG] [Thread-68711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:24:01.887 [DEBUG] [Thread-68711] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:24:01.887 [DEBUG] [Thread-68711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:24:01.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:24:01.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:24:01.888 [DEBUG] [Thread-68711] [transport.py] [_log()] userauth is OK
2025-12-12T11:24:01.888 [DEBUG] [Thread-68711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:24:01.888 [DEBUG] [Thread-68711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:24:01.888 [DEBUG] [Thread-68711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:24:01.889 [DEBUG] [Thread-68711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:24:01.908 [INFO] [Thread-68711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:24:01.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:24:02.540 [DEBUG] [Thread-68711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:24:02.540 [DEBUG] [Thread-68711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:24:02.540 [DEBUG] [Thread-68711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:24:02.581 [DEBUG] [Thread-68711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:24:02.581 [DEBUG] [Thread-68711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:24:02.584 [DEBUG] [Thread-68711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:24:02.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:24:02.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:24:02.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:24:02.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:24:02.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:24:02.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:24:02.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:24:02.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:24:02.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:24:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.391068 -999.00  +19.60  31.82     37   +4.90 1 2 2 1 1   888    0 15.19 66.49 ----- 31.8 31.8 345.3 48.7 23.5 -21.0 22.9 -18.4 22.3 -18.6 22.9 -19.5
2025-12-12T11:24:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:24:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:24:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.391068
2025-12-12T11:24:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:24:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:24:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:24:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:24:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:24:02.611 [DEBUG] [Thread-68711] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:24:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:23:44', tmtdew=16.63, humidity=33.17, cloud=0.0, wind=29.5, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:23:08.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:24:02.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:24:02.710 [DEBUG] [Thread-68714] [transport.py] [_log()] starting thread (client mode): 0xf57cb790
2025-12-12T11:24:02.711 [DEBUG] [Thread-68714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:24:02.724 [DEBUG] [Thread-68714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:24:02.725 [INFO] [Thread-68714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:24:02.732 [DEBUG] [Thread-68714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:24:02.732 [DEBUG] [Thread-68714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:24:02.732 [DEBUG] [Thread-68714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] client lang: <none>
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] server lang: <none>
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] kex follows: False
2025-12-12T11:24:02.733 [DEBUG] [Thread-68714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:24:02.734 [DEBUG] [Thread-68714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:24:02.734 [DEBUG] [Thread-68714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:24:02.734 [DEBUG] [Thread-68714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:24:02.734 [DEBUG] [Thread-68714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:24:02.734 [DEBUG] [Thread-68714] [transport.py] [_log()] Compression: none
2025-12-12T11:24:02.734 [DEBUG] [Thread-68714] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:24:02.789 [DEBUG] [Thread-68714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:24:02.790 [DEBUG] [Thread-68714] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:24:02.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:24:02.791 [DEBUG] [Thread-68714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:24:02.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:24:02.845 [DEBUG] [Thread-68714] [transport.py] [_log()] userauth is OK
2025-12-12T11:24:02.845 [DEBUG] [Thread-68714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:24:02.845 [DEBUG] [Thread-68714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:24:02.845 [DEBUG] [Thread-68714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:24:02.845 [DEBUG] [Thread-68714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:24:02.864 [INFO] [Thread-68714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:24:02.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:24:02.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:24:03.714 [DEBUG] [Thread-68714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:24:03.714 [DEBUG] [Thread-68714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:24:03.762 [DEBUG] [Thread-68714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:24:03.762 [DEBUG] [Thread-68714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:24:03.772 [DEBUG] [Thread-68714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:24:03.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:24:03.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:24:03.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:24:03.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:24:03.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:24:03.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:24:03.809 [DEBUG] [Thread-68714] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:24:12.869 [DEBUG] [Thread-68716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:26.497 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:26.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:27.915 [DEBUG] [Thread-68717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:33.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:24:33.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:24:33.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
2025-12-12T11:24:34.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 24, 16), 16.76, 32.92, 0.0, 33.19, 19.59, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:24:34.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:24:16
2025-12-12T11:24:34.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:24:34.807 [DEBUG] [Thread-68718] [transport.py] [_log()] starting thread (client mode): 0xf570e410
2025-12-12T11:24:34.807 [DEBUG] [Thread-68718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:24:34.829 [DEBUG] [Thread-68718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:24:34.829 [INFO] [Thread-68718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] client lang: <none>
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] server lang: <none>
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] kex follows: False
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] Compression: none
2025-12-12T11:24:34.832 [DEBUG] [Thread-68718] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:24:34.851 [DEBUG] [Thread-68718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:24:34.852 [DEBUG] [Thread-68718] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:24:34.852 [DEBUG] [Thread-68718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:24:34.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:24:34.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:24:34.855 [DEBUG] [Thread-68718] [transport.py] [_log()] userauth is OK
2025-12-12T11:24:34.855 [DEBUG] [Thread-68718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:24:34.855 [DEBUG] [Thread-68718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:24:34.855 [DEBUG] [Thread-68718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:24:34.855 [DEBUG] [Thread-68718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:24:34.879 [INFO] [Thread-68718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:24:34.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:24:35.469 [DEBUG] [Thread-68718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:24:35.469 [DEBUG] [Thread-68718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:24:35.470 [DEBUG] [Thread-68718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:24:35.510 [DEBUG] [Thread-68718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:24:35.511 [DEBUG] [Thread-68718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:24:35.514 [DEBUG] [Thread-68718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:24:35.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:24:35.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:24:35.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:24:35.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:24:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:24:35.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:24:35.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:24:35.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:24:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:24:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.391763 -999.00  +19.80  28.66     38   +5.00 1 2 1 1 1   888    0 15.33 73.56 ----- 30.4 28.7 332.5 39.3 23.6 -21.3 22.9 -21.8 22.4 -19.0 22.9 -20.3
2025-12-12T11:24:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:24:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:24:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.391763
2025-12-12T11:24:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:24:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:24:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:24:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:24:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:24:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:24:16', tmtdew=16.76, humidity=32.92, cloud=0.0, wind=33.19, temperature=19.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:24:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:24:35.545 [DEBUG] [Thread-68718] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:24:35.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:24:35.638 [DEBUG] [Thread-68721] [transport.py] [_log()] starting thread (client mode): 0xf570c280
2025-12-12T11:24:35.638 [DEBUG] [Thread-68721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:24:35.655 [DEBUG] [Thread-68721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:24:35.655 [INFO] [Thread-68721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:24:35.663 [DEBUG] [Thread-68721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:24:35.664 [DEBUG] [Thread-68721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] client lang: <none>
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] server lang: <none>
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] kex follows: False
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:24:35.665 [DEBUG] [Thread-68721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:24:35.666 [DEBUG] [Thread-68721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:24:35.666 [DEBUG] [Thread-68721] [transport.py] [_log()] Compression: none
2025-12-12T11:24:35.666 [DEBUG] [Thread-68721] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:24:35.722 [DEBUG] [Thread-68721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:24:35.723 [DEBUG] [Thread-68721] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:24:35.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:24:35.725 [DEBUG] [Thread-68721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:24:35.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:24:35.781 [DEBUG] [Thread-68721] [transport.py] [_log()] userauth is OK
2025-12-12T11:24:35.782 [DEBUG] [Thread-68721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:24:35.782 [DEBUG] [Thread-68721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:24:35.783 [DEBUG] [Thread-68721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:24:35.783 [DEBUG] [Thread-68721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:24:35.802 [INFO] [Thread-68721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:24:35.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:24:35.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:24:36.681 [DEBUG] [Thread-68721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:24:36.681 [DEBUG] [Thread-68721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:24:36.730 [DEBUG] [Thread-68721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:24:36.730 [DEBUG] [Thread-68721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:24:36.739 [DEBUG] [Thread-68721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:24:36.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:24:36.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:24:36.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:24:36.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:24:36.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:24:36.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:24:36.775 [DEBUG] [Thread-68721] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:24:38.548 [DEBUG] [Thread-68723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:42.950 [DEBUG] [Thread-68724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:24:57.993 [DEBUG] [Thread-68725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:25:06.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:25:06.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:25:07.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 24, 48), 17.02, 32.54, 0.0, 49.65, 19.64, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:25:07.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:24:48
2025-12-12T11:25:07.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:25:07.741 [DEBUG] [Thread-68726] [transport.py] [_log()] starting thread (client mode): 0xf2d0f280
2025-12-12T11:25:07.741 [DEBUG] [Thread-68726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:25:07.765 [DEBUG] [Thread-68726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:25:07.765 [INFO] [Thread-68726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:25:07.768 [DEBUG] [Thread-68726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] client lang: <none>
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] server lang: <none>
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] kex follows: False
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] Compression: none
2025-12-12T11:25:07.769 [DEBUG] [Thread-68726] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:25:07.786 [DEBUG] [Thread-68726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:25:07.787 [DEBUG] [Thread-68726] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:25:07.788 [DEBUG] [Thread-68726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:25:07.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:25:07.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:25:07.831 [DEBUG] [Thread-68726] [transport.py] [_log()] userauth is OK
2025-12-12T11:25:07.831 [DEBUG] [Thread-68726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:25:07.832 [DEBUG] [Thread-68726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:25:07.832 [DEBUG] [Thread-68726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:25:07.832 [DEBUG] [Thread-68726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:25:07.863 [INFO] [Thread-68726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:25:07.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:25:13.028 [DEBUG] [Thread-68728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:17.645 [DEBUG] [Thread-68726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:25:17.645 [DEBUG] [Thread-68726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:25:17.646 [DEBUG] [Thread-68726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:25:17.686 [DEBUG] [Thread-68726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:25:17.686 [DEBUG] [Thread-68726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:25:17.688 [DEBUG] [Thread-68726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:25:17.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:25:17.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:25:17.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:25:17.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:25:17.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:25:17.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:25:17.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:25:17.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:25:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:25:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.392110 -999.00  +19.10  41.07     38   +4.60 1 1 2 1 1   888    0 15.38 75.89 ----- 40.0 41.1 319.2 67.6 23.4 -24.2 22.6 -24.7 22.3 -22.2 22.8 -23.0
2025-12-12T11:25:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:25:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:25:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.392110
2025-12-12T11:25:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:25:17.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:25:17.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:25:17.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:25:17.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T11:25:17.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:24:48', tmtdew=17.02, humidity=32.54, cloud=0.0, wind=49.65, temperature=19.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:24:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:25:17.776 [DEBUG] [Thread-68726] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:25:17.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:25:17.870 [DEBUG] [Thread-68730] [transport.py] [_log()] starting thread (client mode): 0xf57a9840
2025-12-12T11:25:17.871 [DEBUG] [Thread-68730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:25:17.885 [DEBUG] [Thread-68730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:25:17.886 [INFO] [Thread-68730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:25:17.893 [DEBUG] [Thread-68730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:25:17.893 [DEBUG] [Thread-68730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:25:17.893 [DEBUG] [Thread-68730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] client lang: <none>
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] server lang: <none>
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] kex follows: False
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] Compression: none
2025-12-12T11:25:17.894 [DEBUG] [Thread-68730] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:25:17.953 [DEBUG] [Thread-68730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:25:17.954 [DEBUG] [Thread-68730] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:25:17.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:25:17.955 [DEBUG] [Thread-68730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:25:17.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:25:18.010 [DEBUG] [Thread-68730] [transport.py] [_log()] userauth is OK
2025-12-12T11:25:18.010 [DEBUG] [Thread-68730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:25:18.010 [DEBUG] [Thread-68730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:25:18.010 [DEBUG] [Thread-68730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:25:18.010 [DEBUG] [Thread-68730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:25:18.035 [INFO] [Thread-68730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:25:18.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:25:18.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:25:18.887 [DEBUG] [Thread-68730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:25:18.887 [DEBUG] [Thread-68730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:25:18.935 [DEBUG] [Thread-68730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:25:18.935 [DEBUG] [Thread-68730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:25:18.945 [DEBUG] [Thread-68730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:25:18.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:25:18.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:25:18.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:25:18.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:25:18.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:25:18.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:25:18.981 [DEBUG] [Thread-68730] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:25:26.637 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:26.638 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:28.066 [DEBUG] [Thread-68732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:38.610 [DEBUG] [Thread-68733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:43.115 [DEBUG] [Thread-68734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:25:49.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:25:49.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:25:49.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:25:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 25, 20), 17.0, 32.52, 0.0, 47.66, 19.44, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:25:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:25:20
2025-12-12T11:25:49.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:25:49.959 [DEBUG] [Thread-68735] [transport.py] [_log()] starting thread (client mode): 0xf570f940
2025-12-12T11:25:49.959 [DEBUG] [Thread-68735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:25:49.980 [DEBUG] [Thread-68735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:25:49.980 [INFO] [Thread-68735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] client lang: <none>
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] server lang: <none>
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] kex follows: False
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:25:49.983 [DEBUG] [Thread-68735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:25:49.984 [DEBUG] [Thread-68735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:25:49.984 [DEBUG] [Thread-68735] [transport.py] [_log()] Compression: none
2025-12-12T11:25:49.984 [DEBUG] [Thread-68735] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:25:50.001 [DEBUG] [Thread-68735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:25:50.002 [DEBUG] [Thread-68735] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:25:50.002 [DEBUG] [Thread-68735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:25:50.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:25:50.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:25:50.004 [DEBUG] [Thread-68735] [transport.py] [_log()] userauth is OK
2025-12-12T11:25:50.005 [DEBUG] [Thread-68735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:25:50.005 [DEBUG] [Thread-68735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:25:50.005 [DEBUG] [Thread-68735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:25:50.005 [DEBUG] [Thread-68735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:25:50.024 [INFO] [Thread-68735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:25:50.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:25:50.665 [DEBUG] [Thread-68735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:25:50.665 [DEBUG] [Thread-68735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:25:50.665 [DEBUG] [Thread-68735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:25:50.706 [DEBUG] [Thread-68735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:25:50.706 [DEBUG] [Thread-68735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:25:50.710 [DEBUG] [Thread-68735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:25:50.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:25:50.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:25:50.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:25:50.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:25:50.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:25:50.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:25:50.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:25:50.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:25:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:25:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.392458 -999.00  +18.40  41.98     39   +4.40 1 2 2 1 1   888    0 15.31 75.54 ----- 31.9 42.0 335.8 53.8 23.2 -23.0 22.5 -24.1 22.1 -21.8 22.6 -21.9
2025-12-12T11:25:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:25:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:25:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.392458
2025-12-12T11:25:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:25:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:25:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:25:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:25:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:25:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:25:20', tmtdew=17.0, humidity=32.52, cloud=0.0, wind=47.66, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:25:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:25:50.737 [DEBUG] [Thread-68735] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:25:50.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:25:50.833 [DEBUG] [Thread-68738] [transport.py] [_log()] starting thread (client mode): 0xf2d0cfa0
2025-12-12T11:25:50.833 [DEBUG] [Thread-68738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:25:50.848 [DEBUG] [Thread-68738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:25:50.848 [INFO] [Thread-68738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] client lang: <none>
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] server lang: <none>
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] kex follows: False
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:25:50.856 [DEBUG] [Thread-68738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:25:50.857 [DEBUG] [Thread-68738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:25:50.857 [DEBUG] [Thread-68738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:25:50.857 [DEBUG] [Thread-68738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:25:50.857 [DEBUG] [Thread-68738] [transport.py] [_log()] Compression: none
2025-12-12T11:25:50.857 [DEBUG] [Thread-68738] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:25:50.913 [DEBUG] [Thread-68738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:25:50.914 [DEBUG] [Thread-68738] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:25:50.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:25:50.915 [DEBUG] [Thread-68738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:25:50.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:25:50.969 [DEBUG] [Thread-68738] [transport.py] [_log()] userauth is OK
2025-12-12T11:25:50.970 [DEBUG] [Thread-68738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:25:50.970 [DEBUG] [Thread-68738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:25:50.970 [DEBUG] [Thread-68738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:25:50.970 [DEBUG] [Thread-68738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:25:50.990 [INFO] [Thread-68738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:25:50.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:25:50.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:25:51.817 [DEBUG] [Thread-68738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:25:51.818 [DEBUG] [Thread-68738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:25:51.866 [DEBUG] [Thread-68738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:25:51.867 [DEBUG] [Thread-68738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:25:51.876 [DEBUG] [Thread-68738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:25:51.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:25:51.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:25:51.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:25:51.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:25:51.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:25:51.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:25:51.913 [DEBUG] [Thread-68738] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:25:58.154 [DEBUG] [Thread-68740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:13.200 [DEBUG] [Thread-68741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:21.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:26:21.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:26:21.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:26:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 25, 52), 16.42, 33.5, 0.0, 32.04, 18.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:26:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:25:52
2025-12-12T11:26:22.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:26:22.891 [DEBUG] [Thread-68742] [transport.py] [_log()] starting thread (client mode): 0xf570efb0
2025-12-12T11:26:22.891 [DEBUG] [Thread-68742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:26:22.912 [DEBUG] [Thread-68742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:26:22.912 [INFO] [Thread-68742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:26:22.915 [DEBUG] [Thread-68742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] client lang: <none>
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] server lang: <none>
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] kex follows: False
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] Compression: none
2025-12-12T11:26:22.916 [DEBUG] [Thread-68742] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:26:22.932 [DEBUG] [Thread-68742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:26:22.932 [DEBUG] [Thread-68742] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:26:22.933 [DEBUG] [Thread-68742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:26:22.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:26:22.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:26:22.935 [DEBUG] [Thread-68742] [transport.py] [_log()] userauth is OK
2025-12-12T11:26:22.935 [DEBUG] [Thread-68742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:26:22.935 [DEBUG] [Thread-68742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:26:22.935 [DEBUG] [Thread-68742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:26:22.935 [DEBUG] [Thread-68742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:26:22.960 [INFO] [Thread-68742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:26:22.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:26:23.741 [DEBUG] [Thread-68742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:26:23.741 [DEBUG] [Thread-68742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:26:23.742 [DEBUG] [Thread-68742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:26:23.782 [DEBUG] [Thread-68742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:26:23.782 [DEBUG] [Thread-68742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:26:23.786 [DEBUG] [Thread-68742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:26:23.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:26:23.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:26:23.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:26:23.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:26:23.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:26:23.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:26:23.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:26:23.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:26:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:26:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.392804 -999.00  +18.10  37.24     40   +4.40 1 2 2 1 1   888    0 15.39 74.38 ----- 21.0 37.2 332.8 44.6 23.1 -22.1 22.5 -22.0 22.1 -19.7 22.6 -21.2
2025-12-12T11:26:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:26:23.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:26:23.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.392804
2025-12-12T11:26:23.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:26:23.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:26:23.806 [DEBUG] [Thread-68742] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:26:23.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:26:23.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:26:23.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:26:23.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:25:52', tmtdew=16.42, humidity=33.5, cloud=0.0, wind=32.04, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:25:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:26:23.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:26:23.911 [DEBUG] [Thread-68745] [transport.py] [_log()] starting thread (client mode): 0xf57a80a0
2025-12-12T11:26:23.911 [DEBUG] [Thread-68745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:26:23.926 [DEBUG] [Thread-68745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:26:23.926 [INFO] [Thread-68745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:26:23.933 [DEBUG] [Thread-68745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:26:23.933 [DEBUG] [Thread-68745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:26:23.933 [DEBUG] [Thread-68745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:26:23.933 [DEBUG] [Thread-68745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] client lang: <none>
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] server lang: <none>
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] kex follows: False
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] Compression: none
2025-12-12T11:26:23.934 [DEBUG] [Thread-68745] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:26:23.992 [DEBUG] [Thread-68745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:26:23.992 [DEBUG] [Thread-68745] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:26:23.993 [DEBUG] [Thread-68745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:26:23.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:26:23.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:26:24.049 [DEBUG] [Thread-68745] [transport.py] [_log()] userauth is OK
2025-12-12T11:26:24.049 [DEBUG] [Thread-68745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:26:24.050 [DEBUG] [Thread-68745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:26:24.050 [DEBUG] [Thread-68745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:26:24.050 [DEBUG] [Thread-68745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:26:24.069 [INFO] [Thread-68745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:26:24.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:26:24.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:26:24.922 [DEBUG] [Thread-68745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:26:24.922 [DEBUG] [Thread-68745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:26:24.969 [DEBUG] [Thread-68745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:26:24.969 [DEBUG] [Thread-68745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:26:24.977 [DEBUG] [Thread-68745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:26:24.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:26:24.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:26:24.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:26:25.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:26:25.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:26:25.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:26:25.015 [DEBUG] [Thread-68745] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:26:26.779 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:26.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:28.232 [DEBUG] [Thread-68747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:38.661 [DEBUG] [Thread-68748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:43.282 [DEBUG] [Thread-68749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:26:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:26:55.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:26:55.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:26:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 26, 24), 16.33, 33.75, 0.0, 26.46, 18.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:26:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:26:24
2025-12-12T11:26:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:26:56.010 [DEBUG] [Thread-68750] [transport.py] [_log()] starting thread (client mode): 0xf57b44c0
2025-12-12T11:26:56.010 [DEBUG] [Thread-68750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:26:56.031 [DEBUG] [Thread-68750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:26:56.031 [INFO] [Thread-68750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:26:56.034 [DEBUG] [Thread-68750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:26:56.034 [DEBUG] [Thread-68750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] client lang: <none>
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] server lang: <none>
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] kex follows: False
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] Compression: none
2025-12-12T11:26:56.035 [DEBUG] [Thread-68750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:26:56.053 [DEBUG] [Thread-68750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:26:56.053 [DEBUG] [Thread-68750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:26:56.054 [DEBUG] [Thread-68750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:26:56.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:26:56.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:26:56.057 [DEBUG] [Thread-68750] [transport.py] [_log()] userauth is OK
2025-12-12T11:26:56.057 [DEBUG] [Thread-68750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:26:56.057 [DEBUG] [Thread-68750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:26:56.057 [DEBUG] [Thread-68750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:26:56.057 [DEBUG] [Thread-68750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:26:56.082 [INFO] [Thread-68750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:26:56.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:26:56.761 [DEBUG] [Thread-68750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:26:56.761 [DEBUG] [Thread-68750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:26:56.761 [DEBUG] [Thread-68750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:26:56.803 [DEBUG] [Thread-68750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:26:56.803 [DEBUG] [Thread-68750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:26:56.805 [DEBUG] [Thread-68750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:26:56.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:26:56.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:26:56.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:26:56.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:26:56.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:26:56.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:26:56.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.393152 -999.00  +18.00  30.02     40   +4.50 1 2 2 1 1   888    0 15.63 73.65 ----- 23.9 30.0 344.3 43.5 23.2 -19.9 22.7 -19.8 22.3 -19.5 22.6 -18.3
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.393152
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:26:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:26:24', tmtdew=16.33, humidity=33.75, cloud=0.0, wind=26.46, temperature=18.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:26:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:26:56.824 [DEBUG] [Thread-68750] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:26:56.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:26:56.910 [DEBUG] [Thread-68753] [transport.py] [_log()] starting thread (client mode): 0xf57c8b20
2025-12-12T11:26:56.910 [DEBUG] [Thread-68753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:26:56.925 [DEBUG] [Thread-68753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:26:56.925 [INFO] [Thread-68753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] client lang: <none>
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] server lang: <none>
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] kex follows: False
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] Compression: none
2025-12-12T11:26:56.933 [DEBUG] [Thread-68753] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:26:56.987 [DEBUG] [Thread-68753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:26:56.987 [DEBUG] [Thread-68753] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:26:56.988 [DEBUG] [Thread-68753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:26:56.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:26:56.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:26:57.045 [DEBUG] [Thread-68753] [transport.py] [_log()] userauth is OK
2025-12-12T11:26:57.045 [DEBUG] [Thread-68753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:26:57.045 [DEBUG] [Thread-68753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:26:57.045 [DEBUG] [Thread-68753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:26:57.045 [DEBUG] [Thread-68753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:26:57.059 [INFO] [Thread-68753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:26:57.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:26:57.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:26:57.909 [DEBUG] [Thread-68753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:26:57.909 [DEBUG] [Thread-68753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:26:57.957 [DEBUG] [Thread-68753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:26:57.957 [DEBUG] [Thread-68753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:26:57.966 [DEBUG] [Thread-68753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:26:57.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:26:57.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:26:57.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:26:57.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:26:57.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:26:57.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:26:58.000 [DEBUG] [Thread-68753] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:26:58.309 [DEBUG] [Thread-68755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:13.348 [DEBUG] [Thread-68756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:26.926 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:26.927 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:28.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:27:28.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:27:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:27:28.381 [DEBUG] [Thread-68757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 26, 56), 16.52, 33.24, 0.0, 36.59, 19.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:27:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:26:56
2025-12-12T11:27:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:27:29.049 [DEBUG] [Thread-68758] [transport.py] [_log()] starting thread (client mode): 0xf57c8e50
2025-12-12T11:27:29.049 [DEBUG] [Thread-68758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:27:29.070 [DEBUG] [Thread-68758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:27:29.070 [INFO] [Thread-68758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] client lang: <none>
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] server lang: <none>
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] kex follows: False
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] Compression: none
2025-12-12T11:27:29.073 [DEBUG] [Thread-68758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:27:29.091 [DEBUG] [Thread-68758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:27:29.091 [DEBUG] [Thread-68758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:27:29.091 [DEBUG] [Thread-68758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:27:29.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:27:29.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:27:29.092 [DEBUG] [Thread-68758] [transport.py] [_log()] userauth is OK
2025-12-12T11:27:29.092 [DEBUG] [Thread-68758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:27:29.092 [DEBUG] [Thread-68758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:27:29.092 [DEBUG] [Thread-68758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:27:29.092 [DEBUG] [Thread-68758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:27:29.108 [INFO] [Thread-68758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:27:29.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:27:29.832 [DEBUG] [Thread-68758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:27:29.832 [DEBUG] [Thread-68758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:27:29.832 [DEBUG] [Thread-68758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:27:29.873 [DEBUG] [Thread-68758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:27:29.873 [DEBUG] [Thread-68758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:27:29.875 [DEBUG] [Thread-68758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:27:29.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:27:29.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:27:29.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:27:29.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:27:29.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:27:29.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:27:29.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.393499 -999.00  +18.50  41.57     40   +4.70 1 2 2 1 1   888    0 15.12 72.26 ----- 27.1 41.6 333.0 51.7 23.6 -18.2 22.9 -20.9 22.4 -18.1 22.9 -16.5
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.393499
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:27:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:26:56', tmtdew=16.52, humidity=33.24, cloud=0.0, wind=36.59, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:26:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:27:29.895 [DEBUG] [Thread-68758] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:27:29.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:27:29.979 [DEBUG] [Thread-68761] [transport.py] [_log()] starting thread (client mode): 0xf570d060
2025-12-12T11:27:29.979 [DEBUG] [Thread-68761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:27:29.993 [DEBUG] [Thread-68761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:27:29.993 [INFO] [Thread-68761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] client lang: <none>
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] server lang: <none>
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] kex follows: False
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] Compression: none
2025-12-12T11:27:30.001 [DEBUG] [Thread-68761] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:27:30.056 [DEBUG] [Thread-68761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:27:30.056 [DEBUG] [Thread-68761] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:27:30.056 [DEBUG] [Thread-68761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:27:30.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:27:30.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:27:30.117 [DEBUG] [Thread-68761] [transport.py] [_log()] userauth is OK
2025-12-12T11:27:30.117 [DEBUG] [Thread-68761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:27:30.117 [DEBUG] [Thread-68761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:27:30.117 [DEBUG] [Thread-68761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:27:30.117 [DEBUG] [Thread-68761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:27:30.132 [INFO] [Thread-68761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:27:30.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:27:30.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:27:30.990 [DEBUG] [Thread-68761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:27:30.990 [DEBUG] [Thread-68761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:27:31.039 [DEBUG] [Thread-68761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:27:31.039 [DEBUG] [Thread-68761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:27:31.047 [DEBUG] [Thread-68761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:27:31.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:27:31.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:27:31.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:27:31.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:27:31.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:27:31.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:27:31.082 [DEBUG] [Thread-68761] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:27:38.713 [DEBUG] [Thread-68763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:43.413 [DEBUG] [Thread-68764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:27:58.475 [DEBUG] [Thread-68765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:28:01.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:28:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:28:01.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 27, 28), 16.66, 32.94, 0.0, 40.28, 19.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:28:01.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:27:28
2025-12-12T11:28:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:28:02.131 [DEBUG] [Thread-68766] [transport.py] [_log()] starting thread (client mode): 0xf57c8220
2025-12-12T11:28:02.131 [DEBUG] [Thread-68766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:28:02.152 [DEBUG] [Thread-68766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:28:02.152 [INFO] [Thread-68766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] client lang: <none>
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] server lang: <none>
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] kex follows: False
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] Compression: none
2025-12-12T11:28:02.155 [DEBUG] [Thread-68766] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:28:02.171 [DEBUG] [Thread-68766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:28:02.171 [DEBUG] [Thread-68766] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:28:02.171 [DEBUG] [Thread-68766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:28:02.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:28:02.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:28:02.172 [DEBUG] [Thread-68766] [transport.py] [_log()] userauth is OK
2025-12-12T11:28:02.172 [DEBUG] [Thread-68766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:28:02.172 [DEBUG] [Thread-68766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:28:02.172 [DEBUG] [Thread-68766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:28:02.172 [DEBUG] [Thread-68766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:28:02.182 [INFO] [Thread-68766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:28:02.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:28:02.811 [DEBUG] [Thread-68766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:28:02.811 [DEBUG] [Thread-68766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:28:02.811 [DEBUG] [Thread-68766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:28:02.853 [DEBUG] [Thread-68766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:28:02.853 [DEBUG] [Thread-68766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:28:02.856 [DEBUG] [Thread-68766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:28:02.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:28:02.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:28:02.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:28:02.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:28:02.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:28:02.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:28:02.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:28:02.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:28:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:28:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.393846 -999.00  +18.50  39.36     40   +4.70 1 2 2 1 1   888    0 15.23 66.65 ----- 43.1 39.4 343.9 49.1 23.7 -19.8 22.9 -22.0 22.5 -18.2 23.0 -19.1
2025-12-12T11:28:02.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:28:02.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:28:02.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.393846
2025-12-12T11:28:02.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:28:02.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:28:02.882 [DEBUG] [Thread-68766] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:28:02.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:28:02.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:28:02.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:28:02.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:27:28', tmtdew=16.66, humidity=32.94, cloud=0.0, wind=40.28, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:27:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:28:02.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:28:02.980 [DEBUG] [Thread-68769] [transport.py] [_log()] starting thread (client mode): 0xf57cae00
2025-12-12T11:28:02.980 [DEBUG] [Thread-68769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:28:02.995 [DEBUG] [Thread-68769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:28:02.995 [INFO] [Thread-68769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:28:03.003 [DEBUG] [Thread-68769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:28:03.003 [DEBUG] [Thread-68769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:28:03.003 [DEBUG] [Thread-68769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] client lang: <none>
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] server lang: <none>
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] kex follows: False
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] Compression: none
2025-12-12T11:28:03.004 [DEBUG] [Thread-68769] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:28:03.061 [DEBUG] [Thread-68769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:28:03.062 [DEBUG] [Thread-68769] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:28:03.062 [DEBUG] [Thread-68769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:28:03.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:28:03.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:28:03.117 [DEBUG] [Thread-68769] [transport.py] [_log()] userauth is OK
2025-12-12T11:28:03.117 [DEBUG] [Thread-68769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:28:03.118 [DEBUG] [Thread-68769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:28:03.118 [DEBUG] [Thread-68769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:28:03.118 [DEBUG] [Thread-68769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:28:03.137 [INFO] [Thread-68769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:28:03.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:28:03.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:28:03.993 [DEBUG] [Thread-68769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:28:03.993 [DEBUG] [Thread-68769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:28:04.041 [DEBUG] [Thread-68769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:28:04.041 [DEBUG] [Thread-68769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:28:04.051 [DEBUG] [Thread-68769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:28:04.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:28:04.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:28:04.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:28:04.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:28:04.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:28:04.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:28:04.087 [DEBUG] [Thread-68769] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:28:13.511 [DEBUG] [Thread-68771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:27.069 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:27.070 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:28.565 [DEBUG] [Thread-68772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:34.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:28:34.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:28:34.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:28:34.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 27, 28), 16.86, 32.44, 0.0, 38.48, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:28:34.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:27:28
2025-12-12T11:28:34.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:28:35.082 [DEBUG] [Thread-68773] [transport.py] [_log()] starting thread (client mode): 0xf57a8850
2025-12-12T11:28:35.082 [DEBUG] [Thread-68773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:28:35.092 [DEBUG] [Thread-68773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:28:35.092 [INFO] [Thread-68773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:35.093 [DEBUG] [Thread-68773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] client lang: <none>
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] server lang: <none>
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] kex follows: False
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] Compression: none
2025-12-12T11:28:35.094 [DEBUG] [Thread-68773] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:28:35.103 [DEBUG] [Thread-68773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:28:35.103 [DEBUG] [Thread-68773] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:28:35.103 [DEBUG] [Thread-68773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:28:35.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:28:35.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:28:35.105 [DEBUG] [Thread-68773] [transport.py] [_log()] userauth is OK
2025-12-12T11:28:35.105 [DEBUG] [Thread-68773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:28:35.105 [DEBUG] [Thread-68773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:28:35.105 [DEBUG] [Thread-68773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:28:35.105 [DEBUG] [Thread-68773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:28:35.126 [INFO] [Thread-68773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:28:35.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:28:35.783 [DEBUG] [Thread-68773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:28:35.783 [DEBUG] [Thread-68773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:28:35.784 [DEBUG] [Thread-68773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:28:35.824 [DEBUG] [Thread-68773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:28:35.824 [DEBUG] [Thread-68773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:28:35.828 [DEBUG] [Thread-68773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:28:35.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:28:35.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:28:35.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:28:35.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:28:35.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:28:35.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:28:35.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:28:35.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:28:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:28:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.394541 -999.00  +18.40  27.71     39   +4.30 1 2 1 1 1   888    0 15.39 68.11 ----- 27.8 27.7 4.0 58.4 23.6 -21.9 22.7 -22.7 22.4 -19.3 22.9 -19.3
2025-12-12T11:28:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:28:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:28:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.394541
2025-12-12T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:28:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:27:28', tmtdew=16.86, humidity=32.44, cloud=0.0, wind=38.48, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:28:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:28:35.856 [DEBUG] [Thread-68773] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:28:35.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:28:35.953 [DEBUG] [Thread-68776] [transport.py] [_log()] starting thread (client mode): 0xf57b6b00
2025-12-12T11:28:35.953 [DEBUG] [Thread-68776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:28:35.968 [DEBUG] [Thread-68776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:28:35.968 [INFO] [Thread-68776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:28:35.975 [DEBUG] [Thread-68776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] client lang: <none>
2025-12-12T11:28:35.976 [DEBUG] [Thread-68776] [transport.py] [_log()] server lang: <none>
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] kex follows: False
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] Compression: none
2025-12-12T11:28:35.977 [DEBUG] [Thread-68776] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:28:36.033 [DEBUG] [Thread-68776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:28:36.034 [DEBUG] [Thread-68776] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:28:36.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:28:36.035 [DEBUG] [Thread-68776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:28:36.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:28:36.090 [DEBUG] [Thread-68776] [transport.py] [_log()] userauth is OK
2025-12-12T11:28:36.090 [DEBUG] [Thread-68776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:28:36.090 [DEBUG] [Thread-68776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:28:36.090 [DEBUG] [Thread-68776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:28:36.090 [DEBUG] [Thread-68776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:28:36.109 [INFO] [Thread-68776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:28:36.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:28:36.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:28:36.938 [DEBUG] [Thread-68776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:28:36.938 [DEBUG] [Thread-68776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:28:36.986 [DEBUG] [Thread-68776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:28:36.986 [DEBUG] [Thread-68776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:28:36.995 [DEBUG] [Thread-68776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:28:37.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:28:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:28:37.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:28:37.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:28:37.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:28:37.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:28:37.029 [DEBUG] [Thread-68776] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:28:38.775 [DEBUG] [Thread-68778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:43.598 [DEBUG] [Thread-68779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:28:58.638 [DEBUG] [Thread-68780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:29:07.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:29: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
2025-12-12T11:29:07.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 4), 17.07, 31.96, 0.0, 32.57, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:29:07.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:04
2025-12-12T11:29:07.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:29:07.993 [DEBUG] [Thread-68781] [transport.py] [_log()] starting thread (client mode): 0xf57c8c70
2025-12-12T11:29:07.993 [DEBUG] [Thread-68781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:29:08.014 [DEBUG] [Thread-68781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:29:08.014 [INFO] [Thread-68781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] client lang: <none>
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] server lang: <none>
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] kex follows: False
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:29:08.017 [DEBUG] [Thread-68781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:29:08.018 [DEBUG] [Thread-68781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:29:08.018 [DEBUG] [Thread-68781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:29:08.018 [DEBUG] [Thread-68781] [transport.py] [_log()] Compression: none
2025-12-12T11:29:08.018 [DEBUG] [Thread-68781] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:29:08.037 [DEBUG] [Thread-68781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:29:08.037 [DEBUG] [Thread-68781] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:29:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:29:08.038 [DEBUG] [Thread-68781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:29:08.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:29:08.041 [DEBUG] [Thread-68781] [transport.py] [_log()] userauth is OK
2025-12-12T11:29:08.041 [DEBUG] [Thread-68781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:29:08.041 [DEBUG] [Thread-68781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:29:08.041 [DEBUG] [Thread-68781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:29:08.041 [DEBUG] [Thread-68781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:29:08.065 [INFO] [Thread-68781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:29:08.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:29:08.698 [DEBUG] [Thread-68781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:29:08.699 [DEBUG] [Thread-68781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:29:08.699 [DEBUG] [Thread-68781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:29:08.739 [DEBUG] [Thread-68781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:29:08.739 [DEBUG] [Thread-68781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:29:08.743 [DEBUG] [Thread-68781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:29:08.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:29:08.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:29:08.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:29:08.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:29:08.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:29:08.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:29:08.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:29:08.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:29:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:29:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.394888 -999.00  +18.10  19.68     39   +4.10 1 2 1 1 1   888    0 15.76 76.25 ----- 23.5 19.7 15.6 47.9 23.4 -22.0 22.6 -22.6 22.3 -19.9 22.6 -20.7
2025-12-12T11:29:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:29:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:29:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.394888
2025-12-12T11:29:08.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:29:08.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:29:08.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:29:08.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:29:08.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:29:08.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:04', tmtdew=17.07, humidity=31.96, cloud=0.0, wind=32.57, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:28:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:29:08.770 [DEBUG] [Thread-68781] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:29:08.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:29:08.865 [DEBUG] [Thread-68784] [transport.py] [_log()] starting thread (client mode): 0xf57cba90
2025-12-12T11:29:08.865 [DEBUG] [Thread-68784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:29:08.880 [DEBUG] [Thread-68784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:29:08.880 [INFO] [Thread-68784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] client lang: <none>
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] server lang: <none>
2025-12-12T11:29:08.888 [DEBUG] [Thread-68784] [transport.py] [_log()] kex follows: False
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] Compression: none
2025-12-12T11:29:08.889 [DEBUG] [Thread-68784] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:29:08.946 [DEBUG] [Thread-68784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:29:08.947 [DEBUG] [Thread-68784] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:29:08.947 [DEBUG] [Thread-68784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:29:08.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:29:08.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:29:09.002 [DEBUG] [Thread-68784] [transport.py] [_log()] userauth is OK
2025-12-12T11:29:09.002 [DEBUG] [Thread-68784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:29:09.002 [DEBUG] [Thread-68784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:29:09.002 [DEBUG] [Thread-68784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:29:09.002 [DEBUG] [Thread-68784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:29:09.021 [INFO] [Thread-68784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:29:09.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:29:09.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:29:09.847 [DEBUG] [Thread-68784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:29:09.847 [DEBUG] [Thread-68784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:29:09.895 [DEBUG] [Thread-68784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:29:09.895 [DEBUG] [Thread-68784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:29:09.905 [DEBUG] [Thread-68784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:29:09.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:29:09.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:29:09.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:29:09.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:29:09.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:29:09.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:29:09.941 [DEBUG] [Thread-68784] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:29:13.673 [DEBUG] [Thread-68786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:27.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:27.211 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:28.722 [DEBUG] [Thread-68787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:38.820 [DEBUG] [Thread-68788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:39.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:29:39.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:29:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:29:40.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 36), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:29:40.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:36
2025-12-12T11:29:40.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:29:40.930 [DEBUG] [Thread-68789] [transport.py] [_log()] starting thread (client mode): 0xf570f0d0
2025-12-12T11:29:40.930 [DEBUG] [Thread-68789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:29:40.957 [DEBUG] [Thread-68789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:29:40.957 [INFO] [Thread-68789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:29:40.960 [DEBUG] [Thread-68789] [transport.py] [_log()] client lang: <none>
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] server lang: <none>
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] kex follows: False
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] Compression: none
2025-12-12T11:29:40.961 [DEBUG] [Thread-68789] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:29:40.979 [DEBUG] [Thread-68789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:29:40.980 [DEBUG] [Thread-68789] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:29:40.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:29:40.981 [DEBUG] [Thread-68789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:29:40.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:29:40.984 [DEBUG] [Thread-68789] [transport.py] [_log()] userauth is OK
2025-12-12T11:29:40.984 [DEBUG] [Thread-68789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:29:40.984 [DEBUG] [Thread-68789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:29:40.984 [DEBUG] [Thread-68789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:29:40.984 [DEBUG] [Thread-68789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:29:41.021 [INFO] [Thread-68789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:29:41.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:29:41.718 [DEBUG] [Thread-68789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:29:41.718 [DEBUG] [Thread-68789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:29:41.719 [DEBUG] [Thread-68789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:29:41.759 [DEBUG] [Thread-68789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:29:41.759 [DEBUG] [Thread-68789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:29:41.763 [DEBUG] [Thread-68789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:29:41.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:29:41.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:29:41.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:29:41.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:29:41.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:29:41.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:29:41.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:29:41.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:29:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:29:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.395235 -999.00  +18.10  29.78     39   +4.20 1 2 1 1 1   888    0 15.18 73.64 ----- 24.9 29.8 14.6 50.8 23.2 -22.6 22.6 -20.8 22.2 -20.8 22.6 -20.1
2025-12-12T11:29:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:29:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:29:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.395235
2025-12-12T11:29:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:29:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:29:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:29:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:29:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:29:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:36', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:29:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:29:41.791 [DEBUG] [Thread-68789] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:29:41.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:29:41.887 [DEBUG] [Thread-68792] [transport.py] [_log()] starting thread (client mode): 0xf57b5cc0
2025-12-12T11:29:41.887 [DEBUG] [Thread-68792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:29:41.902 [DEBUG] [Thread-68792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:29:41.902 [INFO] [Thread-68792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:29:41.910 [DEBUG] [Thread-68792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:29:41.910 [DEBUG] [Thread-68792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:29:41.910 [DEBUG] [Thread-68792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:29:41.910 [DEBUG] [Thread-68792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:41.910 [DEBUG] [Thread-68792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:29:41.910 [DEBUG] [Thread-68792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] client lang: <none>
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] server lang: <none>
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] kex follows: False
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:29:41.911 [DEBUG] [Thread-68792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:29:41.912 [DEBUG] [Thread-68792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:29:41.912 [DEBUG] [Thread-68792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:29:41.912 [DEBUG] [Thread-68792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:29:41.912 [DEBUG] [Thread-68792] [transport.py] [_log()] Compression: none
2025-12-12T11:29:41.912 [DEBUG] [Thread-68792] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:29:41.970 [DEBUG] [Thread-68792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:29:41.970 [DEBUG] [Thread-68792] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:29:41.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:29:41.972 [DEBUG] [Thread-68792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:29:41.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:29:42.026 [DEBUG] [Thread-68792] [transport.py] [_log()] userauth is OK
2025-12-12T11:29:42.026 [DEBUG] [Thread-68792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:29:42.026 [DEBUG] [Thread-68792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:29:42.026 [DEBUG] [Thread-68792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:29:42.026 [DEBUG] [Thread-68792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:29:42.045 [INFO] [Thread-68792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:29:42.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:29:42.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:29:42.896 [DEBUG] [Thread-68792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:29:42.896 [DEBUG] [Thread-68792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:29:42.943 [DEBUG] [Thread-68792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:29:42.943 [DEBUG] [Thread-68792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:29:42.951 [DEBUG] [Thread-68792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:29:42.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:29:42.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:29:42.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:29:42.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:29:42.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:29:42.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:29:42.983 [DEBUG] [Thread-68792] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:29:43.757 [DEBUG] [Thread-68794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:29:58.814 [DEBUG] [Thread-68795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:30:13.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:30:13.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:30:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 36), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:30:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:36
2025-12-12T11:30:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:30:13.839 [DEBUG] [Thread-68796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:13.970 [DEBUG] [Thread-68797] [transport.py] [_log()] starting thread (client mode): 0xf2d0d5a0
2025-12-12T11:30:13.970 [DEBUG] [Thread-68797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:30:13.992 [DEBUG] [Thread-68797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:30:13.992 [INFO] [Thread-68797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] client lang: <none>
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] server lang: <none>
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] kex follows: False
2025-12-12T11:30:13.996 [DEBUG] [Thread-68797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:30:13.997 [DEBUG] [Thread-68797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:30:13.997 [DEBUG] [Thread-68797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:30:13.997 [DEBUG] [Thread-68797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:30:13.997 [DEBUG] [Thread-68797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:30:13.997 [DEBUG] [Thread-68797] [transport.py] [_log()] Compression: none
2025-12-12T11:30:13.997 [DEBUG] [Thread-68797] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:30:14.013 [DEBUG] [Thread-68797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:30:14.013 [DEBUG] [Thread-68797] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:30:14.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:30:14.014 [DEBUG] [Thread-68797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:30:14.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:30:14.024 [DEBUG] [Thread-68797] [transport.py] [_log()] userauth is OK
2025-12-12T11:30:14.024 [DEBUG] [Thread-68797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:30:14.024 [DEBUG] [Thread-68797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:30:14.024 [DEBUG] [Thread-68797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:30:14.024 [DEBUG] [Thread-68797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:30:14.045 [INFO] [Thread-68797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:30:14.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:30:16.742 [DEBUG] [Thread-68797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:30:16.742 [DEBUG] [Thread-68797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:30:16.742 [DEBUG] [Thread-68797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:30:16.783 [DEBUG] [Thread-68797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:30:16.783 [DEBUG] [Thread-68797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:30:16.786 [DEBUG] [Thread-68797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:30:16.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:30:16.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:30:16.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:30:16.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:30:16.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:30:16.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:30:16.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.395583 -999.00  +18.70  23.78     38   +4.20 1 2 1 1 1   888    0 15.63 74.46 ----- 39.9 23.8 357.5 43.2 23.4 -20.6 22.8 -20.7 22.4 -17.6 22.7 -18.1
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.395583
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:30:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:36', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:29:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:30:16.812 [DEBUG] [Thread-68797] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:30:16.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:30:16.900 [DEBUG] [Thread-68800] [transport.py] [_log()] starting thread (client mode): 0xf57ca020
2025-12-12T11:30:16.900 [DEBUG] [Thread-68800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:30:16.923 [DEBUG] [Thread-68800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:30:16.923 [INFO] [Thread-68800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:30:16.930 [DEBUG] [Thread-68800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] client lang: <none>
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] server lang: <none>
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] kex follows: False
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:30:16.931 [DEBUG] [Thread-68800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:30:16.932 [DEBUG] [Thread-68800] [transport.py] [_log()] Compression: none
2025-12-12T11:30:16.932 [DEBUG] [Thread-68800] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:30:16.992 [DEBUG] [Thread-68800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:30:16.992 [DEBUG] [Thread-68800] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:30:16.993 [DEBUG] [Thread-68800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:30:16.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:30:16.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:30:17.053 [DEBUG] [Thread-68800] [transport.py] [_log()] userauth is OK
2025-12-12T11:30:17.053 [DEBUG] [Thread-68800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:30:17.053 [DEBUG] [Thread-68800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:30:17.053 [DEBUG] [Thread-68800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:30:17.053 [DEBUG] [Thread-68800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:30:17.079 [INFO] [Thread-68800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:30:17.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:30:17.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:30:17.931 [DEBUG] [Thread-68800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:30:17.931 [DEBUG] [Thread-68800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:30:17.979 [DEBUG] [Thread-68800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:30:17.979 [DEBUG] [Thread-68800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:30:17.987 [DEBUG] [Thread-68800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:30:17.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:30:17.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:30:18.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:30:18.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:30:18.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:30:18.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:30:18.022 [DEBUG] [Thread-68800] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:30:27.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:27.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:28.868 [DEBUG] [Thread-68802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:38.880 [DEBUG] [Thread-68803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:43.912 [DEBUG] [Thread-68804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:30:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:30:48.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:30:48.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:30:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 36), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:30:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:36
2025-12-12T11:30:48.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:30:49.009 [DEBUG] [Thread-68805] [transport.py] [_log()] starting thread (client mode): 0xf570e200
2025-12-12T11:30:49.009 [DEBUG] [Thread-68805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:30:49.030 [DEBUG] [Thread-68805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:30:49.030 [INFO] [Thread-68805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:30:49.033 [DEBUG] [Thread-68805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:30:49.033 [DEBUG] [Thread-68805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:30:49.033 [DEBUG] [Thread-68805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] client lang: <none>
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] server lang: <none>
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] kex follows: False
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:30:49.034 [DEBUG] [Thread-68805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:30:49.035 [DEBUG] [Thread-68805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:30:49.035 [DEBUG] [Thread-68805] [transport.py] [_log()] Compression: none
2025-12-12T11:30:49.035 [DEBUG] [Thread-68805] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:30:49.052 [DEBUG] [Thread-68805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:30:49.052 [DEBUG] [Thread-68805] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:30:49.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:30:49.053 [DEBUG] [Thread-68805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:30:49.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:30:49.055 [DEBUG] [Thread-68805] [transport.py] [_log()] userauth is OK
2025-12-12T11:30:49.055 [DEBUG] [Thread-68805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:30:49.055 [DEBUG] [Thread-68805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:30:49.056 [DEBUG] [Thread-68805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:30:49.056 [DEBUG] [Thread-68805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:30:49.079 [INFO] [Thread-68805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:30:49.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:30:49.711 [DEBUG] [Thread-68805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:30:49.712 [DEBUG] [Thread-68805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:30:49.712 [DEBUG] [Thread-68805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:30:49.753 [DEBUG] [Thread-68805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:30:49.753 [DEBUG] [Thread-68805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:30:49.756 [DEBUG] [Thread-68805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:30:49.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:30:49.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:30:49.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:30:49.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:30:49.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:30:49.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:30:49.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:30:49.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:30:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:30:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.395929 -999.00  +19.10  39.39     38   +4.40 1 2 2 1 1   888    0 15.72 77.50 ----- 35.7 39.4 331.6 51.0 23.4 -20.9 22.8 -20.2 22.4 -18.9 22.8 -18.0
2025-12-12T11:30:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:30:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:30:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.395929
2025-12-12T11:30:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:30:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:30:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:30:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:30:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:30:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:36', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:30:08.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:30:49.779 [DEBUG] [Thread-68805] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:30:49.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:30:49.877 [DEBUG] [Thread-68808] [transport.py] [_log()] starting thread (client mode): 0xf570f6d0
2025-12-12T11:30:49.877 [DEBUG] [Thread-68808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:30:49.891 [DEBUG] [Thread-68808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:30:49.891 [INFO] [Thread-68808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] client lang: <none>
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] server lang: <none>
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] kex follows: False
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:30:49.899 [DEBUG] [Thread-68808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:30:49.900 [DEBUG] [Thread-68808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:30:49.900 [DEBUG] [Thread-68808] [transport.py] [_log()] Compression: none
2025-12-12T11:30:49.900 [DEBUG] [Thread-68808] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:30:49.957 [DEBUG] [Thread-68808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:30:49.957 [DEBUG] [Thread-68808] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:30:49.957 [DEBUG] [Thread-68808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:30:49.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:30:49.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:30:50.013 [DEBUG] [Thread-68808] [transport.py] [_log()] userauth is OK
2025-12-12T11:30:50.013 [DEBUG] [Thread-68808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:30:50.013 [DEBUG] [Thread-68808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:30:50.013 [DEBUG] [Thread-68808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:30:50.013 [DEBUG] [Thread-68808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:30:50.031 [INFO] [Thread-68808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:30:50.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:30:50.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:30:50.894 [DEBUG] [Thread-68808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:30:50.894 [DEBUG] [Thread-68808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:30:50.943 [DEBUG] [Thread-68808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:30:50.943 [DEBUG] [Thread-68808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:30:50.952 [DEBUG] [Thread-68808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:30:50.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:30:50.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:30:50.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:30:50.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:30:50.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:30:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:30:50.986 [DEBUG] [Thread-68808] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:30:58.938 [DEBUG] [Thread-68810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:13.992 [DEBUG] [Thread-68811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:31:21.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:31:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:31:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 36), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:31:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:36
2025-12-12T11:31:21.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:31:22.012 [DEBUG] [Thread-68812] [transport.py] [_log()] starting thread (client mode): 0xf570e1a0
2025-12-12T11:31:22.012 [DEBUG] [Thread-68812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:31:22.031 [DEBUG] [Thread-68812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:31:22.031 [INFO] [Thread-68812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] client lang: <none>
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] server lang: <none>
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] kex follows: False
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] Compression: none
2025-12-12T11:31:22.034 [DEBUG] [Thread-68812] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:31:22.051 [DEBUG] [Thread-68812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:31:22.051 [DEBUG] [Thread-68812] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:31:22.051 [DEBUG] [Thread-68812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:31:22.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:31:22.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:31:22.052 [DEBUG] [Thread-68812] [transport.py] [_log()] userauth is OK
2025-12-12T11:31:22.052 [DEBUG] [Thread-68812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:31:22.052 [DEBUG] [Thread-68812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:31:22.052 [DEBUG] [Thread-68812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:31:22.052 [DEBUG] [Thread-68812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:31:22.061 [INFO] [Thread-68812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:31:22.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:31:22.789 [DEBUG] [Thread-68812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:31:22.790 [DEBUG] [Thread-68812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:31:22.790 [DEBUG] [Thread-68812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:31:22.830 [DEBUG] [Thread-68812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:31:22.830 [DEBUG] [Thread-68812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:31:22.833 [DEBUG] [Thread-68812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:31:22.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:31:22.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:31:22.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:31:22.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:31:22.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:31:22.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:31:22.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.396277 -999.00  +18.60  42.39     37   +3.80 1 2 2 1 1   888    0 15.70 78.89 ----- 41.1 42.4 331.8 55.9 23.5 -22.2 22.8 -22.1 22.5 -18.4 23.0 -19.2
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.396277
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:31:22.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:36', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:30:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:31:22.853 [DEBUG] [Thread-68812] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:31:22.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:31:22.937 [DEBUG] [Thread-68815] [transport.py] [_log()] starting thread (client mode): 0xf570db10
2025-12-12T11:31:22.938 [DEBUG] [Thread-68815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:31:22.952 [DEBUG] [Thread-68815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:31:22.952 [INFO] [Thread-68815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] client lang: <none>
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] server lang: <none>
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] kex follows: False
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] Compression: none
2025-12-12T11:31:22.960 [DEBUG] [Thread-68815] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:31:23.015 [DEBUG] [Thread-68815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:31:23.016 [DEBUG] [Thread-68815] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:31:23.016 [DEBUG] [Thread-68815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:31:23.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:31:23.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:31:23.073 [DEBUG] [Thread-68815] [transport.py] [_log()] userauth is OK
2025-12-12T11:31:23.073 [DEBUG] [Thread-68815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:31:23.073 [DEBUG] [Thread-68815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:31:23.073 [DEBUG] [Thread-68815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:31:23.073 [DEBUG] [Thread-68815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:31:23.087 [INFO] [Thread-68815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:31:23.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:31:23.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:31:23.936 [DEBUG] [Thread-68815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:31:23.936 [DEBUG] [Thread-68815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:31:23.984 [DEBUG] [Thread-68815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:31:23.984 [DEBUG] [Thread-68815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:31:23.993 [DEBUG] [Thread-68815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:31:24.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:31:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:31:24.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:31:24.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:31:24.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:31:24.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:31:24.024 [DEBUG] [Thread-68815] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:31:27.494 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:27.495 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:29.026 [DEBUG] [Thread-68817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:38.933 [DEBUG] [Thread-68818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:44.075 [DEBUG] [Thread-68819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:31:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:31:54.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:31:54.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:31:54.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 36), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:31:54.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:36
2025-12-12T11:31:54.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:31:55.050 [DEBUG] [Thread-68820] [transport.py] [_log()] starting thread (client mode): 0xf81f1bd0
2025-12-12T11:31:55.050 [DEBUG] [Thread-68820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:31:55.071 [DEBUG] [Thread-68820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:31:55.071 [INFO] [Thread-68820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:55.074 [DEBUG] [Thread-68820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] client lang: <none>
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] server lang: <none>
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] kex follows: False
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] Compression: none
2025-12-12T11:31:55.075 [DEBUG] [Thread-68820] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:31:55.091 [DEBUG] [Thread-68820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:31:55.091 [DEBUG] [Thread-68820] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:31:55.091 [DEBUG] [Thread-68820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:31:55.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:31:55.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:31:55.092 [DEBUG] [Thread-68820] [transport.py] [_log()] userauth is OK
2025-12-12T11:31:55.092 [DEBUG] [Thread-68820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:31:55.092 [DEBUG] [Thread-68820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:31:55.092 [DEBUG] [Thread-68820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:31:55.092 [DEBUG] [Thread-68820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:31:55.108 [INFO] [Thread-68820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:31:55.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:31:55.711 [DEBUG] [Thread-68820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:31:55.712 [DEBUG] [Thread-68820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:31:55.712 [DEBUG] [Thread-68820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:31:55.753 [DEBUG] [Thread-68820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:31:55.753 [DEBUG] [Thread-68820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:31:55.755 [DEBUG] [Thread-68820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:31:55.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:31:55.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:31:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:31:55.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:31:55.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:31:55.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:31:55.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.396624 -999.00  +18.80  35.63     38   +4.40 1 2 2 1 1   888    0 16.39 96.48 ----- 36.8 35.6 349.3 52.9 23.6 -19.3 22.8 -19.7 22.5 -15.9 23.1 -16.0
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.396624
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:31:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:36', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:31:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:31:55.772 [DEBUG] [Thread-68820] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:31:55.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:31:55.857 [DEBUG] [Thread-68823] [transport.py] [_log()] starting thread (client mode): 0xf81f38b0
2025-12-12T11:31:55.857 [DEBUG] [Thread-68823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:31:55.872 [DEBUG] [Thread-68823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:31:55.872 [INFO] [Thread-68823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] client lang: <none>
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] server lang: <none>
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] kex follows: False
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] Compression: none
2025-12-12T11:31:55.880 [DEBUG] [Thread-68823] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:31:55.936 [DEBUG] [Thread-68823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:31:55.936 [DEBUG] [Thread-68823] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:31:55.936 [DEBUG] [Thread-68823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:31:55.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:31:55.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:31:55.993 [DEBUG] [Thread-68823] [transport.py] [_log()] userauth is OK
2025-12-12T11:31:55.993 [DEBUG] [Thread-68823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:31:55.993 [DEBUG] [Thread-68823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:31:55.993 [DEBUG] [Thread-68823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:31:55.994 [DEBUG] [Thread-68823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:31:56.012 [INFO] [Thread-68823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:31:56.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:31:56.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:31:56.856 [DEBUG] [Thread-68823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:31:56.856 [DEBUG] [Thread-68823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:31:56.903 [DEBUG] [Thread-68823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:31:56.904 [DEBUG] [Thread-68823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:31:56.914 [DEBUG] [Thread-68823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:31:56.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:31:56.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:31:56.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:31:56.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:31:56.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:31:56.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:31:56.948 [DEBUG] [Thread-68823] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:31:59.102 [DEBUG] [Thread-68825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:14.140 [DEBUG] [Thread-68826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:32:26.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:32:26.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:32:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 39), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:32:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:39
2025-12-12T11:32:27.634 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:27.635 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:32:27.895 [DEBUG] [Thread-68827] [transport.py] [_log()] starting thread (client mode): 0xf57c8b50
2025-12-12T11:32:27.895 [DEBUG] [Thread-68827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:32:27.915 [DEBUG] [Thread-68827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:32:27.915 [INFO] [Thread-68827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:32:27.916 [DEBUG] [Thread-68827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] client lang: <none>
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] server lang: <none>
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] kex follows: False
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:32:27.917 [DEBUG] [Thread-68827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:32:27.918 [DEBUG] [Thread-68827] [transport.py] [_log()] Compression: none
2025-12-12T11:32:27.918 [DEBUG] [Thread-68827] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:32:27.935 [DEBUG] [Thread-68827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:32:27.936 [DEBUG] [Thread-68827] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:32:27.936 [DEBUG] [Thread-68827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:32:27.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:32:27.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:32:27.938 [DEBUG] [Thread-68827] [transport.py] [_log()] userauth is OK
2025-12-12T11:32:27.938 [DEBUG] [Thread-68827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:32:27.939 [DEBUG] [Thread-68827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:32:27.939 [DEBUG] [Thread-68827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:32:27.939 [DEBUG] [Thread-68827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:32:27.956 [INFO] [Thread-68827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:32:27.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:32:28.698 [DEBUG] [Thread-68827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:32:28.698 [DEBUG] [Thread-68827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:32:28.698 [DEBUG] [Thread-68827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:32:28.739 [DEBUG] [Thread-68827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:32:28.739 [DEBUG] [Thread-68827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:32:28.742 [DEBUG] [Thread-68827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:32:28.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:32:28.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:32:28.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:32:28.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:32:28.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:32:28.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:32:28.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:32:28.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:32:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:32:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.396971 -999.00  +19.10  42.28     38   +4.70 1 2 2 1 1   888    0 16.63 105.57 ----- 38.8 42.3 316.8 50.1 23.7 -19.1 23.0 -19.5 22.7 -16.4 23.2 -16.7
2025-12-12T11:32:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:32:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:32:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.396971
2025-12-12T11:32:28.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:32:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:32:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:32:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:32:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:32:28.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:39', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:31:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:32:28.768 [DEBUG] [Thread-68827] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:32:28.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:32:28.868 [DEBUG] [Thread-68830] [transport.py] [_log()] starting thread (client mode): 0xf8188eb0
2025-12-12T11:32:28.868 [DEBUG] [Thread-68830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:32:28.883 [DEBUG] [Thread-68830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:32:28.883 [INFO] [Thread-68830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:32:28.890 [DEBUG] [Thread-68830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:32:28.891 [DEBUG] [Thread-68830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] client lang: <none>
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] server lang: <none>
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] kex follows: False
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:32:28.892 [DEBUG] [Thread-68830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:32:28.893 [DEBUG] [Thread-68830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:32:28.893 [DEBUG] [Thread-68830] [transport.py] [_log()] Compression: none
2025-12-12T11:32:28.893 [DEBUG] [Thread-68830] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:32:28.950 [DEBUG] [Thread-68830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:32:28.951 [DEBUG] [Thread-68830] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:32:28.951 [DEBUG] [Thread-68830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:32:28.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:32:28.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:32:29.009 [DEBUG] [Thread-68830] [transport.py] [_log()] userauth is OK
2025-12-12T11:32:29.009 [DEBUG] [Thread-68830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:32:29.010 [DEBUG] [Thread-68830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:32:29.010 [DEBUG] [Thread-68830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:32:29.010 [DEBUG] [Thread-68830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:32:29.029 [INFO] [Thread-68830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:32:29.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:32:29.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:32:29.171 [DEBUG] [Thread-68832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:29.882 [DEBUG] [Thread-68830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:32:29.882 [DEBUG] [Thread-68830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:32:29.930 [DEBUG] [Thread-68830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:32:29.930 [DEBUG] [Thread-68830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:32:29.939 [DEBUG] [Thread-68830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:32:29.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:32:29.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:32:29.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:32:29.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:32:29.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:32:29.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:32:29.975 [DEBUG] [Thread-68830] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:32:38.962 [DEBUG] [Thread-68833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:44.216 [DEBUG] [Thread-68834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:59.246 [DEBUG] [Thread-68835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:32:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:32:59.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:33:00.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:33:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 39), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:33:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:39
2025-12-12T11:33:00.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:33:00.961 [DEBUG] [Thread-68836] [transport.py] [_log()] starting thread (client mode): 0xf81f2500
2025-12-12T11:33:00.961 [DEBUG] [Thread-68836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:33:00.982 [DEBUG] [Thread-68836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:33:00.982 [INFO] [Thread-68836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:33:00.985 [DEBUG] [Thread-68836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:33:00.985 [DEBUG] [Thread-68836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:33:00.985 [DEBUG] [Thread-68836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:33:00.985 [DEBUG] [Thread-68836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:00.985 [DEBUG] [Thread-68836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] client lang: <none>
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] server lang: <none>
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] kex follows: False
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] Compression: none
2025-12-12T11:33:00.986 [DEBUG] [Thread-68836] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:33:01.004 [DEBUG] [Thread-68836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:33:01.004 [DEBUG] [Thread-68836] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:33:01.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:33:01.005 [DEBUG] [Thread-68836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:33:01.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:33:01.007 [DEBUG] [Thread-68836] [transport.py] [_log()] userauth is OK
2025-12-12T11:33:01.007 [DEBUG] [Thread-68836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:33:01.007 [DEBUG] [Thread-68836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:33:01.007 [DEBUG] [Thread-68836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:33:01.007 [DEBUG] [Thread-68836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:33:01.030 [INFO] [Thread-68836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:33:01.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:33:01.693 [DEBUG] [Thread-68836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:33:01.693 [DEBUG] [Thread-68836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:33:01.693 [DEBUG] [Thread-68836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:33:01.734 [DEBUG] [Thread-68836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:33:01.735 [DEBUG] [Thread-68836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:33:01.737 [DEBUG] [Thread-68836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:33:01.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:33:01.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:33:01.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:33:01.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:33:01.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:33:01.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:33:01.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:33:01.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:33:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:33:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.397666 -999.00  +18.80  34.58     39   +4.60 1 2 2 1 1   888    0 16.79 102.64 ----- 25.9 34.6 318.4 40.6 23.6 -20.6 23.0 -19.0 22.5 -17.7 23.1 -18.1
2025-12-12T11:33:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:33:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.397666
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:33:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:39', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:32:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:33:01.754 [DEBUG] [Thread-68836] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:33:01.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:33:01.846 [DEBUG] [Thread-68839] [transport.py] [_log()] starting thread (client mode): 0xf81f08e0
2025-12-12T11:33:01.846 [DEBUG] [Thread-68839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:33:01.861 [DEBUG] [Thread-68839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:33:01.861 [INFO] [Thread-68839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:33:01.868 [DEBUG] [Thread-68839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:33:01.868 [DEBUG] [Thread-68839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:33:01.868 [DEBUG] [Thread-68839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:33:01.868 [DEBUG] [Thread-68839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:01.868 [DEBUG] [Thread-68839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] client lang: <none>
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] server lang: <none>
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] kex follows: False
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:33:01.869 [DEBUG] [Thread-68839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:33:01.870 [DEBUG] [Thread-68839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:33:01.870 [DEBUG] [Thread-68839] [transport.py] [_log()] Compression: none
2025-12-12T11:33:01.870 [DEBUG] [Thread-68839] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:33:01.925 [DEBUG] [Thread-68839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:33:01.926 [DEBUG] [Thread-68839] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:33:01.926 [DEBUG] [Thread-68839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:33:01.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:33:01.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:33:01.981 [DEBUG] [Thread-68839] [transport.py] [_log()] userauth is OK
2025-12-12T11:33:01.981 [DEBUG] [Thread-68839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:33:01.981 [DEBUG] [Thread-68839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:33:01.981 [DEBUG] [Thread-68839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:33:01.981 [DEBUG] [Thread-68839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:33:02.000 [INFO] [Thread-68839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:33:02.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:33:02.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:33:02.886 [DEBUG] [Thread-68839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:33:02.887 [DEBUG] [Thread-68839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:33:02.936 [DEBUG] [Thread-68839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:33:02.936 [DEBUG] [Thread-68839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:33:02.948 [DEBUG] [Thread-68839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:33:02.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:33:02.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:33:02.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:33:02.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:33:02.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:33:02.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:33:02.989 [DEBUG] [Thread-68839] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:33:14.277 [DEBUG] [Thread-68841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:33:27.774 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:33:27.775 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:33:29.327 [DEBUG] [Thread-68842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:33:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:33:32.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:33:32.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:33:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 39), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:33:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:39
2025-12-12T11:33:33.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:33:33.926 [DEBUG] [Thread-68843] [transport.py] [_log()] starting thread (client mode): 0xf818a140
2025-12-12T11:33:33.926 [DEBUG] [Thread-68843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:33:33.946 [DEBUG] [Thread-68843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:33:33.946 [INFO] [Thread-68843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:33:33.949 [DEBUG] [Thread-68843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:33:33.949 [DEBUG] [Thread-68843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:33:33.949 [DEBUG] [Thread-68843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:33:33.949 [DEBUG] [Thread-68843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:33.949 [DEBUG] [Thread-68843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] client lang: <none>
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] server lang: <none>
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] kex follows: False
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] Compression: none
2025-12-12T11:33:33.950 [DEBUG] [Thread-68843] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:33:33.967 [DEBUG] [Thread-68843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:33:33.967 [DEBUG] [Thread-68843] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:33:33.968 [DEBUG] [Thread-68843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:33:33.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:33:33.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:33:33.969 [DEBUG] [Thread-68843] [transport.py] [_log()] userauth is OK
2025-12-12T11:33:33.970 [DEBUG] [Thread-68843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:33:33.970 [DEBUG] [Thread-68843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:33:33.970 [DEBUG] [Thread-68843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:33:33.970 [DEBUG] [Thread-68843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:33:34.002 [INFO] [Thread-68843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:33:34.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:33:34.726 [DEBUG] [Thread-68843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:33:34.726 [DEBUG] [Thread-68843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:33:34.726 [DEBUG] [Thread-68843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:33:34.767 [DEBUG] [Thread-68843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:33:34.767 [DEBUG] [Thread-68843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:33:34.770 [DEBUG] [Thread-68843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:33:34.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:33:34.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:33:34.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:33:34.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:33:34.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:33:34.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:33:34.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:33:34.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:33:34.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:33:34.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.398013 -999.00  +19.10  32.80     38   +4.50 1 2 2 1 1   888    0 16.92 111.06 ----- 32.0 32.8 1.6 43.5 23.7 -19.4 23.0 -18.9 22.6 -17.2 23.2 -17.1
2025-12-12T11:33:34.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:33:34.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:33:34.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.398013
2025-12-12T11:33:34.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:33:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:33:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:33:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:33:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:33:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:39', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:33:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:33:34.795 [DEBUG] [Thread-68843] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:33:34.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:33:34.890 [DEBUG] [Thread-68846] [transport.py] [_log()] starting thread (client mode): 0xf81892d0
2025-12-12T11:33:34.890 [DEBUG] [Thread-68846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:33:34.910 [DEBUG] [Thread-68846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:33:34.910 [INFO] [Thread-68846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:33:34.918 [DEBUG] [Thread-68846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] client lang: <none>
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] server lang: <none>
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] kex follows: False
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] Compression: none
2025-12-12T11:33:34.919 [DEBUG] [Thread-68846] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:33:34.977 [DEBUG] [Thread-68846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:33:34.977 [DEBUG] [Thread-68846] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:33:34.978 [DEBUG] [Thread-68846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:33:34.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:33:34.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:33:35.033 [DEBUG] [Thread-68846] [transport.py] [_log()] userauth is OK
2025-12-12T11:33:35.033 [DEBUG] [Thread-68846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:33:35.033 [DEBUG] [Thread-68846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:33:35.033 [DEBUG] [Thread-68846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:33:35.034 [DEBUG] [Thread-68846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:33:35.053 [INFO] [Thread-68846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:33:35.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:33:35.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:33:35.931 [DEBUG] [Thread-68846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:33:35.931 [DEBUG] [Thread-68846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:33:35.979 [DEBUG] [Thread-68846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:33:35.979 [DEBUG] [Thread-68846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:33:35.988 [DEBUG] [Thread-68846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:33:35.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:33:35.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:33:36.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:33:36.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:33:36.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:33:36.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:33:36.022 [DEBUG] [Thread-68846] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:33:39.013 [DEBUG] [Thread-68848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:33:44.357 [DEBUG] [Thread-68849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:33:59.398 [DEBUG] [Thread-68850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:34:06.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:34:06.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:34:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 39), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:34:06.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:39
2025-12-12T11:34:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:34:06.995 [DEBUG] [Thread-68851] [transport.py] [_log()] starting thread (client mode): 0xf81f2c50
2025-12-12T11:34:06.995 [DEBUG] [Thread-68851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:34:07.015 [DEBUG] [Thread-68851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:34:07.015 [INFO] [Thread-68851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] client lang: <none>
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] server lang: <none>
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] kex follows: False
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] Compression: none
2025-12-12T11:34:07.019 [DEBUG] [Thread-68851] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:34:07.035 [DEBUG] [Thread-68851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:34:07.035 [DEBUG] [Thread-68851] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:34:07.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:34:07.036 [DEBUG] [Thread-68851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:34:07.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:34:07.038 [DEBUG] [Thread-68851] [transport.py] [_log()] userauth is OK
2025-12-12T11:34:07.038 [DEBUG] [Thread-68851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:34:07.038 [DEBUG] [Thread-68851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:34:07.038 [DEBUG] [Thread-68851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:34:07.038 [DEBUG] [Thread-68851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:34:07.072 [INFO] [Thread-68851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:34:07.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:34:07.688 [DEBUG] [Thread-68851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:34:07.689 [DEBUG] [Thread-68851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:34:07.689 [DEBUG] [Thread-68851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:34:07.730 [DEBUG] [Thread-68851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:34:07.731 [DEBUG] [Thread-68851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:34:07.733 [DEBUG] [Thread-68851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:34:07.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:34:07.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:34:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:34:07.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:34:07.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:34:07.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:34:07.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:34:07.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:34:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:34:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.398360 -999.00  +18.80  44.90     39   +4.70 1 2 2 1 1   888    0 16.86 108.22 ----- 27.9 44.9 334.8 56.7 23.7 -18.8 22.9 -19.7 22.8 -16.1 23.2 -16.2
2025-12-12T11:34:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:34:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:34:07.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.398360
2025-12-12T11:34:07.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:34:07.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:34:07.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:34:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:34:07.766 [DEBUG] [Thread-68851] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:34:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:34:07.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:39', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:33:38.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:34:07.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:34:07.861 [DEBUG] [Thread-68854] [transport.py] [_log()] starting thread (client mode): 0xf81f0670
2025-12-12T11:34:07.861 [DEBUG] [Thread-68854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:34:07.876 [DEBUG] [Thread-68854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:34:07.877 [INFO] [Thread-68854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:34:07.884 [DEBUG] [Thread-68854] [transport.py] [_log()] client lang: <none>
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] server lang: <none>
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] kex follows: False
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] Compression: none
2025-12-12T11:34:07.885 [DEBUG] [Thread-68854] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:34:07.942 [DEBUG] [Thread-68854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:34:07.943 [DEBUG] [Thread-68854] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:34:07.943 [DEBUG] [Thread-68854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:34:07.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:34:07.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:34:08.001 [DEBUG] [Thread-68854] [transport.py] [_log()] userauth is OK
2025-12-12T11:34:08.002 [DEBUG] [Thread-68854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:34:08.002 [DEBUG] [Thread-68854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:34:08.002 [DEBUG] [Thread-68854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:34:08.002 [DEBUG] [Thread-68854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:34:08.021 [INFO] [Thread-68854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:34:08.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:34:08.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:34:08.871 [DEBUG] [Thread-68854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:34:08.871 [DEBUG] [Thread-68854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:34:08.919 [DEBUG] [Thread-68854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:34:08.919 [DEBUG] [Thread-68854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:34:08.928 [DEBUG] [Thread-68854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:34:08.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:34:08.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:34:08.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:34:08.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:34:08.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:34:08.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:34:08.962 [DEBUG] [Thread-68854] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:34:14.429 [DEBUG] [Thread-68856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:27.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:27.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:29.480 [DEBUG] [Thread-68857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:34:38.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:34:38.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:34:39.060 [DEBUG] [Thread-68858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 29, 39), 16.87, 32.39, 0.0, 35.96, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:34:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:29:39
2025-12-12T11:34:39.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:34:39.921 [DEBUG] [Thread-68859] [transport.py] [_log()] starting thread (client mode): 0xf57c8b50
2025-12-12T11:34:39.922 [DEBUG] [Thread-68859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:34:39.941 [DEBUG] [Thread-68859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:34:39.942 [INFO] [Thread-68859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] client lang: <none>
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] server lang: <none>
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] kex follows: False
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:34:39.945 [DEBUG] [Thread-68859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:34:39.946 [DEBUG] [Thread-68859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:34:39.946 [DEBUG] [Thread-68859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:34:39.946 [DEBUG] [Thread-68859] [transport.py] [_log()] Compression: none
2025-12-12T11:34:39.946 [DEBUG] [Thread-68859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:34:39.962 [DEBUG] [Thread-68859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:34:39.963 [DEBUG] [Thread-68859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:34:39.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:34:39.964 [DEBUG] [Thread-68859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:34:39.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:34:39.966 [DEBUG] [Thread-68859] [transport.py] [_log()] userauth is OK
2025-12-12T11:34:39.966 [DEBUG] [Thread-68859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:34:39.966 [DEBUG] [Thread-68859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:34:39.967 [DEBUG] [Thread-68859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:34:39.967 [DEBUG] [Thread-68859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:34:39.986 [INFO] [Thread-68859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:34:39.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:34:40.745 [DEBUG] [Thread-68859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:34:40.745 [DEBUG] [Thread-68859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:34:40.746 [DEBUG] [Thread-68859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:34:40.787 [DEBUG] [Thread-68859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:34:40.787 [DEBUG] [Thread-68859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:34:40.790 [DEBUG] [Thread-68859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:34:40.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:34:40.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:34:40.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:34:40.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:34:40.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:34:40.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:34:40.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:34:40.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:34:40.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:34:40.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.398707 -999.00  +18.80  23.03     38   +4.30 1 2 1 1 1   888    0 16.94 104.44 ----- 31.7 23.0 4.5 44.6 23.5 -22.6 22.7 -20.1 22.6 -18.4 23.0 -19.1
2025-12-12T11:34:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:34:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:34:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.398707
2025-12-12T11:34:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:34:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:34:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:34:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:34:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:34:40.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:29:39', tmtdew=16.87, humidity=32.39, cloud=0.0, wind=35.96, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:34:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:34:40.818 [DEBUG] [Thread-68859] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:34:40.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:34:40.912 [DEBUG] [Thread-68862] [transport.py] [_log()] starting thread (client mode): 0xf8189d80
2025-12-12T11:34:40.912 [DEBUG] [Thread-68862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:34:40.929 [DEBUG] [Thread-68862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:34:40.929 [INFO] [Thread-68862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:34:40.937 [DEBUG] [Thread-68862] [transport.py] [_log()] client lang: <none>
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] server lang: <none>
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] kex follows: False
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] Compression: none
2025-12-12T11:34:40.938 [DEBUG] [Thread-68862] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:34:40.997 [DEBUG] [Thread-68862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:34:40.998 [DEBUG] [Thread-68862] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:34:40.998 [DEBUG] [Thread-68862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:34:40.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:34:40.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:34:41.055 [DEBUG] [Thread-68862] [transport.py] [_log()] userauth is OK
2025-12-12T11:34:41.055 [DEBUG] [Thread-68862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:34:41.055 [DEBUG] [Thread-68862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:34:41.055 [DEBUG] [Thread-68862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:34:41.055 [DEBUG] [Thread-68862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:34:41.077 [INFO] [Thread-68862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:34:41.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:34:41.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:34:41.968 [DEBUG] [Thread-68862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:34:41.968 [DEBUG] [Thread-68862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:34:42.015 [DEBUG] [Thread-68862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:34:42.016 [DEBUG] [Thread-68862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:34:42.024 [DEBUG] [Thread-68862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:34:42.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:34:42.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:34:42.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:34:42.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:34:42.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:34:42.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:34:42.056 [DEBUG] [Thread-68862] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:34:44.507 [DEBUG] [Thread-68864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:34:59.553 [DEBUG] [Thread-68865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:35:12.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:35:12.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:35:12.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 32, 25), 17.34, 31.61, 0.0, 41.35, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:35:12.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:32:25
2025-12-12T11:35:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:35:13.054 [DEBUG] [Thread-68866] [transport.py] [_log()] starting thread (client mode): 0xf57ca890
2025-12-12T11:35:13.054 [DEBUG] [Thread-68866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:35:13.073 [DEBUG] [Thread-68866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:35:13.073 [INFO] [Thread-68866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] client lang: <none>
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] server lang: <none>
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] kex follows: False
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] Compression: none
2025-12-12T11:35:13.076 [DEBUG] [Thread-68866] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:35:13.093 [DEBUG] [Thread-68866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:35:13.093 [DEBUG] [Thread-68866] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:35:13.093 [DEBUG] [Thread-68866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:35:13.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:35:13.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:35:13.094 [DEBUG] [Thread-68866] [transport.py] [_log()] userauth is OK
2025-12-12T11:35:13.094 [DEBUG] [Thread-68866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:35:13.094 [DEBUG] [Thread-68866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:35:13.094 [DEBUG] [Thread-68866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:35:13.094 [DEBUG] [Thread-68866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:35:13.103 [INFO] [Thread-68866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:35:13.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:35:14.582 [DEBUG] [Thread-68868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:16.681 [DEBUG] [Thread-68866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:35:16.681 [DEBUG] [Thread-68866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:35:16.682 [DEBUG] [Thread-68866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:35:16.724 [DEBUG] [Thread-68866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:35:16.724 [DEBUG] [Thread-68866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:35:16.726 [DEBUG] [Thread-68866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:35:16.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:35:16.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:35:16.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:35:16.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:35:16.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:35:16.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:35:16.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:35:16.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:35:16.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:35:16.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.399055 -999.00  +19.40  27.99     36   +4.20 1 2 1 1 1   888    0 16.90 107.91 ----- 43.4 28.0 339.4 43.9 23.5 -19.1 22.9 -20.1 22.5 -16.6 23.0 -16.9
2025-12-12T11:35:16.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:35:16.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:35:16.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.399055
2025-12-12T11:35:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:35:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:35:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:35:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:35:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:35:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:32:25', tmtdew=17.34, humidity=31.61, cloud=0.0, wind=41.35, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:34:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:35:16.784 [DEBUG] [Thread-68866] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:35:16.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:35:16.873 [DEBUG] [Thread-68870] [transport.py] [_log()] starting thread (client mode): 0xf8188e20
2025-12-12T11:35:16.873 [DEBUG] [Thread-68870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:35:16.888 [DEBUG] [Thread-68870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:35:16.888 [INFO] [Thread-68870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] client lang: <none>
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] server lang: <none>
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] kex follows: False
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:35:16.896 [DEBUG] [Thread-68870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:35:16.897 [DEBUG] [Thread-68870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:35:16.897 [DEBUG] [Thread-68870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:35:16.897 [DEBUG] [Thread-68870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:35:16.897 [DEBUG] [Thread-68870] [transport.py] [_log()] Compression: none
2025-12-12T11:35:16.897 [DEBUG] [Thread-68870] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:35:16.952 [DEBUG] [Thread-68870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:35:16.953 [DEBUG] [Thread-68870] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:35:16.953 [DEBUG] [Thread-68870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:35:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:35:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:35:17.009 [DEBUG] [Thread-68870] [transport.py] [_log()] userauth is OK
2025-12-12T11:35:17.009 [DEBUG] [Thread-68870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:35:17.009 [DEBUG] [Thread-68870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:35:17.010 [DEBUG] [Thread-68870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:35:17.010 [DEBUG] [Thread-68870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:35:17.031 [INFO] [Thread-68870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:35:17.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:35:17.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:35:17.873 [DEBUG] [Thread-68870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:35:17.873 [DEBUG] [Thread-68870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:35:17.921 [DEBUG] [Thread-68870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:35:17.922 [DEBUG] [Thread-68870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:35:17.930 [DEBUG] [Thread-68870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:35:17.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:35:17.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:35:17.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:35:17.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:35:17.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:35:17.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:35:17.964 [DEBUG] [Thread-68870] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:35:28.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:28.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:29.609 [DEBUG] [Thread-68872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:39.111 [DEBUG] [Thread-68873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:44.656 [DEBUG] [Thread-68874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:35:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:35:47.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:35:47.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:35:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 32, 25), 17.34, 31.61, 0.0, 41.35, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:35:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:32:25
2025-12-12T11:35:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:35:48.916 [DEBUG] [Thread-68875] [transport.py] [_log()] starting thread (client mode): 0xf818b1c0
2025-12-12T11:35:48.916 [DEBUG] [Thread-68875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:35:48.937 [DEBUG] [Thread-68875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:35:48.937 [INFO] [Thread-68875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] client lang: <none>
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] server lang: <none>
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] kex follows: False
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:35:48.940 [DEBUG] [Thread-68875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:35:48.941 [DEBUG] [Thread-68875] [transport.py] [_log()] Compression: none
2025-12-12T11:35:48.941 [DEBUG] [Thread-68875] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:35:48.960 [DEBUG] [Thread-68875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:35:48.960 [DEBUG] [Thread-68875] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:35:48.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:35:48.961 [DEBUG] [Thread-68875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:35:48.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:35:48.963 [DEBUG] [Thread-68875] [transport.py] [_log()] userauth is OK
2025-12-12T11:35:48.963 [DEBUG] [Thread-68875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:35:48.963 [DEBUG] [Thread-68875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:35:48.963 [DEBUG] [Thread-68875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:35:48.963 [DEBUG] [Thread-68875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:35:48.987 [INFO] [Thread-68875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:35:48.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:35:49.596 [DEBUG] [Thread-68875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:35:49.596 [DEBUG] [Thread-68875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:35:49.596 [DEBUG] [Thread-68875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:35:49.638 [DEBUG] [Thread-68875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:35:49.638 [DEBUG] [Thread-68875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:35:49.640 [DEBUG] [Thread-68875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:35:49.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:35:49.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:35:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:35:49.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:35:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:35:49.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:35:49.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.399402 -999.00  +18.70  43.75     37   +3.80 1 2 2 1 1   888    0 16.92 112.40 ----- 29.3 43.8 340.0 53.9 23.4 -20.7 22.7 -20.4 22.5 -18.4 -999.0 -999.0
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.399402
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:35:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:32:25', tmtdew=17.34, humidity=31.61, cloud=0.0, wind=41.35, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:35:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:35:49.660 [DEBUG] [Thread-68875] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:35:49.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:35:49.759 [DEBUG] [Thread-68878] [transport.py] [_log()] starting thread (client mode): 0xf81c2770
2025-12-12T11:35:49.760 [DEBUG] [Thread-68878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:35:49.774 [DEBUG] [Thread-68878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:35:49.774 [INFO] [Thread-68878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:35:49.781 [DEBUG] [Thread-68878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] client lang: <none>
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] server lang: <none>
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] kex follows: False
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] Compression: none
2025-12-12T11:35:49.782 [DEBUG] [Thread-68878] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:35:49.839 [DEBUG] [Thread-68878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:35:49.840 [DEBUG] [Thread-68878] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:35:49.840 [DEBUG] [Thread-68878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:35:49.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:35:49.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:35:49.901 [DEBUG] [Thread-68878] [transport.py] [_log()] userauth is OK
2025-12-12T11:35:49.901 [DEBUG] [Thread-68878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:35:49.901 [DEBUG] [Thread-68878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:35:49.901 [DEBUG] [Thread-68878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:35:49.901 [DEBUG] [Thread-68878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:35:49.915 [INFO] [Thread-68878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:35:49.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:35:49.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:35:50.811 [DEBUG] [Thread-68878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:35:50.811 [DEBUG] [Thread-68878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:35:50.858 [DEBUG] [Thread-68878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:35:50.858 [DEBUG] [Thread-68878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:35:50.866 [DEBUG] [Thread-68878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:35:50.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:35:50.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:35:50.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:35:50.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:35:50.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:35:50.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:35:50.898 [DEBUG] [Thread-68878] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:35:59.691 [DEBUG] [Thread-68880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:14.735 [DEBUG] [Thread-68881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:20.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:36:20.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11: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
2025-12-12T11:36:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 32, 25), 17.34, 31.61, 0.0, 41.35, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:36:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:32:25
2025-12-12T11:36:21.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:36:21.857 [DEBUG] [Thread-68882] [transport.py] [_log()] starting thread (client mode): 0xf8189090
2025-12-12T11:36:21.857 [DEBUG] [Thread-68882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:36:21.878 [DEBUG] [Thread-68882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:36:21.878 [INFO] [Thread-68882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:36:21.881 [DEBUG] [Thread-68882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:36:21.881 [DEBUG] [Thread-68882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:36:21.881 [DEBUG] [Thread-68882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] client lang: <none>
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] server lang: <none>
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] kex follows: False
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] Compression: none
2025-12-12T11:36:21.882 [DEBUG] [Thread-68882] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:36:21.898 [DEBUG] [Thread-68882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:36:21.899 [DEBUG] [Thread-68882] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:36:21.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:36:21.900 [DEBUG] [Thread-68882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:36:21.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:36:21.901 [DEBUG] [Thread-68882] [transport.py] [_log()] userauth is OK
2025-12-12T11:36:21.902 [DEBUG] [Thread-68882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:36:21.902 [DEBUG] [Thread-68882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:36:21.902 [DEBUG] [Thread-68882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:36:21.902 [DEBUG] [Thread-68882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:36:21.919 [INFO] [Thread-68882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:36:21.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:36:22.663 [DEBUG] [Thread-68882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:36:22.663 [DEBUG] [Thread-68882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:36:22.663 [DEBUG] [Thread-68882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:36:22.704 [DEBUG] [Thread-68882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:36:22.704 [DEBUG] [Thread-68882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:36:22.706 [DEBUG] [Thread-68882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:36:22.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:36:22.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:36:22.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:36:22.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:36:22.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:36:22.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:36:22.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:36:22.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:36:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:36:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.399749 -999.00  +18.40  34.65     38   +3.90 1 2 2 1 1   888    0 17.13 113.65 ----- 40.4 34.6 329.0 46.4 23.2 -21.1 22.4 -22.1 22.4 -18.7 22.8 -18.5
2025-12-12T11:36:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:36:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:36:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.399749
2025-12-12T11:36:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:36:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:36:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:36:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:36:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:36:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:32:25', tmtdew=17.34, humidity=31.61, cloud=0.0, wind=41.35, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:35:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:36:22.728 [DEBUG] [Thread-68882] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:36:22.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:36:22.825 [DEBUG] [Thread-68885] [transport.py] [_log()] starting thread (client mode): 0xf8189360
2025-12-12T11:36:22.825 [DEBUG] [Thread-68885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:36:22.839 [DEBUG] [Thread-68885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:36:22.840 [INFO] [Thread-68885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:36:22.850 [DEBUG] [Thread-68885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] client lang: <none>
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] server lang: <none>
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] kex follows: False
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:36:22.851 [DEBUG] [Thread-68885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:36:22.852 [DEBUG] [Thread-68885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:36:22.852 [DEBUG] [Thread-68885] [transport.py] [_log()] Compression: none
2025-12-12T11:36:22.852 [DEBUG] [Thread-68885] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:36:22.909 [DEBUG] [Thread-68885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:36:22.909 [DEBUG] [Thread-68885] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:36:22.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:36:22.910 [DEBUG] [Thread-68885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:36:22.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:36:22.965 [DEBUG] [Thread-68885] [transport.py] [_log()] userauth is OK
2025-12-12T11:36:22.965 [DEBUG] [Thread-68885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:36:22.965 [DEBUG] [Thread-68885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:36:22.965 [DEBUG] [Thread-68885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:36:22.965 [DEBUG] [Thread-68885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:36:22.987 [INFO] [Thread-68885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:36:22.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:36:22.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:36:23.820 [DEBUG] [Thread-68885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:36:23.820 [DEBUG] [Thread-68885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:36:23.868 [DEBUG] [Thread-68885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:36:23.868 [DEBUG] [Thread-68885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:36:23.877 [DEBUG] [Thread-68885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:36:23.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:36:23.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:36:23.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:36:23.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:36:23.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:36:23.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:36:23.912 [DEBUG] [Thread-68885] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:36:28.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:28.208 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:29.763 [DEBUG] [Thread-68887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:39.162 [DEBUG] [Thread-68888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:44.798 [DEBUG] [Thread-68889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:36:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:36:53.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:36:53.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:36:54.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 32, 25), 17.34, 31.61, 0.0, 41.35, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:36:54.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:32:25
2025-12-12T11:36:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:36:54.852 [DEBUG] [Thread-68890] [transport.py] [_log()] starting thread (client mode): 0xf57a9840
2025-12-12T11:36:54.852 [DEBUG] [Thread-68890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:36:54.873 [DEBUG] [Thread-68890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:36:54.873 [INFO] [Thread-68890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] client lang: <none>
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] server lang: <none>
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] kex follows: False
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:36:54.876 [DEBUG] [Thread-68890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:36:54.877 [DEBUG] [Thread-68890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:36:54.877 [DEBUG] [Thread-68890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:36:54.877 [DEBUG] [Thread-68890] [transport.py] [_log()] Compression: none
2025-12-12T11:36:54.877 [DEBUG] [Thread-68890] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:36:54.894 [DEBUG] [Thread-68890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:36:54.894 [DEBUG] [Thread-68890] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:36:54.895 [DEBUG] [Thread-68890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:36:54.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:36:54.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:36:54.897 [DEBUG] [Thread-68890] [transport.py] [_log()] userauth is OK
2025-12-12T11:36:54.897 [DEBUG] [Thread-68890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:36:54.897 [DEBUG] [Thread-68890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:36:54.897 [DEBUG] [Thread-68890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:36:54.897 [DEBUG] [Thread-68890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:36:54.932 [INFO] [Thread-68890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:36:54.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:36:55.557 [DEBUG] [Thread-68890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:36:55.557 [DEBUG] [Thread-68890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:36:55.558 [DEBUG] [Thread-68890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:36:55.599 [DEBUG] [Thread-68890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:36:55.599 [DEBUG] [Thread-68890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:36:55.602 [DEBUG] [Thread-68890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:36:55.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:36:55.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:36:55.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:36:55.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:36:55.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:36:55.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:36:55.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:36:55.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:36:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:36:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.400443 -999.00  +18.40  41.59     38   +4.20 1 2 2 1 1   888    0 16.97 109.06 ----- 39.9 41.6 326.2 56.3 23.0 -19.8 22.4 -19.0 22.3 -17.6 22.7 -18.2
2025-12-12T11:36:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:36:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:36:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.400443
2025-12-12T11:36:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:36:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:36:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:36:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:36:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:36:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:32:25', tmtdew=17.34, humidity=31.61, cloud=0.0, wind=41.35, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:36:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:36:55.624 [DEBUG] [Thread-68890] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:36:55.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:36:55.721 [DEBUG] [Thread-68893] [transport.py] [_log()] starting thread (client mode): 0xf57a8a60
2025-12-12T11:36:55.721 [DEBUG] [Thread-68893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:36:55.735 [DEBUG] [Thread-68893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:36:55.735 [INFO] [Thread-68893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:36:55.743 [DEBUG] [Thread-68893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:36:55.743 [DEBUG] [Thread-68893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:36:55.743 [DEBUG] [Thread-68893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:36:55.743 [DEBUG] [Thread-68893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:55.743 [DEBUG] [Thread-68893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] client lang: <none>
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] server lang: <none>
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] kex follows: False
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:36:55.744 [DEBUG] [Thread-68893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:36:55.745 [DEBUG] [Thread-68893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:36:55.745 [DEBUG] [Thread-68893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:36:55.745 [DEBUG] [Thread-68893] [transport.py] [_log()] Compression: none
2025-12-12T11:36:55.745 [DEBUG] [Thread-68893] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:36:55.801 [DEBUG] [Thread-68893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:36:55.802 [DEBUG] [Thread-68893] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:36:55.802 [DEBUG] [Thread-68893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:36:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:36:55.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:36:55.857 [DEBUG] [Thread-68893] [transport.py] [_log()] userauth is OK
2025-12-12T11:36:55.857 [DEBUG] [Thread-68893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:36:55.858 [DEBUG] [Thread-68893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:36:55.858 [DEBUG] [Thread-68893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:36:55.858 [DEBUG] [Thread-68893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:36:55.877 [INFO] [Thread-68893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:36:55.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:36:55.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:36:56.714 [DEBUG] [Thread-68893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:36:56.715 [DEBUG] [Thread-68893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:36:56.763 [DEBUG] [Thread-68893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:36:56.763 [DEBUG] [Thread-68893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:36:56.772 [DEBUG] [Thread-68893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:36:56.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:36:56.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:36:56.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:36:56.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:36:56.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:36:56.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:36:56.814 [DEBUG] [Thread-68893] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:36:59.831 [DEBUG] [Thread-68895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:14.875 [DEBUG] [Thread-68896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:26.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:37:26.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:37:26.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:37:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 32, 25), 17.34, 31.61, 0.0, 41.35, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:37:27.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:32:25
2025-12-12T11:37:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:37:27.743 [DEBUG] [Thread-68897] [transport.py] [_log()] starting thread (client mode): 0xf57ab5b0
2025-12-12T11:37:27.743 [DEBUG] [Thread-68897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:37:27.764 [DEBUG] [Thread-68897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:37:27.764 [INFO] [Thread-68897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] client lang: <none>
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] server lang: <none>
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] kex follows: False
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:37:27.768 [DEBUG] [Thread-68897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:37:27.769 [DEBUG] [Thread-68897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:37:27.769 [DEBUG] [Thread-68897] [transport.py] [_log()] Compression: none
2025-12-12T11:37:27.769 [DEBUG] [Thread-68897] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:37:27.785 [DEBUG] [Thread-68897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:37:27.786 [DEBUG] [Thread-68897] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:37:27.786 [DEBUG] [Thread-68897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:37:27.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:37:27.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:37:27.788 [DEBUG] [Thread-68897] [transport.py] [_log()] userauth is OK
2025-12-12T11:37:27.788 [DEBUG] [Thread-68897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:37:27.789 [DEBUG] [Thread-68897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:37:27.789 [DEBUG] [Thread-68897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:37:27.789 [DEBUG] [Thread-68897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:37:27.810 [INFO] [Thread-68897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:37:27.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:37:28.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:28.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:28.458 [DEBUG] [Thread-68897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:37:28.458 [DEBUG] [Thread-68897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:37:28.459 [DEBUG] [Thread-68897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:37:28.499 [DEBUG] [Thread-68897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:37:28.499 [DEBUG] [Thread-68897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:37:28.502 [DEBUG] [Thread-68897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:37:28.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:37:28.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:37:28.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:37:28.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:37:28.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:37:28.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:37:28.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:37:28.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:37:28.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:37:28.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.400790 -999.00  +18.60  41.86     38   +4.10 1 2 2 1 1   888    0 16.95 104.06 ----- 41.4 41.9 333.6 50.2 23.0 -18.9 22.4 -19.9 22.2 -17.4 22.6 -17.5
2025-12-12T11:37:28.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:37:28.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:37:28.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.400790
2025-12-12T11:37:28.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:37:28.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:37:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:37:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:37:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:37:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:32:25', tmtdew=17.34, humidity=31.61, cloud=0.0, wind=41.35, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:37:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:37:28.530 [DEBUG] [Thread-68897] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:37:28.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:37:28.615 [DEBUG] [Thread-68900] [transport.py] [_log()] starting thread (client mode): 0xf8189c90
2025-12-12T11:37:28.615 [DEBUG] [Thread-68900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:37:28.630 [DEBUG] [Thread-68900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:37:28.630 [INFO] [Thread-68900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:37:28.638 [DEBUG] [Thread-68900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] client lang: <none>
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] server lang: <none>
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] kex follows: False
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:37:28.639 [DEBUG] [Thread-68900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:37:28.640 [DEBUG] [Thread-68900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:37:28.640 [DEBUG] [Thread-68900] [transport.py] [_log()] Compression: none
2025-12-12T11:37:28.640 [DEBUG] [Thread-68900] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:37:28.700 [DEBUG] [Thread-68900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:37:28.701 [DEBUG] [Thread-68900] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:37:28.701 [DEBUG] [Thread-68900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:37:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:37:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:37:28.761 [DEBUG] [Thread-68900] [transport.py] [_log()] userauth is OK
2025-12-12T11:37:28.762 [DEBUG] [Thread-68900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:37:28.762 [DEBUG] [Thread-68900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:37:28.762 [DEBUG] [Thread-68900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:37:28.762 [DEBUG] [Thread-68900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:37:28.785 [INFO] [Thread-68900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:37:28.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:37:28.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:37:29.683 [DEBUG] [Thread-68900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:37:29.683 [DEBUG] [Thread-68900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:37:29.731 [DEBUG] [Thread-68900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:37:29.731 [DEBUG] [Thread-68900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:37:29.739 [DEBUG] [Thread-68900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:37:29.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:37:29.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:37:29.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:37:29.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:37:29.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:37:29.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:37:29.774 [DEBUG] [Thread-68900] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:37:29.903 [DEBUG] [Thread-68902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:39.223 [DEBUG] [Thread-68903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:44.937 [DEBUG] [Thread-68904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:37:59.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:37:59.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:37:59.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:37:59.966 [DEBUG] [Thread-68905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:38:00.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 35, 13), 17.83, 30.55, 0.0, 47.42, 20.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:38:00.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:35:13
2025-12-12T11:38:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:38:00.715 [DEBUG] [Thread-68906] [transport.py] [_log()] starting thread (client mode): 0xf81f1660
2025-12-12T11:38:00.715 [DEBUG] [Thread-68906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:38:00.735 [DEBUG] [Thread-68906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:38:00.735 [INFO] [Thread-68906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:38:00.738 [DEBUG] [Thread-68906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:38:00.738 [DEBUG] [Thread-68906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:38:00.738 [DEBUG] [Thread-68906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:38:00.738 [DEBUG] [Thread-68906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:00.738 [DEBUG] [Thread-68906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] client lang: <none>
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] server lang: <none>
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] kex follows: False
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] Compression: none
2025-12-12T11:38:00.739 [DEBUG] [Thread-68906] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:38:00.757 [DEBUG] [Thread-68906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:38:00.758 [DEBUG] [Thread-68906] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:38:00.758 [DEBUG] [Thread-68906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:38:00.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:38:00.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:38:00.760 [DEBUG] [Thread-68906] [transport.py] [_log()] userauth is OK
2025-12-12T11:38:00.760 [DEBUG] [Thread-68906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:38:00.760 [DEBUG] [Thread-68906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:38:00.760 [DEBUG] [Thread-68906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:38:00.760 [DEBUG] [Thread-68906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:38:00.793 [INFO] [Thread-68906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:38:00.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:38:01.399 [DEBUG] [Thread-68906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:38:01.399 [DEBUG] [Thread-68906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:38:01.400 [DEBUG] [Thread-68906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:38:01.440 [DEBUG] [Thread-68906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:38:01.440 [DEBUG] [Thread-68906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:38:01.443 [DEBUG] [Thread-68906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:38:01.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:38:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:38:01.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:38:01.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:38:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:38:01.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:38:01.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:38:01.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:38:01.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:38:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.401138 -999.00  +18.10  30.64     38   +3.80 1 2 2 1 1   888    0 16.98 104.54 ----- 41.1 30.6 347.4 57.0 22.8 -20.4 22.2 -20.7 22.1 -19.5 22.4 -22.6
2025-12-12T11:38:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:38:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:38:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.401138
2025-12-12T11:38:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:38:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:38:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:38:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:38:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:38:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:35:13', tmtdew=17.83, humidity=30.55, cloud=0.0, wind=47.42, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:37:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:38:01.467 [DEBUG] [Thread-68906] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:38:01.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:38:01.564 [DEBUG] [Thread-68909] [transport.py] [_log()] starting thread (client mode): 0xf81f3dc0
2025-12-12T11:38:01.564 [DEBUG] [Thread-68909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:38:01.579 [DEBUG] [Thread-68909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:38:01.579 [INFO] [Thread-68909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:38:01.587 [DEBUG] [Thread-68909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:38:01.587 [DEBUG] [Thread-68909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:38:01.587 [DEBUG] [Thread-68909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] client lang: <none>
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] server lang: <none>
2025-12-12T11:38:01.588 [DEBUG] [Thread-68909] [transport.py] [_log()] kex follows: False
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] Compression: none
2025-12-12T11:38:01.589 [DEBUG] [Thread-68909] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:38:01.645 [DEBUG] [Thread-68909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:38:01.645 [DEBUG] [Thread-68909] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:38:01.645 [DEBUG] [Thread-68909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:38:01.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:38:01.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:38:01.701 [DEBUG] [Thread-68909] [transport.py] [_log()] userauth is OK
2025-12-12T11:38:01.701 [DEBUG] [Thread-68909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:38:01.701 [DEBUG] [Thread-68909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:38:01.701 [DEBUG] [Thread-68909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:38:01.701 [DEBUG] [Thread-68909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:38:01.721 [INFO] [Thread-68909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:38:01.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:38:01.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:38:02.598 [DEBUG] [Thread-68909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:38:02.598 [DEBUG] [Thread-68909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:38:02.645 [DEBUG] [Thread-68909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:38:02.645 [DEBUG] [Thread-68909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:38:02.653 [DEBUG] [Thread-68909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:38:02.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:38:02.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:38:02.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:38:02.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:38:02.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:38:02.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:38:02.685 [DEBUG] [Thread-68909] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:38:14.997 [DEBUG] [Thread-68911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:38:28.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:38:28.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:38:30.042 [DEBUG] [Thread-68912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:38:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:38:32.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:38: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
2025-12-12T11:38:33.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 35, 13), 17.83, 30.55, 0.0, 47.42, 20.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:38:33.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:35:13
2025-12-12T11:38:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:38:33.648 [DEBUG] [Thread-68913] [transport.py] [_log()] starting thread (client mode): 0xf8189ff0
2025-12-12T11:38:33.648 [DEBUG] [Thread-68913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:38:33.669 [DEBUG] [Thread-68913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:38:33.669 [INFO] [Thread-68913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:38:33.673 [DEBUG] [Thread-68913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] client lang: <none>
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] server lang: <none>
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] kex follows: False
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] Compression: none
2025-12-12T11:38:33.674 [DEBUG] [Thread-68913] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:38:33.692 [DEBUG] [Thread-68913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:38:33.693 [DEBUG] [Thread-68913] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:38:33.694 [DEBUG] [Thread-68913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:38:33.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:38:33.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:38:33.695 [DEBUG] [Thread-68913] [transport.py] [_log()] userauth is OK
2025-12-12T11:38:33.696 [DEBUG] [Thread-68913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:38:33.696 [DEBUG] [Thread-68913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:38:33.696 [DEBUG] [Thread-68913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:38:33.696 [DEBUG] [Thread-68913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:38:33.720 [INFO] [Thread-68913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:38:33.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:38:34.374 [DEBUG] [Thread-68913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:38:34.374 [DEBUG] [Thread-68913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:38:34.375 [DEBUG] [Thread-68913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:38:34.416 [DEBUG] [Thread-68913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:38:34.416 [DEBUG] [Thread-68913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:38:34.418 [DEBUG] [Thread-68913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:38:34.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:38:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:38:34.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:38:34.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:38:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:38:34.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:38:34.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:38:34.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:38:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:38:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.401485 -999.00  +17.90  44.34     39   +3.90 1 2 2 1 1   888    0 16.62 90.39 ----- 44.2 44.3 332.4 59.7 22.7 -20.4 22.1 -19.9 22.0 -18.5 22.3 -18.4
2025-12-12T11:38:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:38:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:38:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.401485
2025-12-12T11:38:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:38:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:38:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:38:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:38:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:38:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:35:13', tmtdew=17.83, humidity=30.55, cloud=0.0, wind=47.42, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:38:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:38:34.444 [DEBUG] [Thread-68913] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:38:34.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:38:34.540 [DEBUG] [Thread-68916] [transport.py] [_log()] starting thread (client mode): 0xf57ca230
2025-12-12T11:38:34.540 [DEBUG] [Thread-68916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:38:34.554 [DEBUG] [Thread-68916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:38:34.554 [INFO] [Thread-68916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:34.562 [DEBUG] [Thread-68916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] client lang: <none>
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] server lang: <none>
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] kex follows: False
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:38:34.563 [DEBUG] [Thread-68916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:38:34.564 [DEBUG] [Thread-68916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:38:34.564 [DEBUG] [Thread-68916] [transport.py] [_log()] Compression: none
2025-12-12T11:38:34.565 [DEBUG] [Thread-68916] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:38:34.625 [DEBUG] [Thread-68916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:38:34.626 [DEBUG] [Thread-68916] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:38:34.626 [DEBUG] [Thread-68916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:38:34.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:38:34.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:38:34.681 [DEBUG] [Thread-68916] [transport.py] [_log()] userauth is OK
2025-12-12T11:38:34.681 [DEBUG] [Thread-68916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:38:34.681 [DEBUG] [Thread-68916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:38:34.681 [DEBUG] [Thread-68916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:38:34.681 [DEBUG] [Thread-68916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:38:34.700 [INFO] [Thread-68916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:38:34.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:38:34.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:38:35.573 [DEBUG] [Thread-68916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:38:35.574 [DEBUG] [Thread-68916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:38:35.622 [DEBUG] [Thread-68916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:38:35.622 [DEBUG] [Thread-68916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:38:35.631 [DEBUG] [Thread-68916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:38:35.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:38:35.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:38:35.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:38:35.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:38:35.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:38:35.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:38:35.666 [DEBUG] [Thread-68916] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:38:39.286 [DEBUG] [Thread-68918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:38:45.073 [DEBUG] [Thread-68919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:00.118 [DEBUG] [Thread-68920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:05.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:39:05.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:39:05.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:39:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 35, 13), 17.83, 30.55, 0.0, 47.42, 20.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:39:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:35:13
2025-12-12T11:39:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:39:06.644 [DEBUG] [Thread-68921] [transport.py] [_log()] starting thread (client mode): 0xf81f20e0
2025-12-12T11:39:06.644 [DEBUG] [Thread-68921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:39:06.665 [DEBUG] [Thread-68921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:39:06.665 [INFO] [Thread-68921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] client lang: <none>
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] server lang: <none>
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] kex follows: False
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] Compression: none
2025-12-12T11:39:06.669 [DEBUG] [Thread-68921] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:39:06.684 [DEBUG] [Thread-68921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:39:06.685 [DEBUG] [Thread-68921] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:39:06.685 [DEBUG] [Thread-68921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:39:06.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:39:06.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:39:06.686 [DEBUG] [Thread-68921] [transport.py] [_log()] userauth is OK
2025-12-12T11:39:06.686 [DEBUG] [Thread-68921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:39:06.686 [DEBUG] [Thread-68921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:39:06.686 [DEBUG] [Thread-68921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:39:06.686 [DEBUG] [Thread-68921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:39:06.704 [INFO] [Thread-68921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:39:06.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:39:07.355 [DEBUG] [Thread-68921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:39:07.355 [DEBUG] [Thread-68921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:39:07.355 [DEBUG] [Thread-68921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:39:07.396 [DEBUG] [Thread-68921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:39:07.396 [DEBUG] [Thread-68921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:39:07.398 [DEBUG] [Thread-68921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:39:07.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:39:07.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:39:07.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:39:07.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:39:07.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:39:07.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:39:07.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.401832 -999.00  +17.90  40.68     39   +3.90 1 2 2 1 1   888    0 16.58 95.49 ----- 45.7 40.7 337.8 58.8 22.6 -19.8 22.1 -20.1 22.0 -18.1 22.2 -17.8
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.401832
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:39:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:35:13', tmtdew=17.83, humidity=30.55, cloud=0.0, wind=47.42, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:38:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:39:07.417 [DEBUG] [Thread-68921] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:39:07.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:39:07.503 [DEBUG] [Thread-68924] [transport.py] [_log()] starting thread (client mode): 0xf81f2440
2025-12-12T11:39:07.503 [DEBUG] [Thread-68924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:39:07.521 [DEBUG] [Thread-68924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:39:07.521 [INFO] [Thread-68924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] client lang: <none>
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] server lang: <none>
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] kex follows: False
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] Compression: none
2025-12-12T11:39:07.529 [DEBUG] [Thread-68924] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:39:07.584 [DEBUG] [Thread-68924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:39:07.584 [DEBUG] [Thread-68924] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:39:07.584 [DEBUG] [Thread-68924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:39:07.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:39:07.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:39:07.644 [DEBUG] [Thread-68924] [transport.py] [_log()] userauth is OK
2025-12-12T11:39:07.644 [DEBUG] [Thread-68924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:39:07.644 [DEBUG] [Thread-68924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:39:07.644 [DEBUG] [Thread-68924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:39:07.644 [DEBUG] [Thread-68924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:39:07.665 [INFO] [Thread-68924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:39:07.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:39:07.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:39:08.554 [DEBUG] [Thread-68924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:39:08.554 [DEBUG] [Thread-68924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:39:08.601 [DEBUG] [Thread-68924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:39:08.601 [DEBUG] [Thread-68924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:39:08.610 [DEBUG] [Thread-68924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:39:08.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:39:08.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:39:08.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:39:08.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:39:08.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:39:08.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:39:08.642 [DEBUG] [Thread-68924] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:39:15.148 [DEBUG] [Thread-68926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:28.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:28.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:30.189 [DEBUG] [Thread-68927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:38.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:39:38.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:39:39.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 35, 13), 17.83, 30.55, 0.0, 47.42, 20.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:39:39.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:35:13
2025-12-12T11:39:39.334 [DEBUG] [Thread-68928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:39:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:39:39.605 [DEBUG] [Thread-68929] [transport.py] [_log()] starting thread (client mode): 0xf57a8850
2025-12-12T11:39:39.605 [DEBUG] [Thread-68929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:39:39.627 [DEBUG] [Thread-68929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:39:39.627 [INFO] [Thread-68929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] client lang: <none>
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] server lang: <none>
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] kex follows: False
2025-12-12T11:39:39.631 [DEBUG] [Thread-68929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:39:39.632 [DEBUG] [Thread-68929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:39:39.632 [DEBUG] [Thread-68929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:39:39.632 [DEBUG] [Thread-68929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:39:39.632 [DEBUG] [Thread-68929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:39:39.632 [DEBUG] [Thread-68929] [transport.py] [_log()] Compression: none
2025-12-12T11:39:39.632 [DEBUG] [Thread-68929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:39:39.649 [DEBUG] [Thread-68929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:39:39.650 [DEBUG] [Thread-68929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:39:39.651 [DEBUG] [Thread-68929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:39:39.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:39:39.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:39:39.653 [DEBUG] [Thread-68929] [transport.py] [_log()] userauth is OK
2025-12-12T11:39:39.653 [DEBUG] [Thread-68929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:39:39.653 [DEBUG] [Thread-68929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:39:39.653 [DEBUG] [Thread-68929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:39:39.653 [DEBUG] [Thread-68929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:39:39.688 [INFO] [Thread-68929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:39:39.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:39:40.326 [DEBUG] [Thread-68929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:39:40.326 [DEBUG] [Thread-68929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:39:40.326 [DEBUG] [Thread-68929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:39:40.367 [DEBUG] [Thread-68929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:39:40.367 [DEBUG] [Thread-68929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:39:40.370 [DEBUG] [Thread-68929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:39:40.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:39:40.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:39:40.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:39:40.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:39:40.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:39:40.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:39:40.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:39:40.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:39:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:39:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.402180 -999.00  +18.00  40.13     40   +4.20 1 2 2 1 1   888    0 16.86 99.11 ----- 34.7 40.1 333.4 55.3 22.6 -19.1 22.1 -18.7 21.9 -18.1 22.3 -17.6
2025-12-12T11:39:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:39:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:39:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.402180
2025-12-12T11:39:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:39:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:39:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:39:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:39:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:39:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:35:13', tmtdew=17.83, humidity=30.55, cloud=0.0, wind=47.42, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:39:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:39:40.395 [DEBUG] [Thread-68929] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:39:40.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:39:40.491 [DEBUG] [Thread-68932] [transport.py] [_log()] starting thread (client mode): 0xf57a9f90
2025-12-12T11:39:40.492 [DEBUG] [Thread-68932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:39:40.511 [DEBUG] [Thread-68932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:39:40.511 [INFO] [Thread-68932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:40.519 [DEBUG] [Thread-68932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] client lang: <none>
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] server lang: <none>
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] kex follows: False
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:39:40.520 [DEBUG] [Thread-68932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:39:40.521 [DEBUG] [Thread-68932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:39:40.521 [DEBUG] [Thread-68932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:39:40.521 [DEBUG] [Thread-68932] [transport.py] [_log()] Compression: none
2025-12-12T11:39:40.521 [DEBUG] [Thread-68932] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:39:40.576 [DEBUG] [Thread-68932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:39:40.576 [DEBUG] [Thread-68932] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:39:40.577 [DEBUG] [Thread-68932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:39:40.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:39:40.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:39:40.633 [DEBUG] [Thread-68932] [transport.py] [_log()] userauth is OK
2025-12-12T11:39:40.633 [DEBUG] [Thread-68932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:39:40.633 [DEBUG] [Thread-68932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:39:40.634 [DEBUG] [Thread-68932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:39:40.634 [DEBUG] [Thread-68932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:39:40.653 [INFO] [Thread-68932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:39:40.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:39:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:39:41.502 [DEBUG] [Thread-68932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:39:41.502 [DEBUG] [Thread-68932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:39:41.550 [DEBUG] [Thread-68932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:39:41.550 [DEBUG] [Thread-68932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:39:41.559 [DEBUG] [Thread-68932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:39:41.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:39:41.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:39:41.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:39:41.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:39:41.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:39:41.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:39:41.594 [DEBUG] [Thread-68932] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:39:45.216 [DEBUG] [Thread-68934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:00.250 [DEBUG] [Thread-68935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:40:11.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:40:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:40:12.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 35, 13), 17.83, 30.55, 0.0, 47.42, 20.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:40:12.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:35:13
2025-12-12T11:40:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:40:12.542 [DEBUG] [Thread-68936] [transport.py] [_log()] starting thread (client mode): 0xf570d750
2025-12-12T11:40:12.542 [DEBUG] [Thread-68936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:40:12.561 [DEBUG] [Thread-68936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:40:12.561 [INFO] [Thread-68936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] client lang: <none>
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] server lang: <none>
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] kex follows: False
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] Compression: none
2025-12-12T11:40:12.565 [DEBUG] [Thread-68936] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:40:12.574 [DEBUG] [Thread-68936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:40:12.574 [DEBUG] [Thread-68936] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:40:12.574 [DEBUG] [Thread-68936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:40:12.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:40:12.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:40:12.576 [DEBUG] [Thread-68936] [transport.py] [_log()] userauth is OK
2025-12-12T11:40:12.576 [DEBUG] [Thread-68936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:40:12.576 [DEBUG] [Thread-68936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:40:12.576 [DEBUG] [Thread-68936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:40:12.576 [DEBUG] [Thread-68936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:40:12.593 [INFO] [Thread-68936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:40:12.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:40:13.475 [DEBUG] [Thread-68936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:40:13.475 [DEBUG] [Thread-68936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:40:13.476 [DEBUG] [Thread-68936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:40:13.516 [DEBUG] [Thread-68936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:40:13.516 [DEBUG] [Thread-68936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:40:13.519 [DEBUG] [Thread-68936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:40:13.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:40:13.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:40:13.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:40:13.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:40:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:40:13.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:40:13.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:40:13.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:40:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:40:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.402526 -999.00  +18.10  32.34     39   +4.10 1 2 2 1 1   888    0 16.82 92.78 ----- 32.8 32.3 359.5 48.0 22.5 -19.4 21.9 -19.7 21.9 -17.6 22.2 -18.0
2025-12-12T11:40:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:40:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:40:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.402526
2025-12-12T11:40:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:40:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:40:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:40:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:40:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:40:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:35:13', tmtdew=17.83, humidity=30.55, cloud=0.0, wind=47.42, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:39:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:40:13.545 [DEBUG] [Thread-68936] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:40:13.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:40:13.631 [DEBUG] [Thread-68939] [transport.py] [_log()] starting thread (client mode): 0xf818b250
2025-12-12T11:40:13.631 [DEBUG] [Thread-68939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:40:13.647 [DEBUG] [Thread-68939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:40:13.647 [INFO] [Thread-68939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:40:13.654 [DEBUG] [Thread-68939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:40:13.654 [DEBUG] [Thread-68939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] client lang: <none>
2025-12-12T11:40:13.655 [DEBUG] [Thread-68939] [transport.py] [_log()] server lang: <none>
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] kex follows: False
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] Compression: none
2025-12-12T11:40:13.656 [DEBUG] [Thread-68939] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:40:13.716 [DEBUG] [Thread-68939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:40:13.717 [DEBUG] [Thread-68939] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:40:13.717 [DEBUG] [Thread-68939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:40:13.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:40:13.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:40:13.773 [DEBUG] [Thread-68939] [transport.py] [_log()] userauth is OK
2025-12-12T11:40:13.773 [DEBUG] [Thread-68939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:40:13.773 [DEBUG] [Thread-68939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:40:13.774 [DEBUG] [Thread-68939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:40:13.774 [DEBUG] [Thread-68939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:40:13.797 [INFO] [Thread-68939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:40:13.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:40:14.656 [DEBUG] [Thread-68939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:40:14.656 [DEBUG] [Thread-68939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:40:14.704 [DEBUG] [Thread-68939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:40:14.704 [DEBUG] [Thread-68939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:40:14.712 [DEBUG] [Thread-68939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:40:14.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:40:14.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:40:14.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:40:14.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:40:14.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:40:14.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:40:14.747 [DEBUG] [Thread-68939] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:40:15.281 [DEBUG] [Thread-68941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:28.769 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:28.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:30.327 [DEBUG] [Thread-68942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:39.393 [DEBUG] [Thread-68943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:40:44.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:40:44.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:40:45.359 [DEBUG] [Thread-68944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:40:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 38, 1), 17.36, 31.44, 0.0, 46.04, 19.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:40:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:38:01
2025-12-12T11:40:45.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:40:45.689 [DEBUG] [Thread-68945] [transport.py] [_log()] starting thread (client mode): 0xf57b4f70
2025-12-12T11:40:45.689 [DEBUG] [Thread-68945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:40:45.711 [DEBUG] [Thread-68945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:40:45.711 [INFO] [Thread-68945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:40:45.713 [DEBUG] [Thread-68945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:40:45.713 [DEBUG] [Thread-68945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:40:45.713 [DEBUG] [Thread-68945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:40:45.713 [DEBUG] [Thread-68945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:45.713 [DEBUG] [Thread-68945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] client lang: <none>
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] server lang: <none>
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] kex follows: False
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] Compression: none
2025-12-12T11:40:45.714 [DEBUG] [Thread-68945] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:40:45.727 [DEBUG] [Thread-68945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:40:45.728 [DEBUG] [Thread-68945] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:40:45.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:40:45.729 [DEBUG] [Thread-68945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:40:45.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:40:45.731 [DEBUG] [Thread-68945] [transport.py] [_log()] userauth is OK
2025-12-12T11:40:45.731 [DEBUG] [Thread-68945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:40:45.731 [DEBUG] [Thread-68945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:40:45.731 [DEBUG] [Thread-68945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:40:45.731 [DEBUG] [Thread-68945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:40:45.766 [INFO] [Thread-68945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:40:45.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:40:46.442 [DEBUG] [Thread-68945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:40:46.443 [DEBUG] [Thread-68945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:40:46.443 [DEBUG] [Thread-68945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:40:46.484 [DEBUG] [Thread-68945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:40:46.484 [DEBUG] [Thread-68945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:40:46.487 [DEBUG] [Thread-68945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:40:46.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:40:46.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:40:46.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:40:46.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:40:46.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:40:46.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:40:46.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:40:46.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:40:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:40:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.402874 -999.00  +17.90  29.99     39   +3.90 1 2 1 1 1   888    0 16.48 82.57 ----- 34.3 30.0 330.8 51.6 22.4 -19.3 21.9 -20.4 21.8 -18.0 22.1 -17.7
2025-12-12T11:40:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:40:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:40:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.402874
2025-12-12T11:40:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:40:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:40:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:40:46.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:40:46.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:40:46.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:38:01', tmtdew=17.36, humidity=31.44, cloud=0.0, wind=46.04, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:40:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:40:46.512 [DEBUG] [Thread-68945] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:40:46.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:40:46.609 [DEBUG] [Thread-68948] [transport.py] [_log()] starting thread (client mode): 0xf57b5a20
2025-12-12T11:40:46.609 [DEBUG] [Thread-68948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:40:46.628 [DEBUG] [Thread-68948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:40:46.629 [INFO] [Thread-68948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] client lang: <none>
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] server lang: <none>
2025-12-12T11:40:46.636 [DEBUG] [Thread-68948] [transport.py] [_log()] kex follows: False
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] Compression: none
2025-12-12T11:40:46.637 [DEBUG] [Thread-68948] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:40:46.692 [DEBUG] [Thread-68948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:40:46.693 [DEBUG] [Thread-68948] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:40:46.693 [DEBUG] [Thread-68948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:40:46.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:40:46.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:40:46.749 [DEBUG] [Thread-68948] [transport.py] [_log()] userauth is OK
2025-12-12T11:40:46.749 [DEBUG] [Thread-68948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:40:46.749 [DEBUG] [Thread-68948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:40:46.749 [DEBUG] [Thread-68948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:40:46.749 [DEBUG] [Thread-68948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:40:46.769 [INFO] [Thread-68948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:40:46.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:40:46.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:40:47.678 [DEBUG] [Thread-68948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:40:47.678 [DEBUG] [Thread-68948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:40:47.726 [DEBUG] [Thread-68948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:40:47.726 [DEBUG] [Thread-68948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:40:47.735 [DEBUG] [Thread-68948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:40:47.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:40:47.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:40:47.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:40:47.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:40:47.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:40:47.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:40:47.774 [DEBUG] [Thread-68948] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:41:00.384 [DEBUG] [Thread-68950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:41:15.420 [DEBUG] [Thread-68951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:41:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:41:17.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:41:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:41:18.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 38, 1), 17.36, 31.44, 0.0, 46.04, 19.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:41:18.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:38:01
2025-12-12T11:41:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:41:18.729 [DEBUG] [Thread-68952] [transport.py] [_log()] starting thread (client mode): 0xf81890f0
2025-12-12T11:41:18.729 [DEBUG] [Thread-68952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:41:18.750 [DEBUG] [Thread-68952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:41:18.750 [INFO] [Thread-68952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:41:18.753 [DEBUG] [Thread-68952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:41:18.753 [DEBUG] [Thread-68952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:41:18.753 [DEBUG] [Thread-68952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] client lang: <none>
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] server lang: <none>
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] kex follows: False
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] Compression: none
2025-12-12T11:41:18.754 [DEBUG] [Thread-68952] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:41:18.770 [DEBUG] [Thread-68952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:41:18.770 [DEBUG] [Thread-68952] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:41:18.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:41:18.771 [DEBUG] [Thread-68952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:41:18.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:41:18.774 [DEBUG] [Thread-68952] [transport.py] [_log()] userauth is OK
2025-12-12T11:41:18.774 [DEBUG] [Thread-68952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:41:18.774 [DEBUG] [Thread-68952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:41:18.774 [DEBUG] [Thread-68952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:41:18.774 [DEBUG] [Thread-68952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:41:18.795 [INFO] [Thread-68952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:41:18.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:41:19.451 [DEBUG] [Thread-68952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:41:19.451 [DEBUG] [Thread-68952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:41:19.451 [DEBUG] [Thread-68952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:41:19.492 [DEBUG] [Thread-68952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:41:19.492 [DEBUG] [Thread-68952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:41:19.495 [DEBUG] [Thread-68952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:41:19.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:41:19.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:41:19.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:41:19.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:41:19.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:41:19.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:41:19.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:41:19.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:41:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:41:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.403568 -999.00  +17.80  17.76     39   +3.90 1 2 1 1 1   888    0 15.84 73.73 ----- 27.4 17.8 4.0 39.7 22.3 -19.3 21.8 -18.7 21.6 -19.0 21.9 -17.7
2025-12-12T11:41:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:41:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:41:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.403568
2025-12-12T11:41:19.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:41:19.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:41:19.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:41:19.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:41:19.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:41:19.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:38:01', tmtdew=17.36, humidity=31.44, cloud=0.0, wind=46.04, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:41:08.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:41:19.520 [DEBUG] [Thread-68952] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:41:19.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:41:28.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:41:28.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:41:30.448 [DEBUG] [Thread-68955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:41:39.441 [DEBUG] [Thread-68956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:41:45.492 [DEBUG] [Thread-68957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:00.521 [DEBUG] [Thread-68958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:15.554 [DEBUG] [Thread-68959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:29.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:29.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:30.582 [DEBUG] [Thread-68960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:39.496 [DEBUG] [Thread-68961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:42:45.615 [DEBUG] [Thread-68962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:00.646 [DEBUG] [Thread-68963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:15.672 [DEBUG] [Thread-68964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:29.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:29.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:30.702 [DEBUG] [Thread-68965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:34.378 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T11:43:39.549 [DEBUG] [Thread-68966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:43:45.731 [DEBUG] [Thread-68967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:00.761 [DEBUG] [Thread-68968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:04.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:44:04.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:44:04.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:44:05.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 40, 49), 17.12, 31.94, 0.0, 34.61, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:44:05.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:40:49
2025-12-12T11:44:05.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:44:05.342 [DEBUG] [Thread-68969] [transport.py] [_log()] starting thread (client mode): 0xf818bee0
2025-12-12T11:44:05.343 [DEBUG] [Thread-68969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:44:05.363 [DEBUG] [Thread-68969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:44:05.363 [INFO] [Thread-68969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:44:05.366 [DEBUG] [Thread-68969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:44:05.366 [DEBUG] [Thread-68969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] client lang: <none>
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] server lang: <none>
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] kex follows: False
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:44:05.367 [DEBUG] [Thread-68969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:44:05.368 [DEBUG] [Thread-68969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:44:05.368 [DEBUG] [Thread-68969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:44:05.368 [DEBUG] [Thread-68969] [transport.py] [_log()] Compression: none
2025-12-12T11:44:05.368 [DEBUG] [Thread-68969] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:44:05.385 [DEBUG] [Thread-68969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:44:05.385 [DEBUG] [Thread-68969] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:44:05.385 [DEBUG] [Thread-68969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:44:05.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:44:05.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:44:05.387 [DEBUG] [Thread-68969] [transport.py] [_log()] userauth is OK
2025-12-12T11:44:05.387 [DEBUG] [Thread-68969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:44:05.387 [DEBUG] [Thread-68969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:44:05.387 [DEBUG] [Thread-68969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:44:05.387 [DEBUG] [Thread-68969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:44:05.404 [INFO] [Thread-68969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:44:05.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:44:06.007 [DEBUG] [Thread-68969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:44:06.007 [DEBUG] [Thread-68969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:44:06.007 [DEBUG] [Thread-68969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:44:06.048 [DEBUG] [Thread-68969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:44:06.048 [DEBUG] [Thread-68969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:44:06.051 [DEBUG] [Thread-68969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:44:06.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:44:06.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:44:06.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:44:06.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:44:06.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:44:06.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:44:06.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:44:06.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:44:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:44:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.405304 -999.00  +18.80  32.61     38   +4.30 1 2 2 1 1   888    0 15.48 52.40 ----- 22.9 32.6 345.6 43.6 22.6 -18.8 22.1 -19.3 21.8 -17.6 22.3 -17.6
2025-12-12T11:44:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:44:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:44:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.405304
2025-12-12T11:44:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:44:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:44:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:44:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:44:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:44:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:40:49', tmtdew=17.12, humidity=31.94, cloud=0.0, wind=34.61, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:43:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:44:06.075 [DEBUG] [Thread-68969] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:44:06.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:44:06.181 [DEBUG] [Thread-68972] [transport.py] [_log()] starting thread (client mode): 0xf81f3160
2025-12-12T11:44:06.181 [DEBUG] [Thread-68972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:44:06.195 [DEBUG] [Thread-68972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:44:06.195 [INFO] [Thread-68972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] client lang: <none>
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] server lang: <none>
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] kex follows: False
2025-12-12T11:44:06.203 [DEBUG] [Thread-68972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:44:06.204 [DEBUG] [Thread-68972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:44:06.204 [DEBUG] [Thread-68972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:44:06.204 [DEBUG] [Thread-68972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:44:06.204 [DEBUG] [Thread-68972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:44:06.204 [DEBUG] [Thread-68972] [transport.py] [_log()] Compression: none
2025-12-12T11:44:06.204 [DEBUG] [Thread-68972] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:44:06.261 [DEBUG] [Thread-68972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:44:06.261 [DEBUG] [Thread-68972] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:44:06.262 [DEBUG] [Thread-68972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:44:06.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:44:06.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:44:06.317 [DEBUG] [Thread-68972] [transport.py] [_log()] userauth is OK
2025-12-12T11:44:06.317 [DEBUG] [Thread-68972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:44:06.317 [DEBUG] [Thread-68972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:44:06.317 [DEBUG] [Thread-68972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:44:06.317 [DEBUG] [Thread-68972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:44:06.336 [INFO] [Thread-68972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:44:06.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:44:06.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:44:07.197 [DEBUG] [Thread-68972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:44:07.198 [DEBUG] [Thread-68972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:44:07.246 [DEBUG] [Thread-68972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:44:07.246 [DEBUG] [Thread-68972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:44:07.255 [DEBUG] [Thread-68972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:44:07.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:44:07.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:44:07.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:44:07.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:44:07.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:44:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:44:07.294 [DEBUG] [Thread-68972] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:44:15.792 [DEBUG] [Thread-68974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:29.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:29.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:30.835 [DEBUG] [Thread-68975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:37.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:44:37.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:44:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:44:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 40, 49), 17.12, 31.94, 0.0, 34.61, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:44:37.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:40:49
2025-12-12T11:44:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:44:38.244 [DEBUG] [Thread-68976] [transport.py] [_log()] starting thread (client mode): 0xf2d0c460
2025-12-12T11:44:38.245 [DEBUG] [Thread-68976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:44:38.271 [DEBUG] [Thread-68976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:44:38.271 [INFO] [Thread-68976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:44:38.280 [DEBUG] [Thread-68976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] client lang: <none>
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] server lang: <none>
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] kex follows: False
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:44:38.281 [DEBUG] [Thread-68976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:44:38.282 [DEBUG] [Thread-68976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:44:38.282 [DEBUG] [Thread-68976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:44:38.282 [DEBUG] [Thread-68976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:44:38.282 [DEBUG] [Thread-68976] [transport.py] [_log()] Compression: none
2025-12-12T11:44:38.282 [DEBUG] [Thread-68976] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:44:38.292 [DEBUG] [Thread-68976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:44:38.293 [DEBUG] [Thread-68976] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:44:38.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:44:38.294 [DEBUG] [Thread-68976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:44:38.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:44:38.296 [DEBUG] [Thread-68976] [transport.py] [_log()] userauth is OK
2025-12-12T11:44:38.296 [DEBUG] [Thread-68976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:44:38.296 [DEBUG] [Thread-68976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:44:38.296 [DEBUG] [Thread-68976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:44:38.296 [DEBUG] [Thread-68976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:44:38.314 [INFO] [Thread-68976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:44:38.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:44:38.893 [DEBUG] [Thread-68976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:44:38.893 [DEBUG] [Thread-68976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:44:38.894 [DEBUG] [Thread-68976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:44:38.934 [DEBUG] [Thread-68976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:44:38.934 [DEBUG] [Thread-68976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:44:38.936 [DEBUG] [Thread-68976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:44:38.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:44:38.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:44:38.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:44:38.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:44:38.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:44:38.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:44:38.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:44:38.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:44:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:44:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.405652 -999.00  +19.00  32.00     37   +4.30 1 2 2 1 1   888    0 15.68 48.67 ----- 32.0 32.0 326.2 38.5 22.6 -18.7 22.2 -18.8 21.8 -18.2 22.2 -18.0
2025-12-12T11:44:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:44:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:44:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.405652
2025-12-12T11:44:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:44:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:44:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:44:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:44:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:44:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:40:49', tmtdew=17.12, humidity=31.94, cloud=0.0, wind=34.61, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:44:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:44:38.957 [DEBUG] [Thread-68976] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:44:39.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:44:39.056 [DEBUG] [Thread-68979] [transport.py] [_log()] starting thread (client mode): 0xf2d0dc90
2025-12-12T11:44:39.056 [DEBUG] [Thread-68979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:44:39.071 [DEBUG] [Thread-68979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:44:39.071 [INFO] [Thread-68979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] client lang: <none>
2025-12-12T11:44:39.080 [DEBUG] [Thread-68979] [transport.py] [_log()] server lang: <none>
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] kex follows: False
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] Compression: none
2025-12-12T11:44:39.081 [DEBUG] [Thread-68979] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:44:39.136 [DEBUG] [Thread-68979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:44:39.137 [DEBUG] [Thread-68979] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:44:39.137 [DEBUG] [Thread-68979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:44:39.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:44:39.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:44:39.193 [DEBUG] [Thread-68979] [transport.py] [_log()] userauth is OK
2025-12-12T11:44:39.193 [DEBUG] [Thread-68979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:44:39.193 [DEBUG] [Thread-68979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:44:39.193 [DEBUG] [Thread-68979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:44:39.193 [DEBUG] [Thread-68979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:44:39.212 [INFO] [Thread-68979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:44:39.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:44:39.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:44:39.614 [DEBUG] [Thread-68981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:44:40.041 [DEBUG] [Thread-68979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:44:40.041 [DEBUG] [Thread-68979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:44:40.089 [DEBUG] [Thread-68979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:44:40.089 [DEBUG] [Thread-68979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:44:40.098 [DEBUG] [Thread-68979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:44:40.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:44:40.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:44:40.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:44:40.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:44:40.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:44:40.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:44:40.132 [DEBUG] [Thread-68979] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:44:45.871 [DEBUG] [Thread-68982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:00.920 [DEBUG] [Thread-68983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:10.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:45:10.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:45:10.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:45:10.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 40, 49), 17.12, 31.94, 0.0, 34.61, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:45:10.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:40:49
2025-12-12T11:45:10.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:45:11.096 [DEBUG] [Thread-68984] [transport.py] [_log()] starting thread (client mode): 0xf57c8b20
2025-12-12T11:45:11.096 [DEBUG] [Thread-68984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:45:11.114 [DEBUG] [Thread-68984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:45:11.114 [INFO] [Thread-68984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:45:11.117 [DEBUG] [Thread-68984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:45:11.117 [DEBUG] [Thread-68984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:45:11.117 [DEBUG] [Thread-68984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:45:11.117 [DEBUG] [Thread-68984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] client lang: <none>
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] server lang: <none>
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] kex follows: False
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] Compression: none
2025-12-12T11:45:11.118 [DEBUG] [Thread-68984] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:45:11.132 [DEBUG] [Thread-68984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:45:11.132 [DEBUG] [Thread-68984] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:45:11.133 [DEBUG] [Thread-68984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:45:11.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:45:11.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:45:11.134 [DEBUG] [Thread-68984] [transport.py] [_log()] userauth is OK
2025-12-12T11:45:11.134 [DEBUG] [Thread-68984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:45:11.135 [DEBUG] [Thread-68984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:45:11.135 [DEBUG] [Thread-68984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:45:11.135 [DEBUG] [Thread-68984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:45:11.158 [INFO] [Thread-68984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:45:11.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:45:11.800 [DEBUG] [Thread-68984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:45:11.801 [DEBUG] [Thread-68984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:45:11.801 [DEBUG] [Thread-68984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:45:11.842 [DEBUG] [Thread-68984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:45:11.842 [DEBUG] [Thread-68984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:45:11.845 [DEBUG] [Thread-68984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:45:11.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:45:11.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:45:11.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:45:11.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:45:11.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:45:11.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:45:11.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:45:11.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:45:11.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:45:11.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.406346 -999.00  +18.90  34.98     37   +4.10 1 2 2 1 1   888    0 15.53 48.25 ----- 33.6 35.0 359.1 50.4 22.6 -19.4 22.1 -19.8 21.8 -19.3 22.2 -18.7
2025-12-12T11:45:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:45:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:45:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.406346
2025-12-12T11:45:11.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:45:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:45:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:45:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:45:11.872 [DEBUG] [Thread-68984] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:45:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:45:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:40:49', tmtdew=17.12, humidity=31.94, cloud=0.0, wind=34.61, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:45:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:45:11.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:45:11.968 [DEBUG] [Thread-68987] [transport.py] [_log()] starting thread (client mode): 0xf570e2c0
2025-12-12T11:45:11.968 [DEBUG] [Thread-68987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:45:11.982 [DEBUG] [Thread-68987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:45:11.982 [INFO] [Thread-68987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:45:11.990 [DEBUG] [Thread-68987] [transport.py] [_log()] client lang: <none>
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] server lang: <none>
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] kex follows: False
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] Compression: none
2025-12-12T11:45:11.991 [DEBUG] [Thread-68987] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:45:12.048 [DEBUG] [Thread-68987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:45:12.049 [DEBUG] [Thread-68987] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:45:12.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:45:12.050 [DEBUG] [Thread-68987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:45:12.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:45:12.105 [DEBUG] [Thread-68987] [transport.py] [_log()] userauth is OK
2025-12-12T11:45:12.105 [DEBUG] [Thread-68987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:45:12.105 [DEBUG] [Thread-68987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:45:12.105 [DEBUG] [Thread-68987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:45:12.106 [DEBUG] [Thread-68987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:45:12.124 [INFO] [Thread-68987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:45:12.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:45:12.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:45:12.964 [DEBUG] [Thread-68987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:45:12.964 [DEBUG] [Thread-68987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:45:13.013 [DEBUG] [Thread-68987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:45:13.013 [DEBUG] [Thread-68987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:45:13.022 [DEBUG] [Thread-68987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:45:13.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:45:13.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:45:13.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:45:13.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:45:13.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:45:13.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:45:13.056 [DEBUG] [Thread-68987] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:45:15.953 [DEBUG] [Thread-68989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:29.475 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:29.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:31.000 [DEBUG] [Thread-68990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:39.685 [DEBUG] [Thread-68991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:45:43.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:45:43.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:45:43.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 40, 49), 17.12, 31.94, 0.0, 34.61, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:45:43.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:40:49
2025-12-12T11:45:43.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:45:44.023 [DEBUG] [Thread-68992] [transport.py] [_log()] starting thread (client mode): 0xf57b4580
2025-12-12T11:45:44.023 [DEBUG] [Thread-68992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:45:44.043 [DEBUG] [Thread-68992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:45:44.043 [INFO] [Thread-68992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:45:44.046 [DEBUG] [Thread-68992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] client lang: <none>
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] server lang: <none>
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] kex follows: False
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] Compression: none
2025-12-12T11:45:44.047 [DEBUG] [Thread-68992] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:45:44.066 [DEBUG] [Thread-68992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:45:44.067 [DEBUG] [Thread-68992] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:45:44.067 [DEBUG] [Thread-68992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:45:44.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:45:44.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:45:44.069 [DEBUG] [Thread-68992] [transport.py] [_log()] userauth is OK
2025-12-12T11:45:44.069 [DEBUG] [Thread-68992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:45:44.069 [DEBUG] [Thread-68992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:45:44.069 [DEBUG] [Thread-68992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:45:44.069 [DEBUG] [Thread-68992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:45:44.103 [INFO] [Thread-68992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:45:44.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:45:44.748 [DEBUG] [Thread-68992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:45:44.748 [DEBUG] [Thread-68992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:45:44.749 [DEBUG] [Thread-68992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:45:44.789 [DEBUG] [Thread-68992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:45:44.789 [DEBUG] [Thread-68992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:45:44.792 [DEBUG] [Thread-68992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:45:44.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:45:44.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:45:44.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:45:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:45:44.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:45:44.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:45:44.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:45:44.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:45:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:45:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.406346 -999.00  +18.90  34.98     37   +4.10 1 2 2 1 1   888    0 15.53 48.25 ----- 33.6 35.0 359.1 50.4 22.6 -19.4 22.1 -19.8 21.8 -19.3 22.2 -18.7
2025-12-12T11:45:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:45:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:45:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.406346
2025-12-12T11:45:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:45:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:45:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:45:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:45:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:45:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:40:49', tmtdew=17.12, humidity=31.94, cloud=0.0, wind=34.61, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:45:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:45:44.809 [DEBUG] [Thread-68992] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:45:44.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:45:44.908 [DEBUG] [Thread-68995] [transport.py] [_log()] starting thread (client mode): 0xf81f20e0
2025-12-12T11:45:44.908 [DEBUG] [Thread-68995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:45:44.923 [DEBUG] [Thread-68995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:45:44.923 [INFO] [Thread-68995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:45:44.930 [DEBUG] [Thread-68995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] client lang: <none>
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] server lang: <none>
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] kex follows: False
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:45:44.931 [DEBUG] [Thread-68995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:45:44.932 [DEBUG] [Thread-68995] [transport.py] [_log()] Compression: none
2025-12-12T11:45:44.932 [DEBUG] [Thread-68995] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:45:44.988 [DEBUG] [Thread-68995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:45:44.989 [DEBUG] [Thread-68995] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:45:44.989 [DEBUG] [Thread-68995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:45:44.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:45:44.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:45:45.045 [DEBUG] [Thread-68995] [transport.py] [_log()] userauth is OK
2025-12-12T11:45:45.045 [DEBUG] [Thread-68995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:45:45.045 [DEBUG] [Thread-68995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:45:45.045 [DEBUG] [Thread-68995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:45:45.045 [DEBUG] [Thread-68995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:45:45.067 [INFO] [Thread-68995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:45:45.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:45:45.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:45:45.955 [DEBUG] [Thread-68995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:45:45.956 [DEBUG] [Thread-68995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:45:46.003 [DEBUG] [Thread-68995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:45:46.004 [DEBUG] [Thread-68995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:45:46.012 [DEBUG] [Thread-68995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:45:46.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:45:46.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:45:46.025 [DEBUG] [Thread-68997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:45:46.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:45:46.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:45:46.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:45:46.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:45:46.046 [DEBUG] [Thread-68995] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:46:01.053 [DEBUG] [Thread-68998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:46:16.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:46:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:46:16.081 [DEBUG] [Thread-68999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 43, 37), 16.79, 32.57, 0.0, 38.78, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:46:16.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:43:37
2025-12-12T11:46:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:46:16.988 [DEBUG] [Thread-69000] [transport.py] [_log()] starting thread (client mode): 0xf8189c00
2025-12-12T11:46:16.988 [DEBUG] [Thread-69000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:46:17.009 [DEBUG] [Thread-69000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:46:17.009 [INFO] [Thread-69000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:17.012 [DEBUG] [Thread-69000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] client lang: <none>
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] server lang: <none>
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] kex follows: False
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] Compression: none
2025-12-12T11:46:17.013 [DEBUG] [Thread-69000] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:46:17.030 [DEBUG] [Thread-69000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:46:17.031 [DEBUG] [Thread-69000] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:46:17.032 [DEBUG] [Thread-69000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:46:17.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:46:17.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:46:17.033 [DEBUG] [Thread-69000] [transport.py] [_log()] userauth is OK
2025-12-12T11:46:17.033 [DEBUG] [Thread-69000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:46:17.034 [DEBUG] [Thread-69000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:46:17.034 [DEBUG] [Thread-69000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:46:17.034 [DEBUG] [Thread-69000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:46:17.057 [INFO] [Thread-69000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:46:17.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:46:17.807 [DEBUG] [Thread-69000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:46:17.807 [DEBUG] [Thread-69000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:46:17.808 [DEBUG] [Thread-69000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:46:17.849 [DEBUG] [Thread-69000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:46:17.849 [DEBUG] [Thread-69000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:46:17.852 [DEBUG] [Thread-69000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:46:17.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:46:17.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:46:17.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:46:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:46:17.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:46:17.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:46:17.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:46:17.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:46:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:46:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.406693 -999.00  +19.00  29.54     37   +4.10 1 2 1 1 1   888    0 15.54 48.41 ----- 27.9 29.5 320.4 39.6 22.5 -19.7 22.1 -19.4 21.8 -18.9 22.1 -19.0
2025-12-12T11:46:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:46:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:46:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.406693
2025-12-12T11:46:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:46:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:46:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:46:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:46:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:46:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:43:37', tmtdew=16.79, humidity=32.57, cloud=0.0, wind=38.78, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:45:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:46:17.875 [DEBUG] [Thread-69000] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:46:17.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:46:17.971 [DEBUG] [Thread-69003] [transport.py] [_log()] starting thread (client mode): 0xf818aa40
2025-12-12T11:46:17.971 [DEBUG] [Thread-69003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:46:17.987 [DEBUG] [Thread-69003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:46:17.988 [INFO] [Thread-69003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:46:17.995 [DEBUG] [Thread-69003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:46:17.996 [DEBUG] [Thread-69003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] client lang: <none>
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] server lang: <none>
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] kex follows: False
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:46:17.997 [DEBUG] [Thread-69003] [transport.py] [_log()] Compression: none
2025-12-12T11:46:17.998 [DEBUG] [Thread-69003] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:46:18.053 [DEBUG] [Thread-69003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:46:18.054 [DEBUG] [Thread-69003] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:46:18.055 [DEBUG] [Thread-69003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:46:18.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:46:18.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:46:18.115 [DEBUG] [Thread-69003] [transport.py] [_log()] userauth is OK
2025-12-12T11:46:18.115 [DEBUG] [Thread-69003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:46:18.115 [DEBUG] [Thread-69003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:46:18.115 [DEBUG] [Thread-69003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:46:18.115 [DEBUG] [Thread-69003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:46:18.137 [INFO] [Thread-69003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:46:18.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:46:18.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:46:18.977 [DEBUG] [Thread-69003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:46:18.977 [DEBUG] [Thread-69003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:46:19.025 [DEBUG] [Thread-69003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:46:19.025 [DEBUG] [Thread-69003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:46:19.034 [DEBUG] [Thread-69003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:46:19.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:46:19.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:46:19.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:46:19.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:46:19.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:46:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:46:19.070 [DEBUG] [Thread-69003] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:46:29.618 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:29.619 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:31.107 [DEBUG] [Thread-69005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:39.735 [DEBUG] [Thread-69006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:46.152 [DEBUG] [Thread-69007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:46:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:46:49.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:46:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 43, 37), 16.79, 32.57, 0.0, 38.78, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:43:37
2025-12-12T11:46:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:46:50.011 [DEBUG] [Thread-69008] [transport.py] [_log()] starting thread (client mode): 0xf2d0e890
2025-12-12T11:46:50.011 [DEBUG] [Thread-69008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:46:50.031 [DEBUG] [Thread-69008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:46:50.031 [INFO] [Thread-69008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] client lang: <none>
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] server lang: <none>
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] kex follows: False
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] Compression: none
2025-12-12T11:46:50.034 [DEBUG] [Thread-69008] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:46:50.049 [DEBUG] [Thread-69008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:46:50.049 [DEBUG] [Thread-69008] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:46:50.049 [DEBUG] [Thread-69008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:46:50.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:46:50.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:46:50.050 [DEBUG] [Thread-69008] [transport.py] [_log()] userauth is OK
2025-12-12T11:46:50.050 [DEBUG] [Thread-69008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:46:50.050 [DEBUG] [Thread-69008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:46:50.050 [DEBUG] [Thread-69008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:46:50.050 [DEBUG] [Thread-69008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:46:50.067 [INFO] [Thread-69008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:46:50.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:46:50.697 [DEBUG] [Thread-69008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:46:50.697 [DEBUG] [Thread-69008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:46:50.697 [DEBUG] [Thread-69008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:46:50.738 [DEBUG] [Thread-69008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:46:50.738 [DEBUG] [Thread-69008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:46:50.740 [DEBUG] [Thread-69008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:46:50.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:46:50.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:46:50.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:46:50.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:46:50.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:46:50.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:46:50.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.407041 -999.00  +18.90  21.51     36   +3.70 1 2 1 1 1   888    0 15.61 50.53 ----- 29.7 21.5 332.7 35.9 22.6 -20.0 22.1 -19.8 21.8 -18.7 22.2 -19.1
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.407041
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:46:50.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:43:37', tmtdew=16.79, humidity=32.57, cloud=0.0, wind=38.78, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:46:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:46:50.761 [DEBUG] [Thread-69008] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:46:50.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:46:50.846 [DEBUG] [Thread-69011] [transport.py] [_log()] starting thread (client mode): 0xf8189600
2025-12-12T11:46:50.846 [DEBUG] [Thread-69011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:46:50.861 [DEBUG] [Thread-69011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:46:50.861 [INFO] [Thread-69011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] client lang: <none>
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] server lang: <none>
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] kex follows: False
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] Compression: none
2025-12-12T11:46:50.869 [DEBUG] [Thread-69011] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:46:50.924 [DEBUG] [Thread-69011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:46:50.924 [DEBUG] [Thread-69011] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:46:50.924 [DEBUG] [Thread-69011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:46:50.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:46:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:46:50.981 [DEBUG] [Thread-69011] [transport.py] [_log()] userauth is OK
2025-12-12T11:46:50.981 [DEBUG] [Thread-69011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:46:50.981 [DEBUG] [Thread-69011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:46:50.981 [DEBUG] [Thread-69011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:46:50.981 [DEBUG] [Thread-69011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:46:50.998 [INFO] [Thread-69011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:46:50.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:46:50.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:46:51.855 [DEBUG] [Thread-69011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:46:51.855 [DEBUG] [Thread-69011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:46:51.902 [DEBUG] [Thread-69011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:46:51.902 [DEBUG] [Thread-69011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:46:51.910 [DEBUG] [Thread-69011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:46:51.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:46:51.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:46:51.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:46:51.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:46:51.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:46:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:46:51.942 [DEBUG] [Thread-69011] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:47:01.181 [DEBUG] [Thread-69013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:16.226 [DEBUG] [Thread-69014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:47:21.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:47:21.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:47:22.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 43, 37), 16.79, 32.57, 0.0, 38.78, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:47:22.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:43:37
2025-12-12T11:47:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:47:22.896 [DEBUG] [Thread-69015] [transport.py] [_log()] starting thread (client mode): 0xf57b4220
2025-12-12T11:47:22.896 [DEBUG] [Thread-69015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:47:22.919 [DEBUG] [Thread-69015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:47:22.920 [INFO] [Thread-69015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:47:22.923 [DEBUG] [Thread-69015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:47:22.923 [DEBUG] [Thread-69015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:47:22.923 [DEBUG] [Thread-69015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:47:22.923 [DEBUG] [Thread-69015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:22.923 [DEBUG] [Thread-69015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:22.923 [DEBUG] [Thread-69015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] client lang: <none>
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] server lang: <none>
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] kex follows: False
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:47:22.924 [DEBUG] [Thread-69015] [transport.py] [_log()] Compression: none
2025-12-12T11:47:22.925 [DEBUG] [Thread-69015] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:47:22.943 [DEBUG] [Thread-69015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:47:22.943 [DEBUG] [Thread-69015] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:47:22.944 [DEBUG] [Thread-69015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:47:22.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:47:22.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:47:22.946 [DEBUG] [Thread-69015] [transport.py] [_log()] userauth is OK
2025-12-12T11:47:22.946 [DEBUG] [Thread-69015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:47:22.946 [DEBUG] [Thread-69015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:47:22.946 [DEBUG] [Thread-69015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:47:22.946 [DEBUG] [Thread-69015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:47:22.966 [INFO] [Thread-69015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:47:22.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:47:23.760 [DEBUG] [Thread-69015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:47:23.763 [DEBUG] [Thread-69015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:47:23.763 [DEBUG] [Thread-69015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:47:23.801 [DEBUG] [Thread-69015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:47:23.801 [DEBUG] [Thread-69015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:47:23.804 [DEBUG] [Thread-69015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:47:23.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:47:23.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:47:23.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:47:23.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:47:23.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:47:23.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:47:23.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:47:23.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:47:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:47:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.407388 -999.00  +18.80  33.57     36   +3.50 1 2 2 1 1   888    0 15.77 53.26 ----- 38.7 33.6 322.2 45.5 22.5 -20.1 22.0 -21.2 21.8 -19.1 22.2 -19.2
2025-12-12T11:47:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:47:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:47:23.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.407388
2025-12-12T11:47:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:47:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:47:23.829 [DEBUG] [Thread-69015] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:47:23.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:47:23.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:47:23.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:47:23.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:43:37', tmtdew=16.79, humidity=32.57, cloud=0.0, wind=38.78, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:46:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:47:23.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:47:23.927 [DEBUG] [Thread-69018] [transport.py] [_log()] starting thread (client mode): 0xf2d0cc10
2025-12-12T11:47:23.927 [DEBUG] [Thread-69018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:47:23.942 [DEBUG] [Thread-69018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:47:23.942 [INFO] [Thread-69018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:47:23.949 [DEBUG] [Thread-69018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:47:23.949 [DEBUG] [Thread-69018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:47:23.949 [DEBUG] [Thread-69018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:47:23.949 [DEBUG] [Thread-69018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] client lang: <none>
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] server lang: <none>
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] kex follows: False
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] Compression: none
2025-12-12T11:47:23.950 [DEBUG] [Thread-69018] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:47:24.005 [DEBUG] [Thread-69018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:47:24.006 [DEBUG] [Thread-69018] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:47:24.006 [DEBUG] [Thread-69018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:47:24.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:47:24.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:47:24.062 [DEBUG] [Thread-69018] [transport.py] [_log()] userauth is OK
2025-12-12T11:47:24.062 [DEBUG] [Thread-69018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:47:24.062 [DEBUG] [Thread-69018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:47:24.062 [DEBUG] [Thread-69018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:47:24.062 [DEBUG] [Thread-69018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:47:24.082 [INFO] [Thread-69018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:47:24.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:47:24.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:47:24.910 [DEBUG] [Thread-69018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:47:24.911 [DEBUG] [Thread-69018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:47:24.959 [DEBUG] [Thread-69018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:47:24.959 [DEBUG] [Thread-69018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:47:24.968 [DEBUG] [Thread-69018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:47:24.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:47:24.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:47:24.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:47:24.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:47:24.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:47:24.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:47:25.002 [DEBUG] [Thread-69018] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:47:29.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:29.761 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:31.255 [DEBUG] [Thread-69020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:39.785 [DEBUG] [Thread-69021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:46.299 [DEBUG] [Thread-69022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:47:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:47:55.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:47:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:47:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 43, 37), 16.79, 32.57, 0.0, 38.78, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:47:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:43:37
2025-12-12T11:47:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:47:55.941 [DEBUG] [Thread-69023] [transport.py] [_log()] starting thread (client mode): 0xf57b7b80
2025-12-12T11:47:55.941 [DEBUG] [Thread-69023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:47:55.963 [DEBUG] [Thread-69023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:47:55.963 [INFO] [Thread-69023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] client lang: <none>
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] server lang: <none>
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] kex follows: False
2025-12-12T11:47:55.967 [DEBUG] [Thread-69023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:47:55.968 [DEBUG] [Thread-69023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:47:55.968 [DEBUG] [Thread-69023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:47:55.968 [DEBUG] [Thread-69023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:47:55.968 [DEBUG] [Thread-69023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:47:55.968 [DEBUG] [Thread-69023] [transport.py] [_log()] Compression: none
2025-12-12T11:47:55.968 [DEBUG] [Thread-69023] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:47:55.984 [DEBUG] [Thread-69023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:47:55.985 [DEBUG] [Thread-69023] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:47:55.985 [DEBUG] [Thread-69023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:47:55.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:47:55.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:47:55.987 [DEBUG] [Thread-69023] [transport.py] [_log()] userauth is OK
2025-12-12T11:47:55.987 [DEBUG] [Thread-69023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:47:55.987 [DEBUG] [Thread-69023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:47:55.987 [DEBUG] [Thread-69023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:47:55.988 [DEBUG] [Thread-69023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:47:56.009 [INFO] [Thread-69023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:47:56.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:47:56.642 [DEBUG] [Thread-69023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:47:56.643 [DEBUG] [Thread-69023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:47:56.643 [DEBUG] [Thread-69023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:47:56.684 [DEBUG] [Thread-69023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:47:56.684 [DEBUG] [Thread-69023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:47:56.687 [DEBUG] [Thread-69023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:47:56.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:47:56.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:47:56.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:47:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:47:56.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:47:56.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:47:56.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:47:56.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:47:56.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.407677 -999.00  +18.70  34.42     36   +3.60 1 2 2 1 1   888    0 15.89 58.36 ----- 36.7 34.4 309.6 47.7 22.4 -20.2 22.0 -19.8 21.6 -20.3 22.1 -19.6
2025-12-12T11:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.407677
2025-12-12T11:47:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:47:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:43:37', tmtdew=16.79, humidity=32.57, cloud=0.0, wind=38.78, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:47:03.293', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:47:56.715 [DEBUG] [Thread-69023] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:47:56.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:47:56.809 [DEBUG] [Thread-69026] [transport.py] [_log()] starting thread (client mode): 0xf81c2d40
2025-12-12T11:47:56.810 [DEBUG] [Thread-69026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:47:56.824 [DEBUG] [Thread-69026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:47:56.824 [INFO] [Thread-69026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] client lang: <none>
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] server lang: <none>
2025-12-12T11:47:56.832 [DEBUG] [Thread-69026] [transport.py] [_log()] kex follows: False
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] Compression: none
2025-12-12T11:47:56.833 [DEBUG] [Thread-69026] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:47:56.892 [DEBUG] [Thread-69026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:47:56.893 [DEBUG] [Thread-69026] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:47:56.893 [DEBUG] [Thread-69026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:47:56.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:47:56.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:47:56.950 [DEBUG] [Thread-69026] [transport.py] [_log()] userauth is OK
2025-12-12T11:47:56.950 [DEBUG] [Thread-69026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:47:56.950 [DEBUG] [Thread-69026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:47:56.950 [DEBUG] [Thread-69026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:47:56.950 [DEBUG] [Thread-69026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:47:56.970 [INFO] [Thread-69026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:47:56.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:47:56.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:47:57.765 [DEBUG] [Thread-69026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:47:57.765 [DEBUG] [Thread-69026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:47:57.813 [DEBUG] [Thread-69026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:47:57.813 [DEBUG] [Thread-69026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:47:57.821 [DEBUG] [Thread-69026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:47:57.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:47:57.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:47:57.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:47:57.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:47:57.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:47:57.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:47:57.856 [DEBUG] [Thread-69026] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:48:01.328 [DEBUG] [Thread-69028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:48:16.373 [DEBUG] [Thread-69029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:48:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:48:27.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:48:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:48:28.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 43, 37), 16.79, 32.57, 0.0, 38.78, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:48:28.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:43:37
2025-12-12T11:48:28.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:48:28.822 [DEBUG] [Thread-69030] [transport.py] [_log()] starting thread (client mode): 0xf81c3100
2025-12-12T11:48:28.822 [DEBUG] [Thread-69030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:48:28.841 [DEBUG] [Thread-69030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:48:28.842 [INFO] [Thread-69030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] client lang: <none>
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] server lang: <none>
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] kex follows: False
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] Compression: none
2025-12-12T11:48:28.845 [DEBUG] [Thread-69030] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:48:28.862 [DEBUG] [Thread-69030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:48:28.863 [DEBUG] [Thread-69030] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:48:28.863 [DEBUG] [Thread-69030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:48:28.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:48:28.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:48:28.865 [DEBUG] [Thread-69030] [transport.py] [_log()] userauth is OK
2025-12-12T11:48:28.865 [DEBUG] [Thread-69030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:48:28.865 [DEBUG] [Thread-69030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:48:28.865 [DEBUG] [Thread-69030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:48:28.865 [DEBUG] [Thread-69030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:48:28.883 [INFO] [Thread-69030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:48:28.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:48:29.675 [DEBUG] [Thread-69030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:48:29.676 [DEBUG] [Thread-69030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:48:29.676 [DEBUG] [Thread-69030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:48:29.717 [DEBUG] [Thread-69030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:48:29.717 [DEBUG] [Thread-69030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:48:29.720 [DEBUG] [Thread-69030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:48:29.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:48:29.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:48:29.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:48:29.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:48:29.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:48:29.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:48:29.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:48:29.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:48:29.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:48:29.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.408082 -999.00  +18.80  30.14     36   +3.70 1 2 2 1 1   888    0 16.12 55.64 ----- 30.2 30.1 334.5 45.0 22.5 -19.6 22.1 -18.6 21.6 -19.2 22.1 -19.2
2025-12-12T11:48:29.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:48:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:48:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.408082
2025-12-12T11:48:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:48:29.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:48:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:48:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:48:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:48:29.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:43:37', tmtdew=16.79, humidity=32.57, cloud=0.0, wind=38.78, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:47:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:48:29.743 [DEBUG] [Thread-69030] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:48:29.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:48:29.839 [DEBUG] [Thread-69033] [transport.py] [_log()] starting thread (client mode): 0xf2d0dc90
2025-12-12T11:48:29.839 [DEBUG] [Thread-69033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:48:29.854 [DEBUG] [Thread-69033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:48:29.854 [INFO] [Thread-69033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:48:29.861 [DEBUG] [Thread-69033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:48:29.862 [DEBUG] [Thread-69033] [transport.py] [_log()] client lang: <none>
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] server lang: <none>
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] kex follows: False
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:48:29.863 [DEBUG] [Thread-69033] [transport.py] [_log()] Compression: none
2025-12-12T11:48:29.864 [DEBUG] [Thread-69033] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:48:29.901 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:48:29.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:48:29.922 [DEBUG] [Thread-69033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:48:29.922 [DEBUG] [Thread-69033] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:48:29.923 [DEBUG] [Thread-69033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:48:29.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:48:29.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:48:29.978 [DEBUG] [Thread-69033] [transport.py] [_log()] userauth is OK
2025-12-12T11:48:29.978 [DEBUG] [Thread-69033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:48:29.978 [DEBUG] [Thread-69033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:48:29.978 [DEBUG] [Thread-69033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:48:29.978 [DEBUG] [Thread-69033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:48:29.998 [INFO] [Thread-69033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:48:29.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:48:29.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:48:30.864 [DEBUG] [Thread-69033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:48:30.864 [DEBUG] [Thread-69033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:48:30.912 [DEBUG] [Thread-69033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:48:30.912 [DEBUG] [Thread-69033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:48:30.921 [DEBUG] [Thread-69033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:48:30.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:48:30.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')
2025-12-12T11:48:30.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:48:30.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:48:30.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:48:30.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:48:30.955 [DEBUG] [Thread-69033] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:48:31.402 [DEBUG] [Thread-69035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:48:39.833 [DEBUG] [Thread-69036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:48:46.443 [DEBUG] [Thread-69037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:00.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:49:00.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:49:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:49:01.467 [DEBUG] [Thread-69038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:01.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 46, 25), 16.92, 32.3, 0.0, 32.43, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:49:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:46:25
2025-12-12T11:49:01.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:49:01.905 [DEBUG] [Thread-69039] [transport.py] [_log()] starting thread (client mode): 0xf570c4f0
2025-12-12T11:49:01.905 [DEBUG] [Thread-69039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:49:01.924 [DEBUG] [Thread-69039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:49:01.924 [INFO] [Thread-69039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] client lang: <none>
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] server lang: <none>
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] kex follows: False
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] Compression: none
2025-12-12T11:49:01.926 [DEBUG] [Thread-69039] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:49:01.936 [DEBUG] [Thread-69039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:49:01.937 [DEBUG] [Thread-69039] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:49:01.937 [DEBUG] [Thread-69039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:49:01.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:49:01.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:49:01.939 [DEBUG] [Thread-69039] [transport.py] [_log()] userauth is OK
2025-12-12T11:49:01.939 [DEBUG] [Thread-69039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:49:01.939 [DEBUG] [Thread-69039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:49:01.939 [DEBUG] [Thread-69039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:49:01.939 [DEBUG] [Thread-69039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:49:01.956 [INFO] [Thread-69039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:49:01.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:49:02.588 [DEBUG] [Thread-69039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:49:02.588 [DEBUG] [Thread-69039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:49:02.589 [DEBUG] [Thread-69039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:49:02.629 [DEBUG] [Thread-69039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:49:02.629 [DEBUG] [Thread-69039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:49:02.632 [DEBUG] [Thread-69039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:49:02.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:49:02.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:49:02.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:49:02.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:49:02.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:49:02.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:49:02.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.408430 -999.00  +18.80  40.54     36   +3.50 1 2 2 1 1   888    0 16.00 54.99 ----- 54.9 40.5 315.2 50.4 22.7 -19.1 22.2 -20.7 21.9 -17.4 22.3 -18.4
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.408430
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:49:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:46:25', tmtdew=16.92, humidity=32.3, cloud=0.0, wind=32.43, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:48:08.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:49:02.653 [DEBUG] [Thread-69039] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:49:02.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:49:02.756 [DEBUG] [Thread-69042] [transport.py] [_log()] starting thread (client mode): 0xf57aa3b0
2025-12-12T11:49:02.756 [DEBUG] [Thread-69042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:49:02.770 [DEBUG] [Thread-69042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:49:02.770 [INFO] [Thread-69042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:49:02.777 [DEBUG] [Thread-69042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] client lang: <none>
2025-12-12T11:49:02.778 [DEBUG] [Thread-69042] [transport.py] [_log()] server lang: <none>
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] kex follows: False
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] Compression: none
2025-12-12T11:49:02.779 [DEBUG] [Thread-69042] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:49:02.837 [DEBUG] [Thread-69042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:49:02.837 [DEBUG] [Thread-69042] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:49:02.838 [DEBUG] [Thread-69042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:49:02.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:49:02.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:49:02.894 [DEBUG] [Thread-69042] [transport.py] [_log()] userauth is OK
2025-12-12T11:49:02.894 [DEBUG] [Thread-69042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:49:02.894 [DEBUG] [Thread-69042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:49:02.894 [DEBUG] [Thread-69042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:49:02.894 [DEBUG] [Thread-69042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:49:02.917 [INFO] [Thread-69042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:49:02.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:49:02.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:49:03.773 [DEBUG] [Thread-69042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:49:03.773 [DEBUG] [Thread-69042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:49:03.821 [DEBUG] [Thread-69042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:49:03.821 [DEBUG] [Thread-69042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:49:03.830 [DEBUG] [Thread-69042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:49:03.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:49:03.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:49:03.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:49:03.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:49:03.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:49:03.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:49:03.865 [DEBUG] [Thread-69042] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:49:16.493 [DEBUG] [Thread-69044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:30.042 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:30.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:31.535 [DEBUG] [Thread-69045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:33.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:49:33.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:49:33.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:49:34.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 46, 25), 16.92, 32.3, 0.0, 32.43, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:49:34.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:46:25
2025-12-12T11:49:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:49:34.815 [DEBUG] [Thread-69046] [transport.py] [_log()] starting thread (client mode): 0xf81c3670
2025-12-12T11:49:34.815 [DEBUG] [Thread-69046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:49:34.835 [DEBUG] [Thread-69046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:49:34.835 [INFO] [Thread-69046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:34.838 [DEBUG] [Thread-69046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] client lang: <none>
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] server lang: <none>
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] kex follows: False
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] Compression: none
2025-12-12T11:49:34.839 [DEBUG] [Thread-69046] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:49:34.851 [DEBUG] [Thread-69046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:49:34.851 [DEBUG] [Thread-69046] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:49:34.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:49:34.852 [DEBUG] [Thread-69046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:49:34.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:49:34.854 [DEBUG] [Thread-69046] [transport.py] [_log()] userauth is OK
2025-12-12T11:49:34.854 [DEBUG] [Thread-69046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:49:34.854 [DEBUG] [Thread-69046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:49:34.854 [DEBUG] [Thread-69046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:49:34.854 [DEBUG] [Thread-69046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:49:34.879 [INFO] [Thread-69046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:49:34.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:49:35.670 [DEBUG] [Thread-69046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:49:35.670 [DEBUG] [Thread-69046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:49:35.670 [DEBUG] [Thread-69046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:49:35.711 [DEBUG] [Thread-69046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:49:35.711 [DEBUG] [Thread-69046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:49:35.714 [DEBUG] [Thread-69046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:49:35.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:49:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:49:35.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:49:35.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:49:35.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:49:35.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:49:35.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:49:35.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:49:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:49:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.408777 -999.00  +18.30  34.91     37   +3.60 1 2 2 1 1   888    0 15.88 53.48 ----- 28.6 34.9 339.4 60.0 22.8 -18.0 22.4 -17.4 21.7 -18.7 22.2 -17.4
2025-12-12T11:49:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:49:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:49:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.408777
2025-12-12T11:49:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:49:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:49:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:49:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:49:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:49:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:46:25', tmtdew=16.92, humidity=32.3, cloud=0.0, wind=32.43, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:48:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:49:35.738 [DEBUG] [Thread-69046] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:49:35.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:49:35.834 [DEBUG] [Thread-69049] [transport.py] [_log()] starting thread (client mode): 0xf57b6b90
2025-12-12T11:49:35.834 [DEBUG] [Thread-69049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:49:35.849 [DEBUG] [Thread-69049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:49:35.849 [INFO] [Thread-69049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:49:35.856 [DEBUG] [Thread-69049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:49:35.857 [DEBUG] [Thread-69049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] client lang: <none>
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] server lang: <none>
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] kex follows: False
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:49:35.858 [DEBUG] [Thread-69049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:49:35.859 [DEBUG] [Thread-69049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:49:35.859 [DEBUG] [Thread-69049] [transport.py] [_log()] Compression: none
2025-12-12T11:49:35.859 [DEBUG] [Thread-69049] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:49:35.914 [DEBUG] [Thread-69049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:49:35.915 [DEBUG] [Thread-69049] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:49:35.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:49:35.916 [DEBUG] [Thread-69049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:49:35.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:49:35.970 [DEBUG] [Thread-69049] [transport.py] [_log()] userauth is OK
2025-12-12T11:49:35.970 [DEBUG] [Thread-69049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:49:35.970 [DEBUG] [Thread-69049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:49:35.970 [DEBUG] [Thread-69049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:49:35.970 [DEBUG] [Thread-69049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:49:35.989 [INFO] [Thread-69049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:49:35.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:49:35.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:49:36.832 [DEBUG] [Thread-69049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:49:36.832 [DEBUG] [Thread-69049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:49:36.881 [DEBUG] [Thread-69049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:49:36.881 [DEBUG] [Thread-69049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:49:36.890 [DEBUG] [Thread-69049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:49:36.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:49: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')
2025-12-12T11:49:36.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:49:36.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:49:36.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:49:36.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:49:36.924 [DEBUG] [Thread-69049] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:49:39.888 [DEBUG] [Thread-69051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:49:46.567 [DEBUG] [Thread-69052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:01.615 [DEBUG] [Thread-69053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:06.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:50:06.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:50:06.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
2025-12-12T11:50:07.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 46, 25), 16.92, 32.3, 0.0, 32.43, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:50:07.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:46:25
2025-12-12T11:50:07.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:50:07.850 [DEBUG] [Thread-69054] [transport.py] [_log()] starting thread (client mode): 0xf818a2c0
2025-12-12T11:50:07.850 [DEBUG] [Thread-69054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:50:07.871 [DEBUG] [Thread-69054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:50:07.871 [INFO] [Thread-69054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:50:07.874 [DEBUG] [Thread-69054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] client lang: <none>
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] server lang: <none>
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] kex follows: False
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] Compression: none
2025-12-12T11:50:07.875 [DEBUG] [Thread-69054] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:50:07.893 [DEBUG] [Thread-69054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:50:07.893 [DEBUG] [Thread-69054] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:50:07.893 [DEBUG] [Thread-69054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:50:07.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:50:07.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:50:07.895 [DEBUG] [Thread-69054] [transport.py] [_log()] userauth is OK
2025-12-12T11:50:07.895 [DEBUG] [Thread-69054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:50:07.896 [DEBUG] [Thread-69054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:50:07.896 [DEBUG] [Thread-69054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:50:07.896 [DEBUG] [Thread-69054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:50:07.911 [INFO] [Thread-69054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:50:07.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:50:10.765 [DEBUG] [Thread-69054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:50:10.765 [DEBUG] [Thread-69054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:50:10.765 [DEBUG] [Thread-69054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:50:10.806 [DEBUG] [Thread-69054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:50:10.806 [DEBUG] [Thread-69054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:50:10.809 [DEBUG] [Thread-69054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:50:10.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:50:10.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:50:10.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:50:10.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:50:10.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:50:10.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:50:10.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:50:10.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:50:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:50:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.409471 -999.00  +18.20  33.38     37   +3.50 1 2 2 1 1   888    0 15.54 47.19 ----- 32.7 33.4 345.1 50.2 23.2 -17.4 22.6 -17.7 22.2 -16.8 22.6 -17.0
2025-12-12T11:50:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:50:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:50:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.409471
2025-12-12T11:50:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:50:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:50:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:50:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:50:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:50:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:46:25', tmtdew=16.92, humidity=32.3, cloud=0.0, wind=32.43, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:49:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:50:10.837 [DEBUG] [Thread-69054] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:50:10.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:50:10.934 [DEBUG] [Thread-69057] [transport.py] [_log()] starting thread (client mode): 0xf818ae00
2025-12-12T11:50:10.934 [DEBUG] [Thread-69057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:50:10.949 [DEBUG] [Thread-69057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:50:10.949 [INFO] [Thread-69057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:10.957 [DEBUG] [Thread-69057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] client lang: <none>
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] server lang: <none>
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] kex follows: False
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] Compression: none
2025-12-12T11:50:10.958 [DEBUG] [Thread-69057] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:50:11.014 [DEBUG] [Thread-69057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:50:11.014 [DEBUG] [Thread-69057] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:50:11.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:50:11.015 [DEBUG] [Thread-69057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:50:11.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:50:11.076 [DEBUG] [Thread-69057] [transport.py] [_log()] userauth is OK
2025-12-12T11:50:11.076 [DEBUG] [Thread-69057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:50:11.076 [DEBUG] [Thread-69057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:50:11.076 [DEBUG] [Thread-69057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:50:11.076 [DEBUG] [Thread-69057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:50:11.095 [INFO] [Thread-69057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:50:11.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:50:11.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:50:11.952 [DEBUG] [Thread-69057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:50:11.952 [DEBUG] [Thread-69057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:50:12.000 [DEBUG] [Thread-69057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:50:12.000 [DEBUG] [Thread-69057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:50:12.009 [DEBUG] [Thread-69057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:50:12.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:50:12.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:50:12.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:50:12.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:50:12.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:50:12.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:50:12.043 [DEBUG] [Thread-69057] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:50:16.642 [DEBUG] [Thread-69059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:30.184 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:30.185 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:31.685 [DEBUG] [Thread-69060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:39.930 [DEBUG] [Thread-69061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:50:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:50:42.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:50:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:50:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 46, 25), 16.92, 32.3, 0.0, 32.43, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:50:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:46:25
2025-12-12T11:50:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:50:43.020 [DEBUG] [Thread-69062] [transport.py] [_log()] starting thread (client mode): 0xf2d0e4a0
2025-12-12T11:50:43.020 [DEBUG] [Thread-69062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:50:43.039 [DEBUG] [Thread-69062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:50:43.039 [INFO] [Thread-69062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] client lang: <none>
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] server lang: <none>
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] kex follows: False
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] Compression: none
2025-12-12T11:50:43.043 [DEBUG] [Thread-69062] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:50:43.057 [DEBUG] [Thread-69062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:50:43.057 [DEBUG] [Thread-69062] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:50:43.057 [DEBUG] [Thread-69062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:50:43.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:50:43.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:50:43.058 [DEBUG] [Thread-69062] [transport.py] [_log()] userauth is OK
2025-12-12T11:50:43.066 [DEBUG] [Thread-69062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:50:43.066 [DEBUG] [Thread-69062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:50:43.066 [DEBUG] [Thread-69062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:50:43.066 [DEBUG] [Thread-69062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:50:43.081 [INFO] [Thread-69062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:50:43.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:50:43.886 [DEBUG] [Thread-69062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:50:43.886 [DEBUG] [Thread-69062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:50:43.886 [DEBUG] [Thread-69062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:50:43.928 [DEBUG] [Thread-69062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:50:43.928 [DEBUG] [Thread-69062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:50:43.930 [DEBUG] [Thread-69062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:50:43.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:50:43.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:50:43.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:50:43.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:50:43.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:50:43.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:50:43.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.409818 -999.00  +18.20  23.98     37   +3.40 1 2 1 1 1   888    0 15.70 45.68 ----- 31.9 24.0 8.4 47.0 23.4 -18.0 22.7 -19.6 22.3 -16.1 22.9 -16.7
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.409818
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:50:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:46:25', tmtdew=16.92, humidity=32.3, cloud=0.0, wind=32.43, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:50:08.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:50:43.950 [DEBUG] [Thread-69062] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:50:44.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:50:44.035 [DEBUG] [Thread-69065] [transport.py] [_log()] starting thread (client mode): 0xf818b5b0
2025-12-12T11:50:44.035 [DEBUG] [Thread-69065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:50:44.050 [DEBUG] [Thread-69065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:50:44.050 [INFO] [Thread-69065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] client lang: <none>
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] server lang: <none>
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] kex follows: False
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] Compression: none
2025-12-12T11:50:44.058 [DEBUG] [Thread-69065] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:50:44.112 [DEBUG] [Thread-69065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:50:44.112 [DEBUG] [Thread-69065] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:50:44.113 [DEBUG] [Thread-69065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:50:44.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:50:44.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:50:44.170 [DEBUG] [Thread-69065] [transport.py] [_log()] userauth is OK
2025-12-12T11:50:44.170 [DEBUG] [Thread-69065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:50:44.170 [DEBUG] [Thread-69065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:50:44.170 [DEBUG] [Thread-69065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:50:44.170 [DEBUG] [Thread-69065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:50:44.184 [INFO] [Thread-69065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:50:44.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:50:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:50:45.072 [DEBUG] [Thread-69065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:50:45.072 [DEBUG] [Thread-69065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:50:45.120 [DEBUG] [Thread-69065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:50:45.120 [DEBUG] [Thread-69065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:50:45.129 [DEBUG] [Thread-69065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:50:45.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:50:45.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:50:45.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:50:45.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:50:45.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:50:45.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:50:45.164 [DEBUG] [Thread-69065] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:50:46.714 [DEBUG] [Thread-69067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:01.769 [DEBUG] [Thread-69068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:15.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:51:15.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:51:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:51:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 46, 25), 16.92, 32.3, 0.0, 32.43, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:51:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:46:25
2025-12-12T11:51:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:51:16.084 [DEBUG] [Thread-69069] [transport.py] [_log()] starting thread (client mode): 0xf2d0ead0
2025-12-12T11:51:16.084 [DEBUG] [Thread-69069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:51:16.104 [DEBUG] [Thread-69069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:51:16.104 [INFO] [Thread-69069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:51:16.107 [DEBUG] [Thread-69069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] client lang: <none>
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] server lang: <none>
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] kex follows: False
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:51:16.108 [DEBUG] [Thread-69069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:51:16.109 [DEBUG] [Thread-69069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:51:16.109 [DEBUG] [Thread-69069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:51:16.109 [DEBUG] [Thread-69069] [transport.py] [_log()] Compression: none
2025-12-12T11:51:16.109 [DEBUG] [Thread-69069] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:51:16.126 [DEBUG] [Thread-69069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:51:16.127 [DEBUG] [Thread-69069] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:51:16.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:51:16.128 [DEBUG] [Thread-69069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:51:16.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:51:16.130 [DEBUG] [Thread-69069] [transport.py] [_log()] userauth is OK
2025-12-12T11:51:16.130 [DEBUG] [Thread-69069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:51:16.130 [DEBUG] [Thread-69069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:51:16.130 [DEBUG] [Thread-69069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:51:16.130 [DEBUG] [Thread-69069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:51:16.154 [INFO] [Thread-69069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:51:16.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:51:16.777 [DEBUG] [Thread-69069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:51:16.777 [DEBUG] [Thread-69069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:51:16.777 [DEBUG] [Thread-69069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:51:16.799 [DEBUG] [Thread-69071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:16.818 [DEBUG] [Thread-69069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:51:16.818 [DEBUG] [Thread-69069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:51:16.821 [DEBUG] [Thread-69069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:51:16.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:51:16.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:51:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:51:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:51:16.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:51:16.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:51:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:51:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:51:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:51:16.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.410166 -999.00  +18.60  35.29     36   +3.30 1 2 2 1 1   888    0 15.65 42.45 ----- 29.8 35.3 345.0 48.0 23.5 -18.0 22.7 -19.0 22.3 -17.0 22.8 -17.2
2025-12-12T11:51:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:51:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:51:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.410166
2025-12-12T11:51:16.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:51:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:51:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:51:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:51:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:51:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:46:25', tmtdew=16.92, humidity=32.3, cloud=0.0, wind=32.43, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:50:38.342', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:51:16.845 [DEBUG] [Thread-69069] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:51:16.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:51:16.941 [DEBUG] [Thread-69073] [transport.py] [_log()] starting thread (client mode): 0xf2d0e6e0
2025-12-12T11:51:16.941 [DEBUG] [Thread-69073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:51:16.958 [DEBUG] [Thread-69073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:51:16.958 [INFO] [Thread-69073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:51:16.965 [DEBUG] [Thread-69073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:51:16.965 [DEBUG] [Thread-69073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:51:16.965 [DEBUG] [Thread-69073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] client lang: <none>
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] server lang: <none>
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] kex follows: False
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:51:16.966 [DEBUG] [Thread-69073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:51:16.967 [DEBUG] [Thread-69073] [transport.py] [_log()] Compression: none
2025-12-12T11:51:16.967 [DEBUG] [Thread-69073] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:51:17.022 [DEBUG] [Thread-69073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:51:17.023 [DEBUG] [Thread-69073] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:51:17.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:51:17.024 [DEBUG] [Thread-69073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:51:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:51:17.078 [DEBUG] [Thread-69073] [transport.py] [_log()] userauth is OK
2025-12-12T11:51:17.079 [DEBUG] [Thread-69073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:51:17.079 [DEBUG] [Thread-69073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:51:17.079 [DEBUG] [Thread-69073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:51:17.079 [DEBUG] [Thread-69073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:51:17.098 [INFO] [Thread-69073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:51:17.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:51:17.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:51:17.978 [DEBUG] [Thread-69073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:51:17.978 [DEBUG] [Thread-69073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:51:18.026 [DEBUG] [Thread-69073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:51:18.026 [DEBUG] [Thread-69073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:51:18.034 [DEBUG] [Thread-69073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:51:18.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:51:18.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:51:18.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:51:18.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:51:18.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:51:18.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:51:18.065 [DEBUG] [Thread-69073] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:51:30.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:30.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:31.830 [DEBUG] [Thread-69075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:39.993 [DEBUG] [Thread-69076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:46.863 [DEBUG] [Thread-69077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:51:48.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:51:48.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:51:48.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:51:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 49, 13), 17.14, 31.74, 0.0, 42.34, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:51:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:49:13
2025-12-12T11:51:48.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:51:48.999 [DEBUG] [Thread-69078] [transport.py] [_log()] starting thread (client mode): 0xf8189210
2025-12-12T11:51:48.999 [DEBUG] [Thread-69078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:51:49.020 [DEBUG] [Thread-69078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:51:49.021 [INFO] [Thread-69078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:51:49.024 [DEBUG] [Thread-69078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:51:49.024 [DEBUG] [Thread-69078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:51:49.024 [DEBUG] [Thread-69078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:51:49.024 [DEBUG] [Thread-69078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:49.024 [DEBUG] [Thread-69078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:49.024 [DEBUG] [Thread-69078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] client lang: <none>
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] server lang: <none>
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] kex follows: False
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] Compression: none
2025-12-12T11:51:49.025 [DEBUG] [Thread-69078] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:51:49.045 [DEBUG] [Thread-69078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:51:49.046 [DEBUG] [Thread-69078] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:51:49.046 [DEBUG] [Thread-69078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:51:49.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:51:49.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:51:49.048 [DEBUG] [Thread-69078] [transport.py] [_log()] userauth is OK
2025-12-12T11:51:49.048 [DEBUG] [Thread-69078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:51:49.049 [DEBUG] [Thread-69078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:51:49.049 [DEBUG] [Thread-69078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:51:49.049 [DEBUG] [Thread-69078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:51:49.080 [INFO] [Thread-69078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:51:49.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:51:49.856 [DEBUG] [Thread-69078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:51:49.857 [DEBUG] [Thread-69078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:51:49.857 [DEBUG] [Thread-69078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:51:49.898 [DEBUG] [Thread-69078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:51:49.898 [DEBUG] [Thread-69078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:51:49.901 [DEBUG] [Thread-69078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:51:49.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:51:49.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:51:49.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:51:49.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:51:49.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:51:49.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:51:49.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:51:49.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:51:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:51:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.410513 -999.00  +18.50  28.40     35   +3.10 1 2 1 1 1   888    0 16.06 43.88 ----- 34.9 28.4 354.0 44.5 23.6 -19.1 22.8 -19.6 22.4 -17.6 22.9 -17.7
2025-12-12T11:51:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:51:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:51:49.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.410513
2025-12-12T11:51:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:51:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:51:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:51:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:51:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:51:49.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:49:13', tmtdew=17.14, humidity=31.74, cloud=0.0, wind=42.34, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:51:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:51:49.927 [DEBUG] [Thread-69078] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:51:50.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:51:50.025 [DEBUG] [Thread-69081] [transport.py] [_log()] starting thread (client mode): 0xf818be50
2025-12-12T11:51:50.025 [DEBUG] [Thread-69081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:51:50.039 [DEBUG] [Thread-69081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:51:50.039 [INFO] [Thread-69081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:50.047 [DEBUG] [Thread-69081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] client lang: <none>
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] server lang: <none>
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] kex follows: False
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] Compression: none
2025-12-12T11:51:50.048 [DEBUG] [Thread-69081] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:51:50.106 [DEBUG] [Thread-69081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:51:50.107 [DEBUG] [Thread-69081] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:51:50.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:51:50.108 [DEBUG] [Thread-69081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:51:50.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:51:50.162 [DEBUG] [Thread-69081] [transport.py] [_log()] userauth is OK
2025-12-12T11:51:50.162 [DEBUG] [Thread-69081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:51:50.163 [DEBUG] [Thread-69081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:51:50.163 [DEBUG] [Thread-69081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:51:50.163 [DEBUG] [Thread-69081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:51:50.181 [INFO] [Thread-69081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:51:50.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:51:50.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:51:51.011 [DEBUG] [Thread-69081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:51:51.011 [DEBUG] [Thread-69081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:51:51.059 [DEBUG] [Thread-69081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:51:51.059 [DEBUG] [Thread-69081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:51:51.068 [DEBUG] [Thread-69081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:51:51.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:51:51.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:51:51.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:51:51.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:51:51.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:51:51.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:51:51.101 [DEBUG] [Thread-69081] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:52:01.889 [DEBUG] [Thread-69083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:16.924 [DEBUG] [Thread-69084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:21.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:52:21.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:52:21.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:52:21.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 49, 13), 17.14, 31.74, 0.0, 42.34, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:52:21.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:49:13
2025-12-12T11:52:21.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:52:22.039 [DEBUG] [Thread-69085] [transport.py] [_log()] starting thread (client mode): 0xf57b6740
2025-12-12T11:52:22.039 [DEBUG] [Thread-69085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:52:22.060 [DEBUG] [Thread-69085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:52:22.060 [INFO] [Thread-69085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:52:22.063 [DEBUG] [Thread-69085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] client lang: <none>
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] server lang: <none>
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] kex follows: False
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:52:22.064 [DEBUG] [Thread-69085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:52:22.065 [DEBUG] [Thread-69085] [transport.py] [_log()] Compression: none
2025-12-12T11:52:22.065 [DEBUG] [Thread-69085] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:52:22.081 [DEBUG] [Thread-69085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:52:22.082 [DEBUG] [Thread-69085] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:52:22.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:52:22.083 [DEBUG] [Thread-69085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:52:22.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:52:22.085 [DEBUG] [Thread-69085] [transport.py] [_log()] userauth is OK
2025-12-12T11:52:22.085 [DEBUG] [Thread-69085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:52:22.085 [DEBUG] [Thread-69085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:52:22.085 [DEBUG] [Thread-69085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:52:22.085 [DEBUG] [Thread-69085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:52:22.109 [INFO] [Thread-69085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:52:22.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:52:22.753 [DEBUG] [Thread-69085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:52:22.753 [DEBUG] [Thread-69085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:52:22.754 [DEBUG] [Thread-69085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:52:22.794 [DEBUG] [Thread-69085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:52:22.794 [DEBUG] [Thread-69085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:52:22.796 [DEBUG] [Thread-69085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:52:22.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:52:22.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:52:22.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:52:22.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:52:22.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:52:22.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:52:22.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:52:22.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:52:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:52:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.410860 -999.00  +19.00  32.29     34   +3.20 1 2 2 1 1   888    0 16.13 46.63 ----- 39.5 32.3 339.1 43.3 23.6 -20.5 22.9 -20.0 22.5 -18.7 22.9 -20.0
2025-12-12T11:52:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:52:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:52:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.410860
2025-12-12T11:52:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:52:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:52:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:52:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:52:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:52:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:49:13', tmtdew=17.14, humidity=31.74, cloud=0.0, wind=42.34, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:51:38.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:52:22.819 [DEBUG] [Thread-69085] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:52:22.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:52:22.921 [DEBUG] [Thread-69088] [transport.py] [_log()] starting thread (client mode): 0xf81c1d80
2025-12-12T11:52:22.922 [DEBUG] [Thread-69088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:52:22.938 [DEBUG] [Thread-69088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:52:22.939 [INFO] [Thread-69088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:52:22.946 [DEBUG] [Thread-69088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:52:22.946 [DEBUG] [Thread-69088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:52:22.946 [DEBUG] [Thread-69088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:52:22.946 [DEBUG] [Thread-69088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:22.946 [DEBUG] [Thread-69088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:22.946 [DEBUG] [Thread-69088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] client lang: <none>
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] server lang: <none>
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] kex follows: False
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] Compression: none
2025-12-12T11:52:22.947 [DEBUG] [Thread-69088] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:52:23.006 [DEBUG] [Thread-69088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:52:23.006 [DEBUG] [Thread-69088] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:52:23.007 [DEBUG] [Thread-69088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:52:23.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:52:23.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:52:23.062 [DEBUG] [Thread-69088] [transport.py] [_log()] userauth is OK
2025-12-12T11:52:23.063 [DEBUG] [Thread-69088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:52:23.063 [DEBUG] [Thread-69088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:52:23.063 [DEBUG] [Thread-69088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:52:23.063 [DEBUG] [Thread-69088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:52:23.081 [INFO] [Thread-69088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:52:23.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:52:23.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:52:23.948 [DEBUG] [Thread-69088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:52:23.948 [DEBUG] [Thread-69088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:52:23.996 [DEBUG] [Thread-69088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:52:23.996 [DEBUG] [Thread-69088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:52:24.005 [DEBUG] [Thread-69088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:52:24.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:52:24.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:52:24.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:52:24.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:52:24.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:52:24.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:52:24.040 [DEBUG] [Thread-69088] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:52:30.468 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:30.469 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:31.956 [DEBUG] [Thread-69090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:40.043 [DEBUG] [Thread-69091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:46.996 [DEBUG] [Thread-69092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:52:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:52:54.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:52:54.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:52:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 49, 13), 17.14, 31.74, 0.0, 42.34, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:52:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:49:13
2025-12-12T11:52:54.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:52:54.992 [DEBUG] [Thread-69093] [transport.py] [_log()] starting thread (client mode): 0xf81c16c0
2025-12-12T11:52:54.992 [DEBUG] [Thread-69093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:52:55.012 [DEBUG] [Thread-69093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:52:55.013 [INFO] [Thread-69093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:52:55.016 [DEBUG] [Thread-69093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] client lang: <none>
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] server lang: <none>
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] kex follows: False
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] Compression: none
2025-12-12T11:52:55.017 [DEBUG] [Thread-69093] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:52:55.036 [DEBUG] [Thread-69093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:52:55.037 [DEBUG] [Thread-69093] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:52:55.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:52:55.038 [DEBUG] [Thread-69093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:52:55.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:52:55.040 [DEBUG] [Thread-69093] [transport.py] [_log()] userauth is OK
2025-12-12T11:52:55.040 [DEBUG] [Thread-69093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:52:55.040 [DEBUG] [Thread-69093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:52:55.040 [DEBUG] [Thread-69093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:52:55.040 [DEBUG] [Thread-69093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:52:55.063 [INFO] [Thread-69093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:52:55.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:52:55.820 [DEBUG] [Thread-69093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:52:55.820 [DEBUG] [Thread-69093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:52:55.820 [DEBUG] [Thread-69093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:52:55.861 [DEBUG] [Thread-69093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:52:55.861 [DEBUG] [Thread-69093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:52:55.863 [DEBUG] [Thread-69093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:52:55.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:52:55.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:52:55.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:52:55.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:52:55.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:52:55.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:52:55.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:52:55.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:52:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:52:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.411207 -999.00  +18.90  18.53     34   +3.10 1 2 1 1 1   888    0 16.32 53.09 ----- 30.8 18.5 11.4 41.7 23.6 -22.9 22.9 -20.2 22.5 -20.0 23.0 -21.4
2025-12-12T11:52:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:52:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:52:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.411207
2025-12-12T11:52:55.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:52:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:52:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:52:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:52:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:52:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:49:13', tmtdew=17.14, humidity=31.74, cloud=0.0, wind=42.34, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:52:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:52:55.890 [DEBUG] [Thread-69093] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:52:55.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:52:55.988 [DEBUG] [Thread-69096] [transport.py] [_log()] starting thread (client mode): 0xf81c2e90
2025-12-12T11:52:55.989 [DEBUG] [Thread-69096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:52:56.004 [DEBUG] [Thread-69096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:52:56.004 [INFO] [Thread-69096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:52:56.011 [DEBUG] [Thread-69096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:52:56.011 [DEBUG] [Thread-69096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] client lang: <none>
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] server lang: <none>
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] kex follows: False
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] Compression: none
2025-12-12T11:52:56.012 [DEBUG] [Thread-69096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:52:56.071 [DEBUG] [Thread-69096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:52:56.071 [DEBUG] [Thread-69096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:52:56.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:52:56.072 [DEBUG] [Thread-69096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:52:56.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:52:56.127 [DEBUG] [Thread-69096] [transport.py] [_log()] userauth is OK
2025-12-12T11:52:56.127 [DEBUG] [Thread-69096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:52:56.127 [DEBUG] [Thread-69096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:52:56.127 [DEBUG] [Thread-69096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:52:56.127 [DEBUG] [Thread-69096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:52:56.147 [INFO] [Thread-69096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:52:56.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:52:56.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:52:57.012 [DEBUG] [Thread-69096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:52:57.012 [DEBUG] [Thread-69096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:52:57.060 [DEBUG] [Thread-69096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:52:57.060 [DEBUG] [Thread-69096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:52:57.069 [DEBUG] [Thread-69096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:52:57.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:52:57.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:52:57.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:52:57.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:52:57.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:52:57.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:52:57.104 [DEBUG] [Thread-69096] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:53:02.030 [DEBUG] [Thread-69098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:53:17.068 [DEBUG] [Thread-69099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:53:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:53:27.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:53:27.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:53:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 49, 13), 17.14, 31.74, 0.0, 42.34, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:53:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:49:13
2025-12-12T11:53:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:53:28.024 [DEBUG] [Thread-69100] [transport.py] [_log()] starting thread (client mode): 0xf818be20
2025-12-12T11:53:28.024 [DEBUG] [Thread-69100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:53:28.047 [DEBUG] [Thread-69100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:53:28.047 [INFO] [Thread-69100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] client lang: <none>
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] server lang: <none>
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] kex follows: False
2025-12-12T11:53:28.051 [DEBUG] [Thread-69100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:53:28.052 [DEBUG] [Thread-69100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:53:28.052 [DEBUG] [Thread-69100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:53:28.052 [DEBUG] [Thread-69100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:53:28.052 [DEBUG] [Thread-69100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:53:28.052 [DEBUG] [Thread-69100] [transport.py] [_log()] Compression: none
2025-12-12T11:53:28.052 [DEBUG] [Thread-69100] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:53:28.071 [DEBUG] [Thread-69100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:53:28.071 [DEBUG] [Thread-69100] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:53:28.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:53:28.072 [DEBUG] [Thread-69100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:53:28.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:53:28.074 [DEBUG] [Thread-69100] [transport.py] [_log()] userauth is OK
2025-12-12T11:53:28.074 [DEBUG] [Thread-69100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:53:28.074 [DEBUG] [Thread-69100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:53:28.074 [DEBUG] [Thread-69100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:53:28.074 [DEBUG] [Thread-69100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:53:28.091 [INFO] [Thread-69100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:53:28.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:53:28.741 [DEBUG] [Thread-69100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:53:28.742 [DEBUG] [Thread-69100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:53:28.742 [DEBUG] [Thread-69100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:53:28.785 [DEBUG] [Thread-69100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:53:28.786 [DEBUG] [Thread-69100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:53:28.788 [DEBUG] [Thread-69100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:53:28.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:53:28.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:53:28.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:53:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:53:28.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:53:28.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:53:28.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:53:28.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:53:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:53:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.411554 -999.00  +19.00  39.12     35   +3.30 1 2 2 1 1   888    0 16.30 59.70 ----- 40.7 39.1 335.0 47.7 23.6 -21.2 22.9 -20.6 22.4 -20.0 22.9 -20.2
2025-12-12T11:53:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:53:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:53:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.411554
2025-12-12T11:53:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:53:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:53:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:53:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:53:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:53:28.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:49:13', tmtdew=17.14, humidity=31.74, cloud=0.0, wind=42.34, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:52:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:53:28.814 [DEBUG] [Thread-69100] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:53:28.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:53:28.909 [DEBUG] [Thread-69103] [transport.py] [_log()] starting thread (client mode): 0xf57a97e0
2025-12-12T11:53:28.910 [DEBUG] [Thread-69103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:53:28.928 [DEBUG] [Thread-69103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:53:28.928 [INFO] [Thread-69103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:53:28.936 [DEBUG] [Thread-69103] [transport.py] [_log()] client lang: <none>
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] server lang: <none>
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] kex follows: False
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] Compression: none
2025-12-12T11:53:28.937 [DEBUG] [Thread-69103] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:53:28.998 [DEBUG] [Thread-69103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:53:28.999 [DEBUG] [Thread-69103] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:53:28.999 [DEBUG] [Thread-69103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:53:29.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:53:29.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:53:29.055 [DEBUG] [Thread-69103] [transport.py] [_log()] userauth is OK
2025-12-12T11:53:29.055 [DEBUG] [Thread-69103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:53:29.055 [DEBUG] [Thread-69103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:53:29.056 [DEBUG] [Thread-69103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:53:29.056 [DEBUG] [Thread-69103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:53:29.074 [INFO] [Thread-69103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:53:29.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:53:29.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:53:29.975 [DEBUG] [Thread-69103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:53:29.975 [DEBUG] [Thread-69103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:53:30.023 [DEBUG] [Thread-69103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:53:30.023 [DEBUG] [Thread-69103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:53:30.032 [DEBUG] [Thread-69103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:53:30.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:53:30.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:53:30.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:53:30.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:53:30.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:53:30.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:53:30.071 [DEBUG] [Thread-69103] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:53:30.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:53:30.611 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:53:32.095 [DEBUG] [Thread-69105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:53:40.106 [DEBUG] [Thread-69106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:53:47.131 [DEBUG] [Thread-69107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:54:00.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:54:00.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:54:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 49, 13), 17.14, 31.74, 0.0, 42.34, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:54:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:49:13
2025-12-12T11:54:00.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:54:00.993 [DEBUG] [Thread-69108] [transport.py] [_log()] starting thread (client mode): 0xf818aa40
2025-12-12T11:54:00.993 [DEBUG] [Thread-69108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:54:01.014 [DEBUG] [Thread-69108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:54:01.014 [INFO] [Thread-69108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:01.017 [DEBUG] [Thread-69108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] client lang: <none>
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] server lang: <none>
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] kex follows: False
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] Compression: none
2025-12-12T11:54:01.018 [DEBUG] [Thread-69108] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:54:01.035 [DEBUG] [Thread-69108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:54:01.035 [DEBUG] [Thread-69108] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:54:01.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:54:01.036 [DEBUG] [Thread-69108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:54:01.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:54:01.038 [DEBUG] [Thread-69108] [transport.py] [_log()] userauth is OK
2025-12-12T11:54:01.038 [DEBUG] [Thread-69108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:54:01.039 [DEBUG] [Thread-69108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:54:01.039 [DEBUG] [Thread-69108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:54:01.039 [DEBUG] [Thread-69108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:54:01.055 [INFO] [Thread-69108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:54:01.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:54:01.872 [DEBUG] [Thread-69108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:54:01.872 [DEBUG] [Thread-69108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:54:01.873 [DEBUG] [Thread-69108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:54:01.913 [DEBUG] [Thread-69108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:54:01.913 [DEBUG] [Thread-69108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:54:01.916 [DEBUG] [Thread-69108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:54:01.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:54:01.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:54:01.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:54:01.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:54:01.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:54:01.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:54:01.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:54:01.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:54:01.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:54:01.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.412249 -999.00  +19.60  30.56     34   +3.60 1 2 2 1 1   888    0 16.52 66.29 ----- 36.4 30.6 335.0 46.8 23.6 -20.8 23.0 -20.3 22.4 -20.0 22.9 -20.0
2025-12-12T11:54:01.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:54:01.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:54:01.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.412249
2025-12-12T11:54:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:54:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:54:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:54:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:54:01.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:54:01.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:49:13', tmtdew=17.14, humidity=31.74, cloud=0.0, wind=42.34, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:53:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:54:01.939 [DEBUG] [Thread-69108] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:54:02.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:54:02.035 [DEBUG] [Thread-69111] [transport.py] [_log()] starting thread (client mode): 0xf81c2d40
2025-12-12T11:54:02.035 [DEBUG] [Thread-69111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:54:02.049 [DEBUG] [Thread-69111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:54:02.049 [INFO] [Thread-69111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:54:02.057 [DEBUG] [Thread-69111] [transport.py] [_log()] client lang: <none>
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] server lang: <none>
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] kex follows: False
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] Compression: none
2025-12-12T11:54:02.058 [DEBUG] [Thread-69111] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:54:02.114 [DEBUG] [Thread-69111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:54:02.115 [DEBUG] [Thread-69111] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:54:02.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:54:02.115 [DEBUG] [Thread-69111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:54:02.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:54:02.159 [DEBUG] [Thread-69113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:02.171 [DEBUG] [Thread-69111] [transport.py] [_log()] userauth is OK
2025-12-12T11:54:02.171 [DEBUG] [Thread-69111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:54:02.171 [DEBUG] [Thread-69111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:54:02.171 [DEBUG] [Thread-69111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:54:02.171 [DEBUG] [Thread-69111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:54:02.193 [INFO] [Thread-69111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:54:02.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:54:02.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:54:03.068 [DEBUG] [Thread-69111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:54:03.068 [DEBUG] [Thread-69111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:54:03.115 [DEBUG] [Thread-69111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:54:03.116 [DEBUG] [Thread-69111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:54:03.125 [DEBUG] [Thread-69111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:54:03.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:54:03.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:54:03.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:54:03.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:54:03.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:54:03.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:54:03.158 [DEBUG] [Thread-69111] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:54:17.201 [DEBUG] [Thread-69114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:30.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:30.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:32.229 [DEBUG] [Thread-69115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:33.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:54:33.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:54:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:54:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 52, 1), 19.07, 27.99, 0.0, 44.7, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:54:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:52:01
2025-12-12T11:54:33.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:54:34.149 [DEBUG] [Thread-69116] [transport.py] [_log()] starting thread (client mode): 0xf81c0520
2025-12-12T11:54:34.149 [DEBUG] [Thread-69116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:54:34.169 [DEBUG] [Thread-69116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:54:34.169 [INFO] [Thread-69116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:54:34.172 [DEBUG] [Thread-69116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:54:34.172 [DEBUG] [Thread-69116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:54:34.172 [DEBUG] [Thread-69116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] client lang: <none>
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] server lang: <none>
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] kex follows: False
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] Compression: none
2025-12-12T11:54:34.173 [DEBUG] [Thread-69116] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:54:34.180 [DEBUG] [Thread-69116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:54:34.181 [DEBUG] [Thread-69116] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:54:34.181 [DEBUG] [Thread-69116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:54:34.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:54:34.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:54:34.182 [DEBUG] [Thread-69116] [transport.py] [_log()] userauth is OK
2025-12-12T11:54:34.182 [DEBUG] [Thread-69116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:54:34.182 [DEBUG] [Thread-69116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:54:34.182 [DEBUG] [Thread-69116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:54:34.182 [DEBUG] [Thread-69116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:54:34.202 [INFO] [Thread-69116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:54:34.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:54:34.880 [DEBUG] [Thread-69116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:54:34.880 [DEBUG] [Thread-69116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:54:34.880 [DEBUG] [Thread-69116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:54:34.922 [DEBUG] [Thread-69116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:54:34.922 [DEBUG] [Thread-69116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:54:34.924 [DEBUG] [Thread-69116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:54:34.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:54:34.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:54:34.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:54:34.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:54:34.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:54:34.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:54:34.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.412596 -999.00  +19.90  32.01     34   +3.70 1 2 2 1 1   888    0 17.06 71.75 ----- 32.2 32.0 326.4 49.6 23.9 -18.8 23.3 -18.4 22.6 -18.1 23.3 -17.8
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.412596
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:54:34.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:52:01', tmtdew=19.07, humidity=27.99, cloud=0.0, wind=44.7, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:54:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:54:34.945 [DEBUG] [Thread-69116] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:54:35.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:54:35.029 [DEBUG] [Thread-69119] [transport.py] [_log()] starting thread (client mode): 0xf8189db0
2025-12-12T11:54:35.029 [DEBUG] [Thread-69119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:54:35.044 [DEBUG] [Thread-69119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:54:35.044 [INFO] [Thread-69119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] client lang: <none>
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] server lang: <none>
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] kex follows: False
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:54:35.051 [DEBUG] [Thread-69119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:54:35.052 [DEBUG] [Thread-69119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:54:35.052 [DEBUG] [Thread-69119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:54:35.052 [DEBUG] [Thread-69119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:54:35.052 [DEBUG] [Thread-69119] [transport.py] [_log()] Compression: none
2025-12-12T11:54:35.052 [DEBUG] [Thread-69119] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:54:35.109 [DEBUG] [Thread-69119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:54:35.109 [DEBUG] [Thread-69119] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:54:35.109 [DEBUG] [Thread-69119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:54:35.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:54:35.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:54:35.167 [DEBUG] [Thread-69119] [transport.py] [_log()] userauth is OK
2025-12-12T11:54:35.167 [DEBUG] [Thread-69119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:54:35.167 [DEBUG] [Thread-69119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:54:35.167 [DEBUG] [Thread-69119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:54:35.167 [DEBUG] [Thread-69119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:54:35.181 [INFO] [Thread-69119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:54:35.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:54:35.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:54:36.006 [DEBUG] [Thread-69119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:54:36.006 [DEBUG] [Thread-69119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:54:36.054 [DEBUG] [Thread-69119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:54:36.054 [DEBUG] [Thread-69119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:54:36.062 [DEBUG] [Thread-69119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:54:36.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:54:36.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:54:36.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:54:36.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:54:36.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:54:36.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:54:36.094 [DEBUG] [Thread-69119] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:54:40.158 [DEBUG] [Thread-69121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:54:47.259 [DEBUG] [Thread-69122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:02.302 [DEBUG] [Thread-69123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:55:06.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:55:06.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:55:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 52, 1), 19.07, 27.99, 0.0, 44.7, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:55:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:52:01
2025-12-12T11:55:06.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:55:07.057 [DEBUG] [Thread-69124] [transport.py] [_log()] starting thread (client mode): 0xf81c1360
2025-12-12T11:55:07.057 [DEBUG] [Thread-69124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:55:07.078 [DEBUG] [Thread-69124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:55:07.078 [INFO] [Thread-69124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] client lang: <none>
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] server lang: <none>
2025-12-12T11:55:07.081 [DEBUG] [Thread-69124] [transport.py] [_log()] kex follows: False
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] Compression: none
2025-12-12T11:55:07.082 [DEBUG] [Thread-69124] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:55:07.090 [DEBUG] [Thread-69124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:55:07.090 [DEBUG] [Thread-69124] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:55:07.090 [DEBUG] [Thread-69124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:55:07.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:55:07.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:55:07.092 [DEBUG] [Thread-69124] [transport.py] [_log()] userauth is OK
2025-12-12T11:55:07.093 [DEBUG] [Thread-69124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:55:07.093 [DEBUG] [Thread-69124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:55:07.093 [DEBUG] [Thread-69124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:55:07.093 [DEBUG] [Thread-69124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:55:07.117 [INFO] [Thread-69124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:55:07.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:55:08.139 [DEBUG] [Thread-69124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:55:08.139 [DEBUG] [Thread-69124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:55:08.139 [DEBUG] [Thread-69124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:55:08.180 [DEBUG] [Thread-69124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:55:08.180 [DEBUG] [Thread-69124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:55:08.183 [DEBUG] [Thread-69124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:55:08.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:55:08.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:55:08.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:55:08.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:55:08.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:55:08.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:55:08.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:55:08.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:55:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:55:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.412943 -999.00  +20.20  29.48     34   +3.80 1 2 1 1 1   888    0 16.88 79.09 ----- 28.5 29.5 324.9 38.0 24.2 -17.6 23.6 -17.7 22.8 -17.7 23.5 -16.7
2025-12-12T11:55:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:55:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:55:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.412943
2025-12-12T11:55:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:55:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:55:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:55:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:55:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:55:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:52:01', tmtdew=19.07, humidity=27.99, cloud=0.0, wind=44.7, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:54:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:55:08.211 [DEBUG] [Thread-69124] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:55:08.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:55:08.306 [DEBUG] [Thread-69127] [transport.py] [_log()] starting thread (client mode): 0xf81f2620
2025-12-12T11:55:08.306 [DEBUG] [Thread-69127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:55:08.321 [DEBUG] [Thread-69127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:55:08.321 [INFO] [Thread-69127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] client lang: <none>
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] server lang: <none>
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] kex follows: False
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] Compression: none
2025-12-12T11:55:08.329 [DEBUG] [Thread-69127] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:55:08.390 [DEBUG] [Thread-69127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:55:08.391 [DEBUG] [Thread-69127] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:55:08.391 [DEBUG] [Thread-69127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:55:08.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:55:08.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:55:08.448 [DEBUG] [Thread-69127] [transport.py] [_log()] userauth is OK
2025-12-12T11:55:08.448 [DEBUG] [Thread-69127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:55:08.448 [DEBUG] [Thread-69127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:55:08.448 [DEBUG] [Thread-69127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:55:08.448 [DEBUG] [Thread-69127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:55:08.468 [INFO] [Thread-69127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:55:08.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:55:08.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:55:09.345 [DEBUG] [Thread-69127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:55:09.345 [DEBUG] [Thread-69127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:55:09.393 [DEBUG] [Thread-69127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:55:09.393 [DEBUG] [Thread-69127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:55:09.402 [DEBUG] [Thread-69127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:55:09.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:55:09.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:55:09.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:55:09.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:55:09.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:55:09.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:55:09.435 [DEBUG] [Thread-69127] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:55:17.329 [DEBUG] [Thread-69129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:30.894 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:30.895 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:32.376 [DEBUG] [Thread-69130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:39.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:55:39.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:55:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:55:40.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 52, 1), 19.07, 27.99, 0.0, 44.7, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:55:40.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:52:01
2025-12-12T11:55:40.204 [DEBUG] [Thread-69131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:55:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:55:40.382 [DEBUG] [Thread-69132] [transport.py] [_log()] starting thread (client mode): 0xf57aa050
2025-12-12T11:55:40.383 [DEBUG] [Thread-69132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:55:40.403 [DEBUG] [Thread-69132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:55:40.403 [INFO] [Thread-69132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] client lang: <none>
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] server lang: <none>
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] kex follows: False
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] Compression: none
2025-12-12T11:55:40.406 [DEBUG] [Thread-69132] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:55:40.422 [DEBUG] [Thread-69132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:55:40.422 [DEBUG] [Thread-69132] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:55:40.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:55:40.423 [DEBUG] [Thread-69132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:55:40.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:55:40.464 [DEBUG] [Thread-69132] [transport.py] [_log()] userauth is OK
2025-12-12T11:55:40.464 [DEBUG] [Thread-69132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:55:40.464 [DEBUG] [Thread-69132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:55:40.464 [DEBUG] [Thread-69132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:55:40.464 [DEBUG] [Thread-69132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:55:40.488 [INFO] [Thread-69132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:55:40.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:55:41.142 [DEBUG] [Thread-69132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:55:41.143 [DEBUG] [Thread-69132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:55:41.143 [DEBUG] [Thread-69132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:55:41.184 [DEBUG] [Thread-69132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:55:41.184 [DEBUG] [Thread-69132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:55:41.187 [DEBUG] [Thread-69132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:55:41.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:55:41.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:55:41.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:55:41.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:55:41.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:55:41.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:55:41.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:55:41.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:55:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:55:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.413290 -999.00  +20.30  31.08     33   +3.70 1 2 2 1 1   888    0 17.67 91.02 ----- 27.3 31.1 341.8 46.3 24.4 -20.1 23.7 -19.4 23.2 -17.2 23.8 -18.7
2025-12-12T11:55:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:55:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:55:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.413290
2025-12-12T11:55:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:55:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:55:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:55:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:55:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:55:41.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:52:01', tmtdew=19.07, humidity=27.99, cloud=0.0, wind=44.7, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:55:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:55:41.214 [DEBUG] [Thread-69132] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:55:41.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:55:41.311 [DEBUG] [Thread-69135] [transport.py] [_log()] starting thread (client mode): 0xf81c2320
2025-12-12T11:55:41.311 [DEBUG] [Thread-69135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:55:41.325 [DEBUG] [Thread-69135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:55:41.326 [INFO] [Thread-69135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:55:41.333 [DEBUG] [Thread-69135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] client lang: <none>
2025-12-12T11:55:41.334 [DEBUG] [Thread-69135] [transport.py] [_log()] server lang: <none>
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] kex follows: False
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] Compression: none
2025-12-12T11:55:41.335 [DEBUG] [Thread-69135] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:55:41.391 [DEBUG] [Thread-69135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:55:41.392 [DEBUG] [Thread-69135] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:55:41.393 [DEBUG] [Thread-69135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:55:41.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:55:41.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:55:41.447 [DEBUG] [Thread-69135] [transport.py] [_log()] userauth is OK
2025-12-12T11:55:41.447 [DEBUG] [Thread-69135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:55:41.447 [DEBUG] [Thread-69135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:55:41.447 [DEBUG] [Thread-69135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:55:41.448 [DEBUG] [Thread-69135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:55:41.466 [INFO] [Thread-69135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:55:41.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:55:41.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:55:42.320 [DEBUG] [Thread-69135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:55:42.320 [DEBUG] [Thread-69135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:55:42.368 [DEBUG] [Thread-69135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:55:42.368 [DEBUG] [Thread-69135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:55:42.377 [DEBUG] [Thread-69135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:55:42.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:55:42.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:55: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') -> 00000000
2025-12-12T11:55:42.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:55:42.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:55:42.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:55:42.411 [DEBUG] [Thread-69135] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:55:47.407 [DEBUG] [Thread-69137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:02.452 [DEBUG] [Thread-69138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:12.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:56:12.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:56:12.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:56:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 52, 1), 19.07, 27.99, 0.0, 44.7, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:56:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:52:01
2025-12-12T11:56:13.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:56:13.339 [DEBUG] [Thread-69139] [transport.py] [_log()] starting thread (client mode): 0xf2d0fc10
2025-12-12T11:56:13.339 [DEBUG] [Thread-69139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:56:13.358 [DEBUG] [Thread-69139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:56:13.359 [INFO] [Thread-69139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] client lang: <none>
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] server lang: <none>
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] kex follows: False
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] Compression: none
2025-12-12T11:56:13.362 [DEBUG] [Thread-69139] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:56:13.379 [DEBUG] [Thread-69139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:56:13.379 [DEBUG] [Thread-69139] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:56:13.380 [DEBUG] [Thread-69139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:56:13.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:56:13.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:56:13.380 [DEBUG] [Thread-69139] [transport.py] [_log()] userauth is OK
2025-12-12T11:56:13.380 [DEBUG] [Thread-69139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:56:13.380 [DEBUG] [Thread-69139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:56:13.380 [DEBUG] [Thread-69139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:56:13.380 [DEBUG] [Thread-69139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:56:13.390 [INFO] [Thread-69139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:56:13.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:56:14.201 [DEBUG] [Thread-69139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:56:14.201 [DEBUG] [Thread-69139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:56:14.202 [DEBUG] [Thread-69139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:56:14.242 [DEBUG] [Thread-69139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:56:14.242 [DEBUG] [Thread-69139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:56:14.245 [DEBUG] [Thread-69139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:56:14.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:56:14.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:56:14.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:56:14.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:56:14.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:56:14.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:56:14.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:56:14.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:56:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:56:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.413638 -999.00  +20.00  44.16     34   +3.70 1 2 2 1 1   888    0 17.59 91.76 ----- 25.6 44.2 312.6 53.6 24.6 -18.9 23.9 -19.2 23.3 -19.7 23.9 -17.6
2025-12-12T11:56:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:56:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:56:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.413638
2025-12-12T11:56:14.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:56:14.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:56:14.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:56:14.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:56:14.271 [DEBUG] [Thread-69139] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:56:14.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:56:14.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:52:01', tmtdew=19.07, humidity=27.99, cloud=0.0, wind=44.7, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:55:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:56:14.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:56:14.369 [DEBUG] [Thread-69142] [transport.py] [_log()] starting thread (client mode): 0xf57cb1f0
2025-12-12T11:56:14.369 [DEBUG] [Thread-69142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:56:14.384 [DEBUG] [Thread-69142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:56:14.384 [INFO] [Thread-69142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:56:14.391 [DEBUG] [Thread-69142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:56:14.392 [DEBUG] [Thread-69142] [transport.py] [_log()] client lang: <none>
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] server lang: <none>
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] kex follows: False
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] Compression: none
2025-12-12T11:56:14.393 [DEBUG] [Thread-69142] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:56:14.450 [DEBUG] [Thread-69142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:56:14.451 [DEBUG] [Thread-69142] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:56:14.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:56:14.452 [DEBUG] [Thread-69142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:56:14.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:56:14.507 [DEBUG] [Thread-69142] [transport.py] [_log()] userauth is OK
2025-12-12T11:56:14.507 [DEBUG] [Thread-69142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:56:14.508 [DEBUG] [Thread-69142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:56:14.508 [DEBUG] [Thread-69142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:56:14.508 [DEBUG] [Thread-69142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:56:14.526 [INFO] [Thread-69142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:56:14.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:56:14.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:56:15.378 [DEBUG] [Thread-69142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:56:15.378 [DEBUG] [Thread-69142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:56:15.426 [DEBUG] [Thread-69142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:56:15.426 [DEBUG] [Thread-69142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:56:15.435 [DEBUG] [Thread-69142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:56:15.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:56:15.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:56:15.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:56:15.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:56:15.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:56:15.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:56:15.473 [DEBUG] [Thread-69142] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:56:17.483 [DEBUG] [Thread-69144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:31.036 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:31.036 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:32.534 [DEBUG] [Thread-69145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:40.254 [DEBUG] [Thread-69146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:56:45.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:56:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:56:46.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 52, 1), 19.07, 27.99, 0.0, 44.7, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T11:56:46.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:52:01
2025-12-12T11:56:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:56:46.403 [DEBUG] [Thread-69147] [transport.py] [_log()] starting thread (client mode): 0xf81c3c70
2025-12-12T11:56:46.403 [DEBUG] [Thread-69147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:56:46.425 [DEBUG] [Thread-69147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:56:46.425 [INFO] [Thread-69147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:56:46.428 [DEBUG] [Thread-69147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] client lang: <none>
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] server lang: <none>
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] kex follows: False
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] Compression: none
2025-12-12T11:56:46.429 [DEBUG] [Thread-69147] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:56:46.448 [DEBUG] [Thread-69147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:56:46.449 [DEBUG] [Thread-69147] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:56:46.449 [DEBUG] [Thread-69147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:56:46.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:56:46.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:56:46.451 [DEBUG] [Thread-69147] [transport.py] [_log()] userauth is OK
2025-12-12T11:56:46.451 [DEBUG] [Thread-69147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:56:46.452 [DEBUG] [Thread-69147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:56:46.452 [DEBUG] [Thread-69147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:56:46.452 [DEBUG] [Thread-69147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:56:46.485 [INFO] [Thread-69147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:56:46.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:56:47.131 [DEBUG] [Thread-69147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:56:47.132 [DEBUG] [Thread-69147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:56:47.132 [DEBUG] [Thread-69147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:56:47.173 [DEBUG] [Thread-69147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:56:47.173 [DEBUG] [Thread-69147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:56:47.176 [DEBUG] [Thread-69147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:56:47.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:56:47.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:56:47.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:56:47.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:56:47.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:56:47.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:56:47.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:56:47.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:56:47.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:56:47.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.413985 -999.00  +20.40  39.00     33   +4.00 1 2 2 1 1   888    0 17.67 95.82 ----- 31.7 39.0 315.8 45.4 24.8 -19.8 24.0 -20.4 23.3 -17.8 24.1 -18.5
2025-12-12T11:56:47.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:56:47.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:56:47.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.413985
2025-12-12T11:56:47.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:56:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:56:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:56:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:56:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:56:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:52:01', tmtdew=19.07, humidity=27.99, cloud=0.0, wind=44.7, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:56:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:56:47.205 [DEBUG] [Thread-69147] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:56:47.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:56:47.301 [DEBUG] [Thread-69150] [transport.py] [_log()] starting thread (client mode): 0xf81f25f0
2025-12-12T11:56:47.301 [DEBUG] [Thread-69150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:56:47.316 [DEBUG] [Thread-69150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:56:47.316 [INFO] [Thread-69150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:56:47.323 [DEBUG] [Thread-69150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] client lang: <none>
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] server lang: <none>
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] kex follows: False
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:56:47.324 [DEBUG] [Thread-69150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:56:47.325 [DEBUG] [Thread-69150] [transport.py] [_log()] Compression: none
2025-12-12T11:56:47.325 [DEBUG] [Thread-69150] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:56:47.383 [DEBUG] [Thread-69150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:56:47.383 [DEBUG] [Thread-69150] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:56:47.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:56:47.384 [DEBUG] [Thread-69150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:56:47.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:56:47.439 [DEBUG] [Thread-69150] [transport.py] [_log()] userauth is OK
2025-12-12T11:56:47.439 [DEBUG] [Thread-69150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:56:47.440 [DEBUG] [Thread-69150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:56:47.440 [DEBUG] [Thread-69150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:56:47.440 [DEBUG] [Thread-69150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:56:47.459 [INFO] [Thread-69150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:56:47.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:56:47.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:56:47.566 [DEBUG] [Thread-69152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:56:48.283 [DEBUG] [Thread-69150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:56:48.283 [DEBUG] [Thread-69150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:56:48.332 [DEBUG] [Thread-69150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:56:48.332 [DEBUG] [Thread-69150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:56:48.341 [DEBUG] [Thread-69150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:56:48.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:56: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')
2025-12-12T11:56:48.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:56:48.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:56:48.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:56:48.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:56:48.377 [DEBUG] [Thread-69150] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:57:02.609 [DEBUG] [Thread-69153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:17.638 [DEBUG] [Thread-69154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:57:18.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:57:18.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
2025-12-12T11:57:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 54, 49), 18.83, 28.59, 0.0, 51.05, 20.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:57:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:54:49
2025-12-12T11:57:19.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:57:19.302 [DEBUG] [Thread-69155] [transport.py] [_log()] starting thread (client mode): 0xf818bd60
2025-12-12T11:57:19.303 [DEBUG] [Thread-69155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:57:19.323 [DEBUG] [Thread-69155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:57:19.323 [INFO] [Thread-69155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] client lang: <none>
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] server lang: <none>
2025-12-12T11:57:19.326 [DEBUG] [Thread-69155] [transport.py] [_log()] kex follows: False
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] Compression: none
2025-12-12T11:57:19.327 [DEBUG] [Thread-69155] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:57:19.343 [DEBUG] [Thread-69155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:57:19.343 [DEBUG] [Thread-69155] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:57:19.344 [DEBUG] [Thread-69155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:57:19.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:57:19.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:57:19.388 [DEBUG] [Thread-69155] [transport.py] [_log()] userauth is OK
2025-12-12T11:57:19.388 [DEBUG] [Thread-69155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:57:19.388 [DEBUG] [Thread-69155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:57:19.388 [DEBUG] [Thread-69155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:57:19.388 [DEBUG] [Thread-69155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:57:19.419 [INFO] [Thread-69155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:57:19.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:57:20.191 [DEBUG] [Thread-69155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:57:20.192 [DEBUG] [Thread-69155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:57:20.192 [DEBUG] [Thread-69155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:57:20.233 [DEBUG] [Thread-69155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:57:20.233 [DEBUG] [Thread-69155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:57:20.236 [DEBUG] [Thread-69155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:57:20.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:57:20.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:57:20.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:57:20.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:57:20.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:57:20.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:57:20.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:57:20.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:57:20.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:57:20.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.414332 -999.00  +20.30  36.42     34   +3.90 1 2 2 1 1   888    0 17.70 94.33 ----- 37.5 36.4 312.4 50.6 24.8 -20.9 24.0 -19.7 23.3 -19.9 24.0 -20.0
2025-12-12T11:57:20.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:57:20.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:57:20.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.414332
2025-12-12T11:57:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:57:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:57:20.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:57:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:57:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:57:20.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:54:49', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=51.05, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:56:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:57:20.260 [DEBUG] [Thread-69155] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:57:20.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:57:20.357 [DEBUG] [Thread-69158] [transport.py] [_log()] starting thread (client mode): 0xf8189b40
2025-12-12T11:57:20.357 [DEBUG] [Thread-69158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:57:20.371 [DEBUG] [Thread-69158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:57:20.371 [INFO] [Thread-69158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:57:20.379 [DEBUG] [Thread-69158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:57:20.379 [DEBUG] [Thread-69158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:57:20.379 [DEBUG] [Thread-69158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:57:20.379 [DEBUG] [Thread-69158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:20.379 [DEBUG] [Thread-69158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:20.379 [DEBUG] [Thread-69158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] client lang: <none>
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] server lang: <none>
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] kex follows: False
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:57:20.380 [DEBUG] [Thread-69158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:57:20.381 [DEBUG] [Thread-69158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:57:20.381 [DEBUG] [Thread-69158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:57:20.381 [DEBUG] [Thread-69158] [transport.py] [_log()] Compression: none
2025-12-12T11:57:20.381 [DEBUG] [Thread-69158] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:57:20.435 [DEBUG] [Thread-69158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:57:20.436 [DEBUG] [Thread-69158] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:57:20.436 [DEBUG] [Thread-69158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:57:20.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:57:20.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:57:20.494 [DEBUG] [Thread-69158] [transport.py] [_log()] userauth is OK
2025-12-12T11:57:20.494 [DEBUG] [Thread-69158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:57:20.495 [DEBUG] [Thread-69158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:57:20.495 [DEBUG] [Thread-69158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:57:20.495 [DEBUG] [Thread-69158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:57:20.514 [INFO] [Thread-69158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:57:20.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:57:20.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:57:21.395 [DEBUG] [Thread-69158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:57:21.395 [DEBUG] [Thread-69158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:57:21.443 [DEBUG] [Thread-69158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:57:21.443 [DEBUG] [Thread-69158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:57:21.451 [DEBUG] [Thread-69158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:57:21.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:57:21.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:57:21.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:57:21.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:57:21.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:57:21.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:57:21.488 [DEBUG] [Thread-69158] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:57:31.179 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:31.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:32.668 [DEBUG] [Thread-69160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:40.287 [DEBUG] [Thread-69161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:47.713 [DEBUG] [Thread-69162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:57:51.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:57:51.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:57:51.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:57:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 54, 49), 18.83, 28.59, 0.0, 51.05, 20.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:57:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:54:49
2025-12-12T11:57:52.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:57:52.439 [DEBUG] [Thread-69163] [transport.py] [_log()] starting thread (client mode): 0xf57a84f0
2025-12-12T11:57:52.439 [DEBUG] [Thread-69163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:57:52.460 [DEBUG] [Thread-69163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:57:52.460 [INFO] [Thread-69163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] client lang: <none>
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] server lang: <none>
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] kex follows: False
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] Compression: none
2025-12-12T11:57:52.463 [DEBUG] [Thread-69163] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:57:52.481 [DEBUG] [Thread-69163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:57:52.482 [DEBUG] [Thread-69163] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:57:52.482 [DEBUG] [Thread-69163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:57:52.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:57:52.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:57:52.484 [DEBUG] [Thread-69163] [transport.py] [_log()] userauth is OK
2025-12-12T11:57:52.484 [DEBUG] [Thread-69163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:57:52.484 [DEBUG] [Thread-69163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:57:52.484 [DEBUG] [Thread-69163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:57:52.484 [DEBUG] [Thread-69163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:57:52.498 [INFO] [Thread-69163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:57:52.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:57:53.090 [DEBUG] [Thread-69163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:57:53.090 [DEBUG] [Thread-69163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:57:53.091 [DEBUG] [Thread-69163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:57:53.136 [DEBUG] [Thread-69163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:57:53.136 [DEBUG] [Thread-69163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:57:53.138 [DEBUG] [Thread-69163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:57:53.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:57:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:57:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:57:53.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:57:53.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:57:53.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:57:53.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:57:53.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:57:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:57:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.414679 -999.00  +20.50  38.66     31   +3.10 1 2 2 1 1   888    0 17.61 96.78 ----- 50.3 38.7 311.6 43.9 24.9 -20.1 24.1 -21.3 23.5 -18.1 24.2 -19.3
2025-12-12T11:57:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:57:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:57:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.414679
2025-12-12T11:57:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:57:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:57:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:57:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:57:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:57:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:54:49', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=51.05, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:57:08.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:57:53.164 [DEBUG] [Thread-69163] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:57:53.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:57:53.261 [DEBUG] [Thread-69166] [transport.py] [_log()] starting thread (client mode): 0xf81f0250
2025-12-12T11:57:53.261 [DEBUG] [Thread-69166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:57:53.276 [DEBUG] [Thread-69166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:57:53.276 [INFO] [Thread-69166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:57:53.283 [DEBUG] [Thread-69166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:57:53.283 [DEBUG] [Thread-69166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:57:53.283 [DEBUG] [Thread-69166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:57:53.283 [DEBUG] [Thread-69166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:53.283 [DEBUG] [Thread-69166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] client lang: <none>
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] server lang: <none>
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] kex follows: False
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:57:53.284 [DEBUG] [Thread-69166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:57:53.285 [DEBUG] [Thread-69166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:57:53.285 [DEBUG] [Thread-69166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:57:53.285 [DEBUG] [Thread-69166] [transport.py] [_log()] Compression: none
2025-12-12T11:57:53.285 [DEBUG] [Thread-69166] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:57:53.343 [DEBUG] [Thread-69166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:57:53.344 [DEBUG] [Thread-69166] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:57:53.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:57:53.345 [DEBUG] [Thread-69166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:57:53.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:57:53.399 [DEBUG] [Thread-69166] [transport.py] [_log()] userauth is OK
2025-12-12T11:57:53.399 [DEBUG] [Thread-69166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:57:53.399 [DEBUG] [Thread-69166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:57:53.400 [DEBUG] [Thread-69166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:57:53.400 [DEBUG] [Thread-69166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:57:53.419 [INFO] [Thread-69166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:57:53.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:57:53.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:57:54.316 [DEBUG] [Thread-69166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:57:54.316 [DEBUG] [Thread-69166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:57:54.364 [DEBUG] [Thread-69166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:57:54.364 [DEBUG] [Thread-69166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:57:54.373 [DEBUG] [Thread-69166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:57:54.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:57:54.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:57:54.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:57:54.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:57:54.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:57:54.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:57:54.411 [DEBUG] [Thread-69166] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:58:02.739 [DEBUG] [Thread-69168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:17.785 [DEBUG] [Thread-69169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:24.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:58:24.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:58:24.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:58:25.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 54, 49), 18.83, 28.59, 0.0, 51.05, 20.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:58:25.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:54:49
2025-12-12T11:58:25.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:58:25.368 [DEBUG] [Thread-69170] [transport.py] [_log()] starting thread (client mode): 0xf57c9b10
2025-12-12T11:58:25.368 [DEBUG] [Thread-69170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:58:25.398 [DEBUG] [Thread-69170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:58:25.398 [INFO] [Thread-69170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] client lang: <none>
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] server lang: <none>
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] kex follows: False
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] Compression: none
2025-12-12T11:58:25.400 [DEBUG] [Thread-69170] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:58:25.417 [DEBUG] [Thread-69170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:58:25.417 [DEBUG] [Thread-69170] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:58:25.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:58:25.418 [DEBUG] [Thread-69170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:58:25.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:58:25.419 [DEBUG] [Thread-69170] [transport.py] [_log()] userauth is OK
2025-12-12T11:58:25.419 [DEBUG] [Thread-69170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:58:25.419 [DEBUG] [Thread-69170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:58:25.419 [DEBUG] [Thread-69170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:58:25.419 [DEBUG] [Thread-69170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:58:25.433 [INFO] [Thread-69170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:58:25.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:58:26.247 [DEBUG] [Thread-69170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:58:26.247 [DEBUG] [Thread-69170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:58:26.247 [DEBUG] [Thread-69170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:58:26.287 [DEBUG] [Thread-69170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:58:26.288 [DEBUG] [Thread-69170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:58:26.290 [DEBUG] [Thread-69170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:58:26.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:58:26.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:58:26.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:58:26.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:58:26.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:58:26.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:58:26.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.415373 -999.00  +19.80  36.55     33   +3.00 1 2 2 1 1   888    0 18.17 100.01 ----- 35.5 36.5 330.6 49.5 25.1 -21.0 24.2 -21.8 23.6 -18.8 24.3 -19.4
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.415373
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:54:49', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=51.05, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:58:08.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:58:26.309 [DEBUG] [Thread-69170] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:58:26.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:58:26.395 [DEBUG] [Thread-69173] [transport.py] [_log()] starting thread (client mode): 0xf57c8820
2025-12-12T11:58:26.395 [DEBUG] [Thread-69173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:58:26.409 [DEBUG] [Thread-69173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:58:26.409 [INFO] [Thread-69173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] client lang: <none>
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] server lang: <none>
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] kex follows: False
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] Compression: none
2025-12-12T11:58:26.417 [DEBUG] [Thread-69173] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:58:26.474 [DEBUG] [Thread-69173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:58:26.474 [DEBUG] [Thread-69173] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:58:26.474 [DEBUG] [Thread-69173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:58:26.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:58:26.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:58:26.531 [DEBUG] [Thread-69173] [transport.py] [_log()] userauth is OK
2025-12-12T11:58:26.531 [DEBUG] [Thread-69173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:58:26.531 [DEBUG] [Thread-69173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:58:26.531 [DEBUG] [Thread-69173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:58:26.531 [DEBUG] [Thread-69173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:58:26.544 [INFO] [Thread-69173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:58:26.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:58:26.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:58:27.430 [DEBUG] [Thread-69173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:58:27.430 [DEBUG] [Thread-69173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:58:27.477 [DEBUG] [Thread-69173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:58:27.477 [DEBUG] [Thread-69173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:58:27.486 [DEBUG] [Thread-69173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:58:27.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:58:27.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:58:27.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:58:27.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:58:27.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:58:27.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:58:27.517 [DEBUG] [Thread-69173] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:58:31.318 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:31.319 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:32.813 [DEBUG] [Thread-69175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:40.328 [DEBUG] [Thread-69176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:47.862 [DEBUG] [Thread-69177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:58:57.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:58:57.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:58:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:58:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 54, 49), 18.83, 28.59, 0.0, 51.05, 20.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:58:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:54:49
2025-12-12T11:58:58.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:58:58.443 [DEBUG] [Thread-69178] [transport.py] [_log()] starting thread (client mode): 0xf813d8d0
2025-12-12T11:58:58.443 [DEBUG] [Thread-69178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:58:58.464 [DEBUG] [Thread-69178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:58:58.464 [INFO] [Thread-69178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] client lang: <none>
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] server lang: <none>
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] kex follows: False
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] Compression: none
2025-12-12T11:58:58.467 [DEBUG] [Thread-69178] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:58:58.484 [DEBUG] [Thread-69178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:58:58.484 [DEBUG] [Thread-69178] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:58:58.485 [DEBUG] [Thread-69178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:58:58.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:58:58.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:58:58.486 [DEBUG] [Thread-69178] [transport.py] [_log()] userauth is OK
2025-12-12T11:58:58.486 [DEBUG] [Thread-69178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:58:58.486 [DEBUG] [Thread-69178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:58:58.486 [DEBUG] [Thread-69178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:58:58.487 [DEBUG] [Thread-69178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:58:58.520 [INFO] [Thread-69178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:58:58.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:58:59.159 [DEBUG] [Thread-69178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:58:59.159 [DEBUG] [Thread-69178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:58:59.160 [DEBUG] [Thread-69178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:58:59.200 [DEBUG] [Thread-69178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:58:59.200 [DEBUG] [Thread-69178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:58:59.203 [DEBUG] [Thread-69178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:58:59.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:58:59.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:58:59.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:58:59.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:58:59.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:58:59.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:58:59.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:58:59.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:58:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:58:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.415721 -999.00  +19.40  42.38     34   +3.50 1 2 2 1 1   888    0 18.15 101.93 ----- 45.3 42.4 337.5 60.1 25.0 -23.0 24.0 -23.0 23.6 -20.6 24.3 -21.1
2025-12-12T11:58:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:58:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:58:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.415721
2025-12-12T11:58:59.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:58:59.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:58:59.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:58:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:58:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:58:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:54:49', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=51.05, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:58:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:58:59.228 [DEBUG] [Thread-69178] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:58:59.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:58:59.325 [DEBUG] [Thread-69181] [transport.py] [_log()] starting thread (client mode): 0xf813ce80
2025-12-12T11:58:59.325 [DEBUG] [Thread-69181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:58:59.340 [DEBUG] [Thread-69181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T11:58:59.340 [INFO] [Thread-69181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T11:58:59.350 [DEBUG] [Thread-69181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:58:59.350 [DEBUG] [Thread-69181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T11:58:59.350 [DEBUG] [Thread-69181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] client lang: <none>
2025-12-12T11:58:59.351 [DEBUG] [Thread-69181] [transport.py] [_log()] server lang: <none>
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] kex follows: False
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] Compression: none
2025-12-12T11:58:59.352 [DEBUG] [Thread-69181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:58:59.415 [DEBUG] [Thread-69181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:58:59.416 [DEBUG] [Thread-69181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:58:59.416 [DEBUG] [Thread-69181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T11:58:59.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T11:58:59.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:58:59.472 [DEBUG] [Thread-69181] [transport.py] [_log()] userauth is OK
2025-12-12T11:58:59.472 [DEBUG] [Thread-69181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:58:59.472 [DEBUG] [Thread-69181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:58:59.472 [DEBUG] [Thread-69181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T11:58:59.472 [DEBUG] [Thread-69181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:58:59.491 [INFO] [Thread-69181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:58:59.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T11:58:59.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:59:00.312 [DEBUG] [Thread-69181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:59:00.312 [DEBUG] [Thread-69181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:59:00.360 [DEBUG] [Thread-69181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:59:00.360 [DEBUG] [Thread-69181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:59:00.368 [DEBUG] [Thread-69181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:59:00.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:59:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T11:59:00.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T11:59:00.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:59:00.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:59:00.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:59:00.402 [DEBUG] [Thread-69181] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:59:02.892 [DEBUG] [Thread-69183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:59:17.928 [DEBUG] [Thread-69184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:59:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T11:59:30.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T11:59:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T11:59:31.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 54, 49), 18.83, 28.59, 0.0, 51.05, 20.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T11:59:31.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:54:49
2025-12-12T11:59:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T11:59:31.325 [DEBUG] [Thread-69185] [transport.py] [_log()] starting thread (client mode): 0xf57cb1f0
2025-12-12T11:59:31.325 [DEBUG] [Thread-69185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T11:59:31.345 [DEBUG] [Thread-69185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T11:59:31.345 [INFO] [Thread-69185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] client lang: <none>
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] server lang: <none>
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] kex follows: False
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] Compression: none
2025-12-12T11:59:31.348 [DEBUG] [Thread-69185] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T11:59:31.366 [DEBUG] [Thread-69185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T11:59:31.366 [DEBUG] [Thread-69185] [transport.py] [_log()] Switch to new keys ...
2025-12-12T11:59:31.367 [DEBUG] [Thread-69185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T11:59:31.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T11:59:31.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T11:59:31.368 [DEBUG] [Thread-69185] [transport.py] [_log()] userauth is OK
2025-12-12T11:59:31.369 [DEBUG] [Thread-69185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T11:59:31.369 [DEBUG] [Thread-69185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T11:59:31.369 [DEBUG] [Thread-69185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T11:59:31.369 [DEBUG] [Thread-69185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T11:59:31.386 [INFO] [Thread-69185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T11:59:31.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T11:59:31.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:59:31.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:59:32.032 [DEBUG] [Thread-69185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T11:59:32.032 [DEBUG] [Thread-69185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T11:59:32.032 [DEBUG] [Thread-69185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T11:59:32.073 [DEBUG] [Thread-69185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T11:59:32.073 [DEBUG] [Thread-69185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T11:59:32.076 [DEBUG] [Thread-69185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T11:59:32.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T11:59:32.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T11:59:32.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T11:59:32.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T11:59:32.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T11:59:32.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T11:59:32.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T11:59:32.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T11:59:32.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T11:59:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.416068 -999.00  +19.60  42.40     35   +3.90 1 2 2 1 1   888    0 18.07 99.54 ----- 40.9 42.4 320.8 49.8 25.0 -21.5 24.1 -21.2 23.5 -19.7 24.2 -19.9
2025-12-12T11:59:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T11:59:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T11:59:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.416068
2025-12-12T11:59:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T11:59:32.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T11:59:32.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T11:59:32.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T11:59:32.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T11:59:32.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:54:49', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=51.05, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T09:59:08.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T11:59:32.101 [DEBUG] [Thread-69185] [transport.py] [_log()] EOF in transport thread
2025-12-12T11:59:32.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T11:59:32.958 [DEBUG] [Thread-69188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:59:40.356 [DEBUG] [Thread-69189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T11:59:48.009 [DEBUG] [Thread-69190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:03.038 [DEBUG] [Thread-69191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:18.067 [DEBUG] [Thread-69192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:31.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:31.604 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:33.097 [DEBUG] [Thread-69193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:40.391 [DEBUG] [Thread-69194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:00:48.131 [DEBUG] [Thread-69195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:03.165 [DEBUG] [Thread-69196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:18.197 [DEBUG] [Thread-69197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:31.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:31.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:33.227 [DEBUG] [Thread-69198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:40.419 [DEBUG] [Thread-69199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:01:43.914 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T12:01:48.255 [DEBUG] [Thread-69200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:03.286 [DEBUG] [Thread-69201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:13.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:02:13.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:02:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:02:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 11, 57, 37), 19.92, 26.47, 0.0, 52.78, 20.7, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:02:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 11:57:37
2025-12-12T12:02:14.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:02:14.873 [DEBUG] [Thread-69202] [transport.py] [_log()] starting thread (client mode): 0xf8188a00
2025-12-12T12:02:14.873 [DEBUG] [Thread-69202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:02:14.892 [DEBUG] [Thread-69202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:02:14.892 [INFO] [Thread-69202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] client lang: <none>
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] server lang: <none>
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] kex follows: False
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] Compression: none
2025-12-12T12:02:14.895 [DEBUG] [Thread-69202] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:02:14.910 [DEBUG] [Thread-69202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:02:14.910 [DEBUG] [Thread-69202] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:02:14.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:02:14.910 [DEBUG] [Thread-69202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:02:14.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:02:14.911 [DEBUG] [Thread-69202] [transport.py] [_log()] userauth is OK
2025-12-12T12:02:14.911 [DEBUG] [Thread-69202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:02:14.911 [DEBUG] [Thread-69202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:02:14.911 [DEBUG] [Thread-69202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:02:14.911 [DEBUG] [Thread-69202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:02:14.925 [INFO] [Thread-69202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:02:14.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:02:15.537 [DEBUG] [Thread-69202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:02:15.537 [DEBUG] [Thread-69202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:02:15.537 [DEBUG] [Thread-69202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:02:15.577 [DEBUG] [Thread-69202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:02:15.578 [DEBUG] [Thread-69202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:02:15.580 [DEBUG] [Thread-69202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:02:15.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:02:15.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:02:15.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:02:15.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:02:15.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:02:15.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:02:15.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.418151 -999.00  +18.80  21.68     35   +3.10 1 2 1 1 1   888    0 18.64 114.44 ----- 19.7 21.7 359.1 40.1 24.8 -24.3 23.9 -22.2 23.5 -21.5 24.1 -22.3
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.418151
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:02:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T11:57:37', tmtdew=19.92, humidity=26.47, cloud=0.0, wind=52.78, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:02:08.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:02:15.598 [DEBUG] [Thread-69202] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:02:15.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:02:15.682 [DEBUG] [Thread-69205] [transport.py] [_log()] starting thread (client mode): 0xf81f0250
2025-12-12T12:02:15.682 [DEBUG] [Thread-69205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:02:15.697 [DEBUG] [Thread-69205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:02:15.697 [INFO] [Thread-69205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] client lang: <none>
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] server lang: <none>
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] kex follows: False
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] Compression: none
2025-12-12T12:02:15.705 [DEBUG] [Thread-69205] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:02:15.761 [DEBUG] [Thread-69205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:02:15.762 [DEBUG] [Thread-69205] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:02:15.762 [DEBUG] [Thread-69205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:02:15.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:02:15.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:02:15.819 [DEBUG] [Thread-69205] [transport.py] [_log()] userauth is OK
2025-12-12T12:02:15.819 [DEBUG] [Thread-69205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:02:15.819 [DEBUG] [Thread-69205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:02:15.819 [DEBUG] [Thread-69205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:02:15.819 [DEBUG] [Thread-69205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:02:15.833 [INFO] [Thread-69205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:02:15.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:02:15.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:02:16.658 [DEBUG] [Thread-69205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:02:16.658 [DEBUG] [Thread-69205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:02:16.706 [DEBUG] [Thread-69205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:02:16.706 [DEBUG] [Thread-69205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:02:16.715 [DEBUG] [Thread-69205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:02:16.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:02:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:02:16.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:02:16.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:02:16.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:02:16.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:02:16.746 [DEBUG] [Thread-69205] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:02:18.314 [DEBUG] [Thread-69207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:31.883 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:31.884 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:33.351 [DEBUG] [Thread-69208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:40.459 [DEBUG] [Thread-69209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:46.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:02:46.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:02:46.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:02:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 0, 25), 18.86, 28.32, 0.0, 40.12, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:02:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:00:25
2025-12-12T12:02:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:02:47.692 [DEBUG] [Thread-69210] [transport.py] [_log()] starting thread (client mode): 0xf818aa10
2025-12-12T12:02:47.692 [DEBUG] [Thread-69210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:02:47.713 [DEBUG] [Thread-69210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:02:47.713 [INFO] [Thread-69210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:02:47.716 [DEBUG] [Thread-69210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:02:47.716 [DEBUG] [Thread-69210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:02:47.716 [DEBUG] [Thread-69210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:02:47.716 [DEBUG] [Thread-69210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] client lang: <none>
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] server lang: <none>
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] kex follows: False
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] Compression: none
2025-12-12T12:02:47.717 [DEBUG] [Thread-69210] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:02:47.734 [DEBUG] [Thread-69210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:02:47.734 [DEBUG] [Thread-69210] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:02:47.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:02:47.735 [DEBUG] [Thread-69210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:02:47.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:02:47.737 [DEBUG] [Thread-69210] [transport.py] [_log()] userauth is OK
2025-12-12T12:02:47.738 [DEBUG] [Thread-69210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:02:47.738 [DEBUG] [Thread-69210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:02:47.738 [DEBUG] [Thread-69210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:02:47.738 [DEBUG] [Thread-69210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:02:47.773 [INFO] [Thread-69210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:02:47.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:02:48.380 [DEBUG] [Thread-69212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:02:48.383 [DEBUG] [Thread-69210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:02:48.383 [DEBUG] [Thread-69210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:02:48.384 [DEBUG] [Thread-69210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:02:48.424 [DEBUG] [Thread-69210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:02:48.424 [DEBUG] [Thread-69210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:02:48.427 [DEBUG] [Thread-69210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:02:48.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:02:48.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:02:48.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:02:48.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:02:48.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:02:48.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:02:48.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:02:48.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:02:48.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:02:48.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.418499 -999.00  +18.90  23.70     34   +2.90 1 2 1 1 1   888    0 19.06 121.01 ----- 29.1 23.7 330.2 31.9 24.9 -23.2 23.9 -24.5 23.5 -20.8 24.1 -20.8
2025-12-12T12:02:48.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:02:48.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:02:48.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.418499
2025-12-12T12:02:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:02:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:02:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:02:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:02:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:02:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:00:25', tmtdew=18.86, humidity=28.32, cloud=0.0, wind=40.12, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:02:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:02:48.453 [DEBUG] [Thread-69210] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:02:48.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:02:48.547 [DEBUG] [Thread-69214] [transport.py] [_log()] starting thread (client mode): 0xf57ab430
2025-12-12T12:02:48.547 [DEBUG] [Thread-69214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:02:48.562 [DEBUG] [Thread-69214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:02:48.562 [INFO] [Thread-69214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:02:48.569 [DEBUG] [Thread-69214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] client lang: <none>
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] server lang: <none>
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] kex follows: False
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] Compression: none
2025-12-12T12:02:48.570 [DEBUG] [Thread-69214] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:02:48.627 [DEBUG] [Thread-69214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:02:48.627 [DEBUG] [Thread-69214] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:02:48.628 [DEBUG] [Thread-69214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:02:48.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:02:48.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:02:48.683 [DEBUG] [Thread-69214] [transport.py] [_log()] userauth is OK
2025-12-12T12:02:48.684 [DEBUG] [Thread-69214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:02:48.684 [DEBUG] [Thread-69214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:02:48.684 [DEBUG] [Thread-69214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:02:48.684 [DEBUG] [Thread-69214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:02:48.706 [INFO] [Thread-69214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:02:48.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:02:48.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:02:49.570 [DEBUG] [Thread-69214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:02:49.570 [DEBUG] [Thread-69214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:02:49.618 [DEBUG] [Thread-69214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:02:49.618 [DEBUG] [Thread-69214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:02:49.627 [DEBUG] [Thread-69214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:02:49.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:02:49.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:02:49.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:02:49.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:02:49.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:02:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:02:49.661 [DEBUG] [Thread-69214] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:03:03.408 [DEBUG] [Thread-69216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:18.465 [DEBUG] [Thread-69217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:03:19.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:03:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:03:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 0, 25), 18.86, 28.32, 0.0, 40.12, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:03:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:00:25
2025-12-12T12:03:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:03:20.585 [DEBUG] [Thread-69218] [transport.py] [_log()] starting thread (client mode): 0xf57a9690
2025-12-12T12:03:20.586 [DEBUG] [Thread-69218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:03:20.606 [DEBUG] [Thread-69218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:03:20.607 [INFO] [Thread-69218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] client lang: <none>
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] server lang: <none>
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] kex follows: False
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:03:20.609 [DEBUG] [Thread-69218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:03:20.610 [DEBUG] [Thread-69218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:03:20.610 [DEBUG] [Thread-69218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:03:20.610 [DEBUG] [Thread-69218] [transport.py] [_log()] Compression: none
2025-12-12T12:03:20.610 [DEBUG] [Thread-69218] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:03:20.623 [DEBUG] [Thread-69218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:03:20.624 [DEBUG] [Thread-69218] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:03:20.624 [DEBUG] [Thread-69218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:03:20.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:03:20.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:03:20.626 [DEBUG] [Thread-69218] [transport.py] [_log()] userauth is OK
2025-12-12T12:03:20.627 [DEBUG] [Thread-69218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:03:20.627 [DEBUG] [Thread-69218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:03:20.627 [DEBUG] [Thread-69218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:03:20.627 [DEBUG] [Thread-69218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:03:20.644 [INFO] [Thread-69218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:03:20.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:03:21.266 [DEBUG] [Thread-69218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:03:21.266 [DEBUG] [Thread-69218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:03:21.266 [DEBUG] [Thread-69218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:03:21.307 [DEBUG] [Thread-69218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:03:21.307 [DEBUG] [Thread-69218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:03:21.310 [DEBUG] [Thread-69218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:03:21.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:03:21.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:03:21.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:03:21.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:03:21.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:03:21.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:03:21.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:03:21.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:03:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:03:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.418846 -999.00  +18.80  24.45     34   +2.90 1 2 1 1 1   888    0 18.86 115.16 ----- 13.7 24.4 1.6 32.5 24.8 -21.8 23.9 -21.7 23.5 -20.7 23.9 -20.1
2025-12-12T12:03:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:03:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:03:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.418846
2025-12-12T12:03:21.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:03:21.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:03:21.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:03:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:03:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:03:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:00:25', tmtdew=18.86, humidity=28.32, cloud=0.0, wind=40.12, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:03:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:03:21.336 [DEBUG] [Thread-69218] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:03:21.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:03:21.435 [DEBUG] [Thread-69221] [transport.py] [_log()] starting thread (client mode): 0xf57a97e0
2025-12-12T12:03:21.435 [DEBUG] [Thread-69221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:03:21.449 [DEBUG] [Thread-69221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:03:21.450 [INFO] [Thread-69221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:03:21.457 [DEBUG] [Thread-69221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:03:21.457 [DEBUG] [Thread-69221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:03:21.457 [DEBUG] [Thread-69221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:03:21.457 [DEBUG] [Thread-69221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] client lang: <none>
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] server lang: <none>
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] kex follows: False
2025-12-12T12:03:21.458 [DEBUG] [Thread-69221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:03:21.459 [DEBUG] [Thread-69221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:03:21.459 [DEBUG] [Thread-69221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:03:21.459 [DEBUG] [Thread-69221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:03:21.459 [DEBUG] [Thread-69221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:03:21.459 [DEBUG] [Thread-69221] [transport.py] [_log()] Compression: none
2025-12-12T12:03:21.459 [DEBUG] [Thread-69221] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:03:21.516 [DEBUG] [Thread-69221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:03:21.516 [DEBUG] [Thread-69221] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:03:21.517 [DEBUG] [Thread-69221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:03:21.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:03:21.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:03:21.573 [DEBUG] [Thread-69221] [transport.py] [_log()] userauth is OK
2025-12-12T12:03:21.574 [DEBUG] [Thread-69221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:03:21.574 [DEBUG] [Thread-69221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:03:21.574 [DEBUG] [Thread-69221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:03:21.574 [DEBUG] [Thread-69221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:03:21.593 [INFO] [Thread-69221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:03:21.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:03:21.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:03:22.410 [DEBUG] [Thread-69221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:03:22.410 [DEBUG] [Thread-69221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:03:22.458 [DEBUG] [Thread-69221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:03:22.458 [DEBUG] [Thread-69221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:03:22.467 [DEBUG] [Thread-69221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:03:22.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:03:22.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:03:22.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:03:22.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:03:22.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:03:22.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:03:22.501 [DEBUG] [Thread-69221] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:03:32.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:32.026 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:33.494 [DEBUG] [Thread-69223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:40.492 [DEBUG] [Thread-69224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:48.525 [DEBUG] [Thread-69225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:03:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:03:52.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:03:52.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:03:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 0, 25), 18.86, 28.32, 0.0, 40.12, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:03:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:00:25
2025-12-12T12:03:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:03:53.446 [DEBUG] [Thread-69226] [transport.py] [_log()] starting thread (client mode): 0xfabc7790
2025-12-12T12:03:53.446 [DEBUG] [Thread-69226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:03:53.463 [DEBUG] [Thread-69226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:03:53.463 [INFO] [Thread-69226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:03:53.466 [DEBUG] [Thread-69226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:03:53.466 [DEBUG] [Thread-69226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] client lang: <none>
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] server lang: <none>
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] kex follows: False
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] Compression: none
2025-12-12T12:03:53.467 [DEBUG] [Thread-69226] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:03:53.484 [DEBUG] [Thread-69226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:03:53.485 [DEBUG] [Thread-69226] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:03:53.485 [DEBUG] [Thread-69226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:03:53.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:03:53.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:03:53.487 [DEBUG] [Thread-69226] [transport.py] [_log()] userauth is OK
2025-12-12T12:03:53.487 [DEBUG] [Thread-69226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:03:53.487 [DEBUG] [Thread-69226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:03:53.487 [DEBUG] [Thread-69226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:03:53.487 [DEBUG] [Thread-69226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:03:53.508 [INFO] [Thread-69226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:03:53.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:03:54.113 [DEBUG] [Thread-69226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:03:54.113 [DEBUG] [Thread-69226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:03:54.114 [DEBUG] [Thread-69226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:03:54.154 [DEBUG] [Thread-69226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:03:54.154 [DEBUG] [Thread-69226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:03:54.156 [DEBUG] [Thread-69226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:03:54.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:03:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:03:54.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:03:54.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:03:54.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:03:54.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:03:54.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:03:54.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:03:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:03:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.419193 -999.00  +18.80  23.20     34   +2.90 1 2 1 1 1   888    0 18.80 112.30 ----- 24.2 23.2 343.5 43.6 24.9 -22.1 24.0 -22.5 23.5 -19.7 24.1 -20.3
2025-12-12T12:03:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:03:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:03:54.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.419193
2025-12-12T12:03:54.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:03:54.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:03:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:03:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:03:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:03:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:00:25', tmtdew=18.86, humidity=28.32, cloud=0.0, wind=40.12, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:03:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:03:54.181 [DEBUG] [Thread-69226] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:03:54.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:03:54.289 [DEBUG] [Thread-69229] [transport.py] [_log()] starting thread (client mode): 0xfabc7670
2025-12-12T12:03:54.289 [DEBUG] [Thread-69229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:03:54.305 [DEBUG] [Thread-69229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:03:54.305 [INFO] [Thread-69229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:03:54.313 [DEBUG] [Thread-69229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:03:54.313 [DEBUG] [Thread-69229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:03:54.313 [DEBUG] [Thread-69229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:03:54.313 [DEBUG] [Thread-69229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:54.313 [DEBUG] [Thread-69229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:03:54.313 [DEBUG] [Thread-69229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] client lang: <none>
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] server lang: <none>
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] kex follows: False
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:03:54.314 [DEBUG] [Thread-69229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:03:54.315 [DEBUG] [Thread-69229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:03:54.315 [DEBUG] [Thread-69229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:03:54.315 [DEBUG] [Thread-69229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:03:54.315 [DEBUG] [Thread-69229] [transport.py] [_log()] Compression: none
2025-12-12T12:03:54.315 [DEBUG] [Thread-69229] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:03:54.374 [DEBUG] [Thread-69229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:03:54.374 [DEBUG] [Thread-69229] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:03:54.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:03:54.375 [DEBUG] [Thread-69229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:03:54.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:03:54.431 [DEBUG] [Thread-69229] [transport.py] [_log()] userauth is OK
2025-12-12T12:03:54.431 [DEBUG] [Thread-69229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:03:54.432 [DEBUG] [Thread-69229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:03:54.432 [DEBUG] [Thread-69229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:03:54.432 [DEBUG] [Thread-69229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:03:54.450 [INFO] [Thread-69229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:03:54.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:03:54.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:03:55.325 [DEBUG] [Thread-69229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:03:55.325 [DEBUG] [Thread-69229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:03:55.373 [DEBUG] [Thread-69229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:03:55.373 [DEBUG] [Thread-69229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:03:55.382 [DEBUG] [Thread-69229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:03:55.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:03:55.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:03:55.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:03:55.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:03:55.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:03:55.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:03:55.417 [DEBUG] [Thread-69229] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:04:03.555 [DEBUG] [Thread-69231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:18.600 [DEBUG] [Thread-69232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:04:25.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:04:25.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:04:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 0, 25), 18.86, 28.32, 0.0, 40.12, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:04:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:00:25
2025-12-12T12:04:26.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:04:26.365 [DEBUG] [Thread-69233] [transport.py] [_log()] starting thread (client mode): 0xfabc5fc0
2025-12-12T12:04:26.365 [DEBUG] [Thread-69233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:04:26.377 [DEBUG] [Thread-69233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:04:26.377 [INFO] [Thread-69233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] client lang: <none>
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] server lang: <none>
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] kex follows: False
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] Compression: none
2025-12-12T12:04:26.381 [DEBUG] [Thread-69233] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:04:26.399 [DEBUG] [Thread-69233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:04:26.399 [DEBUG] [Thread-69233] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:04:26.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:04:26.400 [DEBUG] [Thread-69233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:04:26.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:04:26.402 [DEBUG] [Thread-69233] [transport.py] [_log()] userauth is OK
2025-12-12T12:04:26.403 [DEBUG] [Thread-69233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:04:26.403 [DEBUG] [Thread-69233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:04:26.403 [DEBUG] [Thread-69233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:04:26.403 [DEBUG] [Thread-69233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:04:26.429 [INFO] [Thread-69233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:04:26.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:04:27.024 [DEBUG] [Thread-69233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:04:27.024 [DEBUG] [Thread-69233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:04:27.025 [DEBUG] [Thread-69233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:04:27.065 [DEBUG] [Thread-69233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:04:27.065 [DEBUG] [Thread-69233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:04:27.067 [DEBUG] [Thread-69233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:04:27.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:04:27.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:04:27.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:04:27.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:04:27.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:04:27.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:04:27.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:04:27.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.419540 -999.00  +19.60  24.57     32   +2.50 1 2 1 1 1   888    0 18.80 121.64 ----- 34.8 24.6 339.8 38.0 25.1 -22.0 24.1 -24.7 23.7 -20.0 24.3 -19.6
2025-12-12T12:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.419540
2025-12-12T12:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:04:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:04:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:04:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:04:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:04:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:00:25', tmtdew=18.86, humidity=28.32, cloud=0.0, wind=40.12, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:04:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:04:27.092 [DEBUG] [Thread-69233] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:04:27.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:04:27.199 [DEBUG] [Thread-69236] [transport.py] [_log()] starting thread (client mode): 0xfabc6ec0
2025-12-12T12:04:27.199 [DEBUG] [Thread-69236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:04:27.214 [DEBUG] [Thread-69236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:04:27.214 [INFO] [Thread-69236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:04:27.222 [DEBUG] [Thread-69236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:04:27.222 [DEBUG] [Thread-69236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:04:27.222 [DEBUG] [Thread-69236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:04:27.222 [DEBUG] [Thread-69236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:04:27.222 [DEBUG] [Thread-69236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:04:27.222 [DEBUG] [Thread-69236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] client lang: <none>
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] server lang: <none>
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] kex follows: False
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] Compression: none
2025-12-12T12:04:27.223 [DEBUG] [Thread-69236] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:04:27.283 [DEBUG] [Thread-69236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:04:27.283 [DEBUG] [Thread-69236] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:04:27.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:04:27.284 [DEBUG] [Thread-69236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:04:27.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:04:27.340 [DEBUG] [Thread-69236] [transport.py] [_log()] userauth is OK
2025-12-12T12:04:27.340 [DEBUG] [Thread-69236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:04:27.340 [DEBUG] [Thread-69236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:04:27.340 [DEBUG] [Thread-69236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:04:27.340 [DEBUG] [Thread-69236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:04:27.359 [INFO] [Thread-69236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:04:27.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:04:27.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:04:28.266 [DEBUG] [Thread-69236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:04:28.266 [DEBUG] [Thread-69236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:04:28.314 [DEBUG] [Thread-69236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:04:28.314 [DEBUG] [Thread-69236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:04:28.322 [DEBUG] [Thread-69236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:04:28.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:04:28.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:04:28.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
2025-12-12T12:04:28.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:04:28.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:04:28.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:04:28.357 [DEBUG] [Thread-69236] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:04:32.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:32.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:33.628 [DEBUG] [Thread-69238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:40.532 [DEBUG] [Thread-69239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:48.673 [DEBUG] [Thread-69240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:04:58.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:04:58.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:04:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:04:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 0, 25), 18.86, 28.32, 0.0, 40.12, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:04:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:00:25
2025-12-12T12:04:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:04:59.305 [DEBUG] [Thread-69241] [transport.py] [_log()] starting thread (client mode): 0xfabc5de0
2025-12-12T12:04:59.305 [DEBUG] [Thread-69241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:04:59.323 [DEBUG] [Thread-69241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:04:59.323 [INFO] [Thread-69241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:04:59.326 [DEBUG] [Thread-69241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:04:59.326 [DEBUG] [Thread-69241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:04:59.326 [DEBUG] [Thread-69241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:04:59.326 [DEBUG] [Thread-69241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:04:59.326 [DEBUG] [Thread-69241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] client lang: <none>
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] server lang: <none>
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] kex follows: False
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:04:59.327 [DEBUG] [Thread-69241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:04:59.328 [DEBUG] [Thread-69241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:04:59.328 [DEBUG] [Thread-69241] [transport.py] [_log()] Compression: none
2025-12-12T12:04:59.328 [DEBUG] [Thread-69241] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:04:59.345 [DEBUG] [Thread-69241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:04:59.345 [DEBUG] [Thread-69241] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:04:59.346 [DEBUG] [Thread-69241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:04:59.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:04:59.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:04:59.348 [DEBUG] [Thread-69241] [transport.py] [_log()] userauth is OK
2025-12-12T12:04:59.348 [DEBUG] [Thread-69241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:04:59.348 [DEBUG] [Thread-69241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:04:59.348 [DEBUG] [Thread-69241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:04:59.348 [DEBUG] [Thread-69241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:04:59.371 [INFO] [Thread-69241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:04:59.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:04:59.959 [DEBUG] [Thread-69241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:04:59.959 [DEBUG] [Thread-69241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:04:59.960 [DEBUG] [Thread-69241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:05:00.000 [DEBUG] [Thread-69241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:05:00.000 [DEBUG] [Thread-69241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:05:00.003 [DEBUG] [Thread-69241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:05:00.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:05:00.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:05:00.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:05:00.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:05:00.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:05:00.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:05:00.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:05:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:05:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:05:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.419888 -999.00  +19.50  32.38     31   +2.30 1 2 2 1 1   888    0 19.19 123.50 ----- 33.6 32.4 307.2 51.3 25.0 -22.6 24.2 -21.9 23.6 -20.1 24.3 -21.2
2025-12-12T12:05:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:05:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:05:00.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.419888
2025-12-12T12:05:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:05:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:05:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:05:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:05:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:05:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:00:25', tmtdew=18.86, humidity=28.32, cloud=0.0, wind=40.12, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:04:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:05:00.022 [DEBUG] [Thread-69241] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:05:00.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:05:00.119 [DEBUG] [Thread-69244] [transport.py] [_log()] starting thread (client mode): 0xfabc6e30
2025-12-12T12:05:00.119 [DEBUG] [Thread-69244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:05:00.134 [DEBUG] [Thread-69244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:05:00.134 [INFO] [Thread-69244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:05:00.141 [DEBUG] [Thread-69244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:05:00.142 [DEBUG] [Thread-69244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] client lang: <none>
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] server lang: <none>
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] kex follows: False
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] Compression: none
2025-12-12T12:05:00.143 [DEBUG] [Thread-69244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:05:00.199 [DEBUG] [Thread-69244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:05:00.199 [DEBUG] [Thread-69244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:05:00.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:05:00.200 [DEBUG] [Thread-69244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:05:00.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:05:00.256 [DEBUG] [Thread-69244] [transport.py] [_log()] userauth is OK
2025-12-12T12:05:00.256 [DEBUG] [Thread-69244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:05:00.256 [DEBUG] [Thread-69244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:05:00.256 [DEBUG] [Thread-69244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:05:00.257 [DEBUG] [Thread-69244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:05:00.275 [INFO] [Thread-69244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:05:00.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:05:00.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:05:01.198 [DEBUG] [Thread-69244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:05:01.198 [DEBUG] [Thread-69244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:05:01.246 [DEBUG] [Thread-69244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:05:01.246 [DEBUG] [Thread-69244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:05:01.255 [DEBUG] [Thread-69244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:05:01.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:05:01.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:05:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:05:01.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:05:01.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:05:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:05:01.290 [DEBUG] [Thread-69244] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:05:03.701 [DEBUG] [Thread-69246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:05:18.750 [DEBUG] [Thread-69247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:05:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:05:31.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:05:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:05:31.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 3, 12), 19.14, 27.73, 0.0, 29.71, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:05:31.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:03:12
2025-12-12T12:05:32.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:05:32.249 [DEBUG] [Thread-69248] [transport.py] [_log()] starting thread (client mode): 0xf57a8550
2025-12-12T12:05:32.249 [DEBUG] [Thread-69248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:05:32.269 [DEBUG] [Thread-69248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:05:32.269 [INFO] [Thread-69248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:05:32.272 [DEBUG] [Thread-69248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] client lang: <none>
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] server lang: <none>
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] kex follows: False
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] Compression: none
2025-12-12T12:05:32.273 [DEBUG] [Thread-69248] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:05:32.282 [DEBUG] [Thread-69248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:05:32.282 [DEBUG] [Thread-69248] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:05:32.282 [DEBUG] [Thread-69248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:05:32.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:05:32.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:05:32.283 [DEBUG] [Thread-69248] [transport.py] [_log()] userauth is OK
2025-12-12T12:05:32.283 [DEBUG] [Thread-69248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:05:32.283 [DEBUG] [Thread-69248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:05:32.283 [DEBUG] [Thread-69248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:05:32.283 [DEBUG] [Thread-69248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:05:32.292 [INFO] [Thread-69248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:05:32.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:05:32.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:05:32.310 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:05:32.868 [DEBUG] [Thread-69248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:05:32.868 [DEBUG] [Thread-69248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:05:32.868 [DEBUG] [Thread-69248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:05:32.909 [DEBUG] [Thread-69248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:05:32.910 [DEBUG] [Thread-69248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:05:32.911 [DEBUG] [Thread-69248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:05:32.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:05:32.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:05:32.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:05:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:05:32.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:05:32.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:05:32.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:05:32.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:05:32.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:05:32.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.420235 -999.00  +19.80  29.53     31   +2.60 1 2 1 1 1   888    0 19.50 132.01 ----- 36.4 29.5 323.9 40.5 25.2 -22.3 24.3 -23.2 23.7 -19.8 24.4 -20.5
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.420235
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:05:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:03:12', tmtdew=19.14, humidity=27.73, cloud=0.0, wind=29.71, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:05:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:05:32.931 [DEBUG] [Thread-69248] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:05:33.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:05:33.018 [DEBUG] [Thread-69251] [transport.py] [_log()] starting thread (client mode): 0xf57a9300
2025-12-12T12:05:33.018 [DEBUG] [Thread-69251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:05:33.032 [DEBUG] [Thread-69251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:05:33.033 [INFO] [Thread-69251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] client lang: <none>
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] server lang: <none>
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] kex follows: False
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] Compression: none
2025-12-12T12:05:33.040 [DEBUG] [Thread-69251] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:05:33.098 [DEBUG] [Thread-69251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:05:33.098 [DEBUG] [Thread-69251] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:05:33.099 [DEBUG] [Thread-69251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:05:33.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:05:33.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:05:33.155 [DEBUG] [Thread-69251] [transport.py] [_log()] userauth is OK
2025-12-12T12:05:33.155 [DEBUG] [Thread-69251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:05:33.155 [DEBUG] [Thread-69251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:05:33.155 [DEBUG] [Thread-69251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:05:33.155 [DEBUG] [Thread-69251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:05:33.169 [INFO] [Thread-69251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:05:33.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:05:33.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:05:33.778 [DEBUG] [Thread-69253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:05:34.028 [DEBUG] [Thread-69251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:05:34.028 [DEBUG] [Thread-69251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:05:34.076 [DEBUG] [Thread-69251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:05:34.076 [DEBUG] [Thread-69251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:05:34.084 [DEBUG] [Thread-69251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:05:34.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:05:34.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:05:34.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:05:34.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:05:34.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:05:34.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:05:34.117 [DEBUG] [Thread-69251] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:05:40.577 [DEBUG] [Thread-69254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:05:48.814 [DEBUG] [Thread-69255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:03.844 [DEBUG] [Thread-69256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:04.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:06:04.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:06:04.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:06:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 3, 12), 19.14, 27.73, 0.0, 29.71, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:06:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:03:12
2025-12-12T12:06:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:06:05.076 [DEBUG] [Thread-69257] [transport.py] [_log()] starting thread (client mode): 0xf57a9300
2025-12-12T12:06:05.076 [DEBUG] [Thread-69257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:06:05.096 [DEBUG] [Thread-69257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:06:05.096 [INFO] [Thread-69257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:06:05.100 [DEBUG] [Thread-69257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:06:05.100 [DEBUG] [Thread-69257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:06:05.100 [DEBUG] [Thread-69257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:06:05.100 [DEBUG] [Thread-69257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:05.100 [DEBUG] [Thread-69257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:05.100 [DEBUG] [Thread-69257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] client lang: <none>
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] server lang: <none>
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] kex follows: False
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] Compression: none
2025-12-12T12:06:05.101 [DEBUG] [Thread-69257] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:06:05.118 [DEBUG] [Thread-69257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:06:05.118 [DEBUG] [Thread-69257] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:06:05.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:06:05.120 [DEBUG] [Thread-69257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:06:05.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:06:05.122 [DEBUG] [Thread-69257] [transport.py] [_log()] userauth is OK
2025-12-12T12:06:05.122 [DEBUG] [Thread-69257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:06:05.122 [DEBUG] [Thread-69257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:06:05.123 [DEBUG] [Thread-69257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:06:05.123 [DEBUG] [Thread-69257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:06:05.144 [INFO] [Thread-69257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:06:05.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:06:05.800 [DEBUG] [Thread-69257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:06:05.800 [DEBUG] [Thread-69257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:06:05.800 [DEBUG] [Thread-69257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:06:05.841 [DEBUG] [Thread-69257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:06:05.841 [DEBUG] [Thread-69257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:06:05.843 [DEBUG] [Thread-69257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:06:05.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:06:05.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:06:05.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:06:05.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:06:05.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:06:05.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:06:05.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:06:05.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:06:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:06:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.420235 -999.00  +19.80  29.53     31   +2.60 1 2 1 1 1   888    0 19.50 132.01 ----- 36.4 29.5 323.9 40.5 25.2 -22.3 24.3 -23.2 23.7 -19.8 24.4 -20.5
2025-12-12T12:06:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:06:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:06:05.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.420235
2025-12-12T12:06:05.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:06:05.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:06:05.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:06:05.867 [DEBUG] [Thread-69257] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:06:05.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:06:05.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:06:05.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:03:12', tmtdew=19.14, humidity=27.73, cloud=0.0, wind=29.71, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:05:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:06:05.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:06:05.958 [DEBUG] [Thread-69260] [transport.py] [_log()] starting thread (client mode): 0xf81f22f0
2025-12-12T12:06:05.958 [DEBUG] [Thread-69260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:06:05.973 [DEBUG] [Thread-69260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:06:05.973 [INFO] [Thread-69260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:06:05.981 [DEBUG] [Thread-69260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] client lang: <none>
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] server lang: <none>
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] kex follows: False
2025-12-12T12:06:05.982 [DEBUG] [Thread-69260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:06:05.983 [DEBUG] [Thread-69260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:06:05.983 [DEBUG] [Thread-69260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:06:05.983 [DEBUG] [Thread-69260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:06:05.983 [DEBUG] [Thread-69260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:06:05.983 [DEBUG] [Thread-69260] [transport.py] [_log()] Compression: none
2025-12-12T12:06:05.983 [DEBUG] [Thread-69260] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:06:06.045 [DEBUG] [Thread-69260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:06:06.045 [DEBUG] [Thread-69260] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:06:06.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:06:06.046 [DEBUG] [Thread-69260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:06:06.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:06:06.104 [DEBUG] [Thread-69260] [transport.py] [_log()] userauth is OK
2025-12-12T12:06:06.104 [DEBUG] [Thread-69260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:06:06.104 [DEBUG] [Thread-69260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:06:06.104 [DEBUG] [Thread-69260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:06:06.104 [DEBUG] [Thread-69260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:06:06.124 [INFO] [Thread-69260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:06:06.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:06:06.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:06:06.983 [DEBUG] [Thread-69260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:06:06.983 [DEBUG] [Thread-69260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:06:07.035 [DEBUG] [Thread-69260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:06:07.035 [DEBUG] [Thread-69260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:06:07.046 [DEBUG] [Thread-69260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:06:07.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:06:07.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:06:07.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:06:07.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:06:07.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:06:07.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:06:07.087 [DEBUG] [Thread-69260] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:06:18.874 [DEBUG] [Thread-69262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:32.451 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:32.452 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:33.907 [DEBUG] [Thread-69263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:37.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:06:37.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:06:37.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:06:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 3, 12), 19.14, 27.73, 0.0, 29.71, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:06:37.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:03:12
2025-12-12T12:06:37.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:06:38.026 [DEBUG] [Thread-69264] [transport.py] [_log()] starting thread (client mode): 0xf813f760
2025-12-12T12:06:38.026 [DEBUG] [Thread-69264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:06:38.047 [DEBUG] [Thread-69264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:06:38.047 [INFO] [Thread-69264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] client lang: <none>
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] server lang: <none>
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] kex follows: False
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] Compression: none
2025-12-12T12:06:38.051 [DEBUG] [Thread-69264] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:06:38.070 [DEBUG] [Thread-69264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:06:38.071 [DEBUG] [Thread-69264] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:06:38.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:06:38.072 [DEBUG] [Thread-69264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:06:38.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:06:38.074 [DEBUG] [Thread-69264] [transport.py] [_log()] userauth is OK
2025-12-12T12:06:38.074 [DEBUG] [Thread-69264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:06:38.074 [DEBUG] [Thread-69264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:06:38.074 [DEBUG] [Thread-69264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:06:38.074 [DEBUG] [Thread-69264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:06:38.114 [INFO] [Thread-69264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:06:38.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:06:38.752 [DEBUG] [Thread-69264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:06:38.752 [DEBUG] [Thread-69264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:06:38.753 [DEBUG] [Thread-69264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:06:38.793 [DEBUG] [Thread-69264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:06:38.794 [DEBUG] [Thread-69264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:06:38.797 [DEBUG] [Thread-69264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:06:38.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:06:38.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:06:38.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:06:38.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:06:38.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:06:38.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:06:38.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:06:38.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:06:38.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:06:38.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.420582 -999.00  +19.70  33.61     32   +2.70 1 2 2 1 1   888    0 20.15 145.31 ----- 25.0 33.6 332.8 42.5 25.2 -23.2 24.2 -23.5 23.8 -20.6 24.4 -21.1
2025-12-12T12:06:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:06:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:06:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.420582
2025-12-12T12:06:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:06:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:06:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:06:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:06:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:06:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:03:12', tmtdew=19.14, humidity=27.73, cloud=0.0, wind=29.71, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:05:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:06:38.821 [DEBUG] [Thread-69264] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:06:38.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:06:38.917 [DEBUG] [Thread-69267] [transport.py] [_log()] starting thread (client mode): 0xf813d3f0
2025-12-12T12:06:38.917 [DEBUG] [Thread-69267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:06:38.932 [DEBUG] [Thread-69267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:06:38.932 [INFO] [Thread-69267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:06:38.939 [DEBUG] [Thread-69267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] client lang: <none>
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] server lang: <none>
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] kex follows: False
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:06:38.940 [DEBUG] [Thread-69267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:06:38.941 [DEBUG] [Thread-69267] [transport.py] [_log()] Compression: none
2025-12-12T12:06:38.941 [DEBUG] [Thread-69267] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:06:39.000 [DEBUG] [Thread-69267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:06:39.000 [DEBUG] [Thread-69267] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:06:39.001 [DEBUG] [Thread-69267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:06:39.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:06:39.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:06:39.055 [DEBUG] [Thread-69267] [transport.py] [_log()] userauth is OK
2025-12-12T12:06:39.055 [DEBUG] [Thread-69267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:06:39.056 [DEBUG] [Thread-69267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:06:39.056 [DEBUG] [Thread-69267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:06:39.056 [DEBUG] [Thread-69267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:06:39.073 [INFO] [Thread-69267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:06:39.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:06:39.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:06:39.968 [DEBUG] [Thread-69267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:06:39.968 [DEBUG] [Thread-69267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:06:40.016 [DEBUG] [Thread-69267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:06:40.016 [DEBUG] [Thread-69267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:06:40.025 [DEBUG] [Thread-69267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:06:40.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:06:40.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:06:40.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:06:40.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:06:40.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:06:40.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:06:40.062 [DEBUG] [Thread-69267] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:06:40.623 [DEBUG] [Thread-69269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:06:48.938 [DEBUG] [Thread-69270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:03.972 [DEBUG] [Thread-69271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:10.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:07:10.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:07:10.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:07:10.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 3, 12), 19.14, 27.73, 0.0, 29.71, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:07:10.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:03:12
2025-12-12T12:07:10.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:07:11.030 [DEBUG] [Thread-69272] [transport.py] [_log()] starting thread (client mode): 0xf813c850
2025-12-12T12:07:11.030 [DEBUG] [Thread-69272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:07:11.049 [DEBUG] [Thread-69272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:07:11.049 [INFO] [Thread-69272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:07:11.052 [DEBUG] [Thread-69272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:07:11.052 [DEBUG] [Thread-69272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:07:11.052 [DEBUG] [Thread-69272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:07:11.052 [DEBUG] [Thread-69272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] client lang: <none>
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] server lang: <none>
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] kex follows: False
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] Compression: none
2025-12-12T12:07:11.053 [DEBUG] [Thread-69272] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:07:11.068 [DEBUG] [Thread-69272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:07:11.068 [DEBUG] [Thread-69272] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:07:11.069 [DEBUG] [Thread-69272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:07:11.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:07:11.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:07:11.071 [DEBUG] [Thread-69272] [transport.py] [_log()] userauth is OK
2025-12-12T12:07:11.071 [DEBUG] [Thread-69272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:07:11.071 [DEBUG] [Thread-69272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:07:11.071 [DEBUG] [Thread-69272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:07:11.071 [DEBUG] [Thread-69272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:07:11.096 [INFO] [Thread-69272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:07:11.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:07:11.715 [DEBUG] [Thread-69272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:07:11.715 [DEBUG] [Thread-69272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:07:11.715 [DEBUG] [Thread-69272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:07:11.756 [DEBUG] [Thread-69272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:07:11.756 [DEBUG] [Thread-69272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:07:11.759 [DEBUG] [Thread-69272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:07:11.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:07:11.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:07:11.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:07:11.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:07:11.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:07:11.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:07:11.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:07:11.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:07:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:07:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.421276 -999.00  +18.90  40.82     35   +3.10 1 2 2 1 1   888    0 20.29 148.57 ----- 37.7 40.8 311.0 46.6 25.0 -23.5 24.1 -22.6 23.6 -21.0 24.3 -21.4
2025-12-12T12:07:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:07:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:07:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.421276
2025-12-12T12:07:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:07:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:07:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:07:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:07:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:07:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:03:12', tmtdew=19.14, humidity=27.73, cloud=0.0, wind=29.71, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:06:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:07:11.780 [DEBUG] [Thread-69272] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:07:11.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:07:11.878 [DEBUG] [Thread-69275] [transport.py] [_log()] starting thread (client mode): 0xf813e080
2025-12-12T12:07:11.878 [DEBUG] [Thread-69275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:07:11.898 [DEBUG] [Thread-69275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:07:11.898 [INFO] [Thread-69275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:07:11.905 [DEBUG] [Thread-69275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:07:11.906 [DEBUG] [Thread-69275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:07:11.906 [DEBUG] [Thread-69275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:07:11.906 [DEBUG] [Thread-69275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:11.906 [DEBUG] [Thread-69275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:11.906 [DEBUG] [Thread-69275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:11.906 [DEBUG] [Thread-69275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] client lang: <none>
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] server lang: <none>
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] kex follows: False
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] Compression: none
2025-12-12T12:07:11.907 [DEBUG] [Thread-69275] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:07:11.963 [DEBUG] [Thread-69275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:07:11.964 [DEBUG] [Thread-69275] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:07:11.964 [DEBUG] [Thread-69275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:07:11.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:07:11.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:07:12.019 [DEBUG] [Thread-69275] [transport.py] [_log()] userauth is OK
2025-12-12T12:07:12.020 [DEBUG] [Thread-69275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:07:12.020 [DEBUG] [Thread-69275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:07:12.020 [DEBUG] [Thread-69275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:07:12.020 [DEBUG] [Thread-69275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:07:12.039 [INFO] [Thread-69275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:07:12.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:07:12.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:07:12.864 [DEBUG] [Thread-69275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:07:12.865 [DEBUG] [Thread-69275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:07:12.918 [DEBUG] [Thread-69275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:07:12.918 [DEBUG] [Thread-69275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:07:12.927 [DEBUG] [Thread-69275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:07:12.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:07:12.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:07:12.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
2025-12-12T12:07:12.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:07:12.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:07:12.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:07:12.961 [DEBUG] [Thread-69275] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:07:19.002 [DEBUG] [Thread-69277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:32.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:32.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:34.051 [DEBUG] [Thread-69278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:40.669 [DEBUG] [Thread-69279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:07:42.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:07:42.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:07:42.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:07:43.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 3, 12), 19.14, 27.73, 0.0, 29.71, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:07:43.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:03:12
2025-12-12T12:07:43.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:07:43.909 [DEBUG] [Thread-69280] [transport.py] [_log()] starting thread (client mode): 0xf81f18d0
2025-12-12T12:07:43.909 [DEBUG] [Thread-69280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:07:43.930 [DEBUG] [Thread-69280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:07:43.930 [INFO] [Thread-69280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] client lang: <none>
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] server lang: <none>
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] kex follows: False
2025-12-12T12:07:43.935 [DEBUG] [Thread-69280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:07:43.936 [DEBUG] [Thread-69280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:07:43.936 [DEBUG] [Thread-69280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:07:43.936 [DEBUG] [Thread-69280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:07:43.936 [DEBUG] [Thread-69280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:07:43.936 [DEBUG] [Thread-69280] [transport.py] [_log()] Compression: none
2025-12-12T12:07:43.936 [DEBUG] [Thread-69280] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:07:43.955 [DEBUG] [Thread-69280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:07:43.956 [DEBUG] [Thread-69280] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:07:43.956 [DEBUG] [Thread-69280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:07:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:07:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:07:43.958 [DEBUG] [Thread-69280] [transport.py] [_log()] userauth is OK
2025-12-12T12:07:43.958 [DEBUG] [Thread-69280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:07:43.958 [DEBUG] [Thread-69280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:07:43.959 [DEBUG] [Thread-69280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:07:43.959 [DEBUG] [Thread-69280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:07:43.990 [INFO] [Thread-69280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:07:43.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:07:44.630 [DEBUG] [Thread-69280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:07:44.630 [DEBUG] [Thread-69280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:07:44.630 [DEBUG] [Thread-69280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:07:44.671 [DEBUG] [Thread-69280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:07:44.671 [DEBUG] [Thread-69280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:07:44.673 [DEBUG] [Thread-69280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:07:44.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:07:44.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:07:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:07:44.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:07:44.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:07:44.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:07:44.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:07:44.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:07:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:07:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.421624 -999.00  +19.10  40.46     34   +3.20 1 2 2 1 1   888    0 19.74 140.21 ----- 40.2 40.5 310.6 42.5 25.1 -23.3 24.1 -23.2 23.6 -19.7 24.4 -21.4
2025-12-12T12:07:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:07:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:07:44.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.421624
2025-12-12T12:07:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:07:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:07:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:07:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:07:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:07:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:03:12', tmtdew=19.14, humidity=27.73, cloud=0.0, wind=29.71, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:07:08.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:07:44.699 [DEBUG] [Thread-69280] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:07:44.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:07:44.797 [DEBUG] [Thread-69283] [transport.py] [_log()] starting thread (client mode): 0xf57cb520
2025-12-12T12:07:44.797 [DEBUG] [Thread-69283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:07:44.811 [DEBUG] [Thread-69283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:07:44.811 [INFO] [Thread-69283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:44.819 [DEBUG] [Thread-69283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] client lang: <none>
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] server lang: <none>
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] kex follows: False
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] Compression: none
2025-12-12T12:07:44.820 [DEBUG] [Thread-69283] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:07:44.875 [DEBUG] [Thread-69283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:07:44.875 [DEBUG] [Thread-69283] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:07:44.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:07:44.876 [DEBUG] [Thread-69283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:07:44.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:07:44.931 [DEBUG] [Thread-69283] [transport.py] [_log()] userauth is OK
2025-12-12T12:07:44.931 [DEBUG] [Thread-69283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:07:44.932 [DEBUG] [Thread-69283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:07:44.932 [DEBUG] [Thread-69283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:07:44.932 [DEBUG] [Thread-69283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:07:44.951 [INFO] [Thread-69283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:07:44.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:07:44.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:07:45.765 [DEBUG] [Thread-69283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:07:45.765 [DEBUG] [Thread-69283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:07:45.813 [DEBUG] [Thread-69283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:07:45.813 [DEBUG] [Thread-69283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:07:45.822 [DEBUG] [Thread-69283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:07:45.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:07:45.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:07:45.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:07:45.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:07:45.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:07:45.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:07:45.857 [DEBUG] [Thread-69283] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:07:49.081 [DEBUG] [Thread-69285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:04.124 [DEBUG] [Thread-69286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:15.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:08:15.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:08:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:08:16.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 3, 12), 19.14, 27.73, 0.0, 29.71, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:08:16.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:03:12
2025-12-12T12:08:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:08:16.806 [DEBUG] [Thread-69287] [transport.py] [_log()] starting thread (client mode): 0xfabc68c0
2025-12-12T12:08:16.806 [DEBUG] [Thread-69287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:08:16.827 [DEBUG] [Thread-69287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:08:16.827 [INFO] [Thread-69287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:08:16.829 [DEBUG] [Thread-69287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] client lang: <none>
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] server lang: <none>
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] kex follows: False
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] Compression: none
2025-12-12T12:08:16.830 [DEBUG] [Thread-69287] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:08:16.845 [DEBUG] [Thread-69287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:08:16.846 [DEBUG] [Thread-69287] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:08:16.847 [DEBUG] [Thread-69287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:08:16.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:08:16.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:08:16.849 [DEBUG] [Thread-69287] [transport.py] [_log()] userauth is OK
2025-12-12T12:08:16.849 [DEBUG] [Thread-69287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:08:16.849 [DEBUG] [Thread-69287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:08:16.850 [DEBUG] [Thread-69287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:08:16.850 [DEBUG] [Thread-69287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:08:16.875 [INFO] [Thread-69287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:08:16.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:08:17.524 [DEBUG] [Thread-69287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:08:17.524 [DEBUG] [Thread-69287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:08:17.524 [DEBUG] [Thread-69287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:08:17.565 [DEBUG] [Thread-69287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:08:17.565 [DEBUG] [Thread-69287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:08:17.567 [DEBUG] [Thread-69287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:08:17.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:08:17.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:08:17.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:08:17.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:08:17.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:08:17.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:08:17.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.421971 -999.00  +19.40  34.60     34   +3.30 1 2 2 1 1   888    0 19.38 133.59 ----- 29.3 34.6 325.4 52.6 24.9 -23.5 24.1 -21.9 23.5 -19.8 24.3 -20.8
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.421971
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:08:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:03:12', tmtdew=19.14, humidity=27.73, cloud=0.0, wind=29.71, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:07:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:08:17.586 [DEBUG] [Thread-69287] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:08:17.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:08:19.153 [DEBUG] [Thread-69290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:32.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:32.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:34.196 [DEBUG] [Thread-69291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:40.703 [DEBUG] [Thread-69292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:08:49.224 [DEBUG] [Thread-69293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:04.258 [DEBUG] [Thread-69294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:19.289 [DEBUG] [Thread-69295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:32.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:32.877 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:34.319 [DEBUG] [Thread-69296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:40.745 [DEBUG] [Thread-69297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:09:49.349 [DEBUG] [Thread-69298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:04.382 [DEBUG] [Thread-69299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:19.413 [DEBUG] [Thread-69300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:32.298 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T12:10:33.032 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:33.033 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:34.443 [DEBUG] [Thread-69301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:40.773 [DEBUG] [Thread-69302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:10:49.471 [DEBUG] [Thread-69303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:02.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:11:02.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:11:02.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:11:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 6, 1), 19.66, 26.87, 0.0, 36.84, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:11:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:06:01
2025-12-12T12:11:03.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:11:03.258 [DEBUG] [Thread-69304] [transport.py] [_log()] starting thread (client mode): 0xfabc70a0
2025-12-12T12:11:03.258 [DEBUG] [Thread-69304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:11:03.279 [DEBUG] [Thread-69304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:11:03.279 [INFO] [Thread-69304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:11:03.282 [DEBUG] [Thread-69304] [transport.py] [_log()] client lang: <none>
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] server lang: <none>
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] kex follows: False
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] Compression: none
2025-12-12T12:11:03.283 [DEBUG] [Thread-69304] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:11:03.302 [DEBUG] [Thread-69304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:11:03.303 [DEBUG] [Thread-69304] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:11:03.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:11:03.303 [DEBUG] [Thread-69304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:11:03.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:11:03.305 [DEBUG] [Thread-69304] [transport.py] [_log()] userauth is OK
2025-12-12T12:11:03.306 [DEBUG] [Thread-69304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:11:03.306 [DEBUG] [Thread-69304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:11:03.306 [DEBUG] [Thread-69304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:11:03.306 [DEBUG] [Thread-69304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:11:03.330 [INFO] [Thread-69304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:11:03.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:11:03.981 [DEBUG] [Thread-69304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:11:03.981 [DEBUG] [Thread-69304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:11:03.981 [DEBUG] [Thread-69304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:11:04.022 [DEBUG] [Thread-69304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:11:04.022 [DEBUG] [Thread-69304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:11:04.025 [DEBUG] [Thread-69304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:11:04.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:11:04.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:11:04.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:11:04.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:11:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:11:04.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:11:04.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:11:04.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:11:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:11:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.423707 -999.00  +20.10  37.18     31   +2.80 1 2 2 1 1   888    0 19.78 130.09 ----- 47.8 37.2 329.8 49.9 25.3 -24.0 24.4 -25.3 23.9 -20.7 24.6 -21.7
2025-12-12T12:11:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:11:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:11:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.423707
2025-12-12T12:11:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:11:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:11:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:11:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:11:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:11:04.049 [DEBUG] [Thread-69304] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:11:04.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:06:01', tmtdew=19.66, humidity=26.87, cloud=0.0, wind=36.84, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:10:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:11:04.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:11:04.151 [DEBUG] [Thread-69307] [transport.py] [_log()] starting thread (client mode): 0xf57b6590
2025-12-12T12:11:04.151 [DEBUG] [Thread-69307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:11:04.168 [DEBUG] [Thread-69307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:11:04.168 [INFO] [Thread-69307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:11:04.179 [DEBUG] [Thread-69307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:11:04.179 [DEBUG] [Thread-69307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:11:04.179 [DEBUG] [Thread-69307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:11:04.179 [DEBUG] [Thread-69307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] client lang: <none>
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] server lang: <none>
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] kex follows: False
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:11:04.180 [DEBUG] [Thread-69307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:11:04.181 [DEBUG] [Thread-69307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:11:04.181 [DEBUG] [Thread-69307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:11:04.181 [DEBUG] [Thread-69307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:11:04.181 [DEBUG] [Thread-69307] [transport.py] [_log()] Compression: none
2025-12-12T12:11:04.181 [DEBUG] [Thread-69307] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:11:04.240 [DEBUG] [Thread-69307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:11:04.241 [DEBUG] [Thread-69307] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:11:04.242 [DEBUG] [Thread-69307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:11:04.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:11:04.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:11:04.299 [DEBUG] [Thread-69307] [transport.py] [_log()] userauth is OK
2025-12-12T12:11:04.299 [DEBUG] [Thread-69307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:11:04.300 [DEBUG] [Thread-69307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:11:04.300 [DEBUG] [Thread-69307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:11:04.300 [DEBUG] [Thread-69307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:11:04.318 [INFO] [Thread-69307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:11:04.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:11:04.501 [DEBUG] [Thread-69309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:05.198 [DEBUG] [Thread-69307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:11:05.198 [DEBUG] [Thread-69307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:11:05.245 [DEBUG] [Thread-69307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:11:05.245 [DEBUG] [Thread-69307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:11:05.253 [DEBUG] [Thread-69307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:11:05.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:11:05.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:11:05.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:11:05.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:11:05.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:11:05.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:11:05.284 [DEBUG] [Thread-69307] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:11:19.542 [DEBUG] [Thread-69310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:33.176 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:33.177 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:34.569 [DEBUG] [Thread-69311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:35.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:11:35.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:11:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:11:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 8, 48), 20.68, 25.11, 0.0, 26.39, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:11:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:08:48
2025-12-12T12:11:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:11:36.228 [DEBUG] [Thread-69312] [transport.py] [_log()] starting thread (client mode): 0xf81f2350
2025-12-12T12:11:36.228 [DEBUG] [Thread-69312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:11:36.248 [DEBUG] [Thread-69312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:11:36.248 [INFO] [Thread-69312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] client lang: <none>
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] server lang: <none>
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] kex follows: False
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:11:36.251 [DEBUG] [Thread-69312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:11:36.252 [DEBUG] [Thread-69312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:11:36.252 [DEBUG] [Thread-69312] [transport.py] [_log()] Compression: none
2025-12-12T12:11:36.252 [DEBUG] [Thread-69312] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:11:36.268 [DEBUG] [Thread-69312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:11:36.269 [DEBUG] [Thread-69312] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:11:36.269 [DEBUG] [Thread-69312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:11:36.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:11:36.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:11:36.271 [DEBUG] [Thread-69312] [transport.py] [_log()] userauth is OK
2025-12-12T12:11:36.271 [DEBUG] [Thread-69312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:11:36.271 [DEBUG] [Thread-69312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:11:36.271 [DEBUG] [Thread-69312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:11:36.271 [DEBUG] [Thread-69312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:11:36.294 [INFO] [Thread-69312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:11:36.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:11:36.914 [DEBUG] [Thread-69312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:11:36.914 [DEBUG] [Thread-69312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:11:36.915 [DEBUG] [Thread-69312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:11:36.955 [DEBUG] [Thread-69312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:11:36.955 [DEBUG] [Thread-69312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:11:36.958 [DEBUG] [Thread-69312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:11:36.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:11:36.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:11:36.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:11:36.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:11:36.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:11:36.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:11:36.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:11:36.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.424401 -999.00  +20.00  24.96     30   +2.00 1 2 1 1 1   888    0 19.91 128.69 ----- 15.6 25.0 337.6 44.0 25.2 -24.6 24.4 -23.3 23.8 -21.2 24.6 -23.6
2025-12-12T12:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.424401
2025-12-12T12:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:08:48', tmtdew=20.68, humidity=25.11, cloud=0.0, wind=26.39, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:11:08.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:11:36.979 [DEBUG] [Thread-69312] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:11:37.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:11:37.075 [DEBUG] [Thread-69315] [transport.py] [_log()] starting thread (client mode): 0xf81f0d90
2025-12-12T12:11:37.075 [DEBUG] [Thread-69315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:11:37.090 [DEBUG] [Thread-69315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:11:37.090 [INFO] [Thread-69315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] client lang: <none>
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] server lang: <none>
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] kex follows: False
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] Compression: none
2025-12-12T12:11:37.097 [DEBUG] [Thread-69315] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:11:37.160 [DEBUG] [Thread-69315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:11:37.161 [DEBUG] [Thread-69315] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:11:37.161 [DEBUG] [Thread-69315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:11:37.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:11:37.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:11:37.219 [DEBUG] [Thread-69315] [transport.py] [_log()] userauth is OK
2025-12-12T12:11:37.220 [DEBUG] [Thread-69315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:11:37.220 [DEBUG] [Thread-69315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:11:37.220 [DEBUG] [Thread-69315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:11:37.220 [DEBUG] [Thread-69315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:11:37.239 [INFO] [Thread-69315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:11:37.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:11:37.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:11:38.127 [DEBUG] [Thread-69315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:11:38.127 [DEBUG] [Thread-69315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:11:38.174 [DEBUG] [Thread-69315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:11:38.175 [DEBUG] [Thread-69315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:11:38.183 [DEBUG] [Thread-69315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:11:38.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:11: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')
2025-12-12T12:11:38.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:11:38.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:11:38.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:11:38.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:11:38.218 [DEBUG] [Thread-69315] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:11:40.806 [DEBUG] [Thread-69317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:11:49.603 [DEBUG] [Thread-69318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:04.648 [DEBUG] [Thread-69319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:08.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:12:08.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:12:08.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:12:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 8, 48), 20.68, 25.11, 0.0, 26.39, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:12:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:08:48
2025-12-12T12:12:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:12:09.165 [DEBUG] [Thread-69320] [transport.py] [_log()] starting thread (client mode): 0xf2d0eaa0
2025-12-12T12:12:09.165 [DEBUG] [Thread-69320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:12:09.185 [DEBUG] [Thread-69320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:12:09.185 [INFO] [Thread-69320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:12:09.188 [DEBUG] [Thread-69320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:12:09.188 [DEBUG] [Thread-69320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] client lang: <none>
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] server lang: <none>
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] kex follows: False
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:12:09.189 [DEBUG] [Thread-69320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:12:09.190 [DEBUG] [Thread-69320] [transport.py] [_log()] Compression: none
2025-12-12T12:12:09.190 [DEBUG] [Thread-69320] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:12:09.210 [DEBUG] [Thread-69320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:12:09.210 [DEBUG] [Thread-69320] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:12:09.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:12:09.212 [DEBUG] [Thread-69320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:12:09.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:12:09.214 [DEBUG] [Thread-69320] [transport.py] [_log()] userauth is OK
2025-12-12T12:12:09.214 [DEBUG] [Thread-69320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:12:09.214 [DEBUG] [Thread-69320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:12:09.214 [DEBUG] [Thread-69320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:12:09.214 [DEBUG] [Thread-69320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:12:09.237 [INFO] [Thread-69320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:12:09.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:12:09.886 [DEBUG] [Thread-69320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:12:09.886 [DEBUG] [Thread-69320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:12:09.887 [DEBUG] [Thread-69320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:12:09.927 [DEBUG] [Thread-69320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:12:09.927 [DEBUG] [Thread-69320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:12:09.930 [DEBUG] [Thread-69320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:12:09.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:12:09.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:12:09.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:12:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:12:09.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:12:09.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:12:09.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:12:09.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:12:09.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:12:09.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.424749 -999.00  +20.00  43.50     29   +1.80 1 2 2 1 1   888    0 19.96 124.57 ----- 38.6 43.5 326.9 50.6 25.2 -24.9 24.2 -24.5 23.9 -21.5 24.6 -22.5
2025-12-12T12:12:09.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:12:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:12:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.424749
2025-12-12T12:12:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:12:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:12:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:12:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:12:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:12:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:08:48', tmtdew=20.68, humidity=25.11, cloud=0.0, wind=26.39, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:11:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:12:09.953 [DEBUG] [Thread-69320] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:12:10.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:12:10.047 [DEBUG] [Thread-69323] [transport.py] [_log()] starting thread (client mode): 0xf57c8430
2025-12-12T12:12:10.047 [DEBUG] [Thread-69323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:12:10.064 [DEBUG] [Thread-69323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:12:10.064 [INFO] [Thread-69323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:12:10.071 [DEBUG] [Thread-69323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:12:10.072 [DEBUG] [Thread-69323] [transport.py] [_log()] client lang: <none>
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] server lang: <none>
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] kex follows: False
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] Compression: none
2025-12-12T12:12:10.073 [DEBUG] [Thread-69323] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:12:10.131 [DEBUG] [Thread-69323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:12:10.131 [DEBUG] [Thread-69323] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:12:10.132 [DEBUG] [Thread-69323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:12:10.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:12:10.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:12:10.188 [DEBUG] [Thread-69323] [transport.py] [_log()] userauth is OK
2025-12-12T12:12:10.189 [DEBUG] [Thread-69323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:12:10.189 [DEBUG] [Thread-69323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:12:10.189 [DEBUG] [Thread-69323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:12:10.189 [DEBUG] [Thread-69323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:12:10.209 [INFO] [Thread-69323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:12:10.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:12:10.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:12:11.055 [DEBUG] [Thread-69323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:12:11.055 [DEBUG] [Thread-69323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:12:11.103 [DEBUG] [Thread-69323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:12:11.103 [DEBUG] [Thread-69323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:12:11.112 [DEBUG] [Thread-69323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:12:11.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:12:11.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:12:11.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:12:11.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:12:11.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:12:11.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:12:11.146 [DEBUG] [Thread-69323] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:12:19.680 [DEBUG] [Thread-69325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:33.318 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:33.319 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:34.723 [DEBUG] [Thread-69326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:40.840 [DEBUG] [Thread-69327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:12:41.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:12:41.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:12:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:12:41.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 8, 48), 20.68, 25.11, 0.0, 26.39, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:12:41.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:08:48
2025-12-12T12:12:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:12:42.108 [DEBUG] [Thread-69328] [transport.py] [_log()] starting thread (client mode): 0xf81f0190
2025-12-12T12:12:42.108 [DEBUG] [Thread-69328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:12:42.128 [DEBUG] [Thread-69328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:12:42.128 [INFO] [Thread-69328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] client lang: <none>
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] server lang: <none>
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] kex follows: False
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] Compression: none
2025-12-12T12:12:42.132 [DEBUG] [Thread-69328] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:12:42.151 [DEBUG] [Thread-69328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:12:42.151 [DEBUG] [Thread-69328] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:12:42.152 [DEBUG] [Thread-69328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:12:42.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:12:42.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:12:42.154 [DEBUG] [Thread-69328] [transport.py] [_log()] userauth is OK
2025-12-12T12:12:42.154 [DEBUG] [Thread-69328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:12:42.154 [DEBUG] [Thread-69328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:12:42.154 [DEBUG] [Thread-69328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:12:42.154 [DEBUG] [Thread-69328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:12:42.179 [INFO] [Thread-69328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:12:42.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:12:42.796 [DEBUG] [Thread-69328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:12:42.796 [DEBUG] [Thread-69328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:12:42.797 [DEBUG] [Thread-69328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:12:42.838 [DEBUG] [Thread-69328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:12:42.838 [DEBUG] [Thread-69328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:12:42.841 [DEBUG] [Thread-69328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:12:42.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:12:42.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:12:42.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:12:42.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:12:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:12:42.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:12:42.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.425095 -999.00  +20.10  43.39     29   +1.90 1 2 2 1 1   888    0 19.81 114.18 ----- 49.8 43.4 313.3 56.8 25.2 -24.7 24.3 -24.5 24.0 -20.9 24.6 -22.2
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.425095
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:12:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:08:48', tmtdew=20.68, humidity=25.11, cloud=0.0, wind=26.39, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:12:08.208', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:12:42.859 [DEBUG] [Thread-69328] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:12:42.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:12:42.955 [DEBUG] [Thread-69331] [transport.py] [_log()] starting thread (client mode): 0xf813e110
2025-12-12T12:12:42.955 [DEBUG] [Thread-69331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:12:42.969 [DEBUG] [Thread-69331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:12:42.969 [INFO] [Thread-69331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:12:42.976 [DEBUG] [Thread-69331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] client lang: <none>
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] server lang: <none>
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] kex follows: False
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] Compression: none
2025-12-12T12:12:42.977 [DEBUG] [Thread-69331] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:12:43.035 [DEBUG] [Thread-69331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:12:43.036 [DEBUG] [Thread-69331] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:12:43.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:12:43.037 [DEBUG] [Thread-69331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:12:43.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:12:43.091 [DEBUG] [Thread-69331] [transport.py] [_log()] userauth is OK
2025-12-12T12:12:43.092 [DEBUG] [Thread-69331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:12:43.092 [DEBUG] [Thread-69331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:12:43.092 [DEBUG] [Thread-69331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:12:43.092 [DEBUG] [Thread-69331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:12:43.111 [INFO] [Thread-69331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:12:43.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:12:43.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:12:43.972 [DEBUG] [Thread-69331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:12:43.972 [DEBUG] [Thread-69331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:12:44.019 [DEBUG] [Thread-69331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:12:44.020 [DEBUG] [Thread-69331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:12:44.028 [DEBUG] [Thread-69331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:12:44.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:12: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')
2025-12-12T12:12:44.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:12:44.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:12:44.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:12:44.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:12:44.062 [DEBUG] [Thread-69331] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:12:49.750 [DEBUG] [Thread-69333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:04.799 [DEBUG] [Thread-69334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:14.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:13:14.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:13:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:13:14.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 8, 48), 20.68, 25.11, 0.0, 26.39, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:13:14.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:08:48
2025-12-12T12:13:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:13:15.043 [DEBUG] [Thread-69335] [transport.py] [_log()] starting thread (client mode): 0xfabc6200
2025-12-12T12:13:15.044 [DEBUG] [Thread-69335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:13:15.065 [DEBUG] [Thread-69335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:13:15.065 [INFO] [Thread-69335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] client lang: <none>
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] server lang: <none>
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] kex follows: False
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] Compression: none
2025-12-12T12:13:15.068 [DEBUG] [Thread-69335] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:13:15.085 [DEBUG] [Thread-69335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:13:15.085 [DEBUG] [Thread-69335] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:13:15.085 [DEBUG] [Thread-69335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:13:15.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:13:15.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:13:15.086 [DEBUG] [Thread-69335] [transport.py] [_log()] userauth is OK
2025-12-12T12:13:15.086 [DEBUG] [Thread-69335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:13:15.086 [DEBUG] [Thread-69335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:13:15.086 [DEBUG] [Thread-69335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:13:15.086 [DEBUG] [Thread-69335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:13:15.097 [INFO] [Thread-69335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:13:15.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:13:15.723 [DEBUG] [Thread-69335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:13:15.723 [DEBUG] [Thread-69335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:13:15.723 [DEBUG] [Thread-69335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:13:15.764 [DEBUG] [Thread-69335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:13:15.764 [DEBUG] [Thread-69335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:13:15.766 [DEBUG] [Thread-69335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:13:15.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:13:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:13:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:13:15.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:13:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:13:15.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:13:15.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.425443 -999.00  +20.40  38.71     28   +1.70 1 1 2 1 1   888    0 19.78 121.99 ----- 46.7 38.7 320.0 57.8 25.0 -24.1 24.3 -24.3 23.7 -24.1 24.5 -22.2
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.425443
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:13:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:08:48', tmtdew=20.68, humidity=25.11, cloud=0.0, wind=26.39, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:12:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:13:15.785 [DEBUG] [Thread-69335] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:13:15.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:13:15.869 [DEBUG] [Thread-69338] [transport.py] [_log()] starting thread (client mode): 0xfabc5420
2025-12-12T12:13:15.870 [DEBUG] [Thread-69338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:13:15.884 [DEBUG] [Thread-69338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:13:15.885 [INFO] [Thread-69338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] client lang: <none>
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] server lang: <none>
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] kex follows: False
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] Compression: none
2025-12-12T12:13:15.892 [DEBUG] [Thread-69338] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:13:15.950 [DEBUG] [Thread-69338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:13:15.950 [DEBUG] [Thread-69338] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:13:15.950 [DEBUG] [Thread-69338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:13:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:13:15.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:13:16.007 [DEBUG] [Thread-69338] [transport.py] [_log()] userauth is OK
2025-12-12T12:13:16.007 [DEBUG] [Thread-69338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:13:16.007 [DEBUG] [Thread-69338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:13:16.007 [DEBUG] [Thread-69338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:13:16.007 [DEBUG] [Thread-69338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:13:16.025 [INFO] [Thread-69338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:13:16.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:13:16.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:13:16.858 [DEBUG] [Thread-69338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:13:16.858 [DEBUG] [Thread-69338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:13:16.906 [DEBUG] [Thread-69338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:13:16.906 [DEBUG] [Thread-69338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:13:16.914 [DEBUG] [Thread-69338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:13:16.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:13:16.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:13: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
2025-12-12T12:13:16.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:13:16.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:13:16.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:13:16.948 [DEBUG] [Thread-69338] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:13:19.828 [DEBUG] [Thread-69340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:33.459 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:33.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:34.881 [DEBUG] [Thread-69341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:40.873 [DEBUG] [Thread-69342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:13:46.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:13:46.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:13:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:13:47.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 8, 48), 20.68, 25.11, 0.0, 26.39, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:13:47.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:08:48
2025-12-12T12:13:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:13:47.866 [DEBUG] [Thread-69343] [transport.py] [_log()] starting thread (client mode): 0xfabc6710
2025-12-12T12:13:47.866 [DEBUG] [Thread-69343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:13:47.886 [DEBUG] [Thread-69343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:13:47.886 [INFO] [Thread-69343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] client lang: <none>
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] server lang: <none>
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] kex follows: False
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] Compression: none
2025-12-12T12:13:47.889 [DEBUG] [Thread-69343] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:13:47.906 [DEBUG] [Thread-69343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:13:47.906 [DEBUG] [Thread-69343] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:13:47.906 [DEBUG] [Thread-69343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:13:47.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:13:47.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:13:47.907 [DEBUG] [Thread-69343] [transport.py] [_log()] userauth is OK
2025-12-12T12:13:47.907 [DEBUG] [Thread-69343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:13:47.907 [DEBUG] [Thread-69343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:13:47.907 [DEBUG] [Thread-69343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:13:47.907 [DEBUG] [Thread-69343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:13:47.916 [INFO] [Thread-69343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:13:47.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:13:48.563 [DEBUG] [Thread-69343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:13:48.564 [DEBUG] [Thread-69343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:13:48.564 [DEBUG] [Thread-69343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:13:48.605 [DEBUG] [Thread-69343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:13:48.605 [DEBUG] [Thread-69343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:13:48.608 [DEBUG] [Thread-69343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:13:48.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:13:48.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:13:48.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:13:48.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:13:48.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:13:48.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:13:48.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:13:48.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:13:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:13:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.425790 -999.00  +20.20  42.55     28   +1.60 1 1 2 1 1   888    0 20.10 126.62 ----- 46.5 42.5 329.1 55.1 25.0 -23.8 24.2 -23.2 23.6 -23.8 24.5 -21.9
2025-12-12T12:13:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:13:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:13:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.425790
2025-12-12T12:13:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:13:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:13:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:13:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:13:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:13:48.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:08:48', tmtdew=20.68, humidity=25.11, cloud=0.0, wind=26.39, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:13:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:13:48.633 [DEBUG] [Thread-69343] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:13:48.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:13:48.730 [DEBUG] [Thread-69346] [transport.py] [_log()] starting thread (client mode): 0xfabc6740
2025-12-12T12:13:48.730 [DEBUG] [Thread-69346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:13:48.748 [DEBUG] [Thread-69346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:13:48.748 [INFO] [Thread-69346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:48.755 [DEBUG] [Thread-69346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] client lang: <none>
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] server lang: <none>
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] kex follows: False
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] Compression: none
2025-12-12T12:13:48.756 [DEBUG] [Thread-69346] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:13:48.818 [DEBUG] [Thread-69346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:13:48.818 [DEBUG] [Thread-69346] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:13:48.818 [DEBUG] [Thread-69346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:13:48.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:13:48.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:13:48.875 [DEBUG] [Thread-69346] [transport.py] [_log()] userauth is OK
2025-12-12T12:13:48.876 [DEBUG] [Thread-69346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:13:48.876 [DEBUG] [Thread-69346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:13:48.876 [DEBUG] [Thread-69346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:13:48.876 [DEBUG] [Thread-69346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:13:48.895 [INFO] [Thread-69346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:13:48.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:13:48.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:13:49.731 [DEBUG] [Thread-69346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:13:49.731 [DEBUG] [Thread-69346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:13:49.779 [DEBUG] [Thread-69346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:13:49.779 [DEBUG] [Thread-69346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:13:49.788 [DEBUG] [Thread-69346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:13:49.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:13:49.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:13:49.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:13:49.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:13:49.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:13:49.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:13:49.821 [DEBUG] [Thread-69346] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:13:49.910 [DEBUG] [Thread-69348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:04.964 [DEBUG] [Thread-69349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:19.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:14:19.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:14:19.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:14:19.993 [DEBUG] [Thread-69350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:20.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 11, 36), 20.95, 24.48, 0.0, 46.96, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:14:20.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:11:36
2025-12-12T12:14:20.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:14:20.770 [DEBUG] [Thread-69351] [transport.py] [_log()] starting thread (client mode): 0xfabc5c60
2025-12-12T12:14:20.770 [DEBUG] [Thread-69351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:14:20.790 [DEBUG] [Thread-69351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:14:20.790 [INFO] [Thread-69351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:14:20.793 [DEBUG] [Thread-69351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:14:20.793 [DEBUG] [Thread-69351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] client lang: <none>
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] server lang: <none>
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] kex follows: False
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] Compression: none
2025-12-12T12:14:20.794 [DEBUG] [Thread-69351] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:14:20.812 [DEBUG] [Thread-69351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:14:20.812 [DEBUG] [Thread-69351] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:14:20.812 [DEBUG] [Thread-69351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:14:20.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:14:20.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:14:20.814 [DEBUG] [Thread-69351] [transport.py] [_log()] userauth is OK
2025-12-12T12:14:20.815 [DEBUG] [Thread-69351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:14:20.815 [DEBUG] [Thread-69351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:14:20.815 [DEBUG] [Thread-69351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:14:20.815 [DEBUG] [Thread-69351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:14:20.832 [INFO] [Thread-69351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:14:20.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:14:21.498 [DEBUG] [Thread-69351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:14:21.498 [DEBUG] [Thread-69351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:14:21.499 [DEBUG] [Thread-69351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:14:21.539 [DEBUG] [Thread-69351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:14:21.539 [DEBUG] [Thread-69351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:14:21.542 [DEBUG] [Thread-69351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:14:21.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:14:21.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:14:21.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:14:21.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:14:21.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:14:21.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:14:21.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:14:21.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:14:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:14:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.426137 -999.00  +20.00  43.44     29   +1.80 1 1 2 1 1   888    0 20.23 132.98 ----- 36.3 43.4 330.6 57.0 25.0 -23.2 24.3 -24.1 23.8 -22.5 24.5 -21.5
2025-12-12T12:14:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:14:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:14:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.426137
2025-12-12T12:14:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:14:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:14:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:14:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:14:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:14:21.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:11:36', tmtdew=20.95, humidity=24.48, cloud=0.0, wind=46.96, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:13:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:14:21.567 [DEBUG] [Thread-69351] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:14:21.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:14:21.673 [DEBUG] [Thread-69354] [transport.py] [_log()] starting thread (client mode): 0xf81c2440
2025-12-12T12:14:21.674 [DEBUG] [Thread-69354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:14:21.689 [DEBUG] [Thread-69354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:14:21.689 [INFO] [Thread-69354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:21.696 [DEBUG] [Thread-69354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] client lang: <none>
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] server lang: <none>
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] kex follows: False
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] Compression: none
2025-12-12T12:14:21.697 [DEBUG] [Thread-69354] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:14:21.755 [DEBUG] [Thread-69354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:14:21.755 [DEBUG] [Thread-69354] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:14:21.756 [DEBUG] [Thread-69354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:14:21.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:14:21.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:14:21.811 [DEBUG] [Thread-69354] [transport.py] [_log()] userauth is OK
2025-12-12T12:14:21.812 [DEBUG] [Thread-69354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:14:21.812 [DEBUG] [Thread-69354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:14:21.812 [DEBUG] [Thread-69354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:14:21.812 [DEBUG] [Thread-69354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:14:21.830 [INFO] [Thread-69354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:14:21.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:14:21.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:14:22.675 [DEBUG] [Thread-69354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:14:22.675 [DEBUG] [Thread-69354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:14:22.723 [DEBUG] [Thread-69354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:14:22.723 [DEBUG] [Thread-69354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:14:22.732 [DEBUG] [Thread-69354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:14:22.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:14:22.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:14:22.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:14:22.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:14:22.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:14:22.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:14:22.764 [DEBUG] [Thread-69354] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:14:33.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:33.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:35.019 [DEBUG] [Thread-69356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:40.913 [DEBUG] [Thread-69357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:50.077 [DEBUG] [Thread-69358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:14:52.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:14:52.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:14:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:14:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 11, 36), 20.95, 24.48, 0.0, 46.96, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:14:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:11:36
2025-12-12T12:14:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:14:53.725 [DEBUG] [Thread-69359] [transport.py] [_log()] starting thread (client mode): 0xf570cb50
2025-12-12T12:14:53.725 [DEBUG] [Thread-69359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:14:53.746 [DEBUG] [Thread-69359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:14:53.746 [INFO] [Thread-69359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] client lang: <none>
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] server lang: <none>
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] kex follows: False
2025-12-12T12:14:53.750 [DEBUG] [Thread-69359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:14:53.751 [DEBUG] [Thread-69359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:14:53.751 [DEBUG] [Thread-69359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:14:53.751 [DEBUG] [Thread-69359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:14:53.751 [DEBUG] [Thread-69359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:14:53.751 [DEBUG] [Thread-69359] [transport.py] [_log()] Compression: none
2025-12-12T12:14:53.751 [DEBUG] [Thread-69359] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:14:53.769 [DEBUG] [Thread-69359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:14:53.769 [DEBUG] [Thread-69359] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:14:53.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:14:53.770 [DEBUG] [Thread-69359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:14:53.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:14:53.772 [DEBUG] [Thread-69359] [transport.py] [_log()] userauth is OK
2025-12-12T12:14:53.773 [DEBUG] [Thread-69359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:14:53.773 [DEBUG] [Thread-69359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:14:53.773 [DEBUG] [Thread-69359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:14:53.773 [DEBUG] [Thread-69359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:14:53.791 [INFO] [Thread-69359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:14:53.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:14:54.402 [DEBUG] [Thread-69359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:14:54.402 [DEBUG] [Thread-69359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:14:54.402 [DEBUG] [Thread-69359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:14:54.443 [DEBUG] [Thread-69359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:14:54.443 [DEBUG] [Thread-69359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:14:54.446 [DEBUG] [Thread-69359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:14:54.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:14:54.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:14:54.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:14:54.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:14:54.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:14:54.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:14:54.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:14:54.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:14:54.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:14:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.426484 -999.00  +20.10  34.31     30   +2.10 1 2 2 1 1   888    0 20.07 130.83 ----- 37.7 34.3 313.8 54.4 25.1 -23.5 24.3 -23.6 23.9 -20.6 24.5 -21.4
2025-12-12T12:14:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:14:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:14:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.426484
2025-12-12T12:14:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:14:54.469 [DEBUG] [Thread-69359] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:14:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:14:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:14:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:14:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:14:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:11:36', tmtdew=20.95, humidity=24.48, cloud=0.0, wind=46.96, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:14:08.218', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:14:54.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:14:54.559 [DEBUG] [Thread-69362] [transport.py] [_log()] starting thread (client mode): 0xf818a320
2025-12-12T12:14:54.559 [DEBUG] [Thread-69362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:14:54.574 [DEBUG] [Thread-69362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:14:54.574 [INFO] [Thread-69362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:14:54.582 [DEBUG] [Thread-69362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:14:54.582 [DEBUG] [Thread-69362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:14:54.582 [DEBUG] [Thread-69362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:14:54.582 [DEBUG] [Thread-69362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:54.582 [DEBUG] [Thread-69362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:14:54.582 [DEBUG] [Thread-69362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] client lang: <none>
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] server lang: <none>
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] kex follows: False
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:14:54.583 [DEBUG] [Thread-69362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:14:54.584 [DEBUG] [Thread-69362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:14:54.584 [DEBUG] [Thread-69362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:14:54.584 [DEBUG] [Thread-69362] [transport.py] [_log()] Compression: none
2025-12-12T12:14:54.584 [DEBUG] [Thread-69362] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:14:54.642 [DEBUG] [Thread-69362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:14:54.643 [DEBUG] [Thread-69362] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:14:54.643 [DEBUG] [Thread-69362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:14:54.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:14:54.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:14:54.700 [DEBUG] [Thread-69362] [transport.py] [_log()] userauth is OK
2025-12-12T12:14:54.700 [DEBUG] [Thread-69362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:14:54.700 [DEBUG] [Thread-69362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:14:54.700 [DEBUG] [Thread-69362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:14:54.700 [DEBUG] [Thread-69362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:14:54.719 [INFO] [Thread-69362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:14:54.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:14:54.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:14:55.553 [DEBUG] [Thread-69362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:14:55.553 [DEBUG] [Thread-69362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:14:55.600 [DEBUG] [Thread-69362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:14:55.601 [DEBUG] [Thread-69362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:14:55.609 [DEBUG] [Thread-69362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:14:55.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:14:55.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:14:55.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:14:55.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:14:55.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:14:55.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:14:55.643 [DEBUG] [Thread-69362] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:15:05.105 [DEBUG] [Thread-69364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:20.152 [DEBUG] [Thread-69365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:15:25.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:15:25.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:15:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 11, 36), 20.95, 24.48, 0.0, 46.96, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:15:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:11:36
2025-12-12T12:15:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:15:26.613 [DEBUG] [Thread-69366] [transport.py] [_log()] starting thread (client mode): 0xf81c30d0
2025-12-12T12:15:26.613 [DEBUG] [Thread-69366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:15:26.633 [DEBUG] [Thread-69366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:15:26.633 [INFO] [Thread-69366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:15:26.635 [DEBUG] [Thread-69366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] client lang: <none>
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] server lang: <none>
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] kex follows: False
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] Compression: none
2025-12-12T12:15:26.636 [DEBUG] [Thread-69366] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:15:26.653 [DEBUG] [Thread-69366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:15:26.653 [DEBUG] [Thread-69366] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:15:26.654 [DEBUG] [Thread-69366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:15:26.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:15:26.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:15:26.656 [DEBUG] [Thread-69366] [transport.py] [_log()] userauth is OK
2025-12-12T12:15:26.656 [DEBUG] [Thread-69366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:15:26.656 [DEBUG] [Thread-69366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:15:26.656 [DEBUG] [Thread-69366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:15:26.656 [DEBUG] [Thread-69366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:15:26.689 [INFO] [Thread-69366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:15:26.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:15:27.333 [DEBUG] [Thread-69366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:15:27.333 [DEBUG] [Thread-69366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:15:27.334 [DEBUG] [Thread-69366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:15:27.374 [DEBUG] [Thread-69366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:15:27.374 [DEBUG] [Thread-69366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:15:27.377 [DEBUG] [Thread-69366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:15:27.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:15:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:15:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:15:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:15:27.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:15:27.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:15:27.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:15:27.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:15:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:15:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.427179 -999.00  +19.80  47.63     31   +2.40 1 2 2 1 1   888    0 20.42 130.96 ----- 39.8 47.6 316.8 56.2 25.1 -23.1 24.3 -23.4 23.9 -20.4 24.6 -21.3
2025-12-12T12:15:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:15:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:15:27.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.427179
2025-12-12T12:15:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:15:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:15:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:15:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:15:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:15:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:11:36', tmtdew=20.95, humidity=24.48, cloud=0.0, wind=46.96, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:15:08.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:15:27.402 [DEBUG] [Thread-69366] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:15:27.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:15:27.495 [DEBUG] [Thread-69369] [transport.py] [_log()] starting thread (client mode): 0xf81c15d0
2025-12-12T12:15:27.495 [DEBUG] [Thread-69369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:15:27.513 [DEBUG] [Thread-69369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:15:27.513 [INFO] [Thread-69369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:15:27.521 [DEBUG] [Thread-69369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:15:27.522 [DEBUG] [Thread-69369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] client lang: <none>
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] server lang: <none>
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] kex follows: False
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:15:27.523 [DEBUG] [Thread-69369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:15:27.524 [DEBUG] [Thread-69369] [transport.py] [_log()] Compression: none
2025-12-12T12:15:27.524 [DEBUG] [Thread-69369] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:15:27.583 [DEBUG] [Thread-69369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:15:27.584 [DEBUG] [Thread-69369] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:15:27.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:15:27.585 [DEBUG] [Thread-69369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:15:27.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:15:27.639 [DEBUG] [Thread-69369] [transport.py] [_log()] userauth is OK
2025-12-12T12:15:27.639 [DEBUG] [Thread-69369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:15:27.639 [DEBUG] [Thread-69369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:15:27.639 [DEBUG] [Thread-69369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:15:27.640 [DEBUG] [Thread-69369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:15:27.662 [INFO] [Thread-69369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:15:27.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:15:27.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:15:28.576 [DEBUG] [Thread-69369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:15:28.576 [DEBUG] [Thread-69369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:15:28.624 [DEBUG] [Thread-69369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:15:28.624 [DEBUG] [Thread-69369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:15:28.632 [DEBUG] [Thread-69369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:15:28.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:15:28.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:15:28.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:15:28.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:15:28.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:15:28.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:15:28.666 [DEBUG] [Thread-69369] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:15:33.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:33.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:35.184 [DEBUG] [Thread-69371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:40.945 [DEBUG] [Thread-69372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:50.223 [DEBUG] [Thread-69373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:15:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:15:58.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:15:58.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:15:59.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 11, 36), 20.95, 24.48, 0.0, 46.96, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:15:59.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:11:36
2025-12-12T12:15:59.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:15:59.601 [DEBUG] [Thread-69374] [transport.py] [_log()] starting thread (client mode): 0xf818ab00
2025-12-12T12:15:59.601 [DEBUG] [Thread-69374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:15:59.615 [DEBUG] [Thread-69374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:15:59.615 [INFO] [Thread-69374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] client lang: <none>
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] server lang: <none>
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] kex follows: False
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] Compression: none
2025-12-12T12:15:59.618 [DEBUG] [Thread-69374] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:15:59.634 [DEBUG] [Thread-69374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:15:59.635 [DEBUG] [Thread-69374] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:15:59.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:15:59.635 [DEBUG] [Thread-69374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:15:59.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:15:59.637 [DEBUG] [Thread-69374] [transport.py] [_log()] userauth is OK
2025-12-12T12:15:59.637 [DEBUG] [Thread-69374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:15:59.637 [DEBUG] [Thread-69374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:15:59.638 [DEBUG] [Thread-69374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:15:59.638 [DEBUG] [Thread-69374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:15:59.656 [INFO] [Thread-69374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:15:59.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:16:00.287 [DEBUG] [Thread-69374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:16:00.288 [DEBUG] [Thread-69374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:16:00.288 [DEBUG] [Thread-69374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:16:00.329 [DEBUG] [Thread-69374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:16:00.329 [DEBUG] [Thread-69374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:16:00.332 [DEBUG] [Thread-69374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:16:00.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:16:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:16:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:16:00.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:16:00.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:16:00.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:16:00.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:16:00.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:16:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:16:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.427526 -999.00  +20.10  38.83     31   +2.50 1 2 2 1 1   888    0 20.27 126.43 ----- 36.0 38.8 313.2 48.2 25.1 -23.5 24.2 -23.7 23.9 -22.2 24.6 -21.9
2025-12-12T12:16:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:16:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:16:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.427526
2025-12-12T12:16:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:16:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:16:00.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:16:00.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:16:00.359 [DEBUG] [Thread-69374] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:16:00.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:16:00.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:11:36', tmtdew=20.95, humidity=24.48, cloud=0.0, wind=46.96, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:15:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:16:00.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:16:00.456 [DEBUG] [Thread-69377] [transport.py] [_log()] starting thread (client mode): 0xf81c16c0
2025-12-12T12:16:00.456 [DEBUG] [Thread-69377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:16:00.471 [DEBUG] [Thread-69377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:16:00.471 [INFO] [Thread-69377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:16:00.479 [DEBUG] [Thread-69377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:16:00.479 [DEBUG] [Thread-69377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:16:00.479 [DEBUG] [Thread-69377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:16:00.479 [DEBUG] [Thread-69377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:16:00.479 [DEBUG] [Thread-69377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:16:00.479 [DEBUG] [Thread-69377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] client lang: <none>
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] server lang: <none>
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] kex follows: False
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:16:00.480 [DEBUG] [Thread-69377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:16:00.481 [DEBUG] [Thread-69377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:16:00.481 [DEBUG] [Thread-69377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:16:00.481 [DEBUG] [Thread-69377] [transport.py] [_log()] Compression: none
2025-12-12T12:16:00.481 [DEBUG] [Thread-69377] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:16:00.535 [DEBUG] [Thread-69377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:16:00.536 [DEBUG] [Thread-69377] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:16:00.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:16:00.536 [DEBUG] [Thread-69377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:16:00.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:16:00.591 [DEBUG] [Thread-69377] [transport.py] [_log()] userauth is OK
2025-12-12T12:16:00.591 [DEBUG] [Thread-69377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:16:00.591 [DEBUG] [Thread-69377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:16:00.591 [DEBUG] [Thread-69377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:16:00.592 [DEBUG] [Thread-69377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:16:00.610 [INFO] [Thread-69377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:16:00.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:16:00.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:16:01.468 [DEBUG] [Thread-69377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:16:01.469 [DEBUG] [Thread-69377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:16:01.517 [DEBUG] [Thread-69377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:16:01.517 [DEBUG] [Thread-69377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:16:01.526 [DEBUG] [Thread-69377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:16:01.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:16:01.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:16:01.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:16:01.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:16:01.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:16:01.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:16:01.559 [DEBUG] [Thread-69377] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:16:05.254 [DEBUG] [Thread-69379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:16:20.296 [DEBUG] [Thread-69380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:16:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:16:31.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:16:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:16:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 11, 36), 20.95, 24.48, 0.0, 46.96, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:16:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:11:36
2025-12-12T12:16:32.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:16:32.505 [DEBUG] [Thread-69381] [transport.py] [_log()] starting thread (client mode): 0xf81883a0
2025-12-12T12:16:32.505 [DEBUG] [Thread-69381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:16:32.525 [DEBUG] [Thread-69381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:16:32.525 [INFO] [Thread-69381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] client lang: <none>
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] server lang: <none>
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] kex follows: False
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] Compression: none
2025-12-12T12:16:32.528 [DEBUG] [Thread-69381] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:16:32.544 [DEBUG] [Thread-69381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:16:32.544 [DEBUG] [Thread-69381] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:16:32.545 [DEBUG] [Thread-69381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:16:32.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:16:32.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:16:32.546 [DEBUG] [Thread-69381] [transport.py] [_log()] userauth is OK
2025-12-12T12:16:32.546 [DEBUG] [Thread-69381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:16:32.546 [DEBUG] [Thread-69381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:16:32.546 [DEBUG] [Thread-69381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:16:32.546 [DEBUG] [Thread-69381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:16:32.555 [INFO] [Thread-69381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:16:32.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:16:33.183 [DEBUG] [Thread-69381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:16:33.184 [DEBUG] [Thread-69381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:16:33.184 [DEBUG] [Thread-69381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:16:33.225 [DEBUG] [Thread-69381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:16:33.225 [DEBUG] [Thread-69381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:16:33.228 [DEBUG] [Thread-69381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:16:33.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:16:33.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:16:33.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:16:33.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:16:33.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:16:33.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:16:33.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:16:33.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:16:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:16:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.427873 -999.00  +20.10  38.74     31   +2.40 1 2 2 1 1   888    0 20.27 127.94 ----- 32.0 38.7 324.8 46.5 25.1 -23.6 24.3 -23.6 23.9 -20.9 24.6 -21.4
2025-12-12T12:16:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:16:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:16:33.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.427873
2025-12-12T12:16:33.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:16:33.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:16:33.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:16:33.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:16:33.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:16:33.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:11:36', tmtdew=20.95, humidity=24.48, cloud=0.0, wind=46.96, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:16:08.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:16:33.253 [DEBUG] [Thread-69381] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:16:33.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:16:33.347 [DEBUG] [Thread-69384] [transport.py] [_log()] starting thread (client mode): 0xf81886a0
2025-12-12T12:16:33.347 [DEBUG] [Thread-69384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:16:33.362 [DEBUG] [Thread-69384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:16:33.362 [INFO] [Thread-69384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] client lang: <none>
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] server lang: <none>
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] kex follows: False
2025-12-12T12:16:33.370 [DEBUG] [Thread-69384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:16:33.371 [DEBUG] [Thread-69384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:16:33.371 [DEBUG] [Thread-69384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:16:33.371 [DEBUG] [Thread-69384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:16:33.371 [DEBUG] [Thread-69384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:16:33.371 [DEBUG] [Thread-69384] [transport.py] [_log()] Compression: none
2025-12-12T12:16:33.371 [DEBUG] [Thread-69384] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:16:33.428 [DEBUG] [Thread-69384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:16:33.428 [DEBUG] [Thread-69384] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:16:33.429 [DEBUG] [Thread-69384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:16:33.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:16:33.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:16:33.483 [DEBUG] [Thread-69384] [transport.py] [_log()] userauth is OK
2025-12-12T12:16:33.483 [DEBUG] [Thread-69384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:16:33.484 [DEBUG] [Thread-69384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:16:33.484 [DEBUG] [Thread-69384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:16:33.484 [DEBUG] [Thread-69384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:16:33.503 [INFO] [Thread-69384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:16:33.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:16:33.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:16:33.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:16:33.886 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:16:34.369 [DEBUG] [Thread-69384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:16:34.369 [DEBUG] [Thread-69384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:16:34.417 [DEBUG] [Thread-69384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:16:34.417 [DEBUG] [Thread-69384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:16:34.426 [DEBUG] [Thread-69384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:16:34.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:16:34.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:16:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:16:34.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:16:34.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:16:34.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:16:34.461 [DEBUG] [Thread-69384] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:16:35.326 [DEBUG] [Thread-69386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:16:40.983 [DEBUG] [Thread-69387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:16:50.373 [DEBUG] [Thread-69388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:04.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:17:04.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:17:04.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:17:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 14, 24), 21.49, 23.65, 0.0, 52.32, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:17:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:14:24
2025-12-12T12:17:05.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:17:05.401 [DEBUG] [Thread-69389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:05.444 [DEBUG] [Thread-69390] [transport.py] [_log()] starting thread (client mode): 0xf81f3940
2025-12-12T12:17:05.444 [DEBUG] [Thread-69390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:17:05.466 [DEBUG] [Thread-69390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:17:05.466 [INFO] [Thread-69390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:17:05.469 [DEBUG] [Thread-69390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:17:05.469 [DEBUG] [Thread-69390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:17:05.469 [DEBUG] [Thread-69390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:17:05.469 [DEBUG] [Thread-69390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:05.469 [DEBUG] [Thread-69390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:05.469 [DEBUG] [Thread-69390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] client lang: <none>
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] server lang: <none>
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] kex follows: False
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] Compression: none
2025-12-12T12:17:05.470 [DEBUG] [Thread-69390] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:17:05.486 [DEBUG] [Thread-69390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:17:05.486 [DEBUG] [Thread-69390] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:17:05.486 [DEBUG] [Thread-69390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:17:05.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:17:05.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:17:05.488 [DEBUG] [Thread-69390] [transport.py] [_log()] userauth is OK
2025-12-12T12:17:05.488 [DEBUG] [Thread-69390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:17:05.488 [DEBUG] [Thread-69390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:17:05.488 [DEBUG] [Thread-69390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:17:05.488 [DEBUG] [Thread-69390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:17:05.497 [INFO] [Thread-69390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:17:05.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:17:06.031 [DEBUG] [Thread-69390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:17:06.031 [DEBUG] [Thread-69390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:17:06.031 [DEBUG] [Thread-69390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:17:06.072 [DEBUG] [Thread-69390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:17:06.072 [DEBUG] [Thread-69390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:17:06.075 [DEBUG] [Thread-69390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:17:06.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:17:06.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:17:06.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:17:06.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:17:06.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:17:06.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:17:06.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.428220 -999.00  +20.70  37.38     30   +2.90 1 2 2 1 1   888    0 20.06 119.03 ----- 39.4 37.4 323.8 45.4 25.2 -22.6 24.4 -23.7 23.9 -20.9 24.6 -20.9
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.428220
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:17:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:14:24', tmtdew=21.49, humidity=23.65, cloud=0.0, wind=52.32, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:16:38.208', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:17:06.093 [DEBUG] [Thread-69390] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:17:06.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:17:06.181 [DEBUG] [Thread-69393] [transport.py] [_log()] starting thread (client mode): 0xf81898d0
2025-12-12T12:17:06.181 [DEBUG] [Thread-69393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:17:06.196 [DEBUG] [Thread-69393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:17:06.196 [INFO] [Thread-69393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:17:06.203 [DEBUG] [Thread-69393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:17:06.203 [DEBUG] [Thread-69393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:17:06.203 [DEBUG] [Thread-69393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] client lang: <none>
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] server lang: <none>
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] kex follows: False
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] Compression: none
2025-12-12T12:17:06.204 [DEBUG] [Thread-69393] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:17:06.262 [DEBUG] [Thread-69393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:17:06.262 [DEBUG] [Thread-69393] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:17:06.263 [DEBUG] [Thread-69393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:17:06.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:17:06.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:17:06.319 [DEBUG] [Thread-69393] [transport.py] [_log()] userauth is OK
2025-12-12T12:17:06.319 [DEBUG] [Thread-69393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:17:06.319 [DEBUG] [Thread-69393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:17:06.319 [DEBUG] [Thread-69393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:17:06.319 [DEBUG] [Thread-69393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:17:06.333 [INFO] [Thread-69393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:17:06.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:17:06.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:17:07.190 [DEBUG] [Thread-69393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:17:07.191 [DEBUG] [Thread-69393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:17:07.238 [DEBUG] [Thread-69393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:17:07.238 [DEBUG] [Thread-69393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:17:07.247 [DEBUG] [Thread-69393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:17:07.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:17:07.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:17:07.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:17:07.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:17:07.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:17:07.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:17:07.287 [DEBUG] [Thread-69393] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:17:20.429 [DEBUG] [Thread-69395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:34.027 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:34.027 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:35.482 [DEBUG] [Thread-69396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:37.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:17:37.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:17:37.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:17:37.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 14, 24), 21.49, 23.65, 0.0, 52.32, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:17:37.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:14:24
2025-12-12T12:17:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:17:38.225 [DEBUG] [Thread-69397] [transport.py] [_log()] starting thread (client mode): 0xf2d0f640
2025-12-12T12:17:38.225 [DEBUG] [Thread-69397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:17:38.245 [DEBUG] [Thread-69397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:17:38.245 [INFO] [Thread-69397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] client lang: <none>
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] server lang: <none>
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] kex follows: False
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] Compression: none
2025-12-12T12:17:38.249 [DEBUG] [Thread-69397] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:17:38.266 [DEBUG] [Thread-69397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:17:38.267 [DEBUG] [Thread-69397] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:17:38.268 [DEBUG] [Thread-69397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:17:38.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:17:38.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:17:38.270 [DEBUG] [Thread-69397] [transport.py] [_log()] userauth is OK
2025-12-12T12:17:38.270 [DEBUG] [Thread-69397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:17:38.270 [DEBUG] [Thread-69397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:17:38.270 [DEBUG] [Thread-69397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:17:38.270 [DEBUG] [Thread-69397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:17:38.294 [INFO] [Thread-69397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:17:38.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:17:38.921 [DEBUG] [Thread-69397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:17:38.921 [DEBUG] [Thread-69397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:17:38.921 [DEBUG] [Thread-69397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:17:38.962 [DEBUG] [Thread-69397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:17:38.962 [DEBUG] [Thread-69397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:17:38.965 [DEBUG] [Thread-69397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:17:38.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:17:38.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:17:38.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:17:38.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:17:38.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:17:38.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:17:38.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:17:38.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:17:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:17:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.428568 -999.00  +20.20  35.69     30   +2.30 1 1 2 1 1   888    0 20.40 127.15 ----- 35.2 35.7 315.4 54.6 25.1 -24.1 24.3 -24.0 23.9 -22.2 24.6 -22.0
2025-12-12T12:17:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:17:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:17:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.428568
2025-12-12T12:17:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:17:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:17:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:17:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:17:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:17:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:14:24', tmtdew=21.49, humidity=23.65, cloud=0.0, wind=52.32, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:17:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:17:38.990 [DEBUG] [Thread-69397] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:17:39.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:17:39.098 [DEBUG] [Thread-69400] [transport.py] [_log()] starting thread (client mode): 0xf57b6c50
2025-12-12T12:17:39.098 [DEBUG] [Thread-69400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:17:39.113 [DEBUG] [Thread-69400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:17:39.114 [INFO] [Thread-69400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:17:39.121 [DEBUG] [Thread-69400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:17:39.122 [DEBUG] [Thread-69400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] client lang: <none>
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] server lang: <none>
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] kex follows: False
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] Compression: none
2025-12-12T12:17:39.123 [DEBUG] [Thread-69400] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:17:39.180 [DEBUG] [Thread-69400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:17:39.181 [DEBUG] [Thread-69400] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:17:39.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:17:39.182 [DEBUG] [Thread-69400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:17:39.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:17:39.239 [DEBUG] [Thread-69400] [transport.py] [_log()] userauth is OK
2025-12-12T12:17:39.239 [DEBUG] [Thread-69400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:17:39.239 [DEBUG] [Thread-69400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:17:39.239 [DEBUG] [Thread-69400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:17:39.239 [DEBUG] [Thread-69400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:17:39.253 [INFO] [Thread-69400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:17:39.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:17:39.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:17:40.084 [DEBUG] [Thread-69400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:17:40.085 [DEBUG] [Thread-69400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:17:40.132 [DEBUG] [Thread-69400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:17:40.133 [DEBUG] [Thread-69400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:17:40.141 [DEBUG] [Thread-69400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:17:40.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:17:40.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:17:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:17:40.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:17:40.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:17:40.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:17:40.175 [DEBUG] [Thread-69400] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:17:41.016 [DEBUG] [Thread-69402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:17:50.516 [DEBUG] [Thread-69403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:05.560 [DEBUG] [Thread-69404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:10.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:18:10.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:18:10.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:18:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 14, 24), 21.49, 23.65, 0.0, 52.32, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:18:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:14:24
2025-12-12T12:18:10.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:18:11.126 [DEBUG] [Thread-69405] [transport.py] [_log()] starting thread (client mode): 0xf81c3c40
2025-12-12T12:18:11.126 [DEBUG] [Thread-69405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:18:11.142 [DEBUG] [Thread-69405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:18:11.142 [INFO] [Thread-69405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:18:11.143 [DEBUG] [Thread-69405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] client lang: <none>
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] server lang: <none>
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] kex follows: False
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] Compression: none
2025-12-12T12:18:11.144 [DEBUG] [Thread-69405] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:18:11.162 [DEBUG] [Thread-69405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:18:11.163 [DEBUG] [Thread-69405] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:18:11.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:18:11.164 [DEBUG] [Thread-69405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:18:11.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:18:11.166 [DEBUG] [Thread-69405] [transport.py] [_log()] userauth is OK
2025-12-12T12:18:11.166 [DEBUG] [Thread-69405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:18:11.167 [DEBUG] [Thread-69405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:18:11.167 [DEBUG] [Thread-69405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:18:11.167 [DEBUG] [Thread-69405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:18:11.203 [INFO] [Thread-69405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:18:11.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:18:11.849 [DEBUG] [Thread-69405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:18:11.849 [DEBUG] [Thread-69405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:18:11.850 [DEBUG] [Thread-69405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:18:11.891 [DEBUG] [Thread-69405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:18:11.891 [DEBUG] [Thread-69405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:18:11.894 [DEBUG] [Thread-69405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:18:11.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:18:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:18:11.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:18:11.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:18:11.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:18:11.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:18:11.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:18:11.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:18:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:18:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.428915 -999.00  +19.70  51.06     31   +2.40 1 1 2 1 1   888    0 20.15 115.91 ----- 44.7 51.1 310.6 55.4 25.0 -24.2 24.1 -24.2 23.7 -22.2 24.5 -21.5
2025-12-12T12:18:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:18:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:18:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.428915
2025-12-12T12:18:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:18:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:18:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:18:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:18:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:18:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:14:24', tmtdew=21.49, humidity=23.65, cloud=0.0, wind=52.32, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:17:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:18:11.918 [DEBUG] [Thread-69405] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:18:12.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:18:12.014 [DEBUG] [Thread-69408] [transport.py] [_log()] starting thread (client mode): 0xf81f2500
2025-12-12T12:18:12.014 [DEBUG] [Thread-69408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:18:12.033 [DEBUG] [Thread-69408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:18:12.033 [INFO] [Thread-69408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:18:12.040 [DEBUG] [Thread-69408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:18:12.040 [DEBUG] [Thread-69408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:18:12.040 [DEBUG] [Thread-69408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] client lang: <none>
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] server lang: <none>
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] kex follows: False
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:18:12.041 [DEBUG] [Thread-69408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:18:12.042 [DEBUG] [Thread-69408] [transport.py] [_log()] Compression: none
2025-12-12T12:18:12.042 [DEBUG] [Thread-69408] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:18:12.099 [DEBUG] [Thread-69408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:18:12.099 [DEBUG] [Thread-69408] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:18:12.099 [DEBUG] [Thread-69408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:18:12.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:18:12.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:18:12.156 [DEBUG] [Thread-69408] [transport.py] [_log()] userauth is OK
2025-12-12T12:18:12.157 [DEBUG] [Thread-69408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:18:12.157 [DEBUG] [Thread-69408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:18:12.157 [DEBUG] [Thread-69408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:18:12.157 [DEBUG] [Thread-69408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:18:12.179 [INFO] [Thread-69408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:18:12.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:18:12.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:18:13.004 [DEBUG] [Thread-69408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:18:13.005 [DEBUG] [Thread-69408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:18:13.054 [DEBUG] [Thread-69408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:18:13.054 [DEBUG] [Thread-69408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:18:13.063 [DEBUG] [Thread-69408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:18:13.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:18:13.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:18:13.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:18:13.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:18:13.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:18:13.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:18:13.100 [DEBUG] [Thread-69408] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:18:20.585 [DEBUG] [Thread-69410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:34.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:34.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:35.629 [DEBUG] [Thread-69411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:41.054 [DEBUG] [Thread-69412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:18:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:18:43.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:18:43.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:18:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 14, 24), 21.49, 23.65, 0.0, 52.32, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:18:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:14:24
2025-12-12T12:18:43.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:18:44.045 [DEBUG] [Thread-69413] [transport.py] [_log()] starting thread (client mode): 0xf81f25f0
2025-12-12T12:18:44.045 [DEBUG] [Thread-69413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:18:44.067 [DEBUG] [Thread-69413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:18:44.067 [INFO] [Thread-69413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:18:44.070 [DEBUG] [Thread-69413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:18:44.070 [DEBUG] [Thread-69413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] client lang: <none>
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] server lang: <none>
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] kex follows: False
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:18:44.071 [DEBUG] [Thread-69413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:18:44.072 [DEBUG] [Thread-69413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:18:44.072 [DEBUG] [Thread-69413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:18:44.072 [DEBUG] [Thread-69413] [transport.py] [_log()] Compression: none
2025-12-12T12:18:44.072 [DEBUG] [Thread-69413] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:18:44.091 [DEBUG] [Thread-69413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:18:44.091 [DEBUG] [Thread-69413] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:18:44.092 [DEBUG] [Thread-69413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:18:44.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:18:44.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:18:44.094 [DEBUG] [Thread-69413] [transport.py] [_log()] userauth is OK
2025-12-12T12:18:44.095 [DEBUG] [Thread-69413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:18:44.095 [DEBUG] [Thread-69413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:18:44.095 [DEBUG] [Thread-69413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:18:44.095 [DEBUG] [Thread-69413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:18:44.124 [INFO] [Thread-69413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:18:44.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:18:44.760 [DEBUG] [Thread-69413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:18:44.760 [DEBUG] [Thread-69413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:18:44.761 [DEBUG] [Thread-69413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:18:44.801 [DEBUG] [Thread-69413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:18:44.801 [DEBUG] [Thread-69413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:18:44.803 [DEBUG] [Thread-69413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:18:44.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:18:44.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:18:44.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:18:44.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:18:44.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:18:44.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:18:44.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:18:44.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:18:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:18:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.429262 -999.00  +20.30  41.65     31   +2.80 1 2 2 1 1   888    0 20.29 120.22 ----- 43.2 41.6 325.2 52.5 25.0 -22.0 24.3 -22.5 23.6 -21.1 24.5 -20.6
2025-12-12T12:18:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:18:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:18:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.429262
2025-12-12T12:18:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:18:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:18:44.827 [DEBUG] [Thread-69413] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:18:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:18:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:18:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:18:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:14:24', tmtdew=21.49, humidity=23.65, cloud=0.0, wind=52.32, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:18:08.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:18:44.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:18:44.916 [DEBUG] [Thread-69416] [transport.py] [_log()] starting thread (client mode): 0xf57b44c0
2025-12-12T12:18:44.916 [DEBUG] [Thread-69416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:18:44.931 [DEBUG] [Thread-69416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:18:44.931 [INFO] [Thread-69416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:18:44.939 [DEBUG] [Thread-69416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] client lang: <none>
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] server lang: <none>
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] kex follows: False
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:18:44.940 [DEBUG] [Thread-69416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:18:44.941 [DEBUG] [Thread-69416] [transport.py] [_log()] Compression: none
2025-12-12T12:18:44.941 [DEBUG] [Thread-69416] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:18:44.995 [DEBUG] [Thread-69416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:18:44.996 [DEBUG] [Thread-69416] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:18:44.996 [DEBUG] [Thread-69416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:18:44.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:18:44.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:18:45.053 [DEBUG] [Thread-69416] [transport.py] [_log()] userauth is OK
2025-12-12T12:18:45.053 [DEBUG] [Thread-69416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:18:45.053 [DEBUG] [Thread-69416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:18:45.053 [DEBUG] [Thread-69416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:18:45.053 [DEBUG] [Thread-69416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:18:45.072 [INFO] [Thread-69416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:18:45.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:18:45.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:18:45.927 [DEBUG] [Thread-69416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:18:45.927 [DEBUG] [Thread-69416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:18:45.976 [DEBUG] [Thread-69416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:18:45.976 [DEBUG] [Thread-69416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:18:45.985 [DEBUG] [Thread-69416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:18:45.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:18:45.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:18:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:18:46.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:18:46.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:18:46.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:18:46.020 [DEBUG] [Thread-69416] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:18:50.660 [DEBUG] [Thread-69418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:05.709 [DEBUG] [Thread-69419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:19:16.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:19:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:19:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 14, 24), 21.49, 23.65, 0.0, 52.32, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:19:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:14:24
2025-12-12T12:19:16.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:19:16.980 [DEBUG] [Thread-69420] [transport.py] [_log()] starting thread (client mode): 0xf81c0910
2025-12-12T12:19:16.980 [DEBUG] [Thread-69420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:19:17.000 [DEBUG] [Thread-69420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:19:17.000 [INFO] [Thread-69420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] client lang: <none>
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] server lang: <none>
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] kex follows: False
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:19:17.004 [DEBUG] [Thread-69420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:19:17.005 [DEBUG] [Thread-69420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:19:17.005 [DEBUG] [Thread-69420] [transport.py] [_log()] Compression: none
2025-12-12T12:19:17.005 [DEBUG] [Thread-69420] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:19:17.024 [DEBUG] [Thread-69420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:19:17.024 [DEBUG] [Thread-69420] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:19:17.025 [DEBUG] [Thread-69420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:19:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:19:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:19:17.026 [DEBUG] [Thread-69420] [transport.py] [_log()] userauth is OK
2025-12-12T12:19:17.027 [DEBUG] [Thread-69420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:19:17.027 [DEBUG] [Thread-69420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:19:17.027 [DEBUG] [Thread-69420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:19:17.027 [DEBUG] [Thread-69420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:19:17.050 [INFO] [Thread-69420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:19:17.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:19:17.637 [DEBUG] [Thread-69420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:19:17.637 [DEBUG] [Thread-69420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:19:17.637 [DEBUG] [Thread-69420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:19:17.678 [DEBUG] [Thread-69420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:19:17.678 [DEBUG] [Thread-69420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:19:17.681 [DEBUG] [Thread-69420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:19:17.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:19:17.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:19:17.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:19:17.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:19:17.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:19:17.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:19:17.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:19:17.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:19:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:19:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.429609 -999.00  +20.40  41.13     30   +2.70 1 2 2 1 1   888    0 20.93 132.70 ----- 44.5 41.1 313.8 54.6 25.1 -23.3 24.3 -23.5 23.7 -22.1 24.6 -21.6
2025-12-12T12:19:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:19:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:19:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.429609
2025-12-12T12:19:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:19:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:19:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:19:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:19:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:19:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:14:24', tmtdew=21.49, humidity=23.65, cloud=0.0, wind=52.32, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:18:38.218', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:19:17.708 [DEBUG] [Thread-69420] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:19:17.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:19:17.804 [DEBUG] [Thread-69423] [transport.py] [_log()] starting thread (client mode): 0xf570c3a0
2025-12-12T12:19:17.804 [DEBUG] [Thread-69423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:19:17.819 [DEBUG] [Thread-69423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:19:17.819 [INFO] [Thread-69423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:19:17.827 [DEBUG] [Thread-69423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:19:17.827 [DEBUG] [Thread-69423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:19:17.827 [DEBUG] [Thread-69423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:19:17.827 [DEBUG] [Thread-69423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:17.827 [DEBUG] [Thread-69423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:17.827 [DEBUG] [Thread-69423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] client lang: <none>
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] server lang: <none>
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] kex follows: False
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:19:17.828 [DEBUG] [Thread-69423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:19:17.829 [DEBUG] [Thread-69423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:19:17.829 [DEBUG] [Thread-69423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:19:17.829 [DEBUG] [Thread-69423] [transport.py] [_log()] Compression: none
2025-12-12T12:19:17.829 [DEBUG] [Thread-69423] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:19:17.889 [DEBUG] [Thread-69423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:19:17.890 [DEBUG] [Thread-69423] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:19:17.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:19:17.891 [DEBUG] [Thread-69423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:19:17.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:19:17.948 [DEBUG] [Thread-69423] [transport.py] [_log()] userauth is OK
2025-12-12T12:19:17.948 [DEBUG] [Thread-69423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:19:17.948 [DEBUG] [Thread-69423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:19:17.949 [DEBUG] [Thread-69423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:19:17.949 [DEBUG] [Thread-69423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:19:17.968 [INFO] [Thread-69423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:19:17.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:19:17.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:19:18.818 [DEBUG] [Thread-69423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:19:18.818 [DEBUG] [Thread-69423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:19:18.866 [DEBUG] [Thread-69423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:19:18.866 [DEBUG] [Thread-69423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:19:18.875 [DEBUG] [Thread-69423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:19:18.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:19:18.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:19:18.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:19:18.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:19:18.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:19:18.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:19:18.910 [DEBUG] [Thread-69423] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:19:20.738 [DEBUG] [Thread-69425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:34.308 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:34.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:35.788 [DEBUG] [Thread-69426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:41.089 [DEBUG] [Thread-69427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:48.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:19:48.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:19:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:19:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 17, 12), 19.96, 26.2, 0.0, 33.87, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:19:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:17:12
2025-12-12T12:19:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:19:49.872 [DEBUG] [Thread-69428] [transport.py] [_log()] starting thread (client mode): 0xf2d0df30
2025-12-12T12:19:49.872 [DEBUG] [Thread-69428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:19:49.892 [DEBUG] [Thread-69428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:19:49.893 [INFO] [Thread-69428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] client lang: <none>
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] server lang: <none>
2025-12-12T12:19:49.896 [DEBUG] [Thread-69428] [transport.py] [_log()] kex follows: False
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] Compression: none
2025-12-12T12:19:49.897 [DEBUG] [Thread-69428] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:19:49.916 [DEBUG] [Thread-69428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:19:49.916 [DEBUG] [Thread-69428] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:19:49.917 [DEBUG] [Thread-69428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:19:49.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:19:49.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:19:49.919 [DEBUG] [Thread-69428] [transport.py] [_log()] userauth is OK
2025-12-12T12:19:49.919 [DEBUG] [Thread-69428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:19:49.919 [DEBUG] [Thread-69428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:19:49.919 [DEBUG] [Thread-69428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:19:49.919 [DEBUG] [Thread-69428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:19:49.954 [INFO] [Thread-69428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:19:49.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:19:50.618 [DEBUG] [Thread-69428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:19:50.618 [DEBUG] [Thread-69428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:19:50.619 [DEBUG] [Thread-69428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:19:50.659 [DEBUG] [Thread-69428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:19:50.659 [DEBUG] [Thread-69428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:19:50.662 [DEBUG] [Thread-69428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:19:50.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:19:50.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:19:50.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:19:50.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:19:50.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:19:50.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:19:50.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:19:50.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:19:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:19:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.430304 -999.00  +20.20  43.71     31   +2.80 1 2 2 1 1   888    0 20.51 122.90 ----- 38.6 43.7 308.0 59.2 25.1 -23.7 24.3 -23.7 23.9 -21.2 24.6 -21.4
2025-12-12T12:19:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:19:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:19:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.430304
2025-12-12T12:19:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:19:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:19:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:19:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:19:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:19:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:17:12', tmtdew=19.96, humidity=26.2, cloud=0.0, wind=33.87, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:19:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:19:50.689 [DEBUG] [Thread-69428] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:19:50.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:19:50.786 [DEBUG] [Thread-69431] [transport.py] [_log()] starting thread (client mode): 0xf570d8a0
2025-12-12T12:19:50.786 [DEBUG] [Thread-69431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:19:50.802 [DEBUG] [Thread-69431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:19:50.802 [INFO] [Thread-69431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:19:50.809 [DEBUG] [Thread-69431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:19:50.809 [DEBUG] [Thread-69431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] client lang: <none>
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] server lang: <none>
2025-12-12T12:19:50.810 [DEBUG] [Thread-69431] [transport.py] [_log()] kex follows: False
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] Compression: none
2025-12-12T12:19:50.811 [DEBUG] [Thread-69431] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:19:50.819 [DEBUG] [Thread-69433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:19:50.867 [DEBUG] [Thread-69431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:19:50.868 [DEBUG] [Thread-69431] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:19:50.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:19:50.869 [DEBUG] [Thread-69431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:19:50.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:19:50.923 [DEBUG] [Thread-69431] [transport.py] [_log()] userauth is OK
2025-12-12T12:19:50.923 [DEBUG] [Thread-69431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:19:50.923 [DEBUG] [Thread-69431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:19:50.923 [DEBUG] [Thread-69431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:19:50.923 [DEBUG] [Thread-69431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:19:50.937 [INFO] [Thread-69431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:19:50.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:19:50.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:19:51.781 [DEBUG] [Thread-69431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:19:51.782 [DEBUG] [Thread-69431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:19:51.830 [DEBUG] [Thread-69431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:19:51.830 [DEBUG] [Thread-69431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:19:51.839 [DEBUG] [Thread-69431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:19:51.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:19:51.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:19:51.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:19:51.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:19:51.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:19:51.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:19:51.874 [DEBUG] [Thread-69431] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:20:05.862 [DEBUG] [Thread-69434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:20.888 [DEBUG] [Thread-69435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:21.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:20:21.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:20:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:20:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 17, 12), 19.96, 26.2, 0.0, 33.87, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:20:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:17:12
2025-12-12T12:20:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:20:22.811 [DEBUG] [Thread-69436] [transport.py] [_log()] starting thread (client mode): 0xf81c1090
2025-12-12T12:20:22.811 [DEBUG] [Thread-69436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:20:22.830 [DEBUG] [Thread-69436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:20:22.831 [INFO] [Thread-69436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] client lang: <none>
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] server lang: <none>
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] kex follows: False
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] Compression: none
2025-12-12T12:20:22.834 [DEBUG] [Thread-69436] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:20:22.851 [DEBUG] [Thread-69436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:20:22.852 [DEBUG] [Thread-69436] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:20:22.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:20:22.853 [DEBUG] [Thread-69436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:20:22.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:20:22.854 [DEBUG] [Thread-69436] [transport.py] [_log()] userauth is OK
2025-12-12T12:20:22.855 [DEBUG] [Thread-69436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:20:22.855 [DEBUG] [Thread-69436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:20:22.855 [DEBUG] [Thread-69436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:20:22.855 [DEBUG] [Thread-69436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:20:22.887 [INFO] [Thread-69436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:20:22.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:20:23.512 [DEBUG] [Thread-69436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:20:23.512 [DEBUG] [Thread-69436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:20:23.512 [DEBUG] [Thread-69436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:20:23.553 [DEBUG] [Thread-69436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:20:23.553 [DEBUG] [Thread-69436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:20:23.556 [DEBUG] [Thread-69436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:20:23.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:20:23.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:20:23.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:20:23.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:20:23.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:20:23.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:20:23.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:20:23.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.430651 -999.00  +20.10  39.42     32   +3.30 1 2 2 1 1   888    0 20.27 116.72 ----- 32.9 39.4 310.4 53.8 25.1 -22.2 24.4 -22.3 23.8 -20.5 24.6 -20.8
2025-12-12T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.430651
2025-12-12T12:20:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:20:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:20:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:20:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:20:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:20:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:17:12', tmtdew=19.96, humidity=26.2, cloud=0.0, wind=33.87, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:20:08.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:20:23.582 [DEBUG] [Thread-69436] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:20:23.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:20:23.680 [DEBUG] [Thread-69439] [transport.py] [_log()] starting thread (client mode): 0xf57a9c30
2025-12-12T12:20:23.680 [DEBUG] [Thread-69439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:20:23.694 [DEBUG] [Thread-69439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:20:23.695 [INFO] [Thread-69439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:20:23.702 [DEBUG] [Thread-69439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:20:23.702 [DEBUG] [Thread-69439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:20:23.702 [DEBUG] [Thread-69439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:20:23.702 [DEBUG] [Thread-69439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:23.702 [DEBUG] [Thread-69439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:23.702 [DEBUG] [Thread-69439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] client lang: <none>
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] server lang: <none>
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] kex follows: False
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] Compression: none
2025-12-12T12:20:23.703 [DEBUG] [Thread-69439] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:20:23.758 [DEBUG] [Thread-69439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:20:23.759 [DEBUG] [Thread-69439] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:20:23.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:20:23.760 [DEBUG] [Thread-69439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:20:23.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:20:23.815 [DEBUG] [Thread-69439] [transport.py] [_log()] userauth is OK
2025-12-12T12:20:23.815 [DEBUG] [Thread-69439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:20:23.816 [DEBUG] [Thread-69439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:20:23.816 [DEBUG] [Thread-69439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:20:23.816 [DEBUG] [Thread-69439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:20:23.835 [INFO] [Thread-69439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:20:23.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:20:23.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:20:24.709 [DEBUG] [Thread-69439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:20:24.709 [DEBUG] [Thread-69439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:20:24.760 [DEBUG] [Thread-69439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:20:24.761 [DEBUG] [Thread-69439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:20:24.772 [DEBUG] [Thread-69439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:20:24.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:20:24.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:20:24.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:20:24.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:20:24.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:20:24.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:20:24.812 [DEBUG] [Thread-69439] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:20:34.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:34.454 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:35.918 [DEBUG] [Thread-69441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:41.128 [DEBUG] [Thread-69442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:50.963 [DEBUG] [Thread-69443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:20:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:20:54.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:20:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:20:55.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 17, 12), 19.96, 26.2, 0.0, 33.87, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:20:55.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:17:12
2025-12-12T12:20:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:20:55.803 [DEBUG] [Thread-69444] [transport.py] [_log()] starting thread (client mode): 0xf81c2860
2025-12-12T12:20:55.803 [DEBUG] [Thread-69444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:20:55.824 [DEBUG] [Thread-69444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:20:55.824 [INFO] [Thread-69444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] client lang: <none>
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] server lang: <none>
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] kex follows: False
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] Compression: none
2025-12-12T12:20:55.828 [DEBUG] [Thread-69444] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:20:55.844 [DEBUG] [Thread-69444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:20:55.844 [DEBUG] [Thread-69444] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:20:55.844 [DEBUG] [Thread-69444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:20:55.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:20:55.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:20:55.845 [DEBUG] [Thread-69444] [transport.py] [_log()] userauth is OK
2025-12-12T12:20:55.845 [DEBUG] [Thread-69444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:20:55.845 [DEBUG] [Thread-69444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:20:55.845 [DEBUG] [Thread-69444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:20:55.845 [DEBUG] [Thread-69444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:20:55.860 [INFO] [Thread-69444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:20:55.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:20:56.496 [DEBUG] [Thread-69444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:20:56.496 [DEBUG] [Thread-69444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:20:56.496 [DEBUG] [Thread-69444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:20:56.537 [DEBUG] [Thread-69444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:20:56.537 [DEBUG] [Thread-69444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:20:56.539 [DEBUG] [Thread-69444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:20:56.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:20:56.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:20:56.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:20:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:20:56.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:20:56.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:20:56.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.430998 -999.00  +20.70  34.23     31   +3.30 1 2 2 1 1   888    0 20.48 110.63 ----- 35.8 34.2 306.0 46.1 25.3 -22.3 24.5 -23.2 23.9 -19.9 24.8 -21.1
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.430998
2025-12-12T12:20:56.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:20:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:20:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:20:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:20:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:20:56.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:17:12', tmtdew=19.96, humidity=26.2, cloud=0.0, wind=33.87, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:20:38.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:20:56.562 [DEBUG] [Thread-69444] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:20:56.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:20:56.647 [DEBUG] [Thread-69447] [transport.py] [_log()] starting thread (client mode): 0xf570f490
2025-12-12T12:20:56.647 [DEBUG] [Thread-69447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:20:56.662 [DEBUG] [Thread-69447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:20:56.662 [INFO] [Thread-69447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:20:56.669 [DEBUG] [Thread-69447] [transport.py] [_log()] client lang: <none>
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] server lang: <none>
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] kex follows: False
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] Compression: none
2025-12-12T12:20:56.670 [DEBUG] [Thread-69447] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:20:56.725 [DEBUG] [Thread-69447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:20:56.726 [DEBUG] [Thread-69447] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:20:56.726 [DEBUG] [Thread-69447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:20:56.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:20:56.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:20:56.783 [DEBUG] [Thread-69447] [transport.py] [_log()] userauth is OK
2025-12-12T12:20:56.783 [DEBUG] [Thread-69447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:20:56.783 [DEBUG] [Thread-69447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:20:56.783 [DEBUG] [Thread-69447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:20:56.783 [DEBUG] [Thread-69447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:20:56.797 [INFO] [Thread-69447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:20:56.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:20:56.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:20:57.645 [DEBUG] [Thread-69447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:20:57.645 [DEBUG] [Thread-69447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:20:57.693 [DEBUG] [Thread-69447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:20:57.694 [DEBUG] [Thread-69447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:20:57.702 [DEBUG] [Thread-69447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:20:57.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:20:57.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:20:57.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:20:57.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:20:57.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:20:57.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:20:57.734 [DEBUG] [Thread-69447] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:21:05.993 [DEBUG] [Thread-69449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:21:21.039 [DEBUG] [Thread-69450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:21:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:21:27.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:21:27.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:21:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 17, 12), 19.96, 26.2, 0.0, 33.87, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:21:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:17:12
2025-12-12T12:21:28.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:21:28.691 [DEBUG] [Thread-69451] [transport.py] [_log()] starting thread (client mode): 0xf81c1720
2025-12-12T12:21:28.692 [DEBUG] [Thread-69451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:21:28.711 [DEBUG] [Thread-69451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:21:28.711 [INFO] [Thread-69451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:21:28.714 [DEBUG] [Thread-69451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] client lang: <none>
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] server lang: <none>
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] kex follows: False
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:21:28.715 [DEBUG] [Thread-69451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:21:28.716 [DEBUG] [Thread-69451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:21:28.716 [DEBUG] [Thread-69451] [transport.py] [_log()] Compression: none
2025-12-12T12:21:28.716 [DEBUG] [Thread-69451] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:21:28.731 [DEBUG] [Thread-69451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:21:28.732 [DEBUG] [Thread-69451] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:21:28.732 [DEBUG] [Thread-69451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:21:28.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:21:28.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:21:28.734 [DEBUG] [Thread-69451] [transport.py] [_log()] userauth is OK
2025-12-12T12:21:28.734 [DEBUG] [Thread-69451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:21:28.734 [DEBUG] [Thread-69451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:21:28.735 [DEBUG] [Thread-69451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:21:28.735 [DEBUG] [Thread-69451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:21:28.752 [INFO] [Thread-69451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:21:28.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:21:29.333 [DEBUG] [Thread-69451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:21:29.333 [DEBUG] [Thread-69451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:21:29.334 [DEBUG] [Thread-69451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:21:29.375 [DEBUG] [Thread-69451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:21:29.375 [DEBUG] [Thread-69451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:21:29.378 [DEBUG] [Thread-69451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:21:29.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:21:29.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:21:29.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:21:29.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:21:29.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:21:29.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:21:29.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:21:29.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:21:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:21:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.431346 -999.00  +20.30  40.46     31   +2.90 1 2 2 1 1   888    0 20.48 117.99 ----- 32.0 40.5 330.2 57.4 25.2 -23.6 24.4 -24.4 23.9 -21.3 24.8 -22.2
2025-12-12T12:21:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:21:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:21:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.431346
2025-12-12T12:21:29.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:21:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:21:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:21:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:21:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:21:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:17:12', tmtdew=19.96, humidity=26.2, cloud=0.0, wind=33.87, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:21:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:21:29.402 [DEBUG] [Thread-69451] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:21:29.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:21:29.509 [DEBUG] [Thread-69454] [transport.py] [_log()] starting thread (client mode): 0xf81c1600
2025-12-12T12:21:29.509 [DEBUG] [Thread-69454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:21:29.524 [DEBUG] [Thread-69454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:21:29.524 [INFO] [Thread-69454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:21:29.531 [DEBUG] [Thread-69454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:21:29.531 [DEBUG] [Thread-69454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:21:29.532 [DEBUG] [Thread-69454] [transport.py] [_log()] client lang: <none>
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] server lang: <none>
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] kex follows: False
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] Compression: none
2025-12-12T12:21:29.533 [DEBUG] [Thread-69454] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:21:29.591 [DEBUG] [Thread-69454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:21:29.591 [DEBUG] [Thread-69454] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:21:29.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:21:29.592 [DEBUG] [Thread-69454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:21:29.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:21:29.647 [DEBUG] [Thread-69454] [transport.py] [_log()] userauth is OK
2025-12-12T12:21:29.648 [DEBUG] [Thread-69454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:21:29.648 [DEBUG] [Thread-69454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:21:29.648 [DEBUG] [Thread-69454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:21:29.648 [DEBUG] [Thread-69454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:21:29.671 [INFO] [Thread-69454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:21:29.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:21:29.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:21:30.523 [DEBUG] [Thread-69454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:21:30.524 [DEBUG] [Thread-69454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:21:30.572 [DEBUG] [Thread-69454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:21:30.572 [DEBUG] [Thread-69454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:21:30.580 [DEBUG] [Thread-69454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:21:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:21: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')
2025-12-12T12:21:30.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:21:30.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:21:30.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:21:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:21:30.614 [DEBUG] [Thread-69454] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:21:34.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:21:34.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:21:36.067 [DEBUG] [Thread-69456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:21:41.178 [DEBUG] [Thread-69457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:21:51.101 [DEBUG] [Thread-69458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:00.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:22:00.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:22:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:22:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 17, 12), 19.96, 26.2, 0.0, 33.87, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:22:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:17:12
2025-12-12T12:22:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:22:01.548 [DEBUG] [Thread-69459] [transport.py] [_log()] starting thread (client mode): 0xf81c01c0
2025-12-12T12:22:01.548 [DEBUG] [Thread-69459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:22:01.567 [DEBUG] [Thread-69459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:22:01.567 [INFO] [Thread-69459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:22:01.568 [DEBUG] [Thread-69459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] client lang: <none>
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] server lang: <none>
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] kex follows: False
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:22:01.569 [DEBUG] [Thread-69459] [transport.py] [_log()] Compression: none
2025-12-12T12:22:01.570 [DEBUG] [Thread-69459] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:22:01.578 [DEBUG] [Thread-69459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:22:01.578 [DEBUG] [Thread-69459] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:22:01.579 [DEBUG] [Thread-69459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:22:01.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:22:01.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:22:01.580 [DEBUG] [Thread-69459] [transport.py] [_log()] userauth is OK
2025-12-12T12:22:01.580 [DEBUG] [Thread-69459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:22:01.580 [DEBUG] [Thread-69459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:22:01.580 [DEBUG] [Thread-69459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:22:01.580 [DEBUG] [Thread-69459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:22:01.597 [INFO] [Thread-69459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:22:01.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:22:02.246 [DEBUG] [Thread-69459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:22:02.246 [DEBUG] [Thread-69459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:22:02.247 [DEBUG] [Thread-69459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:22:02.287 [DEBUG] [Thread-69459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:22:02.287 [DEBUG] [Thread-69459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:22:02.290 [DEBUG] [Thread-69459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:22:02.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:22:02.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:22:02.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:22:02.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:22:02.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:22:02.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:22:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:22:02.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:22:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:22:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.431692 -999.00  +20.30  29.44     32   +3.10 1 2 1 1 1   888    0 20.51 110.97 ----- 27.4 29.4 358.3 44.2 25.2 -22.7 24.4 -23.7 23.9 -21.1 24.6 -21.3
2025-12-12T12:22:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:22:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:22:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.431692
2025-12-12T12:22:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:22:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:22:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:22:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:22:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:22:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:17:12', tmtdew=19.96, humidity=26.2, cloud=0.0, wind=33.87, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:21:38.189', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:22:02.319 [DEBUG] [Thread-69459] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:22:02.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:22:02.416 [DEBUG] [Thread-69462] [transport.py] [_log()] starting thread (client mode): 0xf81c1990
2025-12-12T12:22:02.416 [DEBUG] [Thread-69462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:22:02.431 [DEBUG] [Thread-69462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:22:02.431 [INFO] [Thread-69462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] client lang: <none>
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] server lang: <none>
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] kex follows: False
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:22:02.439 [DEBUG] [Thread-69462] [transport.py] [_log()] Compression: none
2025-12-12T12:22:02.440 [DEBUG] [Thread-69462] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:22:02.498 [DEBUG] [Thread-69462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:22:02.498 [DEBUG] [Thread-69462] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:22:02.498 [DEBUG] [Thread-69462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:22:02.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:22:02.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:22:02.555 [DEBUG] [Thread-69462] [transport.py] [_log()] userauth is OK
2025-12-12T12:22:02.555 [DEBUG] [Thread-69462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:22:02.555 [DEBUG] [Thread-69462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:22:02.556 [DEBUG] [Thread-69462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:22:02.556 [DEBUG] [Thread-69462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:22:02.575 [INFO] [Thread-69462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:22:02.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:22:02.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:22:03.422 [DEBUG] [Thread-69462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:22:03.422 [DEBUG] [Thread-69462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:22:03.471 [DEBUG] [Thread-69462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:22:03.471 [DEBUG] [Thread-69462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:22:03.484 [DEBUG] [Thread-69462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:22:03.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:22:03.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:22:03.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:22:03.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:22:03.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:22:03.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:22:03.524 [DEBUG] [Thread-69462] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:22:06.129 [DEBUG] [Thread-69464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:21.171 [DEBUG] [Thread-69465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:22:33.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:22:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:22:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 20), 20.84, 24.94, 0.0, 36.31, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:22:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:20:00
2025-12-12T12:22:34.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:22:34.474 [DEBUG] [Thread-69466] [transport.py] [_log()] starting thread (client mode): 0xf570cb80
2025-12-12T12:22:34.474 [DEBUG] [Thread-69466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:22:34.495 [DEBUG] [Thread-69466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:22:34.495 [INFO] [Thread-69466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:22:34.498 [DEBUG] [Thread-69466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] client lang: <none>
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] server lang: <none>
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] kex follows: False
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] Compression: none
2025-12-12T12:22:34.499 [DEBUG] [Thread-69466] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:22:34.516 [DEBUG] [Thread-69466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:22:34.516 [DEBUG] [Thread-69466] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:22:34.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:22:34.517 [DEBUG] [Thread-69466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:22:34.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:22:34.519 [DEBUG] [Thread-69466] [transport.py] [_log()] userauth is OK
2025-12-12T12:22:34.519 [DEBUG] [Thread-69466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:22:34.519 [DEBUG] [Thread-69466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:22:34.520 [DEBUG] [Thread-69466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:22:34.520 [DEBUG] [Thread-69466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:22:34.536 [INFO] [Thread-69466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:22:34.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:22:34.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:34.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:35.164 [DEBUG] [Thread-69466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:22:35.164 [DEBUG] [Thread-69466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:22:35.165 [DEBUG] [Thread-69466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:22:35.206 [DEBUG] [Thread-69466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:22:35.206 [DEBUG] [Thread-69466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:22:35.209 [DEBUG] [Thread-69466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:22:35.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:22:35.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:22:35.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:22:35.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:22:35.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:22:35.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:22:35.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:22:35.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:22:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:22:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.432040 -999.00  +19.90  25.98     31   +2.50 1 2 1 1 1   888    0 20.53 110.66 ----- 39.3 26.0 355.0 40.9 25.0 -24.0 24.3 -23.5 23.9 -22.1 24.5 -21.5
2025-12-12T12:22:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:22:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:22:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.432040
2025-12-12T12:22:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:22:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:22:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:22:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:22:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:22:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:20:00', tmtdew=20.84, humidity=24.94, cloud=0.0, wind=36.31, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:22:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:22:35.235 [DEBUG] [Thread-69466] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:22:35.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:22:35.332 [DEBUG] [Thread-69469] [transport.py] [_log()] starting thread (client mode): 0xf81c2f80
2025-12-12T12:22:35.333 [DEBUG] [Thread-69469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:22:35.347 [DEBUG] [Thread-69469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:22:35.347 [INFO] [Thread-69469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:22:35.354 [DEBUG] [Thread-69469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] client lang: <none>
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] server lang: <none>
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] kex follows: False
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] Compression: none
2025-12-12T12:22:35.355 [DEBUG] [Thread-69469] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:22:35.411 [DEBUG] [Thread-69469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:22:35.411 [DEBUG] [Thread-69469] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:22:35.411 [DEBUG] [Thread-69469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:22:35.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:22:35.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:22:35.467 [DEBUG] [Thread-69469] [transport.py] [_log()] userauth is OK
2025-12-12T12:22:35.467 [DEBUG] [Thread-69469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:22:35.467 [DEBUG] [Thread-69469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:22:35.468 [DEBUG] [Thread-69469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:22:35.468 [DEBUG] [Thread-69469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:22:35.486 [INFO] [Thread-69469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:22:35.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:22:35.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:22:36.200 [DEBUG] [Thread-69471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:36.401 [DEBUG] [Thread-69469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:22:36.401 [DEBUG] [Thread-69469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:22:36.449 [DEBUG] [Thread-69469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:22:36.450 [DEBUG] [Thread-69469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:22:36.458 [DEBUG] [Thread-69469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:22:36.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:22:36.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:22:36.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:22:36.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:22:36.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:22:36.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:22:36.494 [DEBUG] [Thread-69469] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:22:41.250 [DEBUG] [Thread-69472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:22:51.248 [DEBUG] [Thread-69473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:06.276 [DEBUG] [Thread-69474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:06.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:23:06.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:23:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:23:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 20), 20.84, 24.94, 0.0, 36.31, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:23:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:20:00
2025-12-12T12:23:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:23:07.440 [DEBUG] [Thread-69475] [transport.py] [_log()] starting thread (client mode): 0xf818b490
2025-12-12T12:23:07.440 [DEBUG] [Thread-69475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:23:07.457 [DEBUG] [Thread-69475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:23:07.457 [INFO] [Thread-69475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:07.460 [DEBUG] [Thread-69475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] client lang: <none>
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] server lang: <none>
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] kex follows: False
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] Compression: none
2025-12-12T12:23:07.461 [DEBUG] [Thread-69475] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:23:07.478 [DEBUG] [Thread-69475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:23:07.479 [DEBUG] [Thread-69475] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:23:07.479 [DEBUG] [Thread-69475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:23:07.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:23:07.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:23:07.481 [DEBUG] [Thread-69475] [transport.py] [_log()] userauth is OK
2025-12-12T12:23:07.481 [DEBUG] [Thread-69475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:23:07.481 [DEBUG] [Thread-69475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:23:07.481 [DEBUG] [Thread-69475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:23:07.481 [DEBUG] [Thread-69475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:23:07.498 [INFO] [Thread-69475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:23:07.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:23:08.061 [DEBUG] [Thread-69475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:23:08.061 [DEBUG] [Thread-69475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:23:08.062 [DEBUG] [Thread-69475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:23:08.102 [DEBUG] [Thread-69475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:23:08.102 [DEBUG] [Thread-69475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:23:08.104 [DEBUG] [Thread-69475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:23:08.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:23:08.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:23:08.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:23:08.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:23:08.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:23:08.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:23:08.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:23:08.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:23:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:23:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.432387 -999.00  +20.10  27.14     31   +2.60 1 2 1 1 1   888    0 19.97 103.29 ----- 36.4 27.1 2.3 56.7 25.1 -26.3 24.2 -24.1 23.9 -20.4 24.6 -22.0
2025-12-12T12:23:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:23:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:23:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.432387
2025-12-12T12:23:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:23:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:23:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:23:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:23:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:23:08.121 [DEBUG] [Thread-69475] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:23:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:20:00', tmtdew=20.84, humidity=24.94, cloud=0.0, wind=36.31, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:22:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:23:08.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:23:08.227 [DEBUG] [Thread-69478] [transport.py] [_log()] starting thread (client mode): 0xfabc6770
2025-12-12T12:23:08.227 [DEBUG] [Thread-69478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:23:08.242 [DEBUG] [Thread-69478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:23:08.242 [INFO] [Thread-69478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:23:08.251 [DEBUG] [Thread-69478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:23:08.251 [DEBUG] [Thread-69478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:23:08.251 [DEBUG] [Thread-69478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:23:08.251 [DEBUG] [Thread-69478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:08.251 [DEBUG] [Thread-69478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:08.251 [DEBUG] [Thread-69478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] client lang: <none>
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] server lang: <none>
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] kex follows: False
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] Compression: none
2025-12-12T12:23:08.252 [DEBUG] [Thread-69478] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:23:08.307 [DEBUG] [Thread-69478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:23:08.308 [DEBUG] [Thread-69478] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:23:08.308 [DEBUG] [Thread-69478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:23:08.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:23:08.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:23:08.367 [DEBUG] [Thread-69478] [transport.py] [_log()] userauth is OK
2025-12-12T12:23:08.367 [DEBUG] [Thread-69478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:23:08.367 [DEBUG] [Thread-69478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:23:08.367 [DEBUG] [Thread-69478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:23:08.367 [DEBUG] [Thread-69478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:23:08.387 [INFO] [Thread-69478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:23:08.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:23:08.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:23:09.216 [DEBUG] [Thread-69478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:23:09.216 [DEBUG] [Thread-69478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:23:09.264 [DEBUG] [Thread-69478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:23:09.264 [DEBUG] [Thread-69478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:23:09.273 [DEBUG] [Thread-69478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:23:09.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:23:09.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:23:09.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:23:09.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:23:09.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:23:09.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:23:09.308 [DEBUG] [Thread-69478] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:23:21.312 [DEBUG] [Thread-69480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:34.883 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:34.884 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:36.399 [DEBUG] [Thread-69481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:39.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:23:39.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:23:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:23:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 20), 20.84, 24.94, 0.0, 36.31, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:23:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:20:00
2025-12-12T12:23:40.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:23:40.246 [DEBUG] [Thread-69482] [transport.py] [_log()] starting thread (client mode): 0xf813c460
2025-12-12T12:23:40.246 [DEBUG] [Thread-69482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:23:40.266 [DEBUG] [Thread-69482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:23:40.266 [INFO] [Thread-69482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:23:40.269 [DEBUG] [Thread-69482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] client lang: <none>
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] server lang: <none>
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] kex follows: False
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:23:40.270 [DEBUG] [Thread-69482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:23:40.271 [DEBUG] [Thread-69482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:23:40.271 [DEBUG] [Thread-69482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:23:40.271 [DEBUG] [Thread-69482] [transport.py] [_log()] Compression: none
2025-12-12T12:23:40.271 [DEBUG] [Thread-69482] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:23:40.286 [DEBUG] [Thread-69482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:23:40.286 [DEBUG] [Thread-69482] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:23:40.287 [DEBUG] [Thread-69482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:23:40.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:23:40.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:23:40.289 [DEBUG] [Thread-69482] [transport.py] [_log()] userauth is OK
2025-12-12T12:23:40.289 [DEBUG] [Thread-69482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:23:40.289 [DEBUG] [Thread-69482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:23:40.289 [DEBUG] [Thread-69482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:23:40.289 [DEBUG] [Thread-69482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:23:40.326 [INFO] [Thread-69482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:23:40.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:23:40.927 [DEBUG] [Thread-69482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:23:40.927 [DEBUG] [Thread-69482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:23:40.928 [DEBUG] [Thread-69482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:23:40.968 [DEBUG] [Thread-69482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:23:40.968 [DEBUG] [Thread-69482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:23:40.971 [DEBUG] [Thread-69482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:23:40.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:23:40.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:23:40.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:23:40.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:23:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:23:40.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:23:40.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:23:40.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:23:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:23:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.433082 -999.00  +21.10  40.59     28   +2.00 1 2 2 1 1   888    0 20.16 107.14 ----- 37.9 40.6 336.2 49.4 25.3 -23.1 24.4 -23.1 24.1 -19.9 24.8 -21.7
2025-12-12T12:23:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:23:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:23:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.433082
2025-12-12T12:23:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:23:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:23:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:23:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:23:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:23:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:20:00', tmtdew=20.84, humidity=24.94, cloud=0.0, wind=36.31, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:23:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:23:40.992 [DEBUG] [Thread-69482] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:23:41.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:23:41.093 [DEBUG] [Thread-69485] [transport.py] [_log()] starting thread (client mode): 0xf81c1180
2025-12-12T12:23:41.093 [DEBUG] [Thread-69485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:23:41.108 [DEBUG] [Thread-69485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:23:41.108 [INFO] [Thread-69485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:23:41.115 [DEBUG] [Thread-69485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:23:41.115 [DEBUG] [Thread-69485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:23:41.115 [DEBUG] [Thread-69485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:23:41.115 [DEBUG] [Thread-69485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] client lang: <none>
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] server lang: <none>
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] kex follows: False
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:23:41.116 [DEBUG] [Thread-69485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:23:41.117 [DEBUG] [Thread-69485] [transport.py] [_log()] Compression: none
2025-12-12T12:23:41.117 [DEBUG] [Thread-69485] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:23:41.175 [DEBUG] [Thread-69485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:23:41.176 [DEBUG] [Thread-69485] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:23:41.177 [DEBUG] [Thread-69485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:23:41.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:23:41.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:23:41.231 [DEBUG] [Thread-69485] [transport.py] [_log()] userauth is OK
2025-12-12T12:23:41.231 [DEBUG] [Thread-69485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:23:41.231 [DEBUG] [Thread-69485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:23:41.231 [DEBUG] [Thread-69485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:23:41.231 [DEBUG] [Thread-69485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:23:41.250 [INFO] [Thread-69485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:23:41.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:23:41.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:23:41.318 [DEBUG] [Thread-69487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:23:42.083 [DEBUG] [Thread-69485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:23:42.083 [DEBUG] [Thread-69485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:23:42.132 [DEBUG] [Thread-69485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:23:42.132 [DEBUG] [Thread-69485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:23:42.141 [DEBUG] [Thread-69485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:23:42.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:23:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:23: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') -> 00000000
2025-12-12T12:23:42.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:23:42.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:23:42.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:23:42.176 [DEBUG] [Thread-69485] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:23:51.430 [DEBUG] [Thread-69488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:06.473 [DEBUG] [Thread-69489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:12.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:24:12.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:24:12.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:24:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 20), 20.84, 24.94, 0.0, 36.31, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:24:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:20:00
2025-12-12T12:24:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:24:13.148 [DEBUG] [Thread-69490] [transport.py] [_log()] starting thread (client mode): 0xfabc4b80
2025-12-12T12:24:13.148 [DEBUG] [Thread-69490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:24:13.160 [DEBUG] [Thread-69490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:24:13.160 [INFO] [Thread-69490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] client lang: <none>
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] server lang: <none>
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] kex follows: False
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] Compression: none
2025-12-12T12:24:13.162 [DEBUG] [Thread-69490] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:24:13.169 [DEBUG] [Thread-69490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:24:13.169 [DEBUG] [Thread-69490] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:24:13.169 [DEBUG] [Thread-69490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:24:13.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:24:13.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:24:13.170 [DEBUG] [Thread-69490] [transport.py] [_log()] userauth is OK
2025-12-12T12:24:13.170 [DEBUG] [Thread-69490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:24:13.170 [DEBUG] [Thread-69490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:24:13.170 [DEBUG] [Thread-69490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:24:13.170 [DEBUG] [Thread-69490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:24:13.179 [INFO] [Thread-69490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:24:13.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:24:13.774 [DEBUG] [Thread-69490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:24:13.774 [DEBUG] [Thread-69490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:24:13.774 [DEBUG] [Thread-69490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:24:13.815 [DEBUG] [Thread-69490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:24:13.815 [DEBUG] [Thread-69490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:24:13.817 [DEBUG] [Thread-69490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:24:13.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:24:13.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:24:13.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:24:13.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:24:13.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:24:13.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:24:13.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:24:13.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:24:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:24:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.433429 -999.00  +20.40  32.59     28   +1.70 1 1 2 1 1   888    0 20.17 106.64 ----- 43.2 32.6 15.0 65.7 25.1 -25.1 24.3 -24.9 24.1 -22.2 24.8 -22.7
2025-12-12T12:24:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:24:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:24:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.433429
2025-12-12T12:24:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:24:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:24:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:24:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:24:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:24:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:20:00', tmtdew=20.84, humidity=24.94, cloud=0.0, wind=36.31, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:24:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:24:13.841 [DEBUG] [Thread-69490] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:24:13.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:24:13.937 [DEBUG] [Thread-69493] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-12T12:24:13.937 [DEBUG] [Thread-69493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:24:13.952 [DEBUG] [Thread-69493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:24:13.952 [INFO] [Thread-69493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] client lang: <none>
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] server lang: <none>
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] kex follows: False
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:24:13.960 [DEBUG] [Thread-69493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:24:13.961 [DEBUG] [Thread-69493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:24:13.961 [DEBUG] [Thread-69493] [transport.py] [_log()] Compression: none
2025-12-12T12:24:13.961 [DEBUG] [Thread-69493] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:24:14.018 [DEBUG] [Thread-69493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:24:14.018 [DEBUG] [Thread-69493] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:24:14.018 [DEBUG] [Thread-69493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:24:14.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:24:14.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:24:14.075 [DEBUG] [Thread-69493] [transport.py] [_log()] userauth is OK
2025-12-12T12:24:14.075 [DEBUG] [Thread-69493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:24:14.075 [DEBUG] [Thread-69493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:24:14.075 [DEBUG] [Thread-69493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:24:14.075 [DEBUG] [Thread-69493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:24:14.095 [INFO] [Thread-69493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:24:14.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:24:14.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:24:14.944 [DEBUG] [Thread-69493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:24:14.944 [DEBUG] [Thread-69493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:24:14.992 [DEBUG] [Thread-69493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:24:14.992 [DEBUG] [Thread-69493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:24:15.001 [DEBUG] [Thread-69493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:24:15.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:24:15.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:24:15.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:24:15.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:24:15.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:24:15.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:24:15.034 [DEBUG] [Thread-69493] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:24:21.499 [DEBUG] [Thread-69495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:35.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:35.026 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:36.544 [DEBUG] [Thread-69496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:41.369 [DEBUG] [Thread-69497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:24:45.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:24:45.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:24:45.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:24:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 20), 20.84, 24.94, 0.0, 36.31, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:24:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:20:00
2025-12-12T12:24:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:24:45.998 [DEBUG] [Thread-69498] [transport.py] [_log()] starting thread (client mode): 0xf813c700
2025-12-12T12:24:45.998 [DEBUG] [Thread-69498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:24:46.018 [DEBUG] [Thread-69498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:24:46.018 [INFO] [Thread-69498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:24:46.021 [DEBUG] [Thread-69498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:24:46.021 [DEBUG] [Thread-69498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] client lang: <none>
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] server lang: <none>
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] kex follows: False
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] Compression: none
2025-12-12T12:24:46.022 [DEBUG] [Thread-69498] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:24:46.039 [DEBUG] [Thread-69498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:24:46.040 [DEBUG] [Thread-69498] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:24:46.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:24:46.041 [DEBUG] [Thread-69498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:24:46.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:24:46.043 [DEBUG] [Thread-69498] [transport.py] [_log()] userauth is OK
2025-12-12T12:24:46.043 [DEBUG] [Thread-69498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:24:46.043 [DEBUG] [Thread-69498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:24:46.043 [DEBUG] [Thread-69498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:24:46.043 [DEBUG] [Thread-69498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:24:46.060 [INFO] [Thread-69498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:24:46.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:24:46.664 [DEBUG] [Thread-69498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:24:46.664 [DEBUG] [Thread-69498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:24:46.664 [DEBUG] [Thread-69498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:24:46.705 [DEBUG] [Thread-69498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:24:46.705 [DEBUG] [Thread-69498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:24:46.707 [DEBUG] [Thread-69498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:24:46.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:24:46.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:24:46.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:24:46.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:24:46.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:24:46.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:24:46.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.433429 -999.00  +20.40  32.59     28   +1.70 1 1 2 1 1   888    0 20.17 106.64 ----- 43.2 32.6 15.0 65.7 25.1 -25.1 24.3 -24.9 24.1 -22.2 24.8 -22.7
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.433429
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:24:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:20:00', tmtdew=20.84, humidity=24.94, cloud=0.0, wind=36.31, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:24:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:24:46.726 [DEBUG] [Thread-69498] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:24:46.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:24:46.812 [DEBUG] [Thread-69501] [transport.py] [_log()] starting thread (client mode): 0xfabc5900
2025-12-12T12:24:46.812 [DEBUG] [Thread-69501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:24:46.827 [DEBUG] [Thread-69501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:24:46.827 [INFO] [Thread-69501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] client lang: <none>
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] server lang: <none>
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] kex follows: False
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] Compression: none
2025-12-12T12:24:46.835 [DEBUG] [Thread-69501] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:24:46.890 [DEBUG] [Thread-69501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:24:46.890 [DEBUG] [Thread-69501] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:24:46.890 [DEBUG] [Thread-69501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:24:46.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:24:46.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:24:46.947 [DEBUG] [Thread-69501] [transport.py] [_log()] userauth is OK
2025-12-12T12:24:46.947 [DEBUG] [Thread-69501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:24:46.947 [DEBUG] [Thread-69501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:24:46.947 [DEBUG] [Thread-69501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:24:46.947 [DEBUG] [Thread-69501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:24:46.960 [INFO] [Thread-69501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:24:46.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:24:46.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:24:47.833 [DEBUG] [Thread-69501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:24:47.833 [DEBUG] [Thread-69501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:24:47.881 [DEBUG] [Thread-69501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:24:47.881 [DEBUG] [Thread-69501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:24:47.890 [DEBUG] [Thread-69501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:24:47.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:24:47.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:24:47.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:24:47.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:24:47.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:24:47.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:24:47.921 [DEBUG] [Thread-69501] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:24:51.573 [DEBUG] [Thread-69503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:06.601 [DEBUG] [Thread-69504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:17.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:25:17.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:25:17.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:25:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 22, 48), 22.31, 22.62, 0.0, 58.85, 22.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:25:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:22:48
2025-12-12T12:25:18.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:25:18.877 [DEBUG] [Thread-69505] [transport.py] [_log()] starting thread (client mode): 0xf813d0f0
2025-12-12T12:25:18.877 [DEBUG] [Thread-69505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:25:18.898 [DEBUG] [Thread-69505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:25:18.898 [INFO] [Thread-69505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] client lang: <none>
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] server lang: <none>
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] kex follows: False
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] Compression: none
2025-12-12T12:25:18.902 [DEBUG] [Thread-69505] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:25:18.920 [DEBUG] [Thread-69505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:25:18.920 [DEBUG] [Thread-69505] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:25:18.921 [DEBUG] [Thread-69505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:25:18.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:25:18.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:25:18.923 [DEBUG] [Thread-69505] [transport.py] [_log()] userauth is OK
2025-12-12T12:25:18.923 [DEBUG] [Thread-69505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:25:18.923 [DEBUG] [Thread-69505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:25:18.923 [DEBUG] [Thread-69505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:25:18.923 [DEBUG] [Thread-69505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:25:18.959 [INFO] [Thread-69505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:25:18.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:25:19.604 [DEBUG] [Thread-69505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:25:19.605 [DEBUG] [Thread-69505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:25:19.605 [DEBUG] [Thread-69505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:25:19.646 [DEBUG] [Thread-69505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:25:19.646 [DEBUG] [Thread-69505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:25:19.649 [DEBUG] [Thread-69505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:25:19.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:25:19.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:25:19.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:25:19.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:25:19.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:25:19.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:25:19.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:25:19.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:25:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:25:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.433776 -999.00  +20.10  36.35     29   +1.90 1 2 2 1 1   888    0 20.65 107.47 ----- 29.1 36.4 334.6 49.7 25.1 -23.7 24.4 -23.4 24.1 -21.3 24.6 -21.9
2025-12-12T12:25:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:25:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:25:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.433776
2025-12-12T12:25:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:25:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:25:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:25:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:25:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:25:19.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:22:48', tmtdew=22.31, humidity=22.62, cloud=0.0, wind=58.85, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:24:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:25:19.677 [DEBUG] [Thread-69505] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:25:19.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:25:19.766 [DEBUG] [Thread-69508] [transport.py] [_log()] starting thread (client mode): 0xf813dae0
2025-12-12T12:25:19.766 [DEBUG] [Thread-69508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:25:19.785 [DEBUG] [Thread-69508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:25:19.786 [INFO] [Thread-69508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:25:19.793 [DEBUG] [Thread-69508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:25:19.793 [DEBUG] [Thread-69508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:25:19.793 [DEBUG] [Thread-69508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:25:19.793 [DEBUG] [Thread-69508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] client lang: <none>
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] server lang: <none>
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] kex follows: False
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] Compression: none
2025-12-12T12:25:19.794 [DEBUG] [Thread-69508] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:25:19.851 [DEBUG] [Thread-69508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:25:19.852 [DEBUG] [Thread-69508] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:25:19.852 [DEBUG] [Thread-69508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:25:19.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:25:19.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:25:19.910 [DEBUG] [Thread-69508] [transport.py] [_log()] userauth is OK
2025-12-12T12:25:19.910 [DEBUG] [Thread-69508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:25:19.910 [DEBUG] [Thread-69508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:25:19.910 [DEBUG] [Thread-69508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:25:19.910 [DEBUG] [Thread-69508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:25:19.929 [INFO] [Thread-69508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:25:19.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:25:19.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:25:20.762 [DEBUG] [Thread-69508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:25:20.762 [DEBUG] [Thread-69508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:25:20.810 [DEBUG] [Thread-69508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:25:20.810 [DEBUG] [Thread-69508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:25:20.819 [DEBUG] [Thread-69508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:25:20.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:25:20.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12: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') -> 00000000
2025-12-12T12:25:20.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:25:20.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:25:20.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:25:20.856 [DEBUG] [Thread-69508] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:25:21.629 [DEBUG] [Thread-69510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:35.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:35.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:36.761 [DEBUG] [Thread-69511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:41.433 [DEBUG] [Thread-69512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:25:50.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:25:50.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:25:51.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 22, 48), 22.31, 22.62, 0.0, 58.85, 22.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:25:51.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:22:48
2025-12-12T12:25:51.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:25:51.790 [DEBUG] [Thread-69513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:25:51.814 [DEBUG] [Thread-69514] [transport.py] [_log()] starting thread (client mode): 0xf57ab640
2025-12-12T12:25:51.814 [DEBUG] [Thread-69514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:25:51.837 [DEBUG] [Thread-69514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:25:51.837 [INFO] [Thread-69514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] client lang: <none>
2025-12-12T12:25:51.841 [DEBUG] [Thread-69514] [transport.py] [_log()] server lang: <none>
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] kex follows: False
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] Compression: none
2025-12-12T12:25:51.842 [DEBUG] [Thread-69514] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:25:51.860 [DEBUG] [Thread-69514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:25:51.860 [DEBUG] [Thread-69514] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:25:51.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:25:51.861 [DEBUG] [Thread-69514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:25:51.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:25:51.864 [DEBUG] [Thread-69514] [transport.py] [_log()] userauth is OK
2025-12-12T12:25:51.864 [DEBUG] [Thread-69514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:25:51.864 [DEBUG] [Thread-69514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:25:51.864 [DEBUG] [Thread-69514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:25:51.864 [DEBUG] [Thread-69514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:25:51.881 [INFO] [Thread-69514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:25:51.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:25:52.502 [DEBUG] [Thread-69514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:25:52.502 [DEBUG] [Thread-69514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:25:52.503 [DEBUG] [Thread-69514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:25:52.543 [DEBUG] [Thread-69514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:25:52.543 [DEBUG] [Thread-69514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:25:52.547 [DEBUG] [Thread-69514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:25:52.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:25:52.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:25:52.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:25:52.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:25:52.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:25:52.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:25:52.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:25:52.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:25:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:25:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.434123 -999.00  +20.30  39.12     30   +2.10 1 1 2 1 1   888    0 19.90 99.87 ----- 35.7 39.1 344.3 56.3 25.1 -25.0 24.3 -25.1 24.1 -21.3 24.8 -21.6
2025-12-12T12:25:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:25:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:25:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.434123
2025-12-12T12:25:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:25:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:25:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:25:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:25:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:25:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:22:48', tmtdew=22.31, humidity=22.62, cloud=0.0, wind=58.85, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:25:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:25:52.574 [DEBUG] [Thread-69514] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:25:52.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:25:52.666 [DEBUG] [Thread-69517] [transport.py] [_log()] starting thread (client mode): 0xf813eb30
2025-12-12T12:25:52.666 [DEBUG] [Thread-69517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:25:52.680 [DEBUG] [Thread-69517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:25:52.680 [INFO] [Thread-69517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:25:52.688 [DEBUG] [Thread-69517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:25:52.688 [DEBUG] [Thread-69517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:25:52.688 [DEBUG] [Thread-69517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:25:52.688 [DEBUG] [Thread-69517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:52.688 [DEBUG] [Thread-69517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] client lang: <none>
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] server lang: <none>
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] kex follows: False
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:25:52.689 [DEBUG] [Thread-69517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:25:52.690 [DEBUG] [Thread-69517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:25:52.690 [DEBUG] [Thread-69517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:25:52.690 [DEBUG] [Thread-69517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:25:52.690 [DEBUG] [Thread-69517] [transport.py] [_log()] Compression: none
2025-12-12T12:25:52.690 [DEBUG] [Thread-69517] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:25:52.747 [DEBUG] [Thread-69517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:25:52.748 [DEBUG] [Thread-69517] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:25:52.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:25:52.749 [DEBUG] [Thread-69517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:25:52.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:25:52.803 [DEBUG] [Thread-69517] [transport.py] [_log()] userauth is OK
2025-12-12T12:25:52.803 [DEBUG] [Thread-69517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:25:52.803 [DEBUG] [Thread-69517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:25:52.804 [DEBUG] [Thread-69517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:25:52.804 [DEBUG] [Thread-69517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:25:52.830 [INFO] [Thread-69517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:25:52.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:25:52.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:25:53.697 [DEBUG] [Thread-69517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:25:53.697 [DEBUG] [Thread-69517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:25:53.745 [DEBUG] [Thread-69517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:25:53.745 [DEBUG] [Thread-69517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:25:53.754 [DEBUG] [Thread-69517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:25:53.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:25:53.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:25:53.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:25:53.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:25:53.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:25:53.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:25:53.789 [DEBUG] [Thread-69517] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:26:06.813 [DEBUG] [Thread-69519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:21.850 [DEBUG] [Thread-69520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:23.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:26:23.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:26:23.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:26:24.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 22, 48), 22.31, 22.62, 0.0, 58.85, 22.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:26:24.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:22:48
2025-12-12T12:26:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:26:24.728 [DEBUG] [Thread-69521] [transport.py] [_log()] starting thread (client mode): 0xfabc6b00
2025-12-12T12:26:24.728 [DEBUG] [Thread-69521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:26:24.749 [DEBUG] [Thread-69521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:26:24.749 [INFO] [Thread-69521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] client lang: <none>
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] server lang: <none>
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] kex follows: False
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:26:24.751 [DEBUG] [Thread-69521] [transport.py] [_log()] Compression: none
2025-12-12T12:26:24.752 [DEBUG] [Thread-69521] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:26:24.769 [DEBUG] [Thread-69521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:26:24.769 [DEBUG] [Thread-69521] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:26:24.770 [DEBUG] [Thread-69521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:26:24.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:26:24.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:26:24.772 [DEBUG] [Thread-69521] [transport.py] [_log()] userauth is OK
2025-12-12T12:26:24.772 [DEBUG] [Thread-69521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:26:24.772 [DEBUG] [Thread-69521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:26:24.772 [DEBUG] [Thread-69521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:26:24.772 [DEBUG] [Thread-69521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:26:24.791 [INFO] [Thread-69521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:26:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:26:25.418 [DEBUG] [Thread-69521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:26:25.419 [DEBUG] [Thread-69521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:26:25.419 [DEBUG] [Thread-69521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:26:25.460 [DEBUG] [Thread-69521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:26:25.460 [DEBUG] [Thread-69521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:26:25.463 [DEBUG] [Thread-69521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:26:25.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:26:25.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:26:25.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:26:25.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:26:25.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:26:25.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:26:25.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:26:25.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:26:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:26:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.434471 -999.00  +19.90  30.80     31   +2.40 1 2 2 1 1   888    0 20.23 100.25 ----- 29.7 30.8 353.9 53.3 25.1 -23.5 24.2 -23.4 24.1 -22.2 24.6 -21.5
2025-12-12T12:26:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:26:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:26:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.434471
2025-12-12T12:26:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:26:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:26:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:26:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:26:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:26:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:22:48', tmtdew=22.31, humidity=22.62, cloud=0.0, wind=58.85, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:25:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:26:25.490 [DEBUG] [Thread-69521] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:26:25.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:26:25.586 [DEBUG] [Thread-69524] [transport.py] [_log()] starting thread (client mode): 0xf5702e90
2025-12-12T12:26:25.586 [DEBUG] [Thread-69524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:26:25.601 [DEBUG] [Thread-69524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:26:25.601 [INFO] [Thread-69524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:26:25.609 [DEBUG] [Thread-69524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:26:25.609 [DEBUG] [Thread-69524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:26:25.609 [DEBUG] [Thread-69524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:26:25.609 [DEBUG] [Thread-69524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:25.609 [DEBUG] [Thread-69524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] client lang: <none>
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] server lang: <none>
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] kex follows: False
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:26:25.610 [DEBUG] [Thread-69524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:26:25.611 [DEBUG] [Thread-69524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:26:25.611 [DEBUG] [Thread-69524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:26:25.619 [DEBUG] [Thread-69524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:26:25.619 [DEBUG] [Thread-69524] [transport.py] [_log()] Compression: none
2025-12-12T12:26:25.620 [DEBUG] [Thread-69524] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:26:25.667 [DEBUG] [Thread-69524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:26:25.668 [DEBUG] [Thread-69524] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:26:25.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:26:25.669 [DEBUG] [Thread-69524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:26:25.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:26:25.723 [DEBUG] [Thread-69524] [transport.py] [_log()] userauth is OK
2025-12-12T12:26:25.723 [DEBUG] [Thread-69524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:26:25.724 [DEBUG] [Thread-69524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:26:25.724 [DEBUG] [Thread-69524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:26:25.724 [DEBUG] [Thread-69524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:26:25.747 [INFO] [Thread-69524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:26:25.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:26:25.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:26:26.640 [DEBUG] [Thread-69524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:26:26.641 [DEBUG] [Thread-69524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:26:26.689 [DEBUG] [Thread-69524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:26:26.689 [DEBUG] [Thread-69524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:26:26.698 [DEBUG] [Thread-69524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:26:26.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:26:26.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:26:26.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:26:26.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:26:26.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:26:26.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:26:26.733 [DEBUG] [Thread-69524] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:26:35.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:35.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:36.881 [DEBUG] [Thread-69526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:41.487 [DEBUG] [Thread-69527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:51.923 [DEBUG] [Thread-69528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:26:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:26:56.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:26:56.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
2025-12-12T12:26:57.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 22, 48), 22.31, 22.62, 0.0, 58.85, 22.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:26:57.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:22:48
2025-12-12T12:26:57.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:26:57.674 [DEBUG] [Thread-69529] [transport.py] [_log()] starting thread (client mode): 0xf813cb20
2025-12-12T12:26:57.674 [DEBUG] [Thread-69529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:26:57.694 [DEBUG] [Thread-69529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:26:57.694 [INFO] [Thread-69529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] client lang: <none>
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] server lang: <none>
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] kex follows: False
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:26:57.695 [DEBUG] [Thread-69529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:26:57.696 [DEBUG] [Thread-69529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:26:57.696 [DEBUG] [Thread-69529] [transport.py] [_log()] Compression: none
2025-12-12T12:26:57.696 [DEBUG] [Thread-69529] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:26:57.707 [DEBUG] [Thread-69529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:26:57.707 [DEBUG] [Thread-69529] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:26:57.708 [DEBUG] [Thread-69529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:26:57.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:26:57.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:26:57.709 [DEBUG] [Thread-69529] [transport.py] [_log()] userauth is OK
2025-12-12T12:26:57.709 [DEBUG] [Thread-69529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:26:57.709 [DEBUG] [Thread-69529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:26:57.709 [DEBUG] [Thread-69529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:26:57.710 [DEBUG] [Thread-69529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:26:57.722 [INFO] [Thread-69529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:26:57.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:26:58.334 [DEBUG] [Thread-69529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:26:58.334 [DEBUG] [Thread-69529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:26:58.334 [DEBUG] [Thread-69529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:26:58.375 [DEBUG] [Thread-69529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:26:58.375 [DEBUG] [Thread-69529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:26:58.378 [DEBUG] [Thread-69529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:26:58.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:26:58.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:26:58.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:26:58.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:26:58.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:26:58.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:26:58.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:26:58.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:26:58.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:26:58.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.434818 -999.00  +20.50  47.83     30   +2.60 1 2 2 1 1   888    0 20.68 109.02 ----- 44.7 47.8 335.2 55.4 25.2 -23.9 24.4 -23.6 24.1 -22.1 24.7 -21.6
2025-12-12T12:26:58.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:26:58.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:26:58.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.434818
2025-12-12T12:26:58.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:26:58.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:26:58.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:26:58.404 [DEBUG] [Thread-69529] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:26:58.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:26:58.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:26:58.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:22:48', tmtdew=22.31, humidity=22.62, cloud=0.0, wind=58.85, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:26:08.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:26:58.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:26:58.498 [DEBUG] [Thread-69532] [transport.py] [_log()] starting thread (client mode): 0xf813efe0
2025-12-12T12:26:58.499 [DEBUG] [Thread-69532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:26:58.514 [DEBUG] [Thread-69532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:26:58.515 [INFO] [Thread-69532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:26:58.522 [DEBUG] [Thread-69532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:26:58.522 [DEBUG] [Thread-69532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:26:58.522 [DEBUG] [Thread-69532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:26:58.522 [DEBUG] [Thread-69532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:58.522 [DEBUG] [Thread-69532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:26:58.522 [DEBUG] [Thread-69532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] client lang: <none>
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] server lang: <none>
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] kex follows: False
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:26:58.523 [DEBUG] [Thread-69532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:26:58.524 [DEBUG] [Thread-69532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:26:58.524 [DEBUG] [Thread-69532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:26:58.524 [DEBUG] [Thread-69532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:26:58.524 [DEBUG] [Thread-69532] [transport.py] [_log()] Compression: none
2025-12-12T12:26:58.524 [DEBUG] [Thread-69532] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:26:58.579 [DEBUG] [Thread-69532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:26:58.580 [DEBUG] [Thread-69532] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:26:58.580 [DEBUG] [Thread-69532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:26:58.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:26:58.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:26:58.635 [DEBUG] [Thread-69532] [transport.py] [_log()] userauth is OK
2025-12-12T12:26:58.635 [DEBUG] [Thread-69532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:26:58.635 [DEBUG] [Thread-69532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:26:58.635 [DEBUG] [Thread-69532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:26:58.636 [DEBUG] [Thread-69532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:26:58.656 [INFO] [Thread-69532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:26:58.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:26:58.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:26:59.509 [DEBUG] [Thread-69532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:26:59.510 [DEBUG] [Thread-69532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:26:59.558 [DEBUG] [Thread-69532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:26:59.558 [DEBUG] [Thread-69532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:26:59.567 [DEBUG] [Thread-69532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:26:59.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:26:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:26:59.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:26:59.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:26:59.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:26:59.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:26:59.602 [DEBUG] [Thread-69532] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:27:06.953 [DEBUG] [Thread-69534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:27:21.998 [DEBUG] [Thread-69535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:27:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:27:29.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:27:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:27:30.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 22, 48), 22.31, 22.62, 0.0, 58.85, 22.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:27:30.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:22:48
2025-12-12T12:27:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:27:30.559 [DEBUG] [Thread-69536] [transport.py] [_log()] starting thread (client mode): 0xf813c670
2025-12-12T12:27:30.559 [DEBUG] [Thread-69536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:27:30.581 [DEBUG] [Thread-69536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:27:30.581 [INFO] [Thread-69536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:27:30.585 [DEBUG] [Thread-69536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] client lang: <none>
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] server lang: <none>
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] kex follows: False
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] Compression: none
2025-12-12T12:27:30.586 [DEBUG] [Thread-69536] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:27:30.604 [DEBUG] [Thread-69536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:27:30.605 [DEBUG] [Thread-69536] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:27:30.605 [DEBUG] [Thread-69536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:27:30.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:27:30.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:27:30.607 [DEBUG] [Thread-69536] [transport.py] [_log()] userauth is OK
2025-12-12T12:27:30.608 [DEBUG] [Thread-69536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:27:30.608 [DEBUG] [Thread-69536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:27:30.608 [DEBUG] [Thread-69536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:27:30.608 [DEBUG] [Thread-69536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:27:30.643 [INFO] [Thread-69536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:27:30.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:27:31.256 [DEBUG] [Thread-69536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:27:31.256 [DEBUG] [Thread-69536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:27:31.256 [DEBUG] [Thread-69536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:27:31.297 [DEBUG] [Thread-69536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:27:31.297 [DEBUG] [Thread-69536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:27:31.299 [DEBUG] [Thread-69536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:27:31.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:27:31.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:27:31.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:27:31.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:27:31.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:27:31.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:27:31.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:27:31.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:27:31.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:27:31.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.435165 -999.00  +20.70  38.43     30   +2.80 1 2 2 1 1   888    0 20.51 105.52 ----- 26.6 38.4 342.2 52.8 25.2 -23.0 24.5 -23.5 24.1 -22.1 24.9 -21.3
2025-12-12T12:27:31.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:27:31.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:27:31.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.435165
2025-12-12T12:27:31.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:27:31.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:27:31.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:27:31.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:27:31.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:27:31.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:22:48', tmtdew=22.31, humidity=22.62, cloud=0.0, wind=58.85, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:26:38.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:27:31.323 [DEBUG] [Thread-69536] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:27:31.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:27:31.412 [DEBUG] [Thread-69539] [transport.py] [_log()] starting thread (client mode): 0xf5700f70
2025-12-12T12:27:31.412 [DEBUG] [Thread-69539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:27:31.426 [DEBUG] [Thread-69539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:27:31.426 [INFO] [Thread-69539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:27:31.434 [DEBUG] [Thread-69539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:27:31.434 [DEBUG] [Thread-69539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] client lang: <none>
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] server lang: <none>
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] kex follows: False
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:27:31.435 [DEBUG] [Thread-69539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:27:31.436 [DEBUG] [Thread-69539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:27:31.436 [DEBUG] [Thread-69539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:27:31.436 [DEBUG] [Thread-69539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:27:31.436 [DEBUG] [Thread-69539] [transport.py] [_log()] Compression: none
2025-12-12T12:27:31.436 [DEBUG] [Thread-69539] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:27:31.493 [DEBUG] [Thread-69539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:27:31.493 [DEBUG] [Thread-69539] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:27:31.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:27:31.494 [DEBUG] [Thread-69539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:27:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:27:31.551 [DEBUG] [Thread-69539] [transport.py] [_log()] userauth is OK
2025-12-12T12:27:31.551 [DEBUG] [Thread-69539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:27:31.551 [DEBUG] [Thread-69539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:27:31.551 [DEBUG] [Thread-69539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:27:31.551 [DEBUG] [Thread-69539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:27:31.565 [INFO] [Thread-69539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:27:31.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:27:31.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:27:32.414 [DEBUG] [Thread-69539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:27:32.414 [DEBUG] [Thread-69539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:27:32.462 [DEBUG] [Thread-69539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:27:32.462 [DEBUG] [Thread-69539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:27:32.470 [DEBUG] [Thread-69539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:27:32.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:27:32.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:27:32.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:27:32.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:27:32.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:27:32.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:27:32.503 [DEBUG] [Thread-69539] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:27:35.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:27:35.454 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:27:37.024 [DEBUG] [Thread-69541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:27:41.547 [DEBUG] [Thread-69542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:27:52.070 [DEBUG] [Thread-69543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:02.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:28:02.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:28: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
2025-12-12T12:28:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 25, 36), 22.52, 22.29, 0.0, 59.13, 22.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:28:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:25:36
2025-12-12T12:28:03.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:28:03.477 [DEBUG] [Thread-69544] [transport.py] [_log()] starting thread (client mode): 0xf5703340
2025-12-12T12:28:03.477 [DEBUG] [Thread-69544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:28:03.497 [DEBUG] [Thread-69544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:28:03.497 [INFO] [Thread-69544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] client lang: <none>
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] server lang: <none>
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] kex follows: False
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] Compression: none
2025-12-12T12:28:03.501 [DEBUG] [Thread-69544] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:28:03.519 [DEBUG] [Thread-69544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:28:03.519 [DEBUG] [Thread-69544] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:28:03.519 [DEBUG] [Thread-69544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:28:03.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:28:03.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:28:03.520 [DEBUG] [Thread-69544] [transport.py] [_log()] userauth is OK
2025-12-12T12:28:03.520 [DEBUG] [Thread-69544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:28:03.520 [DEBUG] [Thread-69544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:28:03.520 [DEBUG] [Thread-69544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:28:03.520 [DEBUG] [Thread-69544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:28:03.530 [INFO] [Thread-69544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:28:03.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:28:04.170 [DEBUG] [Thread-69544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:28:04.170 [DEBUG] [Thread-69544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:28:04.170 [DEBUG] [Thread-69544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:28:04.213 [DEBUG] [Thread-69544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:28:04.213 [DEBUG] [Thread-69544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:28:04.215 [DEBUG] [Thread-69544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:28:04.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:28:04.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:28:04.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:28:04.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:28:04.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:28:04.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:28:04.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.435512 -999.00  +20.90  38.19     30   +2.60 1 2 2 1 1   888    0 20.51 103.15 ----- 43.6 38.2 333.1 50.1 25.2 -24.8 24.5 -23.5 24.2 -20.7 24.9 -22.6
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.435512
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:28:04.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:25:36', tmtdew=22.52, humidity=22.29, cloud=0.0, wind=59.13, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:27:08.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:28:04.235 [DEBUG] [Thread-69544] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:28:04.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:28:04.319 [DEBUG] [Thread-69547] [transport.py] [_log()] starting thread (client mode): 0xf5703610
2025-12-12T12:28:04.319 [DEBUG] [Thread-69547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:28:04.333 [DEBUG] [Thread-69547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:28:04.333 [INFO] [Thread-69547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] client lang: <none>
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] server lang: <none>
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] kex follows: False
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] Compression: none
2025-12-12T12:28:04.341 [DEBUG] [Thread-69547] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:28:04.398 [DEBUG] [Thread-69547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:28:04.398 [DEBUG] [Thread-69547] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:28:04.398 [DEBUG] [Thread-69547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:28:04.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:28:04.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:28:04.456 [DEBUG] [Thread-69547] [transport.py] [_log()] userauth is OK
2025-12-12T12:28:04.456 [DEBUG] [Thread-69547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:28:04.456 [DEBUG] [Thread-69547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:28:04.456 [DEBUG] [Thread-69547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:28:04.456 [DEBUG] [Thread-69547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:28:04.474 [INFO] [Thread-69547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:28:04.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:28:04.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:28:05.320 [DEBUG] [Thread-69547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:28:05.320 [DEBUG] [Thread-69547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:28:05.372 [DEBUG] [Thread-69547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:28:05.372 [DEBUG] [Thread-69547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:28:05.381 [DEBUG] [Thread-69547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:28:05.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:28:05.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:28:05.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:28:05.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:28:05.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:28:05.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:28:05.415 [DEBUG] [Thread-69547] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:28:07.099 [DEBUG] [Thread-69549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:22.148 [DEBUG] [Thread-69550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:35.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:28:35.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:28:35.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:28:35.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:35.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:36.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 25, 36), 22.52, 22.29, 0.0, 59.13, 22.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:28:36.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:25:36
2025-12-12T12:28:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:28:36.347 [DEBUG] [Thread-69551] [transport.py] [_log()] starting thread (client mode): 0xf5700310
2025-12-12T12:28:36.348 [DEBUG] [Thread-69551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:28:36.368 [DEBUG] [Thread-69551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:28:36.368 [INFO] [Thread-69551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:28:36.372 [DEBUG] [Thread-69551] [transport.py] [_log()] client lang: <none>
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] server lang: <none>
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] kex follows: False
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] Compression: none
2025-12-12T12:28:36.373 [DEBUG] [Thread-69551] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:28:36.390 [DEBUG] [Thread-69551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:28:36.391 [DEBUG] [Thread-69551] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:28:36.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:28:36.392 [DEBUG] [Thread-69551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:28:36.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:28:36.394 [DEBUG] [Thread-69551] [transport.py] [_log()] userauth is OK
2025-12-12T12:28:36.394 [DEBUG] [Thread-69551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:28:36.394 [DEBUG] [Thread-69551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:28:36.394 [DEBUG] [Thread-69551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:28:36.394 [DEBUG] [Thread-69551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:28:36.418 [INFO] [Thread-69551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:28:36.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:28:37.066 [DEBUG] [Thread-69551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:28:37.066 [DEBUG] [Thread-69551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:28:37.066 [DEBUG] [Thread-69551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:28:37.107 [DEBUG] [Thread-69551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:28:37.107 [DEBUG] [Thread-69551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:28:37.110 [DEBUG] [Thread-69551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:28:37.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:28:37.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:28:37.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:28:37.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:28:37.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:28:37.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:28:37.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:28:37.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:28:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:28:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.436206 -999.00  +20.50  42.91     31   +2.80 1 2 2 1 1   888    0 20.45 108.94 ----- 50.5 42.9 315.3 52.2 25.1 -24.5 24.4 -23.4 24.1 -22.2 24.8 -22.4
2025-12-12T12:28:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:28:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:28:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.436206
2025-12-12T12:28:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:28:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:28:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:28:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:28:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:28:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:25:36', tmtdew=22.52, humidity=22.29, cloud=0.0, wind=59.13, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:28:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:28:37.134 [DEBUG] [Thread-69551] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:28:37.181 [DEBUG] [Thread-69554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:37.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:28:37.231 [DEBUG] [Thread-69555] [transport.py] [_log()] starting thread (client mode): 0xf57abe20
2025-12-12T12:28:37.231 [DEBUG] [Thread-69555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:28:37.246 [DEBUG] [Thread-69555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:28:37.246 [INFO] [Thread-69555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:28:37.253 [DEBUG] [Thread-69555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] client lang: <none>
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] server lang: <none>
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] kex follows: False
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] Compression: none
2025-12-12T12:28:37.254 [DEBUG] [Thread-69555] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:28:37.311 [DEBUG] [Thread-69555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:28:37.311 [DEBUG] [Thread-69555] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:28:37.312 [DEBUG] [Thread-69555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:28:37.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:28:37.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:28:37.371 [DEBUG] [Thread-69555] [transport.py] [_log()] userauth is OK
2025-12-12T12:28:37.371 [DEBUG] [Thread-69555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:28:37.371 [DEBUG] [Thread-69555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:28:37.371 [DEBUG] [Thread-69555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:28:37.371 [DEBUG] [Thread-69555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:28:37.390 [INFO] [Thread-69555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:28:37.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:28:37.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:28:38.218 [DEBUG] [Thread-69555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:28:38.218 [DEBUG] [Thread-69555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:28:38.266 [DEBUG] [Thread-69555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:28:38.266 [DEBUG] [Thread-69555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:28:38.274 [DEBUG] [Thread-69555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:28:38.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:28:38.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:28:38.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:28:38.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:28:38.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:28:38.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:28:38.305 [DEBUG] [Thread-69555] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:28:41.594 [DEBUG] [Thread-69557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:28:52.216 [DEBUG] [Thread-69558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:07.249 [DEBUG] [Thread-69559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:08.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:29:08.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:29:08.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:29:08.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 25, 36), 22.52, 22.29, 0.0, 59.13, 22.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:29:08.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:25:36
2025-12-12T12:29:09.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:29:09.236 [DEBUG] [Thread-69560] [transport.py] [_log()] starting thread (client mode): 0xf5702ce0
2025-12-12T12:29:09.237 [DEBUG] [Thread-69560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:29:09.257 [DEBUG] [Thread-69560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:29:09.257 [INFO] [Thread-69560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:29:09.260 [DEBUG] [Thread-69560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:29:09.260 [DEBUG] [Thread-69560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:29:09.260 [DEBUG] [Thread-69560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:29:09.260 [DEBUG] [Thread-69560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:09.260 [DEBUG] [Thread-69560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:09.260 [DEBUG] [Thread-69560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] client lang: <none>
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] server lang: <none>
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] kex follows: False
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] Compression: none
2025-12-12T12:29:09.261 [DEBUG] [Thread-69560] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:29:09.280 [DEBUG] [Thread-69560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:29:09.280 [DEBUG] [Thread-69560] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:29:09.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:29:09.282 [DEBUG] [Thread-69560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:29:09.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:29:09.284 [DEBUG] [Thread-69560] [transport.py] [_log()] userauth is OK
2025-12-12T12:29:09.284 [DEBUG] [Thread-69560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:29:09.284 [DEBUG] [Thread-69560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:29:09.284 [DEBUG] [Thread-69560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:29:09.284 [DEBUG] [Thread-69560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:29:09.300 [INFO] [Thread-69560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:29:09.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:29:09.900 [DEBUG] [Thread-69560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:29:09.900 [DEBUG] [Thread-69560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:29:09.900 [DEBUG] [Thread-69560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:29:09.941 [DEBUG] [Thread-69560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:29:09.941 [DEBUG] [Thread-69560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:29:09.944 [DEBUG] [Thread-69560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:29:09.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:29:09.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:29:09.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:29:09.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:29:09.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:29:09.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:29:09.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:29:09.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:29:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:29:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.436554 -999.00  +19.90  33.86     32   +2.70 1 1 2 1 1   888    0 20.31 104.52 ----- 32.6 33.9 329.0 55.4 25.2 -22.9 24.3 -25.6 24.1 -21.5 24.8 -21.5
2025-12-12T12:29:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:29:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:29:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.436554
2025-12-12T12:29:09.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:29:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:29:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:29:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:29:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:29:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:25:36', tmtdew=22.52, humidity=22.29, cloud=0.0, wind=59.13, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:28:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:29:09.972 [DEBUG] [Thread-69560] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:29:10.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:29:10.067 [DEBUG] [Thread-69563] [transport.py] [_log()] starting thread (client mode): 0xf5703a00
2025-12-12T12:29:10.068 [DEBUG] [Thread-69563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:29:10.082 [DEBUG] [Thread-69563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:29:10.082 [INFO] [Thread-69563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] client lang: <none>
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] server lang: <none>
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] kex follows: False
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:29:10.090 [DEBUG] [Thread-69563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:29:10.091 [DEBUG] [Thread-69563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:29:10.091 [DEBUG] [Thread-69563] [transport.py] [_log()] Compression: none
2025-12-12T12:29:10.091 [DEBUG] [Thread-69563] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:29:10.147 [DEBUG] [Thread-69563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:29:10.148 [DEBUG] [Thread-69563] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:29:10.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:29:10.149 [DEBUG] [Thread-69563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:29:10.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:29:10.203 [DEBUG] [Thread-69563] [transport.py] [_log()] userauth is OK
2025-12-12T12:29:10.203 [DEBUG] [Thread-69563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:29:10.203 [DEBUG] [Thread-69563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:29:10.204 [DEBUG] [Thread-69563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:29:10.204 [DEBUG] [Thread-69563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:29:10.223 [INFO] [Thread-69563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:29:10.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:29:10.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:29:11.090 [DEBUG] [Thread-69563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:29:11.090 [DEBUG] [Thread-69563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:29:11.138 [DEBUG] [Thread-69563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:29:11.139 [DEBUG] [Thread-69563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:29:11.147 [DEBUG] [Thread-69563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:29:11.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:29:11.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:29:11.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:29:11.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:29:11.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:29:11.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:29:11.182 [DEBUG] [Thread-69563] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:29:22.279 [DEBUG] [Thread-69565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:35.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:35.738 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:37.310 [DEBUG] [Thread-69566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:41.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:29:41.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:29:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:29:41.638 [DEBUG] [Thread-69567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:29:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 25, 36), 22.52, 22.29, 0.0, 59.13, 22.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:29:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:25:36
2025-12-12T12:29:41.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:29:42.132 [DEBUG] [Thread-69568] [transport.py] [_log()] starting thread (client mode): 0xf57031f0
2025-12-12T12:29:42.132 [DEBUG] [Thread-69568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:29:42.152 [DEBUG] [Thread-69568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:29:42.152 [INFO] [Thread-69568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:29:42.155 [DEBUG] [Thread-69568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] client lang: <none>
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] server lang: <none>
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] kex follows: False
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:29:42.156 [DEBUG] [Thread-69568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:29:42.157 [DEBUG] [Thread-69568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:29:42.157 [DEBUG] [Thread-69568] [transport.py] [_log()] Compression: none
2025-12-12T12:29:42.157 [DEBUG] [Thread-69568] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:29:42.172 [DEBUG] [Thread-69568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:29:42.172 [DEBUG] [Thread-69568] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:29:42.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:29:42.173 [DEBUG] [Thread-69568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:29:42.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:29:42.175 [DEBUG] [Thread-69568] [transport.py] [_log()] userauth is OK
2025-12-12T12:29:42.175 [DEBUG] [Thread-69568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:29:42.175 [DEBUG] [Thread-69568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:29:42.176 [DEBUG] [Thread-69568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:29:42.176 [DEBUG] [Thread-69568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:29:42.200 [INFO] [Thread-69568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:29:42.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:29:42.845 [DEBUG] [Thread-69568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:29:42.845 [DEBUG] [Thread-69568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:29:42.845 [DEBUG] [Thread-69568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:29:42.886 [DEBUG] [Thread-69568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:29:42.886 [DEBUG] [Thread-69568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:29:42.889 [DEBUG] [Thread-69568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:29:42.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:29:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:29:42.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:29:42.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:29:42.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:29:42.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:29:42.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:29:42.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:29:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:29:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.436901 -999.00  +20.20  36.58     32   +3.00 1 2 2 1 1   888    0 20.31 98.74 ----- 32.9 36.6 314.0 45.8 25.2 -23.0 24.4 -22.6 24.1 -22.4 24.8 -21.0
2025-12-12T12:29:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:29:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:29:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.436901
2025-12-12T12:29:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:29:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:29:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:29:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:29:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:29:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:25:36', tmtdew=22.52, humidity=22.29, cloud=0.0, wind=59.13, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:29:08.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:29:42.911 [DEBUG] [Thread-69568] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:29:43.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:29:43.020 [DEBUG] [Thread-69571] [transport.py] [_log()] starting thread (client mode): 0xf5701c00
2025-12-12T12:29:43.020 [DEBUG] [Thread-69571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:29:43.034 [DEBUG] [Thread-69571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:29:43.034 [INFO] [Thread-69571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:29:43.042 [DEBUG] [Thread-69571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] client lang: <none>
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] server lang: <none>
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] kex follows: False
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:29:43.043 [DEBUG] [Thread-69571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:29:43.044 [DEBUG] [Thread-69571] [transport.py] [_log()] Compression: none
2025-12-12T12:29:43.044 [DEBUG] [Thread-69571] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:29:43.099 [DEBUG] [Thread-69571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:29:43.099 [DEBUG] [Thread-69571] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:29:43.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:29:43.100 [DEBUG] [Thread-69571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:29:43.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:29:43.155 [DEBUG] [Thread-69571] [transport.py] [_log()] userauth is OK
2025-12-12T12:29:43.155 [DEBUG] [Thread-69571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:29:43.155 [DEBUG] [Thread-69571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:29:43.155 [DEBUG] [Thread-69571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:29:43.155 [DEBUG] [Thread-69571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:29:43.174 [INFO] [Thread-69571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:29:43.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:29:43.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:29:44.035 [DEBUG] [Thread-69571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:29:44.035 [DEBUG] [Thread-69571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:29:44.084 [DEBUG] [Thread-69571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:29:44.084 [DEBUG] [Thread-69571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:29:44.093 [DEBUG] [Thread-69571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:29:44.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:29:44.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:29:44.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:29:44.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:29:44.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:29:44.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:29:44.127 [DEBUG] [Thread-69571] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:29:52.340 [DEBUG] [Thread-69573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:07.383 [DEBUG] [Thread-69574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:30:14.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:30:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:30:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 25, 36), 22.52, 22.29, 0.0, 59.13, 22.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:30:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:25:36
2025-12-12T12:30:14.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:30:15.083 [DEBUG] [Thread-69575] [transport.py] [_log()] starting thread (client mode): 0xf5703f70
2025-12-12T12:30:15.083 [DEBUG] [Thread-69575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:30:15.104 [DEBUG] [Thread-69575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:30:15.104 [INFO] [Thread-69575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] client lang: <none>
2025-12-12T12:30:15.107 [DEBUG] [Thread-69575] [transport.py] [_log()] server lang: <none>
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] kex follows: False
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] Compression: none
2025-12-12T12:30:15.108 [DEBUG] [Thread-69575] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:30:15.130 [DEBUG] [Thread-69575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:30:15.130 [DEBUG] [Thread-69575] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:30:15.131 [DEBUG] [Thread-69575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:30:15.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:30:15.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:30:15.133 [DEBUG] [Thread-69575] [transport.py] [_log()] userauth is OK
2025-12-12T12:30:15.133 [DEBUG] [Thread-69575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:30:15.133 [DEBUG] [Thread-69575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:30:15.133 [DEBUG] [Thread-69575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:30:15.133 [DEBUG] [Thread-69575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:30:15.156 [INFO] [Thread-69575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:30:15.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:30:17.368 [DEBUG] [Thread-69575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:30:17.368 [DEBUG] [Thread-69575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:30:17.368 [DEBUG] [Thread-69575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:30:17.409 [DEBUG] [Thread-69575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:30:17.409 [DEBUG] [Thread-69575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:30:17.412 [DEBUG] [Thread-69575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:30:17.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:30:17.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:30:17.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:30:17.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:30:17.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:30:17.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:30:17.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:30:17.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:30:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:30:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.437248 -999.00  +20.70  29.48     31   +3.00 1 2 1 1 1   888    0 20.58 96.88 ----- 28.1 29.5 354.3 46.2 25.3 -24.3 24.4 -22.6 24.2 -19.9 24.9 -23.7
2025-12-12T12:30:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:30:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:30:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.437248
2025-12-12T12:30:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:30:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:30:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:30:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:30:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:30:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:25:36', tmtdew=22.52, humidity=22.29, cloud=0.0, wind=59.13, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:29:38.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:30:17.437 [DEBUG] [Thread-69575] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:30:17.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:30:17.531 [DEBUG] [Thread-69578] [transport.py] [_log()] starting thread (client mode): 0xf57a89a0
2025-12-12T12:30:17.531 [DEBUG] [Thread-69578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:30:17.549 [DEBUG] [Thread-69578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:30:17.550 [INFO] [Thread-69578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:17.561 [DEBUG] [Thread-69578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] client lang: <none>
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] server lang: <none>
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] kex follows: False
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] Compression: none
2025-12-12T12:30:17.562 [DEBUG] [Thread-69578] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:30:17.618 [DEBUG] [Thread-69578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:30:17.619 [DEBUG] [Thread-69578] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:30:17.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:30:17.620 [DEBUG] [Thread-69578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:30:17.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:30:17.675 [DEBUG] [Thread-69578] [transport.py] [_log()] userauth is OK
2025-12-12T12:30:17.675 [DEBUG] [Thread-69578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:30:17.675 [DEBUG] [Thread-69578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:30:17.675 [DEBUG] [Thread-69578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:30:17.675 [DEBUG] [Thread-69578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:30:17.694 [INFO] [Thread-69578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:30:17.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:30:17.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:30:18.542 [DEBUG] [Thread-69578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:30:18.542 [DEBUG] [Thread-69578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:30:18.590 [DEBUG] [Thread-69578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:30:18.590 [DEBUG] [Thread-69578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:30:18.598 [DEBUG] [Thread-69578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:30:18.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:30:18.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:30:18.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:30:18.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:30:18.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:30:18.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:30:18.639 [DEBUG] [Thread-69578] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:30:22.414 [DEBUG] [Thread-69580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:35.879 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:35.880 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:37.461 [DEBUG] [Thread-69581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:41.687 [DEBUG] [Thread-69582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:30:48.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:30:48.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:30:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:30:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 28, 24), 20.86, 24.91, 0.0, 37.54, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:30:49.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:28:24
2025-12-12T12:30:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:30:49.585 [DEBUG] [Thread-69583] [transport.py] [_log()] starting thread (client mode): 0xf57032b0
2025-12-12T12:30:49.585 [DEBUG] [Thread-69583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:30:49.606 [DEBUG] [Thread-69583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:30:49.606 [INFO] [Thread-69583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:30:49.609 [DEBUG] [Thread-69583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:30:49.609 [DEBUG] [Thread-69583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:30:49.609 [DEBUG] [Thread-69583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:30:49.609 [DEBUG] [Thread-69583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] client lang: <none>
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] server lang: <none>
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] kex follows: False
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:30:49.610 [DEBUG] [Thread-69583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:30:49.611 [DEBUG] [Thread-69583] [transport.py] [_log()] Compression: none
2025-12-12T12:30:49.611 [DEBUG] [Thread-69583] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:30:49.629 [DEBUG] [Thread-69583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:30:49.629 [DEBUG] [Thread-69583] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:30:49.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:30:49.630 [DEBUG] [Thread-69583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:30:49.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:30:49.632 [DEBUG] [Thread-69583] [transport.py] [_log()] userauth is OK
2025-12-12T12:30:49.632 [DEBUG] [Thread-69583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:30:49.632 [DEBUG] [Thread-69583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:30:49.633 [DEBUG] [Thread-69583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:30:49.633 [DEBUG] [Thread-69583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:30:49.657 [INFO] [Thread-69583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:30:49.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:30:50.313 [DEBUG] [Thread-69583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:30:50.314 [DEBUG] [Thread-69583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:30:50.314 [DEBUG] [Thread-69583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:30:50.355 [DEBUG] [Thread-69583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:30:50.355 [DEBUG] [Thread-69583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:30:50.358 [DEBUG] [Thread-69583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:30:50.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:30:50.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:30:50.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:30:50.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:30:50.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:30:50.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:30:50.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:30:50.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:30:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:30:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.437595 -999.00  +19.90  34.00     32   +2.80 1 1 2 1 1   888    0 20.05 92.83 ----- 30.7 34.0 359.6 50.6 24.9 -24.4 24.4 -24.4 24.1 -22.4 24.6 -24.7
2025-12-12T12:30:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:30:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:30:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.437595
2025-12-12T12:30:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:30:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:30:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:30:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:30:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:30:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:28:24', tmtdew=20.86, humidity=24.91, cloud=0.0, wind=37.54, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:30:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:30:50.383 [DEBUG] [Thread-69583] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:30:50.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:30:50.479 [DEBUG] [Thread-69586] [transport.py] [_log()] starting thread (client mode): 0xf57022c0
2025-12-12T12:30:50.479 [DEBUG] [Thread-69586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:30:50.493 [DEBUG] [Thread-69586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:30:50.493 [INFO] [Thread-69586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:30:50.501 [DEBUG] [Thread-69586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:30:50.501 [DEBUG] [Thread-69586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:30:50.501 [DEBUG] [Thread-69586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:30:50.501 [DEBUG] [Thread-69586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:50.501 [DEBUG] [Thread-69586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] client lang: <none>
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] server lang: <none>
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] kex follows: False
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] Compression: none
2025-12-12T12:30:50.502 [DEBUG] [Thread-69586] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:30:50.559 [DEBUG] [Thread-69586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:30:50.559 [DEBUG] [Thread-69586] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:30:50.560 [DEBUG] [Thread-69586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:30:50.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:30:50.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:30:50.615 [DEBUG] [Thread-69586] [transport.py] [_log()] userauth is OK
2025-12-12T12:30:50.615 [DEBUG] [Thread-69586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:30:50.615 [DEBUG] [Thread-69586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:30:50.615 [DEBUG] [Thread-69586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:30:50.615 [DEBUG] [Thread-69586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:30:50.638 [INFO] [Thread-69586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:30:50.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:30:50.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:30:51.497 [DEBUG] [Thread-69586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:30:51.497 [DEBUG] [Thread-69586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:30:51.545 [DEBUG] [Thread-69586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:30:51.545 [DEBUG] [Thread-69586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:30:51.554 [DEBUG] [Thread-69586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:30:51.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:30:51.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')
2025-12-12T12:30: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
2025-12-12T12:30:51.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:30:51.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:30:51.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:30:51.588 [DEBUG] [Thread-69586] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:30:52.488 [DEBUG] [Thread-69588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:07.536 [DEBUG] [Thread-69589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:31:21.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:31:21.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:31:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 28, 24), 20.86, 24.91, 0.0, 37.54, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:31:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:28:24
2025-12-12T12:31:22.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:31:22.536 [DEBUG] [Thread-69590] [transport.py] [_log()] starting thread (client mode): 0xf81c26e0
2025-12-12T12:31:22.536 [DEBUG] [Thread-69590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:31:22.556 [DEBUG] [Thread-69590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:31:22.557 [INFO] [Thread-69590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:31:22.560 [DEBUG] [Thread-69590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:31:22.560 [DEBUG] [Thread-69590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:31:22.560 [DEBUG] [Thread-69590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:31:22.560 [DEBUG] [Thread-69590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] client lang: <none>
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] server lang: <none>
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] kex follows: False
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] Compression: none
2025-12-12T12:31:22.561 [DEBUG] [Thread-69590] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:31:22.566 [DEBUG] [Thread-69592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:22.578 [DEBUG] [Thread-69590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:31:22.579 [DEBUG] [Thread-69590] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:31:22.579 [DEBUG] [Thread-69590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:31:22.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:31:22.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:31:22.581 [DEBUG] [Thread-69590] [transport.py] [_log()] userauth is OK
2025-12-12T12:31:22.581 [DEBUG] [Thread-69590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:31:22.582 [DEBUG] [Thread-69590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:31:22.582 [DEBUG] [Thread-69590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:31:22.582 [DEBUG] [Thread-69590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:31:22.606 [INFO] [Thread-69590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:31:22.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:31:23.267 [DEBUG] [Thread-69590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:31:23.267 [DEBUG] [Thread-69590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:31:23.267 [DEBUG] [Thread-69590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:31:23.308 [DEBUG] [Thread-69590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:31:23.308 [DEBUG] [Thread-69590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:31:23.311 [DEBUG] [Thread-69590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:31:23.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:31:23.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:31:23.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:31:23.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:31:23.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:31:23.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:31:23.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:31:23.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:31:23.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:31:23.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.437943 -999.00  +19.70  30.79     32   +2.90 1 1 2 1 1   888    0 20.18 86.83 ----- 46.4 30.8 336.4 49.8 25.0 -22.4 24.1 -25.2 24.0 -21.0 24.6 -20.7
2025-12-12T12:31:23.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:31:23.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:31:23.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.437943
2025-12-12T12:31:23.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:31:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:31:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:31:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:31:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:31:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:28:24', tmtdew=20.86, humidity=24.91, cloud=0.0, wind=37.54, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:30:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:31:23.338 [DEBUG] [Thread-69590] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:31:23.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:31:23.441 [DEBUG] [Thread-69594] [transport.py] [_log()] starting thread (client mode): 0xf81c3c40
2025-12-12T12:31:23.441 [DEBUG] [Thread-69594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:31:23.455 [DEBUG] [Thread-69594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:31:23.456 [INFO] [Thread-69594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] client lang: <none>
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] server lang: <none>
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] kex follows: False
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:31:23.463 [DEBUG] [Thread-69594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:31:23.464 [DEBUG] [Thread-69594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:31:23.464 [DEBUG] [Thread-69594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:31:23.464 [DEBUG] [Thread-69594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:31:23.464 [DEBUG] [Thread-69594] [transport.py] [_log()] Compression: none
2025-12-12T12:31:23.464 [DEBUG] [Thread-69594] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:31:23.522 [DEBUG] [Thread-69594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:31:23.523 [DEBUG] [Thread-69594] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:31:23.523 [DEBUG] [Thread-69594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:31:23.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:31:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:31:23.579 [DEBUG] [Thread-69594] [transport.py] [_log()] userauth is OK
2025-12-12T12:31:23.579 [DEBUG] [Thread-69594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:31:23.579 [DEBUG] [Thread-69594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:31:23.579 [DEBUG] [Thread-69594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:31:23.579 [DEBUG] [Thread-69594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:31:23.601 [INFO] [Thread-69594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:31:23.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:31:23.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:31:24.432 [DEBUG] [Thread-69594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:31:24.432 [DEBUG] [Thread-69594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:31:24.481 [DEBUG] [Thread-69594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:31:24.481 [DEBUG] [Thread-69594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:31:24.493 [DEBUG] [Thread-69594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:31:24.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:31: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')
2025-12-12T12:31:24.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:31:24.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:31:24.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:31:24.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:31:24.528 [DEBUG] [Thread-69594] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:31:36.021 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:36.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:37.598 [DEBUG] [Thread-69596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:41.747 [DEBUG] [Thread-69597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:52.636 [DEBUG] [Thread-69598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:31:54.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:31:54.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:31:54.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:31:55.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 28, 24), 20.86, 24.91, 0.0, 37.54, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:31:55.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:28:24
2025-12-12T12:31:55.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:31:55.503 [DEBUG] [Thread-69599] [transport.py] [_log()] starting thread (client mode): 0xf5702530
2025-12-12T12:31:55.503 [DEBUG] [Thread-69599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:31:55.523 [DEBUG] [Thread-69599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:31:55.523 [INFO] [Thread-69599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] client lang: <none>
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] server lang: <none>
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] kex follows: False
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] Compression: none
2025-12-12T12:31:55.525 [DEBUG] [Thread-69599] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:31:55.532 [DEBUG] [Thread-69599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:31:55.532 [DEBUG] [Thread-69599] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:31:55.532 [DEBUG] [Thread-69599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:31:55.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:31:55.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:31:55.533 [DEBUG] [Thread-69599] [transport.py] [_log()] userauth is OK
2025-12-12T12:31:55.533 [DEBUG] [Thread-69599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:31:55.533 [DEBUG] [Thread-69599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:31:55.533 [DEBUG] [Thread-69599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:31:55.533 [DEBUG] [Thread-69599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:31:55.548 [INFO] [Thread-69599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:31:55.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:31:56.194 [DEBUG] [Thread-69599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:31:56.194 [DEBUG] [Thread-69599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:31:56.194 [DEBUG] [Thread-69599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:31:56.235 [DEBUG] [Thread-69599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:31:56.235 [DEBUG] [Thread-69599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:31:56.237 [DEBUG] [Thread-69599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:31:56.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:31:56.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:31:56.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:31:56.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:31:56.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:31:56.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:31:56.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.438290 -999.00  +20.30  39.27     30   +2.20 1 2 2 1 1   888    0 19.83 79.37 ----- 38.4 39.3 333.0 61.9 25.1 -23.6 24.2 -24.0 24.0 -21.1 24.7 -21.6
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.438290
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:31:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:28:24', tmtdew=20.86, humidity=24.91, cloud=0.0, wind=37.54, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:31:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:31:56.257 [DEBUG] [Thread-69599] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:31:56.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:31:56.343 [DEBUG] [Thread-69602] [transport.py] [_log()] starting thread (client mode): 0xf5700730
2025-12-12T12:31:56.343 [DEBUG] [Thread-69602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:31:56.358 [DEBUG] [Thread-69602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:31:56.358 [INFO] [Thread-69602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] client lang: <none>
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] server lang: <none>
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] kex follows: False
2025-12-12T12:31:56.365 [DEBUG] [Thread-69602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:31:56.366 [DEBUG] [Thread-69602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:31:56.366 [DEBUG] [Thread-69602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:31:56.366 [DEBUG] [Thread-69602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:31:56.366 [DEBUG] [Thread-69602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:31:56.366 [DEBUG] [Thread-69602] [transport.py] [_log()] Compression: none
2025-12-12T12:31:56.366 [DEBUG] [Thread-69602] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:31:56.421 [DEBUG] [Thread-69602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:31:56.421 [DEBUG] [Thread-69602] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:31:56.421 [DEBUG] [Thread-69602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:31:56.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:31:56.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:31:56.479 [DEBUG] [Thread-69602] [transport.py] [_log()] userauth is OK
2025-12-12T12:31:56.479 [DEBUG] [Thread-69602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:31:56.479 [DEBUG] [Thread-69602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:31:56.479 [DEBUG] [Thread-69602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:31:56.479 [DEBUG] [Thread-69602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:31:56.492 [INFO] [Thread-69602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:31:56.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:31:56.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:31:57.326 [DEBUG] [Thread-69602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:31:57.326 [DEBUG] [Thread-69602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:31:57.378 [DEBUG] [Thread-69602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:31:57.378 [DEBUG] [Thread-69602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:31:57.387 [DEBUG] [Thread-69602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:31:57.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:31:57.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:31:57.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:31:57.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:31:57.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:31:57.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:31:57.421 [DEBUG] [Thread-69602] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:32:07.662 [DEBUG] [Thread-69604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:32:22.710 [DEBUG] [Thread-69605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:32:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:32:27.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:32:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:32:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 28, 24), 20.86, 24.91, 0.0, 37.54, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:32:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:28:24
2025-12-12T12:32:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:32:28.380 [DEBUG] [Thread-69606] [transport.py] [_log()] starting thread (client mode): 0xfabc60e0
2025-12-12T12:32:28.380 [DEBUG] [Thread-69606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:32:28.400 [DEBUG] [Thread-69606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:32:28.401 [INFO] [Thread-69606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] client lang: <none>
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] server lang: <none>
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] kex follows: False
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] Compression: none
2025-12-12T12:32:28.402 [DEBUG] [Thread-69606] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:32:28.421 [DEBUG] [Thread-69606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:32:28.421 [DEBUG] [Thread-69606] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:32:28.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:32:28.422 [DEBUG] [Thread-69606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:32:28.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:32:28.424 [DEBUG] [Thread-69606] [transport.py] [_log()] userauth is OK
2025-12-12T12:32:28.424 [DEBUG] [Thread-69606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:32:28.424 [DEBUG] [Thread-69606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:32:28.424 [DEBUG] [Thread-69606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:32:28.424 [DEBUG] [Thread-69606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:32:28.447 [INFO] [Thread-69606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:32:28.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:32:29.056 [DEBUG] [Thread-69606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:32:29.056 [DEBUG] [Thread-69606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:32:29.056 [DEBUG] [Thread-69606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:32:29.097 [DEBUG] [Thread-69606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:32:29.097 [DEBUG] [Thread-69606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:32:29.100 [DEBUG] [Thread-69606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:32:29.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:32:29.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:32:29.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:32:29.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:32:29.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:32:29.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:32:29.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:32:29.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:32:29.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.438637 -999.00  +20.20  54.79     30   +2.20 1 2 2 1 1   888    0 19.76 76.43 ----- 37.1 54.8 329.6 59.8 25.1 -23.2 24.4 -23.4 24.1 -21.6 24.7 -21.4
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.438637
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:32:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:32:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:32:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:32:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:28:24', tmtdew=20.86, humidity=24.91, cloud=0.0, wind=37.54, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:31:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:32:29.125 [DEBUG] [Thread-69606] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:32:29.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:32:29.212 [DEBUG] [Thread-69609] [transport.py] [_log()] starting thread (client mode): 0xf5703fa0
2025-12-12T12:32:29.212 [DEBUG] [Thread-69609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:32:29.227 [DEBUG] [Thread-69609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:32:29.227 [INFO] [Thread-69609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] client lang: <none>
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] server lang: <none>
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] kex follows: False
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:32:29.239 [DEBUG] [Thread-69609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:32:29.240 [DEBUG] [Thread-69609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:32:29.240 [DEBUG] [Thread-69609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:32:29.240 [DEBUG] [Thread-69609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:32:29.240 [DEBUG] [Thread-69609] [transport.py] [_log()] Compression: none
2025-12-12T12:32:29.240 [DEBUG] [Thread-69609] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:32:29.295 [DEBUG] [Thread-69609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:32:29.295 [DEBUG] [Thread-69609] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:32:29.296 [DEBUG] [Thread-69609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:32:29.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:32:29.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:32:29.351 [DEBUG] [Thread-69609] [transport.py] [_log()] userauth is OK
2025-12-12T12:32:29.351 [DEBUG] [Thread-69609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:32:29.351 [DEBUG] [Thread-69609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:32:29.351 [DEBUG] [Thread-69609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:32:29.351 [DEBUG] [Thread-69609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:32:29.371 [INFO] [Thread-69609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:32:29.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:32:29.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:32:30.239 [DEBUG] [Thread-69609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:32:30.239 [DEBUG] [Thread-69609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:32:30.286 [DEBUG] [Thread-69609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:32:30.287 [DEBUG] [Thread-69609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:32:30.295 [DEBUG] [Thread-69609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:32:30.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:32:30.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:32:30.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:32:30.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:32:30.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:32:30.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:32:30.326 [DEBUG] [Thread-69609] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:32:36.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:32:36.164 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:32:37.739 [DEBUG] [Thread-69611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:32:41.800 [DEBUG] [Thread-69612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:32:52.787 [DEBUG] [Thread-69613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:00.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:33:00.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:33:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:33:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 28, 24), 20.86, 24.91, 0.0, 37.54, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:33:00.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:28:24
2025-12-12T12:33:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:33:01.256 [DEBUG] [Thread-69614] [transport.py] [_log()] starting thread (client mode): 0xf5702890
2025-12-12T12:33:01.256 [DEBUG] [Thread-69614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:33:01.277 [DEBUG] [Thread-69614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:33:01.277 [INFO] [Thread-69614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] client lang: <none>
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] server lang: <none>
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] kex follows: False
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:33:01.279 [DEBUG] [Thread-69614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:33:01.280 [DEBUG] [Thread-69614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:33:01.280 [DEBUG] [Thread-69614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:33:01.280 [DEBUG] [Thread-69614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:33:01.280 [DEBUG] [Thread-69614] [transport.py] [_log()] Compression: none
2025-12-12T12:33:01.280 [DEBUG] [Thread-69614] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:33:01.292 [DEBUG] [Thread-69614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:33:01.292 [DEBUG] [Thread-69614] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:33:01.292 [DEBUG] [Thread-69614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:33:01.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:33:01.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:33:01.294 [DEBUG] [Thread-69614] [transport.py] [_log()] userauth is OK
2025-12-12T12:33:01.294 [DEBUG] [Thread-69614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:33:01.295 [DEBUG] [Thread-69614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:33:01.295 [DEBUG] [Thread-69614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:33:01.295 [DEBUG] [Thread-69614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:33:01.319 [INFO] [Thread-69614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:33:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:33:01.944 [DEBUG] [Thread-69614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:33:01.945 [DEBUG] [Thread-69614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:33:01.945 [DEBUG] [Thread-69614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:33:01.986 [DEBUG] [Thread-69614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:33:01.987 [DEBUG] [Thread-69614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:33:01.990 [DEBUG] [Thread-69614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:33:02.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:33:02.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:33:02.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:33:02.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:33:02.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:33:02.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:33:02.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:33:02.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:33:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:33:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.439332 -999.00  +19.70  49.92     30   +2.00 1 1 2 1 1   888    0 19.41 66.89 ----- 43.2 49.9 332.0 65.8 24.9 -23.9 24.2 -25.1 24.1 -21.0 24.6 -21.9
2025-12-12T12:33:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:33:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:33:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.439332
2025-12-12T12:33:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:33:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:33:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:33:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:33:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:33:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:28:24', tmtdew=20.86, humidity=24.91, cloud=0.0, wind=37.54, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:32:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:33:02.017 [DEBUG] [Thread-69614] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:33:02.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:33:02.121 [DEBUG] [Thread-69617] [transport.py] [_log()] starting thread (client mode): 0xf570d360
2025-12-12T12:33:02.122 [DEBUG] [Thread-69617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:33:02.136 [DEBUG] [Thread-69617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:33:02.136 [INFO] [Thread-69617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:33:02.144 [DEBUG] [Thread-69617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:33:02.144 [DEBUG] [Thread-69617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:33:02.144 [DEBUG] [Thread-69617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:33:02.144 [DEBUG] [Thread-69617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:02.144 [DEBUG] [Thread-69617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] client lang: <none>
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] server lang: <none>
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] kex follows: False
2025-12-12T12:33:02.145 [DEBUG] [Thread-69617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:33:02.146 [DEBUG] [Thread-69617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:33:02.146 [DEBUG] [Thread-69617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:33:02.146 [DEBUG] [Thread-69617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:33:02.146 [DEBUG] [Thread-69617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:33:02.146 [DEBUG] [Thread-69617] [transport.py] [_log()] Compression: none
2025-12-12T12:33:02.146 [DEBUG] [Thread-69617] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:33:02.209 [DEBUG] [Thread-69617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:33:02.209 [DEBUG] [Thread-69617] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:33:02.210 [DEBUG] [Thread-69617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:33:02.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:33:02.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:33:02.267 [DEBUG] [Thread-69617] [transport.py] [_log()] userauth is OK
2025-12-12T12:33:02.268 [DEBUG] [Thread-69617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:33:02.269 [DEBUG] [Thread-69617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:33:02.269 [DEBUG] [Thread-69617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:33:02.269 [DEBUG] [Thread-69617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:33:02.294 [INFO] [Thread-69617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:33:02.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:33:02.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:33:03.146 [DEBUG] [Thread-69617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:33:03.146 [DEBUG] [Thread-69617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:33:03.194 [DEBUG] [Thread-69617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:33:03.195 [DEBUG] [Thread-69617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:33:03.204 [DEBUG] [Thread-69617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:33:03.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:33:03.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:33:03.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:33:03.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:33:03.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:33:03.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:33:03.240 [DEBUG] [Thread-69617] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:33:07.819 [DEBUG] [Thread-69619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:22.864 [DEBUG] [Thread-69620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:33.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:33:33.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:33:33.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:33:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 33, 9), 22.53, 22.23, 0.0, 44.42, 21.98, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:33:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:33:09
2025-12-12T12:33:34.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:33:34.189 [DEBUG] [Thread-69621] [transport.py] [_log()] starting thread (client mode): 0xfabc6e30
2025-12-12T12:33:34.195 [DEBUG] [Thread-69621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:33:34.210 [DEBUG] [Thread-69621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:33:34.210 [INFO] [Thread-69621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:33:34.213 [DEBUG] [Thread-69621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] client lang: <none>
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] server lang: <none>
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] kex follows: False
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:33:34.214 [DEBUG] [Thread-69621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:33:34.215 [DEBUG] [Thread-69621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:33:34.215 [DEBUG] [Thread-69621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:33:34.215 [DEBUG] [Thread-69621] [transport.py] [_log()] Compression: none
2025-12-12T12:33:34.215 [DEBUG] [Thread-69621] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:33:34.232 [DEBUG] [Thread-69621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:33:34.232 [DEBUG] [Thread-69621] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:33:34.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:33:34.233 [DEBUG] [Thread-69621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:33:34.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:33:34.235 [DEBUG] [Thread-69621] [transport.py] [_log()] userauth is OK
2025-12-12T12:33:34.235 [DEBUG] [Thread-69621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:33:34.235 [DEBUG] [Thread-69621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:33:34.236 [DEBUG] [Thread-69621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:33:34.236 [DEBUG] [Thread-69621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:33:34.254 [INFO] [Thread-69621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:33:34.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:33:34.882 [DEBUG] [Thread-69621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:33:34.883 [DEBUG] [Thread-69621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:33:34.883 [DEBUG] [Thread-69621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:33:34.924 [DEBUG] [Thread-69621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:33:34.924 [DEBUG] [Thread-69621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:33:34.927 [DEBUG] [Thread-69621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:33:34.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:33:34.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:33:34.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:33:34.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:33:34.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:33:34.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:33:34.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:33:34.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:33:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:33:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.439678 -999.00  +19.90  34.81     30   +1.90 1 2 2 1 1   888    0 18.95 51.40 ----- 28.2 34.8 335.6 57.0 25.0 -24.5 24.2 -24.4 24.1 -20.9 24.7 -21.6
2025-12-12T12:33:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:33:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:33:34.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.439678
2025-12-12T12:33:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:33:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:33:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:33:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:33:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:33:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:33:09', tmtdew=22.53, humidity=22.23, cloud=0.0, wind=44.42, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:33:08.179', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:33:34.956 [DEBUG] [Thread-69621] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:33:35.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:33:35.053 [DEBUG] [Thread-69624] [transport.py] [_log()] starting thread (client mode): 0xf813e530
2025-12-12T12:33:35.053 [DEBUG] [Thread-69624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:33:35.069 [DEBUG] [Thread-69624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:33:35.070 [INFO] [Thread-69624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:33:35.077 [DEBUG] [Thread-69624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:33:35.077 [DEBUG] [Thread-69624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:33:35.077 [DEBUG] [Thread-69624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] client lang: <none>
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] server lang: <none>
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] kex follows: False
2025-12-12T12:33:35.078 [DEBUG] [Thread-69624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:33:35.079 [DEBUG] [Thread-69624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:33:35.079 [DEBUG] [Thread-69624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:33:35.079 [DEBUG] [Thread-69624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:33:35.079 [DEBUG] [Thread-69624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:33:35.079 [DEBUG] [Thread-69624] [transport.py] [_log()] Compression: none
2025-12-12T12:33:35.079 [DEBUG] [Thread-69624] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:33:35.135 [DEBUG] [Thread-69624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:33:35.135 [DEBUG] [Thread-69624] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:33:35.136 [DEBUG] [Thread-69624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:33:35.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:33:35.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:33:35.191 [DEBUG] [Thread-69624] [transport.py] [_log()] userauth is OK
2025-12-12T12:33:35.191 [DEBUG] [Thread-69624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:33:35.192 [DEBUG] [Thread-69624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:33:35.192 [DEBUG] [Thread-69624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:33:35.192 [DEBUG] [Thread-69624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:33:35.212 [INFO] [Thread-69624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:33:35.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:33:35.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:33:36.070 [DEBUG] [Thread-69624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:33:36.070 [DEBUG] [Thread-69624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:33:36.118 [DEBUG] [Thread-69624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:33:36.118 [DEBUG] [Thread-69624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:33:36.127 [DEBUG] [Thread-69624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:33:36.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:33:36.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:33:36.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:33:36.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:33:36.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:33:36.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:33:36.162 [DEBUG] [Thread-69624] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:33:36.306 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:36.307 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:37.893 [DEBUG] [Thread-69626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:41.855 [DEBUG] [Thread-69627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:33:52.946 [DEBUG] [Thread-69628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:06.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:34:06.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:34:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:34:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 33, 42), 21.47, 23.73, 0.0, 35.59, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:34:06.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:33:42
2025-12-12T12:34:06.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:34:07.116 [DEBUG] [Thread-69629] [transport.py] [_log()] starting thread (client mode): 0xf2d0c6d0
2025-12-12T12:34:07.116 [DEBUG] [Thread-69629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:34:07.132 [DEBUG] [Thread-69629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:34:07.132 [INFO] [Thread-69629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:34:07.133 [DEBUG] [Thread-69629] [transport.py] [_log()] client lang: <none>
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] server lang: <none>
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] kex follows: False
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] Compression: none
2025-12-12T12:34:07.134 [DEBUG] [Thread-69629] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:34:07.142 [DEBUG] [Thread-69629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:34:07.142 [DEBUG] [Thread-69629] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:34:07.142 [DEBUG] [Thread-69629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:34:07.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:34:07.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:34:07.144 [DEBUG] [Thread-69629] [transport.py] [_log()] userauth is OK
2025-12-12T12:34:07.144 [DEBUG] [Thread-69629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:34:07.144 [DEBUG] [Thread-69629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:34:07.144 [DEBUG] [Thread-69629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:34:07.144 [DEBUG] [Thread-69629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:34:07.164 [INFO] [Thread-69629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:34:07.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:34:07.807 [DEBUG] [Thread-69629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:34:07.807 [DEBUG] [Thread-69629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:34:07.807 [DEBUG] [Thread-69629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:34:07.848 [DEBUG] [Thread-69629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:34:07.848 [DEBUG] [Thread-69629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:34:07.851 [DEBUG] [Thread-69629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:34:07.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:34:07.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:34:07.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:34:07.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:34:07.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:34:07.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:34:07.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:34:07.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:34:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:34:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.440026 -999.00  +20.20  20.36     30   +2.30 1 2 1 1 1   888    0 19.24 46.64 ----- 38.9 20.4 7.5 46.4 25.1 -23.2 24.2 -24.8 24.1 -20.9 24.8 -21.3
2025-12-12T12:34:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:34:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:34:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.440026
2025-12-12T12:34:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:34:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:34:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:34:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:34:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:34:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:33:42', tmtdew=21.47, humidity=23.73, cloud=0.0, wind=35.59, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:33:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:34:07.875 [DEBUG] [Thread-69629] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:34:07.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:34:07.973 [DEBUG] [Thread-69632] [transport.py] [_log()] starting thread (client mode): 0xf2d0e3b0
2025-12-12T12:34:07.973 [DEBUG] [Thread-69632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:34:07.975 [DEBUG] [Thread-69633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:07.988 [DEBUG] [Thread-69632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:34:07.988 [INFO] [Thread-69632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:34:07.995 [DEBUG] [Thread-69632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:34:07.995 [DEBUG] [Thread-69632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:34:07.995 [DEBUG] [Thread-69632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:34:07.995 [DEBUG] [Thread-69632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:07.995 [DEBUG] [Thread-69632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:07.995 [DEBUG] [Thread-69632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] client lang: <none>
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] server lang: <none>
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] kex follows: False
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] Compression: none
2025-12-12T12:34:07.996 [DEBUG] [Thread-69632] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:34:08.054 [DEBUG] [Thread-69632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:34:08.055 [DEBUG] [Thread-69632] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:34:08.055 [DEBUG] [Thread-69632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:34:08.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:34:08.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:34:08.111 [DEBUG] [Thread-69632] [transport.py] [_log()] userauth is OK
2025-12-12T12:34:08.111 [DEBUG] [Thread-69632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:34:08.111 [DEBUG] [Thread-69632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:34:08.111 [DEBUG] [Thread-69632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:34:08.111 [DEBUG] [Thread-69632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:34:08.130 [INFO] [Thread-69632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:34:08.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:34:08.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:34:08.976 [DEBUG] [Thread-69632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:34:08.976 [DEBUG] [Thread-69632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:34:09.023 [DEBUG] [Thread-69632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:34:09.024 [DEBUG] [Thread-69632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:34:09.033 [DEBUG] [Thread-69632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:34:09.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:34:09.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:34:09.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:34:09.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:34:09.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:34:09.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:34:09.066 [DEBUG] [Thread-69632] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:34:23.012 [DEBUG] [Thread-69635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:36.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:36.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:38.041 [DEBUG] [Thread-69636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:39.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:34:39.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:34:39.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:34:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 34, 14), 21.31, 23.96, 0.0, 36.19, 20.74, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:34:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:34:14
2025-12-12T12:34:39.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:34:40.029 [DEBUG] [Thread-69637] [transport.py] [_log()] starting thread (client mode): 0xf2d0cf10
2025-12-12T12:34:40.029 [DEBUG] [Thread-69637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:34:40.048 [DEBUG] [Thread-69637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:34:40.049 [INFO] [Thread-69637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] client lang: <none>
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] server lang: <none>
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] kex follows: False
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:34:40.052 [DEBUG] [Thread-69637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:34:40.053 [DEBUG] [Thread-69637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:34:40.053 [DEBUG] [Thread-69637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:34:40.053 [DEBUG] [Thread-69637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:34:40.053 [DEBUG] [Thread-69637] [transport.py] [_log()] Compression: none
2025-12-12T12:34:40.053 [DEBUG] [Thread-69637] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:34:40.069 [DEBUG] [Thread-69637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:34:40.069 [DEBUG] [Thread-69637] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:34:40.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:34:40.070 [DEBUG] [Thread-69637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:34:40.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:34:40.073 [DEBUG] [Thread-69637] [transport.py] [_log()] userauth is OK
2025-12-12T12:34:40.073 [DEBUG] [Thread-69637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:34:40.073 [DEBUG] [Thread-69637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:34:40.073 [DEBUG] [Thread-69637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:34:40.073 [DEBUG] [Thread-69637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:34:40.097 [INFO] [Thread-69637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:34:40.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:34:40.735 [DEBUG] [Thread-69637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:34:40.736 [DEBUG] [Thread-69637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:34:40.736 [DEBUG] [Thread-69637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:34:40.777 [DEBUG] [Thread-69637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:34:40.777 [DEBUG] [Thread-69637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:34:40.780 [DEBUG] [Thread-69637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:34:40.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:34:40.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:34:40.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:34:40.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:34:40.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:34:40.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:34:40.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:34:40.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:34:40.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:34:40.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.440373 -999.00  +20.20  23.98     28   +1.20 1 2 1 1 1   888    0 19.33 48.06 ----- 24.5 24.0 355.1 53.5 25.0 -24.4 24.3 -22.9 24.1 -21.7 24.6 -24.9
2025-12-12T12:34:40.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:34:40.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:34:40.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.440373
2025-12-12T12:34:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:34:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:34:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:34:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:34:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:34:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:34:14', tmtdew=21.31, humidity=23.96, cloud=0.0, wind=36.19, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:34:08.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:34:40.805 [DEBUG] [Thread-69637] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:34:40.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:34:40.903 [DEBUG] [Thread-69640] [transport.py] [_log()] starting thread (client mode): 0xf813d0f0
2025-12-12T12:34:40.903 [DEBUG] [Thread-69640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:34:40.918 [DEBUG] [Thread-69640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:34:40.918 [INFO] [Thread-69640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:40.926 [DEBUG] [Thread-69640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] client lang: <none>
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] server lang: <none>
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] kex follows: False
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:34:40.927 [DEBUG] [Thread-69640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:34:40.928 [DEBUG] [Thread-69640] [transport.py] [_log()] Compression: none
2025-12-12T12:34:40.928 [DEBUG] [Thread-69640] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:34:40.983 [DEBUG] [Thread-69640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:34:40.983 [DEBUG] [Thread-69640] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:34:40.984 [DEBUG] [Thread-69640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:34:40.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:34:40.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:34:41.039 [DEBUG] [Thread-69640] [transport.py] [_log()] userauth is OK
2025-12-12T12:34:41.039 [DEBUG] [Thread-69640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:34:41.039 [DEBUG] [Thread-69640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:34:41.039 [DEBUG] [Thread-69640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:34:41.040 [DEBUG] [Thread-69640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:34:41.058 [INFO] [Thread-69640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:34:41.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:34:41.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:34:41.892 [DEBUG] [Thread-69640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:34:41.892 [DEBUG] [Thread-69640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:34:41.913 [DEBUG] [Thread-69642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:34:41.941 [DEBUG] [Thread-69640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:34:41.941 [DEBUG] [Thread-69640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:34:41.950 [DEBUG] [Thread-69640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:34:41.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:34:41.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:34:41.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:34:41.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:34:41.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:34:41.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:34:41.984 [DEBUG] [Thread-69640] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:34:53.072 [DEBUG] [Thread-69643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:08.114 [DEBUG] [Thread-69644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:12.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:35:12.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:35:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:35:12.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 34, 46), 22.63, 21.97, 0.0, 40.97, 20.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:35:12.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:34:46
2025-12-12T12:35:12.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:35:12.964 [DEBUG] [Thread-69645] [transport.py] [_log()] starting thread (client mode): 0xf81c0e80
2025-12-12T12:35:12.964 [DEBUG] [Thread-69645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:35:12.984 [DEBUG] [Thread-69645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:35:12.985 [INFO] [Thread-69645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:35:12.987 [DEBUG] [Thread-69645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] client lang: <none>
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] server lang: <none>
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] kex follows: False
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] Compression: none
2025-12-12T12:35:12.988 [DEBUG] [Thread-69645] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:35:12.996 [DEBUG] [Thread-69645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:35:12.996 [DEBUG] [Thread-69645] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:35:12.997 [DEBUG] [Thread-69645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:35:12.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:35:12.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:35:12.999 [DEBUG] [Thread-69645] [transport.py] [_log()] userauth is OK
2025-12-12T12:35:12.999 [DEBUG] [Thread-69645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:35:12.999 [DEBUG] [Thread-69645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:35:12.999 [DEBUG] [Thread-69645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:35:12.999 [DEBUG] [Thread-69645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:35:13.022 [INFO] [Thread-69645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:35:13.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:35:17.141 [DEBUG] [Thread-69645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:35:17.141 [DEBUG] [Thread-69645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:35:17.142 [DEBUG] [Thread-69645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:35:17.182 [DEBUG] [Thread-69645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:35:17.182 [DEBUG] [Thread-69645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:35:17.185 [DEBUG] [Thread-69645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:35:17.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:35:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:35:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:35:17.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:35:17.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:35:17.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:35:17.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:35:17.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:35:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:35:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.440720 -999.00  +19.90  35.59     28   +0.90 1 1 2 1 1   888    0 19.76 53.81 ----- 41.0 35.6 312.8 45.9 25.1 -23.0 24.2 -25.6 24.1 -21.8 24.7 -21.0
2025-12-12T12:35:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:35:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:35:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.440720
2025-12-12T12:35:17.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:35:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:35:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:35:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:35:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:35:17.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:34:46', tmtdew=22.63, humidity=21.97, cloud=0.0, wind=40.97, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:34:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:35:17.437 [DEBUG] [Thread-69645] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:35:17.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:35:17.543 [DEBUG] [Thread-69648] [transport.py] [_log()] starting thread (client mode): 0xf5701030
2025-12-12T12:35:17.543 [DEBUG] [Thread-69648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:35:17.558 [DEBUG] [Thread-69648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:35:17.558 [INFO] [Thread-69648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:35:17.565 [DEBUG] [Thread-69648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] client lang: <none>
2025-12-12T12:35:17.566 [DEBUG] [Thread-69648] [transport.py] [_log()] server lang: <none>
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] kex follows: False
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] Compression: none
2025-12-12T12:35:17.567 [DEBUG] [Thread-69648] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:35:17.622 [DEBUG] [Thread-69648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:35:17.623 [DEBUG] [Thread-69648] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:35:17.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:35:17.624 [DEBUG] [Thread-69648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:35:17.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:35:17.679 [DEBUG] [Thread-69648] [transport.py] [_log()] userauth is OK
2025-12-12T12:35:17.680 [DEBUG] [Thread-69648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:35:17.680 [DEBUG] [Thread-69648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:35:17.680 [DEBUG] [Thread-69648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:35:17.681 [DEBUG] [Thread-69648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:35:17.704 [INFO] [Thread-69648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:35:17.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:35:17.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:35:18.536 [DEBUG] [Thread-69648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:35:18.537 [DEBUG] [Thread-69648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:35:18.584 [DEBUG] [Thread-69648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:35:18.584 [DEBUG] [Thread-69648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:35:18.593 [DEBUG] [Thread-69648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:35:18.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:35:18.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:35:18.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:35:18.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:35:18.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:35:18.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:35:18.625 [DEBUG] [Thread-69648] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:35:23.142 [DEBUG] [Thread-69650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:36.587 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:36.588 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:38.191 [DEBUG] [Thread-69651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:41.968 [DEBUG] [Thread-69652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:35:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:35:48.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:35:48.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:35:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 35, 18), 22.59, 22.0, 0.0, 41.99, 20.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:35:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:35:18
2025-12-12T12:35:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:35:49.595 [DEBUG] [Thread-69653] [transport.py] [_log()] starting thread (client mode): 0xf2d0c400
2025-12-12T12:35:49.595 [DEBUG] [Thread-69653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:35:49.617 [DEBUG] [Thread-69653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:35:49.617 [INFO] [Thread-69653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:35:49.620 [DEBUG] [Thread-69653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:35:49.620 [DEBUG] [Thread-69653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:35:49.620 [DEBUG] [Thread-69653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:35:49.620 [DEBUG] [Thread-69653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] client lang: <none>
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] server lang: <none>
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] kex follows: False
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] Compression: none
2025-12-12T12:35:49.621 [DEBUG] [Thread-69653] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:35:49.638 [DEBUG] [Thread-69653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:35:49.638 [DEBUG] [Thread-69653] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:35:49.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:35:49.639 [DEBUG] [Thread-69653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:35:49.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:35:49.641 [DEBUG] [Thread-69653] [transport.py] [_log()] userauth is OK
2025-12-12T12:35:49.641 [DEBUG] [Thread-69653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:35:49.641 [DEBUG] [Thread-69653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:35:49.641 [DEBUG] [Thread-69653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:35:49.641 [DEBUG] [Thread-69653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:35:49.665 [INFO] [Thread-69653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:35:49.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:35:50.302 [DEBUG] [Thread-69653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:35:50.303 [DEBUG] [Thread-69653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:35:50.303 [DEBUG] [Thread-69653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:35:50.344 [DEBUG] [Thread-69653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:35:50.344 [DEBUG] [Thread-69653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:35:50.347 [DEBUG] [Thread-69653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:35:50.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:35:50.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:35:50.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:35:50.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:35:50.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:35:50.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:35:50.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:35:50.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:35:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:35:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.441068 -999.00  +20.70  30.56     28   +1.50 1 2 2 1 1   888    0 19.70 58.33 ----- 34.2 30.6 318.8 45.9 25.2 -23.3 24.3 -23.4 24.2 -21.9 24.9 -21.0
2025-12-12T12:35:50.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:35:50.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:35:50.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.441068
2025-12-12T12:35:50.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:35:50.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:35:50.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:35:50.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:35:50.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:35:50.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:35:18', tmtdew=22.59, humidity=22.0, cloud=0.0, wind=41.99, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:35:08.275', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:35:50.373 [DEBUG] [Thread-69653] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:35:50.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:35:50.468 [DEBUG] [Thread-69656] [transport.py] [_log()] starting thread (client mode): 0xf81f04f0
2025-12-12T12:35:50.468 [DEBUG] [Thread-69656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:35:50.483 [DEBUG] [Thread-69656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:35:50.483 [INFO] [Thread-69656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] client lang: <none>
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] server lang: <none>
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] kex follows: False
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:35:50.491 [DEBUG] [Thread-69656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:35:50.492 [DEBUG] [Thread-69656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:35:50.492 [DEBUG] [Thread-69656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:35:50.492 [DEBUG] [Thread-69656] [transport.py] [_log()] Compression: none
2025-12-12T12:35:50.492 [DEBUG] [Thread-69656] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:35:50.555 [DEBUG] [Thread-69656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:35:50.556 [DEBUG] [Thread-69656] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:35:50.556 [DEBUG] [Thread-69656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:35:50.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:35:50.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:35:50.610 [DEBUG] [Thread-69656] [transport.py] [_log()] userauth is OK
2025-12-12T12:35:50.611 [DEBUG] [Thread-69656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:35:50.611 [DEBUG] [Thread-69656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:35:50.611 [DEBUG] [Thread-69656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:35:50.611 [DEBUG] [Thread-69656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:35:50.627 [INFO] [Thread-69656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:35:50.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:35:50.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:35:51.520 [DEBUG] [Thread-69656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:35:51.521 [DEBUG] [Thread-69656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:35:51.568 [DEBUG] [Thread-69656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:35:51.568 [DEBUG] [Thread-69656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:35:51.576 [DEBUG] [Thread-69656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:35:51.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:35:51.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:35:51.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:35:51.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:35:51.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:35:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:35:51.607 [DEBUG] [Thread-69656] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:35:53.216 [DEBUG] [Thread-69658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:08.273 [DEBUG] [Thread-69659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:21.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:36:21.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:36:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:36:22.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 35, 50), 22.22, 22.33, 0.0, 32.83, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:36:22.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:35:50
2025-12-12T12:36:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:36:22.644 [DEBUG] [Thread-69660] [transport.py] [_log()] starting thread (client mode): 0xf813ee00
2025-12-12T12:36:22.644 [DEBUG] [Thread-69660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:36:22.663 [DEBUG] [Thread-69660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:36:22.663 [INFO] [Thread-69660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] client lang: <none>
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] server lang: <none>
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] kex follows: False
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] Compression: none
2025-12-12T12:36:22.665 [DEBUG] [Thread-69660] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:36:22.673 [DEBUG] [Thread-69660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:36:22.673 [DEBUG] [Thread-69660] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:36:22.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:36:22.673 [DEBUG] [Thread-69660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:36:22.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:36:22.675 [DEBUG] [Thread-69660] [transport.py] [_log()] userauth is OK
2025-12-12T12:36:22.675 [DEBUG] [Thread-69660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:36:22.675 [DEBUG] [Thread-69660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:36:22.675 [DEBUG] [Thread-69660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:36:22.675 [DEBUG] [Thread-69660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:36:22.684 [INFO] [Thread-69660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:36:22.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:36:23.255 [DEBUG] [Thread-69660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:36:23.256 [DEBUG] [Thread-69660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:36:23.256 [DEBUG] [Thread-69660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:36:23.297 [DEBUG] [Thread-69660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:36:23.297 [DEBUG] [Thread-69660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:36:23.299 [DEBUG] [Thread-69660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:36:23.302 [DEBUG] [Thread-69662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:23.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:36:23.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:36:23.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:36:23.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:36:23.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:36:23.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:36:23.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.441414 -999.00  +20.70  25.96     28   +1.60 1 2 1 1 1   888    0 19.61 63.20 ----- 23.0 26.0 325.8 39.4 25.3 -22.8 24.4 -24.2 24.3 -20.4 25.0 -21.0
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.441414
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:36:23.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:36:23.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:35:50', tmtdew=22.22, humidity=22.33, cloud=0.0, wind=32.83, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:35:38.170', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:36:23.319 [DEBUG] [Thread-69660] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:36:23.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:36:23.405 [DEBUG] [Thread-69664] [transport.py] [_log()] starting thread (client mode): 0xf813e320
2025-12-12T12:36:23.405 [DEBUG] [Thread-69664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:36:23.419 [DEBUG] [Thread-69664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:36:23.420 [INFO] [Thread-69664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] client lang: <none>
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] server lang: <none>
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] kex follows: False
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:36:23.427 [DEBUG] [Thread-69664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:36:23.428 [DEBUG] [Thread-69664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:36:23.428 [DEBUG] [Thread-69664] [transport.py] [_log()] Compression: none
2025-12-12T12:36:23.428 [DEBUG] [Thread-69664] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:36:23.486 [DEBUG] [Thread-69664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:36:23.486 [DEBUG] [Thread-69664] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:36:23.486 [DEBUG] [Thread-69664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:36:23.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:36:23.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:36:23.543 [DEBUG] [Thread-69664] [transport.py] [_log()] userauth is OK
2025-12-12T12:36:23.543 [DEBUG] [Thread-69664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:36:23.543 [DEBUG] [Thread-69664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:36:23.543 [DEBUG] [Thread-69664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:36:23.543 [DEBUG] [Thread-69664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:36:23.558 [INFO] [Thread-69664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:36:23.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:36:23.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:36:24.398 [DEBUG] [Thread-69664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:36:24.398 [DEBUG] [Thread-69664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:36:24.446 [DEBUG] [Thread-69664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:36:24.447 [DEBUG] [Thread-69664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:36:24.455 [DEBUG] [Thread-69664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:36:24.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:36:24.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:36:24.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:36:24.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:36:24.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:36:24.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:36:24.487 [DEBUG] [Thread-69664] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:36:36.728 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:36.730 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:38.328 [DEBUG] [Thread-69666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:42.028 [DEBUG] [Thread-69667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:53.373 [DEBUG] [Thread-69668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:36:54.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:36:54.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:36:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:36:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 36, 22), 22.42, 22.08, 0.0, 29.08, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:36:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:36:22
2025-12-12T12:36:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:36:55.500 [DEBUG] [Thread-69669] [transport.py] [_log()] starting thread (client mode): 0xfabc6860
2025-12-12T12:36:55.500 [DEBUG] [Thread-69669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:36:55.520 [DEBUG] [Thread-69669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:36:55.520 [INFO] [Thread-69669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:36:55.521 [DEBUG] [Thread-69669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] client lang: <none>
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] server lang: <none>
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] kex follows: False
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] Compression: none
2025-12-12T12:36:55.522 [DEBUG] [Thread-69669] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:36:55.529 [DEBUG] [Thread-69669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:36:55.529 [DEBUG] [Thread-69669] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:36:55.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:36:55.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:36:55.530 [DEBUG] [Thread-69669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:36:55.531 [DEBUG] [Thread-69669] [transport.py] [_log()] userauth is OK
2025-12-12T12:36:55.531 [DEBUG] [Thread-69669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:36:55.531 [DEBUG] [Thread-69669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:36:55.531 [DEBUG] [Thread-69669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:36:55.531 [DEBUG] [Thread-69669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:36:55.547 [INFO] [Thread-69669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:36:55.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:36:56.185 [DEBUG] [Thread-69669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:36:56.185 [DEBUG] [Thread-69669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:36:56.185 [DEBUG] [Thread-69669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:36:56.227 [DEBUG] [Thread-69669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:36:56.227 [DEBUG] [Thread-69669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:36:56.229 [DEBUG] [Thread-69669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:36:56.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:36:56.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:36:56.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:36:56.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:36:56.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:36:56.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:36:56.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.442109 -999.00  +21.30  52.71     25   +0.50 1 1 2 1 1   888    0 20.43 77.51 ----- 50.8 52.7 312.0 62.1 25.3 -24.2 24.7 -23.9 24.3 -25.0 25.1 -22.1
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.442109
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:36:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:36:22', tmtdew=22.42, humidity=22.08, cloud=0.0, wind=29.08, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:36:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:36:56.248 [DEBUG] [Thread-69669] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:36:56.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:36:56.334 [DEBUG] [Thread-69672] [transport.py] [_log()] starting thread (client mode): 0xf5702f50
2025-12-12T12:36:56.334 [DEBUG] [Thread-69672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:36:56.348 [DEBUG] [Thread-69672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:36:56.348 [INFO] [Thread-69672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] client lang: <none>
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] server lang: <none>
2025-12-12T12:36:56.356 [DEBUG] [Thread-69672] [transport.py] [_log()] kex follows: False
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] Compression: none
2025-12-12T12:36:56.357 [DEBUG] [Thread-69672] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:36:56.414 [DEBUG] [Thread-69672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:36:56.414 [DEBUG] [Thread-69672] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:36:56.414 [DEBUG] [Thread-69672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:36:56.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:36:56.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:36:56.472 [DEBUG] [Thread-69672] [transport.py] [_log()] userauth is OK
2025-12-12T12:36:56.472 [DEBUG] [Thread-69672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:36:56.472 [DEBUG] [Thread-69672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:36:56.472 [DEBUG] [Thread-69672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:36:56.472 [DEBUG] [Thread-69672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:36:56.490 [INFO] [Thread-69672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:36:56.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:36:56.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:36:57.302 [DEBUG] [Thread-69672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:36:57.302 [DEBUG] [Thread-69672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:36:57.350 [DEBUG] [Thread-69672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:36:57.350 [DEBUG] [Thread-69672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:36:57.359 [DEBUG] [Thread-69672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:36:57.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:36:57.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:36:57.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:36:57.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:36:57.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:36:57.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:36:57.393 [DEBUG] [Thread-69672] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:37:08.402 [DEBUG] [Thread-69674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:37:23.446 [DEBUG] [Thread-69675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:37:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:37:27.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:37:27.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:37:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 36, 54), 23.11, 21.32, 0.0, 39.52, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:37:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:36:54
2025-12-12T12:37:28.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:37:28.426 [DEBUG] [Thread-69676] [transport.py] [_log()] starting thread (client mode): 0xf81f0910
2025-12-12T12:37:28.427 [DEBUG] [Thread-69676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:37:28.448 [DEBUG] [Thread-69676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:37:28.448 [INFO] [Thread-69676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:37:28.451 [DEBUG] [Thread-69676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:37:28.451 [DEBUG] [Thread-69676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] client lang: <none>
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] server lang: <none>
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] kex follows: False
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] Compression: none
2025-12-12T12:37:28.452 [DEBUG] [Thread-69676] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:37:28.466 [DEBUG] [Thread-69676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:37:28.467 [DEBUG] [Thread-69676] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:37:28.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:37:28.467 [DEBUG] [Thread-69676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:37:28.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:37:28.468 [DEBUG] [Thread-69676] [transport.py] [_log()] userauth is OK
2025-12-12T12:37:28.468 [DEBUG] [Thread-69676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:37:28.468 [DEBUG] [Thread-69676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:37:28.468 [DEBUG] [Thread-69676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:37:28.468 [DEBUG] [Thread-69676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:37:28.483 [INFO] [Thread-69676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:37:28.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:37:29.191 [DEBUG] [Thread-69676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:37:29.192 [DEBUG] [Thread-69676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:37:29.192 [DEBUG] [Thread-69676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:37:29.233 [DEBUG] [Thread-69676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:37:29.233 [DEBUG] [Thread-69676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:37:29.235 [DEBUG] [Thread-69676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:37:29.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:37:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:37:29.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:37:29.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:37:29.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:37:29.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:37:29.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:37:29.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.442456 -999.00  +21.00  46.02     24   -0.10 1 2 2 1 1   888    0 20.40 84.82 ----- 49.8 46.0 306.2 59.5 25.4 -24.8 24.6 -24.0 24.4 -21.6 25.1 -22.6
2025-12-12T12:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.442456
2025-12-12T12:37:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:37:29.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:37:29.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:37:29.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:37:29.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:37:29.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:36:54', tmtdew=23.11, humidity=21.32, cloud=0.0, wind=39.52, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:37:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:37:29.255 [DEBUG] [Thread-69676] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:37:29.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:37:29.352 [DEBUG] [Thread-69679] [transport.py] [_log()] starting thread (client mode): 0xf813e4d0
2025-12-12T12:37:29.352 [DEBUG] [Thread-69679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:37:29.366 [DEBUG] [Thread-69679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:37:29.367 [INFO] [Thread-69679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:37:29.374 [DEBUG] [Thread-69679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:37:29.374 [DEBUG] [Thread-69679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:37:29.374 [DEBUG] [Thread-69679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:37:29.374 [DEBUG] [Thread-69679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:37:29.374 [DEBUG] [Thread-69679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:37:29.374 [DEBUG] [Thread-69679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] client lang: <none>
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] server lang: <none>
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] kex follows: False
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:37:29.375 [DEBUG] [Thread-69679] [transport.py] [_log()] Compression: none
2025-12-12T12:37:29.376 [DEBUG] [Thread-69679] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:37:29.432 [DEBUG] [Thread-69679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:37:29.433 [DEBUG] [Thread-69679] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:37:29.433 [DEBUG] [Thread-69679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:37:29.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:37:29.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:37:29.491 [DEBUG] [Thread-69679] [transport.py] [_log()] userauth is OK
2025-12-12T12:37:29.491 [DEBUG] [Thread-69679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:37:29.491 [DEBUG] [Thread-69679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:37:29.492 [DEBUG] [Thread-69679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:37:29.492 [DEBUG] [Thread-69679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:37:29.510 [INFO] [Thread-69679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:37:29.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:37:29.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:37:30.351 [DEBUG] [Thread-69679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:37:30.351 [DEBUG] [Thread-69679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:37:30.399 [DEBUG] [Thread-69679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:37:30.399 [DEBUG] [Thread-69679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:37:30.408 [DEBUG] [Thread-69679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:37:30.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:37:30.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:37:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:37:30.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:37:30.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:37:30.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:37:30.442 [DEBUG] [Thread-69679] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:37:36.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:37:36.883 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:37:38.476 [DEBUG] [Thread-69681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:37:42.073 [DEBUG] [Thread-69682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:37:53.519 [DEBUG] [Thread-69683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:38:00.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:38:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:38:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 37, 26), 23.97, 20.08, 0.0, 44.99, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:38:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:37:26
2025-12-12T12:38:01.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:38:01.447 [DEBUG] [Thread-69684] [transport.py] [_log()] starting thread (client mode): 0xf81f0550
2025-12-12T12:38:01.447 [DEBUG] [Thread-69684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:38:01.470 [DEBUG] [Thread-69684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:38:01.470 [INFO] [Thread-69684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] client lang: <none>
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] server lang: <none>
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] kex follows: False
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] Compression: none
2025-12-12T12:38:01.473 [DEBUG] [Thread-69684] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:38:01.490 [DEBUG] [Thread-69684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:38:01.491 [DEBUG] [Thread-69684] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:38:01.491 [DEBUG] [Thread-69684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:38:01.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:38:01.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:38:01.493 [DEBUG] [Thread-69684] [transport.py] [_log()] userauth is OK
2025-12-12T12:38:01.493 [DEBUG] [Thread-69684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:38:01.493 [DEBUG] [Thread-69684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:38:01.493 [DEBUG] [Thread-69684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:38:01.493 [DEBUG] [Thread-69684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:38:01.511 [INFO] [Thread-69684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:38:01.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:38:02.155 [DEBUG] [Thread-69684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:38:02.156 [DEBUG] [Thread-69684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:38:02.156 [DEBUG] [Thread-69684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:38:02.197 [DEBUG] [Thread-69684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:38:02.197 [DEBUG] [Thread-69684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:38:02.199 [DEBUG] [Thread-69684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:38:02.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:38:02.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:38:02.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:38:02.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:38:02.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:38:02.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:38:02.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:38:02.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:38:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:38:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.442804 -999.00  +21.50  45.02     24   +0.20 1 2 2 1 1   888    0 20.85 89.99 ----- 46.1 45.0 320.2 57.9 25.5 -24.6 24.6 -24.1 24.5 -21.0 25.2 -22.0
2025-12-12T12:38:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:38:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:38:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.442804
2025-12-12T12:38:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:38:02.222 [DEBUG] [Thread-69684] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:38:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:38:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:38:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:38:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:38:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:37:26', tmtdew=23.97, humidity=20.08, cloud=0.0, wind=44.99, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:37:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:38:02.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:38:02.317 [DEBUG] [Thread-69687] [transport.py] [_log()] starting thread (client mode): 0xf813e6e0
2025-12-12T12:38:02.318 [DEBUG] [Thread-69687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:38:02.333 [DEBUG] [Thread-69687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:38:02.333 [INFO] [Thread-69687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:38:02.340 [DEBUG] [Thread-69687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:38:02.340 [DEBUG] [Thread-69687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:38:02.340 [DEBUG] [Thread-69687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:38:02.340 [DEBUG] [Thread-69687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] client lang: <none>
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] server lang: <none>
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] kex follows: False
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] Compression: none
2025-12-12T12:38:02.341 [DEBUG] [Thread-69687] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:38:02.399 [DEBUG] [Thread-69687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:38:02.399 [DEBUG] [Thread-69687] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:38:02.400 [DEBUG] [Thread-69687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:38:02.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:38:02.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:38:02.455 [DEBUG] [Thread-69687] [transport.py] [_log()] userauth is OK
2025-12-12T12:38:02.455 [DEBUG] [Thread-69687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:38:02.455 [DEBUG] [Thread-69687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:38:02.456 [DEBUG] [Thread-69687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:38:02.456 [DEBUG] [Thread-69687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:38:02.475 [INFO] [Thread-69687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:38:02.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:38:02.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:38:03.320 [DEBUG] [Thread-69687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:38:03.320 [DEBUG] [Thread-69687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:38:03.368 [DEBUG] [Thread-69687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:38:03.368 [DEBUG] [Thread-69687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:38:03.377 [DEBUG] [Thread-69687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:38:03.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:38:03.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:38:03.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:38:03.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:38:03.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:38:03.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:38:03.412 [DEBUG] [Thread-69687] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:38:08.549 [DEBUG] [Thread-69689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:23.600 [DEBUG] [Thread-69690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:38:33.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:38:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:38:34.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 38, 30), 24.7, 18.53, 0.0, 43.07, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:38:34.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:38:30
2025-12-12T12:38:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:38:34.381 [DEBUG] [Thread-69691] [transport.py] [_log()] starting thread (client mode): 0xf5703b80
2025-12-12T12:38:34.381 [DEBUG] [Thread-69691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:38:34.402 [DEBUG] [Thread-69691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:38:34.402 [INFO] [Thread-69691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:38:34.404 [DEBUG] [Thread-69691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:38:34.404 [DEBUG] [Thread-69691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:38:34.404 [DEBUG] [Thread-69691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:38:34.404 [DEBUG] [Thread-69691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] client lang: <none>
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] server lang: <none>
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] kex follows: False
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] Compression: none
2025-12-12T12:38:34.405 [DEBUG] [Thread-69691] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:38:34.424 [DEBUG] [Thread-69691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:38:34.424 [DEBUG] [Thread-69691] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:38:34.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:38:34.425 [DEBUG] [Thread-69691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:38:34.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:38:34.427 [DEBUG] [Thread-69691] [transport.py] [_log()] userauth is OK
2025-12-12T12:38:34.427 [DEBUG] [Thread-69691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:38:34.428 [DEBUG] [Thread-69691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:38:34.428 [DEBUG] [Thread-69691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:38:34.428 [DEBUG] [Thread-69691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:38:34.451 [INFO] [Thread-69691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:38:34.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:38:35.027 [DEBUG] [Thread-69691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:38:35.028 [DEBUG] [Thread-69691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:38:35.028 [DEBUG] [Thread-69691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:38:35.069 [DEBUG] [Thread-69691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:38:35.069 [DEBUG] [Thread-69691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:38:35.073 [DEBUG] [Thread-69691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:38:35.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:38:35.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:38:35.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:38:35.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:38:35.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:38:35.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:38:35.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:38:35.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:38:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:38:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.443151 -999.00  +21.20  45.06     23   -0.10 1 1 2 1 1   888    0 21.23 99.02 ----- 46.2 45.1 315.4 59.4 25.4 -24.9 24.8 -25.5 24.4 -22.7 25.1 -22.5
2025-12-12T12:38:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:38:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:38:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.443151
2025-12-12T12:38:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:38:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:38:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:38:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:38:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:38:35.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:38:30', tmtdew=24.7, humidity=18.53, cloud=0.0, wind=43.07, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:38:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:38:35.091 [DEBUG] [Thread-69691] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:38:35.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:38:35.188 [DEBUG] [Thread-69694] [transport.py] [_log()] starting thread (client mode): 0xf81886a0
2025-12-12T12:38:35.188 [DEBUG] [Thread-69694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:38:35.203 [DEBUG] [Thread-69694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:38:35.203 [INFO] [Thread-69694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:38:35.210 [DEBUG] [Thread-69694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:38:35.210 [DEBUG] [Thread-69694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:38:35.210 [DEBUG] [Thread-69694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] client lang: <none>
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] server lang: <none>
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] kex follows: False
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] Compression: none
2025-12-12T12:38:35.211 [DEBUG] [Thread-69694] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:38:35.266 [DEBUG] [Thread-69694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:38:35.267 [DEBUG] [Thread-69694] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:38:35.267 [DEBUG] [Thread-69694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:38:35.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:38:35.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:38:35.323 [DEBUG] [Thread-69694] [transport.py] [_log()] userauth is OK
2025-12-12T12:38:35.323 [DEBUG] [Thread-69694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:38:35.323 [DEBUG] [Thread-69694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:38:35.324 [DEBUG] [Thread-69694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:38:35.324 [DEBUG] [Thread-69694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:38:35.342 [INFO] [Thread-69694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:38:35.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:38:35.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:38:36.173 [DEBUG] [Thread-69694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:38:36.174 [DEBUG] [Thread-69694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:38:36.222 [DEBUG] [Thread-69694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:38:36.222 [DEBUG] [Thread-69694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:38:36.231 [DEBUG] [Thread-69694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:38:36.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:38:36.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:38:36.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:38:36.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:38:36.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:38:36.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:38:36.266 [DEBUG] [Thread-69694] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:38:37.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:37.023 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:38.630 [DEBUG] [Thread-69696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:42.125 [DEBUG] [Thread-69697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:38:53.679 [DEBUG] [Thread-69698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:06.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:39:06.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:39:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:39:06.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 39, 2), 25.01, 18.13, 0.0, 46.79, 20.87, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:39:06.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:39:02
2025-12-12T12:39:07.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:39:07.258 [DEBUG] [Thread-69699] [transport.py] [_log()] starting thread (client mode): 0xf570f250
2025-12-12T12:39:07.258 [DEBUG] [Thread-69699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:39:07.278 [DEBUG] [Thread-69699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:39:07.278 [INFO] [Thread-69699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] client lang: <none>
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] server lang: <none>
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] kex follows: False
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:39:07.282 [DEBUG] [Thread-69699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:39:07.283 [DEBUG] [Thread-69699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:39:07.283 [DEBUG] [Thread-69699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:39:07.283 [DEBUG] [Thread-69699] [transport.py] [_log()] Compression: none
2025-12-12T12:39:07.283 [DEBUG] [Thread-69699] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:39:07.300 [DEBUG] [Thread-69699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:39:07.300 [DEBUG] [Thread-69699] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:39:07.301 [DEBUG] [Thread-69699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:39:07.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:39:07.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:39:07.303 [DEBUG] [Thread-69699] [transport.py] [_log()] userauth is OK
2025-12-12T12:39:07.303 [DEBUG] [Thread-69699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:39:07.303 [DEBUG] [Thread-69699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:39:07.303 [DEBUG] [Thread-69699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:39:07.303 [DEBUG] [Thread-69699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:39:07.328 [INFO] [Thread-69699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:39:07.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:39:07.948 [DEBUG] [Thread-69699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:39:07.948 [DEBUG] [Thread-69699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:39:07.949 [DEBUG] [Thread-69699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:39:07.990 [DEBUG] [Thread-69699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:39:07.990 [DEBUG] [Thread-69699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:39:07.994 [DEBUG] [Thread-69699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:39:08.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:39:08.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:39:08.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:39:08.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:39:08.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:39:08.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:39:08.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:39:08.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:39:08.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:39:08.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.443498 -999.00  +21.10  46.59     23   -0.30 1 2 2 1 1   888    0 21.46 110.07 ----- 42.0 46.6 314.0 51.7 25.5 -24.7 24.7 -23.9 24.5 -21.6 25.2 -22.5
2025-12-12T12:39:08.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:39:08.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:39:08.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.443498
2025-12-12T12:39:08.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:39:08.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:39:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:39:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:39:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:39:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:39:02', tmtdew=25.01, humidity=18.13, cloud=0.0, wind=46.79, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:38:38.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:39:08.030 [DEBUG] [Thread-69699] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:39:08.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:39:08.126 [DEBUG] [Thread-69702] [transport.py] [_log()] starting thread (client mode): 0xf57ca7d0
2025-12-12T12:39:08.126 [DEBUG] [Thread-69702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:39:08.143 [DEBUG] [Thread-69702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:39:08.143 [INFO] [Thread-69702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:39:08.150 [DEBUG] [Thread-69702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:39:08.150 [DEBUG] [Thread-69702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:39:08.150 [DEBUG] [Thread-69702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] client lang: <none>
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] server lang: <none>
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] kex follows: False
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] Compression: none
2025-12-12T12:39:08.151 [DEBUG] [Thread-69702] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:39:08.207 [DEBUG] [Thread-69702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:39:08.207 [DEBUG] [Thread-69702] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:39:08.208 [DEBUG] [Thread-69702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:39:08.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:39:08.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:39:08.263 [DEBUG] [Thread-69702] [transport.py] [_log()] userauth is OK
2025-12-12T12:39:08.263 [DEBUG] [Thread-69702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:39:08.263 [DEBUG] [Thread-69702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:39:08.263 [DEBUG] [Thread-69702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:39:08.264 [DEBUG] [Thread-69702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:39:08.287 [INFO] [Thread-69702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:39:08.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:39:08.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:39:08.713 [DEBUG] [Thread-69704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:09.166 [DEBUG] [Thread-69702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:39:09.166 [DEBUG] [Thread-69702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:39:09.215 [DEBUG] [Thread-69702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:39:09.215 [DEBUG] [Thread-69702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:39:09.224 [DEBUG] [Thread-69702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:39:09.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:39:09.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:39:09.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:39:09.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:39:09.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:39:09.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:39:09.258 [DEBUG] [Thread-69702] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:39:23.758 [DEBUG] [Thread-69705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:37.165 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:37.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:38.791 [DEBUG] [Thread-69706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:39.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:39:39.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:39:39.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:39:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 39, 34), 25.08, 18.18, 0.0, 53.46, 20.92, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:39:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:39:34
2025-12-12T12:39:40.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:39:40.274 [DEBUG] [Thread-69707] [transport.py] [_log()] starting thread (client mode): 0xf2d0ead0
2025-12-12T12:39:40.274 [DEBUG] [Thread-69707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:39:40.294 [DEBUG] [Thread-69707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:39:40.294 [INFO] [Thread-69707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] client lang: <none>
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] server lang: <none>
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] kex follows: False
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] Compression: none
2025-12-12T12:39:40.296 [DEBUG] [Thread-69707] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:39:40.306 [DEBUG] [Thread-69707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:39:40.306 [DEBUG] [Thread-69707] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:39:40.306 [DEBUG] [Thread-69707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:39:40.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:39:40.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:39:40.307 [DEBUG] [Thread-69707] [transport.py] [_log()] userauth is OK
2025-12-12T12:39:40.307 [DEBUG] [Thread-69707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:39:40.307 [DEBUG] [Thread-69707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:39:40.307 [DEBUG] [Thread-69707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:39:40.307 [DEBUG] [Thread-69707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:39:40.316 [INFO] [Thread-69707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:39:40.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:39:40.914 [DEBUG] [Thread-69707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:39:40.914 [DEBUG] [Thread-69707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:39:40.915 [DEBUG] [Thread-69707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:39:40.955 [DEBUG] [Thread-69707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:39:40.955 [DEBUG] [Thread-69707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:39:40.961 [DEBUG] [Thread-69707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:39:40.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:39:40.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:39:40.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:39:40.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:39:40.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:39:40.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:39:40.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.443846 -999.00  +20.40  55.07     24   -0.80 1 1 2 1 1   888    0 22.11 125.27 ----- 46.2 55.1 313.4 61.9 25.2 -25.7 24.8 -24.4 24.2 -26.8 25.0 -22.9
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.443846
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:39:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:39:34', tmtdew=25.08, humidity=18.18, cloud=0.0, wind=53.46, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:39:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:39:40.994 [DEBUG] [Thread-69707] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:39:41.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:39:41.080 [DEBUG] [Thread-69710] [transport.py] [_log()] starting thread (client mode): 0xf2d0df90
2025-12-12T12:39:41.080 [DEBUG] [Thread-69710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:39:41.094 [DEBUG] [Thread-69710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:39:41.094 [INFO] [Thread-69710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:39:41.102 [DEBUG] [Thread-69710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:39:41.102 [DEBUG] [Thread-69710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:39:41.102 [DEBUG] [Thread-69710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:39:41.102 [DEBUG] [Thread-69710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:41.102 [DEBUG] [Thread-69710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:39:41.102 [DEBUG] [Thread-69710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] client lang: <none>
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] server lang: <none>
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] kex follows: False
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] Compression: none
2025-12-12T12:39:41.103 [DEBUG] [Thread-69710] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:39:41.157 [DEBUG] [Thread-69710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:39:41.157 [DEBUG] [Thread-69710] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:39:41.157 [DEBUG] [Thread-69710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:39:41.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:39:41.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:39:41.215 [DEBUG] [Thread-69710] [transport.py] [_log()] userauth is OK
2025-12-12T12:39:41.215 [DEBUG] [Thread-69710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:39:41.215 [DEBUG] [Thread-69710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:39:41.215 [DEBUG] [Thread-69710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:39:41.215 [DEBUG] [Thread-69710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:39:41.229 [INFO] [Thread-69710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:39:41.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:39:41.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:39:42.073 [DEBUG] [Thread-69710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:39:42.073 [DEBUG] [Thread-69710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:39:42.122 [DEBUG] [Thread-69710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:39:42.122 [DEBUG] [Thread-69710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:39:42.131 [DEBUG] [Thread-69710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:39:42.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:39:42.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:39:42.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:39:42.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:39:42.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:39:42.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:39:42.163 [DEBUG] [Thread-69710] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:39:42.176 [DEBUG] [Thread-69712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:39:53.819 [DEBUG] [Thread-69713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:08.863 [DEBUG] [Thread-69714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:40:12.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:40:12.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
2025-12-12T12:40:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 40, 6), 24.94, 18.33, 0.0, 55.81, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:40:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:40:06
2025-12-12T12:40:13.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:40:13.167 [DEBUG] [Thread-69715] [transport.py] [_log()] starting thread (client mode): 0xf813f2b0
2025-12-12T12:40:13.168 [DEBUG] [Thread-69715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:40:13.188 [DEBUG] [Thread-69715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:40:13.188 [INFO] [Thread-69715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] client lang: <none>
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] server lang: <none>
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] kex follows: False
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:40:13.192 [DEBUG] [Thread-69715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:40:13.193 [DEBUG] [Thread-69715] [transport.py] [_log()] Compression: none
2025-12-12T12:40:13.193 [DEBUG] [Thread-69715] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:40:13.209 [DEBUG] [Thread-69715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:40:13.209 [DEBUG] [Thread-69715] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:40:13.210 [DEBUG] [Thread-69715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:40:13.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:40:13.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:40:13.212 [DEBUG] [Thread-69715] [transport.py] [_log()] userauth is OK
2025-12-12T12:40:13.212 [DEBUG] [Thread-69715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:40:13.212 [DEBUG] [Thread-69715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:40:13.212 [DEBUG] [Thread-69715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:40:13.212 [DEBUG] [Thread-69715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:40:13.229 [INFO] [Thread-69715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:40:13.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:40:14.341 [DEBUG] [Thread-69715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:40:14.341 [DEBUG] [Thread-69715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:40:14.341 [DEBUG] [Thread-69715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:40:14.382 [DEBUG] [Thread-69715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:40:14.382 [DEBUG] [Thread-69715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:40:14.384 [DEBUG] [Thread-69715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:40:14.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:40:14.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:40:14.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:40:14.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:40:14.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:40:14.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:40:14.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:40:14.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:40:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:40:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.444193 -999.00  +20.40  60.10     23   -0.80 1 1 3 1 1   888    0 22.84 147.67 ----- 49.8 60.1 312.2 72.1 25.1 -24.4 24.5 -25.0 24.0 -25.7 24.9 -22.7
2025-12-12T12:40:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:40:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:40:14.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.444193
2025-12-12T12:40:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:40:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:40:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:40:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:40:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:40:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:40:06', tmtdew=24.94, humidity=18.33, cloud=0.0, wind=55.81, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:39:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:40:14.410 [DEBUG] [Thread-69715] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:40:14.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:40:23.886 [DEBUG] [Thread-69718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:37.306 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:37.307 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:38.927 [DEBUG] [Thread-69719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:42.226 [DEBUG] [Thread-69720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:40:53.954 [DEBUG] [Thread-69721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:08.982 [DEBUG] [Thread-69722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:24.016 [DEBUG] [Thread-69723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:37.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:37.448 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:39.050 [DEBUG] [Thread-69724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:42.280 [DEBUG] [Thread-69725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:41:54.085 [DEBUG] [Thread-69726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:09.119 [DEBUG] [Thread-69727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:24.152 [DEBUG] [Thread-69728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:29.226 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T12:42:37.588 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:37.589 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:39.185 [DEBUG] [Thread-69729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:42.351 [DEBUG] [Thread-69730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:54.218 [DEBUG] [Thread-69731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:42:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:42:59.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:42:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:42:59.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 42, 46), 25.85, 17.11, 0.0, 49.84, 21.37, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:42:59.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:42:46
2025-12-12T12:43:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:43:00.234 [DEBUG] [Thread-69732] [transport.py] [_log()] starting thread (client mode): 0xf570e800
2025-12-12T12:43:00.235 [DEBUG] [Thread-69732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:43:00.244 [DEBUG] [Thread-69732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:43:00.244 [INFO] [Thread-69732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] client lang: <none>
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] server lang: <none>
2025-12-12T12:43:00.247 [DEBUG] [Thread-69732] [transport.py] [_log()] kex follows: False
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] Compression: none
2025-12-12T12:43:00.248 [DEBUG] [Thread-69732] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:43:00.255 [DEBUG] [Thread-69732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:43:00.255 [DEBUG] [Thread-69732] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:43:00.255 [DEBUG] [Thread-69732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:43:00.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:43:00.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:43:00.256 [DEBUG] [Thread-69732] [transport.py] [_log()] userauth is OK
2025-12-12T12:43:00.256 [DEBUG] [Thread-69732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:43:00.256 [DEBUG] [Thread-69732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:43:00.256 [DEBUG] [Thread-69732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:43:00.257 [DEBUG] [Thread-69732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:43:00.268 [INFO] [Thread-69732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:43:00.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:43:00.938 [DEBUG] [Thread-69732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:43:00.938 [DEBUG] [Thread-69732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:43:00.939 [DEBUG] [Thread-69732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:43:00.979 [DEBUG] [Thread-69732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:43:00.979 [DEBUG] [Thread-69732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:43:00.982 [DEBUG] [Thread-69732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:43:00.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:43:00.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:43:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:43:00.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:43:01.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:43:01.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:43:01.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:43:01.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:43:01.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:43:01.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.446276 -999.00  +21.40  37.48     23   -0.10 1 1 2 1 1   888    0 25.23 218.16 ----- 47.7 37.5 307.8 60.4 25.0 -24.7 24.3 -24.6 24.2 -24.9 24.9 -22.8
2025-12-12T12:43:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:43:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:43:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.446276
2025-12-12T12:43:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:43:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:43:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:43:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:43:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:43:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:42:46', tmtdew=25.85, humidity=17.11, cloud=0.0, wind=49.84, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:42:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:43:01.005 [DEBUG] [Thread-69732] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:43:01.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:43:01.099 [DEBUG] [Thread-69735] [transport.py] [_log()] starting thread (client mode): 0xf81f1660
2025-12-12T12:43:01.100 [DEBUG] [Thread-69735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:43:01.117 [DEBUG] [Thread-69735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:43:01.117 [INFO] [Thread-69735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:01.125 [DEBUG] [Thread-69735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] client lang: <none>
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] server lang: <none>
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] kex follows: False
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:43:01.126 [DEBUG] [Thread-69735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:43:01.127 [DEBUG] [Thread-69735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:43:01.127 [DEBUG] [Thread-69735] [transport.py] [_log()] Compression: none
2025-12-12T12:43:01.127 [DEBUG] [Thread-69735] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:43:01.184 [DEBUG] [Thread-69735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:43:01.185 [DEBUG] [Thread-69735] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:43:01.185 [DEBUG] [Thread-69735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:43:01.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:43:01.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:43:01.243 [DEBUG] [Thread-69735] [transport.py] [_log()] userauth is OK
2025-12-12T12:43:01.243 [DEBUG] [Thread-69735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:43:01.243 [DEBUG] [Thread-69735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:43:01.243 [DEBUG] [Thread-69735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:43:01.243 [DEBUG] [Thread-69735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:43:01.262 [INFO] [Thread-69735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:43:01.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:43:01.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:43:02.097 [DEBUG] [Thread-69735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:43:02.097 [DEBUG] [Thread-69735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:43:02.145 [DEBUG] [Thread-69735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:43:02.145 [DEBUG] [Thread-69735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:43:02.153 [DEBUG] [Thread-69735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:43:02.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:43:02.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:43:02.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:43:02.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:43:02.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:43:02.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:43:02.187 [DEBUG] [Thread-69735] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:43:09.246 [DEBUG] [Thread-69737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:43:24.296 [DEBUG] [Thread-69738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:43:32.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:43:32.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:43:32.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:43:32.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 43, 18), 25.83, 17.11, 0.0, 49.72, 21.25, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:43:32.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:43:18
2025-12-12T12:43:33.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:43:33.249 [DEBUG] [Thread-69739] [transport.py] [_log()] starting thread (client mode): 0xf81f2350
2025-12-12T12:43:33.249 [DEBUG] [Thread-69739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:43:33.270 [DEBUG] [Thread-69739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:43:33.270 [INFO] [Thread-69739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] client lang: <none>
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] server lang: <none>
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] kex follows: False
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] Compression: none
2025-12-12T12:43:33.273 [DEBUG] [Thread-69739] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:43:33.288 [DEBUG] [Thread-69739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:43:33.288 [DEBUG] [Thread-69739] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:43:33.288 [DEBUG] [Thread-69739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:43:33.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:43:33.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:43:33.289 [DEBUG] [Thread-69739] [transport.py] [_log()] userauth is OK
2025-12-12T12:43:33.289 [DEBUG] [Thread-69739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:43:33.289 [DEBUG] [Thread-69739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:43:33.289 [DEBUG] [Thread-69739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:43:33.289 [DEBUG] [Thread-69739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:43:33.299 [INFO] [Thread-69739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:43:33.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:43:33.926 [DEBUG] [Thread-69739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:43:33.926 [DEBUG] [Thread-69739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:43:33.926 [DEBUG] [Thread-69739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:43:33.967 [DEBUG] [Thread-69739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:43:33.967 [DEBUG] [Thread-69739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:43:33.969 [DEBUG] [Thread-69739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:43:33.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:43:33.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:43:33.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:43:33.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:43:33.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:43:33.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:43:33.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.446623 -999.00  +21.00  45.60     23   -0.40 1 1 2 1 1   888    0 25.74 227.29 ----- 46.2 45.6 302.8 56.2 25.1 -24.9 24.5 -24.3 24.1 -25.2 24.9 -22.7
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.446623
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:43:18', tmtdew=25.83, humidity=17.11, cloud=0.0, wind=49.72, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:43:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:43:33.987 [DEBUG] [Thread-69739] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:43:34.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:43:34.073 [DEBUG] [Thread-69742] [transport.py] [_log()] starting thread (client mode): 0xf813d450
2025-12-12T12:43:34.073 [DEBUG] [Thread-69742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:43:34.087 [DEBUG] [Thread-69742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:43:34.087 [INFO] [Thread-69742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] client lang: <none>
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] server lang: <none>
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] kex follows: False
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] Compression: none
2025-12-12T12:43:34.096 [DEBUG] [Thread-69742] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:43:34.150 [DEBUG] [Thread-69742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:43:34.150 [DEBUG] [Thread-69742] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:43:34.150 [DEBUG] [Thread-69742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:43:34.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:43:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:43:34.208 [DEBUG] [Thread-69742] [transport.py] [_log()] userauth is OK
2025-12-12T12:43:34.208 [DEBUG] [Thread-69742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:43:34.208 [DEBUG] [Thread-69742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:43:34.208 [DEBUG] [Thread-69742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:43:34.208 [DEBUG] [Thread-69742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:43:34.223 [INFO] [Thread-69742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:43:34.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:43:34.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:43:35.037 [DEBUG] [Thread-69742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:43:35.037 [DEBUG] [Thread-69742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:43:35.086 [DEBUG] [Thread-69742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:43:35.086 [DEBUG] [Thread-69742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:43:35.095 [DEBUG] [Thread-69742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:43:35.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:43:35.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:43: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
2025-12-12T12:43:35.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:43:35.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:43:35.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:43:35.129 [DEBUG] [Thread-69742] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:43:37.729 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:43:37.730 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:43:39.325 [DEBUG] [Thread-69744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:43:42.412 [DEBUG] [Thread-69745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:43:54.372 [DEBUG] [Thread-69746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:44:05.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:44:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:44:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 43, 50), 25.68, 17.7, 0.0, 37.49, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:44:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:43:50
2025-12-12T12:44:05.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:44:06.124 [DEBUG] [Thread-69747] [transport.py] [_log()] starting thread (client mode): 0xf57c8430
2025-12-12T12:44:06.124 [DEBUG] [Thread-69747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:44:06.142 [DEBUG] [Thread-69747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:44:06.142 [INFO] [Thread-69747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:44:06.144 [DEBUG] [Thread-69747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] client lang: <none>
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] server lang: <none>
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] kex follows: False
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] Compression: none
2025-12-12T12:44:06.145 [DEBUG] [Thread-69747] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:44:06.155 [DEBUG] [Thread-69747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:44:06.155 [DEBUG] [Thread-69747] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:44:06.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:44:06.157 [DEBUG] [Thread-69747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:44:06.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:44:06.159 [DEBUG] [Thread-69747] [transport.py] [_log()] userauth is OK
2025-12-12T12:44:06.159 [DEBUG] [Thread-69747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:44:06.159 [DEBUG] [Thread-69747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:44:06.159 [DEBUG] [Thread-69747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:44:06.159 [DEBUG] [Thread-69747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:44:06.196 [INFO] [Thread-69747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:44:06.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:44:06.805 [DEBUG] [Thread-69747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:44:06.805 [DEBUG] [Thread-69747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:44:06.806 [DEBUG] [Thread-69747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:44:06.858 [DEBUG] [Thread-69747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:44:06.859 [DEBUG] [Thread-69747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:44:06.862 [DEBUG] [Thread-69747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:44:06.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:44:06.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:44:06.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:44:06.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:44:06.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:44:06.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:44:06.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:44:06.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:44:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:44:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.446970 -999.00  +21.20  35.76     24   -0.10 1 1 2 1 1   888    0 25.92 240.50 ----- 43.4 35.8 309.4 54.3 25.1 -25.3 24.4 -25.1 24.3 -21.9 25.0 -22.2
2025-12-12T12:44:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:44:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:44:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.446970
2025-12-12T12:44:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:44:06.886 [DEBUG] [Thread-69747] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:44:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:44:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:44:06.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:44:06.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:44:06.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:43:50', tmtdew=25.68, humidity=17.7, cloud=0.0, wind=37.49, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:43:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:44:06.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:44:06.980 [DEBUG] [Thread-69750] [transport.py] [_log()] starting thread (client mode): 0xfabc6770
2025-12-12T12:44:06.980 [DEBUG] [Thread-69750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:44:06.995 [DEBUG] [Thread-69750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:44:06.995 [INFO] [Thread-69750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:07.003 [DEBUG] [Thread-69750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] client lang: <none>
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] server lang: <none>
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] kex follows: False
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:44:07.004 [DEBUG] [Thread-69750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:44:07.005 [DEBUG] [Thread-69750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:44:07.005 [DEBUG] [Thread-69750] [transport.py] [_log()] Compression: none
2025-12-12T12:44:07.005 [DEBUG] [Thread-69750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:44:07.058 [DEBUG] [Thread-69750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:44:07.059 [DEBUG] [Thread-69750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:44:07.059 [DEBUG] [Thread-69750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:44:07.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:44:07.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:44:07.115 [DEBUG] [Thread-69750] [transport.py] [_log()] userauth is OK
2025-12-12T12:44:07.115 [DEBUG] [Thread-69750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:44:07.115 [DEBUG] [Thread-69750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:44:07.115 [DEBUG] [Thread-69750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:44:07.115 [DEBUG] [Thread-69750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:44:07.134 [INFO] [Thread-69750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:44:07.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:44:07.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:44:08.021 [DEBUG] [Thread-69750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:44:08.021 [DEBUG] [Thread-69750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:44:08.068 [DEBUG] [Thread-69750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:44:08.068 [DEBUG] [Thread-69750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:44:08.077 [DEBUG] [Thread-69750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:44:08.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:44:08.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:44:08.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:44:08.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:44:08.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:44:08.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:44:08.108 [DEBUG] [Thread-69750] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:44:09.399 [DEBUG] [Thread-69752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:24.431 [DEBUG] [Thread-69753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:37.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:37.872 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:38.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:44:38.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:44:38.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:44:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 44, 22), 25.61, 17.75, 0.0, 40.08, 21.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:44:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:44:22
2025-12-12T12:44:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:44:39.105 [DEBUG] [Thread-69754] [transport.py] [_log()] starting thread (client mode): 0xf813cb20
2025-12-12T12:44:39.105 [DEBUG] [Thread-69754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:44:39.124 [DEBUG] [Thread-69754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:44:39.124 [INFO] [Thread-69754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] client lang: <none>
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] server lang: <none>
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] kex follows: False
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] Compression: none
2025-12-12T12:44:39.128 [DEBUG] [Thread-69754] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:44:39.146 [DEBUG] [Thread-69754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:44:39.147 [DEBUG] [Thread-69754] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:44:39.147 [DEBUG] [Thread-69754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:44:39.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:44:39.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:44:39.149 [DEBUG] [Thread-69754] [transport.py] [_log()] userauth is OK
2025-12-12T12:44:39.149 [DEBUG] [Thread-69754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:44:39.149 [DEBUG] [Thread-69754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:44:39.150 [DEBUG] [Thread-69754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:44:39.150 [DEBUG] [Thread-69754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:44:39.172 [INFO] [Thread-69754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:44:39.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:44:39.458 [DEBUG] [Thread-69756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:39.849 [DEBUG] [Thread-69754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:44:39.849 [DEBUG] [Thread-69754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:44:39.849 [DEBUG] [Thread-69754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:44:39.890 [DEBUG] [Thread-69754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:44:39.890 [DEBUG] [Thread-69754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:44:39.893 [DEBUG] [Thread-69754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:44:39.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:44:39.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:44:39.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:44:39.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:44:39.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:44:39.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:44:39.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:44:39.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:44:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:44:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.447317 -999.00  +21.20  41.79     22   -1.10 1 1 2 1 1   888    0 27.04 257.23 ----- 40.0 41.8 321.7 61.6 25.2 -26.1 24.6 -25.5 24.4 -21.2 25.1 -22.1
2025-12-12T12:44:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:44:39.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:44:39.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.447317
2025-12-12T12:44:39.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:44:39.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:44:39.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:44:39.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:44:39.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:44:39.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:44:22', tmtdew=25.61, humidity=17.75, cloud=0.0, wind=40.08, temperature=21.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:44:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:44:39.916 [DEBUG] [Thread-69754] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:44:40.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:44:40.012 [DEBUG] [Thread-69758] [transport.py] [_log()] starting thread (client mode): 0xf570ebc0
2025-12-12T12:44:40.013 [DEBUG] [Thread-69758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:44:40.027 [DEBUG] [Thread-69758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:44:40.027 [INFO] [Thread-69758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] client lang: <none>
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] server lang: <none>
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] kex follows: False
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:44:40.035 [DEBUG] [Thread-69758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:44:40.036 [DEBUG] [Thread-69758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:44:40.036 [DEBUG] [Thread-69758] [transport.py] [_log()] Compression: none
2025-12-12T12:44:40.036 [DEBUG] [Thread-69758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:44:40.094 [DEBUG] [Thread-69758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:44:40.095 [DEBUG] [Thread-69758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:44:40.095 [DEBUG] [Thread-69758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:44:40.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:44:40.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:44:40.151 [DEBUG] [Thread-69758] [transport.py] [_log()] userauth is OK
2025-12-12T12:44:40.151 [DEBUG] [Thread-69758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:44:40.151 [DEBUG] [Thread-69758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:44:40.152 [DEBUG] [Thread-69758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:44:40.152 [DEBUG] [Thread-69758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:44:40.170 [INFO] [Thread-69758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:44:40.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:44:40.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:44:41.012 [DEBUG] [Thread-69758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:44:41.012 [DEBUG] [Thread-69758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:44:41.060 [DEBUG] [Thread-69758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:44:41.060 [DEBUG] [Thread-69758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:44:41.070 [DEBUG] [Thread-69758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:44:41.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:44:41.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:44:41.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:44:41.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:44:41.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:44:41.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:44:41.104 [DEBUG] [Thread-69758] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:44:42.465 [DEBUG] [Thread-69760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:44:54.484 [DEBUG] [Thread-69761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:09.536 [DEBUG] [Thread-69762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:45:11.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:45: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
2025-12-12T12:45:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 44, 54), 26.0, 17.11, 0.0, 57.01, 21.12, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:45:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:44:54
2025-12-12T12:45:11.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:45:12.093 [DEBUG] [Thread-69763] [transport.py] [_log()] starting thread (client mode): 0xf57ca020
2025-12-12T12:45:12.093 [DEBUG] [Thread-69763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:45:12.114 [DEBUG] [Thread-69763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:45:12.114 [INFO] [Thread-69763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] client lang: <none>
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] server lang: <none>
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] kex follows: False
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] Compression: none
2025-12-12T12:45:12.117 [DEBUG] [Thread-69763] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:45:12.134 [DEBUG] [Thread-69763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:45:12.134 [DEBUG] [Thread-69763] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:45:12.134 [DEBUG] [Thread-69763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:45:12.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:45:12.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:45:12.136 [DEBUG] [Thread-69763] [transport.py] [_log()] userauth is OK
2025-12-12T12:45:12.136 [DEBUG] [Thread-69763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:45:12.136 [DEBUG] [Thread-69763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:45:12.136 [DEBUG] [Thread-69763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:45:12.136 [DEBUG] [Thread-69763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:45:12.159 [INFO] [Thread-69763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:45:12.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:45:12.772 [DEBUG] [Thread-69763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:45:12.773 [DEBUG] [Thread-69763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:45:12.773 [DEBUG] [Thread-69763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:45:12.814 [DEBUG] [Thread-69763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:45:12.814 [DEBUG] [Thread-69763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:45:12.817 [DEBUG] [Thread-69763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:45:12.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:45:12.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:45:12.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:45:12.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:45:12.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:45:12.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:45:12.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:45:12.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:45:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:45:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.448012 -999.00  +21.30  47.82     22   -0.90 1 2 2 1 1   888    0 26.99 254.37 ----- 42.2 47.8 326.4 55.2 25.4 -23.6 24.7 -23.7 24.6 -21.7 25.3 -22.0
2025-12-12T12:45:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:45:12.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.448012
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:45:12.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:44:54', tmtdew=26.0, humidity=17.11, cloud=0.0, wind=57.01, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:45:08.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:45:12.836 [DEBUG] [Thread-69763] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:45:12.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:45:12.934 [DEBUG] [Thread-69766] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-12T12:45:12.934 [DEBUG] [Thread-69766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:45:12.949 [DEBUG] [Thread-69766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:45:12.949 [INFO] [Thread-69766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:12.956 [DEBUG] [Thread-69766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] client lang: <none>
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] server lang: <none>
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] kex follows: False
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] Compression: none
2025-12-12T12:45:12.957 [DEBUG] [Thread-69766] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:45:13.015 [DEBUG] [Thread-69766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:45:13.015 [DEBUG] [Thread-69766] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:45:13.016 [DEBUG] [Thread-69766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:45:13.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:45:13.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:45:13.071 [DEBUG] [Thread-69766] [transport.py] [_log()] userauth is OK
2025-12-12T12:45:13.071 [DEBUG] [Thread-69766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:45:13.071 [DEBUG] [Thread-69766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:45:13.071 [DEBUG] [Thread-69766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:45:13.071 [DEBUG] [Thread-69766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:45:13.090 [INFO] [Thread-69766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:45:13.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:45:13.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:45:13.912 [DEBUG] [Thread-69766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:45:13.912 [DEBUG] [Thread-69766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:45:13.960 [DEBUG] [Thread-69766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:45:13.960 [DEBUG] [Thread-69766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:45:13.968 [DEBUG] [Thread-69766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:45:13.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:45:13.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:45:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:45:13.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:45:13.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:45:13.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:45:14.003 [DEBUG] [Thread-69766] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:45:24.566 [DEBUG] [Thread-69768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:38.012 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:38.013 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:39.607 [DEBUG] [Thread-69769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:42.517 [DEBUG] [Thread-69770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:45:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:45:44.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:45:44.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:45:44.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 45, 26), 25.69, 17.45, 0.0, 51.96, 20.89, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:45:44.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:45:26
2025-12-12T12:45:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:45:44.985 [DEBUG] [Thread-69771] [transport.py] [_log()] starting thread (client mode): 0xf81f3940
2025-12-12T12:45:44.986 [DEBUG] [Thread-69771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:45:45.007 [DEBUG] [Thread-69771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:45:45.007 [INFO] [Thread-69771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] client lang: <none>
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] server lang: <none>
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] kex follows: False
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:45:45.010 [DEBUG] [Thread-69771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:45:45.011 [DEBUG] [Thread-69771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:45:45.011 [DEBUG] [Thread-69771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:45:45.011 [DEBUG] [Thread-69771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:45:45.011 [DEBUG] [Thread-69771] [transport.py] [_log()] Compression: none
2025-12-12T12:45:45.011 [DEBUG] [Thread-69771] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:45:45.027 [DEBUG] [Thread-69771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:45:45.028 [DEBUG] [Thread-69771] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:45:45.028 [DEBUG] [Thread-69771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:45:45.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:45:45.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:45:45.030 [DEBUG] [Thread-69771] [transport.py] [_log()] userauth is OK
2025-12-12T12:45:45.030 [DEBUG] [Thread-69771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:45:45.030 [DEBUG] [Thread-69771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:45:45.030 [DEBUG] [Thread-69771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:45:45.031 [DEBUG] [Thread-69771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:45:45.048 [INFO] [Thread-69771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:45:45.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:45:45.631 [DEBUG] [Thread-69771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:45:45.631 [DEBUG] [Thread-69771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:45:45.631 [DEBUG] [Thread-69771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:45:45.672 [DEBUG] [Thread-69771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:45:45.672 [DEBUG] [Thread-69771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:45:45.675 [DEBUG] [Thread-69771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:45:45.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:45:45.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:45:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:45:45.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:45:45.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:45:45.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:45:45.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:45:45.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:45:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:45:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.448012 -999.00  +21.30  47.82     22   -0.90 1 2 2 1 1   888    0 26.99 254.37 ----- 42.2 47.8 326.4 55.2 25.4 -23.6 24.7 -23.7 24.6 -21.7 25.3 -22.0
2025-12-12T12:45:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:45:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:45:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.448012
2025-12-12T12:45:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:45:45.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:45:45.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:45:45.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:45:45.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:45:45.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:45:26', tmtdew=25.69, humidity=17.45, cloud=0.0, wind=51.96, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:45:08.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:45:45.701 [DEBUG] [Thread-69771] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:45:45.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:45:45.798 [DEBUG] [Thread-69774] [transport.py] [_log()] starting thread (client mode): 0xf81c0c40
2025-12-12T12:45:45.798 [DEBUG] [Thread-69774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:45:45.813 [DEBUG] [Thread-69774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:45:45.813 [INFO] [Thread-69774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:45:45.820 [DEBUG] [Thread-69774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:45:45.820 [DEBUG] [Thread-69774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] client lang: <none>
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] server lang: <none>
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] kex follows: False
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] Compression: none
2025-12-12T12:45:45.821 [DEBUG] [Thread-69774] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:45:45.878 [DEBUG] [Thread-69774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:45:45.879 [DEBUG] [Thread-69774] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:45:45.879 [DEBUG] [Thread-69774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:45:45.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:45:45.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:45:45.935 [DEBUG] [Thread-69774] [transport.py] [_log()] userauth is OK
2025-12-12T12:45:45.936 [DEBUG] [Thread-69774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:45:45.936 [DEBUG] [Thread-69774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:45:45.936 [DEBUG] [Thread-69774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:45:45.936 [DEBUG] [Thread-69774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:45:45.955 [INFO] [Thread-69774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:45:45.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:45:45.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:45:46.817 [DEBUG] [Thread-69774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:45:46.817 [DEBUG] [Thread-69774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:45:46.865 [DEBUG] [Thread-69774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:45:46.865 [DEBUG] [Thread-69774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:45:46.874 [DEBUG] [Thread-69774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:45:46.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:45:46.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:45:46.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:45:46.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:45:46.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:45:46.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:45:46.909 [DEBUG] [Thread-69774] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:45:54.637 [DEBUG] [Thread-69776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:09.684 [DEBUG] [Thread-69777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:16.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:46:16.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:46:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:46:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 45, 59), 25.5, 17.55, 0.0, 52.53, 21.02, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:46:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:45:59
2025-12-12T12:46:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:46:17.892 [DEBUG] [Thread-69778] [transport.py] [_log()] starting thread (client mode): 0xf81f2ef0
2025-12-12T12:46:17.892 [DEBUG] [Thread-69778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:46:17.912 [DEBUG] [Thread-69778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:46:17.912 [INFO] [Thread-69778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:46:17.915 [DEBUG] [Thread-69778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] client lang: <none>
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] server lang: <none>
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] kex follows: False
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:46:17.916 [DEBUG] [Thread-69778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:46:17.917 [DEBUG] [Thread-69778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:46:17.917 [DEBUG] [Thread-69778] [transport.py] [_log()] Compression: none
2025-12-12T12:46:17.917 [DEBUG] [Thread-69778] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:46:17.937 [DEBUG] [Thread-69778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:46:17.937 [DEBUG] [Thread-69778] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:46:17.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:46:17.939 [DEBUG] [Thread-69778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:46:17.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:46:17.941 [DEBUG] [Thread-69778] [transport.py] [_log()] userauth is OK
2025-12-12T12:46:17.941 [DEBUG] [Thread-69778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:46:17.941 [DEBUG] [Thread-69778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:46:17.941 [DEBUG] [Thread-69778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:46:17.941 [DEBUG] [Thread-69778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:46:17.963 [INFO] [Thread-69778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:46:17.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:46:18.701 [DEBUG] [Thread-69778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:46:18.701 [DEBUG] [Thread-69778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:46:18.701 [DEBUG] [Thread-69778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:46:18.742 [DEBUG] [Thread-69778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:46:18.742 [DEBUG] [Thread-69778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:46:18.745 [DEBUG] [Thread-69778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:46:18.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:46:18.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:46:18.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:46:18.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:46:18.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:46:18.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:46:18.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:46:18.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:46:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:46:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.448359 -999.00  +21.80  23.38     22   -0.40 1 1 1 1 1   888    0 26.52 248.41 ----- 43.6 23.4 352.5 50.0 25.5 -24.3 24.9 -24.2 24.7 -22.1 25.4 -22.6
2025-12-12T12:46:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:46:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:46:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.448359
2025-12-12T12:46:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:46:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:46:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:46:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:46:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:46:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:45:59', tmtdew=25.5, humidity=17.55, cloud=0.0, wind=52.53, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:45:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:46:18.772 [DEBUG] [Thread-69778] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:46:18.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:46:18.873 [DEBUG] [Thread-69781] [transport.py] [_log()] starting thread (client mode): 0xf570e410
2025-12-12T12:46:18.873 [DEBUG] [Thread-69781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:46:18.888 [DEBUG] [Thread-69781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:46:18.888 [INFO] [Thread-69781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:46:18.895 [DEBUG] [Thread-69781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] client lang: <none>
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] server lang: <none>
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] kex follows: False
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:46:18.896 [DEBUG] [Thread-69781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:46:18.897 [DEBUG] [Thread-69781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:46:18.897 [DEBUG] [Thread-69781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:46:18.897 [DEBUG] [Thread-69781] [transport.py] [_log()] Compression: none
2025-12-12T12:46:18.897 [DEBUG] [Thread-69781] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:46:18.955 [DEBUG] [Thread-69781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:46:18.955 [DEBUG] [Thread-69781] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:46:18.956 [DEBUG] [Thread-69781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:46:18.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:46:18.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:46:19.011 [DEBUG] [Thread-69781] [transport.py] [_log()] userauth is OK
2025-12-12T12:46:19.011 [DEBUG] [Thread-69781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:46:19.011 [DEBUG] [Thread-69781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:46:19.011 [DEBUG] [Thread-69781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:46:19.012 [DEBUG] [Thread-69781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:46:19.030 [INFO] [Thread-69781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:46:19.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:46:19.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:46:19.846 [DEBUG] [Thread-69781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:46:19.847 [DEBUG] [Thread-69781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:46:19.895 [DEBUG] [Thread-69781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:46:19.895 [DEBUG] [Thread-69781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:46:19.904 [DEBUG] [Thread-69781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:46:19.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:46:19.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:46:19.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:46:19.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:46:19.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:46:19.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:46:19.938 [DEBUG] [Thread-69781] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:46:24.716 [DEBUG] [Thread-69783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:38.161 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:38.162 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:39.760 [DEBUG] [Thread-69784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:42.571 [DEBUG] [Thread-69785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:46:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:46:49.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:46:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:46:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 46, 31), 25.31, 17.79, 0.0, 51.77, 21.02, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:46:50.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:46:31
2025-12-12T12:46:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:46:50.926 [DEBUG] [Thread-69786] [transport.py] [_log()] starting thread (client mode): 0xf81c3010
2025-12-12T12:46:50.927 [DEBUG] [Thread-69786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:46:50.946 [DEBUG] [Thread-69786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:46:50.947 [INFO] [Thread-69786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] client lang: <none>
2025-12-12T12:46:50.950 [DEBUG] [Thread-69786] [transport.py] [_log()] server lang: <none>
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] kex follows: False
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] Compression: none
2025-12-12T12:46:50.951 [DEBUG] [Thread-69786] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:46:50.972 [DEBUG] [Thread-69786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:46:50.972 [DEBUG] [Thread-69786] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:46:50.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:46:50.973 [DEBUG] [Thread-69786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:46:50.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:46:50.974 [DEBUG] [Thread-69786] [transport.py] [_log()] userauth is OK
2025-12-12T12:46:50.975 [DEBUG] [Thread-69786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:46:50.975 [DEBUG] [Thread-69786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:46:50.975 [DEBUG] [Thread-69786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:46:50.975 [DEBUG] [Thread-69786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:46:51.007 [INFO] [Thread-69786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:46:51.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:46:51.652 [DEBUG] [Thread-69786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:46:51.652 [DEBUG] [Thread-69786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:46:51.653 [DEBUG] [Thread-69786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:46:51.693 [DEBUG] [Thread-69786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:46:51.693 [DEBUG] [Thread-69786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:46:51.696 [DEBUG] [Thread-69786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:46:51.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:46:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:46:51.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:46:51.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:46:51.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:46:51.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:46:51.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:46:51.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:46:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:46:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.448707 -999.00  +20.90  46.67     23   -0.80 1 1 2 1 1   888    0 26.27 235.70 ----- 41.3 46.7 354.4 61.2 25.6 -25.6 24.9 -26.3 24.6 -23.0 25.1 -24.1
2025-12-12T12:46:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:46:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:46:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.448707
2025-12-12T12:46:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:46:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:46:51.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:46:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:46:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:46:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:46:31', tmtdew=25.31, humidity=17.79, cloud=0.0, wind=51.77, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:46:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:46:51.718 [DEBUG] [Thread-69786] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:46:51.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:46:51.812 [DEBUG] [Thread-69789] [transport.py] [_log()] starting thread (client mode): 0xfabc5cc0
2025-12-12T12:46:51.812 [DEBUG] [Thread-69789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:46:51.827 [DEBUG] [Thread-69789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:46:51.827 [INFO] [Thread-69789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:46:51.834 [DEBUG] [Thread-69789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:46:51.834 [DEBUG] [Thread-69789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] client lang: <none>
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] server lang: <none>
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] kex follows: False
2025-12-12T12:46:51.835 [DEBUG] [Thread-69789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:46:51.836 [DEBUG] [Thread-69789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:46:51.836 [DEBUG] [Thread-69789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:46:51.836 [DEBUG] [Thread-69789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:46:51.836 [DEBUG] [Thread-69789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:46:51.836 [DEBUG] [Thread-69789] [transport.py] [_log()] Compression: none
2025-12-12T12:46:51.836 [DEBUG] [Thread-69789] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:46:51.890 [DEBUG] [Thread-69789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:46:51.891 [DEBUG] [Thread-69789] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:46:51.891 [DEBUG] [Thread-69789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:46:51.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:46:51.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:46:51.947 [DEBUG] [Thread-69789] [transport.py] [_log()] userauth is OK
2025-12-12T12:46:51.947 [DEBUG] [Thread-69789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:46:51.947 [DEBUG] [Thread-69789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:46:51.947 [DEBUG] [Thread-69789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:46:51.947 [DEBUG] [Thread-69789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:46:51.966 [INFO] [Thread-69789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:46:51.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:46:51.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:46:52.821 [DEBUG] [Thread-69789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:46:52.821 [DEBUG] [Thread-69789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:46:52.868 [DEBUG] [Thread-69789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:46:52.869 [DEBUG] [Thread-69789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:46:52.877 [DEBUG] [Thread-69789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:46:52.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:46:52.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:46:52.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:46:52.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:46:52.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:46:52.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:46:52.911 [DEBUG] [Thread-69789] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:46:54.791 [DEBUG] [Thread-69791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:09.837 [DEBUG] [Thread-69792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:47:22.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:47:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:47:23.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 47, 3), 25.34, 17.76, 0.0, 49.81, 21.05, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:47:23.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:47:03
2025-12-12T12:47:23.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:47:23.954 [DEBUG] [Thread-69793] [transport.py] [_log()] starting thread (client mode): 0xf81f0c40
2025-12-12T12:47:23.954 [DEBUG] [Thread-69793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:47:23.974 [DEBUG] [Thread-69793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:47:23.975 [INFO] [Thread-69793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] client lang: <none>
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] server lang: <none>
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] kex follows: False
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] Compression: none
2025-12-12T12:47:23.978 [DEBUG] [Thread-69793] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:47:23.994 [DEBUG] [Thread-69793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:47:23.994 [DEBUG] [Thread-69793] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:47:23.995 [DEBUG] [Thread-69793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:47:23.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:47:23.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:47:23.995 [DEBUG] [Thread-69793] [transport.py] [_log()] userauth is OK
2025-12-12T12:47:23.995 [DEBUG] [Thread-69793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:47:23.995 [DEBUG] [Thread-69793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:47:23.995 [DEBUG] [Thread-69793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:47:23.996 [DEBUG] [Thread-69793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:47:24.013 [INFO] [Thread-69793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:47:24.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:47:24.783 [DEBUG] [Thread-69793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:47:24.783 [DEBUG] [Thread-69793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:47:24.783 [DEBUG] [Thread-69793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:47:24.823 [DEBUG] [Thread-69793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:47:24.823 [DEBUG] [Thread-69793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:47:24.825 [DEBUG] [Thread-69793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:47:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:47:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:47:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:47:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:47:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:47:24.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:47:24.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.449054 -999.00  +20.20  35.81     24   -0.70 1 1 2 1 1   888    0 26.40 224.89 ----- 46.1 35.8 9.3 69.0 25.4 -25.8 24.6 -26.1 24.5 -22.2 25.1 -22.4
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.449054
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:47:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:47:03', tmtdew=25.34, humidity=17.76, cloud=0.0, wind=49.81, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:46:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:47:24.842 [DEBUG] [Thread-69793] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:47:24.861 [DEBUG] [Thread-69796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:24.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:47:24.927 [DEBUG] [Thread-69797] [transport.py] [_log()] starting thread (client mode): 0xf818be50
2025-12-12T12:47:24.927 [DEBUG] [Thread-69797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:47:24.942 [DEBUG] [Thread-69797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:47:24.942 [INFO] [Thread-69797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] client lang: <none>
2025-12-12T12:47:24.949 [DEBUG] [Thread-69797] [transport.py] [_log()] server lang: <none>
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] kex follows: False
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] Compression: none
2025-12-12T12:47:24.950 [DEBUG] [Thread-69797] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:47:25.006 [DEBUG] [Thread-69797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:47:25.006 [DEBUG] [Thread-69797] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:47:25.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:47:25.006 [DEBUG] [Thread-69797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:47:25.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:47:25.063 [DEBUG] [Thread-69797] [transport.py] [_log()] userauth is OK
2025-12-12T12:47:25.063 [DEBUG] [Thread-69797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:47:25.063 [DEBUG] [Thread-69797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:47:25.063 [DEBUG] [Thread-69797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:47:25.063 [DEBUG] [Thread-69797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:47:25.081 [INFO] [Thread-69797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:47:25.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:47:25.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:47:25.933 [DEBUG] [Thread-69797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:47:25.934 [DEBUG] [Thread-69797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:47:25.981 [DEBUG] [Thread-69797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:47:25.982 [DEBUG] [Thread-69797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:47:25.990 [DEBUG] [Thread-69797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:47:25.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:47:25.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:47:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:47:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:47:26.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:47:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:47:26.022 [DEBUG] [Thread-69797] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:47:38.304 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:38.305 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:39.897 [DEBUG] [Thread-69799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:42.621 [DEBUG] [Thread-69800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:54.927 [DEBUG] [Thread-69801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:47:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:47:56.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:47:56.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:47:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 47, 35), 25.24, 17.89, 0.0, 38.64, 21.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:47:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:47:35
2025-12-12T12:47:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:47:57.018 [DEBUG] [Thread-69802] [transport.py] [_log()] starting thread (client mode): 0xf81c3ca0
2025-12-12T12:47:57.018 [DEBUG] [Thread-69802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:47:57.039 [DEBUG] [Thread-69802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:47:57.039 [INFO] [Thread-69802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] client lang: <none>
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] server lang: <none>
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] kex follows: False
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:47:57.042 [DEBUG] [Thread-69802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:47:57.043 [DEBUG] [Thread-69802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:47:57.043 [DEBUG] [Thread-69802] [transport.py] [_log()] Compression: none
2025-12-12T12:47:57.043 [DEBUG] [Thread-69802] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:47:57.059 [DEBUG] [Thread-69802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:47:57.060 [DEBUG] [Thread-69802] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:47:57.060 [DEBUG] [Thread-69802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:47:57.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:47:57.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:47:57.062 [DEBUG] [Thread-69802] [transport.py] [_log()] userauth is OK
2025-12-12T12:47:57.062 [DEBUG] [Thread-69802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:47:57.063 [DEBUG] [Thread-69802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:47:57.063 [DEBUG] [Thread-69802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:47:57.063 [DEBUG] [Thread-69802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:47:57.086 [INFO] [Thread-69802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:47:57.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:47:57.735 [DEBUG] [Thread-69802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:47:57.735 [DEBUG] [Thread-69802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:47:57.735 [DEBUG] [Thread-69802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:47:57.776 [DEBUG] [Thread-69802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:47:57.776 [DEBUG] [Thread-69802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:47:57.779 [DEBUG] [Thread-69802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:47:57.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:47:57.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:47:57.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:47:57.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:47:57.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:47:57.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:47:57.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:47:57.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:47:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:47:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.449401 -999.00  +20.50  37.76     24   -0.50 1 1 2 1 1   888    0 26.41 232.05 ----- 35.3 37.8 2.3 60.1 25.3 -25.3 24.6 -24.5 24.6 -23.7 25.0 -23.2
2025-12-12T12:47:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:47:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:47:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.449401
2025-12-12T12:47:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:47:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:47:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:47:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:47:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:47:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:47:35', tmtdew=25.24, humidity=17.89, cloud=0.0, wind=38.64, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:47:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:47:57.805 [DEBUG] [Thread-69802] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:47:57.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:47:57.902 [DEBUG] [Thread-69805] [transport.py] [_log()] starting thread (client mode): 0xf813c4c0
2025-12-12T12:47:57.903 [DEBUG] [Thread-69805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:47:57.917 [DEBUG] [Thread-69805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:47:57.917 [INFO] [Thread-69805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:57.925 [DEBUG] [Thread-69805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] client lang: <none>
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] server lang: <none>
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] kex follows: False
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:47:57.926 [DEBUG] [Thread-69805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:47:57.927 [DEBUG] [Thread-69805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:47:57.927 [DEBUG] [Thread-69805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:47:57.927 [DEBUG] [Thread-69805] [transport.py] [_log()] Compression: none
2025-12-12T12:47:57.927 [DEBUG] [Thread-69805] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:47:57.986 [DEBUG] [Thread-69805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:47:57.987 [DEBUG] [Thread-69805] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:47:57.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:47:57.988 [DEBUG] [Thread-69805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:47:57.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:47:58.043 [DEBUG] [Thread-69805] [transport.py] [_log()] userauth is OK
2025-12-12T12:47:58.043 [DEBUG] [Thread-69805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:47:58.043 [DEBUG] [Thread-69805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:47:58.043 [DEBUG] [Thread-69805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:47:58.043 [DEBUG] [Thread-69805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:47:58.062 [INFO] [Thread-69805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:47:58.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:47:58.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:47:58.873 [DEBUG] [Thread-69805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:47:58.874 [DEBUG] [Thread-69805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:47:58.922 [DEBUG] [Thread-69805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:47:58.922 [DEBUG] [Thread-69805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:47:58.931 [DEBUG] [Thread-69805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:47:58.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:47:58.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:47:58.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:47:58.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:47:58.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:47:58.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:47:58.965 [DEBUG] [Thread-69805] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:48:09.959 [DEBUG] [Thread-69807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:48:25.004 [DEBUG] [Thread-69808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:48:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:48:28.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:48:28.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:48:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 48, 7), 25.27, 17.88, 0.0, 30.98, 21.29, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:48:29.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:48:07
2025-12-12T12:48:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:48:29.958 [DEBUG] [Thread-69809] [transport.py] [_log()] starting thread (client mode): 0xf57022f0
2025-12-12T12:48:29.958 [DEBUG] [Thread-69809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:48:29.979 [DEBUG] [Thread-69809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:48:29.979 [INFO] [Thread-69809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] client lang: <none>
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] server lang: <none>
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] kex follows: False
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:48:29.982 [DEBUG] [Thread-69809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:48:29.983 [DEBUG] [Thread-69809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:48:29.983 [DEBUG] [Thread-69809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:48:29.983 [DEBUG] [Thread-69809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:48:29.983 [DEBUG] [Thread-69809] [transport.py] [_log()] Compression: none
2025-12-12T12:48:29.983 [DEBUG] [Thread-69809] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:48:29.999 [DEBUG] [Thread-69809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:48:30.000 [DEBUG] [Thread-69809] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:48:30.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:48:30.001 [DEBUG] [Thread-69809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:48:30.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:48:30.003 [DEBUG] [Thread-69809] [transport.py] [_log()] userauth is OK
2025-12-12T12:48:30.003 [DEBUG] [Thread-69809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:48:30.003 [DEBUG] [Thread-69809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:48:30.003 [DEBUG] [Thread-69809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:48:30.003 [DEBUG] [Thread-69809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:48:30.026 [INFO] [Thread-69809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:48:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:48:30.764 [DEBUG] [Thread-69809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:48:30.764 [DEBUG] [Thread-69809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:48:30.765 [DEBUG] [Thread-69809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:48:30.805 [DEBUG] [Thread-69809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:48:30.805 [DEBUG] [Thread-69809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:48:30.808 [DEBUG] [Thread-69809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:48:30.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:48:30.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:48:30.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:48:30.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:48:30.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:48:30.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:48:30.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:48:30.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:48:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:48:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.449748 -999.00  +20.40  28.62     24   -0.30 1 1 1 1 1   888    0 26.81 238.20 ----- 35.9 28.6 349.2 59.8 25.3 -25.6 24.6 -25.9 24.5 -21.7 25.1 -23.2
2025-12-12T12:48:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:48:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:48:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.449748
2025-12-12T12:48:30.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:48:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:48:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:48:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:48:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:48:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:48:07', tmtdew=25.27, humidity=17.88, cloud=0.0, wind=30.98, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:47:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:48:30.835 [DEBUG] [Thread-69809] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:48:30.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:48:30.930 [DEBUG] [Thread-69812] [transport.py] [_log()] starting thread (client mode): 0xf81c2f80
2025-12-12T12:48:30.931 [DEBUG] [Thread-69812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:48:30.945 [DEBUG] [Thread-69812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:48:30.945 [INFO] [Thread-69812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:48:30.953 [DEBUG] [Thread-69812] [transport.py] [_log()] client lang: <none>
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] server lang: <none>
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] kex follows: False
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] Compression: none
2025-12-12T12:48:30.954 [DEBUG] [Thread-69812] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:48:31.011 [DEBUG] [Thread-69812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:48:31.011 [DEBUG] [Thread-69812] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:48:31.011 [DEBUG] [Thread-69812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:48:31.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:48:31.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:48:31.068 [DEBUG] [Thread-69812] [transport.py] [_log()] userauth is OK
2025-12-12T12:48:31.068 [DEBUG] [Thread-69812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:48:31.068 [DEBUG] [Thread-69812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:48:31.068 [DEBUG] [Thread-69812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:48:31.069 [DEBUG] [Thread-69812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:48:31.088 [INFO] [Thread-69812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:48:31.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:48:31.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:48:31.929 [DEBUG] [Thread-69812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:48:31.929 [DEBUG] [Thread-69812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:48:31.978 [DEBUG] [Thread-69812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:48:31.979 [DEBUG] [Thread-69812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:48:31.990 [DEBUG] [Thread-69812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:48:32.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:48:32.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:48:32.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:48:32.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:48:32.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:48:32.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:48:32.036 [DEBUG] [Thread-69812] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:48:38.450 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:48:38.451 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:48:40.034 [DEBUG] [Thread-69814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:48:42.669 [DEBUG] [Thread-69815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:48:55.078 [DEBUG] [Thread-69816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:49:02.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:49:02.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:49:02.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 48, 39), 24.94, 18.36, 0.0, 36.33, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:49:02.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:48:39
2025-12-12T12:49:02.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:49:03.014 [DEBUG] [Thread-69817] [transport.py] [_log()] starting thread (client mode): 0xf57036d0
2025-12-12T12:49:03.014 [DEBUG] [Thread-69817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:49:03.035 [DEBUG] [Thread-69817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:49:03.035 [INFO] [Thread-69817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] client lang: <none>
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] server lang: <none>
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] kex follows: False
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] Compression: none
2025-12-12T12:49:03.037 [DEBUG] [Thread-69817] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:49:03.046 [DEBUG] [Thread-69817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:49:03.046 [DEBUG] [Thread-69817] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:49:03.046 [DEBUG] [Thread-69817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:49:03.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:49:03.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:49:03.048 [DEBUG] [Thread-69817] [transport.py] [_log()] userauth is OK
2025-12-12T12:49:03.048 [DEBUG] [Thread-69817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:49:03.048 [DEBUG] [Thread-69817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:49:03.049 [DEBUG] [Thread-69817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:49:03.049 [DEBUG] [Thread-69817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:49:03.071 [INFO] [Thread-69817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:49:03.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:49:03.706 [DEBUG] [Thread-69817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:49:03.707 [DEBUG] [Thread-69817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:49:03.707 [DEBUG] [Thread-69817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:49:03.748 [DEBUG] [Thread-69817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:49:03.748 [DEBUG] [Thread-69817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:49:03.751 [DEBUG] [Thread-69817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:49:03.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:49:03.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:49:03.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:49:03.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:49:03.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:49:03.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:49:03.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:49:03.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:49:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:49:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.450095 -999.00  +20.60  21.74     24   -0.30 1 1 1 1 1   888    0 26.35 236.73 ----- 22.7 21.7 348.4 50.6 25.3 -24.7 24.6 -24.3 24.6 -22.1 25.1 -22.3
2025-12-12T12:49:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:49:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:49:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.450095
2025-12-12T12:49:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:49:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:49:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:49:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:49:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:49:03.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:48:39', tmtdew=24.94, humidity=18.36, cloud=0.0, wind=36.33, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:48:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:49:03.779 [DEBUG] [Thread-69817] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:49:03.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:49:03.873 [DEBUG] [Thread-69820] [transport.py] [_log()] starting thread (client mode): 0xf5703430
2025-12-12T12:49:03.873 [DEBUG] [Thread-69820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:49:03.887 [DEBUG] [Thread-69820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:49:03.887 [INFO] [Thread-69820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:49:03.895 [DEBUG] [Thread-69820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:49:03.895 [DEBUG] [Thread-69820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:49:03.895 [DEBUG] [Thread-69820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:49:03.895 [DEBUG] [Thread-69820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:03.895 [DEBUG] [Thread-69820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:03.895 [DEBUG] [Thread-69820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] client lang: <none>
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] server lang: <none>
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] kex follows: False
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:49:03.896 [DEBUG] [Thread-69820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:49:03.897 [DEBUG] [Thread-69820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:49:03.897 [DEBUG] [Thread-69820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:49:03.897 [DEBUG] [Thread-69820] [transport.py] [_log()] Compression: none
2025-12-12T12:49:03.897 [DEBUG] [Thread-69820] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:49:03.954 [DEBUG] [Thread-69820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:49:03.955 [DEBUG] [Thread-69820] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:49:03.955 [DEBUG] [Thread-69820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:49:03.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:49:03.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:49:04.011 [DEBUG] [Thread-69820] [transport.py] [_log()] userauth is OK
2025-12-12T12:49:04.011 [DEBUG] [Thread-69820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:49:04.011 [DEBUG] [Thread-69820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:49:04.011 [DEBUG] [Thread-69820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:49:04.011 [DEBUG] [Thread-69820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:49:04.031 [INFO] [Thread-69820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:49:04.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:49:04.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:49:04.929 [DEBUG] [Thread-69820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:49:04.929 [DEBUG] [Thread-69820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:49:04.979 [DEBUG] [Thread-69820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:49:04.979 [DEBUG] [Thread-69820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:49:04.988 [DEBUG] [Thread-69820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:49:04.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:49:04.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:49:05.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:49:05.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:49:05.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:49:05.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:49:05.024 [DEBUG] [Thread-69820] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:49:10.111 [DEBUG] [Thread-69822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:25.154 [DEBUG] [Thread-69823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:49:35.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:49:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:49:35.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 49, 11), 25.32, 17.93, 0.0, 40.65, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:49:35.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:49:11
2025-12-12T12:49:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:49:36.005 [DEBUG] [Thread-69824] [transport.py] [_log()] starting thread (client mode): 0xf57003a0
2025-12-12T12:49:36.005 [DEBUG] [Thread-69824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:49:36.023 [DEBUG] [Thread-69824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:49:36.024 [INFO] [Thread-69824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] client lang: <none>
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] server lang: <none>
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] kex follows: False
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] Compression: none
2025-12-12T12:49:36.025 [DEBUG] [Thread-69824] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:49:36.036 [DEBUG] [Thread-69824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:49:36.036 [DEBUG] [Thread-69824] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:49:36.037 [DEBUG] [Thread-69824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:49:36.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:49:36.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:49:36.038 [DEBUG] [Thread-69824] [transport.py] [_log()] userauth is OK
2025-12-12T12:49:36.038 [DEBUG] [Thread-69824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:49:36.038 [DEBUG] [Thread-69824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:49:36.038 [DEBUG] [Thread-69824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:49:36.039 [DEBUG] [Thread-69824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:49:36.056 [INFO] [Thread-69824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:49:36.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:49:36.699 [DEBUG] [Thread-69824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:49:36.699 [DEBUG] [Thread-69824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:49:36.699 [DEBUG] [Thread-69824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:49:36.740 [DEBUG] [Thread-69824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:49:36.740 [DEBUG] [Thread-69824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:49:36.743 [DEBUG] [Thread-69824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:49:36.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:49:36.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:49:36.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:49:36.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:49:36.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:49:36.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:49:36.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:49:36.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:49:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:49:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.450789 -999.00  +21.50  44.47     22   -0.70 1 1 2 1 1   888    0 26.94 238.12 ----- 25.2 44.5 326.4 53.9 25.5 -24.6 24.8 -24.3 24.9 -21.9 25.4 -21.8
2025-12-12T12:49:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:49:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:49:36.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.450789
2025-12-12T12:49:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:49:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:49:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:49:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:49:36.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:49:36.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:49:11', tmtdew=25.32, humidity=17.93, cloud=0.0, wind=40.65, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:49:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:49:36.770 [DEBUG] [Thread-69824] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:49:36.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:49:36.867 [DEBUG] [Thread-69827] [transport.py] [_log()] starting thread (client mode): 0xf81e4e20
2025-12-12T12:49:36.867 [DEBUG] [Thread-69827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:49:36.882 [DEBUG] [Thread-69827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:49:36.882 [INFO] [Thread-69827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:49:36.890 [DEBUG] [Thread-69827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] client lang: <none>
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] server lang: <none>
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] kex follows: False
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] Compression: none
2025-12-12T12:49:36.891 [DEBUG] [Thread-69827] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:49:36.946 [DEBUG] [Thread-69827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:49:36.947 [DEBUG] [Thread-69827] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:49:36.947 [DEBUG] [Thread-69827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:49:36.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:49:36.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:49:37.003 [DEBUG] [Thread-69827] [transport.py] [_log()] userauth is OK
2025-12-12T12:49:37.003 [DEBUG] [Thread-69827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:49:37.003 [DEBUG] [Thread-69827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:49:37.003 [DEBUG] [Thread-69827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:49:37.004 [DEBUG] [Thread-69827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:49:37.022 [INFO] [Thread-69827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:49:37.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:49:37.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:49:37.882 [DEBUG] [Thread-69827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:49:37.882 [DEBUG] [Thread-69827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:49:37.930 [DEBUG] [Thread-69827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:49:37.930 [DEBUG] [Thread-69827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:49:37.939 [DEBUG] [Thread-69827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:49:37.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:49:37.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:49:37.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:49:37.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:49:37.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:49:37.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:49:37.974 [DEBUG] [Thread-69827] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:49:38.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:38.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:40.183 [DEBUG] [Thread-69829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:42.722 [DEBUG] [Thread-69830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:49:55.226 [DEBUG] [Thread-69831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:07.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:50:07.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:50:07.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:50:08.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 49, 43), 26.41, 16.48, 0.0, 44.85, 21.9, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:50:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:49:43
2025-12-12T12:50:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:50:08.957 [DEBUG] [Thread-69832] [transport.py] [_log()] starting thread (client mode): 0xf5700940
2025-12-12T12:50:08.957 [DEBUG] [Thread-69832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:50:08.979 [DEBUG] [Thread-69832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:50:08.979 [INFO] [Thread-69832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] client lang: <none>
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] server lang: <none>
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] kex follows: False
2025-12-12T12:50:08.982 [DEBUG] [Thread-69832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:50:08.983 [DEBUG] [Thread-69832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:50:08.983 [DEBUG] [Thread-69832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:50:08.983 [DEBUG] [Thread-69832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:50:08.983 [DEBUG] [Thread-69832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:50:08.983 [DEBUG] [Thread-69832] [transport.py] [_log()] Compression: none
2025-12-12T12:50:08.983 [DEBUG] [Thread-69832] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:50:08.999 [DEBUG] [Thread-69832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:50:08.999 [DEBUG] [Thread-69832] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:50:09.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:50:09.000 [DEBUG] [Thread-69832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:50:09.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:50:09.002 [DEBUG] [Thread-69832] [transport.py] [_log()] userauth is OK
2025-12-12T12:50:09.002 [DEBUG] [Thread-69832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:50:09.002 [DEBUG] [Thread-69832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:50:09.003 [DEBUG] [Thread-69832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:50:09.003 [DEBUG] [Thread-69832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:50:09.030 [INFO] [Thread-69832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:50:09.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:50:09.782 [DEBUG] [Thread-69832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:50:09.782 [DEBUG] [Thread-69832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:50:09.783 [DEBUG] [Thread-69832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:50:09.823 [DEBUG] [Thread-69832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:50:09.823 [DEBUG] [Thread-69832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:50:09.826 [DEBUG] [Thread-69832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:50:09.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:50:09.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:50:09.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:50:09.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:50:09.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:50:09.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:50:09.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:50:09.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:50:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:50:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.451137 -999.00  +21.90  40.09     21   -0.70 1 2 2 1 1   888    0 28.01 261.49 ----- 44.2 40.1 335.2 59.3 25.6 -24.0 24.9 -24.5 24.9 -21.4 25.5 -22.2
2025-12-12T12:50:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:50:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:50:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.451137
2025-12-12T12:50:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:50:09.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:50:09.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:50:09.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:50:09.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:50:09.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:49:43', tmtdew=26.41, humidity=16.48, cloud=0.0, wind=44.85, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:49:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:50:09.852 [DEBUG] [Thread-69832] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:50:09.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:50:09.956 [DEBUG] [Thread-69835] [transport.py] [_log()] starting thread (client mode): 0xf5700640
2025-12-12T12:50:09.956 [DEBUG] [Thread-69835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:50:09.970 [DEBUG] [Thread-69835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:50:09.971 [INFO] [Thread-69835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:50:09.978 [DEBUG] [Thread-69835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:50:09.978 [DEBUG] [Thread-69835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:50:09.978 [DEBUG] [Thread-69835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] client lang: <none>
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] server lang: <none>
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] kex follows: False
2025-12-12T12:50:09.979 [DEBUG] [Thread-69835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:50:09.980 [DEBUG] [Thread-69835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:50:09.980 [DEBUG] [Thread-69835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:50:09.980 [DEBUG] [Thread-69835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:50:09.980 [DEBUG] [Thread-69835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:50:09.980 [DEBUG] [Thread-69835] [transport.py] [_log()] Compression: none
2025-12-12T12:50:09.980 [DEBUG] [Thread-69835] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:50:10.035 [DEBUG] [Thread-69835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:50:10.036 [DEBUG] [Thread-69835] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:50:10.036 [DEBUG] [Thread-69835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:50:10.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:50:10.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:50:10.092 [DEBUG] [Thread-69835] [transport.py] [_log()] userauth is OK
2025-12-12T12:50:10.092 [DEBUG] [Thread-69835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:50:10.092 [DEBUG] [Thread-69835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:50:10.092 [DEBUG] [Thread-69835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:50:10.092 [DEBUG] [Thread-69835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:50:10.115 [INFO] [Thread-69835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:50:10.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:50:10.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:50:10.257 [DEBUG] [Thread-69837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:10.965 [DEBUG] [Thread-69835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:50:10.965 [DEBUG] [Thread-69835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:50:11.014 [DEBUG] [Thread-69835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:50:11.014 [DEBUG] [Thread-69835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:50:11.023 [DEBUG] [Thread-69835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:50:11.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:50:11.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:50:11.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:50:11.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:50:11.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:50:11.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:50:11.058 [DEBUG] [Thread-69835] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:50:25.299 [DEBUG] [Thread-69838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:38.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:38.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:40.327 [DEBUG] [Thread-69839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:41.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:50:41.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:50:41.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:50:41.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 50, 15), 26.69, 16.13, 0.0, 46.46, 21.8, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:50:41.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:50:15
2025-12-12T12:50:41.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:50:42.047 [DEBUG] [Thread-69840] [transport.py] [_log()] starting thread (client mode): 0xf81c1600
2025-12-12T12:50:42.047 [DEBUG] [Thread-69840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:50:42.060 [DEBUG] [Thread-69840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:50:42.060 [INFO] [Thread-69840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] client lang: <none>
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] server lang: <none>
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] kex follows: False
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] Compression: none
2025-12-12T12:50:42.061 [DEBUG] [Thread-69840] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:50:42.068 [DEBUG] [Thread-69840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:50:42.068 [DEBUG] [Thread-69840] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:50:42.069 [DEBUG] [Thread-69840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:50:42.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:50:42.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:50:42.070 [DEBUG] [Thread-69840] [transport.py] [_log()] userauth is OK
2025-12-12T12:50:42.070 [DEBUG] [Thread-69840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:50:42.070 [DEBUG] [Thread-69840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:50:42.070 [DEBUG] [Thread-69840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:50:42.070 [DEBUG] [Thread-69840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:50:42.082 [INFO] [Thread-69840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:50:42.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:50:42.782 [DEBUG] [Thread-69842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:50:42.793 [DEBUG] [Thread-69840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:50:42.793 [DEBUG] [Thread-69840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:50:42.793 [DEBUG] [Thread-69840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:50:42.836 [DEBUG] [Thread-69840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:50:42.836 [DEBUG] [Thread-69840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:50:42.839 [DEBUG] [Thread-69840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:50:42.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:50:42.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:50:42.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:50:42.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:50:42.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:50:42.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:50:42.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:50:42.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:50:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:50:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.451484 -999.00  +22.60  42.47     21   -0.60 1 2 2 1 1   888    0 26.94 236.27 ----- 48.8 42.5 310.8 51.1 25.8 -24.2 25.1 -23.7 25.1 -20.9 25.7 -21.6
2025-12-12T12:50:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:50:42.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:50:42.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.451484
2025-12-12T12:50:42.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:50:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:50:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:50:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:50:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:50:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:50:15', tmtdew=26.69, humidity=16.13, cloud=0.0, wind=46.46, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:50:08.218', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:50:42.864 [DEBUG] [Thread-69840] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:50:42.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:50:42.962 [DEBUG] [Thread-69844] [transport.py] [_log()] starting thread (client mode): 0xf57013f0
2025-12-12T12:50:42.962 [DEBUG] [Thread-69844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:50:42.977 [DEBUG] [Thread-69844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:50:42.977 [INFO] [Thread-69844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] client lang: <none>
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] server lang: <none>
2025-12-12T12:50:42.985 [DEBUG] [Thread-69844] [transport.py] [_log()] kex follows: False
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] Compression: none
2025-12-12T12:50:42.986 [DEBUG] [Thread-69844] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:50:43.043 [DEBUG] [Thread-69844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:50:43.043 [DEBUG] [Thread-69844] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:50:43.043 [DEBUG] [Thread-69844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:50:43.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:50:43.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:50:43.099 [DEBUG] [Thread-69844] [transport.py] [_log()] userauth is OK
2025-12-12T12:50:43.099 [DEBUG] [Thread-69844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:50:43.099 [DEBUG] [Thread-69844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:50:43.099 [DEBUG] [Thread-69844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:50:43.099 [DEBUG] [Thread-69844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:50:43.118 [INFO] [Thread-69844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:50:43.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:50:43.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:50:43.980 [DEBUG] [Thread-69844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:50:43.980 [DEBUG] [Thread-69844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:50:44.027 [DEBUG] [Thread-69844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:50:44.028 [DEBUG] [Thread-69844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:50:44.036 [DEBUG] [Thread-69844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:50:44.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:50:44.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:50:44.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:50:44.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:50:44.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:50:44.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:50:44.071 [DEBUG] [Thread-69844] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:50:55.355 [DEBUG] [Thread-69846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:10.412 [DEBUG] [Thread-69847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:14.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:51:14.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:51:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:51:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 50, 47), 26.95, 15.82, 0.0, 45.71, 21.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:51:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:50:47
2025-12-12T12:51:14.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:51:15.076 [DEBUG] [Thread-69848] [transport.py] [_log()] starting thread (client mode): 0xf57012a0
2025-12-12T12:51:15.076 [DEBUG] [Thread-69848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:51:15.096 [DEBUG] [Thread-69848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:51:15.096 [INFO] [Thread-69848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:15.099 [DEBUG] [Thread-69848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] client lang: <none>
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] server lang: <none>
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] kex follows: False
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] Compression: none
2025-12-12T12:51:15.100 [DEBUG] [Thread-69848] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:51:15.116 [DEBUG] [Thread-69848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:51:15.116 [DEBUG] [Thread-69848] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:51:15.117 [DEBUG] [Thread-69848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:51:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:51:15.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:51:15.119 [DEBUG] [Thread-69848] [transport.py] [_log()] userauth is OK
2025-12-12T12:51:15.119 [DEBUG] [Thread-69848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:51:15.119 [DEBUG] [Thread-69848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:51:15.119 [DEBUG] [Thread-69848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:51:15.119 [DEBUG] [Thread-69848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:51:15.137 [INFO] [Thread-69848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:51:15.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:51:15.772 [DEBUG] [Thread-69848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:51:15.772 [DEBUG] [Thread-69848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:51:15.772 [DEBUG] [Thread-69848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:51:15.813 [DEBUG] [Thread-69848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:51:15.813 [DEBUG] [Thread-69848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:51:15.815 [DEBUG] [Thread-69848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:51:15.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:51:15.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:51:15.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:51:15.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:51:15.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:51:15.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:51:15.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.451831 -999.00  +22.70  30.93     20   -1.00 1 2 2 1 1   888    0 27.98 259.83 ----- 44.3 30.9 330.8 59.0 25.9 -23.5 25.2 -23.7 25.3 -21.5 25.8 -22.2
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.451831
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:51:15.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:51:15.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:51:15.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:51:15.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T12:51:15.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:50:47', tmtdew=26.95, humidity=15.82, cloud=0.0, wind=45.71, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:50:38.198', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:51:15.834 [DEBUG] [Thread-69848] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:51:15.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:51:15.919 [DEBUG] [Thread-69851] [transport.py] [_log()] starting thread (client mode): 0xf81c0fd0
2025-12-12T12:51:15.919 [DEBUG] [Thread-69851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:51:15.936 [DEBUG] [Thread-69851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:51:15.936 [INFO] [Thread-69851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] client lang: <none>
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] server lang: <none>
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] kex follows: False
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] Compression: none
2025-12-12T12:51:15.944 [DEBUG] [Thread-69851] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:51:16.002 [DEBUG] [Thread-69851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:51:16.002 [DEBUG] [Thread-69851] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:51:16.002 [DEBUG] [Thread-69851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:51:16.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:51:16.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:51:16.059 [DEBUG] [Thread-69851] [transport.py] [_log()] userauth is OK
2025-12-12T12:51:16.059 [DEBUG] [Thread-69851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:51:16.059 [DEBUG] [Thread-69851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:51:16.059 [DEBUG] [Thread-69851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:51:16.059 [DEBUG] [Thread-69851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:51:16.077 [INFO] [Thread-69851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:51:16.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:51:16.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:51:16.954 [DEBUG] [Thread-69851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:51:16.954 [DEBUG] [Thread-69851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:51:17.001 [DEBUG] [Thread-69851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:51:17.001 [DEBUG] [Thread-69851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:51:17.010 [DEBUG] [Thread-69851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:51:17.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:51:17.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:51:17.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:51:17.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:51:17.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:51:17.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:51:17.042 [DEBUG] [Thread-69851] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:51:25.442 [DEBUG] [Thread-69853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:38.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:38.886 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:40.486 [DEBUG] [Thread-69854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:42.847 [DEBUG] [Thread-69855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:51:47.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:51:47.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:51:47.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:51:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 51, 19), 26.75, 16.0, 0.0, 48.01, 21.75, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:51:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:51:19
2025-12-12T12:51:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:51:48.047 [DEBUG] [Thread-69856] [transport.py] [_log()] starting thread (client mode): 0xf81e7640
2025-12-12T12:51:48.048 [DEBUG] [Thread-69856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:51:48.069 [DEBUG] [Thread-69856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:51:48.069 [INFO] [Thread-69856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:51:48.073 [DEBUG] [Thread-69856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:51:48.073 [DEBUG] [Thread-69856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:51:48.073 [DEBUG] [Thread-69856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:51:48.073 [DEBUG] [Thread-69856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:48.073 [DEBUG] [Thread-69856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:48.073 [DEBUG] [Thread-69856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] client lang: <none>
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] server lang: <none>
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] kex follows: False
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] Compression: none
2025-12-12T12:51:48.074 [DEBUG] [Thread-69856] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:51:48.084 [DEBUG] [Thread-69856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:51:48.085 [DEBUG] [Thread-69856] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:51:48.085 [DEBUG] [Thread-69856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:51:48.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:51:48.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:51:48.087 [DEBUG] [Thread-69856] [transport.py] [_log()] userauth is OK
2025-12-12T12:51:48.087 [DEBUG] [Thread-69856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:51:48.088 [DEBUG] [Thread-69856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:51:48.088 [DEBUG] [Thread-69856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:51:48.088 [DEBUG] [Thread-69856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:51:48.107 [INFO] [Thread-69856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:51:48.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:51:48.756 [DEBUG] [Thread-69856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:51:48.756 [DEBUG] [Thread-69856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:51:48.757 [DEBUG] [Thread-69856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:51:48.798 [DEBUG] [Thread-69856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:51:48.798 [DEBUG] [Thread-69856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:51:48.801 [DEBUG] [Thread-69856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:51:48.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:51:48.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:51:48.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:51:48.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:51:48.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:51:48.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:51:48.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:51:48.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:51:48.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:51:48.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.452179 -999.00  +21.80  40.02     21   -0.80 1 1 2 1 1   888    0 29.81 319.02 ----- 42.4 40.0 324.5 54.6 26.1 -25.5 25.4 -25.6 25.2 -24.0 26.0 -23.0
2025-12-12T12:51:48.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:51:48.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:51:48.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.452179
2025-12-12T12:51:48.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:51:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:51:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:51:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:51:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:51:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:51:19', tmtdew=26.75, humidity=16.0, cloud=0.0, wind=48.01, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:51:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:51:48.826 [DEBUG] [Thread-69856] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:51:48.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:51:48.925 [DEBUG] [Thread-69859] [transport.py] [_log()] starting thread (client mode): 0xf813cb50
2025-12-12T12:51:48.925 [DEBUG] [Thread-69859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:51:48.939 [DEBUG] [Thread-69859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:51:48.939 [INFO] [Thread-69859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:51:48.947 [DEBUG] [Thread-69859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] client lang: <none>
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] server lang: <none>
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] kex follows: False
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] Compression: none
2025-12-12T12:51:48.948 [DEBUG] [Thread-69859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:51:49.007 [DEBUG] [Thread-69859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:51:49.007 [DEBUG] [Thread-69859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:51:49.008 [DEBUG] [Thread-69859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:51:49.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:51:49.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:51:49.063 [DEBUG] [Thread-69859] [transport.py] [_log()] userauth is OK
2025-12-12T12:51:49.063 [DEBUG] [Thread-69859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:51:49.064 [DEBUG] [Thread-69859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:51:49.064 [DEBUG] [Thread-69859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:51:49.064 [DEBUG] [Thread-69859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:51:49.086 [INFO] [Thread-69859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:51:49.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:51:49.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:51:49.956 [DEBUG] [Thread-69859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:51:49.956 [DEBUG] [Thread-69859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:51:50.004 [DEBUG] [Thread-69859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:51:50.004 [DEBUG] [Thread-69859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:51:50.013 [DEBUG] [Thread-69859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:51:50.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:51:50.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:51:50.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:51:50.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:51:50.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:51:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:51:50.048 [DEBUG] [Thread-69859] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:51:55.514 [DEBUG] [Thread-69861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:10.547 [DEBUG] [Thread-69862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:20.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:52:20.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:52:20.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:52:20.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 51, 51), 26.44, 16.51, 0.0, 37.81, 21.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:52:20.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:51:51
2025-12-12T12:52:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:52:21.035 [DEBUG] [Thread-69863] [transport.py] [_log()] starting thread (client mode): 0xf813f700
2025-12-12T12:52:21.035 [DEBUG] [Thread-69863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:52:21.055 [DEBUG] [Thread-69863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:52:21.055 [INFO] [Thread-69863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] client lang: <none>
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] server lang: <none>
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] kex follows: False
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] Compression: none
2025-12-12T12:52:21.058 [DEBUG] [Thread-69863] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:52:21.076 [DEBUG] [Thread-69863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:52:21.076 [DEBUG] [Thread-69863] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:52:21.077 [DEBUG] [Thread-69863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:52:21.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:52:21.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:52:21.120 [DEBUG] [Thread-69863] [transport.py] [_log()] userauth is OK
2025-12-12T12:52:21.120 [DEBUG] [Thread-69863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:52:21.121 [DEBUG] [Thread-69863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:52:21.121 [DEBUG] [Thread-69863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:52:21.121 [DEBUG] [Thread-69863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:52:21.151 [INFO] [Thread-69863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:52:21.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:52:21.807 [DEBUG] [Thread-69863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:52:21.808 [DEBUG] [Thread-69863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:52:21.808 [DEBUG] [Thread-69863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:52:21.849 [DEBUG] [Thread-69863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:52:21.849 [DEBUG] [Thread-69863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:52:21.852 [DEBUG] [Thread-69863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:52:21.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:52:21.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:52:21.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:52:21.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:52:21.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:52:21.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:52:21.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:52:21.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:52:21.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:52:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.452525 -999.00  +21.70  45.63     22   -0.70 1 1 2 1 1   888    0 29.82 319.33 ----- 33.7 45.6 309.6 53.0 26.0 -25.0 25.2 -25.6 25.1 -24.5 25.9 -23.1
2025-12-12T12:52:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:52:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:52:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.452525
2025-12-12T12:52:21.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:52:21.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:52:21.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:52:21.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:52:21.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:52:21.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:51:51', tmtdew=26.44, humidity=16.51, cloud=0.0, wind=37.81, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:51:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:52:21.881 [DEBUG] [Thread-69863] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:52:21.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:52:21.982 [DEBUG] [Thread-69866] [transport.py] [_log()] starting thread (client mode): 0xf57c97b0
2025-12-12T12:52:21.982 [DEBUG] [Thread-69866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:52:21.997 [DEBUG] [Thread-69866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:52:21.997 [INFO] [Thread-69866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:22.005 [DEBUG] [Thread-69866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] client lang: <none>
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] server lang: <none>
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] kex follows: False
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:52:22.006 [DEBUG] [Thread-69866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:52:22.007 [DEBUG] [Thread-69866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:52:22.007 [DEBUG] [Thread-69866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:52:22.007 [DEBUG] [Thread-69866] [transport.py] [_log()] Compression: none
2025-12-12T12:52:22.007 [DEBUG] [Thread-69866] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:52:22.063 [DEBUG] [Thread-69866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:52:22.063 [DEBUG] [Thread-69866] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:52:22.063 [DEBUG] [Thread-69866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:52:22.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:52:22.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:52:22.119 [DEBUG] [Thread-69866] [transport.py] [_log()] userauth is OK
2025-12-12T12:52:22.120 [DEBUG] [Thread-69866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:52:22.120 [DEBUG] [Thread-69866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:52:22.120 [DEBUG] [Thread-69866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:52:22.120 [DEBUG] [Thread-69866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:52:22.143 [INFO] [Thread-69866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:52:22.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:52:22.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:52:22.985 [DEBUG] [Thread-69866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:52:22.985 [DEBUG] [Thread-69866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:52:23.034 [DEBUG] [Thread-69866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:52:23.034 [DEBUG] [Thread-69866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:52:23.043 [DEBUG] [Thread-69866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:52:23.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:52:23.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:52:23.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:52:23.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:52:23.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:52:23.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:52:23.076 [DEBUG] [Thread-69866] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:52:25.572 [DEBUG] [Thread-69868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:39.027 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:39.028 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:40.605 [DEBUG] [Thread-69869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:42.908 [DEBUG] [Thread-69870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:52:53.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:52:53.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:52:53.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 52, 23), 26.55, 16.4, 0.0, 42.52, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:52:53.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:52:23
2025-12-12T12:52:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:52:54.077 [DEBUG] [Thread-69871] [transport.py] [_log()] starting thread (client mode): 0xf81e5f60
2025-12-12T12:52:54.077 [DEBUG] [Thread-69871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:52:54.093 [DEBUG] [Thread-69871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:52:54.093 [INFO] [Thread-69871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:52:54.096 [DEBUG] [Thread-69871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:52:54.096 [DEBUG] [Thread-69871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:52:54.096 [DEBUG] [Thread-69871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:52:54.096 [DEBUG] [Thread-69871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] client lang: <none>
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] server lang: <none>
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] kex follows: False
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] Compression: none
2025-12-12T12:52:54.097 [DEBUG] [Thread-69871] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:52:54.115 [DEBUG] [Thread-69871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:52:54.116 [DEBUG] [Thread-69871] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:52:54.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:52:54.117 [DEBUG] [Thread-69871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:52:54.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:52:54.119 [DEBUG] [Thread-69871] [transport.py] [_log()] userauth is OK
2025-12-12T12:52:54.119 [DEBUG] [Thread-69871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:52:54.119 [DEBUG] [Thread-69871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:52:54.120 [DEBUG] [Thread-69871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:52:54.120 [DEBUG] [Thread-69871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:52:54.144 [INFO] [Thread-69871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:52:54.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:52:54.752 [DEBUG] [Thread-69871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:52:54.753 [DEBUG] [Thread-69871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:52:54.753 [DEBUG] [Thread-69871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:52:54.794 [DEBUG] [Thread-69871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:52:54.794 [DEBUG] [Thread-69871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:52:54.797 [DEBUG] [Thread-69871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:52:54.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:52:54.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:52:54.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:52:54.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:52:54.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:52:54.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:52:54.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:52:54.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:52:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:52:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.452873 -999.00  +22.50  32.16     21   -0.30 1 1 2 1 1   888    0 30.59 335.36 ----- 31.8 32.2 312.4 46.4 26.0 -25.0 25.3 -25.0 25.2 -22.7 25.9 -22.7
2025-12-12T12:52:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:52:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:52:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.452873
2025-12-12T12:52:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:52:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:52:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:52:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:52:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:52:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:52:23', tmtdew=26.55, humidity=16.4, cloud=0.0, wind=42.52, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:52:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:52:54.823 [DEBUG] [Thread-69871] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:52:54.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:52:54.920 [DEBUG] [Thread-69874] [transport.py] [_log()] starting thread (client mode): 0xf81e4400
2025-12-12T12:52:54.921 [DEBUG] [Thread-69874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:52:54.935 [DEBUG] [Thread-69874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:52:54.935 [INFO] [Thread-69874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:52:54.943 [DEBUG] [Thread-69874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:52:54.943 [DEBUG] [Thread-69874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:52:54.943 [DEBUG] [Thread-69874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:52:54.943 [DEBUG] [Thread-69874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:54.943 [DEBUG] [Thread-69874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] client lang: <none>
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] server lang: <none>
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] kex follows: False
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] Compression: none
2025-12-12T12:52:54.944 [DEBUG] [Thread-69874] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:52:55.003 [DEBUG] [Thread-69874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:52:55.003 [DEBUG] [Thread-69874] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:52:55.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:52:55.004 [DEBUG] [Thread-69874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:52:55.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:52:55.059 [DEBUG] [Thread-69874] [transport.py] [_log()] userauth is OK
2025-12-12T12:52:55.059 [DEBUG] [Thread-69874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:52:55.059 [DEBUG] [Thread-69874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:52:55.060 [DEBUG] [Thread-69874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:52:55.060 [DEBUG] [Thread-69874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:52:55.078 [INFO] [Thread-69874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:52:55.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:52:55.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:52:55.634 [DEBUG] [Thread-69876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:52:55.908 [DEBUG] [Thread-69874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:52:55.908 [DEBUG] [Thread-69874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:52:55.955 [DEBUG] [Thread-69874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:52:55.955 [DEBUG] [Thread-69874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:52:55.963 [DEBUG] [Thread-69874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:52:55.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:52:55.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:52:55.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:52:55.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:52:55.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:52:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:52:55.997 [DEBUG] [Thread-69874] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:53:10.675 [DEBUG] [Thread-69877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:25.701 [DEBUG] [Thread-69878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:25.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:53:25.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:53:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:53:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 52, 55), 26.28, 16.95, 0.0, 46.67, 21.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:53:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:52:55
2025-12-12T12:53:26.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:53:26.970 [DEBUG] [Thread-69879] [transport.py] [_log()] starting thread (client mode): 0xf813efe0
2025-12-12T12:53:26.970 [DEBUG] [Thread-69879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:53:26.994 [DEBUG] [Thread-69879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:53:26.994 [INFO] [Thread-69879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] client lang: <none>
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] server lang: <none>
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] kex follows: False
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:53:26.997 [DEBUG] [Thread-69879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:53:26.998 [DEBUG] [Thread-69879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:53:26.998 [DEBUG] [Thread-69879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:53:26.998 [DEBUG] [Thread-69879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:53:26.998 [DEBUG] [Thread-69879] [transport.py] [_log()] Compression: none
2025-12-12T12:53:26.998 [DEBUG] [Thread-69879] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:53:27.015 [DEBUG] [Thread-69879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:53:27.016 [DEBUG] [Thread-69879] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:53:27.016 [DEBUG] [Thread-69879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:53:27.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:53:27.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:53:27.018 [DEBUG] [Thread-69879] [transport.py] [_log()] userauth is OK
2025-12-12T12:53:27.018 [DEBUG] [Thread-69879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:53:27.018 [DEBUG] [Thread-69879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:53:27.018 [DEBUG] [Thread-69879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:53:27.019 [DEBUG] [Thread-69879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:53:27.043 [INFO] [Thread-69879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:53:27.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:53:27.690 [DEBUG] [Thread-69879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:53:27.690 [DEBUG] [Thread-69879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:53:27.691 [DEBUG] [Thread-69879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:53:27.731 [DEBUG] [Thread-69879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:53:27.731 [DEBUG] [Thread-69879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:53:27.734 [DEBUG] [Thread-69879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:53:27.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:53:27.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:53:27.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:53:27.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:53:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:53:27.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:53:27.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:53:27.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:53:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:53:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.453220 -999.00  +22.60  38.49     21   -0.40 1 1 2 1 1   888    0 30.60 337.50 ----- 49.5 38.5 315.8 53.3 26.1 -24.7 25.5 -24.2 25.2 -25.1 26.1 -22.0
2025-12-12T12:53:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:53:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:53:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.453220
2025-12-12T12:53:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:53:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:53:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:53:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:53:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:53:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:52:55', tmtdew=26.28, humidity=16.95, cloud=0.0, wind=46.67, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:52:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:53:27.758 [DEBUG] [Thread-69879] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:53:27.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:53:27.858 [DEBUG] [Thread-69882] [transport.py] [_log()] starting thread (client mode): 0xf813dff0
2025-12-12T12:53:27.858 [DEBUG] [Thread-69882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:53:27.872 [DEBUG] [Thread-69882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:53:27.872 [INFO] [Thread-69882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] client lang: <none>
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] server lang: <none>
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] kex follows: False
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] Compression: none
2025-12-12T12:53:27.880 [DEBUG] [Thread-69882] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:53:27.937 [DEBUG] [Thread-69882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:53:27.937 [DEBUG] [Thread-69882] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:53:27.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:53:27.938 [DEBUG] [Thread-69882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:53:27.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:53:27.995 [DEBUG] [Thread-69882] [transport.py] [_log()] userauth is OK
2025-12-12T12:53:27.995 [DEBUG] [Thread-69882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:53:27.995 [DEBUG] [Thread-69882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:53:27.995 [DEBUG] [Thread-69882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:53:27.995 [DEBUG] [Thread-69882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:53:28.009 [INFO] [Thread-69882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:53:28.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:53:28.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:53:28.837 [DEBUG] [Thread-69882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:53:28.837 [DEBUG] [Thread-69882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:53:28.884 [DEBUG] [Thread-69882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:53:28.884 [DEBUG] [Thread-69882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:53:28.894 [DEBUG] [Thread-69882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:53:28.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:53:28.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:53:28.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:53:28.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:53:28.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:53:28.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:53:28.926 [DEBUG] [Thread-69882] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:53:39.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:39.170 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:40.729 [DEBUG] [Thread-69884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:42.977 [DEBUG] [Thread-69885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:55.765 [DEBUG] [Thread-69886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:53:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:53:58.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:53:58.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:53:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 53, 27), 26.31, 16.91, 0.0, 44.28, 21.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:53:59.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:53:27
2025-12-12T12:53:59.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:53:59.911 [DEBUG] [Thread-69887] [transport.py] [_log()] starting thread (client mode): 0xf813f4f0
2025-12-12T12:53:59.911 [DEBUG] [Thread-69887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:53:59.931 [DEBUG] [Thread-69887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:53:59.931 [INFO] [Thread-69887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] client lang: <none>
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] server lang: <none>
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] kex follows: False
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:53:59.932 [DEBUG] [Thread-69887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:53:59.933 [DEBUG] [Thread-69887] [transport.py] [_log()] Compression: none
2025-12-12T12:53:59.933 [DEBUG] [Thread-69887] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:53:59.940 [DEBUG] [Thread-69887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:53:59.941 [DEBUG] [Thread-69887] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:53:59.941 [DEBUG] [Thread-69887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:53:59.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:53:59.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:53:59.946 [DEBUG] [Thread-69887] [transport.py] [_log()] userauth is OK
2025-12-12T12:53:59.946 [DEBUG] [Thread-69887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:53:59.947 [DEBUG] [Thread-69887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:53:59.947 [DEBUG] [Thread-69887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:53:59.947 [DEBUG] [Thread-69887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:53:59.962 [INFO] [Thread-69887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:53:59.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:54:00.541 [DEBUG] [Thread-69887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:54:00.541 [DEBUG] [Thread-69887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:54:00.541 [DEBUG] [Thread-69887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:54:00.582 [DEBUG] [Thread-69887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:54:00.582 [DEBUG] [Thread-69887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:54:00.584 [DEBUG] [Thread-69887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:54:00.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:54:00.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:54:00.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:54:00.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:54:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:54:00.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:54:00.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.453915 -999.00  +21.70  49.05     21   -1.00 1 1 2 1 1   888    0 31.26 355.32 ----- 46.5 49.0 307.4 60.1 26.3 -24.1 25.6 -24.0 25.3 -27.4 26.1 -22.1
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.453915
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:54:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:53:27', tmtdew=26.31, humidity=16.91, cloud=0.0, wind=44.28, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:53:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:54:00.601 [DEBUG] [Thread-69887] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:54:00.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:54:00.684 [DEBUG] [Thread-69890] [transport.py] [_log()] starting thread (client mode): 0xf5700bb0
2025-12-12T12:54:00.684 [DEBUG] [Thread-69890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:54:00.699 [DEBUG] [Thread-69890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:54:00.699 [INFO] [Thread-69890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] client lang: <none>
2025-12-12T12:54:00.706 [DEBUG] [Thread-69890] [transport.py] [_log()] server lang: <none>
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] kex follows: False
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] Compression: none
2025-12-12T12:54:00.707 [DEBUG] [Thread-69890] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:54:00.761 [DEBUG] [Thread-69890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:54:00.762 [DEBUG] [Thread-69890] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:54:00.762 [DEBUG] [Thread-69890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:54:00.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:54:00.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:54:00.819 [DEBUG] [Thread-69890] [transport.py] [_log()] userauth is OK
2025-12-12T12:54:00.819 [DEBUG] [Thread-69890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:54:00.819 [DEBUG] [Thread-69890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:54:00.819 [DEBUG] [Thread-69890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:54:00.819 [DEBUG] [Thread-69890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:54:00.836 [INFO] [Thread-69890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:54:00.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:54:00.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:54:01.687 [DEBUG] [Thread-69890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:54:01.687 [DEBUG] [Thread-69890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:54:01.735 [DEBUG] [Thread-69890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:54:01.735 [DEBUG] [Thread-69890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:54:01.744 [DEBUG] [Thread-69890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:54:01.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:54:01.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:54:01.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:54:01.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:54:01.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:54:01.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:54:01.778 [DEBUG] [Thread-69890] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:54:10.792 [DEBUG] [Thread-69892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:54:25.838 [DEBUG] [Thread-69893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:54:31.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:54:31.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:54:31.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:54:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 53, 59), 26.56, 16.16, 0.0, 58.74, 21.67, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:54:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:53:59
2025-12-12T12:54:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:54:32.891 [DEBUG] [Thread-69894] [transport.py] [_log()] starting thread (client mode): 0xf813e260
2025-12-12T12:54:32.891 [DEBUG] [Thread-69894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:54:32.910 [DEBUG] [Thread-69894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:54:32.911 [INFO] [Thread-69894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] client lang: <none>
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] server lang: <none>
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] kex follows: False
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] Compression: none
2025-12-12T12:54:32.914 [DEBUG] [Thread-69894] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:54:32.931 [DEBUG] [Thread-69894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:54:32.932 [DEBUG] [Thread-69894] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:54:32.932 [DEBUG] [Thread-69894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:54:32.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:54:32.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:54:32.933 [DEBUG] [Thread-69894] [transport.py] [_log()] userauth is OK
2025-12-12T12:54:32.933 [DEBUG] [Thread-69894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:54:32.933 [DEBUG] [Thread-69894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:54:32.933 [DEBUG] [Thread-69894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:54:32.933 [DEBUG] [Thread-69894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:54:32.946 [INFO] [Thread-69894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:54:32.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:54:33.580 [DEBUG] [Thread-69894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:54:33.580 [DEBUG] [Thread-69894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:54:33.580 [DEBUG] [Thread-69894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:54:33.621 [DEBUG] [Thread-69894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:54:33.621 [DEBUG] [Thread-69894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:54:33.623 [DEBUG] [Thread-69894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:54:33.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:54:33.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:54:33.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:54:33.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:54:33.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:54:33.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:54:33.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454262 -999.00  +21.30  47.77     21   -1.30 1 1 2 1 1   888    0 30.25 325.60 ----- 59.6 47.8 327.2 64.9 26.1 -26.3 25.4 -26.6 25.3 -22.9 26.0 -23.6
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454262
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:54:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:53:59', tmtdew=26.56, humidity=16.16, cloud=0.0, wind=58.74, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:54:33.645 [DEBUG] [Thread-69894] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:54:33.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:54:33.732 [DEBUG] [Thread-69897] [transport.py] [_log()] starting thread (client mode): 0xf813f0a0
2025-12-12T12:54:33.732 [DEBUG] [Thread-69897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:54:33.746 [DEBUG] [Thread-69897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:54:33.746 [INFO] [Thread-69897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] client lang: <none>
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] server lang: <none>
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] kex follows: False
2025-12-12T12:54:33.754 [DEBUG] [Thread-69897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:54:33.755 [DEBUG] [Thread-69897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:54:33.755 [DEBUG] [Thread-69897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:54:33.755 [DEBUG] [Thread-69897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:54:33.755 [DEBUG] [Thread-69897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:54:33.755 [DEBUG] [Thread-69897] [transport.py] [_log()] Compression: none
2025-12-12T12:54:33.755 [DEBUG] [Thread-69897] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:54:33.809 [DEBUG] [Thread-69897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:54:33.809 [DEBUG] [Thread-69897] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:54:33.809 [DEBUG] [Thread-69897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:54:33.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:54:33.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:54:33.866 [DEBUG] [Thread-69897] [transport.py] [_log()] userauth is OK
2025-12-12T12:54:33.866 [DEBUG] [Thread-69897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:54:33.866 [DEBUG] [Thread-69897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:54:33.866 [DEBUG] [Thread-69897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:54:33.866 [DEBUG] [Thread-69897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:54:33.880 [INFO] [Thread-69897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:54:33.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:54:33.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:54:34.705 [DEBUG] [Thread-69897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:54:34.706 [DEBUG] [Thread-69897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:54:34.754 [DEBUG] [Thread-69897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:54:34.754 [DEBUG] [Thread-69897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:54:34.762 [DEBUG] [Thread-69897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:54:34.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:54:34.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:54: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
2025-12-12T12:54:34.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:54:34.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:54:34.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:54:34.794 [DEBUG] [Thread-69897] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:54:39.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:54:39.313 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:54:40.866 [DEBUG] [Thread-69899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:54:43.042 [DEBUG] [Thread-69900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:54:55.921 [DEBUG] [Thread-69901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:55:04.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:55:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:55:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 54, 31), 26.78, 15.95, 0.0, 60.32, 21.88, 0, 0, 0, 2, 2, 0),)
2025-12-12T12:55:05.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:54:31
2025-12-12T12:55:05.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:55:05.844 [DEBUG] [Thread-69902] [transport.py] [_log()] starting thread (client mode): 0xf813d060
2025-12-12T12:55:05.844 [DEBUG] [Thread-69902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:55:05.858 [DEBUG] [Thread-69902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:55:05.858 [INFO] [Thread-69902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] client lang: <none>
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] server lang: <none>
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] kex follows: False
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] Compression: none
2025-12-12T12:55:05.862 [DEBUG] [Thread-69902] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:55:05.876 [DEBUG] [Thread-69902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:55:05.876 [DEBUG] [Thread-69902] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:55:05.876 [DEBUG] [Thread-69902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:55:05.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:55:05.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:55:05.878 [DEBUG] [Thread-69902] [transport.py] [_log()] userauth is OK
2025-12-12T12:55:05.878 [DEBUG] [Thread-69902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:55:05.878 [DEBUG] [Thread-69902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:55:05.878 [DEBUG] [Thread-69902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:55:05.878 [DEBUG] [Thread-69902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:55:05.887 [INFO] [Thread-69902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:55:05.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:55:06.771 [DEBUG] [Thread-69902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:55:06.771 [DEBUG] [Thread-69902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:55:06.772 [DEBUG] [Thread-69902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:55:06.811 [DEBUG] [Thread-69902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:55:06.812 [DEBUG] [Thread-69902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:55:06.815 [DEBUG] [Thread-69902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:55:06.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:55:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:55:06.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:55:06.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:55:06.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:55:06.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:55:06.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:55:06.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:55:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:55:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:55:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:55:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:55:06.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:55:06.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:55:06.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:55:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:55:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:55:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:55:06.837 [DEBUG] [Thread-69902] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:55:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:54:31', tmtdew=26.78, humidity=15.95, cloud=0.0, wind=60.32, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:55:06.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:55:06.936 [DEBUG] [Thread-69905] [transport.py] [_log()] starting thread (client mode): 0xf81c2cb0
2025-12-12T12:55:06.936 [DEBUG] [Thread-69905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:55:06.951 [DEBUG] [Thread-69905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:55:06.951 [INFO] [Thread-69905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] client lang: <none>
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] server lang: <none>
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] kex follows: False
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] Compression: none
2025-12-12T12:55:06.959 [DEBUG] [Thread-69905] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:55:07.015 [DEBUG] [Thread-69905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:55:07.015 [DEBUG] [Thread-69905] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:55:07.016 [DEBUG] [Thread-69905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:55:07.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:55:07.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:55:07.075 [DEBUG] [Thread-69905] [transport.py] [_log()] userauth is OK
2025-12-12T12:55:07.075 [DEBUG] [Thread-69905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:55:07.075 [DEBUG] [Thread-69905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:55:07.075 [DEBUG] [Thread-69905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:55:07.075 [DEBUG] [Thread-69905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:55:07.094 [INFO] [Thread-69905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:55:07.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:55:07.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:55:07.982 [DEBUG] [Thread-69905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:55:07.983 [DEBUG] [Thread-69905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:55:08.030 [DEBUG] [Thread-69905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:55:08.031 [DEBUG] [Thread-69905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:55:08.039 [DEBUG] [Thread-69905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:55:08.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:55:08.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:55:08.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:55:08.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:55:08.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:55:08.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:55:08.071 [DEBUG] [Thread-69905] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:55:10.947 [DEBUG] [Thread-69907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:25.983 [DEBUG] [Thread-69908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:38.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:55:38.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:55:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:55:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 55, 35), 26.16, 16.78, 0.0, 52.45, 21.07, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:55:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:55:35
2025-12-12T12:55:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:55:39.070 [DEBUG] [Thread-69909] [transport.py] [_log()] starting thread (client mode): 0xf81c1150
2025-12-12T12:55:39.070 [DEBUG] [Thread-69909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:55:39.098 [DEBUG] [Thread-69909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:55:39.098 [INFO] [Thread-69909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:55:39.101 [DEBUG] [Thread-69909] [transport.py] [_log()] client lang: <none>
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] server lang: <none>
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] kex follows: False
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] Compression: none
2025-12-12T12:55:39.102 [DEBUG] [Thread-69909] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:55:39.124 [DEBUG] [Thread-69909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:55:39.125 [DEBUG] [Thread-69909] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:55:39.125 [DEBUG] [Thread-69909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:55:39.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:55:39.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:55:39.127 [DEBUG] [Thread-69909] [transport.py] [_log()] userauth is OK
2025-12-12T12:55:39.127 [DEBUG] [Thread-69909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:55:39.128 [DEBUG] [Thread-69909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:55:39.128 [DEBUG] [Thread-69909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:55:39.128 [DEBUG] [Thread-69909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:55:39.152 [INFO] [Thread-69909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:55:39.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:55:39.451 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:39.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:39.769 [DEBUG] [Thread-69909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:55:39.770 [DEBUG] [Thread-69909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:55:39.770 [DEBUG] [Thread-69909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:55:39.811 [DEBUG] [Thread-69909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:55:39.811 [DEBUG] [Thread-69909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:55:39.814 [DEBUG] [Thread-69909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:55:39.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:55:39.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:55:39.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:55:39.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:55:39.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:55:39.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:55:39.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:55:39.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:55:39.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:55:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:55:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:55:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:55:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:55:39.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:55:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:55:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:55:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:55:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:55:39.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:55:35', tmtdew=26.16, humidity=16.78, cloud=0.0, wind=52.45, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:55:39.840 [DEBUG] [Thread-69909] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:55:39.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:55:39.935 [DEBUG] [Thread-69912] [transport.py] [_log()] starting thread (client mode): 0xf81c2020
2025-12-12T12:55:39.935 [DEBUG] [Thread-69912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:55:39.951 [DEBUG] [Thread-69912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:55:39.951 [INFO] [Thread-69912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:39.959 [DEBUG] [Thread-69912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] client lang: <none>
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] server lang: <none>
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] kex follows: False
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] Compression: none
2025-12-12T12:55:39.960 [DEBUG] [Thread-69912] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:55:40.022 [DEBUG] [Thread-69912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:55:40.023 [DEBUG] [Thread-69912] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:55:40.023 [DEBUG] [Thread-69912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:55:40.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:55:40.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:55:40.079 [DEBUG] [Thread-69912] [transport.py] [_log()] userauth is OK
2025-12-12T12:55:40.079 [DEBUG] [Thread-69912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:55:40.079 [DEBUG] [Thread-69912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:55:40.079 [DEBUG] [Thread-69912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:55:40.080 [DEBUG] [Thread-69912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:55:40.099 [INFO] [Thread-69912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:55:40.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:55:40.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:55:40.949 [DEBUG] [Thread-69912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:55:40.949 [DEBUG] [Thread-69912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:55:40.997 [DEBUG] [Thread-69912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:55:40.997 [DEBUG] [Thread-69912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:55:41.006 [DEBUG] [Thread-69912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:55:41.013 [DEBUG] [Thread-69914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:41.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:55:41.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:55:41.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:55:41.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:55:41.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:55:41.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:55:41.040 [DEBUG] [Thread-69912] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:55:43.100 [DEBUG] [Thread-69915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:55:56.063 [DEBUG] [Thread-69916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:56:11.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:56:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:56:11.091 [DEBUG] [Thread-69917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:11.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 56, 7), 25.88, 17.11, 0.0, 48.59, 20.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:56:11.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:56:07
2025-12-12T12:56:11.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:56:12.023 [DEBUG] [Thread-69918] [transport.py] [_log()] starting thread (client mode): 0xf5703a00
2025-12-12T12:56:12.023 [DEBUG] [Thread-69918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:56:12.043 [DEBUG] [Thread-69918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:56:12.043 [INFO] [Thread-69918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:56:12.046 [DEBUG] [Thread-69918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] client lang: <none>
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] server lang: <none>
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] kex follows: False
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:56:12.047 [DEBUG] [Thread-69918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:56:12.048 [DEBUG] [Thread-69918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:56:12.048 [DEBUG] [Thread-69918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:56:12.048 [DEBUG] [Thread-69918] [transport.py] [_log()] Compression: none
2025-12-12T12:56:12.048 [DEBUG] [Thread-69918] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:56:12.066 [DEBUG] [Thread-69918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:56:12.066 [DEBUG] [Thread-69918] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:56:12.067 [DEBUG] [Thread-69918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:56:12.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:56:12.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:56:12.068 [DEBUG] [Thread-69918] [transport.py] [_log()] userauth is OK
2025-12-12T12:56:12.068 [DEBUG] [Thread-69918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:56:12.069 [DEBUG] [Thread-69918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:56:12.069 [DEBUG] [Thread-69918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:56:12.069 [DEBUG] [Thread-69918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:56:12.103 [INFO] [Thread-69918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:56:12.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:56:12.868 [DEBUG] [Thread-69918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:56:12.869 [DEBUG] [Thread-69918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:56:12.869 [DEBUG] [Thread-69918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:56:12.910 [DEBUG] [Thread-69918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:56:12.910 [DEBUG] [Thread-69918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:56:12.913 [DEBUG] [Thread-69918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:56:12.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:56:12.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:56:12.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:56:12.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:56:12.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:56:12.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:56:12.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:56:12.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:56:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:56:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:56:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:56:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:56:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:56:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:56:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:56:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:56:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:56:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:56:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:56:07', tmtdew=25.88, humidity=17.11, cloud=0.0, wind=48.59, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:56:12.942 [DEBUG] [Thread-69918] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:56:13.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:56:13.046 [DEBUG] [Thread-69921] [transport.py] [_log()] starting thread (client mode): 0xf81e5a80
2025-12-12T12:56:13.047 [DEBUG] [Thread-69921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:56:13.060 [DEBUG] [Thread-69921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:56:13.060 [INFO] [Thread-69921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:56:13.067 [DEBUG] [Thread-69921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] client lang: <none>
2025-12-12T12:56:13.068 [DEBUG] [Thread-69921] [transport.py] [_log()] server lang: <none>
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] kex follows: False
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] Compression: none
2025-12-12T12:56:13.069 [DEBUG] [Thread-69921] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:56:13.130 [DEBUG] [Thread-69921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:56:13.131 [DEBUG] [Thread-69921] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:56:13.132 [DEBUG] [Thread-69921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:56:13.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:56:13.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:56:13.187 [DEBUG] [Thread-69921] [transport.py] [_log()] userauth is OK
2025-12-12T12:56:13.187 [DEBUG] [Thread-69921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:56:13.188 [DEBUG] [Thread-69921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:56:13.188 [DEBUG] [Thread-69921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:56:13.188 [DEBUG] [Thread-69921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:56:13.211 [INFO] [Thread-69921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:56:13.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:56:13.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:56:14.089 [DEBUG] [Thread-69921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:56:14.089 [DEBUG] [Thread-69921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:56:14.137 [DEBUG] [Thread-69921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:56:14.137 [DEBUG] [Thread-69921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:56:14.146 [DEBUG] [Thread-69921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:56:14.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:56:14.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:56:14.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:56:14.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:56:14.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:56:14.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:56:14.180 [DEBUG] [Thread-69921] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:56:26.117 [DEBUG] [Thread-69923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:39.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:39.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:41.148 [DEBUG] [Thread-69924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:43.146 [DEBUG] [Thread-69925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:56:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:56:44.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:56:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:56:44.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 56, 39), 26.08, 16.76, 0.0, 52.9, 21.47, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:56:44.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:56:39
2025-12-12T12:56:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:56:45.170 [DEBUG] [Thread-69926] [transport.py] [_log()] starting thread (client mode): 0xf81c2170
2025-12-12T12:56:45.170 [DEBUG] [Thread-69926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:56:45.191 [DEBUG] [Thread-69926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:56:45.191 [INFO] [Thread-69926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] client lang: <none>
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] server lang: <none>
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] kex follows: False
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:56:45.195 [DEBUG] [Thread-69926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:56:45.196 [DEBUG] [Thread-69926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:56:45.196 [DEBUG] [Thread-69926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:56:45.196 [DEBUG] [Thread-69926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:56:45.196 [DEBUG] [Thread-69926] [transport.py] [_log()] Compression: none
2025-12-12T12:56:45.196 [DEBUG] [Thread-69926] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:56:45.213 [DEBUG] [Thread-69926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:56:45.213 [DEBUG] [Thread-69926] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:56:45.214 [DEBUG] [Thread-69926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:56:45.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:56:45.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:56:45.216 [DEBUG] [Thread-69926] [transport.py] [_log()] userauth is OK
2025-12-12T12:56:45.216 [DEBUG] [Thread-69926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:56:45.217 [DEBUG] [Thread-69926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:56:45.217 [DEBUG] [Thread-69926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:56:45.217 [DEBUG] [Thread-69926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:56:45.234 [INFO] [Thread-69926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:56:45.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:56:45.875 [DEBUG] [Thread-69926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:56:45.875 [DEBUG] [Thread-69926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:56:45.875 [DEBUG] [Thread-69926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:56:45.916 [DEBUG] [Thread-69926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:56:45.916 [DEBUG] [Thread-69926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:56:45.919 [DEBUG] [Thread-69926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:56:45.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:56:45.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:56:45.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:56:45.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:56:45.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:56:45.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:56:45.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:56:45.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:56:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:56:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:56:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:56:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:56:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:56:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:56:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:56:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:56:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:56:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:56:45.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:56:39', tmtdew=26.08, humidity=16.76, cloud=0.0, wind=52.9, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:56:45.947 [DEBUG] [Thread-69926] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:56:46.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:56:46.043 [DEBUG] [Thread-69929] [transport.py] [_log()] starting thread (client mode): 0xf570f3a0
2025-12-12T12:56:46.043 [DEBUG] [Thread-69929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:56:46.057 [DEBUG] [Thread-69929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:56:46.058 [INFO] [Thread-69929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] client lang: <none>
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] server lang: <none>
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] kex follows: False
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] Compression: none
2025-12-12T12:56:46.065 [DEBUG] [Thread-69929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:56:46.122 [DEBUG] [Thread-69929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:56:46.123 [DEBUG] [Thread-69929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:56:46.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:56:46.124 [DEBUG] [Thread-69929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:56:46.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:56:46.179 [DEBUG] [Thread-69929] [transport.py] [_log()] userauth is OK
2025-12-12T12:56:46.179 [DEBUG] [Thread-69929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:56:46.179 [DEBUG] [Thread-69929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:56:46.179 [DEBUG] [Thread-69929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:56:46.179 [DEBUG] [Thread-69929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:56:46.198 [INFO] [Thread-69929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:56:46.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:56:46.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:56:47.035 [DEBUG] [Thread-69929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:56:47.036 [DEBUG] [Thread-69929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:56:47.084 [DEBUG] [Thread-69929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:56:47.084 [DEBUG] [Thread-69929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:56:47.092 [DEBUG] [Thread-69929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:56:47.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:56:47.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:56:47.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:56:47.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:56:47.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:56:47.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:56:47.127 [DEBUG] [Thread-69929] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:56:56.176 [DEBUG] [Thread-69931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:11.227 [DEBUG] [Thread-69932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:17.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:57:17.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:57:17.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:57:17.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 57, 11), 26.01, 16.88, 0.0, 50.43, 21.54, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:57:17.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:57:11
2025-12-12T12:57:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:57:18.115 [DEBUG] [Thread-69933] [transport.py] [_log()] starting thread (client mode): 0xf57008b0
2025-12-12T12:57:18.115 [DEBUG] [Thread-69933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:57:18.135 [DEBUG] [Thread-69933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:57:18.135 [INFO] [Thread-69933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:57:18.139 [DEBUG] [Thread-69933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] client lang: <none>
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] server lang: <none>
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] kex follows: False
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] Compression: none
2025-12-12T12:57:18.140 [DEBUG] [Thread-69933] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:57:18.158 [DEBUG] [Thread-69933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:57:18.159 [DEBUG] [Thread-69933] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:57:18.159 [DEBUG] [Thread-69933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:57:18.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:57:18.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:57:18.201 [DEBUG] [Thread-69933] [transport.py] [_log()] userauth is OK
2025-12-12T12:57:18.201 [DEBUG] [Thread-69933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:57:18.201 [DEBUG] [Thread-69933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:57:18.201 [DEBUG] [Thread-69933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:57:18.201 [DEBUG] [Thread-69933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:57:18.233 [INFO] [Thread-69933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:57:18.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:57:18.958 [DEBUG] [Thread-69933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:57:18.958 [DEBUG] [Thread-69933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:57:18.959 [DEBUG] [Thread-69933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:57:18.999 [DEBUG] [Thread-69933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:57:19.000 [DEBUG] [Thread-69933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:57:19.002 [DEBUG] [Thread-69933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:57:19.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:57:19.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:57:19.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:57:19.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:57:19.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:57:19.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:57:19.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:57:19.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:57:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:57:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:57:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:57:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:57:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:57:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:57:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:57:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:57:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:57:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:57:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:57:11', tmtdew=26.01, humidity=16.88, cloud=0.0, wind=50.43, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:57:19.032 [DEBUG] [Thread-69933] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:57:19.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:57:19.123 [DEBUG] [Thread-69936] [transport.py] [_log()] starting thread (client mode): 0xf57027a0
2025-12-12T12:57:19.123 [DEBUG] [Thread-69936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:57:19.142 [DEBUG] [Thread-69936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:57:19.142 [INFO] [Thread-69936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:57:19.153 [DEBUG] [Thread-69936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:57:19.153 [DEBUG] [Thread-69936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:57:19.153 [DEBUG] [Thread-69936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:57:19.153 [DEBUG] [Thread-69936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:19.153 [DEBUG] [Thread-69936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] client lang: <none>
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] server lang: <none>
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] kex follows: False
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] Compression: none
2025-12-12T12:57:19.154 [DEBUG] [Thread-69936] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:57:19.207 [DEBUG] [Thread-69936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:57:19.208 [DEBUG] [Thread-69936] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:57:19.208 [DEBUG] [Thread-69936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:57:19.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:57:19.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:57:19.263 [DEBUG] [Thread-69936] [transport.py] [_log()] userauth is OK
2025-12-12T12:57:19.263 [DEBUG] [Thread-69936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:57:19.263 [DEBUG] [Thread-69936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:57:19.263 [DEBUG] [Thread-69936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:57:19.263 [DEBUG] [Thread-69936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:57:19.282 [INFO] [Thread-69936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:57:19.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:57:19.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:57:20.128 [DEBUG] [Thread-69936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:57:20.128 [DEBUG] [Thread-69936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:57:20.177 [DEBUG] [Thread-69936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:57:20.177 [DEBUG] [Thread-69936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:57:20.187 [DEBUG] [Thread-69936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:57:20.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:57:20.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:57:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:57:20.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:57:20.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:57:20.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:57:20.223 [DEBUG] [Thread-69936] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:57:26.257 [DEBUG] [Thread-69938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:39.734 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:39.735 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:41.301 [DEBUG] [Thread-69939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:43.198 [DEBUG] [Thread-69940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:57:50.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:57:50.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:57:50.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:57:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 57, 43), 25.5, 17.86, 0.0, 42.52, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:57:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:57:43
2025-12-12T12:57:51.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:57:51.206 [DEBUG] [Thread-69941] [transport.py] [_log()] starting thread (client mode): 0xf5703c10
2025-12-12T12:57:51.206 [DEBUG] [Thread-69941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:57:51.226 [DEBUG] [Thread-69941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:57:51.226 [INFO] [Thread-69941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:51.230 [DEBUG] [Thread-69941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] client lang: <none>
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] server lang: <none>
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] kex follows: False
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] Compression: none
2025-12-12T12:57:51.231 [DEBUG] [Thread-69941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:57:51.248 [DEBUG] [Thread-69941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:57:51.249 [DEBUG] [Thread-69941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:57:51.250 [DEBUG] [Thread-69941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:57:51.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:57:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:57:51.252 [DEBUG] [Thread-69941] [transport.py] [_log()] userauth is OK
2025-12-12T12:57:51.252 [DEBUG] [Thread-69941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:57:51.252 [DEBUG] [Thread-69941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:57:51.253 [DEBUG] [Thread-69941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:57:51.253 [DEBUG] [Thread-69941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:57:51.287 [INFO] [Thread-69941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:57:51.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:57:51.945 [DEBUG] [Thread-69941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:57:51.945 [DEBUG] [Thread-69941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:57:51.946 [DEBUG] [Thread-69941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:57:51.987 [DEBUG] [Thread-69941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:57:51.987 [DEBUG] [Thread-69941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:57:51.990 [DEBUG] [Thread-69941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:57:52.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:57:52.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:57:52.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:57:52.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:57:52.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:57:52.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:57:52.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:57:52.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:57:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:57:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:57:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:57:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:57:52.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:57:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:57:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:57:52.012 [DEBUG] [Thread-69941] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:57:52.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:57:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:57:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:57:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:57:43', tmtdew=25.5, humidity=17.86, cloud=0.0, wind=42.52, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:57:52.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:57:52.108 [DEBUG] [Thread-69944] [transport.py] [_log()] starting thread (client mode): 0xfabc7f70
2025-12-12T12:57:52.108 [DEBUG] [Thread-69944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:57:52.123 [DEBUG] [Thread-69944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:57:52.123 [INFO] [Thread-69944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:57:52.130 [DEBUG] [Thread-69944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] client lang: <none>
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] server lang: <none>
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] kex follows: False
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] Compression: none
2025-12-12T12:57:52.131 [DEBUG] [Thread-69944] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:57:52.186 [DEBUG] [Thread-69944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:57:52.187 [DEBUG] [Thread-69944] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:57:52.187 [DEBUG] [Thread-69944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:57:52.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:57:52.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:57:52.242 [DEBUG] [Thread-69944] [transport.py] [_log()] userauth is OK
2025-12-12T12:57:52.243 [DEBUG] [Thread-69944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:57:52.243 [DEBUG] [Thread-69944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:57:52.243 [DEBUG] [Thread-69944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:57:52.243 [DEBUG] [Thread-69944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:57:52.261 [INFO] [Thread-69944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:57:52.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:57:52.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:57:53.108 [DEBUG] [Thread-69944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:57:53.109 [DEBUG] [Thread-69944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:57:53.156 [DEBUG] [Thread-69944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:57:53.157 [DEBUG] [Thread-69944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:57:53.165 [DEBUG] [Thread-69944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:57:53.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:57:53.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:57:53.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:57:53.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:57:53.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:57:53.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:57:53.200 [DEBUG] [Thread-69944] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:57:56.328 [DEBUG] [Thread-69946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:11.373 [DEBUG] [Thread-69947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:23.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:58:23.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:58:23.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:58:23.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 58, 15), 25.54, 17.79, 0.0, 44.8, 20.87, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:58:23.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:58:15
2025-12-12T12:58:24.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:58:24.234 [DEBUG] [Thread-69948] [transport.py] [_log()] starting thread (client mode): 0xf81e46d0
2025-12-12T12:58:24.234 [DEBUG] [Thread-69948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:58:24.257 [DEBUG] [Thread-69948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:58:24.257 [INFO] [Thread-69948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] client lang: <none>
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] server lang: <none>
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] kex follows: False
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] Compression: none
2025-12-12T12:58:24.260 [DEBUG] [Thread-69948] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:58:24.275 [DEBUG] [Thread-69948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:58:24.275 [DEBUG] [Thread-69948] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:58:24.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:58:24.275 [DEBUG] [Thread-69948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:58:24.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:58:24.276 [DEBUG] [Thread-69948] [transport.py] [_log()] userauth is OK
2025-12-12T12:58:24.276 [DEBUG] [Thread-69948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:58:24.276 [DEBUG] [Thread-69948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:58:24.276 [DEBUG] [Thread-69948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:58:24.276 [DEBUG] [Thread-69948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:58:24.302 [INFO] [Thread-69948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:58:24.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:58:25.113 [DEBUG] [Thread-69948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:58:25.113 [DEBUG] [Thread-69948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:58:25.113 [DEBUG] [Thread-69948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:58:25.154 [DEBUG] [Thread-69948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:58:25.154 [DEBUG] [Thread-69948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:58:25.156 [DEBUG] [Thread-69948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:58:25.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:58:25.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:58:25.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:58:25.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:58:25.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:58:25.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:58:25.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:58:25.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:58:25.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:58:25.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:58:15', tmtdew=25.54, humidity=17.79, cloud=0.0, wind=44.8, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:58:25.174 [DEBUG] [Thread-69948] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:58:25.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:58:25.259 [DEBUG] [Thread-69951] [transport.py] [_log()] starting thread (client mode): 0xf5703e50
2025-12-12T12:58:25.259 [DEBUG] [Thread-69951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:58:25.273 [DEBUG] [Thread-69951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:58:25.273 [INFO] [Thread-69951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:58:25.280 [DEBUG] [Thread-69951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] client lang: <none>
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] server lang: <none>
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] kex follows: False
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] Compression: none
2025-12-12T12:58:25.281 [DEBUG] [Thread-69951] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:58:25.337 [DEBUG] [Thread-69951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:58:25.337 [DEBUG] [Thread-69951] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:58:25.337 [DEBUG] [Thread-69951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:58:25.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:58:25.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:58:25.399 [DEBUG] [Thread-69951] [transport.py] [_log()] userauth is OK
2025-12-12T12:58:25.399 [DEBUG] [Thread-69951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:58:25.399 [DEBUG] [Thread-69951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:58:25.399 [DEBUG] [Thread-69951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:58:25.399 [DEBUG] [Thread-69951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:58:25.412 [INFO] [Thread-69951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:58:25.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:58:25.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:58:26.257 [DEBUG] [Thread-69951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:58:26.257 [DEBUG] [Thread-69951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:58:26.305 [DEBUG] [Thread-69951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:58:26.305 [DEBUG] [Thread-69951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:58:26.314 [DEBUG] [Thread-69951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:58:26.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:58: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')
2025-12-12T12:58:26.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:58:26.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:58:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:58:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:58:26.345 [DEBUG] [Thread-69951] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:58:26.399 [DEBUG] [Thread-69953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:39.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:39.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:41.433 [DEBUG] [Thread-69954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:43.249 [DEBUG] [Thread-69955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:56.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:58:56.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:58:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:58:56.460 [DEBUG] [Thread-69956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:58:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 58, 47), 25.19, 18.39, 0.0, 45.2, 21.62, 0, 0, 0, 2, 1, 0),)
2025-12-12T12:58:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:58:47
2025-12-12T12:58:57.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:58:57.321 [DEBUG] [Thread-69957] [transport.py] [_log()] starting thread (client mode): 0xf5703af0
2025-12-12T12:58:57.321 [DEBUG] [Thread-69957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:58:57.342 [DEBUG] [Thread-69957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:58:57.342 [INFO] [Thread-69957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] client lang: <none>
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] server lang: <none>
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] kex follows: False
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] Compression: none
2025-12-12T12:58:57.345 [DEBUG] [Thread-69957] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:58:57.363 [DEBUG] [Thread-69957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:58:57.363 [DEBUG] [Thread-69957] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:58:57.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:58:57.364 [DEBUG] [Thread-69957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:58:57.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:58:57.366 [DEBUG] [Thread-69957] [transport.py] [_log()] userauth is OK
2025-12-12T12:58:57.366 [DEBUG] [Thread-69957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:58:57.366 [DEBUG] [Thread-69957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:58:57.367 [DEBUG] [Thread-69957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:58:57.367 [DEBUG] [Thread-69957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:58:57.385 [INFO] [Thread-69957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:58:57.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:58:58.024 [DEBUG] [Thread-69957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:58:58.024 [DEBUG] [Thread-69957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:58:58.025 [DEBUG] [Thread-69957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:58:58.065 [DEBUG] [Thread-69957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:58:58.065 [DEBUG] [Thread-69957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:58:58.068 [DEBUG] [Thread-69957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:58:58.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:58:58.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:58:58.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:58:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:58:58.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:58:58.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:58:58.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:58:58.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:58:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:58:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:58:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:58:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:58:58.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:58:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:58:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:58:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:58:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:58:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:58:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:58:47', tmtdew=25.19, humidity=18.39, cloud=0.0, wind=45.2, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:58:58.094 [DEBUG] [Thread-69957] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:58:58.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:58:58.197 [DEBUG] [Thread-69960] [transport.py] [_log()] starting thread (client mode): 0xf81f0a00
2025-12-12T12:58:58.197 [DEBUG] [Thread-69960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:58:58.212 [DEBUG] [Thread-69960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:58:58.212 [INFO] [Thread-69960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:58:58.221 [DEBUG] [Thread-69960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:58:58.221 [DEBUG] [Thread-69960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] client lang: <none>
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] server lang: <none>
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] kex follows: False
2025-12-12T12:58:58.222 [DEBUG] [Thread-69960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:58:58.223 [DEBUG] [Thread-69960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:58:58.223 [DEBUG] [Thread-69960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:58:58.223 [DEBUG] [Thread-69960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:58:58.223 [DEBUG] [Thread-69960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:58:58.223 [DEBUG] [Thread-69960] [transport.py] [_log()] Compression: none
2025-12-12T12:58:58.224 [DEBUG] [Thread-69960] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:58:58.281 [DEBUG] [Thread-69960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:58:58.281 [DEBUG] [Thread-69960] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:58:58.282 [DEBUG] [Thread-69960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:58:58.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:58:58.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:58:58.339 [DEBUG] [Thread-69960] [transport.py] [_log()] userauth is OK
2025-12-12T12:58:58.339 [DEBUG] [Thread-69960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:58:58.339 [DEBUG] [Thread-69960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:58:58.339 [DEBUG] [Thread-69960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:58:58.339 [DEBUG] [Thread-69960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:58:58.357 [INFO] [Thread-69960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:58:58.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:58:58.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:58:59.193 [DEBUG] [Thread-69960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:58:59.193 [DEBUG] [Thread-69960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:58:59.241 [DEBUG] [Thread-69960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:58:59.241 [DEBUG] [Thread-69960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:58:59.250 [DEBUG] [Thread-69960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:58:59.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:58:59.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:58:59.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:58:59.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:58:59.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:58:59.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:58:59.284 [DEBUG] [Thread-69960] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:59:11.485 [DEBUG] [Thread-69962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:59:26.528 [DEBUG] [Thread-69963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:59:29.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T12:59:29.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T12:59:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T12:59:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 59, 19), 25.25, 18.33, 0.0, 40.56, 21.67, 0, 0, 0, 2, 0, 0),)
2025-12-12T12:59:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:59:19
2025-12-12T12:59:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T12:59:30.254 [DEBUG] [Thread-69964] [transport.py] [_log()] starting thread (client mode): 0xf813f670
2025-12-12T12:59:30.254 [DEBUG] [Thread-69964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:59:30.275 [DEBUG] [Thread-69964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T12:59:30.275 [INFO] [Thread-69964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T12:59:30.278 [DEBUG] [Thread-69964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] client lang: <none>
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] server lang: <none>
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] kex follows: False
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] Compression: none
2025-12-12T12:59:30.279 [DEBUG] [Thread-69964] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:59:30.295 [DEBUG] [Thread-69964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:59:30.295 [DEBUG] [Thread-69964] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:59:30.296 [DEBUG] [Thread-69964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T12:59:30.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T12:59:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:59:30.298 [DEBUG] [Thread-69964] [transport.py] [_log()] userauth is OK
2025-12-12T12:59:30.298 [DEBUG] [Thread-69964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:59:30.298 [DEBUG] [Thread-69964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:59:30.298 [DEBUG] [Thread-69964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T12:59:30.298 [DEBUG] [Thread-69964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:59:30.315 [INFO] [Thread-69964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:59:30.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:59:31.136 [DEBUG] [Thread-69964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:59:31.136 [DEBUG] [Thread-69964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:59:31.136 [DEBUG] [Thread-69964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T12:59:31.177 [DEBUG] [Thread-69964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:59:31.177 [DEBUG] [Thread-69964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:59:31.180 [DEBUG] [Thread-69964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:59:31.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:59:31.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T12:59:31.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T12:59:31.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T12:59:31.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:59:31.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T12:59:31.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:59:31.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:59:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T12:59:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T12:59:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T12:59:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T12:59:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T12:59:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T12:59:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T12:59:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T12:59:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T12:59:31.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T12:59:31.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:59:19', tmtdew=25.25, humidity=18.33, cloud=0.0, wind=40.56, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T12:59:31.204 [DEBUG] [Thread-69964] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:59:31.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T12:59:31.299 [DEBUG] [Thread-69967] [transport.py] [_log()] starting thread (client mode): 0xf81f13f0
2025-12-12T12:59:31.299 [DEBUG] [Thread-69967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T12:59:31.313 [DEBUG] [Thread-69967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T12:59:31.313 [INFO] [Thread-69967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T12:59:31.321 [DEBUG] [Thread-69967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] client lang: <none>
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] server lang: <none>
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] kex follows: False
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T12:59:31.322 [DEBUG] [Thread-69967] [transport.py] [_log()] Compression: none
2025-12-12T12:59:31.323 [DEBUG] [Thread-69967] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T12:59:31.379 [DEBUG] [Thread-69967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T12:59:31.380 [DEBUG] [Thread-69967] [transport.py] [_log()] Switch to new keys ...
2025-12-12T12:59:31.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T12:59:31.381 [DEBUG] [Thread-69967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T12:59:31.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T12:59:31.435 [DEBUG] [Thread-69967] [transport.py] [_log()] userauth is OK
2025-12-12T12:59:31.435 [DEBUG] [Thread-69967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T12:59:31.435 [DEBUG] [Thread-69967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T12:59:31.435 [DEBUG] [Thread-69967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T12:59:31.435 [DEBUG] [Thread-69967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T12:59:31.455 [INFO] [Thread-69967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T12:59:31.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T12:59:31.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T12:59:32.310 [DEBUG] [Thread-69967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T12:59:32.310 [DEBUG] [Thread-69967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T12:59:32.358 [DEBUG] [Thread-69967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T12:59:32.359 [DEBUG] [Thread-69967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T12:59:32.367 [DEBUG] [Thread-69967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T12:59:32.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T12:59:32.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T12:59:32.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T12:59:32.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T12:59:32.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T12:59:32.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T12:59:32.400 [DEBUG] [Thread-69967] [transport.py] [_log()] EOF in transport thread
2025-12-12T12:59:40.016 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:59:40.017 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:59:41.561 [DEBUG] [Thread-69969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:59:43.299 [DEBUG] [Thread-69970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T12:59:56.598 [DEBUG] [Thread-69971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:02.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:00:02.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:00:02.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:00:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 12, 59, 51), 25.38, 18.06, 0.0, 34.81, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:00:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 12:59:51
2025-12-12T13:00:03.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:00:03.377 [DEBUG] [Thread-69972] [transport.py] [_log()] starting thread (client mode): 0xf570f250
2025-12-12T13:00:03.377 [DEBUG] [Thread-69972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:00:03.396 [DEBUG] [Thread-69972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:00:03.396 [INFO] [Thread-69972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] client lang: <none>
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] server lang: <none>
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] kex follows: False
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] Compression: none
2025-12-12T13:00:03.400 [DEBUG] [Thread-69972] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:00:03.416 [DEBUG] [Thread-69972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:00:03.416 [DEBUG] [Thread-69972] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:00:03.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:00:03.418 [DEBUG] [Thread-69972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:00:03.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:00:03.420 [DEBUG] [Thread-69972] [transport.py] [_log()] userauth is OK
2025-12-12T13:00:03.420 [DEBUG] [Thread-69972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:00:03.420 [DEBUG] [Thread-69972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:00:03.420 [DEBUG] [Thread-69972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:00:03.420 [DEBUG] [Thread-69972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:00:03.444 [INFO] [Thread-69972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:00:03.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:00:04.300 [DEBUG] [Thread-69972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:00:04.301 [DEBUG] [Thread-69972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:00:04.301 [DEBUG] [Thread-69972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:00:04.342 [DEBUG] [Thread-69972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:00:04.342 [DEBUG] [Thread-69972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:00:04.345 [DEBUG] [Thread-69972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:00:04.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:00:04.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:00:04.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:00:04.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:00:04.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:00:04.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:00:04.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:00:04.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:00:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:00:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.454609 -999.00  +21.50  47.63     21   -1.40 1 1 2 1 1   888    0 30.08 310.66 ----- 46.3 47.6 324.2 71.3 26.1 -25.7 25.4 -26.2 25.4 -21.9 26.0 -23.7
2025-12-12T13:00:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:00:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:00:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.454609
2025-12-12T13:00:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:00:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:00:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:00:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:00:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:00:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T12:59:51', tmtdew=25.38, humidity=18.06, cloud=0.0, wind=34.81, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T10:54:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:00:04.372 [DEBUG] [Thread-69972] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:00:04.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:00:04.458 [DEBUG] [Thread-69975] [transport.py] [_log()] starting thread (client mode): 0xfabc5c30
2025-12-12T13:00:04.458 [DEBUG] [Thread-69975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:00:04.473 [DEBUG] [Thread-69975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:00:04.473 [INFO] [Thread-69975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:00:04.480 [DEBUG] [Thread-69975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:00:04.480 [DEBUG] [Thread-69975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] client lang: <none>
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] server lang: <none>
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] kex follows: False
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] Compression: none
2025-12-12T13:00:04.481 [DEBUG] [Thread-69975] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:00:04.538 [DEBUG] [Thread-69975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:00:04.539 [DEBUG] [Thread-69975] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:00:04.539 [DEBUG] [Thread-69975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:00:04.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:00:04.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:00:04.595 [DEBUG] [Thread-69975] [transport.py] [_log()] userauth is OK
2025-12-12T13:00:04.595 [DEBUG] [Thread-69975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:00:04.595 [DEBUG] [Thread-69975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:00:04.595 [DEBUG] [Thread-69975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:00:04.595 [DEBUG] [Thread-69975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:00:04.613 [INFO] [Thread-69975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:00:04.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:00:04.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:00:05.519 [DEBUG] [Thread-69975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:00:05.520 [DEBUG] [Thread-69975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:00:05.567 [DEBUG] [Thread-69975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:00:05.567 [DEBUG] [Thread-69975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:00:05.576 [DEBUG] [Thread-69975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:00:05.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:00:05.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:00:05.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:00:05.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:00:05.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:00:05.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:00:05.607 [DEBUG] [Thread-69975] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:00:11.632 [DEBUG] [Thread-69977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:26.674 [DEBUG] [Thread-69978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:35.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:00:35.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:00:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:00:36.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 0, 23), 25.08, 18.36, 0.0, 31.42, 21.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:00:36.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:00:23
2025-12-12T13:00:36.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:00:36.568 [DEBUG] [Thread-69979] [transport.py] [_log()] starting thread (client mode): 0xfabc69e0
2025-12-12T13:00:36.568 [DEBUG] [Thread-69979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:00:36.588 [DEBUG] [Thread-69979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:00:36.588 [INFO] [Thread-69979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] client lang: <none>
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] server lang: <none>
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] kex follows: False
2025-12-12T13:00:36.590 [DEBUG] [Thread-69979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:00:36.591 [DEBUG] [Thread-69979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:00:36.591 [DEBUG] [Thread-69979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:00:36.591 [DEBUG] [Thread-69979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:00:36.591 [DEBUG] [Thread-69979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:00:36.591 [DEBUG] [Thread-69979] [transport.py] [_log()] Compression: none
2025-12-12T13:00:36.591 [DEBUG] [Thread-69979] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:00:36.605 [DEBUG] [Thread-69979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:00:36.606 [DEBUG] [Thread-69979] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:00:36.606 [DEBUG] [Thread-69979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:00:36.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:00:36.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:00:36.608 [DEBUG] [Thread-69979] [transport.py] [_log()] userauth is OK
2025-12-12T13:00:36.609 [DEBUG] [Thread-69979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:00:36.609 [DEBUG] [Thread-69979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:00:36.609 [DEBUG] [Thread-69979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:00:36.609 [DEBUG] [Thread-69979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:00:36.628 [INFO] [Thread-69979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:00:36.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:00:37.452 [DEBUG] [Thread-69979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:00:37.453 [DEBUG] [Thread-69979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:00:37.453 [DEBUG] [Thread-69979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:00:37.494 [DEBUG] [Thread-69979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:00:37.494 [DEBUG] [Thread-69979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:00:37.497 [DEBUG] [Thread-69979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:00:37.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:00:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:00:37.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:00:37.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:00:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:00:37.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:00:37.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:00:37.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:00:37.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:00:37.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.458428 -999.00  +20.70  36.78     24   -0.00 1 1 2 1 1   888    0 27.46 218.05 NA 36.9 36.8 311.2 49.9 25.9 -25.3 25.2 -25.9 25.1 -21.5 25.8 -23.5
2025-12-12T13:00:37.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:00:37.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:00:37.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.458428
2025-12-12T13:00:37.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:00:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:00:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:00:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:00:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:00:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:00:23', tmtdew=25.08, humidity=18.36, cloud=0.0, wind=31.42, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:00:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:00:37.520 [DEBUG] [Thread-69979] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:00:37.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:00:37.615 [DEBUG] [Thread-69982] [transport.py] [_log()] starting thread (client mode): 0xf570cac0
2025-12-12T13:00:37.616 [DEBUG] [Thread-69982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:00:37.630 [DEBUG] [Thread-69982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:00:37.630 [INFO] [Thread-69982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:00:37.638 [DEBUG] [Thread-69982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:00:37.638 [DEBUG] [Thread-69982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] client lang: <none>
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] server lang: <none>
2025-12-12T13:00:37.639 [DEBUG] [Thread-69982] [transport.py] [_log()] kex follows: False
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] Compression: none
2025-12-12T13:00:37.640 [DEBUG] [Thread-69982] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:00:37.694 [DEBUG] [Thread-69982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:00:37.695 [DEBUG] [Thread-69982] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:00:37.695 [DEBUG] [Thread-69982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:00:37.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:00:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:00:37.751 [DEBUG] [Thread-69982] [transport.py] [_log()] userauth is OK
2025-12-12T13:00:37.751 [DEBUG] [Thread-69982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:00:37.751 [DEBUG] [Thread-69982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:00:37.751 [DEBUG] [Thread-69982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:00:37.751 [DEBUG] [Thread-69982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:00:37.775 [INFO] [Thread-69982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:00:37.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:00:37.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:00:38.595 [DEBUG] [Thread-69982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:00:38.595 [DEBUG] [Thread-69982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:00:38.643 [DEBUG] [Thread-69982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:00:38.643 [DEBUG] [Thread-69982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:00:38.652 [DEBUG] [Thread-69982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:00:38.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:00:38.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:00:38.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:00:38.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:00:38.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:00:38.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:00:38.686 [DEBUG] [Thread-69982] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:00:40.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:40.158 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:41.706 [DEBUG] [Thread-69984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:43.362 [DEBUG] [Thread-69985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:00:56.753 [DEBUG] [Thread-69986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:08.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:01:08.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:01:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:01:09.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 0, 55), 24.74, 18.94, 0.0, 33.89, 21.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:01:09.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:00:55
2025-12-12T13:01:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:01:09.676 [DEBUG] [Thread-69987] [transport.py] [_log()] starting thread (client mode): 0xf81e4850
2025-12-12T13:01:09.676 [DEBUG] [Thread-69987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:01:09.698 [DEBUG] [Thread-69987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:01:09.698 [INFO] [Thread-69987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] client lang: <none>
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] server lang: <none>
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] kex follows: False
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] Compression: none
2025-12-12T13:01:09.701 [DEBUG] [Thread-69987] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:01:09.719 [DEBUG] [Thread-69987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:01:09.719 [DEBUG] [Thread-69987] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:01:09.720 [DEBUG] [Thread-69987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:01:09.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:01:09.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:01:09.722 [DEBUG] [Thread-69987] [transport.py] [_log()] userauth is OK
2025-12-12T13:01:09.722 [DEBUG] [Thread-69987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:01:09.722 [DEBUG] [Thread-69987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:01:09.722 [DEBUG] [Thread-69987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:01:09.722 [DEBUG] [Thread-69987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:01:09.736 [INFO] [Thread-69987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:01:09.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:01:10.369 [DEBUG] [Thread-69987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:01:10.369 [DEBUG] [Thread-69987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:01:10.369 [DEBUG] [Thread-69987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:01:10.410 [DEBUG] [Thread-69987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:01:10.410 [DEBUG] [Thread-69987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:01:10.413 [DEBUG] [Thread-69987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:01:10.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:01:10.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:01:10.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:01:10.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:01:10.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:01:10.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:01:10.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:01:10.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:01:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:01:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.458776 -999.00  +21.40  42.51     24   +0.00 1 1 2 1 1   888    0 27.50 223.89 NA 33.2 42.5 308.8 46.4 26.0 -24.6 25.3 -25.4 25.2 -24.0 25.8 -22.5
2025-12-12T13:01:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:01:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:01:10.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.458776
2025-12-12T13:01:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:01:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:01:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:01:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:01:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:01:10.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:00:55', tmtdew=24.74, humidity=18.94, cloud=0.0, wind=33.89, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:00:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:01:10.441 [DEBUG] [Thread-69987] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:01:10.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:01:10.536 [DEBUG] [Thread-69990] [transport.py] [_log()] starting thread (client mode): 0xf5701cf0
2025-12-12T13:01:10.536 [DEBUG] [Thread-69990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:01:10.552 [DEBUG] [Thread-69990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:01:10.552 [INFO] [Thread-69990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:10.559 [DEBUG] [Thread-69990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] client lang: <none>
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] server lang: <none>
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] kex follows: False
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] Compression: none
2025-12-12T13:01:10.560 [DEBUG] [Thread-69990] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:01:10.619 [DEBUG] [Thread-69990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:01:10.619 [DEBUG] [Thread-69990] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:01:10.620 [DEBUG] [Thread-69990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:01:10.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:01:10.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:01:10.675 [DEBUG] [Thread-69990] [transport.py] [_log()] userauth is OK
2025-12-12T13:01:10.675 [DEBUG] [Thread-69990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:01:10.676 [DEBUG] [Thread-69990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:01:10.676 [DEBUG] [Thread-69990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:01:10.676 [DEBUG] [Thread-69990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:01:10.700 [INFO] [Thread-69990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:01:10.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:01:10.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:01:11.533 [DEBUG] [Thread-69990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:01:11.533 [DEBUG] [Thread-69990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:01:11.581 [DEBUG] [Thread-69990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:01:11.581 [DEBUG] [Thread-69990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:01:11.590 [DEBUG] [Thread-69990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:01:11.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:01:11.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:01:11.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:01:11.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:01:11.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:01:11.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:01:11.629 [DEBUG] [Thread-69990] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:01:11.778 [DEBUG] [Thread-69992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:26.825 [DEBUG] [Thread-69993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:40.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:40.297 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:01:41.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:01:41.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:01:41.852 [DEBUG] [Thread-69994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 1, 28), 24.91, 18.78, 0.0, 40.21, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:01:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:01:28
2025-12-12T13:01:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:01:42.610 [DEBUG] [Thread-69995] [transport.py] [_log()] starting thread (client mode): 0xf81e78b0
2025-12-12T13:01:42.611 [DEBUG] [Thread-69995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:01:42.630 [DEBUG] [Thread-69995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:01:42.631 [INFO] [Thread-69995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] client lang: <none>
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] server lang: <none>
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] kex follows: False
2025-12-12T13:01:42.634 [DEBUG] [Thread-69995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:01:42.635 [DEBUG] [Thread-69995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:01:42.635 [DEBUG] [Thread-69995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:01:42.635 [DEBUG] [Thread-69995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:01:42.635 [DEBUG] [Thread-69995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:01:42.635 [DEBUG] [Thread-69995] [transport.py] [_log()] Compression: none
2025-12-12T13:01:42.635 [DEBUG] [Thread-69995] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:01:42.648 [DEBUG] [Thread-69995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:01:42.651 [DEBUG] [Thread-69995] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:01:42.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:01:42.651 [DEBUG] [Thread-69995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:01:42.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:01:42.652 [DEBUG] [Thread-69995] [transport.py] [_log()] userauth is OK
2025-12-12T13:01:42.652 [DEBUG] [Thread-69995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:01:42.652 [DEBUG] [Thread-69995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:01:42.652 [DEBUG] [Thread-69995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:01:42.652 [DEBUG] [Thread-69995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:01:42.661 [INFO] [Thread-69995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:01:42.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:01:43.419 [DEBUG] [Thread-69997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:01:43.454 [DEBUG] [Thread-69995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:01:43.454 [DEBUG] [Thread-69995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:01:43.454 [DEBUG] [Thread-69995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:01:43.495 [DEBUG] [Thread-69995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:01:43.495 [DEBUG] [Thread-69995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:01:43.497 [DEBUG] [Thread-69995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:01:43.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:01:43.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:01:43.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:01:43.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:01:43.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:01:43.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:01:43.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:01:43.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:01:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:01:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.459123 -999.00  +21.20  47.64     23   -0.20 1 1 2 1 1   888    0 27.92 214.58 ----- 53.2 47.6 291.2 57.0 26.0 -25.6 25.4 -24.4 25.0 -23.1 25.9 -23.0
2025-12-12T13:01:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:01:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:01:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.459123
2025-12-12T13:01:43.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:01:43.523 [DEBUG] [Thread-69995] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:01:43.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:01:43.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:01:43.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:01:43.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:01:43.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:01:28', tmtdew=24.91, humidity=18.78, cloud=0.0, wind=40.21, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:01:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:01:43.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:01:43.622 [DEBUG] [Thread-69999] [transport.py] [_log()] starting thread (client mode): 0xf5700040
2025-12-12T13:01:43.622 [DEBUG] [Thread-69999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:01:43.637 [DEBUG] [Thread-69999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:01:43.637 [INFO] [Thread-69999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:01:43.644 [DEBUG] [Thread-69999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:01:43.645 [DEBUG] [Thread-69999] [transport.py] [_log()] client lang: <none>
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] server lang: <none>
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] kex follows: False
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] Compression: none
2025-12-12T13:01:43.646 [DEBUG] [Thread-69999] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:01:43.703 [DEBUG] [Thread-69999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:01:43.703 [DEBUG] [Thread-69999] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:01:43.704 [DEBUG] [Thread-69999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:01:43.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:01:43.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:01:43.759 [DEBUG] [Thread-69999] [transport.py] [_log()] userauth is OK
2025-12-12T13:01:43.759 [DEBUG] [Thread-69999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:01:43.759 [DEBUG] [Thread-69999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:01:43.759 [DEBUG] [Thread-69999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:01:43.759 [DEBUG] [Thread-69999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:01:43.778 [INFO] [Thread-69999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:01:43.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:01:43.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:01:44.613 [DEBUG] [Thread-69999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:01:44.613 [DEBUG] [Thread-69999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:01:44.661 [DEBUG] [Thread-69999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:01:44.661 [DEBUG] [Thread-69999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:01:44.670 [DEBUG] [Thread-69999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:01:44.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:01:44.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:01:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:01:44.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:01:44.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:01:44.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:01:44.704 [DEBUG] [Thread-69999] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:01:56.880 [DEBUG] [Thread-70001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:11.922 [DEBUG] [Thread-70002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:14.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:02:14.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:02:14.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:02:15.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 1, 28), 24.91, 18.78, 0.0, 40.21, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:02:15.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:01:28
2025-12-12T13:02:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:02:15.735 [DEBUG] [Thread-70003] [transport.py] [_log()] starting thread (client mode): 0xf575f100
2025-12-12T13:02:15.735 [DEBUG] [Thread-70003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:02:15.755 [DEBUG] [Thread-70003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:02:15.755 [INFO] [Thread-70003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] client lang: <none>
2025-12-12T13:02:15.758 [DEBUG] [Thread-70003] [transport.py] [_log()] server lang: <none>
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] kex follows: False
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] Compression: none
2025-12-12T13:02:15.759 [DEBUG] [Thread-70003] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:02:15.775 [DEBUG] [Thread-70003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:02:15.775 [DEBUG] [Thread-70003] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:02:15.776 [DEBUG] [Thread-70003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:02:15.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:02:15.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:02:15.820 [DEBUG] [Thread-70003] [transport.py] [_log()] userauth is OK
2025-12-12T13:02:15.820 [DEBUG] [Thread-70003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:02:15.820 [DEBUG] [Thread-70003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:02:15.820 [DEBUG] [Thread-70003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:02:15.820 [DEBUG] [Thread-70003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:02:15.840 [INFO] [Thread-70003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:02:15.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:02:16.500 [DEBUG] [Thread-70003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:02:16.500 [DEBUG] [Thread-70003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:02:16.500 [DEBUG] [Thread-70003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:02:16.541 [DEBUG] [Thread-70003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:02:16.541 [DEBUG] [Thread-70003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:02:16.543 [DEBUG] [Thread-70003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:02:16.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:02:16.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:02:16.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:02:16.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:02:16.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:02:16.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:02:16.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.459470 -999.00  +20.90  43.58     24   -0.20 1 1 2 1 1   888    0 27.36 195.36 ----- 41.7 43.6 316.8 61.6 25.8 -26.8 25.2 -25.7 24.8 -23.5 25.7 -23.1
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.459470
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:02:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:01:28', tmtdew=24.91, humidity=18.78, cloud=0.0, wind=40.21, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:01:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:02:16.562 [DEBUG] [Thread-70003] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:02:16.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:02:16.651 [DEBUG] [Thread-70006] [transport.py] [_log()] starting thread (client mode): 0xf570f100
2025-12-12T13:02:16.651 [DEBUG] [Thread-70006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:02:16.666 [DEBUG] [Thread-70006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:02:16.666 [INFO] [Thread-70006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:02:16.673 [DEBUG] [Thread-70006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] client lang: <none>
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] server lang: <none>
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] kex follows: False
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] Compression: none
2025-12-12T13:02:16.674 [DEBUG] [Thread-70006] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:02:16.736 [DEBUG] [Thread-70006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:02:16.736 [DEBUG] [Thread-70006] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:02:16.736 [DEBUG] [Thread-70006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:02:16.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:02:16.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:02:16.790 [DEBUG] [Thread-70006] [transport.py] [_log()] userauth is OK
2025-12-12T13:02:16.791 [DEBUG] [Thread-70006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:02:16.791 [DEBUG] [Thread-70006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:02:16.791 [DEBUG] [Thread-70006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:02:16.791 [DEBUG] [Thread-70006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:02:16.809 [INFO] [Thread-70006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:02:16.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:02:16.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:02:17.643 [DEBUG] [Thread-70006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:02:17.644 [DEBUG] [Thread-70006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:02:17.692 [DEBUG] [Thread-70006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:02:17.692 [DEBUG] [Thread-70006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:02:17.700 [DEBUG] [Thread-70006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:02:17.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:02:17.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:02:17.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:02:17.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:02:17.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:02:17.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:02:17.732 [DEBUG] [Thread-70006] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:02:26.950 [DEBUG] [Thread-70008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:40.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:40.443 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:41.995 [DEBUG] [Thread-70009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:43.470 [DEBUG] [Thread-70010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:02:47.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:02:47.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:02:47.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
2025-12-12T13:02:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 2, 32), 25.03, 18.56, 0.0, 44.48, 21.22, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:02:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:02:32
2025-12-12T13:02:48.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:02:48.724 [DEBUG] [Thread-70011] [transport.py] [_log()] starting thread (client mode): 0xf575f3d0
2025-12-12T13:02:48.724 [DEBUG] [Thread-70011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:02:48.744 [DEBUG] [Thread-70011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:02:48.744 [INFO] [Thread-70011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:48.747 [DEBUG] [Thread-70011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] client lang: <none>
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] server lang: <none>
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] kex follows: False
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] Compression: none
2025-12-12T13:02:48.748 [DEBUG] [Thread-70011] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:02:48.766 [DEBUG] [Thread-70011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:02:48.767 [DEBUG] [Thread-70011] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:02:48.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:02:48.768 [DEBUG] [Thread-70011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:02:48.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:02:48.770 [DEBUG] [Thread-70011] [transport.py] [_log()] userauth is OK
2025-12-12T13:02:48.770 [DEBUG] [Thread-70011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:02:48.770 [DEBUG] [Thread-70011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:02:48.770 [DEBUG] [Thread-70011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:02:48.770 [DEBUG] [Thread-70011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:02:48.795 [INFO] [Thread-70011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:02:48.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:02:49.603 [DEBUG] [Thread-70011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:02:49.603 [DEBUG] [Thread-70011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:02:49.603 [DEBUG] [Thread-70011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:02:49.644 [DEBUG] [Thread-70011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:02:49.644 [DEBUG] [Thread-70011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:02:49.647 [DEBUG] [Thread-70011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:02:49.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:02:49.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:02:49.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:02:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:02:49.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:02:49.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:02:49.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:02:49.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:02:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:02:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.459818 -999.00  +21.00  45.78     24   -0.20 1 1 2 1 1   888    0 27.35 172.21 ----- 51.5 45.8 311.8 52.6 25.8 -24.6 25.2 -24.7 24.9 -21.9 25.7 -23.3
2025-12-12T13:02:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:02:49.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:02:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.459818
2025-12-12T13:02:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:02:49.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:02:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:02:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:02:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:02:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:02:32', tmtdew=25.03, humidity=18.56, cloud=0.0, wind=44.48, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:02:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:02:49.673 [DEBUG] [Thread-70011] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:02:49.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:02:49.769 [DEBUG] [Thread-70014] [transport.py] [_log()] starting thread (client mode): 0xf575e7a0
2025-12-12T13:02:49.769 [DEBUG] [Thread-70014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:02:49.784 [DEBUG] [Thread-70014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:02:49.784 [INFO] [Thread-70014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:49.792 [DEBUG] [Thread-70014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] client lang: <none>
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] server lang: <none>
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] kex follows: False
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] Compression: none
2025-12-12T13:02:49.793 [DEBUG] [Thread-70014] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:02:49.850 [DEBUG] [Thread-70014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:02:49.851 [DEBUG] [Thread-70014] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:02:49.851 [DEBUG] [Thread-70014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:02:49.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:02:49.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:02:49.907 [DEBUG] [Thread-70014] [transport.py] [_log()] userauth is OK
2025-12-12T13:02:49.907 [DEBUG] [Thread-70014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:02:49.907 [DEBUG] [Thread-70014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:02:49.907 [DEBUG] [Thread-70014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:02:49.907 [DEBUG] [Thread-70014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:02:49.926 [INFO] [Thread-70014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:02:49.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:02:49.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:02:50.779 [DEBUG] [Thread-70014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:02:50.780 [DEBUG] [Thread-70014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:02:50.828 [DEBUG] [Thread-70014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:02:50.828 [DEBUG] [Thread-70014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:02:50.837 [DEBUG] [Thread-70014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:02:50.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:02:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:02:50.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:02:50.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:02:50.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:02:50.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:02:50.871 [DEBUG] [Thread-70014] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:02:57.028 [DEBUG] [Thread-70016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:12.065 [DEBUG] [Thread-70017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:20.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:03:20.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:03:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:03:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 3, 4), 25.31, 18.25, 0.0, 46.82, 21.38, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:03:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:03:04
2025-12-12T13:03:21.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:03:21.860 [DEBUG] [Thread-70018] [transport.py] [_log()] starting thread (client mode): 0xf81c2cb0
2025-12-12T13:03:21.860 [DEBUG] [Thread-70018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:03:21.880 [DEBUG] [Thread-70018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:03:21.881 [INFO] [Thread-70018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] client lang: <none>
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] server lang: <none>
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] kex follows: False
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] Compression: none
2025-12-12T13:03:21.884 [DEBUG] [Thread-70018] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:03:21.901 [DEBUG] [Thread-70018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:03:21.901 [DEBUG] [Thread-70018] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:03:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:03:21.902 [DEBUG] [Thread-70018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:03:21.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:03:21.904 [DEBUG] [Thread-70018] [transport.py] [_log()] userauth is OK
2025-12-12T13:03:21.904 [DEBUG] [Thread-70018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:03:21.904 [DEBUG] [Thread-70018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:03:21.904 [DEBUG] [Thread-70018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:03:21.904 [DEBUG] [Thread-70018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:03:21.925 [INFO] [Thread-70018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:03:21.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:03:22.568 [DEBUG] [Thread-70018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:03:22.568 [DEBUG] [Thread-70018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:03:22.568 [DEBUG] [Thread-70018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:03:22.609 [DEBUG] [Thread-70018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:03:22.609 [DEBUG] [Thread-70018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:03:22.612 [DEBUG] [Thread-70018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:03:22.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:03:22.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:03:22.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:03:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:03:22.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:03:22.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:03:22.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:03:22.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:03:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:03:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.460164 -999.00  +21.80  50.46     23   +0.00 1 2 2 1 1   888    0 26.78 159.48 ----- 40.1 50.5 308.0 58.6 25.8 -26.2 25.2 -24.8 25.0 -21.2 25.7 -22.5
2025-12-12T13:03:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:03:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:03:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.460164
2025-12-12T13:03:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:03:22.637 [DEBUG] [Thread-70018] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:03:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:03:04', tmtdew=25.31, humidity=18.25, cloud=0.0, wind=46.82, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:02:38.170', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:03:22.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:03:22.731 [DEBUG] [Thread-70021] [transport.py] [_log()] starting thread (client mode): 0xf575f280
2025-12-12T13:03:22.731 [DEBUG] [Thread-70021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:03:22.746 [DEBUG] [Thread-70021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:03:22.746 [INFO] [Thread-70021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] client lang: <none>
2025-12-12T13:03:22.753 [DEBUG] [Thread-70021] [transport.py] [_log()] server lang: <none>
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] kex follows: False
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] Compression: none
2025-12-12T13:03:22.754 [DEBUG] [Thread-70021] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:03:22.810 [DEBUG] [Thread-70021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:03:22.810 [DEBUG] [Thread-70021] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:03:22.811 [DEBUG] [Thread-70021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:03:22.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:03:22.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:03:22.866 [DEBUG] [Thread-70021] [transport.py] [_log()] userauth is OK
2025-12-12T13:03:22.867 [DEBUG] [Thread-70021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:03:22.867 [DEBUG] [Thread-70021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:03:22.867 [DEBUG] [Thread-70021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:03:22.867 [DEBUG] [Thread-70021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:03:22.882 [INFO] [Thread-70021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:03:22.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:03:22.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:03:23.710 [DEBUG] [Thread-70021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:03:23.711 [DEBUG] [Thread-70021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:03:23.759 [DEBUG] [Thread-70021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:03:23.759 [DEBUG] [Thread-70021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:03:23.768 [DEBUG] [Thread-70021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:03:23.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:03:23.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:03: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') -> 00000000
2025-12-12T13:03:23.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:03:23.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:03:23.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:03:23.807 [DEBUG] [Thread-70021] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:03:27.097 [DEBUG] [Thread-70023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:40.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:40.586 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:42.149 [DEBUG] [Thread-70024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:43.521 [DEBUG] [Thread-70025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:03:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:03:53.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:03:53.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:03:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 3, 36), 25.53, 17.76, 0.0, 54.52, 21.62, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:03:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:03:36
2025-12-12T13:03:54.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:03:54.793 [DEBUG] [Thread-70026] [transport.py] [_log()] starting thread (client mode): 0xf575d660
2025-12-12T13:03:54.793 [DEBUG] [Thread-70026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:03:54.815 [DEBUG] [Thread-70026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:03:54.815 [INFO] [Thread-70026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:03:54.818 [DEBUG] [Thread-70026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:03:54.818 [DEBUG] [Thread-70026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:03:54.818 [DEBUG] [Thread-70026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:03:54.818 [DEBUG] [Thread-70026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:54.818 [DEBUG] [Thread-70026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] client lang: <none>
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] server lang: <none>
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] kex follows: False
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] Compression: none
2025-12-12T13:03:54.819 [DEBUG] [Thread-70026] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:03:54.839 [DEBUG] [Thread-70026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:03:54.840 [DEBUG] [Thread-70026] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:03:54.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:03:54.841 [DEBUG] [Thread-70026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:03:54.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:03:54.843 [DEBUG] [Thread-70026] [transport.py] [_log()] userauth is OK
2025-12-12T13:03:54.843 [DEBUG] [Thread-70026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:03:54.843 [DEBUG] [Thread-70026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:03:54.843 [DEBUG] [Thread-70026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:03:54.843 [DEBUG] [Thread-70026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:03:54.866 [INFO] [Thread-70026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:03:54.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:03:55.639 [DEBUG] [Thread-70026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:03:55.640 [DEBUG] [Thread-70026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:03:55.640 [DEBUG] [Thread-70026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:03:55.681 [DEBUG] [Thread-70026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:03:55.681 [DEBUG] [Thread-70026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:03:55.684 [DEBUG] [Thread-70026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:03:55.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:03:55.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:03:55.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:03:55.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:03:55.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:03:55.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:03:55.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:03:55.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:03:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:03:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.460859 -999.00  +21.80  46.99     22   -0.20 1 1 2 1 1   888    0 25.47 121.90 ----- 54.7 47.0 329.8 59.5 25.9 -25.8 25.2 -25.0 25.2 -22.7 25.8 -22.9
2025-12-12T13:03:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:03:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:03:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.460859
2025-12-12T13:03:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:03:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:03:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:03:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:03:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:03:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:03:36', tmtdew=25.53, humidity=17.76, cloud=0.0, wind=54.52, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:03:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:03:55.710 [DEBUG] [Thread-70026] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:03:55.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:03:55.808 [DEBUG] [Thread-70029] [transport.py] [_log()] starting thread (client mode): 0xf575d780
2025-12-12T13:03:55.808 [DEBUG] [Thread-70029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:03:55.823 [DEBUG] [Thread-70029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:03:55.823 [INFO] [Thread-70029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:03:55.831 [DEBUG] [Thread-70029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:03:55.831 [DEBUG] [Thread-70029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:03:55.831 [DEBUG] [Thread-70029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] client lang: <none>
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] server lang: <none>
2025-12-12T13:03:55.832 [DEBUG] [Thread-70029] [transport.py] [_log()] kex follows: False
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] Compression: none
2025-12-12T13:03:55.833 [DEBUG] [Thread-70029] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:03:55.891 [DEBUG] [Thread-70029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:03:55.891 [DEBUG] [Thread-70029] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:03:55.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:03:55.892 [DEBUG] [Thread-70029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:03:55.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:03:55.947 [DEBUG] [Thread-70029] [transport.py] [_log()] userauth is OK
2025-12-12T13:03:55.947 [DEBUG] [Thread-70029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:03:55.947 [DEBUG] [Thread-70029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:03:55.947 [DEBUG] [Thread-70029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:03:55.947 [DEBUG] [Thread-70029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:03:55.966 [INFO] [Thread-70029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:03:55.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:03:55.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:03:56.856 [DEBUG] [Thread-70029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:03:56.856 [DEBUG] [Thread-70029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:03:56.904 [DEBUG] [Thread-70029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:03:56.904 [DEBUG] [Thread-70029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:03:56.913 [DEBUG] [Thread-70029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:03:56.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:03:56.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:03:56.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
2025-12-12T13:03:56.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:03:56.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:03:56.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:03:56.947 [DEBUG] [Thread-70029] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:03:57.180 [DEBUG] [Thread-70031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:12.230 [DEBUG] [Thread-70032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:04:26.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:04:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:04:27.257 [DEBUG] [Thread-70033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 4, 8), 25.15, 18.16, 0.0, 49.6, 21.28, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:04:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:04:08
2025-12-12T13:04:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:04:27.928 [DEBUG] [Thread-70034] [transport.py] [_log()] starting thread (client mode): 0xf575d960
2025-12-12T13:04:27.928 [DEBUG] [Thread-70034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:04:27.940 [DEBUG] [Thread-70034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:04:27.940 [INFO] [Thread-70034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:04:27.943 [DEBUG] [Thread-70034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] client lang: <none>
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] server lang: <none>
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] kex follows: False
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] Compression: none
2025-12-12T13:04:27.944 [DEBUG] [Thread-70034] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:04:27.954 [DEBUG] [Thread-70034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:04:27.954 [DEBUG] [Thread-70034] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:04:27.954 [DEBUG] [Thread-70034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:04:27.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:04:27.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:04:27.956 [DEBUG] [Thread-70034] [transport.py] [_log()] userauth is OK
2025-12-12T13:04:27.956 [DEBUG] [Thread-70034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:04:27.956 [DEBUG] [Thread-70034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:04:27.956 [DEBUG] [Thread-70034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:04:27.956 [DEBUG] [Thread-70034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:04:27.969 [INFO] [Thread-70034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:04:27.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:04:28.567 [DEBUG] [Thread-70034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:04:28.568 [DEBUG] [Thread-70034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:04:28.568 [DEBUG] [Thread-70034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:04:28.609 [DEBUG] [Thread-70034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:04:28.609 [DEBUG] [Thread-70034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:04:28.612 [DEBUG] [Thread-70034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:04:28.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:04:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:04:28.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:04:28.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:04:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:04:28.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:04:28.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:04:28.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:04:28.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:04:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.461206 -999.00  +20.70  30.46     24   -0.50 1 1 2 1 1   888    0 24.74 94.16 ----- 36.8 30.5 350.2 69.4 25.8 -25.6 25.2 -27.2 25.0 -24.5 25.8 -23.8
2025-12-12T13:04:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:04:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:04:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.461206
2025-12-12T13:04:28.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:04:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:04:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:04:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:04:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:04:28.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:04:08', tmtdew=25.15, humidity=18.16, cloud=0.0, wind=49.6, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:04:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:04:28.638 [DEBUG] [Thread-70034] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:04:28.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:04:28.761 [DEBUG] [Thread-70037] [transport.py] [_log()] starting thread (client mode): 0xf575caf0
2025-12-12T13:04:28.761 [DEBUG] [Thread-70037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:04:28.775 [DEBUG] [Thread-70037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:04:28.775 [INFO] [Thread-70037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:04:28.782 [DEBUG] [Thread-70037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:04:28.782 [DEBUG] [Thread-70037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] client lang: <none>
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] server lang: <none>
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] kex follows: False
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:04:28.783 [DEBUG] [Thread-70037] [transport.py] [_log()] Compression: none
2025-12-12T13:04:28.784 [DEBUG] [Thread-70037] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:04:28.844 [DEBUG] [Thread-70037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:04:28.844 [DEBUG] [Thread-70037] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:04:28.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:04:28.845 [DEBUG] [Thread-70037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:04:28.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:04:28.903 [DEBUG] [Thread-70037] [transport.py] [_log()] userauth is OK
2025-12-12T13:04:28.903 [DEBUG] [Thread-70037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:04:28.903 [DEBUG] [Thread-70037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:04:28.903 [DEBUG] [Thread-70037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:04:28.903 [DEBUG] [Thread-70037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:04:28.922 [INFO] [Thread-70037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:04:28.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:04:28.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:04:29.759 [DEBUG] [Thread-70037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:04:29.759 [DEBUG] [Thread-70037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:04:29.807 [DEBUG] [Thread-70037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:04:29.807 [DEBUG] [Thread-70037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:04:29.816 [DEBUG] [Thread-70037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:04:29.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:04:29.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:04:29.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:04:29.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:04:29.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:04:29.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:04:29.851 [DEBUG] [Thread-70037] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:04:40.726 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:40.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:42.282 [DEBUG] [Thread-70039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:43.575 [DEBUG] [Thread-70040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:57.314 [DEBUG] [Thread-70041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:04:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:04:59.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:04:59.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:05:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 4, 40), 25.33, 17.74, 0.0, 55.28, 21.37, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:05:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:04:40
2025-12-12T13:05:00.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:05:00.847 [DEBUG] [Thread-70042] [transport.py] [_log()] starting thread (client mode): 0xf575d8a0
2025-12-12T13:05:00.847 [DEBUG] [Thread-70042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:05:00.869 [DEBUG] [Thread-70042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:05:00.869 [INFO] [Thread-70042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] client lang: <none>
2025-12-12T13:05:00.873 [DEBUG] [Thread-70042] [transport.py] [_log()] server lang: <none>
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] kex follows: False
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] Compression: none
2025-12-12T13:05:00.874 [DEBUG] [Thread-70042] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:05:00.890 [DEBUG] [Thread-70042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:05:00.891 [DEBUG] [Thread-70042] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:05:00.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:05:00.892 [DEBUG] [Thread-70042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:05:00.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:05:00.893 [DEBUG] [Thread-70042] [transport.py] [_log()] userauth is OK
2025-12-12T13:05:00.893 [DEBUG] [Thread-70042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:05:00.893 [DEBUG] [Thread-70042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:05:00.894 [DEBUG] [Thread-70042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:05:00.894 [DEBUG] [Thread-70042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:05:00.918 [INFO] [Thread-70042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:05:00.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:05:01.686 [DEBUG] [Thread-70042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:05:01.686 [DEBUG] [Thread-70042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:05:01.686 [DEBUG] [Thread-70042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:05:01.727 [DEBUG] [Thread-70042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:05:01.727 [DEBUG] [Thread-70042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:05:01.729 [DEBUG] [Thread-70042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:05:01.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:05:01.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:05:01.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:05:01.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:05:01.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:05:01.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:05:01.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:05:01.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:05:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:05:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.461553 -999.00  +20.70  59.31     24   -0.50 1 1 2 1 1   888    0 24.29 77.38 ----- 56.1 59.3 337.2 66.6 25.7 -24.7 25.0 -24.9 25.0 -23.2 25.6 -22.4
2025-12-12T13:05:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:05:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:05:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.461553
2025-12-12T13:05:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:05:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:05:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:05:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:05:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:05:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:04:40', tmtdew=25.33, humidity=17.74, cloud=0.0, wind=55.28, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:04:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:05:01.746 [DEBUG] [Thread-70042] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:05:01.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:05:01.840 [DEBUG] [Thread-70045] [transport.py] [_log()] starting thread (client mode): 0xf81f13f0
2025-12-12T13:05:01.840 [DEBUG] [Thread-70045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:05:01.856 [DEBUG] [Thread-70045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:05:01.856 [INFO] [Thread-70045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:05:01.863 [DEBUG] [Thread-70045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:05:01.863 [DEBUG] [Thread-70045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:05:01.863 [DEBUG] [Thread-70045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] client lang: <none>
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] server lang: <none>
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] kex follows: False
2025-12-12T13:05:01.864 [DEBUG] [Thread-70045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:05:01.865 [DEBUG] [Thread-70045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:05:01.865 [DEBUG] [Thread-70045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:05:01.865 [DEBUG] [Thread-70045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:05:01.865 [DEBUG] [Thread-70045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:05:01.865 [DEBUG] [Thread-70045] [transport.py] [_log()] Compression: none
2025-12-12T13:05:01.865 [DEBUG] [Thread-70045] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:05:01.924 [DEBUG] [Thread-70045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:05:01.925 [DEBUG] [Thread-70045] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:05:01.926 [DEBUG] [Thread-70045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:05:01.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:05:01.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:05:01.982 [DEBUG] [Thread-70045] [transport.py] [_log()] userauth is OK
2025-12-12T13:05:01.983 [DEBUG] [Thread-70045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:05:01.983 [DEBUG] [Thread-70045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:05:01.983 [DEBUG] [Thread-70045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:05:01.983 [DEBUG] [Thread-70045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:05:02.001 [INFO] [Thread-70045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:05:02.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:05:02.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:05:02.863 [DEBUG] [Thread-70045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:05:02.863 [DEBUG] [Thread-70045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:05:02.910 [DEBUG] [Thread-70045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:05:02.911 [DEBUG] [Thread-70045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:05:02.919 [DEBUG] [Thread-70045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:05:02.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:05:02.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:05:02.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:05:02.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:05:02.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:05:02.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:05:02.955 [DEBUG] [Thread-70045] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:05:12.347 [DEBUG] [Thread-70047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:05:27.393 [DEBUG] [Thread-70048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:05:32.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:05:32.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:05:32.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:05:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 5, 12), 25.08, 17.99, 0.0, 54.45, 21.07, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:05:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:05:12
2025-12-12T13:05:33.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:05:33.987 [DEBUG] [Thread-70049] [transport.py] [_log()] starting thread (client mode): 0xf81f34f0
2025-12-12T13:05:33.987 [DEBUG] [Thread-70049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:05:34.007 [DEBUG] [Thread-70049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:05:34.007 [INFO] [Thread-70049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] client lang: <none>
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] server lang: <none>
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] kex follows: False
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] Compression: none
2025-12-12T13:05:34.011 [DEBUG] [Thread-70049] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:05:34.025 [DEBUG] [Thread-70049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:05:34.026 [DEBUG] [Thread-70049] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:05:34.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:05:34.026 [DEBUG] [Thread-70049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:05:34.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:05:34.027 [DEBUG] [Thread-70049] [transport.py] [_log()] userauth is OK
2025-12-12T13:05:34.027 [DEBUG] [Thread-70049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:05:34.027 [DEBUG] [Thread-70049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:05:34.027 [DEBUG] [Thread-70049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:05:34.027 [DEBUG] [Thread-70049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:05:34.040 [INFO] [Thread-70049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:05:34.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:05:34.695 [DEBUG] [Thread-70049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:05:34.695 [DEBUG] [Thread-70049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:05:34.695 [DEBUG] [Thread-70049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:05:34.736 [DEBUG] [Thread-70049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:05:34.736 [DEBUG] [Thread-70049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:05:34.739 [DEBUG] [Thread-70049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:05:34.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:05:34.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:05:34.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:05:34.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:05:34.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:05:34.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:05:34.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:05:34.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:05:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:05:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.461900 -999.00  +20.90  43.94     24   -0.30 1 1 2 1 1   888    0 23.59 62.91 ----- 43.1 43.9 327.6 70.7 25.6 -24.2 24.9 -26.3 25.1 -22.6 25.5 -22.5
2025-12-12T13:05:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:05:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:05:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.461900
2025-12-12T13:05:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:05:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:05:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:05:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:05:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:05:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:05:12', tmtdew=25.08, humidity=17.99, cloud=0.0, wind=54.45, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:05:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:05:34.766 [DEBUG] [Thread-70049] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:05:34.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:05:34.862 [DEBUG] [Thread-70052] [transport.py] [_log()] starting thread (client mode): 0xf575d1b0
2025-12-12T13:05:34.863 [DEBUG] [Thread-70052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:05:34.877 [DEBUG] [Thread-70052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:05:34.878 [INFO] [Thread-70052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:05:34.885 [DEBUG] [Thread-70052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:05:34.885 [DEBUG] [Thread-70052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:05:34.885 [DEBUG] [Thread-70052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] client lang: <none>
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] server lang: <none>
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] kex follows: False
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:05:34.886 [DEBUG] [Thread-70052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:05:34.887 [DEBUG] [Thread-70052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:05:34.887 [DEBUG] [Thread-70052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:05:34.887 [DEBUG] [Thread-70052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:05:34.887 [DEBUG] [Thread-70052] [transport.py] [_log()] Compression: none
2025-12-12T13:05:34.887 [DEBUG] [Thread-70052] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:05:34.943 [DEBUG] [Thread-70052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:05:34.944 [DEBUG] [Thread-70052] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:05:34.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:05:34.946 [DEBUG] [Thread-70052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:05:34.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:05:34.999 [DEBUG] [Thread-70052] [transport.py] [_log()] userauth is OK
2025-12-12T13:05:34.999 [DEBUG] [Thread-70052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:05:34.999 [DEBUG] [Thread-70052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:05:34.999 [DEBUG] [Thread-70052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:05:35.000 [DEBUG] [Thread-70052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:05:35.019 [INFO] [Thread-70052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:05:35.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:05:35.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:05:35.846 [DEBUG] [Thread-70052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:05:35.847 [DEBUG] [Thread-70052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:05:35.895 [DEBUG] [Thread-70052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:05:35.895 [DEBUG] [Thread-70052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:05:35.904 [DEBUG] [Thread-70052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:05:35.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:05:35.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:05:35.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:05:35.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:05:35.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:05:35.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:05:35.940 [DEBUG] [Thread-70052] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:05:40.868 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:05:40.869 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:05:42.421 [DEBUG] [Thread-70054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:05:43.637 [DEBUG] [Thread-70055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:05:57.464 [DEBUG] [Thread-70056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:06:05.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:06:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:06:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 5, 44), 24.9, 18.14, 0.0, 49.23, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:06:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:05:44
2025-12-12T13:06:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:06:06.928 [DEBUG] [Thread-70057] [transport.py] [_log()] starting thread (client mode): 0xf575f0d0
2025-12-12T13:06:06.928 [DEBUG] [Thread-70057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:06:06.949 [DEBUG] [Thread-70057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:06:06.949 [INFO] [Thread-70057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] client lang: <none>
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] server lang: <none>
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] kex follows: False
2025-12-12T13:06:06.952 [DEBUG] [Thread-70057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:06:06.953 [DEBUG] [Thread-70057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:06:06.953 [DEBUG] [Thread-70057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:06:06.953 [DEBUG] [Thread-70057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:06:06.953 [DEBUG] [Thread-70057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:06:06.953 [DEBUG] [Thread-70057] [transport.py] [_log()] Compression: none
2025-12-12T13:06:06.953 [DEBUG] [Thread-70057] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:06:06.971 [DEBUG] [Thread-70057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:06:06.972 [DEBUG] [Thread-70057] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:06:06.972 [DEBUG] [Thread-70057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:06:06.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:06:06.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:06:06.974 [DEBUG] [Thread-70057] [transport.py] [_log()] userauth is OK
2025-12-12T13:06:06.974 [DEBUG] [Thread-70057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:06:06.974 [DEBUG] [Thread-70057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:06:06.974 [DEBUG] [Thread-70057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:06:06.975 [DEBUG] [Thread-70057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:06:06.992 [INFO] [Thread-70057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:06:06.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:06:07.825 [DEBUG] [Thread-70057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:06:07.825 [DEBUG] [Thread-70057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:06:07.825 [DEBUG] [Thread-70057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:06:07.868 [DEBUG] [Thread-70057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:06:07.869 [DEBUG] [Thread-70057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:06:07.872 [DEBUG] [Thread-70057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:06:07.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:06:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:06:07.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:06:07.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:06:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:06:07.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:06:07.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.462248 -999.00  +21.00  33.27     24   -0.20 1 1 2 1 1   888    0 22.71 40.26 ----- 32.6 33.3 313.5 54.8 25.7 -25.6 25.0 -24.9 25.1 -22.6 25.6 -22.7
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.462248
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:06:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:06:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:06:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:06:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:05:44', tmtdew=24.9, humidity=18.14, cloud=0.0, wind=49.23, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:05:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:06:07.889 [DEBUG] [Thread-70057] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:06:07.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:06:07.975 [DEBUG] [Thread-70060] [transport.py] [_log()] starting thread (client mode): 0xf575f310
2025-12-12T13:06:07.975 [DEBUG] [Thread-70060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:06:07.990 [DEBUG] [Thread-70060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:06:07.990 [INFO] [Thread-70060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] client lang: <none>
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] server lang: <none>
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] kex follows: False
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] Compression: none
2025-12-12T13:06:07.998 [DEBUG] [Thread-70060] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:06:08.054 [DEBUG] [Thread-70060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:06:08.055 [DEBUG] [Thread-70060] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:06:08.055 [DEBUG] [Thread-70060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:06:08.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:06:08.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:06:08.112 [DEBUG] [Thread-70060] [transport.py] [_log()] userauth is OK
2025-12-12T13:06:08.112 [DEBUG] [Thread-70060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:06:08.112 [DEBUG] [Thread-70060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:06:08.112 [DEBUG] [Thread-70060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:06:08.112 [DEBUG] [Thread-70060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:06:08.127 [INFO] [Thread-70060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:06:08.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:06:08.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:06:08.987 [DEBUG] [Thread-70060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:06:08.987 [DEBUG] [Thread-70060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:06:09.036 [DEBUG] [Thread-70060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:06:09.036 [DEBUG] [Thread-70060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:06:09.044 [DEBUG] [Thread-70060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:06:09.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:06:09.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:06:09.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:06:09.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:06:09.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:06:09.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:06:09.078 [DEBUG] [Thread-70060] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:06:12.494 [DEBUG] [Thread-70062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:27.529 [DEBUG] [Thread-70063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:39.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:06:39.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:06:39.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:06:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 6, 16), 24.92, 18.11, 0.0, 48.8, 20.74, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:06:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:06:16
2025-12-12T13:06:39.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:06:40.068 [DEBUG] [Thread-70064] [transport.py] [_log()] starting thread (client mode): 0xf575d840
2025-12-12T13:06:40.068 [DEBUG] [Thread-70064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:06:40.089 [DEBUG] [Thread-70064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:06:40.089 [INFO] [Thread-70064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] client lang: <none>
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] server lang: <none>
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] kex follows: False
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:06:40.092 [DEBUG] [Thread-70064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:06:40.093 [DEBUG] [Thread-70064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:06:40.093 [DEBUG] [Thread-70064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:06:40.093 [DEBUG] [Thread-70064] [transport.py] [_log()] Compression: none
2025-12-12T13:06:40.093 [DEBUG] [Thread-70064] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:06:40.110 [DEBUG] [Thread-70064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:06:40.111 [DEBUG] [Thread-70064] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:06:40.112 [DEBUG] [Thread-70064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:06:40.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:06:40.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:06:40.113 [DEBUG] [Thread-70064] [transport.py] [_log()] userauth is OK
2025-12-12T13:06:40.113 [DEBUG] [Thread-70064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:06:40.114 [DEBUG] [Thread-70064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:06:40.114 [DEBUG] [Thread-70064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:06:40.114 [DEBUG] [Thread-70064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:06:40.136 [INFO] [Thread-70064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:06:40.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:06:40.784 [DEBUG] [Thread-70064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:06:40.785 [DEBUG] [Thread-70064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:06:40.785 [DEBUG] [Thread-70064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:06:40.826 [DEBUG] [Thread-70064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:06:40.826 [DEBUG] [Thread-70064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:06:40.829 [DEBUG] [Thread-70064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:06:40.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:06:40.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:06:40.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:06:40.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:06:40.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:06:40.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:06:40.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:06:40.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:06:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:06:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.462595 -999.00  +21.30  39.99     23   -0.30 1 1 2 1 1   888    0 22.57 29.30 ----- 35.3 40.0 325.8 48.0 25.8 -25.3 25.1 -25.3 25.1 -22.7 25.7 -22.8
2025-12-12T13:06:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:06:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:06:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.462595
2025-12-12T13:06:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:06:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:06:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:06:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:06:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:06:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:06:16', tmtdew=24.92, humidity=18.11, cloud=0.0, wind=48.8, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:06:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:06:40.856 [DEBUG] [Thread-70064] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:06:40.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:06:40.952 [DEBUG] [Thread-70067] [transport.py] [_log()] starting thread (client mode): 0xfabc7910
2025-12-12T13:06:40.952 [DEBUG] [Thread-70067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:06:40.966 [DEBUG] [Thread-70067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:06:40.967 [INFO] [Thread-70067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:06:40.981 [DEBUG] [Thread-70067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:06:40.981 [DEBUG] [Thread-70067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:06:40.981 [DEBUG] [Thread-70067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:06:40.981 [DEBUG] [Thread-70067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:40.981 [DEBUG] [Thread-70067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] client lang: <none>
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] server lang: <none>
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] kex follows: False
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] Compression: none
2025-12-12T13:06:40.982 [DEBUG] [Thread-70067] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:06:41.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:41.011 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:41.030 [DEBUG] [Thread-70067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:06:41.031 [DEBUG] [Thread-70067] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:06:41.031 [DEBUG] [Thread-70067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:06:41.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:06:41.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:06:41.086 [DEBUG] [Thread-70067] [transport.py] [_log()] userauth is OK
2025-12-12T13:06:41.086 [DEBUG] [Thread-70067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:06:41.086 [DEBUG] [Thread-70067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:06:41.086 [DEBUG] [Thread-70067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:06:41.086 [DEBUG] [Thread-70067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:06:41.100 [INFO] [Thread-70067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:06:41.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:06:41.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:06:41.932 [DEBUG] [Thread-70067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:06:41.932 [DEBUG] [Thread-70067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:06:41.980 [DEBUG] [Thread-70067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:06:41.980 [DEBUG] [Thread-70067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:06:41.989 [DEBUG] [Thread-70067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:06:41.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:06:41.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:06:42.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:06:42.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:06:42.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:06:42.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:06:42.023 [DEBUG] [Thread-70067] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:06:42.561 [DEBUG] [Thread-70069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:43.695 [DEBUG] [Thread-70070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:06:57.605 [DEBUG] [Thread-70071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:12.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:07:12.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:07:12.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:07:12.633 [DEBUG] [Thread-70072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:12.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 6, 48), 24.49, 18.67, 0.0, 42.63, 20.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:07:12.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:06:48
2025-12-12T13:07:12.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:07:13.008 [DEBUG] [Thread-70073] [transport.py] [_log()] starting thread (client mode): 0xf81f3e80
2025-12-12T13:07:13.008 [DEBUG] [Thread-70073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:07:13.029 [DEBUG] [Thread-70073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:07:13.029 [INFO] [Thread-70073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:07:13.032 [DEBUG] [Thread-70073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:07:13.032 [DEBUG] [Thread-70073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:07:13.032 [DEBUG] [Thread-70073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] client lang: <none>
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] server lang: <none>
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] kex follows: False
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] Compression: none
2025-12-12T13:07:13.033 [DEBUG] [Thread-70073] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:07:13.051 [DEBUG] [Thread-70073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:07:13.051 [DEBUG] [Thread-70073] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:07:13.052 [DEBUG] [Thread-70073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:07:13.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:07:13.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:07:13.054 [DEBUG] [Thread-70073] [transport.py] [_log()] userauth is OK
2025-12-12T13:07:13.054 [DEBUG] [Thread-70073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:07:13.054 [DEBUG] [Thread-70073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:07:13.054 [DEBUG] [Thread-70073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:07:13.054 [DEBUG] [Thread-70073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:07:13.089 [INFO] [Thread-70073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:07:13.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:07:13.899 [DEBUG] [Thread-70073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:07:13.899 [DEBUG] [Thread-70073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:07:13.900 [DEBUG] [Thread-70073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:07:13.946 [DEBUG] [Thread-70073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:07:13.946 [DEBUG] [Thread-70073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:07:13.949 [DEBUG] [Thread-70073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:07:13.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:07:13.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:07:13.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:07:13.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:07:13.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:07:13.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:07:13.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:07:13.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:07:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:07:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.462943 -999.00  +21.10  42.83     23   -0.70 1 1 2 1 1   888    0 22.37 20.77 ----- 36.7 42.8 329.0 58.1 25.8 -25.4 25.1 -25.9 25.1 -22.7 25.8 -22.9
2025-12-12T13:07:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:07:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:07:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.462943
2025-12-12T13:07:13.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:07:13.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:07:13.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:07:13.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:07:13.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:07:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:06:48', tmtdew=24.49, humidity=18.67, cloud=0.0, wind=42.63, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:06:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:07:13.976 [DEBUG] [Thread-70073] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:07:14.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:07:14.072 [DEBUG] [Thread-70076] [transport.py] [_log()] starting thread (client mode): 0xfabc6b60
2025-12-12T13:07:14.072 [DEBUG] [Thread-70076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:07:14.087 [DEBUG] [Thread-70076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:07:14.087 [INFO] [Thread-70076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:07:14.094 [DEBUG] [Thread-70076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:07:14.094 [DEBUG] [Thread-70076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] client lang: <none>
2025-12-12T13:07:14.095 [DEBUG] [Thread-70076] [transport.py] [_log()] server lang: <none>
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] kex follows: False
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] Compression: none
2025-12-12T13:07:14.096 [DEBUG] [Thread-70076] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:07:14.152 [DEBUG] [Thread-70076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:07:14.152 [DEBUG] [Thread-70076] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:07:14.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:07:14.153 [DEBUG] [Thread-70076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:07:14.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:07:14.208 [DEBUG] [Thread-70076] [transport.py] [_log()] userauth is OK
2025-12-12T13:07:14.208 [DEBUG] [Thread-70076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:07:14.208 [DEBUG] [Thread-70076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:07:14.208 [DEBUG] [Thread-70076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:07:14.209 [DEBUG] [Thread-70076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:07:14.227 [INFO] [Thread-70076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:07:14.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:07:14.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:07:15.060 [DEBUG] [Thread-70076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:07:15.061 [DEBUG] [Thread-70076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:07:15.109 [DEBUG] [Thread-70076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:07:15.109 [DEBUG] [Thread-70076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:07:15.117 [DEBUG] [Thread-70076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:07:15.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:07:15.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:07:15.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:07:15.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:07:15.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:07:15.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:07:15.151 [DEBUG] [Thread-70076] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:07:27.657 [DEBUG] [Thread-70078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:41.152 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:41.153 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:42.695 [DEBUG] [Thread-70079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:43.752 [DEBUG] [Thread-70080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:07:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:07:45.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:07:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:07:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 7, 20), 24.65, 18.51, 0.0, 43.49, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:07:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:07:20
2025-12-12T13:07:45.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:07:46.129 [DEBUG] [Thread-70081] [transport.py] [_log()] starting thread (client mode): 0xf81c14e0
2025-12-12T13:07:46.129 [DEBUG] [Thread-70081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:07:46.150 [DEBUG] [Thread-70081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:07:46.150 [INFO] [Thread-70081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:07:46.151 [DEBUG] [Thread-70081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:07:46.151 [DEBUG] [Thread-70081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] client lang: <none>
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] server lang: <none>
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] kex follows: False
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:07:46.152 [DEBUG] [Thread-70081] [transport.py] [_log()] Compression: none
2025-12-12T13:07:46.153 [DEBUG] [Thread-70081] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:07:46.171 [DEBUG] [Thread-70081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:07:46.172 [DEBUG] [Thread-70081] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:07:46.172 [DEBUG] [Thread-70081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:07:46.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:07:46.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:07:46.174 [DEBUG] [Thread-70081] [transport.py] [_log()] userauth is OK
2025-12-12T13:07:46.174 [DEBUG] [Thread-70081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:07:46.175 [DEBUG] [Thread-70081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:07:46.175 [DEBUG] [Thread-70081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:07:46.175 [DEBUG] [Thread-70081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:07:46.210 [INFO] [Thread-70081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:07:46.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:07:46.844 [DEBUG] [Thread-70081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:07:46.844 [DEBUG] [Thread-70081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:07:46.845 [DEBUG] [Thread-70081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:07:46.885 [DEBUG] [Thread-70081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:07:46.885 [DEBUG] [Thread-70081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:07:46.887 [DEBUG] [Thread-70081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:07:46.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:07:46.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:07:46.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:07:46.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:07:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:07:46.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:07:46.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:07:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:07:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:07:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.463289 -999.00  +21.20  44.44     22   -0.70 1 1 2 1 1   888    0 22.28 16.81 ----- 36.4 44.4 336.4 58.0 25.7 -24.7 25.0 -25.9 25.2 -23.0 25.7 -22.5
2025-12-12T13:07:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:07:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:07:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.463289
2025-12-12T13:07:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:07:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:07:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:07:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:07:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:07:46.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:07:20', tmtdew=24.65, humidity=18.51, cloud=0.0, wind=43.49, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:07:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:07:46.914 [DEBUG] [Thread-70081] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:07:47.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:07:47.018 [DEBUG] [Thread-70084] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-12T13:07:47.018 [DEBUG] [Thread-70084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:07:47.038 [DEBUG] [Thread-70084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:07:47.038 [INFO] [Thread-70084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:07:47.051 [DEBUG] [Thread-70084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:07:47.051 [DEBUG] [Thread-70084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:07:47.051 [DEBUG] [Thread-70084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:07:47.051 [DEBUG] [Thread-70084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:47.051 [DEBUG] [Thread-70084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:07:47.051 [DEBUG] [Thread-70084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] client lang: <none>
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] server lang: <none>
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] kex follows: False
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] Compression: none
2025-12-12T13:07:47.052 [DEBUG] [Thread-70084] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:07:47.110 [DEBUG] [Thread-70084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:07:47.111 [DEBUG] [Thread-70084] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:07:47.111 [DEBUG] [Thread-70084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:07:47.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:07:47.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:07:47.173 [DEBUG] [Thread-70084] [transport.py] [_log()] userauth is OK
2025-12-12T13:07:47.173 [DEBUG] [Thread-70084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:07:47.173 [DEBUG] [Thread-70084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:07:47.173 [DEBUG] [Thread-70084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:07:47.173 [DEBUG] [Thread-70084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:07:47.194 [INFO] [Thread-70084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:07:47.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:07:47.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:07:48.040 [DEBUG] [Thread-70084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:07:48.040 [DEBUG] [Thread-70084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:07:48.088 [DEBUG] [Thread-70084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:07:48.088 [DEBUG] [Thread-70084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:07:48.096 [DEBUG] [Thread-70084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:07:48.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:07:48.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:07:48.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:07:48.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:07:48.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:07:48.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:07:48.130 [DEBUG] [Thread-70084] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:07:57.723 [DEBUG] [Thread-70086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:12.765 [DEBUG] [Thread-70087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:08:18.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:08:18.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:08:18.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 7, 52), 25.7, 17.26, 0.0, 43.42, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:08:18.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:07:52
2025-12-12T13:08:18.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:08:19.113 [DEBUG] [Thread-70088] [transport.py] [_log()] starting thread (client mode): 0xf81c2a70
2025-12-12T13:08:19.113 [DEBUG] [Thread-70088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:08:19.136 [DEBUG] [Thread-70088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:08:19.136 [INFO] [Thread-70088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] client lang: <none>
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] server lang: <none>
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] kex follows: False
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:08:19.139 [DEBUG] [Thread-70088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:08:19.140 [DEBUG] [Thread-70088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:08:19.140 [DEBUG] [Thread-70088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:08:19.140 [DEBUG] [Thread-70088] [transport.py] [_log()] Compression: none
2025-12-12T13:08:19.140 [DEBUG] [Thread-70088] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:08:19.155 [DEBUG] [Thread-70088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:08:19.156 [DEBUG] [Thread-70088] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:08:19.156 [DEBUG] [Thread-70088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:08:19.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:08:19.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:08:19.158 [DEBUG] [Thread-70088] [transport.py] [_log()] userauth is OK
2025-12-12T13:08:19.158 [DEBUG] [Thread-70088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:08:19.158 [DEBUG] [Thread-70088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:08:19.158 [DEBUG] [Thread-70088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:08:19.158 [DEBUG] [Thread-70088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:08:19.181 [INFO] [Thread-70088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:08:19.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:08:19.981 [DEBUG] [Thread-70088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:08:19.981 [DEBUG] [Thread-70088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:08:19.981 [DEBUG] [Thread-70088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:08:20.022 [DEBUG] [Thread-70088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:08:20.022 [DEBUG] [Thread-70088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:08:20.025 [DEBUG] [Thread-70088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:08:20.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:08:20.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:08:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:08:20.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:08:20.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:08:20.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:08:20.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:08:20.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:08:20.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:08:20.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.463637 -999.00  +20.90  37.12     23   -0.70 1 1 2 1 1   888    0 21.88 13.09 ----- 43.9 37.1 349.7 63.0 25.7 -26.2 25.0 -26.2 25.0 -23.6 25.6 -23.5
2025-12-12T13:08:20.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:08:20.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:08:20.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.463637
2025-12-12T13:08:20.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:08:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:08:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:08:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:08:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:08:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:07:52', tmtdew=25.7, humidity=17.26, cloud=0.0, wind=43.42, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:07:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:08:20.049 [DEBUG] [Thread-70088] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:08:20.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:08:20.155 [DEBUG] [Thread-70091] [transport.py] [_log()] starting thread (client mode): 0xf575dc00
2025-12-12T13:08:20.155 [DEBUG] [Thread-70091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:08:20.169 [DEBUG] [Thread-70091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:08:20.170 [INFO] [Thread-70091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:08:20.177 [DEBUG] [Thread-70091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:08:20.177 [DEBUG] [Thread-70091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] client lang: <none>
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] server lang: <none>
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] kex follows: False
2025-12-12T13:08:20.178 [DEBUG] [Thread-70091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:08:20.179 [DEBUG] [Thread-70091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:08:20.179 [DEBUG] [Thread-70091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:08:20.179 [DEBUG] [Thread-70091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:08:20.179 [DEBUG] [Thread-70091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:08:20.179 [DEBUG] [Thread-70091] [transport.py] [_log()] Compression: none
2025-12-12T13:08:20.179 [DEBUG] [Thread-70091] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:08:20.235 [DEBUG] [Thread-70091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:08:20.236 [DEBUG] [Thread-70091] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:08:20.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:08:20.237 [DEBUG] [Thread-70091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:08:20.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:08:20.292 [DEBUG] [Thread-70091] [transport.py] [_log()] userauth is OK
2025-12-12T13:08:20.292 [DEBUG] [Thread-70091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:08:20.292 [DEBUG] [Thread-70091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:08:20.292 [DEBUG] [Thread-70091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:08:20.292 [DEBUG] [Thread-70091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:08:20.311 [INFO] [Thread-70091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:08:20.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:08:20.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:08:21.120 [DEBUG] [Thread-70091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:08:21.120 [DEBUG] [Thread-70091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:08:21.168 [DEBUG] [Thread-70091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:08:21.168 [DEBUG] [Thread-70091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:08:21.177 [DEBUG] [Thread-70091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:08:21.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:08:21.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:08:21.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:08:21.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:08:21.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:08:21.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:08:21.212 [DEBUG] [Thread-70091] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:08:27.796 [DEBUG] [Thread-70093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:41.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:41.294 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:42.839 [DEBUG] [Thread-70094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:43.803 [DEBUG] [Thread-70095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:08:51.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:08:51.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:08:51.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:08:51.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 8, 24), 25.78, 17.18, 0.0, 44.83, 21.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:08:51.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:08:24
2025-12-12T13:08:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:08:52.196 [DEBUG] [Thread-70096] [transport.py] [_log()] starting thread (client mode): 0xf5702830
2025-12-12T13:08:52.197 [DEBUG] [Thread-70096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:08:52.217 [DEBUG] [Thread-70096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:08:52.217 [INFO] [Thread-70096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:08:52.220 [DEBUG] [Thread-70096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:08:52.220 [DEBUG] [Thread-70096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:08:52.220 [DEBUG] [Thread-70096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] client lang: <none>
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] server lang: <none>
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] kex follows: False
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:08:52.221 [DEBUG] [Thread-70096] [transport.py] [_log()] Compression: none
2025-12-12T13:08:52.222 [DEBUG] [Thread-70096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:08:52.240 [DEBUG] [Thread-70096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:08:52.240 [DEBUG] [Thread-70096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:08:52.241 [DEBUG] [Thread-70096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:08:52.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:08:52.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:08:52.243 [DEBUG] [Thread-70096] [transport.py] [_log()] userauth is OK
2025-12-12T13:08:52.243 [DEBUG] [Thread-70096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:08:52.243 [DEBUG] [Thread-70096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:08:52.243 [DEBUG] [Thread-70096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:08:52.243 [DEBUG] [Thread-70096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:08:52.268 [INFO] [Thread-70096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:08:52.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:08:52.886 [DEBUG] [Thread-70096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:08:52.887 [DEBUG] [Thread-70096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:08:52.887 [DEBUG] [Thread-70096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:08:52.928 [DEBUG] [Thread-70096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:08:52.928 [DEBUG] [Thread-70096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:08:52.930 [DEBUG] [Thread-70096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:08:52.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:08:52.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:08:52.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:08:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:08:52.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:08:52.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:08:52.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:08:52.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:08:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:08:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.463984 -999.00  +20.70  44.81     23   -0.90 1 1 2 1 1   888    0 22.38 9.93 ----- 29.8 44.8 342.5 55.0 25.6 -26.5 24.9 -26.1 24.9 -22.7 25.5 -23.4
2025-12-12T13:08:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:08:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:08:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.463984
2025-12-12T13:08:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:08:52.949 [DEBUG] [Thread-70096] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:08:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:08:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:08:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:08:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:08:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:08:24', tmtdew=25.78, humidity=17.18, cloud=0.0, wind=44.83, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:08:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:08:53.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:08:53.049 [DEBUG] [Thread-70099] [transport.py] [_log()] starting thread (client mode): 0xf5701300
2025-12-12T13:08:53.049 [DEBUG] [Thread-70099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:08:53.065 [DEBUG] [Thread-70099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:08:53.066 [INFO] [Thread-70099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:08:53.073 [DEBUG] [Thread-70099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:08:53.073 [DEBUG] [Thread-70099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:08:53.073 [DEBUG] [Thread-70099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:08:53.073 [DEBUG] [Thread-70099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:53.073 [DEBUG] [Thread-70099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] client lang: <none>
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] server lang: <none>
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] kex follows: False
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] Compression: none
2025-12-12T13:08:53.074 [DEBUG] [Thread-70099] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:08:53.133 [DEBUG] [Thread-70099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:08:53.134 [DEBUG] [Thread-70099] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:08:53.134 [DEBUG] [Thread-70099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:08:53.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:08:53.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:08:53.189 [DEBUG] [Thread-70099] [transport.py] [_log()] userauth is OK
2025-12-12T13:08:53.190 [DEBUG] [Thread-70099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:08:53.190 [DEBUG] [Thread-70099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:08:53.190 [DEBUG] [Thread-70099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:08:53.190 [DEBUG] [Thread-70099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:08:53.209 [INFO] [Thread-70099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:08:53.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:08:53.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:08:54.063 [DEBUG] [Thread-70099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:08:54.064 [DEBUG] [Thread-70099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:08:54.112 [DEBUG] [Thread-70099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:08:54.112 [DEBUG] [Thread-70099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:08:54.121 [DEBUG] [Thread-70099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:08:54.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:08: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')
2025-12-12T13:08:54.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:08:54.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:08:54.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:08:54.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:08:54.155 [DEBUG] [Thread-70099] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:08:57.865 [DEBUG] [Thread-70101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:12.903 [DEBUG] [Thread-70102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:09:24.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:09:24.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:09:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 8, 56), 26.29, 17.13, 0.0, 52.6, 22.03, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:09:24.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:08:56
2025-12-12T13:09:25.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:09:25.187 [DEBUG] [Thread-70103] [transport.py] [_log()] starting thread (client mode): 0xf575e350
2025-12-12T13:09:25.187 [DEBUG] [Thread-70103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:09:25.207 [DEBUG] [Thread-70103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:09:25.207 [INFO] [Thread-70103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] client lang: <none>
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] server lang: <none>
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] kex follows: False
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:09:25.210 [DEBUG] [Thread-70103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:09:25.211 [DEBUG] [Thread-70103] [transport.py] [_log()] Compression: none
2025-12-12T13:09:25.211 [DEBUG] [Thread-70103] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:09:25.225 [DEBUG] [Thread-70103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:09:25.225 [DEBUG] [Thread-70103] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:09:25.225 [DEBUG] [Thread-70103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:09:25.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:09:25.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:09:25.226 [DEBUG] [Thread-70103] [transport.py] [_log()] userauth is OK
2025-12-12T13:09:25.226 [DEBUG] [Thread-70103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:09:25.226 [DEBUG] [Thread-70103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:09:25.226 [DEBUG] [Thread-70103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:09:25.226 [DEBUG] [Thread-70103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:09:25.241 [INFO] [Thread-70103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:09:25.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:09:26.003 [DEBUG] [Thread-70103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:09:26.003 [DEBUG] [Thread-70103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:09:26.003 [DEBUG] [Thread-70103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:09:26.044 [DEBUG] [Thread-70103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:09:26.045 [DEBUG] [Thread-70103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:09:26.046 [DEBUG] [Thread-70103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:09:26.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:09:26.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:09:26.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:09:26.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:09:26.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:09:26.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:09:26.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.464679 -999.00  +21.20  54.91     23   -0.40 1 1 2 1 1   888    0 21.61 2.82 ----- 41.6 54.9 311.8 63.3 25.5 -25.7 24.9 -24.2 24.9 -22.3 25.6 -22.9
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.464679
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:09:26.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:08:56', tmtdew=26.29, humidity=17.13, cloud=0.0, wind=52.6, temperature=22.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:09:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:09:26.058 [DEBUG] [Thread-70103] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:09:26.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:09:26.145 [DEBUG] [Thread-70106] [transport.py] [_log()] starting thread (client mode): 0xf575dbd0
2025-12-12T13:09:26.145 [DEBUG] [Thread-70106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:09:26.160 [DEBUG] [Thread-70106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:09:26.160 [INFO] [Thread-70106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:09:26.167 [DEBUG] [Thread-70106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:09:26.167 [DEBUG] [Thread-70106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] client lang: <none>
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] server lang: <none>
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] kex follows: False
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] Compression: none
2025-12-12T13:09:26.168 [DEBUG] [Thread-70106] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:09:26.231 [DEBUG] [Thread-70106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:09:26.231 [DEBUG] [Thread-70106] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:09:26.231 [DEBUG] [Thread-70106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:09:26.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:09:26.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:09:26.288 [DEBUG] [Thread-70106] [transport.py] [_log()] userauth is OK
2025-12-12T13:09:26.288 [DEBUG] [Thread-70106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:09:26.288 [DEBUG] [Thread-70106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:09:26.288 [DEBUG] [Thread-70106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:09:26.288 [DEBUG] [Thread-70106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:09:26.307 [INFO] [Thread-70106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:09:26.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:09:26.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:09:27.131 [DEBUG] [Thread-70106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:09:27.131 [DEBUG] [Thread-70106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:09:27.180 [DEBUG] [Thread-70106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:09:27.180 [DEBUG] [Thread-70106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:09:27.192 [DEBUG] [Thread-70106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:09:27.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:09:27.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:09:27.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:09:27.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:09:27.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:09:27.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:09:27.224 [DEBUG] [Thread-70106] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:09:27.931 [DEBUG] [Thread-70108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:41.436 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:41.437 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:42.982 [DEBUG] [Thread-70109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:43.851 [DEBUG] [Thread-70110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:57.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:09:57.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:09:57.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:09:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 9, 28), 26.39, 17.03, 0.0, 54.06, 22.16, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:09:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:09:28
2025-12-12T13:09:58.011 [DEBUG] [Thread-70111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:09:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:09:58.219 [DEBUG] [Thread-70112] [transport.py] [_log()] starting thread (client mode): 0xf81c3e80
2025-12-12T13:09:58.219 [DEBUG] [Thread-70112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:09:58.238 [DEBUG] [Thread-70112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:09:58.238 [INFO] [Thread-70112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] client lang: <none>
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] server lang: <none>
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] kex follows: False
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] Compression: none
2025-12-12T13:09:58.242 [DEBUG] [Thread-70112] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:09:58.258 [DEBUG] [Thread-70112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:09:58.258 [DEBUG] [Thread-70112] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:09:58.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:09:58.260 [DEBUG] [Thread-70112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:09:58.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:09:58.261 [DEBUG] [Thread-70112] [transport.py] [_log()] userauth is OK
2025-12-12T13:09:58.262 [DEBUG] [Thread-70112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:09:58.262 [DEBUG] [Thread-70112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:09:58.262 [DEBUG] [Thread-70112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:09:58.262 [DEBUG] [Thread-70112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:09:58.286 [INFO] [Thread-70112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:09:58.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:09:58.959 [DEBUG] [Thread-70112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:09:58.960 [DEBUG] [Thread-70112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:09:58.960 [DEBUG] [Thread-70112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:09:59.001 [DEBUG] [Thread-70112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:09:59.001 [DEBUG] [Thread-70112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:09:59.004 [DEBUG] [Thread-70112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:09:59.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:09:59.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:09:59.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:09:59.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:09:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:09:59.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:09:59.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:09:59.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:09:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:09:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.465026 -999.00  +21.10  44.91     23   -0.50 1 1 2 1 1   888    0 21.95 -1.34 ----- 46.8 44.9 311.0 60.9 25.4 -26.1 25.0 -25.7 24.8 -25.4 25.5 -24.1
2025-12-12T13:09:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:09:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:09:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.465026
2025-12-12T13:09:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:09:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:09:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:09:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:09:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:09:59.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:09:28', tmtdew=26.39, humidity=17.03, cloud=0.0, wind=54.06, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:09:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:09:59.032 [DEBUG] [Thread-70112] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:09:59.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:09:59.129 [DEBUG] [Thread-70115] [transport.py] [_log()] starting thread (client mode): 0xfabc6530
2025-12-12T13:09:59.129 [DEBUG] [Thread-70115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:09:59.143 [DEBUG] [Thread-70115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:09:59.143 [INFO] [Thread-70115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:59.151 [DEBUG] [Thread-70115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] client lang: <none>
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] server lang: <none>
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] kex follows: False
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:09:59.152 [DEBUG] [Thread-70115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:09:59.153 [DEBUG] [Thread-70115] [transport.py] [_log()] Compression: none
2025-12-12T13:09:59.153 [DEBUG] [Thread-70115] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:09:59.209 [DEBUG] [Thread-70115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:09:59.210 [DEBUG] [Thread-70115] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:09:59.210 [DEBUG] [Thread-70115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:09:59.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:09:59.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:09:59.269 [DEBUG] [Thread-70115] [transport.py] [_log()] userauth is OK
2025-12-12T13:09:59.269 [DEBUG] [Thread-70115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:09:59.269 [DEBUG] [Thread-70115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:09:59.269 [DEBUG] [Thread-70115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:09:59.269 [DEBUG] [Thread-70115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:09:59.287 [INFO] [Thread-70115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:09:59.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:09:59.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:10:00.156 [DEBUG] [Thread-70115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:10:00.157 [DEBUG] [Thread-70115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:10:00.205 [DEBUG] [Thread-70115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:10:00.205 [DEBUG] [Thread-70115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:10:00.214 [DEBUG] [Thread-70115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:10:00.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:10:00.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:10: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') -> 00000000
2025-12-12T13:10:00.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:10:00.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:10:00.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:10:00.248 [DEBUG] [Thread-70115] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:10:13.039 [DEBUG] [Thread-70117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:10:28.091 [DEBUG] [Thread-70118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:10:30.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:10:30.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:10:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:10:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 9, 28), 26.39, 17.03, 0.0, 54.06, 22.16, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:10:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:09:28
2025-12-12T13:10:31.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:10:31.225 [DEBUG] [Thread-70119] [transport.py] [_log()] starting thread (client mode): 0xf575dc00
2025-12-12T13:10:31.225 [DEBUG] [Thread-70119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:10:31.245 [DEBUG] [Thread-70119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:10:31.245 [INFO] [Thread-70119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] client lang: <none>
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] server lang: <none>
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] kex follows: False
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:10:31.248 [DEBUG] [Thread-70119] [transport.py] [_log()] Compression: none
2025-12-12T13:10:31.249 [DEBUG] [Thread-70119] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:10:31.267 [DEBUG] [Thread-70119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:10:31.268 [DEBUG] [Thread-70119] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:10:31.268 [DEBUG] [Thread-70119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:10:31.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:10:31.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:10:31.270 [DEBUG] [Thread-70119] [transport.py] [_log()] userauth is OK
2025-12-12T13:10:31.270 [DEBUG] [Thread-70119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:10:31.270 [DEBUG] [Thread-70119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:10:31.270 [DEBUG] [Thread-70119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:10:31.270 [DEBUG] [Thread-70119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:10:31.294 [INFO] [Thread-70119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:10:31.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:10:31.911 [DEBUG] [Thread-70119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:10:31.911 [DEBUG] [Thread-70119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:10:31.911 [DEBUG] [Thread-70119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:10:31.952 [DEBUG] [Thread-70119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:10:31.952 [DEBUG] [Thread-70119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:10:31.954 [DEBUG] [Thread-70119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:10:31.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:10:31.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:10:31.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:10:31.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:10:31.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:10:31.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:10:31.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:10:31.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:10:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:10:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.465372 -999.00  +20.70  38.28     23   -1.00 1 1 2 1 1   888    0 21.86 -4.40 ----- 35.3 38.3 309.4 64.3 25.4 -25.4 24.8 -26.6 24.9 -22.2 25.4 -23.6
2025-12-12T13:10:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:10:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:10:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.465372
2025-12-12T13:10:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:10:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:10:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:10:31.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:10:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:10:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:09:28', tmtdew=26.39, humidity=17.03, cloud=0.0, wind=54.06, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:10:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:10:31.977 [DEBUG] [Thread-70119] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:10:32.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:10:32.069 [DEBUG] [Thread-70122] [transport.py] [_log()] starting thread (client mode): 0xf81f3e80
2025-12-12T13:10:32.069 [DEBUG] [Thread-70122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:10:32.084 [DEBUG] [Thread-70122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:10:32.085 [INFO] [Thread-70122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:10:32.092 [DEBUG] [Thread-70122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:10:32.092 [DEBUG] [Thread-70122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:10:32.093 [DEBUG] [Thread-70122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:10:32.093 [DEBUG] [Thread-70122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:10:32.093 [DEBUG] [Thread-70122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:10:32.093 [DEBUG] [Thread-70122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:10:32.101 [DEBUG] [Thread-70122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] client lang: <none>
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] server lang: <none>
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] kex follows: False
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] Compression: none
2025-12-12T13:10:32.102 [DEBUG] [Thread-70122] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:10:32.150 [DEBUG] [Thread-70122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:10:32.150 [DEBUG] [Thread-70122] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:10:32.151 [DEBUG] [Thread-70122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:10:32.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:10:32.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:10:32.208 [DEBUG] [Thread-70122] [transport.py] [_log()] userauth is OK
2025-12-12T13:10:32.208 [DEBUG] [Thread-70122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:10:32.208 [DEBUG] [Thread-70122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:10:32.208 [DEBUG] [Thread-70122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:10:32.208 [DEBUG] [Thread-70122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:10:32.227 [INFO] [Thread-70122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:10:32.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:10:32.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:10:33.057 [DEBUG] [Thread-70122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:10:33.057 [DEBUG] [Thread-70122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:10:33.104 [DEBUG] [Thread-70122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:10:33.104 [DEBUG] [Thread-70122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:10:33.112 [DEBUG] [Thread-70122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:10:33.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:10:33.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:10:33.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:10:33.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:10:33.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:10:33.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:10:33.144 [DEBUG] [Thread-70122] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:10:41.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:10:41.577 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:10:43.117 [DEBUG] [Thread-70124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:10:43.895 [DEBUG] [Thread-70125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:10:58.157 [DEBUG] [Thread-70126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:03.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:11:03.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:11:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:11:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 10, 32), 26.77, 16.27, 0.0, 46.6, 21.6, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:11:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:10:32
2025-12-12T13:11:03.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:11:04.144 [DEBUG] [Thread-70127] [transport.py] [_log()] starting thread (client mode): 0xfabc7f40
2025-12-12T13:11:04.144 [DEBUG] [Thread-70127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:11:04.163 [DEBUG] [Thread-70127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:11:04.163 [INFO] [Thread-70127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:11:04.166 [DEBUG] [Thread-70127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] client lang: <none>
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] server lang: <none>
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] kex follows: False
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] Compression: none
2025-12-12T13:11:04.167 [DEBUG] [Thread-70127] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:11:04.183 [DEBUG] [Thread-70127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:11:04.184 [DEBUG] [Thread-70127] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:11:04.184 [DEBUG] [Thread-70127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:11:04.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:11:04.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:11:04.186 [DEBUG] [Thread-70127] [transport.py] [_log()] userauth is OK
2025-12-12T13:11:04.186 [DEBUG] [Thread-70127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:11:04.186 [DEBUG] [Thread-70127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:11:04.187 [DEBUG] [Thread-70127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:11:04.187 [DEBUG] [Thread-70127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:11:04.207 [INFO] [Thread-70127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:11:04.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:11:04.855 [DEBUG] [Thread-70127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:11:04.855 [DEBUG] [Thread-70127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:11:04.856 [DEBUG] [Thread-70127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:11:04.896 [DEBUG] [Thread-70127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:11:04.897 [DEBUG] [Thread-70127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:11:04.899 [DEBUG] [Thread-70127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:11:04.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:11:04.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:11:04.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:11:04.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:11:04.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:11:04.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:11:04.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.465720 -999.00  +21.10  59.82     22   -1.30 1 1 2 1 1   888    0 21.75 -7.38 ----- 48.8 59.8 319.4 64.9 25.6 -25.3 24.9 -25.3 25.0 -23.5 25.6 -23.0
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.465720
2025-12-12T13:11:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:11:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:11:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:11:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:11:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:11:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:10:32', tmtdew=26.77, humidity=16.27, cloud=0.0, wind=46.6, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:10:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:11:04.917 [DEBUG] [Thread-70127] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:11:04.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:11:05.005 [DEBUG] [Thread-70130] [transport.py] [_log()] starting thread (client mode): 0xf5703f70
2025-12-12T13:11:05.005 [DEBUG] [Thread-70130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:11:05.019 [DEBUG] [Thread-70130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:11:05.020 [INFO] [Thread-70130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] client lang: <none>
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] server lang: <none>
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] kex follows: False
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:11:05.027 [DEBUG] [Thread-70130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:11:05.028 [DEBUG] [Thread-70130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:11:05.028 [DEBUG] [Thread-70130] [transport.py] [_log()] Compression: none
2025-12-12T13:11:05.028 [DEBUG] [Thread-70130] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:11:05.083 [DEBUG] [Thread-70130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:11:05.083 [DEBUG] [Thread-70130] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:11:05.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:11:05.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:11:05.084 [DEBUG] [Thread-70130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:11:05.139 [DEBUG] [Thread-70130] [transport.py] [_log()] userauth is OK
2025-12-12T13:11:05.139 [DEBUG] [Thread-70130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:11:05.139 [DEBUG] [Thread-70130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:11:05.139 [DEBUG] [Thread-70130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:11:05.139 [DEBUG] [Thread-70130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:11:05.153 [INFO] [Thread-70130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:11:05.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:11:05.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:11:06.020 [DEBUG] [Thread-70130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:11:06.021 [DEBUG] [Thread-70130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:11:06.068 [DEBUG] [Thread-70130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:11:06.068 [DEBUG] [Thread-70130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:11:06.077 [DEBUG] [Thread-70130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:11:06.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:11:06.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:11:06.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:11:06.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:11:06.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:11:06.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:11:06.108 [DEBUG] [Thread-70130] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:11:13.186 [DEBUG] [Thread-70132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:28.229 [DEBUG] [Thread-70133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:11:36.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:11:36.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:11:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 11, 4), 26.3, 16.77, 0.0, 51.89, 21.43, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:11:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:11:04
2025-12-12T13:11:36.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:11:37.098 [DEBUG] [Thread-70134] [transport.py] [_log()] starting thread (client mode): 0xf81e6ec0
2025-12-12T13:11:37.099 [DEBUG] [Thread-70134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:11:37.119 [DEBUG] [Thread-70134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:11:37.119 [INFO] [Thread-70134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] client lang: <none>
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] server lang: <none>
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] kex follows: False
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] Compression: none
2025-12-12T13:11:37.122 [DEBUG] [Thread-70134] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:11:37.140 [DEBUG] [Thread-70134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:11:37.140 [DEBUG] [Thread-70134] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:11:37.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:11:37.141 [DEBUG] [Thread-70134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:11:37.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:11:37.141 [DEBUG] [Thread-70134] [transport.py] [_log()] userauth is OK
2025-12-12T13:11:37.142 [DEBUG] [Thread-70134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:11:37.142 [DEBUG] [Thread-70134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:11:37.142 [DEBUG] [Thread-70134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:11:37.142 [DEBUG] [Thread-70134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:11:37.154 [INFO] [Thread-70134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:11:37.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:11:37.757 [DEBUG] [Thread-70134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:11:37.757 [DEBUG] [Thread-70134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:11:37.757 [DEBUG] [Thread-70134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:11:37.798 [DEBUG] [Thread-70134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:11:37.798 [DEBUG] [Thread-70134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:11:37.800 [DEBUG] [Thread-70134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:11:37.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:11:37.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:11:37.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:11:37.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:11:37.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:11:37.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:11:37.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.466067 -999.00  +21.20  59.67     22   -0.90 1 1 2 1 1   888    0 21.71 -12.40 ----- 42.3 59.7 322.4 69.7 25.6 -25.9 25.0 -25.0 25.0 -23.4 25.7 -22.5
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.466067
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:11:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:11:04', tmtdew=26.3, humidity=16.77, cloud=0.0, wind=51.89, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:11:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:11:37.821 [DEBUG] [Thread-70134] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:11:37.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:11:37.907 [DEBUG] [Thread-70137] [transport.py] [_log()] starting thread (client mode): 0xf57018d0
2025-12-12T13:11:37.907 [DEBUG] [Thread-70137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:11:37.921 [DEBUG] [Thread-70137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:11:37.921 [INFO] [Thread-70137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] client lang: <none>
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] server lang: <none>
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] kex follows: False
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] Compression: none
2025-12-12T13:11:37.929 [DEBUG] [Thread-70137] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:11:37.983 [DEBUG] [Thread-70137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:11:37.983 [DEBUG] [Thread-70137] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:11:37.984 [DEBUG] [Thread-70137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:11:37.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:11:37.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:11:38.041 [DEBUG] [Thread-70137] [transport.py] [_log()] userauth is OK
2025-12-12T13:11:38.041 [DEBUG] [Thread-70137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:11:38.041 [DEBUG] [Thread-70137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:11:38.041 [DEBUG] [Thread-70137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:11:38.041 [DEBUG] [Thread-70137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:11:38.055 [INFO] [Thread-70137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:11:38.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:11:38.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:11:38.900 [DEBUG] [Thread-70137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:11:38.900 [DEBUG] [Thread-70137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:11:38.948 [DEBUG] [Thread-70137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:11:38.948 [DEBUG] [Thread-70137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:11:38.957 [DEBUG] [Thread-70137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:11:38.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:11:38.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:11:38.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:11:38.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:11:38.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:11:38.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:11:38.992 [DEBUG] [Thread-70137] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:11:41.718 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:41.720 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:43.261 [DEBUG] [Thread-70139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:43.956 [DEBUG] [Thread-70140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:11:58.317 [DEBUG] [Thread-70141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:12:09.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:12:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:12:09.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 11, 36), 26.01, 17.05, 0.0, 62.79, 21.18, 0, 0, 0, 2, 2, 0),)
2025-12-12T13:12:09.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:11:36
2025-12-12T13:12:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:12:10.034 [DEBUG] [Thread-70142] [transport.py] [_log()] starting thread (client mode): 0xf575edd0
2025-12-12T13:12:10.034 [DEBUG] [Thread-70142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:12:10.053 [DEBUG] [Thread-70142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:12:10.053 [INFO] [Thread-70142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] client lang: <none>
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] server lang: <none>
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] kex follows: False
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] Compression: none
2025-12-12T13:12:10.056 [DEBUG] [Thread-70142] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:12:10.070 [DEBUG] [Thread-70142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:12:10.070 [DEBUG] [Thread-70142] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:12:10.070 [DEBUG] [Thread-70142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:12:10.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:12:10.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:12:10.071 [DEBUG] [Thread-70142] [transport.py] [_log()] userauth is OK
2025-12-12T13:12:10.071 [DEBUG] [Thread-70142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:12:10.071 [DEBUG] [Thread-70142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:12:10.071 [DEBUG] [Thread-70142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:12:10.071 [DEBUG] [Thread-70142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:12:10.086 [INFO] [Thread-70142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:12:10.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:12:10.742 [DEBUG] [Thread-70142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:12:10.742 [DEBUG] [Thread-70142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:12:10.742 [DEBUG] [Thread-70142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:12:10.783 [DEBUG] [Thread-70142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:12:10.783 [DEBUG] [Thread-70142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:12:10.785 [DEBUG] [Thread-70142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:12:10.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:12:10.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:12:10.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:12:10.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:12:10.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:12:10.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:12:10.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.466415 -999.00  +21.30  51.82     22   -0.80 1 1 2 1 1   888    0 21.37 -13.10 ----- 45.9 51.8 326.8 65.1 25.6 -24.9 25.0 -27.7 25.1 -23.7 25.7 -22.7
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.466415
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:12:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:11:36', tmtdew=26.01, humidity=17.05, cloud=0.0, wind=62.79, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:11:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:12:10.804 [DEBUG] [Thread-70142] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:12:10.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:12:10.889 [DEBUG] [Thread-70145] [transport.py] [_log()] starting thread (client mode): 0xf575f2b0
2025-12-12T13:12:10.889 [DEBUG] [Thread-70145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:12:10.904 [DEBUG] [Thread-70145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:12:10.904 [INFO] [Thread-70145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:12:10.911 [DEBUG] [Thread-70145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] client lang: <none>
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] server lang: <none>
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] kex follows: False
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:12:10.912 [DEBUG] [Thread-70145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:12:10.913 [DEBUG] [Thread-70145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:12:10.913 [DEBUG] [Thread-70145] [transport.py] [_log()] Compression: none
2025-12-12T13:12:10.913 [DEBUG] [Thread-70145] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:12:10.970 [DEBUG] [Thread-70145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:12:10.970 [DEBUG] [Thread-70145] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:12:10.971 [DEBUG] [Thread-70145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:12:10.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:12:10.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:12:11.026 [DEBUG] [Thread-70145] [transport.py] [_log()] userauth is OK
2025-12-12T13:12:11.026 [DEBUG] [Thread-70145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:12:11.026 [DEBUG] [Thread-70145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:12:11.027 [DEBUG] [Thread-70145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:12:11.027 [DEBUG] [Thread-70145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:12:11.045 [INFO] [Thread-70145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:12:11.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:12:11.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:12:11.877 [DEBUG] [Thread-70145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:12:11.877 [DEBUG] [Thread-70145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:12:11.925 [DEBUG] [Thread-70145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:12:11.925 [DEBUG] [Thread-70145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:12:11.934 [DEBUG] [Thread-70145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:12:11.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:12:11.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:12:11.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:12:11.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:12:11.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:12:11.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:12:11.972 [DEBUG] [Thread-70145] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:12:13.342 [DEBUG] [Thread-70147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:28.389 [DEBUG] [Thread-70148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:41.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:41.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:41.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:12:41.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:12:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:12:42.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 12, 8), 25.61, 17.49, 0.0, 60.71, 20.98, 0, 0, 0, 2, 2, 0),)
2025-12-12T13:12:42.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:12:08
2025-12-12T13:12:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:12:43.019 [DEBUG] [Thread-70149] [transport.py] [_log()] starting thread (client mode): 0xf5702d40
2025-12-12T13:12:43.019 [DEBUG] [Thread-70149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:12:43.039 [DEBUG] [Thread-70149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:12:43.039 [INFO] [Thread-70149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] client lang: <none>
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] server lang: <none>
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] kex follows: False
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:12:43.043 [DEBUG] [Thread-70149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:12:43.044 [DEBUG] [Thread-70149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:12:43.044 [DEBUG] [Thread-70149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:12:43.044 [DEBUG] [Thread-70149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:12:43.044 [DEBUG] [Thread-70149] [transport.py] [_log()] Compression: none
2025-12-12T13:12:43.044 [DEBUG] [Thread-70149] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:12:43.060 [DEBUG] [Thread-70149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:12:43.061 [DEBUG] [Thread-70149] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:12:43.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:12:43.061 [DEBUG] [Thread-70149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:12:43.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:12:43.064 [DEBUG] [Thread-70149] [transport.py] [_log()] userauth is OK
2025-12-12T13:12:43.064 [DEBUG] [Thread-70149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:12:43.064 [DEBUG] [Thread-70149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:12:43.064 [DEBUG] [Thread-70149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:12:43.064 [DEBUG] [Thread-70149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:12:43.088 [INFO] [Thread-70149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:12:43.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:12:43.417 [DEBUG] [Thread-70151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:43.698 [DEBUG] [Thread-70149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:12:43.698 [DEBUG] [Thread-70149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:12:43.699 [DEBUG] [Thread-70149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:12:43.739 [DEBUG] [Thread-70149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:12:43.739 [DEBUG] [Thread-70149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:12:43.742 [DEBUG] [Thread-70149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:12:43.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:12:43.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:12:43.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:12:43.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:12:43.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:12:43.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:12:43.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:12:43.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:12:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:12:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.466762 -999.00  +21.10  40.08     22   -1.00 1 1 2 1 1   888    0 21.41 -13.06 ----- 50.1 40.1 330.5 65.5 25.7 -25.9 25.0 -25.7 25.2 -22.5 25.7 -23.1
2025-12-12T13:12:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:12:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:12:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.466762
2025-12-12T13:12:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:12:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:12:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:12:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:12:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:12:43.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:12:08', tmtdew=25.61, humidity=17.49, cloud=0.0, wind=60.71, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:12:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:12:43.764 [DEBUG] [Thread-70149] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:12:43.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:12:43.860 [DEBUG] [Thread-70153] [transport.py] [_log()] starting thread (client mode): 0xf813f4f0
2025-12-12T13:12:43.860 [DEBUG] [Thread-70153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:12:43.876 [DEBUG] [Thread-70153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:12:43.876 [INFO] [Thread-70153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:12:43.887 [DEBUG] [Thread-70153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:12:43.887 [DEBUG] [Thread-70153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:12:43.887 [DEBUG] [Thread-70153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] client lang: <none>
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] server lang: <none>
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] kex follows: False
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] Compression: none
2025-12-12T13:12:43.888 [DEBUG] [Thread-70153] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:12:43.942 [DEBUG] [Thread-70153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:12:43.943 [DEBUG] [Thread-70153] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:12:43.943 [DEBUG] [Thread-70153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:12:43.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:12:43.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:12:43.999 [DEBUG] [Thread-70153] [transport.py] [_log()] userauth is OK
2025-12-12T13:12:43.999 [DEBUG] [Thread-70153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:12:43.999 [DEBUG] [Thread-70153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:12:44.000 [DEBUG] [Thread-70153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:12:44.000 [DEBUG] [Thread-70153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:12:44.018 [INFO] [Thread-70153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:12:44.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:12:44.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:12:44.019 [DEBUG] [Thread-70155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:12:44.842 [DEBUG] [Thread-70153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:12:44.842 [DEBUG] [Thread-70153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:12:44.890 [DEBUG] [Thread-70153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:12:44.890 [DEBUG] [Thread-70153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:12:44.899 [DEBUG] [Thread-70153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:12:44.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:12:44.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:12:44.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:12:44.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:12:44.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:12:44.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:12:44.933 [DEBUG] [Thread-70153] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:12:58.451 [DEBUG] [Thread-70156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:13.495 [DEBUG] [Thread-70157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:13:14.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:13:14.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:13:15.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 12, 40), 26.1, 16.9, 0.0, 49.12, 21.33, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:13:15.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:12:40
2025-12-12T13:13:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:13:15.950 [DEBUG] [Thread-70158] [transport.py] [_log()] starting thread (client mode): 0xf575cee0
2025-12-12T13:13:15.950 [DEBUG] [Thread-70158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:13:15.971 [DEBUG] [Thread-70158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:13:15.971 [INFO] [Thread-70158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:15.974 [DEBUG] [Thread-70158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] client lang: <none>
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] server lang: <none>
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] kex follows: False
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] Compression: none
2025-12-12T13:13:15.975 [DEBUG] [Thread-70158] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:13:15.990 [DEBUG] [Thread-70158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:13:15.991 [DEBUG] [Thread-70158] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:13:15.991 [DEBUG] [Thread-70158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:13:15.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:13:15.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:13:15.992 [DEBUG] [Thread-70158] [transport.py] [_log()] userauth is OK
2025-12-12T13:13:15.992 [DEBUG] [Thread-70158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:13:15.992 [DEBUG] [Thread-70158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:13:15.992 [DEBUG] [Thread-70158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:13:15.992 [DEBUG] [Thread-70158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:13:16.001 [INFO] [Thread-70158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:13:16.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:13:16.628 [DEBUG] [Thread-70158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:13:16.628 [DEBUG] [Thread-70158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:13:16.628 [DEBUG] [Thread-70158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:13:16.669 [DEBUG] [Thread-70158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:13:16.669 [DEBUG] [Thread-70158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:13:16.673 [DEBUG] [Thread-70158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:13:16.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:13:16.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:13:16.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:13:16.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:13:16.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:13:16.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:13:16.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.467109 -999.00  +21.20  38.48     22   -0.90 1 1 2 1 1   888    0 21.83 -15.27 ----- 25.5 38.5 334.2 61.3 25.7 -25.3 25.0 -26.3 25.2 -22.7 25.7 -23.1
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.467109
2025-12-12T13:13:16.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:13:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:13:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:13:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:13:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:13:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:12:40', tmtdew=26.1, humidity=16.9, cloud=0.0, wind=49.12, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:12:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:13:16.692 [DEBUG] [Thread-70158] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:13:16.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:13:16.776 [DEBUG] [Thread-70161] [transport.py] [_log()] starting thread (client mode): 0xf5703490
2025-12-12T13:13:16.776 [DEBUG] [Thread-70161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:13:16.791 [DEBUG] [Thread-70161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:13:16.791 [INFO] [Thread-70161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] client lang: <none>
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] server lang: <none>
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] kex follows: False
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] Compression: none
2025-12-12T13:13:16.799 [DEBUG] [Thread-70161] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:13:16.855 [DEBUG] [Thread-70161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:13:16.856 [DEBUG] [Thread-70161] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:13:16.856 [DEBUG] [Thread-70161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:13:16.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:13:16.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:13:16.912 [DEBUG] [Thread-70161] [transport.py] [_log()] userauth is OK
2025-12-12T13:13:16.912 [DEBUG] [Thread-70161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:13:16.912 [DEBUG] [Thread-70161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:13:16.912 [DEBUG] [Thread-70161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:13:16.912 [DEBUG] [Thread-70161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:13:16.926 [INFO] [Thread-70161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:13:16.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:13:16.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:13:17.800 [DEBUG] [Thread-70161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:13:17.800 [DEBUG] [Thread-70161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:13:17.852 [DEBUG] [Thread-70161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:13:17.852 [DEBUG] [Thread-70161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:13:17.861 [DEBUG] [Thread-70161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:13:17.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:13:17.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:13:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:13:17.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:13:17.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:13:17.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:13:17.893 [DEBUG] [Thread-70161] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:13:28.518 [DEBUG] [Thread-70163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:42.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:42.001 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:43.562 [DEBUG] [Thread-70164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:44.073 [DEBUG] [Thread-70165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:13:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:13:47.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:13:47.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:13:48.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 13, 44), 25.5, 17.4, 0.0, 43.58, 20.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:13:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:13:44
2025-12-12T13:13:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:13:48.861 [DEBUG] [Thread-70166] [transport.py] [_log()] starting thread (client mode): 0xf81e4e50
2025-12-12T13:13:48.861 [DEBUG] [Thread-70166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:13:48.882 [DEBUG] [Thread-70166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:13:48.882 [INFO] [Thread-70166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:13:48.885 [DEBUG] [Thread-70166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] client lang: <none>
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] server lang: <none>
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] kex follows: False
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:13:48.886 [DEBUG] [Thread-70166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:13:48.887 [DEBUG] [Thread-70166] [transport.py] [_log()] Compression: none
2025-12-12T13:13:48.887 [DEBUG] [Thread-70166] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:13:48.905 [DEBUG] [Thread-70166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:13:48.906 [DEBUG] [Thread-70166] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:13:48.906 [DEBUG] [Thread-70166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:13:48.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:13:48.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:13:48.909 [DEBUG] [Thread-70166] [transport.py] [_log()] userauth is OK
2025-12-12T13:13:48.909 [DEBUG] [Thread-70166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:13:48.909 [DEBUG] [Thread-70166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:13:48.909 [DEBUG] [Thread-70166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:13:48.910 [DEBUG] [Thread-70166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:13:48.933 [INFO] [Thread-70166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:13:48.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:13:49.566 [DEBUG] [Thread-70166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:13:49.566 [DEBUG] [Thread-70166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:13:49.567 [DEBUG] [Thread-70166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:13:49.608 [DEBUG] [Thread-70166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:13:49.608 [DEBUG] [Thread-70166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:13:49.610 [DEBUG] [Thread-70166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:13:49.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:13:49.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:13:49.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:13:49.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:13:49.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:13:49.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:13:49.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:13:49.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:13:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:13:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.467456 -999.00  +21.50  37.13     22   -0.70 1 1 2 1 1   888    0 21.20 -16.21 ----- 39.1 37.1 324.5 53.2 25.7 -26.9 25.1 -24.7 25.2 -22.3 25.8 -23.8
2025-12-12T13:13:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:13:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:13:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.467456
2025-12-12T13:13:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:13:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:13:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:13:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:13:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:13:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:13:44', tmtdew=25.5, humidity=17.4, cloud=0.0, wind=43.58, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:13:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:13:49.636 [DEBUG] [Thread-70166] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:13:49.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:13:49.731 [DEBUG] [Thread-70169] [transport.py] [_log()] starting thread (client mode): 0xf575f8e0
2025-12-12T13:13:49.731 [DEBUG] [Thread-70169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:13:49.745 [DEBUG] [Thread-70169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:13:49.745 [INFO] [Thread-70169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:13:49.753 [DEBUG] [Thread-70169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] client lang: <none>
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] server lang: <none>
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] kex follows: False
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] Compression: none
2025-12-12T13:13:49.754 [DEBUG] [Thread-70169] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:13:49.809 [DEBUG] [Thread-70169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:13:49.810 [DEBUG] [Thread-70169] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:13:49.810 [DEBUG] [Thread-70169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:13:49.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:13:49.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:13:49.866 [DEBUG] [Thread-70169] [transport.py] [_log()] userauth is OK
2025-12-12T13:13:49.866 [DEBUG] [Thread-70169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:13:49.866 [DEBUG] [Thread-70169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:13:49.866 [DEBUG] [Thread-70169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:13:49.866 [DEBUG] [Thread-70169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:13:49.886 [INFO] [Thread-70169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:13:49.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:13:49.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:13:50.741 [DEBUG] [Thread-70169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:13:50.741 [DEBUG] [Thread-70169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:13:50.789 [DEBUG] [Thread-70169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:13:50.789 [DEBUG] [Thread-70169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:13:50.798 [DEBUG] [Thread-70169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:13:50.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:13:50.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:13:50.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:13:50.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:13:50.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:13:50.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:13:50.832 [DEBUG] [Thread-70169] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:13:58.586 [DEBUG] [Thread-70171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:13.624 [DEBUG] [Thread-70172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:14:20.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:14:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:14:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 14, 16), 25.49, 17.41, 0.0, 37.65, 20.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:14:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:14:16
2025-12-12T13:14:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:14:21.828 [DEBUG] [Thread-70173] [transport.py] [_log()] starting thread (client mode): 0xf575ded0
2025-12-12T13:14:21.828 [DEBUG] [Thread-70173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:14:21.850 [DEBUG] [Thread-70173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:14:21.850 [INFO] [Thread-70173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:21.854 [DEBUG] [Thread-70173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] client lang: <none>
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] server lang: <none>
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] kex follows: False
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] Compression: none
2025-12-12T13:14:21.855 [DEBUG] [Thread-70173] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:14:21.875 [DEBUG] [Thread-70173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:14:21.875 [DEBUG] [Thread-70173] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:14:21.876 [DEBUG] [Thread-70173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:14:21.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:14:21.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:14:21.879 [DEBUG] [Thread-70173] [transport.py] [_log()] userauth is OK
2025-12-12T13:14:21.879 [DEBUG] [Thread-70173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:14:21.879 [DEBUG] [Thread-70173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:14:21.880 [DEBUG] [Thread-70173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:14:21.880 [DEBUG] [Thread-70173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:14:21.923 [INFO] [Thread-70173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:14:21.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:14:22.583 [DEBUG] [Thread-70173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:14:22.583 [DEBUG] [Thread-70173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:14:22.584 [DEBUG] [Thread-70173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:14:22.624 [DEBUG] [Thread-70173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:14:22.624 [DEBUG] [Thread-70173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:14:22.627 [DEBUG] [Thread-70173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:14:22.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:14:22.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:14:22.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:14:22.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:14:22.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:14:22.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:14:22.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:14:22.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:14:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:14:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.468151 -999.00  +21.10  47.22     22   -1.00 1 1 2 1 1   888    0 21.68 -18.90 ----- 39.7 47.2 317.6 57.4 25.6 -24.9 24.9 -25.5 25.2 -22.8 25.6 -22.7
2025-12-12T13:14:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:14:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:14:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.468151
2025-12-12T13:14:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:14:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:14:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:14:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:14:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:14:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:14:16', tmtdew=25.49, humidity=17.41, cloud=0.0, wind=37.65, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:14:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:14:22.656 [DEBUG] [Thread-70173] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:14:22.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:14:22.751 [DEBUG] [Thread-70176] [transport.py] [_log()] starting thread (client mode): 0xf574f310
2025-12-12T13:14:22.751 [DEBUG] [Thread-70176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:14:22.766 [DEBUG] [Thread-70176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:14:22.766 [INFO] [Thread-70176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:14:22.777 [DEBUG] [Thread-70176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] client lang: <none>
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] server lang: <none>
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] kex follows: False
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:14:22.778 [DEBUG] [Thread-70176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:14:22.779 [DEBUG] [Thread-70176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:14:22.779 [DEBUG] [Thread-70176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:14:22.779 [DEBUG] [Thread-70176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:14:22.779 [DEBUG] [Thread-70176] [transport.py] [_log()] Compression: none
2025-12-12T13:14:22.779 [DEBUG] [Thread-70176] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:14:22.836 [DEBUG] [Thread-70176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:14:22.837 [DEBUG] [Thread-70176] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:14:22.838 [DEBUG] [Thread-70176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:14:22.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:14:22.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:14:22.895 [DEBUG] [Thread-70176] [transport.py] [_log()] userauth is OK
2025-12-12T13:14:22.895 [DEBUG] [Thread-70176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:14:22.895 [DEBUG] [Thread-70176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:14:22.895 [DEBUG] [Thread-70176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:14:22.895 [DEBUG] [Thread-70176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:14:22.917 [INFO] [Thread-70176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:14:22.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:14:22.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:14:23.761 [DEBUG] [Thread-70176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:14:23.761 [DEBUG] [Thread-70176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:14:23.809 [DEBUG] [Thread-70176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:14:23.809 [DEBUG] [Thread-70176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:14:23.818 [DEBUG] [Thread-70176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:14:23.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:14:23.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:14:23.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:14:23.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:14:23.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:14:23.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:14:23.853 [DEBUG] [Thread-70176] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:14:28.652 [DEBUG] [Thread-70178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:42.141 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:42.142 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:43.696 [DEBUG] [Thread-70179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:44.135 [DEBUG] [Thread-70180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:14:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:14:53.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:14:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:14:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 14, 48), 26.47, 16.35, 0.0, 50.88, 21.16, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:14:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:14:48
2025-12-12T13:14:54.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:14:54.832 [DEBUG] [Thread-70181] [transport.py] [_log()] starting thread (client mode): 0xf574cf10
2025-12-12T13:14:54.832 [DEBUG] [Thread-70181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:14:54.852 [DEBUG] [Thread-70181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:14:54.853 [INFO] [Thread-70181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] client lang: <none>
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] server lang: <none>
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] kex follows: False
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:14:54.856 [DEBUG] [Thread-70181] [transport.py] [_log()] Compression: none
2025-12-12T13:14:54.857 [DEBUG] [Thread-70181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:14:54.873 [DEBUG] [Thread-70181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:14:54.874 [DEBUG] [Thread-70181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:14:54.874 [DEBUG] [Thread-70181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:14:54.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:14:54.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:14:54.876 [DEBUG] [Thread-70181] [transport.py] [_log()] userauth is OK
2025-12-12T13:14:54.876 [DEBUG] [Thread-70181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:14:54.877 [DEBUG] [Thread-70181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:14:54.877 [DEBUG] [Thread-70181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:14:54.877 [DEBUG] [Thread-70181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:14:54.894 [INFO] [Thread-70181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:14:54.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:14:55.505 [DEBUG] [Thread-70181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:14:55.505 [DEBUG] [Thread-70181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:14:55.506 [DEBUG] [Thread-70181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:14:55.547 [DEBUG] [Thread-70181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:14:55.547 [DEBUG] [Thread-70181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:14:55.550 [DEBUG] [Thread-70181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:14:55.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:14:55.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:14:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:14:55.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:14:55.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:14:55.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:14:55.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:14:55.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:14:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:14:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.468498 -999.00  +21.50  44.02     21   -1.40 1 1 2 1 1   888    0 21.45 -14.98 ----- 55.1 44.0 316.6 57.4 25.7 -24.7 25.0 -25.2 25.0 -23.4 25.8 -22.7
2025-12-12T13:14:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:14:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:14:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.468498
2025-12-12T13:14:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:14:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:14:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:14:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:14:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:14:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:14:48', tmtdew=26.47, humidity=16.35, cloud=0.0, wind=50.88, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:14:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:14:55.571 [DEBUG] [Thread-70181] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:14:55.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:14:55.667 [DEBUG] [Thread-70184] [transport.py] [_log()] starting thread (client mode): 0xf574f1c0
2025-12-12T13:14:55.667 [DEBUG] [Thread-70184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:14:55.682 [DEBUG] [Thread-70184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:14:55.682 [INFO] [Thread-70184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:14:55.689 [DEBUG] [Thread-70184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:14:55.689 [DEBUG] [Thread-70184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:14:55.689 [DEBUG] [Thread-70184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:14:55.689 [DEBUG] [Thread-70184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:55.689 [DEBUG] [Thread-70184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] client lang: <none>
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] server lang: <none>
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] kex follows: False
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] Compression: none
2025-12-12T13:14:55.690 [DEBUG] [Thread-70184] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:14:55.747 [DEBUG] [Thread-70184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:14:55.747 [DEBUG] [Thread-70184] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:14:55.748 [DEBUG] [Thread-70184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:14:55.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:14:55.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:14:55.804 [DEBUG] [Thread-70184] [transport.py] [_log()] userauth is OK
2025-12-12T13:14:55.804 [DEBUG] [Thread-70184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:14:55.804 [DEBUG] [Thread-70184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:14:55.804 [DEBUG] [Thread-70184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:14:55.804 [DEBUG] [Thread-70184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:14:55.823 [INFO] [Thread-70184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:14:55.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:14:55.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:14:56.642 [DEBUG] [Thread-70184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:14:56.643 [DEBUG] [Thread-70184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:14:56.691 [DEBUG] [Thread-70184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:14:56.691 [DEBUG] [Thread-70184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:14:56.700 [DEBUG] [Thread-70184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:14:56.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:14:56.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:14:56.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:14:56.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:14:56.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:14:56.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:14:56.735 [DEBUG] [Thread-70184] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:14:58.731 [DEBUG] [Thread-70186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:13.776 [DEBUG] [Thread-70187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:15:26.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:15:26.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:15:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 15, 20), 26.81, 16.0, 0.0, 52.07, 21.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:15:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:15:20
2025-12-12T13:15:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:15:27.713 [DEBUG] [Thread-70188] [transport.py] [_log()] starting thread (client mode): 0xf574c760
2025-12-12T13:15:27.713 [DEBUG] [Thread-70188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:15:27.734 [DEBUG] [Thread-70188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:15:27.734 [INFO] [Thread-70188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:15:27.737 [DEBUG] [Thread-70188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] client lang: <none>
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] server lang: <none>
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] kex follows: False
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] Compression: none
2025-12-12T13:15:27.738 [DEBUG] [Thread-70188] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:15:27.755 [DEBUG] [Thread-70188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:15:27.756 [DEBUG] [Thread-70188] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:15:27.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:15:27.757 [DEBUG] [Thread-70188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:15:27.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:15:27.759 [DEBUG] [Thread-70188] [transport.py] [_log()] userauth is OK
2025-12-12T13:15:27.759 [DEBUG] [Thread-70188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:15:27.759 [DEBUG] [Thread-70188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:15:27.759 [DEBUG] [Thread-70188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:15:27.760 [DEBUG] [Thread-70188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:15:27.776 [INFO] [Thread-70188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:15:27.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:15:28.410 [DEBUG] [Thread-70188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:15:28.411 [DEBUG] [Thread-70188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:15:28.411 [DEBUG] [Thread-70188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:15:28.452 [DEBUG] [Thread-70188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:15:28.452 [DEBUG] [Thread-70188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:15:28.455 [DEBUG] [Thread-70188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:15:28.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:15:28.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:15:28.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:15:28.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:15:28.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:15:28.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:15:28.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:15:28.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:15:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:15:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.468845 -999.00  +21.40  58.34     19   -2.50 1 1 2 1 1   888    0 21.84 -7.61 ----- 63.1 58.3 323.6 72.5 25.6 -26.7 25.0 -25.9 25.1 -23.8 25.7 -22.8
2025-12-12T13:15:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:15:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:15:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.468845
2025-12-12T13:15:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:15:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:15:28.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:15:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:15:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:15:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:15:20', tmtdew=26.81, humidity=16.0, cloud=0.0, wind=52.07, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:15:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:15:28.480 [DEBUG] [Thread-70188] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:15:28.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:15:28.578 [DEBUG] [Thread-70191] [transport.py] [_log()] starting thread (client mode): 0xf574dba0
2025-12-12T13:15:28.578 [DEBUG] [Thread-70191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:15:28.592 [DEBUG] [Thread-70191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:15:28.592 [INFO] [Thread-70191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] client lang: <none>
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] server lang: <none>
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] kex follows: False
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:15:28.600 [DEBUG] [Thread-70191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:15:28.601 [DEBUG] [Thread-70191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:15:28.601 [DEBUG] [Thread-70191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:15:28.601 [DEBUG] [Thread-70191] [transport.py] [_log()] Compression: none
2025-12-12T13:15:28.601 [DEBUG] [Thread-70191] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:15:28.656 [DEBUG] [Thread-70191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:15:28.656 [DEBUG] [Thread-70191] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:15:28.657 [DEBUG] [Thread-70191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:15:28.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:15:28.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:15:28.713 [DEBUG] [Thread-70191] [transport.py] [_log()] userauth is OK
2025-12-12T13:15:28.713 [DEBUG] [Thread-70191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:15:28.713 [DEBUG] [Thread-70191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:15:28.713 [DEBUG] [Thread-70191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:15:28.713 [DEBUG] [Thread-70191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:15:28.732 [INFO] [Thread-70191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:15:28.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:15:28.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:15:28.802 [DEBUG] [Thread-70193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:29.567 [DEBUG] [Thread-70191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:15:29.567 [DEBUG] [Thread-70191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:15:29.616 [DEBUG] [Thread-70191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:15:29.616 [DEBUG] [Thread-70191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:15:29.625 [DEBUG] [Thread-70191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:15:29.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:15:29.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:15:29.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:15:29.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:15:29.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:15:29.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:15:29.661 [DEBUG] [Thread-70191] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:15:42.291 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:42.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:43.851 [DEBUG] [Thread-70194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:44.186 [DEBUG] [Thread-70195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:58.879 [DEBUG] [Thread-70196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:15:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:15:59.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:15:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:16:00.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 15, 52), 28.1, 14.42, 0.0, 64.31, 21.56, 0, 0, 0, 2, 2, 0),)
2025-12-12T13:16:00.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:15:52
2025-12-12T13:16:00.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:16:00.603 [DEBUG] [Thread-70197] [transport.py] [_log()] starting thread (client mode): 0xf574f550
2025-12-12T13:16:00.604 [DEBUG] [Thread-70197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:16:00.624 [DEBUG] [Thread-70197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:16:00.625 [INFO] [Thread-70197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:16:00.628 [DEBUG] [Thread-70197] [transport.py] [_log()] client lang: <none>
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] server lang: <none>
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] kex follows: False
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] Compression: none
2025-12-12T13:16:00.629 [DEBUG] [Thread-70197] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:16:00.648 [DEBUG] [Thread-70197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:16:00.648 [DEBUG] [Thread-70197] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:16:00.649 [DEBUG] [Thread-70197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:16:00.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:16:00.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:16:00.652 [DEBUG] [Thread-70197] [transport.py] [_log()] userauth is OK
2025-12-12T13:16:00.652 [DEBUG] [Thread-70197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:16:00.652 [DEBUG] [Thread-70197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:16:00.653 [DEBUG] [Thread-70197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:16:00.653 [DEBUG] [Thread-70197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:16:00.673 [INFO] [Thread-70197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:16:00.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:16:01.254 [DEBUG] [Thread-70197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:16:01.254 [DEBUG] [Thread-70197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:16:01.255 [DEBUG] [Thread-70197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:16:01.295 [DEBUG] [Thread-70197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:16:01.295 [DEBUG] [Thread-70197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:16:01.298 [DEBUG] [Thread-70197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:16:01.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:16:01.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:16:01.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:16:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:16:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:16:01.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:16:01.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:16:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.469192 -999.00  +21.80  48.66     20   -2.00 1 1 2 1 1   888    0 21.67 0.58 ----- 44.7 48.7 326.6 69.7 25.7 -25.3 25.1 -25.9 25.3 -22.2 25.7 -22.9
2025-12-12T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.469192
2025-12-12T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:16:01.322 [DEBUG] [Thread-70197] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:16:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:16:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:15:52', tmtdew=28.1, humidity=14.42, cloud=0.0, wind=64.31, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:15:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:16:01.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:16:01.413 [DEBUG] [Thread-70200] [transport.py] [_log()] starting thread (client mode): 0xf81e7d00
2025-12-12T13:16:01.413 [DEBUG] [Thread-70200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:16:01.427 [DEBUG] [Thread-70200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:16:01.427 [INFO] [Thread-70200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] client lang: <none>
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] server lang: <none>
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] kex follows: False
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:16:01.435 [DEBUG] [Thread-70200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:16:01.436 [DEBUG] [Thread-70200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:16:01.436 [DEBUG] [Thread-70200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:16:01.436 [DEBUG] [Thread-70200] [transport.py] [_log()] Compression: none
2025-12-12T13:16:01.436 [DEBUG] [Thread-70200] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:16:01.494 [DEBUG] [Thread-70200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:16:01.495 [DEBUG] [Thread-70200] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:16:01.495 [DEBUG] [Thread-70200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:16:01.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:16:01.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:16:01.549 [DEBUG] [Thread-70200] [transport.py] [_log()] userauth is OK
2025-12-12T13:16:01.550 [DEBUG] [Thread-70200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:16:01.550 [DEBUG] [Thread-70200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:16:01.550 [DEBUG] [Thread-70200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:16:01.550 [DEBUG] [Thread-70200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:16:01.568 [INFO] [Thread-70200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:16:01.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:16:01.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:16:02.437 [DEBUG] [Thread-70200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:16:02.437 [DEBUG] [Thread-70200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:16:02.486 [DEBUG] [Thread-70200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:16:02.486 [DEBUG] [Thread-70200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:16:02.495 [DEBUG] [Thread-70200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:16:02.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:16:02.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:16:02.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:16:02.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:16:02.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:16:02.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:16:02.530 [DEBUG] [Thread-70200] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:16:13.910 [DEBUG] [Thread-70202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:16:28.962 [DEBUG] [Thread-70203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:16:32.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:16:32.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:16:32.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:16:33.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 16, 24), 28.06, 14.44, 0.0, 63.68, 21.4, 0, 0, 0, 2, 2, 0),)
2025-12-12T13:16:33.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:16:24
2025-12-12T13:16:33.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:16:33.525 [DEBUG] [Thread-70204] [transport.py] [_log()] starting thread (client mode): 0xf81e5570
2025-12-12T13:16:33.525 [DEBUG] [Thread-70204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:16:33.545 [DEBUG] [Thread-70204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:16:33.545 [INFO] [Thread-70204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] client lang: <none>
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] server lang: <none>
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] kex follows: False
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] Compression: none
2025-12-12T13:16:33.548 [DEBUG] [Thread-70204] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:16:33.565 [DEBUG] [Thread-70204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:16:33.565 [DEBUG] [Thread-70204] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:16:33.565 [DEBUG] [Thread-70204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:16:33.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:16:33.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:16:33.566 [DEBUG] [Thread-70204] [transport.py] [_log()] userauth is OK
2025-12-12T13:16:33.566 [DEBUG] [Thread-70204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:16:33.566 [DEBUG] [Thread-70204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:16:33.566 [DEBUG] [Thread-70204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:16:33.566 [DEBUG] [Thread-70204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:16:33.576 [INFO] [Thread-70204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:16:33.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:16:34.207 [DEBUG] [Thread-70204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:16:34.207 [DEBUG] [Thread-70204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:16:34.207 [DEBUG] [Thread-70204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:16:34.248 [DEBUG] [Thread-70204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:16:34.248 [DEBUG] [Thread-70204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:16:34.250 [DEBUG] [Thread-70204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:16:34.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:16:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:16:34.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:16:34.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:16:34.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:16:34.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:16:34.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.469539 -999.00  +22.00  49.28     19   -2.40 1 1 2 1 1   888    0 22.24 9.96 ----- 48.5 49.3 326.2 63.6 25.8 -24.7 25.2 -24.9 25.2 -23.2 25.9 -23.2
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.469539
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:16:34.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:16:24', tmtdew=28.06, humidity=14.44, cloud=0.0, wind=63.68, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:16:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:16:34.268 [DEBUG] [Thread-70204] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:16:34.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:16:34.354 [DEBUG] [Thread-70207] [transport.py] [_log()] starting thread (client mode): 0xf81e45b0
2025-12-12T13:16:34.354 [DEBUG] [Thread-70207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:16:34.369 [DEBUG] [Thread-70207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:16:34.369 [INFO] [Thread-70207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] client lang: <none>
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] server lang: <none>
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] kex follows: False
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] Compression: none
2025-12-12T13:16:34.378 [DEBUG] [Thread-70207] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:16:34.435 [DEBUG] [Thread-70207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:16:34.436 [DEBUG] [Thread-70207] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:16:34.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:16:34.436 [DEBUG] [Thread-70207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:16:34.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:16:34.494 [DEBUG] [Thread-70207] [transport.py] [_log()] userauth is OK
2025-12-12T13:16:34.494 [DEBUG] [Thread-70207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:16:34.494 [DEBUG] [Thread-70207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:16:34.494 [DEBUG] [Thread-70207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:16:34.495 [DEBUG] [Thread-70207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:16:34.517 [INFO] [Thread-70207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:16:34.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:16:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:16:35.357 [DEBUG] [Thread-70207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:16:35.357 [DEBUG] [Thread-70207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:16:35.405 [DEBUG] [Thread-70207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:16:35.405 [DEBUG] [Thread-70207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:16:35.414 [DEBUG] [Thread-70207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:16:35.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:16:35.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:16:35.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:16:35.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:16:35.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:16:35.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:16:35.450 [DEBUG] [Thread-70207] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:16:42.434 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:16:42.435 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:16:43.993 [DEBUG] [Thread-70209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:16:44.239 [DEBUG] [Thread-70210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:16:59.032 [DEBUG] [Thread-70211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:17:05.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:17:05.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:17:06.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 16, 56), 27.97, 14.62, 0.0, 61.5, 21.5, 0, 0, 0, 2, 2, 0),)
2025-12-12T13:17:06.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:16:56
2025-12-12T13:17:06.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:17:06.428 [DEBUG] [Thread-70212] [transport.py] [_log()] starting thread (client mode): 0xf813f010
2025-12-12T13:17:06.428 [DEBUG] [Thread-70212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:17:06.448 [DEBUG] [Thread-70212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:17:06.448 [INFO] [Thread-70212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] client lang: <none>
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] server lang: <none>
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] kex follows: False
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] Compression: none
2025-12-12T13:17:06.451 [DEBUG] [Thread-70212] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:17:06.468 [DEBUG] [Thread-70212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:17:06.469 [DEBUG] [Thread-70212] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:17:06.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:17:06.470 [DEBUG] [Thread-70212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:17:06.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:17:06.472 [DEBUG] [Thread-70212] [transport.py] [_log()] userauth is OK
2025-12-12T13:17:06.472 [DEBUG] [Thread-70212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:17:06.472 [DEBUG] [Thread-70212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:17:06.472 [DEBUG] [Thread-70212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:17:06.472 [DEBUG] [Thread-70212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:17:06.506 [INFO] [Thread-70212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:17:06.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:17:07.090 [DEBUG] [Thread-70212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:17:07.091 [DEBUG] [Thread-70212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:17:07.091 [DEBUG] [Thread-70212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:17:07.133 [DEBUG] [Thread-70212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:17:07.133 [DEBUG] [Thread-70212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:17:07.136 [DEBUG] [Thread-70212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:17:07.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:17:07.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:17:07.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:17:07.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:17:07.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:17:07.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:17:07.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:17:07.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:17:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:17:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.469887 -999.00  +21.30  58.48     20   -2.20 1 1 2 1 1   888    0 22.96 15.53 ----- 48.4 58.5 331.6 74.9 25.8 -25.3 25.2 -25.4 25.3 -23.4 25.9 -23.5
2025-12-12T13:17:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:17:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:17:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.469887
2025-12-12T13:17:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:17:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:17:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:17:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:17:07.161 [DEBUG] [Thread-70212] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:17:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:17:07.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:16:56', tmtdew=27.97, humidity=14.62, cloud=0.0, wind=61.5, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:16:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:17:07.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:17:07.256 [DEBUG] [Thread-70215] [transport.py] [_log()] starting thread (client mode): 0xf813cf10
2025-12-12T13:17:07.256 [DEBUG] [Thread-70215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:17:07.271 [DEBUG] [Thread-70215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:17:07.271 [INFO] [Thread-70215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:17:07.278 [DEBUG] [Thread-70215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:17:07.278 [DEBUG] [Thread-70215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:17:07.278 [DEBUG] [Thread-70215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:17:07.278 [DEBUG] [Thread-70215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:07.278 [DEBUG] [Thread-70215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:07.278 [DEBUG] [Thread-70215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] client lang: <none>
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] server lang: <none>
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] kex follows: False
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] Compression: none
2025-12-12T13:17:07.279 [DEBUG] [Thread-70215] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:17:07.333 [DEBUG] [Thread-70215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:17:07.333 [DEBUG] [Thread-70215] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:17:07.333 [DEBUG] [Thread-70215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:17:07.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:17:07.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:17:07.391 [DEBUG] [Thread-70215] [transport.py] [_log()] userauth is OK
2025-12-12T13:17:07.391 [DEBUG] [Thread-70215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:17:07.391 [DEBUG] [Thread-70215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:17:07.391 [DEBUG] [Thread-70215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:17:07.391 [DEBUG] [Thread-70215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:17:07.405 [INFO] [Thread-70215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:17:07.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:17:07.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:17:08.267 [DEBUG] [Thread-70215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:17:08.267 [DEBUG] [Thread-70215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:17:08.314 [DEBUG] [Thread-70215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:17:08.315 [DEBUG] [Thread-70215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:17:08.323 [DEBUG] [Thread-70215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:17:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:17:08.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:17:08.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
2025-12-12T13:17:08.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:17:08.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:17:08.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:17:08.356 [DEBUG] [Thread-70215] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:17:14.062 [DEBUG] [Thread-70217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:29.115 [DEBUG] [Thread-70218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:38.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:17:38.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:17:38.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:17:39.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 17, 28), 27.55, 15.02, 0.0, 57.69, 21.2, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:17:39.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:17:28
2025-12-12T13:17:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:17:39.324 [DEBUG] [Thread-70219] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-12T13:17:39.324 [DEBUG] [Thread-70219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:17:39.343 [DEBUG] [Thread-70219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:17:39.343 [INFO] [Thread-70219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:17:39.346 [DEBUG] [Thread-70219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:17:39.346 [DEBUG] [Thread-70219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:17:39.346 [DEBUG] [Thread-70219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] client lang: <none>
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] server lang: <none>
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] kex follows: False
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] Compression: none
2025-12-12T13:17:39.347 [DEBUG] [Thread-70219] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:17:39.355 [DEBUG] [Thread-70219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:17:39.355 [DEBUG] [Thread-70219] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:17:39.356 [DEBUG] [Thread-70219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:17:39.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:17:39.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:17:39.357 [DEBUG] [Thread-70219] [transport.py] [_log()] userauth is OK
2025-12-12T13:17:39.358 [DEBUG] [Thread-70219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:17:39.358 [DEBUG] [Thread-70219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:17:39.358 [DEBUG] [Thread-70219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:17:39.358 [DEBUG] [Thread-70219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:17:39.381 [INFO] [Thread-70219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:17:39.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:17:40.008 [DEBUG] [Thread-70219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:17:40.009 [DEBUG] [Thread-70219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:17:40.009 [DEBUG] [Thread-70219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:17:40.050 [DEBUG] [Thread-70219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:17:40.050 [DEBUG] [Thread-70219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:17:40.053 [DEBUG] [Thread-70219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:17:40.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:17:40.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:17:40.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:17:40.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:17:40.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:17:40.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:17:40.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:17:40.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:17:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:17:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.470234 -999.00  +21.70  53.24     20   -1.60 1 1 2 1 1   888    0 22.04 16.31 ----- 49.4 53.2 326.6 66.1 25.8 -25.6 25.2 -26.0 25.3 -23.3 25.9 -23.3
2025-12-12T13:17:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:17:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:17:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.470234
2025-12-12T13:17:40.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:17:40.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:17:40.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:17:40.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:17:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:17:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:17:28', tmtdew=27.55, humidity=15.02, cloud=0.0, wind=57.69, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:17:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:17:40.078 [DEBUG] [Thread-70219] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:17:40.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:17:40.179 [DEBUG] [Thread-70222] [transport.py] [_log()] starting thread (client mode): 0xf574ee60
2025-12-12T13:17:40.179 [DEBUG] [Thread-70222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:17:40.199 [DEBUG] [Thread-70222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:17:40.200 [INFO] [Thread-70222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:17:40.207 [DEBUG] [Thread-70222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:17:40.208 [DEBUG] [Thread-70222] [transport.py] [_log()] client lang: <none>
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] server lang: <none>
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] kex follows: False
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:17:40.209 [DEBUG] [Thread-70222] [transport.py] [_log()] Compression: none
2025-12-12T13:17:40.210 [DEBUG] [Thread-70222] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:17:40.274 [DEBUG] [Thread-70222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:17:40.275 [DEBUG] [Thread-70222] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:17:40.275 [DEBUG] [Thread-70222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:17:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:17:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:17:40.339 [DEBUG] [Thread-70222] [transport.py] [_log()] userauth is OK
2025-12-12T13:17:40.339 [DEBUG] [Thread-70222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:17:40.339 [DEBUG] [Thread-70222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:17:40.339 [DEBUG] [Thread-70222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:17:40.339 [DEBUG] [Thread-70222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:17:40.363 [INFO] [Thread-70222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:17:40.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:17:40.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:17:41.179 [DEBUG] [Thread-70222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:17:41.179 [DEBUG] [Thread-70222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:17:41.231 [DEBUG] [Thread-70222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:17:41.231 [DEBUG] [Thread-70222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:17:41.241 [DEBUG] [Thread-70222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:17:41.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:17:41.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:17:41.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:17:41.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:17:41.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:17:41.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:17:41.284 [DEBUG] [Thread-70222] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:17:42.575 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:42.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:44.145 [DEBUG] [Thread-70224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:44.287 [DEBUG] [Thread-70225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:17:59.199 [DEBUG] [Thread-70226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:11.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:18:11.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:18:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:18:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 18, 1), 26.65, 15.91, 0.0, 56.73, 20.88, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:18:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:18:01
2025-12-12T13:18:12.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:18:12.257 [DEBUG] [Thread-70227] [transport.py] [_log()] starting thread (client mode): 0xf81e7850
2025-12-12T13:18:12.257 [DEBUG] [Thread-70227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:18:12.278 [DEBUG] [Thread-70227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:18:12.278 [INFO] [Thread-70227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] client lang: <none>
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] server lang: <none>
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] kex follows: False
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] Compression: none
2025-12-12T13:18:12.281 [DEBUG] [Thread-70227] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:18:12.300 [DEBUG] [Thread-70227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:18:12.301 [DEBUG] [Thread-70227] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:18:12.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:18:12.302 [DEBUG] [Thread-70227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:18:12.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:18:12.304 [DEBUG] [Thread-70227] [transport.py] [_log()] userauth is OK
2025-12-12T13:18:12.305 [DEBUG] [Thread-70227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:18:12.305 [DEBUG] [Thread-70227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:18:12.305 [DEBUG] [Thread-70227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:18:12.305 [DEBUG] [Thread-70227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:18:12.337 [INFO] [Thread-70227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:18:12.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:18:12.979 [DEBUG] [Thread-70227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:18:12.980 [DEBUG] [Thread-70227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:18:12.980 [DEBUG] [Thread-70227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:18:13.021 [DEBUG] [Thread-70227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:18:13.021 [DEBUG] [Thread-70227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:18:13.023 [DEBUG] [Thread-70227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:18:13.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:18:13.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:18:13.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:18:13.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:18:13.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:18:13.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:18:13.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:18:13.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:18:13.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:18:13.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.470581 -999.00  +21.20  48.21     21   -1.80 1 1 2 1 1   888    0 22.78 13.86 ----- 38.2 48.2 337.4 60.6 25.8 -25.8 25.2 -25.9 25.2 -23.5 25.9 -23.3
2025-12-12T13:18:13.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:18:13.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:18:13.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.470581
2025-12-12T13:18:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:18:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:18:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:18:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:18:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:18:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:18:01', tmtdew=26.65, humidity=15.91, cloud=0.0, wind=56.73, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:17:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:18:13.046 [DEBUG] [Thread-70227] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:18:13.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:18:13.143 [DEBUG] [Thread-70230] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-12T13:18:13.143 [DEBUG] [Thread-70230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:18:13.158 [DEBUG] [Thread-70230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:18:13.158 [INFO] [Thread-70230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:18:13.165 [DEBUG] [Thread-70230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:18:13.166 [DEBUG] [Thread-70230] [transport.py] [_log()] client lang: <none>
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] server lang: <none>
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] kex follows: False
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:18:13.167 [DEBUG] [Thread-70230] [transport.py] [_log()] Compression: none
2025-12-12T13:18:13.168 [DEBUG] [Thread-70230] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:18:13.225 [DEBUG] [Thread-70230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:18:13.225 [DEBUG] [Thread-70230] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:18:13.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:18:13.226 [DEBUG] [Thread-70230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:18:13.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:18:13.281 [DEBUG] [Thread-70230] [transport.py] [_log()] userauth is OK
2025-12-12T13:18:13.281 [DEBUG] [Thread-70230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:18:13.281 [DEBUG] [Thread-70230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:18:13.281 [DEBUG] [Thread-70230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:18:13.281 [DEBUG] [Thread-70230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:18:13.300 [INFO] [Thread-70230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:18:13.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:18:13.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:18:14.166 [DEBUG] [Thread-70230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:18:14.166 [DEBUG] [Thread-70230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:18:14.214 [DEBUG] [Thread-70230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:18:14.214 [DEBUG] [Thread-70230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:18:14.223 [DEBUG] [Thread-70230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:18:14.229 [DEBUG] [Thread-70232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:14.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:18:14.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:18:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:18:14.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:18:14.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:18:14.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:18:14.257 [DEBUG] [Thread-70230] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:18:29.269 [DEBUG] [Thread-70233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:42.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:42.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:44.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:18:44.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:18:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:18:44.295 [DEBUG] [Thread-70234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:44.334 [DEBUG] [Thread-70235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:18:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 18, 33), 26.4, 16.23, 0.0, 56.99, 20.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:18:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:18:33
2025-12-12T13:18:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:18:45.231 [DEBUG] [Thread-70236] [transport.py] [_log()] starting thread (client mode): 0xf81e5c60
2025-12-12T13:18:45.231 [DEBUG] [Thread-70236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:18:45.254 [DEBUG] [Thread-70236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:18:45.254 [INFO] [Thread-70236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] client lang: <none>
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] server lang: <none>
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] kex follows: False
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] Compression: none
2025-12-12T13:18:45.255 [DEBUG] [Thread-70236] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:18:45.266 [DEBUG] [Thread-70236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:18:45.267 [DEBUG] [Thread-70236] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:18:45.267 [DEBUG] [Thread-70236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:18:45.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:18:45.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:18:45.270 [DEBUG] [Thread-70236] [transport.py] [_log()] userauth is OK
2025-12-12T13:18:45.270 [DEBUG] [Thread-70236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:18:45.270 [DEBUG] [Thread-70236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:18:45.270 [DEBUG] [Thread-70236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:18:45.270 [DEBUG] [Thread-70236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:18:45.294 [INFO] [Thread-70236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:18:45.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:18:45.936 [DEBUG] [Thread-70236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:18:45.936 [DEBUG] [Thread-70236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:18:45.936 [DEBUG] [Thread-70236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:18:45.977 [DEBUG] [Thread-70236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:18:45.977 [DEBUG] [Thread-70236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:18:45.980 [DEBUG] [Thread-70236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:18:45.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:18:45.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:18:45.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:18:45.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:18:46.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:18:46.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:18:46.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:18:46.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:18:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:18:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.470928 -999.00  +20.70  43.70     22   -1.50 1 1 2 1 1   888    0 22.60 10.48 ----- 45.7 43.7 344.0 63.1 25.6 -29.8 25.1 -26.4 25.2 -22.0 25.8 -29.3
2025-12-12T13:18:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:18:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:18:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.470928
2025-12-12T13:18:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:18:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:18:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:18:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:18:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:18:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:18:33', tmtdew=26.4, humidity=16.23, cloud=0.0, wind=56.99, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:18:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:18:46.007 [DEBUG] [Thread-70236] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:18:46.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:18:46.103 [DEBUG] [Thread-70239] [transport.py] [_log()] starting thread (client mode): 0xf5703490
2025-12-12T13:18:46.103 [DEBUG] [Thread-70239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:18:46.118 [DEBUG] [Thread-70239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:18:46.118 [INFO] [Thread-70239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:18:46.125 [DEBUG] [Thread-70239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:18:46.126 [DEBUG] [Thread-70239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] client lang: <none>
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] server lang: <none>
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] kex follows: False
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:18:46.127 [DEBUG] [Thread-70239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:18:46.128 [DEBUG] [Thread-70239] [transport.py] [_log()] Compression: none
2025-12-12T13:18:46.128 [DEBUG] [Thread-70239] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:18:46.185 [DEBUG] [Thread-70239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:18:46.186 [DEBUG] [Thread-70239] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:18:46.186 [DEBUG] [Thread-70239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:18:46.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:18:46.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:18:46.241 [DEBUG] [Thread-70239] [transport.py] [_log()] userauth is OK
2025-12-12T13:18:46.242 [DEBUG] [Thread-70239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:18:46.242 [DEBUG] [Thread-70239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:18:46.242 [DEBUG] [Thread-70239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:18:46.242 [DEBUG] [Thread-70239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:18:46.261 [INFO] [Thread-70239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:18:46.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:18:46.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:18:47.115 [DEBUG] [Thread-70239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:18:47.116 [DEBUG] [Thread-70239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:18:47.164 [DEBUG] [Thread-70239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:18:47.164 [DEBUG] [Thread-70239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:18:47.173 [DEBUG] [Thread-70239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:18:47.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:18:47.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:18:47.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:18:47.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:18:47.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:18:47.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:18:47.207 [DEBUG] [Thread-70239] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:18:59.324 [DEBUG] [Thread-70241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:14.371 [DEBUG] [Thread-70242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:19:17.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:19:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:19:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 19, 5), 26.36, 16.3, 0.0, 51.79, 20.98, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:19:17.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:19:05
2025-12-12T13:19:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:19:18.182 [DEBUG] [Thread-70243] [transport.py] [_log()] starting thread (client mode): 0xf81e5840
2025-12-12T13:19:18.182 [DEBUG] [Thread-70243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:19:18.202 [DEBUG] [Thread-70243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:19:18.202 [INFO] [Thread-70243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] client lang: <none>
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] server lang: <none>
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] kex follows: False
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:19:18.205 [DEBUG] [Thread-70243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:19:18.206 [DEBUG] [Thread-70243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:19:18.206 [DEBUG] [Thread-70243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:19:18.206 [DEBUG] [Thread-70243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:19:18.206 [DEBUG] [Thread-70243] [transport.py] [_log()] Compression: none
2025-12-12T13:19:18.206 [DEBUG] [Thread-70243] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:19:18.214 [DEBUG] [Thread-70243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:19:18.214 [DEBUG] [Thread-70243] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:19:18.215 [DEBUG] [Thread-70243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:19:18.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:19:18.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:19:18.217 [DEBUG] [Thread-70243] [transport.py] [_log()] userauth is OK
2025-12-12T13:19:18.217 [DEBUG] [Thread-70243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:19:18.217 [DEBUG] [Thread-70243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:19:18.217 [DEBUG] [Thread-70243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:19:18.217 [DEBUG] [Thread-70243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:19:18.241 [INFO] [Thread-70243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:19:18.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:19:18.842 [DEBUG] [Thread-70243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:19:18.843 [DEBUG] [Thread-70243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:19:18.843 [DEBUG] [Thread-70243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:19:18.884 [DEBUG] [Thread-70243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:19:18.884 [DEBUG] [Thread-70243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:19:18.886 [DEBUG] [Thread-70243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:19:18.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:19:18.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:19:18.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:19:18.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:19:18.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:19:18.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:19:18.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:19:18.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:19:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:19:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.471623 -999.00  +21.10  53.86     22   -0.90 1 1 2 1 1   888    0 22.52 0.44 ----- 50.2 53.9 327.8 62.9 25.7 -25.0 25.0 -25.2 25.2 -22.5 25.7 -22.5
2025-12-12T13:19:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:19:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:19:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.471623
2025-12-12T13:19:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:19:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:19:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:19:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:19:18.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:19:18.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:19:05', tmtdew=26.36, humidity=16.3, cloud=0.0, wind=51.79, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:19:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:19:18.912 [DEBUG] [Thread-70243] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:19:18.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:19:19.008 [DEBUG] [Thread-70246] [transport.py] [_log()] starting thread (client mode): 0xf81e79d0
2025-12-12T13:19:19.008 [DEBUG] [Thread-70246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:19:19.023 [DEBUG] [Thread-70246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:19:19.023 [INFO] [Thread-70246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:19:19.030 [DEBUG] [Thread-70246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] client lang: <none>
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] server lang: <none>
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] kex follows: False
2025-12-12T13:19:19.031 [DEBUG] [Thread-70246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:19:19.032 [DEBUG] [Thread-70246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:19:19.032 [DEBUG] [Thread-70246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:19:19.032 [DEBUG] [Thread-70246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:19:19.032 [DEBUG] [Thread-70246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:19:19.032 [DEBUG] [Thread-70246] [transport.py] [_log()] Compression: none
2025-12-12T13:19:19.032 [DEBUG] [Thread-70246] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:19:19.090 [DEBUG] [Thread-70246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:19:19.091 [DEBUG] [Thread-70246] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:19:19.092 [DEBUG] [Thread-70246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:19:19.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:19:19.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:19:19.147 [DEBUG] [Thread-70246] [transport.py] [_log()] userauth is OK
2025-12-12T13:19:19.147 [DEBUG] [Thread-70246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:19:19.148 [DEBUG] [Thread-70246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:19:19.148 [DEBUG] [Thread-70246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:19:19.148 [DEBUG] [Thread-70246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:19:19.166 [INFO] [Thread-70246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:19:19.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:19:19.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:19:20.003 [DEBUG] [Thread-70246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:19:20.003 [DEBUG] [Thread-70246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:19:20.051 [DEBUG] [Thread-70246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:19:20.051 [DEBUG] [Thread-70246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:19:20.059 [DEBUG] [Thread-70246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:19:20.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:19:20.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:19:20.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:19:20.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:19:20.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:19:20.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:19:20.093 [DEBUG] [Thread-70246] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:19:29.401 [DEBUG] [Thread-70248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:42.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:42.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:44.383 [DEBUG] [Thread-70249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:44.445 [DEBUG] [Thread-70250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:19:50.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:19:50.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:19:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:19:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 19, 37), 25.91, 16.96, 0.0, 53.73, 20.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:19:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:19:37
2025-12-12T13:19:50.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:19:51.057 [DEBUG] [Thread-70251] [transport.py] [_log()] starting thread (client mode): 0xf813e230
2025-12-12T13:19:51.058 [DEBUG] [Thread-70251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:19:51.078 [DEBUG] [Thread-70251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:19:51.078 [INFO] [Thread-70251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] client lang: <none>
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] server lang: <none>
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] kex follows: False
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] Compression: none
2025-12-12T13:19:51.081 [DEBUG] [Thread-70251] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:19:51.099 [DEBUG] [Thread-70251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:19:51.100 [DEBUG] [Thread-70251] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:19:51.100 [DEBUG] [Thread-70251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:19:51.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:19:51.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:19:51.102 [DEBUG] [Thread-70251] [transport.py] [_log()] userauth is OK
2025-12-12T13:19:51.102 [DEBUG] [Thread-70251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:19:51.103 [DEBUG] [Thread-70251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:19:51.103 [DEBUG] [Thread-70251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:19:51.103 [DEBUG] [Thread-70251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:19:51.126 [INFO] [Thread-70251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:19:51.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:19:51.744 [DEBUG] [Thread-70251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:19:51.745 [DEBUG] [Thread-70251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:19:51.745 [DEBUG] [Thread-70251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:19:51.786 [DEBUG] [Thread-70251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:19:51.786 [DEBUG] [Thread-70251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:19:51.789 [DEBUG] [Thread-70251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:19:51.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:19:51.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:19:51.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:19:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:19:51.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:19:51.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:19:51.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:19:51.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:19:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:19:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.471970 -999.00  +21.30  50.08     22   -0.90 1 1 2 1 1   888    0 22.69 1.25 ----- 49.9 50.1 328.1 68.0 25.8 -25.0 25.1 -25.3 25.2 -24.3 25.8 -22.5
2025-12-12T13:19:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:19:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:19:51.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.471970
2025-12-12T13:19:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:19:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:19:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:19:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:19:51.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:19:51.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:19:37', tmtdew=25.91, humidity=16.96, cloud=0.0, wind=53.73, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:19:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:19:51.815 [DEBUG] [Thread-70251] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:19:51.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:19:51.910 [DEBUG] [Thread-70254] [transport.py] [_log()] starting thread (client mode): 0xfabc6b00
2025-12-12T13:19:51.910 [DEBUG] [Thread-70254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:19:51.925 [DEBUG] [Thread-70254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:19:51.926 [INFO] [Thread-70254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:19:51.934 [DEBUG] [Thread-70254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] client lang: <none>
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] server lang: <none>
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] kex follows: False
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:19:51.935 [DEBUG] [Thread-70254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:19:51.936 [DEBUG] [Thread-70254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:19:51.936 [DEBUG] [Thread-70254] [transport.py] [_log()] Compression: none
2025-12-12T13:19:51.936 [DEBUG] [Thread-70254] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:19:51.994 [DEBUG] [Thread-70254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:19:51.995 [DEBUG] [Thread-70254] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:19:51.995 [DEBUG] [Thread-70254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:19:51.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:19:51.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:19:52.051 [DEBUG] [Thread-70254] [transport.py] [_log()] userauth is OK
2025-12-12T13:19:52.051 [DEBUG] [Thread-70254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:19:52.051 [DEBUG] [Thread-70254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:19:52.051 [DEBUG] [Thread-70254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:19:52.051 [DEBUG] [Thread-70254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:19:52.070 [INFO] [Thread-70254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:19:52.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:19:52.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:19:52.912 [DEBUG] [Thread-70254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:19:52.912 [DEBUG] [Thread-70254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:19:52.961 [DEBUG] [Thread-70254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:19:52.961 [DEBUG] [Thread-70254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:19:52.969 [DEBUG] [Thread-70254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:19:52.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:19:52.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:19:52.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:19:52.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:19:52.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:19:52.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:19:53.003 [DEBUG] [Thread-70254] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:19:59.471 [DEBUG] [Thread-70256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:14.528 [DEBUG] [Thread-70257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:20:23.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:20:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:20:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 20, 9), 26.09, 16.8, 0.0, 50.11, 21.18, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:20:23.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:20:09
2025-12-12T13:20:23.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:20:23.998 [DEBUG] [Thread-70258] [transport.py] [_log()] starting thread (client mode): 0xf574cd30
2025-12-12T13:20:23.998 [DEBUG] [Thread-70258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:20:24.018 [DEBUG] [Thread-70258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:20:24.018 [INFO] [Thread-70258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] client lang: <none>
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] server lang: <none>
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] kex follows: False
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] Compression: none
2025-12-12T13:20:24.022 [DEBUG] [Thread-70258] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:20:24.037 [DEBUG] [Thread-70258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:20:24.037 [DEBUG] [Thread-70258] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:20:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:20:24.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:20:24.038 [DEBUG] [Thread-70258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:20:24.038 [DEBUG] [Thread-70258] [transport.py] [_log()] userauth is OK
2025-12-12T13:20:24.038 [DEBUG] [Thread-70258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:20:24.038 [DEBUG] [Thread-70258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:20:24.039 [DEBUG] [Thread-70258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:20:24.039 [DEBUG] [Thread-70258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:20:24.058 [INFO] [Thread-70258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:20:24.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:20:24.703 [DEBUG] [Thread-70258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:20:24.703 [DEBUG] [Thread-70258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:20:24.703 [DEBUG] [Thread-70258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:20:24.743 [DEBUG] [Thread-70258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:20:24.743 [DEBUG] [Thread-70258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:20:24.747 [DEBUG] [Thread-70258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:20:24.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:20:24.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:20:24.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:20:24.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:20:24.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:20:24.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:20:24.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.472317 -999.00  +20.60  30.67     22   -1.30 1 1 2 1 1   888    0 21.96 4.40 ----- 51.4 30.7 2.3 62.3 25.4 -26.5 24.9 -27.4 25.2 -24.3 25.6 -27.3
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.472317
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:20:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:20:09', tmtdew=26.09, humidity=16.8, cloud=0.0, wind=50.11, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:20:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:20:24.769 [DEBUG] [Thread-70258] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:20:24.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:20:24.854 [DEBUG] [Thread-70261] [transport.py] [_log()] starting thread (client mode): 0xf574e4d0
2025-12-12T13:20:24.855 [DEBUG] [Thread-70261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:20:24.869 [DEBUG] [Thread-70261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:20:24.870 [INFO] [Thread-70261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:20:24.877 [DEBUG] [Thread-70261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:20:24.877 [DEBUG] [Thread-70261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:20:24.877 [DEBUG] [Thread-70261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] client lang: <none>
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] server lang: <none>
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] kex follows: False
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] Compression: none
2025-12-12T13:20:24.878 [DEBUG] [Thread-70261] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:20:24.934 [DEBUG] [Thread-70261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:20:24.934 [DEBUG] [Thread-70261] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:20:24.935 [DEBUG] [Thread-70261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:20:24.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:20:24.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:20:24.992 [DEBUG] [Thread-70261] [transport.py] [_log()] userauth is OK
2025-12-12T13:20:24.992 [DEBUG] [Thread-70261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:20:24.992 [DEBUG] [Thread-70261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:20:24.992 [DEBUG] [Thread-70261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:20:24.992 [DEBUG] [Thread-70261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:20:25.006 [INFO] [Thread-70261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:20:25.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:20:25.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:20:25.912 [DEBUG] [Thread-70261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:20:25.912 [DEBUG] [Thread-70261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:20:25.963 [DEBUG] [Thread-70261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:20:25.963 [DEBUG] [Thread-70261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:20:25.971 [DEBUG] [Thread-70261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:20:25.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:20:25.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:20:25.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:20:25.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:20:25.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:20:25.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:20:26.005 [DEBUG] [Thread-70261] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:20:29.558 [DEBUG] [Thread-70263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:43.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:43.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:44.435 [DEBUG] [Thread-70264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:44.605 [DEBUG] [Thread-70265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:20:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:20:56.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:20:56.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
2025-12-12T13:20:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 20, 41), 26.6, 16.41, 0.0, 45.08, 21.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:20:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:20:41
2025-12-12T13:20:56.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:20:56.981 [DEBUG] [Thread-70266] [transport.py] [_log()] starting thread (client mode): 0xf813f970
2025-12-12T13:20:56.982 [DEBUG] [Thread-70266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:20:57.002 [DEBUG] [Thread-70266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:20:57.003 [INFO] [Thread-70266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] client lang: <none>
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] server lang: <none>
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] kex follows: False
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:20:57.006 [DEBUG] [Thread-70266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:20:57.007 [DEBUG] [Thread-70266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:20:57.007 [DEBUG] [Thread-70266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:20:57.007 [DEBUG] [Thread-70266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:20:57.007 [DEBUG] [Thread-70266] [transport.py] [_log()] Compression: none
2025-12-12T13:20:57.007 [DEBUG] [Thread-70266] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:20:57.023 [DEBUG] [Thread-70266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:20:57.024 [DEBUG] [Thread-70266] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:20:57.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:20:57.024 [DEBUG] [Thread-70266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:20:57.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:20:57.026 [DEBUG] [Thread-70266] [transport.py] [_log()] userauth is OK
2025-12-12T13:20:57.027 [DEBUG] [Thread-70266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:20:57.027 [DEBUG] [Thread-70266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:20:57.027 [DEBUG] [Thread-70266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:20:57.027 [DEBUG] [Thread-70266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:20:57.045 [INFO] [Thread-70266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:20:57.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:20:57.678 [DEBUG] [Thread-70266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:20:57.679 [DEBUG] [Thread-70266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:20:57.679 [DEBUG] [Thread-70266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:20:57.720 [DEBUG] [Thread-70266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:20:57.720 [DEBUG] [Thread-70266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:20:57.723 [DEBUG] [Thread-70266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:20:57.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:20:57.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:20:57.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:20:57.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:20:57.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:20:57.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:20:57.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.472665 -999.00  +20.40  46.54     22   -1.40 1 1 2 1 1   888    0 22.36 7.99 ----- 51.0 46.5 344.8 65.1 25.4 -26.3 24.8 -26.0 25.1 -23.3 25.4 -26.5
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.472665
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:20:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:20:41', tmtdew=26.6, humidity=16.41, cloud=0.0, wind=45.08, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:20:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:20:57.746 [DEBUG] [Thread-70266] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:20:57.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:20:57.830 [DEBUG] [Thread-70269] [transport.py] [_log()] starting thread (client mode): 0xf81e4e80
2025-12-12T13:20:57.830 [DEBUG] [Thread-70269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:20:57.844 [DEBUG] [Thread-70269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:20:57.845 [INFO] [Thread-70269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:20:57.852 [DEBUG] [Thread-70269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:20:57.852 [DEBUG] [Thread-70269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] client lang: <none>
2025-12-12T13:20:57.853 [DEBUG] [Thread-70269] [transport.py] [_log()] server lang: <none>
2025-12-12T13:20:57.854 [DEBUG] [Thread-70269] [transport.py] [_log()] kex follows: False
2025-12-12T13:20:57.854 [DEBUG] [Thread-70269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:20:57.854 [DEBUG] [Thread-70269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:20:57.854 [DEBUG] [Thread-70269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:20:57.854 [DEBUG] [Thread-70269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:20:57.854 [DEBUG] [Thread-70269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:20:57.855 [DEBUG] [Thread-70269] [transport.py] [_log()] Compression: none
2025-12-12T13:20:57.855 [DEBUG] [Thread-70269] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:20:57.912 [DEBUG] [Thread-70269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:20:57.913 [DEBUG] [Thread-70269] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:20:57.913 [DEBUG] [Thread-70269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:20:57.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:20:57.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:20:57.968 [DEBUG] [Thread-70269] [transport.py] [_log()] userauth is OK
2025-12-12T13:20:57.968 [DEBUG] [Thread-70269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:20:57.968 [DEBUG] [Thread-70269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:20:57.969 [DEBUG] [Thread-70269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:20:57.969 [DEBUG] [Thread-70269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:20:57.994 [INFO] [Thread-70269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:20:57.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:20:57.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:20:58.818 [DEBUG] [Thread-70269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:20:58.818 [DEBUG] [Thread-70269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:20:58.867 [DEBUG] [Thread-70269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:20:58.867 [DEBUG] [Thread-70269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:20:58.876 [DEBUG] [Thread-70269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:20:58.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:20:58.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:20:58.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:20:58.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:20:58.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:20:58.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:20:58.911 [DEBUG] [Thread-70269] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:20:59.636 [DEBUG] [Thread-70271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:14.678 [DEBUG] [Thread-70272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:28.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:21:28.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:21:28.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:21:29.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 21, 13), 26.41, 16.61, 0.0, 40.18, 21.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:21:29.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:21:13
2025-12-12T13:21:29.707 [DEBUG] [Thread-70273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:21:29.889 [DEBUG] [Thread-70274] [transport.py] [_log()] starting thread (client mode): 0xf574f100
2025-12-12T13:21:29.889 [DEBUG] [Thread-70274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:21:29.905 [DEBUG] [Thread-70274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:21:29.905 [INFO] [Thread-70274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] client lang: <none>
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] server lang: <none>
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] kex follows: False
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] Compression: none
2025-12-12T13:21:29.908 [DEBUG] [Thread-70274] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:21:29.926 [DEBUG] [Thread-70274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:21:29.927 [DEBUG] [Thread-70274] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:21:29.927 [DEBUG] [Thread-70274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:21:29.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:21:29.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:21:29.934 [DEBUG] [Thread-70274] [transport.py] [_log()] userauth is OK
2025-12-12T13:21:29.934 [DEBUG] [Thread-70274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:21:29.934 [DEBUG] [Thread-70274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:21:29.934 [DEBUG] [Thread-70274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:21:29.934 [DEBUG] [Thread-70274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:21:29.959 [INFO] [Thread-70274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:21:29.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:21:30.646 [DEBUG] [Thread-70274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:21:30.646 [DEBUG] [Thread-70274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:21:30.646 [DEBUG] [Thread-70274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:21:30.689 [DEBUG] [Thread-70274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:21:30.689 [DEBUG] [Thread-70274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:21:30.694 [DEBUG] [Thread-70274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:21:30.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:21:30.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:21:30.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:21:30.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:21:30.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:21:30.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:21:30.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:21:30.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:21:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:21:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.473012 -999.00  +20.70  31.31     22   -1.20 1 1 2 1 1   888    0 22.43 11.65 ----- 24.0 31.3 346.6 63.8 25.4 -25.3 24.8 -26.1 25.0 -22.9 25.4 -23.6
2025-12-12T13:21:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:21:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:21:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.473012
2025-12-12T13:21:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:21:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:21:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:21:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:21:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:21:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:21:13', tmtdew=26.41, humidity=16.61, cloud=0.0, wind=40.18, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:21:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:21:30.719 [DEBUG] [Thread-70274] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:21:30.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:21:30.812 [DEBUG] [Thread-70277] [transport.py] [_log()] starting thread (client mode): 0xf570d300
2025-12-12T13:21:30.812 [DEBUG] [Thread-70277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:21:30.827 [DEBUG] [Thread-70277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:21:30.827 [INFO] [Thread-70277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] client lang: <none>
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] server lang: <none>
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] kex follows: False
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] Compression: none
2025-12-12T13:21:30.836 [DEBUG] [Thread-70277] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:21:30.894 [DEBUG] [Thread-70277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:21:30.894 [DEBUG] [Thread-70277] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:21:30.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:21:30.895 [DEBUG] [Thread-70277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:21:30.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:21:30.954 [DEBUG] [Thread-70277] [transport.py] [_log()] userauth is OK
2025-12-12T13:21:30.955 [DEBUG] [Thread-70277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:21:30.955 [DEBUG] [Thread-70277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:21:30.955 [DEBUG] [Thread-70277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:21:30.955 [DEBUG] [Thread-70277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:21:30.974 [INFO] [Thread-70277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:21:30.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:21:30.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:21:31.835 [DEBUG] [Thread-70277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:21:31.835 [DEBUG] [Thread-70277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:21:31.883 [DEBUG] [Thread-70277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:21:31.883 [DEBUG] [Thread-70277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:21:31.891 [DEBUG] [Thread-70277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:21:31.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:21:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:21:31.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:21:31.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:21:31.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:21:31.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:21:31.922 [DEBUG] [Thread-70277] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:21:43.139 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:43.140 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:44.480 [DEBUG] [Thread-70279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:44.737 [DEBUG] [Thread-70280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:21:59.781 [DEBUG] [Thread-70281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:22:01.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:22:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:22:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 21, 45), 25.98, 17.06, 0.0, 37.42, 21.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:22:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:21:45
2025-12-12T13:22:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:22:02.910 [DEBUG] [Thread-70282] [transport.py] [_log()] starting thread (client mode): 0xf57003a0
2025-12-12T13:22:02.910 [DEBUG] [Thread-70282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:22:02.930 [DEBUG] [Thread-70282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:22:02.930 [INFO] [Thread-70282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] client lang: <none>
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] server lang: <none>
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] kex follows: False
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] Compression: none
2025-12-12T13:22:02.934 [DEBUG] [Thread-70282] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:22:02.951 [DEBUG] [Thread-70282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:22:02.951 [DEBUG] [Thread-70282] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:22:02.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:22:02.952 [DEBUG] [Thread-70282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:22:02.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:22:02.954 [DEBUG] [Thread-70282] [transport.py] [_log()] userauth is OK
2025-12-12T13:22:02.954 [DEBUG] [Thread-70282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:22:02.954 [DEBUG] [Thread-70282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:22:02.954 [DEBUG] [Thread-70282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:22:02.954 [DEBUG] [Thread-70282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:22:02.972 [INFO] [Thread-70282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:22:02.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:22:03.642 [DEBUG] [Thread-70282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:22:03.642 [DEBUG] [Thread-70282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:22:03.643 [DEBUG] [Thread-70282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:22:03.684 [DEBUG] [Thread-70282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:22:03.684 [DEBUG] [Thread-70282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:22:03.687 [DEBUG] [Thread-70282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:22:03.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:22:03.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:22:03.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:22:03.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:22:03.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:22:03.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:22:03.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:22:03.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:22:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:22:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.473359 -999.00  +20.70  46.03     23   -1.00 1 1 2 1 1   888    0 22.80 12.40 ----- 36.3 46.0 331.8 52.3 25.5 -25.5 24.8 -25.4 25.0 -23.7 25.6 -22.9
2025-12-12T13:22:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:22:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:22:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.473359
2025-12-12T13:22:03.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:22:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:22:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:22:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:22:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:22:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:21:45', tmtdew=25.98, humidity=17.06, cloud=0.0, wind=37.42, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:21:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:22:03.710 [DEBUG] [Thread-70282] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:22:03.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:22:03.805 [DEBUG] [Thread-70285] [transport.py] [_log()] starting thread (client mode): 0xf81c2560
2025-12-12T13:22:03.805 [DEBUG] [Thread-70285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:22:03.820 [DEBUG] [Thread-70285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:22:03.820 [INFO] [Thread-70285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] client lang: <none>
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] server lang: <none>
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] kex follows: False
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] Compression: none
2025-12-12T13:22:03.828 [DEBUG] [Thread-70285] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:22:03.889 [DEBUG] [Thread-70285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:22:03.889 [DEBUG] [Thread-70285] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:22:03.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:22:03.890 [DEBUG] [Thread-70285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:22:03.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:22:03.945 [DEBUG] [Thread-70285] [transport.py] [_log()] userauth is OK
2025-12-12T13:22:03.946 [DEBUG] [Thread-70285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:22:03.946 [DEBUG] [Thread-70285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:22:03.946 [DEBUG] [Thread-70285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:22:03.946 [DEBUG] [Thread-70285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:22:03.964 [INFO] [Thread-70285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:22:03.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:22:03.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:22:04.813 [DEBUG] [Thread-70285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:22:04.814 [DEBUG] [Thread-70285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:22:04.862 [DEBUG] [Thread-70285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:22:04.862 [DEBUG] [Thread-70285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:22:04.870 [DEBUG] [Thread-70285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:22:04.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:22:04.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:22:04.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:22:04.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:22:04.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:22:04.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:22:04.904 [DEBUG] [Thread-70285] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:22:14.811 [DEBUG] [Thread-70287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:29.858 [DEBUG] [Thread-70288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:34.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:22:34.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:22:34.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:22:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 22, 17), 25.97, 17.11, 0.0, 38.92, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:22:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:22:17
2025-12-12T13:22:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:22:35.871 [DEBUG] [Thread-70289] [transport.py] [_log()] starting thread (client mode): 0xf5702350
2025-12-12T13:22:35.871 [DEBUG] [Thread-70289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:22:35.892 [DEBUG] [Thread-70289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:22:35.892 [INFO] [Thread-70289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:22:35.895 [DEBUG] [Thread-70289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:22:35.895 [DEBUG] [Thread-70289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] client lang: <none>
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] server lang: <none>
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] kex follows: False
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:22:35.896 [DEBUG] [Thread-70289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:22:35.897 [DEBUG] [Thread-70289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:22:35.897 [DEBUG] [Thread-70289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:22:35.897 [DEBUG] [Thread-70289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:22:35.897 [DEBUG] [Thread-70289] [transport.py] [_log()] Compression: none
2025-12-12T13:22:35.897 [DEBUG] [Thread-70289] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:22:35.915 [DEBUG] [Thread-70289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:22:35.916 [DEBUG] [Thread-70289] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:22:35.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:22:35.917 [DEBUG] [Thread-70289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:22:35.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:22:35.918 [DEBUG] [Thread-70289] [transport.py] [_log()] userauth is OK
2025-12-12T13:22:35.919 [DEBUG] [Thread-70289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:22:35.919 [DEBUG] [Thread-70289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:22:35.919 [DEBUG] [Thread-70289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:22:35.919 [DEBUG] [Thread-70289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:22:35.942 [INFO] [Thread-70289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:22:35.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:22:36.516 [DEBUG] [Thread-70289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:22:36.517 [DEBUG] [Thread-70289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:22:36.517 [DEBUG] [Thread-70289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:22:36.558 [DEBUG] [Thread-70289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:22:36.558 [DEBUG] [Thread-70289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:22:36.561 [DEBUG] [Thread-70289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:22:36.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:22:36.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:22:36.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:22:36.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:22:36.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:22:36.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:22:36.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:22:36.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:22:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:22:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.473706 -999.00  +21.00  34.89     23   -0.60 1 1 2 1 1   888    0 22.53 11.49 ----- 30.5 34.9 310.0 59.6 25.4 -25.3 24.9 -24.6 25.1 -22.1 25.7 -23.3
2025-12-12T13:22:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:22:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:22:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.473706
2025-12-12T13:22:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:22:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:22:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:22:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:22:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:22:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:22:17', tmtdew=25.97, humidity=17.11, cloud=0.0, wind=38.92, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:22:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:22:36.592 [DEBUG] [Thread-70289] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:22:36.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:22:36.683 [DEBUG] [Thread-70292] [transport.py] [_log()] starting thread (client mode): 0xf5703190
2025-12-12T13:22:36.683 [DEBUG] [Thread-70292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:22:36.698 [DEBUG] [Thread-70292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:22:36.698 [INFO] [Thread-70292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:22:36.705 [DEBUG] [Thread-70292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] client lang: <none>
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] server lang: <none>
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] kex follows: False
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] Compression: none
2025-12-12T13:22:36.706 [DEBUG] [Thread-70292] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:22:36.765 [DEBUG] [Thread-70292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:22:36.766 [DEBUG] [Thread-70292] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:22:36.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:22:36.767 [DEBUG] [Thread-70292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:22:36.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:22:36.822 [DEBUG] [Thread-70292] [transport.py] [_log()] userauth is OK
2025-12-12T13:22:36.822 [DEBUG] [Thread-70292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:22:36.822 [DEBUG] [Thread-70292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:22:36.822 [DEBUG] [Thread-70292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:22:36.822 [DEBUG] [Thread-70292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:22:36.842 [INFO] [Thread-70292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:22:36.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:22:36.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:22:37.662 [DEBUG] [Thread-70292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:22:37.662 [DEBUG] [Thread-70292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:22:37.713 [DEBUG] [Thread-70292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:22:37.713 [DEBUG] [Thread-70292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:22:37.725 [DEBUG] [Thread-70292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:22:37.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:22:37.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')
2025-12-12T13:22:37.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:22:37.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:22:37.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:22:37.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:22:37.768 [DEBUG] [Thread-70292] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:22:43.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:43.281 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:44.536 [DEBUG] [Thread-70294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:44.891 [DEBUG] [Thread-70295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:22:59.933 [DEBUG] [Thread-70296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:23:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:23:07.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:23:07.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:23:08.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 22, 49), 26.46, 16.43, 0.0, 43.65, 21.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:23:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:22:49
2025-12-12T13:23:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:23:08.746 [DEBUG] [Thread-70297] [transport.py] [_log()] starting thread (client mode): 0xf81e6470
2025-12-12T13:23:08.746 [DEBUG] [Thread-70297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:23:08.767 [DEBUG] [Thread-70297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:23:08.767 [INFO] [Thread-70297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] client lang: <none>
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] server lang: <none>
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] kex follows: False
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] Compression: none
2025-12-12T13:23:08.771 [DEBUG] [Thread-70297] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:23:08.790 [DEBUG] [Thread-70297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:23:08.791 [DEBUG] [Thread-70297] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:23:08.791 [DEBUG] [Thread-70297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:23:08.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:23:08.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:23:08.793 [DEBUG] [Thread-70297] [transport.py] [_log()] userauth is OK
2025-12-12T13:23:08.793 [DEBUG] [Thread-70297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:23:08.793 [DEBUG] [Thread-70297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:23:08.794 [DEBUG] [Thread-70297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:23:08.794 [DEBUG] [Thread-70297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:23:08.812 [INFO] [Thread-70297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:23:08.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:23:09.430 [DEBUG] [Thread-70297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:23:09.430 [DEBUG] [Thread-70297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:23:09.430 [DEBUG] [Thread-70297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:23:09.472 [DEBUG] [Thread-70297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:23:09.472 [DEBUG] [Thread-70297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:23:09.475 [DEBUG] [Thread-70297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:23:09.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:23:09.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:23:09.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:23:09.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:23:09.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:23:09.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:23:09.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:23:09.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:23:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:23:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.474053 -999.00  +21.40  40.59     22   -0.80 1 1 2 1 1   888    0 22.48 15.22 ----- 29.1 40.6 340.4 52.9 25.6 -24.9 24.9 -26.2 25.1 -22.5 25.7 -22.3
2025-12-12T13:23:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:23:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:23:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.474053
2025-12-12T13:23:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:23:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:23:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:23:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:23:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:23:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:22:49', tmtdew=26.46, humidity=16.43, cloud=0.0, wind=43.65, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:22:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:23:09.502 [DEBUG] [Thread-70297] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:23:09.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:23:09.598 [DEBUG] [Thread-70300] [transport.py] [_log()] starting thread (client mode): 0xfabc6a10
2025-12-12T13:23:09.598 [DEBUG] [Thread-70300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:23:09.616 [DEBUG] [Thread-70300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:23:09.616 [INFO] [Thread-70300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:23:09.624 [DEBUG] [Thread-70300] [transport.py] [_log()] client lang: <none>
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] server lang: <none>
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] kex follows: False
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] Compression: none
2025-12-12T13:23:09.625 [DEBUG] [Thread-70300] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:23:09.682 [DEBUG] [Thread-70300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:23:09.683 [DEBUG] [Thread-70300] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:23:09.683 [DEBUG] [Thread-70300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:23:09.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:23:09.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:23:09.739 [DEBUG] [Thread-70300] [transport.py] [_log()] userauth is OK
2025-12-12T13:23:09.739 [DEBUG] [Thread-70300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:23:09.739 [DEBUG] [Thread-70300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:23:09.739 [DEBUG] [Thread-70300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:23:09.739 [DEBUG] [Thread-70300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:23:09.761 [INFO] [Thread-70300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:23:09.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:23:09.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:23:10.621 [DEBUG] [Thread-70300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:23:10.622 [DEBUG] [Thread-70300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:23:10.670 [DEBUG] [Thread-70300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:23:10.670 [DEBUG] [Thread-70300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:23:10.679 [DEBUG] [Thread-70300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:23:10.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:23:10.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:23:10.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:23:10.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:23:10.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:23:10.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:23:10.716 [DEBUG] [Thread-70300] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:23:14.961 [DEBUG] [Thread-70302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:23:30.012 [DEBUG] [Thread-70303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:23:40.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:23:40.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:23:40.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:23:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 23, 21), 26.77, 16.03, 0.0, 43.56, 21.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:23:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:23:21
2025-12-12T13:23:41.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:23:41.685 [DEBUG] [Thread-70304] [transport.py] [_log()] starting thread (client mode): 0xf81c0250
2025-12-12T13:23:41.685 [DEBUG] [Thread-70304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:23:41.706 [DEBUG] [Thread-70304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:23:41.706 [INFO] [Thread-70304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] client lang: <none>
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] server lang: <none>
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] kex follows: False
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:23:41.709 [DEBUG] [Thread-70304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:23:41.710 [DEBUG] [Thread-70304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:23:41.710 [DEBUG] [Thread-70304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:23:41.710 [DEBUG] [Thread-70304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:23:41.710 [DEBUG] [Thread-70304] [transport.py] [_log()] Compression: none
2025-12-12T13:23:41.710 [DEBUG] [Thread-70304] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:23:41.727 [DEBUG] [Thread-70304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:23:41.728 [DEBUG] [Thread-70304] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:23:41.728 [DEBUG] [Thread-70304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:23:41.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:23:41.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:23:41.730 [DEBUG] [Thread-70304] [transport.py] [_log()] userauth is OK
2025-12-12T13:23:41.730 [DEBUG] [Thread-70304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:23:41.730 [DEBUG] [Thread-70304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:23:41.730 [DEBUG] [Thread-70304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:23:41.731 [DEBUG] [Thread-70304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:23:41.763 [INFO] [Thread-70304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:23:41.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:23:42.386 [DEBUG] [Thread-70304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:23:42.386 [DEBUG] [Thread-70304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:23:42.387 [DEBUG] [Thread-70304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:23:42.428 [DEBUG] [Thread-70304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:23:42.428 [DEBUG] [Thread-70304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:23:42.431 [DEBUG] [Thread-70304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:23:42.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:23:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:23:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:23:42.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:23:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:23:42.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:23:42.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:23:42.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:23:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:23:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.474400 -999.00  +21.60  39.10     21   -1.20 1 1 2 1 1   888    0 22.31 20.89 ----- 29.3 39.1 356.6 50.3 25.6 -25.0 24.9 -25.2 25.2 -22.3 25.8 -23.6
2025-12-12T13:23:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:23:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:23:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.474400
2025-12-12T13:23:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:23:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:23:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:23:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:23:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:23:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:23:21', tmtdew=26.77, humidity=16.03, cloud=0.0, wind=43.56, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:23:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:23:42.456 [DEBUG] [Thread-70304] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:23:42.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:23:42.553 [DEBUG] [Thread-70307] [transport.py] [_log()] starting thread (client mode): 0xfabc7040
2025-12-12T13:23:42.553 [DEBUG] [Thread-70307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:23:42.567 [DEBUG] [Thread-70307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:23:42.568 [INFO] [Thread-70307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:23:42.575 [DEBUG] [Thread-70307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] client lang: <none>
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] server lang: <none>
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] kex follows: False
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] Compression: none
2025-12-12T13:23:42.576 [DEBUG] [Thread-70307] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:23:42.634 [DEBUG] [Thread-70307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:23:42.635 [DEBUG] [Thread-70307] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:23:42.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:23:42.636 [DEBUG] [Thread-70307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:23:42.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:23:42.691 [DEBUG] [Thread-70307] [transport.py] [_log()] userauth is OK
2025-12-12T13:23:42.691 [DEBUG] [Thread-70307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:23:42.691 [DEBUG] [Thread-70307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:23:42.691 [DEBUG] [Thread-70307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:23:42.691 [DEBUG] [Thread-70307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:23:42.712 [INFO] [Thread-70307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:23:42.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:23:42.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:23:43.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:23:43.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:23:43.535 [DEBUG] [Thread-70307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:23:43.535 [DEBUG] [Thread-70307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:23:43.583 [DEBUG] [Thread-70307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:23:43.583 [DEBUG] [Thread-70307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:23:43.592 [DEBUG] [Thread-70307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:23:43.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:23:43.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:23: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') -> 00000000
2025-12-12T13:23:43.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:23:43.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:23:43.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:23:43.628 [DEBUG] [Thread-70307] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:23:44.591 [DEBUG] [Thread-70309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:23:45.041 [DEBUG] [Thread-70310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:00.089 [DEBUG] [Thread-70311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:24:13.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:24:13.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:24:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 23, 54), 26.9, 15.73, 0.0, 43.16, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:24:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:23:54
2025-12-12T13:24:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:24:14.636 [DEBUG] [Thread-70312] [transport.py] [_log()] starting thread (client mode): 0xf813cf10
2025-12-12T13:24:14.636 [DEBUG] [Thread-70312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:24:14.655 [DEBUG] [Thread-70312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:24:14.655 [INFO] [Thread-70312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:24:14.656 [DEBUG] [Thread-70312] [transport.py] [_log()] client lang: <none>
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] server lang: <none>
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] kex follows: False
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] Compression: none
2025-12-12T13:24:14.657 [DEBUG] [Thread-70312] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:24:14.664 [DEBUG] [Thread-70312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:24:14.665 [DEBUG] [Thread-70312] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:24:14.665 [DEBUG] [Thread-70312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:24:14.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:24:14.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:24:14.666 [DEBUG] [Thread-70312] [transport.py] [_log()] userauth is OK
2025-12-12T13:24:14.666 [DEBUG] [Thread-70312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:24:14.666 [DEBUG] [Thread-70312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:24:14.666 [DEBUG] [Thread-70312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:24:14.666 [DEBUG] [Thread-70312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:24:14.698 [INFO] [Thread-70312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:24:14.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:24:15.118 [DEBUG] [Thread-70314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:15.299 [DEBUG] [Thread-70312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:24:15.300 [DEBUG] [Thread-70312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:24:15.300 [DEBUG] [Thread-70312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:24:15.341 [DEBUG] [Thread-70312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:24:15.341 [DEBUG] [Thread-70312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:24:15.343 [DEBUG] [Thread-70312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:24:15.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:24:15.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:24:15.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:24:15.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:24:15.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:24:15.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:24:15.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:24:15.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:24:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:24:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.474748 -999.00  +21.10  41.06     22   -1.30 1 1 2 1 1   888    0 23.00 25.88 ----- 37.5 41.1 339.8 60.0 25.4 -26.1 24.8 -26.8 25.0 -25.2 25.5 -24.6
2025-12-12T13:24:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:24:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:24:15.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.474748
2025-12-12T13:24:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:24:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:24:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:24:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:24:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:24:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:23:54', tmtdew=26.9, humidity=15.73, cloud=0.0, wind=43.16, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:23:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:24:15.361 [DEBUG] [Thread-70312] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:24:15.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:24:15.447 [DEBUG] [Thread-70316] [transport.py] [_log()] starting thread (client mode): 0xf81f25f0
2025-12-12T13:24:15.447 [DEBUG] [Thread-70316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:24:15.462 [DEBUG] [Thread-70316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:24:15.462 [INFO] [Thread-70316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] client lang: <none>
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] server lang: <none>
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] kex follows: False
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] Compression: none
2025-12-12T13:24:15.470 [DEBUG] [Thread-70316] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:24:15.526 [DEBUG] [Thread-70316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:24:15.526 [DEBUG] [Thread-70316] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:24:15.526 [DEBUG] [Thread-70316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:24:15.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:24:15.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:24:15.583 [DEBUG] [Thread-70316] [transport.py] [_log()] userauth is OK
2025-12-12T13:24:15.583 [DEBUG] [Thread-70316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:24:15.583 [DEBUG] [Thread-70316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:24:15.583 [DEBUG] [Thread-70316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:24:15.583 [DEBUG] [Thread-70316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:24:15.597 [INFO] [Thread-70316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:24:15.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:24:15.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:24:16.493 [DEBUG] [Thread-70316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:24:16.493 [DEBUG] [Thread-70316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:24:16.543 [DEBUG] [Thread-70316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:24:16.543 [DEBUG] [Thread-70316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:24:16.551 [DEBUG] [Thread-70316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:24:16.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:24:16.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:24:16.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:24:16.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:24:16.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:24:16.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:24:16.583 [DEBUG] [Thread-70316] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:24:30.146 [DEBUG] [Thread-70318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:43.563 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:43.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:44.655 [DEBUG] [Thread-70319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:45.201 [DEBUG] [Thread-70320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:24:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:24:46.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:24:46.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:24:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 24, 26), 26.71, 16.0, 0.0, 44.13, 21.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:24:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:24:26
2025-12-12T13:24:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:24:47.554 [DEBUG] [Thread-70321] [transport.py] [_log()] starting thread (client mode): 0xf81e66b0
2025-12-12T13:24:47.555 [DEBUG] [Thread-70321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:24:47.576 [DEBUG] [Thread-70321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:24:47.577 [INFO] [Thread-70321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:24:47.580 [DEBUG] [Thread-70321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:24:47.580 [DEBUG] [Thread-70321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:24:47.580 [DEBUG] [Thread-70321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:24:47.580 [DEBUG] [Thread-70321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:47.580 [DEBUG] [Thread-70321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:47.580 [DEBUG] [Thread-70321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] client lang: <none>
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] server lang: <none>
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] kex follows: False
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] Compression: none
2025-12-12T13:24:47.581 [DEBUG] [Thread-70321] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:24:47.602 [DEBUG] [Thread-70321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:24:47.603 [DEBUG] [Thread-70321] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:24:47.603 [DEBUG] [Thread-70321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:24:47.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:24:47.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:24:47.605 [DEBUG] [Thread-70321] [transport.py] [_log()] userauth is OK
2025-12-12T13:24:47.605 [DEBUG] [Thread-70321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:24:47.606 [DEBUG] [Thread-70321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:24:47.606 [DEBUG] [Thread-70321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:24:47.606 [DEBUG] [Thread-70321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:24:47.641 [INFO] [Thread-70321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:24:47.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:24:48.294 [DEBUG] [Thread-70321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:24:48.295 [DEBUG] [Thread-70321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:24:48.295 [DEBUG] [Thread-70321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:24:48.336 [DEBUG] [Thread-70321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:24:48.336 [DEBUG] [Thread-70321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:24:48.339 [DEBUG] [Thread-70321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:24:48.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:24:48.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:24:48.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:24:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:24:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:24:48.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:24:48.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:24:48.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:24:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:24:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.475442 -999.00  +22.00  45.19     21   -0.80 1 1 2 1 1   888    0 23.19 34.44 ----- 59.2 45.2 328.8 60.5 25.7 -23.6 25.1 -25.2 25.3 -21.3 25.9 -21.9
2025-12-12T13:24:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:24:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:24:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.475442
2025-12-12T13:24:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:24:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:24:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:24:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:24:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:24:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:24:26', tmtdew=26.71, humidity=16.0, cloud=0.0, wind=44.13, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:24:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:24:48.364 [DEBUG] [Thread-70321] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:24:48.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:24:48.459 [DEBUG] [Thread-70324] [transport.py] [_log()] starting thread (client mode): 0xf574e950
2025-12-12T13:24:48.459 [DEBUG] [Thread-70324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:24:48.475 [DEBUG] [Thread-70324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:24:48.475 [INFO] [Thread-70324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:24:48.482 [DEBUG] [Thread-70324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:24:48.482 [DEBUG] [Thread-70324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:24:48.482 [DEBUG] [Thread-70324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:24:48.482 [DEBUG] [Thread-70324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:48.482 [DEBUG] [Thread-70324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:24:48.482 [DEBUG] [Thread-70324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] client lang: <none>
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] server lang: <none>
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] kex follows: False
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] Compression: none
2025-12-12T13:24:48.483 [DEBUG] [Thread-70324] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:24:48.540 [DEBUG] [Thread-70324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:24:48.540 [DEBUG] [Thread-70324] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:24:48.541 [DEBUG] [Thread-70324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:24:48.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:24:48.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:24:48.595 [DEBUG] [Thread-70324] [transport.py] [_log()] userauth is OK
2025-12-12T13:24:48.596 [DEBUG] [Thread-70324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:24:48.596 [DEBUG] [Thread-70324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:24:48.596 [DEBUG] [Thread-70324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:24:48.596 [DEBUG] [Thread-70324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:24:48.615 [INFO] [Thread-70324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:24:48.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:24:48.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:24:49.546 [DEBUG] [Thread-70324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:24:49.546 [DEBUG] [Thread-70324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:24:49.594 [DEBUG] [Thread-70324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:24:49.594 [DEBUG] [Thread-70324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:24:49.603 [DEBUG] [Thread-70324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:24:49.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:24:49.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:24:49.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:24:49.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:24:49.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:24:49.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:24:49.639 [DEBUG] [Thread-70324] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:25:00.231 [DEBUG] [Thread-70326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:15.268 [DEBUG] [Thread-70327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:19.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:25:19.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:25:19.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:25:20.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 24, 58), 26.43, 16.48, 0.0, 51.47, 21.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:25:20.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:24:58
2025-12-12T13:25:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:25:20.599 [DEBUG] [Thread-70328] [transport.py] [_log()] starting thread (client mode): 0xf574f700
2025-12-12T13:25:20.599 [DEBUG] [Thread-70328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:25:20.618 [DEBUG] [Thread-70328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:25:20.619 [INFO] [Thread-70328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] client lang: <none>
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] server lang: <none>
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] kex follows: False
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:25:20.622 [DEBUG] [Thread-70328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:25:20.623 [DEBUG] [Thread-70328] [transport.py] [_log()] Compression: none
2025-12-12T13:25:20.623 [DEBUG] [Thread-70328] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:25:20.638 [DEBUG] [Thread-70328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:25:20.639 [DEBUG] [Thread-70328] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:25:20.639 [DEBUG] [Thread-70328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:25:20.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:25:20.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:25:20.680 [DEBUG] [Thread-70328] [transport.py] [_log()] userauth is OK
2025-12-12T13:25:20.680 [DEBUG] [Thread-70328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:25:20.681 [DEBUG] [Thread-70328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:25:20.681 [DEBUG] [Thread-70328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:25:20.681 [DEBUG] [Thread-70328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:25:20.706 [INFO] [Thread-70328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:25:20.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:25:21.321 [DEBUG] [Thread-70328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:25:21.321 [DEBUG] [Thread-70328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:25:21.321 [DEBUG] [Thread-70328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:25:21.362 [DEBUG] [Thread-70328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:25:21.362 [DEBUG] [Thread-70328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:25:21.365 [DEBUG] [Thread-70328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:25:21.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:25:21.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:25:21.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:25:21.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:25:21.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:25:21.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:25:21.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:25:21.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.475789 -999.00  +20.60  51.84     23   -1.00 1 1 2 1 1   888    0 23.62 38.79 ----- 41.7 51.8 312.0 71.0 25.5 -26.7 25.0 -27.2 25.2 -25.8 25.7 -23.8
2025-12-12T13:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.475789
2025-12-12T13:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:25:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:25:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:25:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:25:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:25:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:24:58', tmtdew=26.43, humidity=16.48, cloud=0.0, wind=51.47, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:25:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:25:21.389 [DEBUG] [Thread-70328] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:25:21.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:25:21.485 [DEBUG] [Thread-70331] [transport.py] [_log()] starting thread (client mode): 0xf575f280
2025-12-12T13:25:21.485 [DEBUG] [Thread-70331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:25:21.501 [DEBUG] [Thread-70331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:25:21.501 [INFO] [Thread-70331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:25:21.508 [DEBUG] [Thread-70331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:25:21.508 [DEBUG] [Thread-70331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] client lang: <none>
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] server lang: <none>
2025-12-12T13:25:21.509 [DEBUG] [Thread-70331] [transport.py] [_log()] kex follows: False
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] Compression: none
2025-12-12T13:25:21.510 [DEBUG] [Thread-70331] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:25:21.569 [DEBUG] [Thread-70331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:25:21.569 [DEBUG] [Thread-70331] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:25:21.569 [DEBUG] [Thread-70331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:25:21.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:25:21.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:25:21.628 [DEBUG] [Thread-70331] [transport.py] [_log()] userauth is OK
2025-12-12T13:25:21.628 [DEBUG] [Thread-70331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:25:21.629 [DEBUG] [Thread-70331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:25:21.629 [DEBUG] [Thread-70331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:25:21.629 [DEBUG] [Thread-70331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:25:21.650 [INFO] [Thread-70331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:25:21.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:25:21.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:25:22.499 [DEBUG] [Thread-70331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:25:22.499 [DEBUG] [Thread-70331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:25:22.547 [DEBUG] [Thread-70331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:25:22.547 [DEBUG] [Thread-70331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:25:22.556 [DEBUG] [Thread-70331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:25:22.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:25:22.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:25:22.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:25:22.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:25:22.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:25:22.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:25:22.593 [DEBUG] [Thread-70331] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:25:30.295 [DEBUG] [Thread-70333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:43.702 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:43.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:44.708 [DEBUG] [Thread-70334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:45.339 [DEBUG] [Thread-70335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:25:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:25:52.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:25:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:25:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 25, 30), 26.14, 16.83, 0.0, 49.51, 21.4, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:25:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:25:30
2025-12-12T13:25:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:25:53.569 [DEBUG] [Thread-70336] [transport.py] [_log()] starting thread (client mode): 0xf575f490
2025-12-12T13:25:53.570 [DEBUG] [Thread-70336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:25:53.590 [DEBUG] [Thread-70336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:25:53.591 [INFO] [Thread-70336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] client lang: <none>
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] server lang: <none>
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] kex follows: False
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:25:53.594 [DEBUG] [Thread-70336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:25:53.595 [DEBUG] [Thread-70336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:25:53.595 [DEBUG] [Thread-70336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:25:53.595 [DEBUG] [Thread-70336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:25:53.595 [DEBUG] [Thread-70336] [transport.py] [_log()] Compression: none
2025-12-12T13:25:53.595 [DEBUG] [Thread-70336] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:25:53.603 [DEBUG] [Thread-70336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:25:53.603 [DEBUG] [Thread-70336] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:25:53.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:25:53.604 [DEBUG] [Thread-70336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:25:53.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:25:53.606 [DEBUG] [Thread-70336] [transport.py] [_log()] userauth is OK
2025-12-12T13:25:53.606 [DEBUG] [Thread-70336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:25:53.606 [DEBUG] [Thread-70336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:25:53.606 [DEBUG] [Thread-70336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:25:53.606 [DEBUG] [Thread-70336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:25:53.629 [INFO] [Thread-70336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:25:53.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:25:54.289 [DEBUG] [Thread-70336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:25:54.289 [DEBUG] [Thread-70336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:25:54.289 [DEBUG] [Thread-70336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:25:54.330 [DEBUG] [Thread-70336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:25:54.330 [DEBUG] [Thread-70336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:25:54.333 [DEBUG] [Thread-70336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:25:54.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:25:54.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:25:54.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:25:54.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:25:54.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:25:54.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:25:54.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:25:54.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:25:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:25:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.476137 -999.00  +20.80  50.91     22   -1.00 1 1 2 1 1   888    0 22.99 35.80 ----- 49.6 50.9 315.1 58.0 25.6 -25.2 25.0 -24.8 25.1 -22.1 25.8 -22.5
2025-12-12T13:25:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:25:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:25:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.476137
2025-12-12T13:25:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:25:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:25:54.359 [DEBUG] [Thread-70336] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:25:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:25:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:25:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:25:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:25:30', tmtdew=26.14, humidity=16.83, cloud=0.0, wind=49.51, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:25:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:25:54.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:25:54.458 [DEBUG] [Thread-70339] [transport.py] [_log()] starting thread (client mode): 0xf81f25f0
2025-12-12T13:25:54.459 [DEBUG] [Thread-70339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:25:54.475 [DEBUG] [Thread-70339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:25:54.475 [INFO] [Thread-70339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:25:54.483 [DEBUG] [Thread-70339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:25:54.483 [DEBUG] [Thread-70339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:25:54.483 [DEBUG] [Thread-70339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:25:54.483 [DEBUG] [Thread-70339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:54.483 [DEBUG] [Thread-70339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:25:54.483 [DEBUG] [Thread-70339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] client lang: <none>
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] server lang: <none>
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] kex follows: False
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:25:54.484 [DEBUG] [Thread-70339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:25:54.485 [DEBUG] [Thread-70339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:25:54.485 [DEBUG] [Thread-70339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:25:54.485 [DEBUG] [Thread-70339] [transport.py] [_log()] Compression: none
2025-12-12T13:25:54.485 [DEBUG] [Thread-70339] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:25:54.541 [DEBUG] [Thread-70339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:25:54.542 [DEBUG] [Thread-70339] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:25:54.542 [DEBUG] [Thread-70339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:25:54.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:25:54.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:25:54.597 [DEBUG] [Thread-70339] [transport.py] [_log()] userauth is OK
2025-12-12T13:25:54.597 [DEBUG] [Thread-70339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:25:54.597 [DEBUG] [Thread-70339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:25:54.597 [DEBUG] [Thread-70339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:25:54.598 [DEBUG] [Thread-70339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:25:54.617 [INFO] [Thread-70339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:25:54.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:25:54.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:25:55.484 [DEBUG] [Thread-70339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:25:55.485 [DEBUG] [Thread-70339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:25:55.533 [DEBUG] [Thread-70339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:25:55.533 [DEBUG] [Thread-70339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:25:55.542 [DEBUG] [Thread-70339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:25:55.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:25: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')
2025-12-12T13:25:55.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:25:55.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:25:55.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:25:55.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:25:55.578 [DEBUG] [Thread-70339] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:26:00.369 [DEBUG] [Thread-70341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:15.407 [DEBUG] [Thread-70342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:25.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:26:25.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:26:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:26:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 26, 2), 26.19, 16.8, 0.0, 48.4, 21.5, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:26:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:26:02
2025-12-12T13:26:26.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:26:26.519 [DEBUG] [Thread-70343] [transport.py] [_log()] starting thread (client mode): 0xf81f3220
2025-12-12T13:26:26.519 [DEBUG] [Thread-70343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:26:26.540 [DEBUG] [Thread-70343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:26:26.541 [INFO] [Thread-70343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:26:26.542 [DEBUG] [Thread-70343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] client lang: <none>
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] server lang: <none>
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] kex follows: False
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] Compression: none
2025-12-12T13:26:26.543 [DEBUG] [Thread-70343] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:26:26.552 [DEBUG] [Thread-70343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:26:26.553 [DEBUG] [Thread-70343] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:26:26.553 [DEBUG] [Thread-70343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:26:26.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:26:26.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:26:26.555 [DEBUG] [Thread-70343] [transport.py] [_log()] userauth is OK
2025-12-12T13:26:26.555 [DEBUG] [Thread-70343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:26:26.555 [DEBUG] [Thread-70343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:26:26.556 [DEBUG] [Thread-70343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:26:26.556 [DEBUG] [Thread-70343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:26:26.580 [INFO] [Thread-70343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:26:26.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:26:27.224 [DEBUG] [Thread-70343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:26:27.224 [DEBUG] [Thread-70343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:26:27.224 [DEBUG] [Thread-70343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:26:27.265 [DEBUG] [Thread-70343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:26:27.265 [DEBUG] [Thread-70343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:26:27.268 [DEBUG] [Thread-70343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:26:27.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:26:27.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:26:27.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:26:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:26:27.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:26:27.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:26:27.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:26:27.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:26:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:26:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.476483 -999.00  +21.30  38.68     23   -0.60 1 1 2 1 1   888    0 23.35 37.74 ----- 35.0 38.7 314.6 55.4 25.5 -25.2 24.9 -24.5 24.8 -23.4 25.7 -23.1
2025-12-12T13:26:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:26:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:26:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.476483
2025-12-12T13:26:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:26:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:26:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:26:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:26:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:26:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:26:02', tmtdew=26.19, humidity=16.8, cloud=0.0, wind=48.4, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:26:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:26:27.293 [DEBUG] [Thread-70343] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:26:27.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:26:27.389 [DEBUG] [Thread-70346] [transport.py] [_log()] starting thread (client mode): 0xf81f2500
2025-12-12T13:26:27.389 [DEBUG] [Thread-70346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:26:27.404 [DEBUG] [Thread-70346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:26:27.404 [INFO] [Thread-70346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:26:27.412 [DEBUG] [Thread-70346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] client lang: <none>
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] server lang: <none>
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] kex follows: False
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] Compression: none
2025-12-12T13:26:27.413 [DEBUG] [Thread-70346] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:26:27.469 [DEBUG] [Thread-70346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:26:27.470 [DEBUG] [Thread-70346] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:26:27.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:26:27.470 [DEBUG] [Thread-70346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:26:27.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:26:27.525 [DEBUG] [Thread-70346] [transport.py] [_log()] userauth is OK
2025-12-12T13:26:27.525 [DEBUG] [Thread-70346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:26:27.525 [DEBUG] [Thread-70346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:26:27.525 [DEBUG] [Thread-70346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:26:27.526 [DEBUG] [Thread-70346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:26:27.543 [INFO] [Thread-70346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:26:27.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:26:27.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:26:28.391 [DEBUG] [Thread-70346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:26:28.391 [DEBUG] [Thread-70346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:26:28.441 [DEBUG] [Thread-70346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:26:28.441 [DEBUG] [Thread-70346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:26:28.452 [DEBUG] [Thread-70346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:26:28.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:26:28.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:26:28.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:26:28.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:26:28.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:26:28.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:26:28.489 [DEBUG] [Thread-70346] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:26:30.434 [DEBUG] [Thread-70348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:43.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:43.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:44.762 [DEBUG] [Thread-70349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:45.479 [DEBUG] [Thread-70350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:26:58.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:26:58.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:26:58.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:26:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 26, 34), 25.57, 17.38, 0.0, 45.45, 21.26, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:26:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:26:34
2025-12-12T13:26:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:26:59.476 [DEBUG] [Thread-70351] [transport.py] [_log()] starting thread (client mode): 0xf575f550
2025-12-12T13:26:59.476 [DEBUG] [Thread-70351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:26:59.497 [DEBUG] [Thread-70351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:26:59.497 [INFO] [Thread-70351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] client lang: <none>
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] server lang: <none>
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] kex follows: False
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] Compression: none
2025-12-12T13:26:59.499 [DEBUG] [Thread-70351] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:26:59.516 [DEBUG] [Thread-70351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:26:59.516 [DEBUG] [Thread-70351] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:26:59.517 [DEBUG] [Thread-70351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:26:59.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:26:59.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:26:59.518 [DEBUG] [Thread-70351] [transport.py] [_log()] userauth is OK
2025-12-12T13:26:59.519 [DEBUG] [Thread-70351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:26:59.519 [DEBUG] [Thread-70351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:26:59.519 [DEBUG] [Thread-70351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:26:59.519 [DEBUG] [Thread-70351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:26:59.543 [INFO] [Thread-70351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:26:59.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:27:00.157 [DEBUG] [Thread-70351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:27:00.157 [DEBUG] [Thread-70351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:27:00.158 [DEBUG] [Thread-70351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:27:00.199 [DEBUG] [Thread-70351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:27:00.199 [DEBUG] [Thread-70351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:27:00.202 [DEBUG] [Thread-70351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:27:00.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:27:00.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:27:00.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:27:00.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:27:00.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:27:00.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:27:00.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:27:00.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:27:00.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:27:00.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.476831 -999.00  +22.00  37.91     22   -0.30 1 1 2 1 1   888    0 23.03 40.75 ----- 46.4 37.9 314.8 49.2 25.7 -24.4 25.1 -25.1 25.1 -22.2 25.8 -22.1
2025-12-12T13:27:00.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:27:00.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:27:00.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.476831
2025-12-12T13:27:00.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:27:00.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:27:00.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:27:00.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:27:00.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:27:00.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:26:34', tmtdew=25.57, humidity=17.38, cloud=0.0, wind=45.45, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:26:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:27:00.232 [DEBUG] [Thread-70351] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:27:00.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:27:00.328 [DEBUG] [Thread-70354] [transport.py] [_log()] starting thread (client mode): 0xf81c3a30
2025-12-12T13:27:00.329 [DEBUG] [Thread-70354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:27:00.343 [DEBUG] [Thread-70354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:27:00.343 [INFO] [Thread-70354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] client lang: <none>
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] server lang: <none>
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] kex follows: False
2025-12-12T13:27:00.353 [DEBUG] [Thread-70354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:27:00.354 [DEBUG] [Thread-70354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:27:00.354 [DEBUG] [Thread-70354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:27:00.354 [DEBUG] [Thread-70354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:27:00.354 [DEBUG] [Thread-70354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:27:00.354 [DEBUG] [Thread-70354] [transport.py] [_log()] Compression: none
2025-12-12T13:27:00.354 [DEBUG] [Thread-70354] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:27:00.411 [DEBUG] [Thread-70354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:27:00.412 [DEBUG] [Thread-70354] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:27:00.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:27:00.413 [DEBUG] [Thread-70354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:27:00.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:27:00.473 [DEBUG] [Thread-70354] [transport.py] [_log()] userauth is OK
2025-12-12T13:27:00.474 [DEBUG] [Thread-70354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:27:00.474 [DEBUG] [Thread-70354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:27:00.474 [DEBUG] [Thread-70354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:27:00.474 [DEBUG] [Thread-70354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:27:00.492 [INFO] [Thread-70354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:27:00.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:27:00.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:27:00.510 [DEBUG] [Thread-70356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:27:01.320 [DEBUG] [Thread-70354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:27:01.321 [DEBUG] [Thread-70354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:27:01.368 [DEBUG] [Thread-70354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:27:01.368 [DEBUG] [Thread-70354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:27:01.377 [DEBUG] [Thread-70354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:27:01.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:27:01.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:27: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
2025-12-12T13:27:01.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:27:01.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:27:01.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:27:01.411 [DEBUG] [Thread-70354] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:27:15.562 [DEBUG] [Thread-70357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:27:30.589 [DEBUG] [Thread-70358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:27:31.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:27:31.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:27:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:27:32.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 27, 6), 25.6, 17.35, 0.0, 45.4, 21.26, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:27:32.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:27:06
2025-12-12T13:27:32.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:27:32.442 [DEBUG] [Thread-70359] [transport.py] [_log()] starting thread (client mode): 0xf81f17b0
2025-12-12T13:27:32.443 [DEBUG] [Thread-70359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:27:32.462 [DEBUG] [Thread-70359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:27:32.462 [INFO] [Thread-70359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] client lang: <none>
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] server lang: <none>
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] kex follows: False
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] Compression: none
2025-12-12T13:27:32.466 [DEBUG] [Thread-70359] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:27:32.473 [DEBUG] [Thread-70359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:27:32.473 [DEBUG] [Thread-70359] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:27:32.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:27:32.473 [DEBUG] [Thread-70359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:27:32.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:27:32.474 [DEBUG] [Thread-70359] [transport.py] [_log()] userauth is OK
2025-12-12T13:27:32.474 [DEBUG] [Thread-70359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:27:32.474 [DEBUG] [Thread-70359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:27:32.474 [DEBUG] [Thread-70359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:27:32.474 [DEBUG] [Thread-70359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:27:32.484 [INFO] [Thread-70359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:27:32.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:27:33.141 [DEBUG] [Thread-70359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:27:33.141 [DEBUG] [Thread-70359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:27:33.141 [DEBUG] [Thread-70359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:27:33.181 [DEBUG] [Thread-70359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:27:33.181 [DEBUG] [Thread-70359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:27:33.183 [DEBUG] [Thread-70359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:27:33.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:27:33.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:27:33.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:27:33.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:27:33.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:27:33.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:27:33.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.477178 -999.00  +21.40  46.84     23   -0.50 1 1 2 1 1   888    0 23.41 41.01 ----- 43.7 46.8 310.2 53.9 25.6 -24.4 25.0 -25.7 25.2 -23.0 25.8 -23.0
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.477178
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:27:33.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:27:06', tmtdew=25.6, humidity=17.35, cloud=0.0, wind=45.4, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:27:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:27:33.204 [DEBUG] [Thread-70359] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:27:33.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:27:33.288 [DEBUG] [Thread-70362] [transport.py] [_log()] starting thread (client mode): 0xf81f0c40
2025-12-12T13:27:33.288 [DEBUG] [Thread-70362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:27:33.302 [DEBUG] [Thread-70362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:27:33.302 [INFO] [Thread-70362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] client lang: <none>
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] server lang: <none>
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] kex follows: False
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] Compression: none
2025-12-12T13:27:33.310 [DEBUG] [Thread-70362] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:27:33.368 [DEBUG] [Thread-70362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:27:33.369 [DEBUG] [Thread-70362] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:27:33.369 [DEBUG] [Thread-70362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:27:33.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:27:33.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:27:33.425 [DEBUG] [Thread-70362] [transport.py] [_log()] userauth is OK
2025-12-12T13:27:33.426 [DEBUG] [Thread-70362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:27:33.426 [DEBUG] [Thread-70362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:27:33.426 [DEBUG] [Thread-70362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:27:33.426 [DEBUG] [Thread-70362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:27:33.443 [INFO] [Thread-70362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:27:33.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:27:33.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:27:34.276 [DEBUG] [Thread-70362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:27:34.276 [DEBUG] [Thread-70362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:27:34.324 [DEBUG] [Thread-70362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:27:34.324 [DEBUG] [Thread-70362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:27:34.333 [DEBUG] [Thread-70362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:27:34.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:27:34.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:27:34.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:27:34.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:27:34.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:27:34.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:27:34.367 [DEBUG] [Thread-70362] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:27:43.986 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:27:43.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:27:44.825 [DEBUG] [Thread-70364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:27:45.615 [DEBUG] [Thread-70365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:00.660 [DEBUG] [Thread-70366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:04.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:28:04.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:28:04.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:28:05.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 27, 38), 25.6, 17.48, 0.0, 40.25, 21.85, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:28:05.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:27:38
2025-12-12T13:28:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:28:05.349 [DEBUG] [Thread-70367] [transport.py] [_log()] starting thread (client mode): 0xfabc4d30
2025-12-12T13:28:05.349 [DEBUG] [Thread-70367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:28:05.369 [DEBUG] [Thread-70367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:28:05.369 [INFO] [Thread-70367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:28:05.372 [DEBUG] [Thread-70367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:28:05.372 [DEBUG] [Thread-70367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] client lang: <none>
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] server lang: <none>
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] kex follows: False
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] Compression: none
2025-12-12T13:28:05.373 [DEBUG] [Thread-70367] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:28:05.390 [DEBUG] [Thread-70367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:28:05.390 [DEBUG] [Thread-70367] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:28:05.391 [DEBUG] [Thread-70367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:28:05.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:28:05.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:28:05.392 [DEBUG] [Thread-70367] [transport.py] [_log()] userauth is OK
2025-12-12T13:28:05.392 [DEBUG] [Thread-70367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:28:05.392 [DEBUG] [Thread-70367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:28:05.392 [DEBUG] [Thread-70367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:28:05.392 [DEBUG] [Thread-70367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:28:05.409 [INFO] [Thread-70367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:28:05.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:28:06.079 [DEBUG] [Thread-70367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:28:06.080 [DEBUG] [Thread-70367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:28:06.080 [DEBUG] [Thread-70367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:28:06.121 [DEBUG] [Thread-70367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:28:06.122 [DEBUG] [Thread-70367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:28:06.125 [DEBUG] [Thread-70367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:28:06.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:28:06.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:28:06.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:28:06.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:28:06.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:28:06.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:28:06.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:28:06.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:28:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:28:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.477525 -999.00  +21.50  35.13     23   -0.00 1 1 2 1 1   888    0 23.25 40.94 ----- 37.1 35.1 313.6 52.1 25.6 -25.0 24.9 -26.2 24.9 -24.1 25.8 -22.9
2025-12-12T13:28:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:28:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:28:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.477525
2025-12-12T13:28:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:28:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:28:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:28:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:28:06.148 [DEBUG] [Thread-70367] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:28:06.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:28:06.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:27:38', tmtdew=25.6, humidity=17.48, cloud=0.0, wind=40.25, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:27:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:28:06.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:28:06.250 [DEBUG] [Thread-70370] [transport.py] [_log()] starting thread (client mode): 0xfabc5e10
2025-12-12T13:28:06.250 [DEBUG] [Thread-70370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:28:06.265 [DEBUG] [Thread-70370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:28:06.265 [INFO] [Thread-70370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:28:06.274 [DEBUG] [Thread-70370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:28:06.274 [DEBUG] [Thread-70370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:28:06.274 [DEBUG] [Thread-70370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] client lang: <none>
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] server lang: <none>
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] kex follows: False
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] Compression: none
2025-12-12T13:28:06.275 [DEBUG] [Thread-70370] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:28:06.330 [DEBUG] [Thread-70370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:28:06.331 [DEBUG] [Thread-70370] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:28:06.331 [DEBUG] [Thread-70370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:28:06.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:28:06.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:28:06.386 [DEBUG] [Thread-70370] [transport.py] [_log()] userauth is OK
2025-12-12T13:28:06.386 [DEBUG] [Thread-70370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:28:06.386 [DEBUG] [Thread-70370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:28:06.387 [DEBUG] [Thread-70370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:28:06.387 [DEBUG] [Thread-70370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:28:06.409 [INFO] [Thread-70370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:28:06.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:28:06.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:28:07.248 [DEBUG] [Thread-70370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:28:07.248 [DEBUG] [Thread-70370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:28:07.296 [DEBUG] [Thread-70370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:28:07.296 [DEBUG] [Thread-70370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:28:07.304 [DEBUG] [Thread-70370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:28:07.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:28:07.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')
2025-12-12T13:28:07.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:28:07.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:28:07.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:28:07.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:28:07.335 [DEBUG] [Thread-70370] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:28:15.687 [DEBUG] [Thread-70372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:30.744 [DEBUG] [Thread-70373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:28:37.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:28:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:28:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 28, 10), 25.84, 17.23, 0.0, 40.25, 22.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:28:38.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:28:10
2025-12-12T13:28:38.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:28:38.332 [DEBUG] [Thread-70374] [transport.py] [_log()] starting thread (client mode): 0xf575d1e0
2025-12-12T13:28:38.332 [DEBUG] [Thread-70374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:28:38.353 [DEBUG] [Thread-70374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:28:38.353 [INFO] [Thread-70374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] client lang: <none>
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] server lang: <none>
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] kex follows: False
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:28:38.357 [DEBUG] [Thread-70374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:28:38.358 [DEBUG] [Thread-70374] [transport.py] [_log()] Compression: none
2025-12-12T13:28:38.358 [DEBUG] [Thread-70374] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:28:38.366 [DEBUG] [Thread-70374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:28:38.366 [DEBUG] [Thread-70374] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:28:38.367 [DEBUG] [Thread-70374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:28:38.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:28:38.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:28:38.368 [DEBUG] [Thread-70374] [transport.py] [_log()] userauth is OK
2025-12-12T13:28:38.368 [DEBUG] [Thread-70374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:28:38.368 [DEBUG] [Thread-70374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:28:38.368 [DEBUG] [Thread-70374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:28:38.368 [DEBUG] [Thread-70374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:28:38.380 [INFO] [Thread-70374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:28:38.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:28:38.947 [DEBUG] [Thread-70374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:28:38.947 [DEBUG] [Thread-70374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:28:38.948 [DEBUG] [Thread-70374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:28:38.989 [DEBUG] [Thread-70374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:28:38.989 [DEBUG] [Thread-70374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:28:38.992 [DEBUG] [Thread-70374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:28:39.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:28:39.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:28:39.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:28:39.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:28:39.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:28:39.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:28:39.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:28:39.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:28:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:28:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.477872 -999.00  +21.90  40.46     22   -0.60 1 1 2 1 1   888    0 23.71 41.73 ----- 52.8 40.5 298.8 58.6 25.7 -24.9 25.1 -24.3 25.1 -24.0 25.9 -22.3
2025-12-12T13:28:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:28:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:28:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.477872
2025-12-12T13:28:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:28:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:28:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:28:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:28:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:28:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:28:10', tmtdew=25.84, humidity=17.23, cloud=0.0, wind=40.25, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:28:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:28:39.017 [DEBUG] [Thread-70374] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:28:39.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:28:39.114 [DEBUG] [Thread-70377] [transport.py] [_log()] starting thread (client mode): 0xf570d2d0
2025-12-12T13:28:39.114 [DEBUG] [Thread-70377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:28:39.129 [DEBUG] [Thread-70377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:28:39.129 [INFO] [Thread-70377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:28:39.136 [DEBUG] [Thread-70377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] client lang: <none>
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] server lang: <none>
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] kex follows: False
2025-12-12T13:28:39.137 [DEBUG] [Thread-70377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:28:39.138 [DEBUG] [Thread-70377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:28:39.138 [DEBUG] [Thread-70377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:28:39.138 [DEBUG] [Thread-70377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:28:39.138 [DEBUG] [Thread-70377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:28:39.138 [DEBUG] [Thread-70377] [transport.py] [_log()] Compression: none
2025-12-12T13:28:39.138 [DEBUG] [Thread-70377] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:28:39.199 [DEBUG] [Thread-70377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:28:39.200 [DEBUG] [Thread-70377] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:28:39.201 [DEBUG] [Thread-70377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:28:39.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:28:39.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:28:39.255 [DEBUG] [Thread-70377] [transport.py] [_log()] userauth is OK
2025-12-12T13:28:39.255 [DEBUG] [Thread-70377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:28:39.256 [DEBUG] [Thread-70377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:28:39.256 [DEBUG] [Thread-70377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:28:39.256 [DEBUG] [Thread-70377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:28:39.275 [INFO] [Thread-70377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:28:39.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:28:39.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:28:40.090 [DEBUG] [Thread-70377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:28:40.090 [DEBUG] [Thread-70377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:28:40.138 [DEBUG] [Thread-70377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:28:40.139 [DEBUG] [Thread-70377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:28:40.148 [DEBUG] [Thread-70377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:28:40.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:28:40.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:28:40.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:28:40.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:28:40.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:28:40.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:28:40.183 [DEBUG] [Thread-70377] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:28:44.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:44.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:44.875 [DEBUG] [Thread-70379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:28:45.771 [DEBUG] [Thread-70380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:00.807 [DEBUG] [Thread-70381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:10.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:29:10.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:29:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:29:10.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 28, 42), 26.1, 17.1, 0.0, 46.92, 21.64, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:29:10.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:28:42
2025-12-12T13:29:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:29:11.159 [DEBUG] [Thread-70382] [transport.py] [_log()] starting thread (client mode): 0xf81c3880
2025-12-12T13:29:11.159 [DEBUG] [Thread-70382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:29:11.175 [DEBUG] [Thread-70382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:29:11.175 [INFO] [Thread-70382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] client lang: <none>
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] server lang: <none>
2025-12-12T13:29:11.178 [DEBUG] [Thread-70382] [transport.py] [_log()] kex follows: False
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] Compression: none
2025-12-12T13:29:11.179 [DEBUG] [Thread-70382] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:29:11.195 [DEBUG] [Thread-70382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:29:11.195 [DEBUG] [Thread-70382] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:29:11.196 [DEBUG] [Thread-70382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:29:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:29:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:29:11.197 [DEBUG] [Thread-70382] [transport.py] [_log()] userauth is OK
2025-12-12T13:29:11.197 [DEBUG] [Thread-70382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:29:11.197 [DEBUG] [Thread-70382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:29:11.197 [DEBUG] [Thread-70382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:29:11.197 [DEBUG] [Thread-70382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:29:11.208 [INFO] [Thread-70382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:29:11.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:29:11.829 [DEBUG] [Thread-70382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:29:11.829 [DEBUG] [Thread-70382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:29:11.830 [DEBUG] [Thread-70382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:29:11.870 [DEBUG] [Thread-70382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:29:11.870 [DEBUG] [Thread-70382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:29:11.873 [DEBUG] [Thread-70382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:29:11.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:29:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:29:11.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:29:11.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:29:11.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:29:11.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:29:11.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:29:11.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:29:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:29:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.478220 -999.00  +21.40  45.99     23   -0.50 1 1 2 1 1   888    0 23.27 39.66 ----- 32.1 46.0 315.2 58.1 25.7 -24.9 25.1 -26.0 25.1 -23.5 25.8 -23.1
2025-12-12T13:29:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:29:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:29:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.478220
2025-12-12T13:29:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:29:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:29:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:29:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:29:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:29:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:28:42', tmtdew=26.1, humidity=17.1, cloud=0.0, wind=46.92, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:28:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:29:11.892 [DEBUG] [Thread-70382] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:29:11.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:29:11.987 [DEBUG] [Thread-70385] [transport.py] [_log()] starting thread (client mode): 0xf81c2ce0
2025-12-12T13:29:11.987 [DEBUG] [Thread-70385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:29:12.003 [DEBUG] [Thread-70385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:29:12.003 [INFO] [Thread-70385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] client lang: <none>
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] server lang: <none>
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] kex follows: False
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:29:12.010 [DEBUG] [Thread-70385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:29:12.011 [DEBUG] [Thread-70385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:29:12.011 [DEBUG] [Thread-70385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:29:12.011 [DEBUG] [Thread-70385] [transport.py] [_log()] Compression: none
2025-12-12T13:29:12.011 [DEBUG] [Thread-70385] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:29:12.065 [DEBUG] [Thread-70385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:29:12.065 [DEBUG] [Thread-70385] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:29:12.065 [DEBUG] [Thread-70385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:29:12.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:29:12.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:29:12.127 [DEBUG] [Thread-70385] [transport.py] [_log()] userauth is OK
2025-12-12T13:29:12.127 [DEBUG] [Thread-70385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:29:12.127 [DEBUG] [Thread-70385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:29:12.127 [DEBUG] [Thread-70385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:29:12.127 [DEBUG] [Thread-70385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:29:12.142 [INFO] [Thread-70385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:29:12.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:29:12.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:29:12.971 [DEBUG] [Thread-70385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:29:12.971 [DEBUG] [Thread-70385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:29:13.018 [DEBUG] [Thread-70385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:29:13.019 [DEBUG] [Thread-70385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:29:13.027 [DEBUG] [Thread-70385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:29:13.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:29: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')
2025-12-12T13:29: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
2025-12-12T13:29:13.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:29:13.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:29:13.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:29:13.060 [DEBUG] [Thread-70385] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:29:15.835 [DEBUG] [Thread-70387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:30.869 [DEBUG] [Thread-70388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:43.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:29:43.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:29:43.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:29:43.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 29, 14), 26.36, 16.77, 0.0, 46.02, 21.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:29:43.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:29:14
2025-12-12T13:29:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:29:44.062 [DEBUG] [Thread-70389] [transport.py] [_log()] starting thread (client mode): 0xf575d7b0
2025-12-12T13:29:44.062 [DEBUG] [Thread-70389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:29:44.081 [DEBUG] [Thread-70389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:29:44.081 [INFO] [Thread-70389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:29:44.084 [DEBUG] [Thread-70389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] client lang: <none>
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] server lang: <none>
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] kex follows: False
2025-12-12T13:29:44.085 [DEBUG] [Thread-70389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:29:44.086 [DEBUG] [Thread-70389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:29:44.086 [DEBUG] [Thread-70389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:29:44.086 [DEBUG] [Thread-70389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:29:44.086 [DEBUG] [Thread-70389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:29:44.086 [DEBUG] [Thread-70389] [transport.py] [_log()] Compression: none
2025-12-12T13:29:44.086 [DEBUG] [Thread-70389] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:29:44.102 [DEBUG] [Thread-70389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:29:44.103 [DEBUG] [Thread-70389] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:29:44.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:29:44.104 [DEBUG] [Thread-70389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:29:44.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:29:44.106 [DEBUG] [Thread-70389] [transport.py] [_log()] userauth is OK
2025-12-12T13:29:44.106 [DEBUG] [Thread-70389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:29:44.107 [DEBUG] [Thread-70389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:29:44.107 [DEBUG] [Thread-70389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:29:44.107 [DEBUG] [Thread-70389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:29:44.131 [INFO] [Thread-70389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:29:44.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:29:44.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:44.277 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:44.776 [DEBUG] [Thread-70389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:29:44.776 [DEBUG] [Thread-70389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:29:44.777 [DEBUG] [Thread-70389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:29:44.817 [DEBUG] [Thread-70389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:29:44.817 [DEBUG] [Thread-70389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:29:44.819 [DEBUG] [Thread-70389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:29:44.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:29:44.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:29:44.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:29:44.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:29:44.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:29:44.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:29:44.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:29:44.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:29:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:29:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.478567 -999.00  +21.70  33.05     22   -0.50 1 1 2 1 1   888    0 23.45 38.87 ----- 32.4 33.0 325.4 54.0 25.8 -25.2 25.2 -24.3 25.3 -22.7 26.0 -23.0
2025-12-12T13:29:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:29:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:29:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.478567
2025-12-12T13:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:29:14', tmtdew=26.36, humidity=16.77, cloud=0.0, wind=46.02, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:29:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:29:44.845 [DEBUG] [Thread-70389] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:29:44.923 [DEBUG] [Thread-70392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:44.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:29:44.943 [DEBUG] [Thread-70393] [transport.py] [_log()] starting thread (client mode): 0xf570cac0
2025-12-12T13:29:44.943 [DEBUG] [Thread-70393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:29:44.962 [DEBUG] [Thread-70393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:29:44.962 [INFO] [Thread-70393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:29:44.970 [DEBUG] [Thread-70393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] client lang: <none>
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] server lang: <none>
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] kex follows: False
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:29:44.971 [DEBUG] [Thread-70393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:29:44.972 [DEBUG] [Thread-70393] [transport.py] [_log()] Compression: none
2025-12-12T13:29:44.972 [DEBUG] [Thread-70393] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:29:45.027 [DEBUG] [Thread-70393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:29:45.027 [DEBUG] [Thread-70393] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:29:45.028 [DEBUG] [Thread-70393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:29:45.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:29:45.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:29:45.083 [DEBUG] [Thread-70393] [transport.py] [_log()] userauth is OK
2025-12-12T13:29:45.083 [DEBUG] [Thread-70393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:29:45.083 [DEBUG] [Thread-70393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:29:45.083 [DEBUG] [Thread-70393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:29:45.083 [DEBUG] [Thread-70393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:29:45.106 [INFO] [Thread-70393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:29:45.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:29:45.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:29:45.899 [DEBUG] [Thread-70395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:29:45.931 [DEBUG] [Thread-70393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:29:45.931 [DEBUG] [Thread-70393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:29:45.979 [DEBUG] [Thread-70393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:29:45.979 [DEBUG] [Thread-70393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:29:45.988 [DEBUG] [Thread-70393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:29:45.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:29:45.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:29:46.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:29:46.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:29:46.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:29:46.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:29:46.021 [DEBUG] [Thread-70393] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:30:00.942 [DEBUG] [Thread-70396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:15.971 [DEBUG] [Thread-70397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:16.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:30:16.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:30:16.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:30:16.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 29, 46), 26.53, 16.43, 0.0, 44.78, 21.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:30:16.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:29:46
2025-12-12T13:30:16.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:30:17.020 [DEBUG] [Thread-70398] [transport.py] [_log()] starting thread (client mode): 0xf5703e20
2025-12-12T13:30:17.020 [DEBUG] [Thread-70398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:30:17.042 [DEBUG] [Thread-70398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:30:17.042 [INFO] [Thread-70398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] client lang: <none>
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] server lang: <none>
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] kex follows: False
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] Compression: none
2025-12-12T13:30:17.045 [DEBUG] [Thread-70398] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:30:17.062 [DEBUG] [Thread-70398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:30:17.063 [DEBUG] [Thread-70398] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:30:17.063 [DEBUG] [Thread-70398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:30:17.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:30:17.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:30:17.065 [DEBUG] [Thread-70398] [transport.py] [_log()] userauth is OK
2025-12-12T13:30:17.065 [DEBUG] [Thread-70398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:30:17.066 [DEBUG] [Thread-70398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:30:17.066 [DEBUG] [Thread-70398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:30:17.066 [DEBUG] [Thread-70398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:30:17.101 [INFO] [Thread-70398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:30:17.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:30:17.688 [DEBUG] [Thread-70398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:30:17.688 [DEBUG] [Thread-70398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:30:17.689 [DEBUG] [Thread-70398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:30:17.730 [DEBUG] [Thread-70398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:30:17.730 [DEBUG] [Thread-70398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:30:17.733 [DEBUG] [Thread-70398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:30:17.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:30:17.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:30:17.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:30:17.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:30:17.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:30:17.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:30:17.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:30:17.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:30:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:30:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.479261 -999.00  +21.40  48.85     21   -1.40 1 1 2 1 1   888    0 23.28 36.77 ----- 38.2 48.9 311.8 56.3 25.7 -27.1 25.2 -25.9 25.2 -23.7 25.9 -23.9
2025-12-12T13:30:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:30:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:30:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.479261
2025-12-12T13:30:17.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:30:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:30:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:30:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:30:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:30:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:29:46', tmtdew=26.53, humidity=16.43, cloud=0.0, wind=44.78, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:30:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:30:17.767 [DEBUG] [Thread-70398] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:30:17.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:30:17.863 [DEBUG] [Thread-70401] [transport.py] [_log()] starting thread (client mode): 0xf81c1090
2025-12-12T13:30:17.863 [DEBUG] [Thread-70401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:30:17.881 [DEBUG] [Thread-70401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:30:17.881 [INFO] [Thread-70401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:30:17.888 [DEBUG] [Thread-70401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] client lang: <none>
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] server lang: <none>
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] kex follows: False
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:30:17.889 [DEBUG] [Thread-70401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:30:17.890 [DEBUG] [Thread-70401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:30:17.890 [DEBUG] [Thread-70401] [transport.py] [_log()] Compression: none
2025-12-12T13:30:17.890 [DEBUG] [Thread-70401] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:30:17.950 [DEBUG] [Thread-70401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:30:17.950 [DEBUG] [Thread-70401] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:30:17.951 [DEBUG] [Thread-70401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:30:17.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:30:17.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:30:18.013 [DEBUG] [Thread-70401] [transport.py] [_log()] userauth is OK
2025-12-12T13:30:18.013 [DEBUG] [Thread-70401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:30:18.014 [DEBUG] [Thread-70401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:30:18.014 [DEBUG] [Thread-70401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:30:18.014 [DEBUG] [Thread-70401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:30:18.032 [INFO] [Thread-70401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:30:18.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:30:18.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:30:18.901 [DEBUG] [Thread-70401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:30:18.901 [DEBUG] [Thread-70401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:30:18.948 [DEBUG] [Thread-70401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:30:18.948 [DEBUG] [Thread-70401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:30:18.957 [DEBUG] [Thread-70401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:30:18.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:30:18.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:30:18.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:30:18.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:30:18.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:30:18.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:30:18.990 [DEBUG] [Thread-70401] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:30:31.004 [DEBUG] [Thread-70403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:44.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:44.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:44.967 [DEBUG] [Thread-70404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:46.051 [DEBUG] [Thread-70405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:30:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:30:48.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:30:48.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:30:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 30, 18), 26.43, 16.55, 0.0, 46.07, 21.21, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:30:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:30:18
2025-12-12T13:30:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:30:49.959 [DEBUG] [Thread-70406] [transport.py] [_log()] starting thread (client mode): 0xf81f2bf0
2025-12-12T13:30:49.959 [DEBUG] [Thread-70406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:30:49.979 [DEBUG] [Thread-70406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:30:49.979 [INFO] [Thread-70406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:30:49.982 [DEBUG] [Thread-70406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:30:49.982 [DEBUG] [Thread-70406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:30:49.982 [DEBUG] [Thread-70406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:30:49.982 [DEBUG] [Thread-70406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:49.982 [DEBUG] [Thread-70406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:49.982 [DEBUG] [Thread-70406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] client lang: <none>
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] server lang: <none>
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] kex follows: False
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] Compression: none
2025-12-12T13:30:49.983 [DEBUG] [Thread-70406] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:30:50.003 [DEBUG] [Thread-70406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:30:50.003 [DEBUG] [Thread-70406] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:30:50.004 [DEBUG] [Thread-70406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:30:50.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:30:50.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:30:50.048 [DEBUG] [Thread-70406] [transport.py] [_log()] userauth is OK
2025-12-12T13:30:50.048 [DEBUG] [Thread-70406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:30:50.049 [DEBUG] [Thread-70406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:30:50.049 [DEBUG] [Thread-70406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:30:50.049 [DEBUG] [Thread-70406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:30:50.080 [INFO] [Thread-70406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:30:50.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:30:50.753 [DEBUG] [Thread-70406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:30:50.754 [DEBUG] [Thread-70406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:30:50.754 [DEBUG] [Thread-70406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:30:50.794 [DEBUG] [Thread-70406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:30:50.795 [DEBUG] [Thread-70406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:30:50.797 [DEBUG] [Thread-70406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:30:50.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:30:50.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:30:50.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:30:50.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:30:50.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:30:50.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:30:50.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:30:50.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:30:50.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:30:50.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.479608 -999.00  +21.70  43.17     21   -1.20 1 1 2 1 1   888    0 23.33 33.88 ----- 39.5 43.2 325.6 51.6 25.8 -24.3 25.1 -25.1 25.1 -23.1 25.9 -22.7
2025-12-12T13:30:50.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:30:50.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:30:50.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.479608
2025-12-12T13:30:50.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:30:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:30:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:30:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:30:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:30:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:30:18', tmtdew=26.43, humidity=16.55, cloud=0.0, wind=46.07, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:30:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:30:50.819 [DEBUG] [Thread-70406] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:30:50.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:30:50.919 [DEBUG] [Thread-70409] [transport.py] [_log()] starting thread (client mode): 0xf813f5b0
2025-12-12T13:30:50.919 [DEBUG] [Thread-70409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:30:50.933 [DEBUG] [Thread-70409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:30:50.934 [INFO] [Thread-70409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] client lang: <none>
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] server lang: <none>
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] kex follows: False
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] Compression: none
2025-12-12T13:30:50.941 [DEBUG] [Thread-70409] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:30:50.999 [DEBUG] [Thread-70409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:30:50.999 [DEBUG] [Thread-70409] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:30:51.000 [DEBUG] [Thread-70409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:30:51.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:30:51.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:30:51.056 [DEBUG] [Thread-70409] [transport.py] [_log()] userauth is OK
2025-12-12T13:30:51.056 [DEBUG] [Thread-70409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:30:51.056 [DEBUG] [Thread-70409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:30:51.056 [DEBUG] [Thread-70409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:30:51.056 [DEBUG] [Thread-70409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:30:51.075 [INFO] [Thread-70409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:30:51.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:30:51.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:30:51.959 [DEBUG] [Thread-70409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:30:51.959 [DEBUG] [Thread-70409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:30:52.007 [DEBUG] [Thread-70409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:30:52.007 [DEBUG] [Thread-70409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:30:52.016 [DEBUG] [Thread-70409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:30:52.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:30:52.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:30:52.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:30:52.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:30:52.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:30:52.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:30:52.048 [DEBUG] [Thread-70409] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:31:01.079 [DEBUG] [Thread-70411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:16.123 [DEBUG] [Thread-70412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:31:22.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:31:22.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:31:22.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 30, 50), 26.68, 16.35, 0.0, 39.93, 21.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:31:22.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:30:50
2025-12-12T13:31:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:31:23.095 [DEBUG] [Thread-70413] [transport.py] [_log()] starting thread (client mode): 0xf575f5e0
2025-12-12T13:31:23.095 [DEBUG] [Thread-70413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:31:23.115 [DEBUG] [Thread-70413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:31:23.115 [INFO] [Thread-70413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] client lang: <none>
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] server lang: <none>
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] kex follows: False
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] Compression: none
2025-12-12T13:31:23.118 [DEBUG] [Thread-70413] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:31:23.132 [DEBUG] [Thread-70413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:31:23.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:31:23.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] userauth is OK
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:31:23.133 [DEBUG] [Thread-70413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:31:23.148 [INFO] [Thread-70413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:31:23.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:31:23.739 [DEBUG] [Thread-70413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:31:23.739 [DEBUG] [Thread-70413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:31:23.739 [DEBUG] [Thread-70413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:31:23.781 [DEBUG] [Thread-70413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:31:23.781 [DEBUG] [Thread-70413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:31:23.783 [DEBUG] [Thread-70413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:31:23.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:31:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:31:23.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:31:23.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:31:23.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:31:23.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:31:23.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:31:23.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.479956 -999.00  +20.70  42.14     22   -1.60 1 1 2 1 1   888    0 23.20 32.22 ----- 45.5 42.1 335.3 62.8 25.8 -25.9 25.1 -25.5 25.2 -22.7 25.9 -23.8
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.479956
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:31:23.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:30:50', tmtdew=26.68, humidity=16.35, cloud=0.0, wind=39.93, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:31:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:31:23.801 [DEBUG] [Thread-70413] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:31:23.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:31:23.888 [DEBUG] [Thread-70416] [transport.py] [_log()] starting thread (client mode): 0xfabc4b20
2025-12-12T13:31:23.888 [DEBUG] [Thread-70416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:31:23.902 [DEBUG] [Thread-70416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:31:23.902 [INFO] [Thread-70416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] client lang: <none>
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] server lang: <none>
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] kex follows: False
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] Compression: none
2025-12-12T13:31:23.910 [DEBUG] [Thread-70416] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:31:23.972 [DEBUG] [Thread-70416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:31:23.972 [DEBUG] [Thread-70416] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:31:23.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:31:23.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:31:23.972 [DEBUG] [Thread-70416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:31:24.028 [DEBUG] [Thread-70416] [transport.py] [_log()] userauth is OK
2025-12-12T13:31:24.028 [DEBUG] [Thread-70416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:31:24.028 [DEBUG] [Thread-70416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:31:24.028 [DEBUG] [Thread-70416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:31:24.028 [DEBUG] [Thread-70416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:31:24.042 [INFO] [Thread-70416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:31:24.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:31:24.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:31:24.915 [DEBUG] [Thread-70416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:31:24.915 [DEBUG] [Thread-70416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:31:24.963 [DEBUG] [Thread-70416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:31:24.963 [DEBUG] [Thread-70416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:31:24.972 [DEBUG] [Thread-70416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:31:24.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:31:24.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:31:24.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:31:24.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:31:24.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:31:24.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:31:25.003 [DEBUG] [Thread-70416] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:31:31.157 [DEBUG] [Thread-70418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:44.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:44.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:45.019 [DEBUG] [Thread-70419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:46.209 [DEBUG] [Thread-70420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:31:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:31:55.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:31:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:31:55.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 31, 22), 26.67, 16.37, 0.0, 44.62, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:31:55.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:31:22
2025-12-12T13:31:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:31:56.032 [DEBUG] [Thread-70421] [transport.py] [_log()] starting thread (client mode): 0xf81f2ef0
2025-12-12T13:31:56.032 [DEBUG] [Thread-70421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:31:56.049 [DEBUG] [Thread-70421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:31:56.049 [INFO] [Thread-70421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] client lang: <none>
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] server lang: <none>
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] kex follows: False
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] Compression: none
2025-12-12T13:31:56.053 [DEBUG] [Thread-70421] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:31:56.070 [DEBUG] [Thread-70421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:31:56.070 [DEBUG] [Thread-70421] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:31:56.070 [DEBUG] [Thread-70421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:31:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:31:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:31:56.071 [DEBUG] [Thread-70421] [transport.py] [_log()] userauth is OK
2025-12-12T13:31:56.071 [DEBUG] [Thread-70421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:31:56.071 [DEBUG] [Thread-70421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:31:56.071 [DEBUG] [Thread-70421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:31:56.071 [DEBUG] [Thread-70421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:31:56.084 [INFO] [Thread-70421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:31:56.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:31:56.741 [DEBUG] [Thread-70421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:31:56.741 [DEBUG] [Thread-70421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:31:56.741 [DEBUG] [Thread-70421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:31:56.781 [DEBUG] [Thread-70421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:31:56.781 [DEBUG] [Thread-70421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:31:56.783 [DEBUG] [Thread-70421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:31:56.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:31:56.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:31:56.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:31:56.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:31:56.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:31:56.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:31:56.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.480303 -999.00  +21.10  46.38     22   -1.20 1 1 2 1 1   888    0 22.89 28.12 ----- 50.4 46.4 325.8 66.7 25.6 -25.9 25.1 -24.9 25.2 -22.4 25.9 -23.6
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.480303
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:31:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:31:22', tmtdew=26.67, humidity=16.37, cloud=0.0, wind=44.62, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:31:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:31:56.801 [DEBUG] [Thread-70421] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:31:56.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:31:56.887 [DEBUG] [Thread-70424] [transport.py] [_log()] starting thread (client mode): 0xf81c2170
2025-12-12T13:31:56.887 [DEBUG] [Thread-70424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:31:56.902 [DEBUG] [Thread-70424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:31:56.902 [INFO] [Thread-70424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] client lang: <none>
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] server lang: <none>
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] kex follows: False
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:31:56.909 [DEBUG] [Thread-70424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:31:56.910 [DEBUG] [Thread-70424] [transport.py] [_log()] Compression: none
2025-12-12T13:31:56.910 [DEBUG] [Thread-70424] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:31:56.969 [DEBUG] [Thread-70424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:31:56.969 [DEBUG] [Thread-70424] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:31:56.970 [DEBUG] [Thread-70424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:31:56.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:31:56.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:31:57.029 [DEBUG] [Thread-70424] [transport.py] [_log()] userauth is OK
2025-12-12T13:31:57.029 [DEBUG] [Thread-70424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:31:57.029 [DEBUG] [Thread-70424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:31:57.029 [DEBUG] [Thread-70424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:31:57.030 [DEBUG] [Thread-70424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:31:57.048 [INFO] [Thread-70424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:31:57.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:31:57.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:31:57.845 [DEBUG] [Thread-70424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:31:57.845 [DEBUG] [Thread-70424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:31:57.893 [DEBUG] [Thread-70424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:31:57.893 [DEBUG] [Thread-70424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:31:57.902 [DEBUG] [Thread-70424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:31:57.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:31:57.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:31:57.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:31:57.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:31:57.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:31:57.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:31:57.937 [DEBUG] [Thread-70424] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:32:01.236 [DEBUG] [Thread-70426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:32:16.271 [DEBUG] [Thread-70427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:32:27.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:32:27.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:32:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:32:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 31, 54), 26.83, 16.3, 0.0, 48.22, 21.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:32:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:31:54
2025-12-12T13:32:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:32:28.955 [DEBUG] [Thread-70428] [transport.py] [_log()] starting thread (client mode): 0xf5703fa0
2025-12-12T13:32:28.955 [DEBUG] [Thread-70428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:32:28.975 [DEBUG] [Thread-70428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:32:28.975 [INFO] [Thread-70428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:32:28.978 [DEBUG] [Thread-70428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] client lang: <none>
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] server lang: <none>
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] kex follows: False
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] Compression: none
2025-12-12T13:32:28.979 [DEBUG] [Thread-70428] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:32:28.994 [DEBUG] [Thread-70428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:32:28.994 [DEBUG] [Thread-70428] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:32:28.994 [DEBUG] [Thread-70428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:32:28.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:32:28.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:32:28.995 [DEBUG] [Thread-70428] [transport.py] [_log()] userauth is OK
2025-12-12T13:32:28.995 [DEBUG] [Thread-70428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:32:28.995 [DEBUG] [Thread-70428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:32:28.995 [DEBUG] [Thread-70428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:32:28.995 [DEBUG] [Thread-70428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:32:29.010 [INFO] [Thread-70428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:32:29.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:32:29.648 [DEBUG] [Thread-70428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:32:29.648 [DEBUG] [Thread-70428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:32:29.649 [DEBUG] [Thread-70428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:32:29.689 [DEBUG] [Thread-70428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:32:29.689 [DEBUG] [Thread-70428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:32:29.692 [DEBUG] [Thread-70428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:32:29.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:32:29.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:32:29.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:32:29.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:32:29.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:32:29.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:32:29.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:32:29.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:32:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:32:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.480650 -999.00  +21.20  47.24     22   -1.00 1 1 2 1 1   888    0 22.80 25.34 ----- 42.9 47.2 327.4 66.0 25.7 -26.8 25.1 -25.0 25.3 -22.7 25.9 -23.2
2025-12-12T13:32:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:32:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:32:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.480650
2025-12-12T13:32:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:32:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:32:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:32:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:32:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:32:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:31:54', tmtdew=26.83, humidity=16.3, cloud=0.0, wind=48.22, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:32:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:32:29.717 [DEBUG] [Thread-70428] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:32:29.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:32:31.300 [DEBUG] [Thread-70431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:32:44.713 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:32:44.714 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:32:45.066 [DEBUG] [Thread-70432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:32:46.353 [DEBUG] [Thread-70433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:01.387 [DEBUG] [Thread-70434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:16.417 [DEBUG] [Thread-70435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:31.443 [DEBUG] [Thread-70436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:44.854 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:44.855 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:45.127 [DEBUG] [Thread-70437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:33:46.469 [DEBUG] [Thread-70438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:01.496 [DEBUG] [Thread-70439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:16.523 [DEBUG] [Thread-70440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:31.553 [DEBUG] [Thread-70441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:42.666 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T13:34:44.996 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:44.998 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:45.177 [DEBUG] [Thread-70442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:34:46.585 [DEBUG] [Thread-70443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:01.615 [DEBUG] [Thread-70444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:12.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:35:12.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:35:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:35:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 35, 6), 25.57, 17.38, 0.0, 50.37, 20.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:35:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:35:06
2025-12-12T13:35:13.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:35:13.670 [DEBUG] [Thread-70445] [transport.py] [_log()] starting thread (client mode): 0xf81e6950
2025-12-12T13:35:13.670 [DEBUG] [Thread-70445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:35:13.690 [DEBUG] [Thread-70445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:35:13.690 [INFO] [Thread-70445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:35:13.693 [DEBUG] [Thread-70445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] client lang: <none>
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] server lang: <none>
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] kex follows: False
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] Compression: none
2025-12-12T13:35:13.694 [DEBUG] [Thread-70445] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:35:13.710 [DEBUG] [Thread-70445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:35:13.710 [DEBUG] [Thread-70445] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:35:13.711 [DEBUG] [Thread-70445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:35:13.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:35:13.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:35:13.711 [DEBUG] [Thread-70445] [transport.py] [_log()] userauth is OK
2025-12-12T13:35:13.711 [DEBUG] [Thread-70445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:35:13.711 [DEBUG] [Thread-70445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:35:13.711 [DEBUG] [Thread-70445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:35:13.711 [DEBUG] [Thread-70445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:35:13.726 [INFO] [Thread-70445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:35:13.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:35:16.642 [DEBUG] [Thread-70447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:18.184 [DEBUG] [Thread-70445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:35:18.185 [DEBUG] [Thread-70445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:35:18.185 [DEBUG] [Thread-70445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:35:18.225 [DEBUG] [Thread-70445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:35:18.225 [DEBUG] [Thread-70445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:35:18.228 [DEBUG] [Thread-70445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:35:18.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:35:18.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:35:18.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:35:18.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:35:18.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:35:18.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:35:18.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.482039 -999.00  +21.10  57.87     22   -1.20 1 1 2 1 1   888    0 23.02 20.79 ----- 52.1 57.9 329.1 75.3 25.7 -25.7 25.1 -25.7 25.4 -23.3 25.9 -23.3
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.482039
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:35:18.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:35:06', tmtdew=25.57, humidity=17.38, cloud=0.0, wind=50.37, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:34:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:35:18.246 [DEBUG] [Thread-70445] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:35:18.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:35:18.332 [DEBUG] [Thread-70449] [transport.py] [_log()] starting thread (client mode): 0xf81e49a0
2025-12-12T13:35:18.332 [DEBUG] [Thread-70449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:35:18.347 [DEBUG] [Thread-70449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:35:18.347 [INFO] [Thread-70449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] client lang: <none>
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] server lang: <none>
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] kex follows: False
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:35:18.355 [DEBUG] [Thread-70449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:35:18.356 [DEBUG] [Thread-70449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:35:18.356 [DEBUG] [Thread-70449] [transport.py] [_log()] Compression: none
2025-12-12T13:35:18.356 [DEBUG] [Thread-70449] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:35:18.413 [DEBUG] [Thread-70449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:35:18.413 [DEBUG] [Thread-70449] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:35:18.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:35:18.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:35:18.414 [DEBUG] [Thread-70449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:35:18.470 [DEBUG] [Thread-70449] [transport.py] [_log()] userauth is OK
2025-12-12T13:35:18.470 [DEBUG] [Thread-70449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:35:18.470 [DEBUG] [Thread-70449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:35:18.470 [DEBUG] [Thread-70449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:35:18.470 [DEBUG] [Thread-70449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:35:18.488 [INFO] [Thread-70449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:35:18.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:35:18.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:35:19.318 [DEBUG] [Thread-70449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:35:19.318 [DEBUG] [Thread-70449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:35:19.366 [DEBUG] [Thread-70449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:35:19.366 [DEBUG] [Thread-70449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:35:19.379 [DEBUG] [Thread-70449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:35:19.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:35:19.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:35:19.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:35:19.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:35:19.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:35:19.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:35:19.411 [DEBUG] [Thread-70449] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:35:31.669 [DEBUG] [Thread-70451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:45.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:45.138 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:45.229 [DEBUG] [Thread-70452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:46.709 [DEBUG] [Thread-70453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:35:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:35:49.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:35:49.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:35:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 35, 38), 25.24, 18.06, 0.0, 42.03, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:35:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:35:38
2025-12-12T13:35:50.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:35:50.401 [DEBUG] [Thread-70454] [transport.py] [_log()] starting thread (client mode): 0xf575cee0
2025-12-12T13:35:50.401 [DEBUG] [Thread-70454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:35:50.421 [DEBUG] [Thread-70454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:35:50.421 [INFO] [Thread-70454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:35:50.424 [DEBUG] [Thread-70454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] client lang: <none>
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] server lang: <none>
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] kex follows: False
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:35:50.425 [DEBUG] [Thread-70454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:35:50.426 [DEBUG] [Thread-70454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:35:50.426 [DEBUG] [Thread-70454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:35:50.426 [DEBUG] [Thread-70454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:35:50.426 [DEBUG] [Thread-70454] [transport.py] [_log()] Compression: none
2025-12-12T13:35:50.426 [DEBUG] [Thread-70454] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:35:50.444 [DEBUG] [Thread-70454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:35:50.444 [DEBUG] [Thread-70454] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:35:50.445 [DEBUG] [Thread-70454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:35:50.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:35:50.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:35:50.446 [DEBUG] [Thread-70454] [transport.py] [_log()] userauth is OK
2025-12-12T13:35:50.447 [DEBUG] [Thread-70454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:35:50.447 [DEBUG] [Thread-70454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:35:50.447 [DEBUG] [Thread-70454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:35:50.447 [DEBUG] [Thread-70454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:35:50.478 [INFO] [Thread-70454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:35:50.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:35:51.063 [DEBUG] [Thread-70454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:35:51.064 [DEBUG] [Thread-70454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:35:51.064 [DEBUG] [Thread-70454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:35:51.105 [DEBUG] [Thread-70454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:35:51.105 [DEBUG] [Thread-70454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:35:51.108 [DEBUG] [Thread-70454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:35:51.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:35:51.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:35:51.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:35:51.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:35:51.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:35:51.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:35:51.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:35:51.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:35:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:35:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.482733 -999.00  +21.10  44.29     22   -1.10 1 1 2 1 1   888    0 22.62 11.50 ----- 45.8 44.3 320.4 60.6 25.7 -26.1 25.1 -25.2 25.2 -22.6 25.9 -23.8
2025-12-12T13:35:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:35:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:35:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.482733
2025-12-12T13:35:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:35:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:35:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:35:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:35:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:35:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:35:38', tmtdew=25.24, humidity=18.06, cloud=0.0, wind=42.03, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:35:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:35:51.135 [DEBUG] [Thread-70454] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:35:51.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:35:51.235 [DEBUG] [Thread-70457] [transport.py] [_log()] starting thread (client mode): 0xf5700d60
2025-12-12T13:35:51.235 [DEBUG] [Thread-70457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:35:51.250 [DEBUG] [Thread-70457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:35:51.250 [INFO] [Thread-70457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:51.258 [DEBUG] [Thread-70457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] client lang: <none>
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] server lang: <none>
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] kex follows: False
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] Compression: none
2025-12-12T13:35:51.259 [DEBUG] [Thread-70457] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:35:51.317 [DEBUG] [Thread-70457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:35:51.317 [DEBUG] [Thread-70457] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:35:51.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:35:51.318 [DEBUG] [Thread-70457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:35:51.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:35:51.375 [DEBUG] [Thread-70457] [transport.py] [_log()] userauth is OK
2025-12-12T13:35:51.376 [DEBUG] [Thread-70457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:35:51.376 [DEBUG] [Thread-70457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:35:51.376 [DEBUG] [Thread-70457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:35:51.376 [DEBUG] [Thread-70457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:35:51.395 [INFO] [Thread-70457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:35:51.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:35:51.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:35:52.263 [DEBUG] [Thread-70457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:35:52.263 [DEBUG] [Thread-70457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:35:52.312 [DEBUG] [Thread-70457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:35:52.312 [DEBUG] [Thread-70457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:35:52.321 [DEBUG] [Thread-70457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:35:52.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:35:52.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:35:52.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:35:52.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:35:52.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:35:52.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:35:52.355 [DEBUG] [Thread-70457] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:36:01.736 [DEBUG] [Thread-70459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:16.784 [DEBUG] [Thread-70460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:22.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:36:22.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:36:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:36:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 36, 10), 25.37, 17.91, 0.0, 44.09, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:36:23.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:36:10
2025-12-12T13:36:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:36:23.326 [DEBUG] [Thread-70461] [transport.py] [_log()] starting thread (client mode): 0xf81c1840
2025-12-12T13:36:23.326 [DEBUG] [Thread-70461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:36:23.350 [DEBUG] [Thread-70461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:36:23.350 [INFO] [Thread-70461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:36:23.353 [DEBUG] [Thread-70461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:36:23.353 [DEBUG] [Thread-70461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] client lang: <none>
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] server lang: <none>
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] kex follows: False
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:36:23.354 [DEBUG] [Thread-70461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:36:23.355 [DEBUG] [Thread-70461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:36:23.355 [DEBUG] [Thread-70461] [transport.py] [_log()] Compression: none
2025-12-12T13:36:23.355 [DEBUG] [Thread-70461] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:36:23.371 [DEBUG] [Thread-70461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:36:23.372 [DEBUG] [Thread-70461] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:36:23.372 [DEBUG] [Thread-70461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:36:23.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:36:23.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:36:23.374 [DEBUG] [Thread-70461] [transport.py] [_log()] userauth is OK
2025-12-12T13:36:23.374 [DEBUG] [Thread-70461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:36:23.374 [DEBUG] [Thread-70461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:36:23.374 [DEBUG] [Thread-70461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:36:23.375 [DEBUG] [Thread-70461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:36:23.391 [INFO] [Thread-70461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:36:23.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:36:24.209 [DEBUG] [Thread-70461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:36:24.209 [DEBUG] [Thread-70461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:36:24.209 [DEBUG] [Thread-70461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:36:24.250 [DEBUG] [Thread-70461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:36:24.250 [DEBUG] [Thread-70461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:36:24.253 [DEBUG] [Thread-70461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:36:24.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:36:24.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:36:24.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:36:24.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:36:24.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:36:24.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:36:24.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:36:24.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:36:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:36:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.483081 -999.00  +21.20  40.81     22   -0.70 1 1 2 1 1   888    0 22.40 6.22 ----- 38.2 40.8 320.0 54.8 25.7 -25.9 25.1 -25.6 25.4 -22.8 25.9 -23.2
2025-12-12T13:36:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:36:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:36:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.483081
2025-12-12T13:36:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:36:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:36:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:36:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:36:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:36:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:36:10', tmtdew=25.37, humidity=17.91, cloud=0.0, wind=44.09, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:35:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:36:24.281 [DEBUG] [Thread-70461] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:36:24.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:36:24.376 [DEBUG] [Thread-70464] [transport.py] [_log()] starting thread (client mode): 0xf575f1f0
2025-12-12T13:36:24.376 [DEBUG] [Thread-70464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:36:24.390 [DEBUG] [Thread-70464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:36:24.391 [INFO] [Thread-70464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:36:24.398 [DEBUG] [Thread-70464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:36:24.398 [DEBUG] [Thread-70464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:36:24.398 [DEBUG] [Thread-70464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:36:24.398 [DEBUG] [Thread-70464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] client lang: <none>
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] server lang: <none>
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] kex follows: False
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:36:24.399 [DEBUG] [Thread-70464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:36:24.400 [DEBUG] [Thread-70464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:36:24.400 [DEBUG] [Thread-70464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:36:24.400 [DEBUG] [Thread-70464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:36:24.400 [DEBUG] [Thread-70464] [transport.py] [_log()] Compression: none
2025-12-12T13:36:24.400 [DEBUG] [Thread-70464] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:36:24.456 [DEBUG] [Thread-70464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:36:24.456 [DEBUG] [Thread-70464] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:36:24.457 [DEBUG] [Thread-70464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:36:24.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:36:24.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:36:24.511 [DEBUG] [Thread-70464] [transport.py] [_log()] userauth is OK
2025-12-12T13:36:24.511 [DEBUG] [Thread-70464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:36:24.512 [DEBUG] [Thread-70464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:36:24.512 [DEBUG] [Thread-70464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:36:24.512 [DEBUG] [Thread-70464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:36:24.533 [INFO] [Thread-70464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:36:24.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:36:24.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:36:25.419 [DEBUG] [Thread-70464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:36:25.419 [DEBUG] [Thread-70464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:36:25.467 [DEBUG] [Thread-70464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:36:25.467 [DEBUG] [Thread-70464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:36:25.476 [DEBUG] [Thread-70464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:36:25.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:36:25.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:36:25.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:36:25.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:36:25.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:36:25.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:36:25.513 [DEBUG] [Thread-70464] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:36:31.813 [DEBUG] [Thread-70466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:45.273 [DEBUG] [Thread-70467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:45.278 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:45.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:46.846 [DEBUG] [Thread-70468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:36:55.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:36:55.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:36:55.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:36:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 36, 42), 24.79, 18.44, 0.0, 45.08, 20.55, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:36:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:36:42
2025-12-12T13:36:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:36:56.474 [DEBUG] [Thread-70469] [transport.py] [_log()] starting thread (client mode): 0xf575f310
2025-12-12T13:36:56.474 [DEBUG] [Thread-70469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:36:56.495 [DEBUG] [Thread-70469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:36:56.495 [INFO] [Thread-70469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:36:56.498 [DEBUG] [Thread-70469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] client lang: <none>
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] server lang: <none>
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] kex follows: False
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] Compression: none
2025-12-12T13:36:56.499 [DEBUG] [Thread-70469] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:36:56.517 [DEBUG] [Thread-70469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:36:56.518 [DEBUG] [Thread-70469] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:36:56.518 [DEBUG] [Thread-70469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:36:56.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:36:56.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:36:56.521 [DEBUG] [Thread-70469] [transport.py] [_log()] userauth is OK
2025-12-12T13:36:56.521 [DEBUG] [Thread-70469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:36:56.521 [DEBUG] [Thread-70469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:36:56.521 [DEBUG] [Thread-70469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:36:56.521 [DEBUG] [Thread-70469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:36:56.558 [INFO] [Thread-70469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:36:56.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:36:57.183 [DEBUG] [Thread-70469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:36:57.183 [DEBUG] [Thread-70469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:36:57.184 [DEBUG] [Thread-70469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:36:57.224 [DEBUG] [Thread-70469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:36:57.224 [DEBUG] [Thread-70469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:36:57.227 [DEBUG] [Thread-70469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:36:57.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:36:57.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:36:57.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:36:57.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:36:57.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:36:57.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:36:57.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:36:57.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:36:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:36:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.483428 -999.00  +21.70  39.73     22   -0.40 1 1 2 1 1   888    0 22.17 1.39 ----- 31.4 39.7 325.0 53.0 25.8 -23.8 25.1 -25.7 25.4 -23.2 26.0 -22.2
2025-12-12T13:36:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:36:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:36:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.483428
2025-12-12T13:36:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:36:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:36:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:36:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:36:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:36:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:36:42', tmtdew=24.79, humidity=18.44, cloud=0.0, wind=45.08, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:36:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:36:57.260 [DEBUG] [Thread-70469] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:36:57.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:36:57.355 [DEBUG] [Thread-70472] [transport.py] [_log()] starting thread (client mode): 0xf570ebc0
2025-12-12T13:36:57.355 [DEBUG] [Thread-70472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:36:57.371 [DEBUG] [Thread-70472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:36:57.371 [INFO] [Thread-70472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:36:57.379 [DEBUG] [Thread-70472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] client lang: <none>
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] server lang: <none>
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] kex follows: False
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] Compression: none
2025-12-12T13:36:57.380 [DEBUG] [Thread-70472] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:36:57.439 [DEBUG] [Thread-70472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:36:57.439 [DEBUG] [Thread-70472] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:36:57.440 [DEBUG] [Thread-70472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:36:57.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:36:57.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:36:57.495 [DEBUG] [Thread-70472] [transport.py] [_log()] userauth is OK
2025-12-12T13:36:57.496 [DEBUG] [Thread-70472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:36:57.496 [DEBUG] [Thread-70472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:36:57.496 [DEBUG] [Thread-70472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:36:57.496 [DEBUG] [Thread-70472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:36:57.515 [INFO] [Thread-70472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:36:57.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:36:57.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:36:58.328 [DEBUG] [Thread-70472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:36:58.329 [DEBUG] [Thread-70472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:36:58.377 [DEBUG] [Thread-70472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:36:58.377 [DEBUG] [Thread-70472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:36:58.386 [DEBUG] [Thread-70472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:36:58.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:36:58.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:36:58.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:36:58.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:36:58.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:36:58.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:36:58.420 [DEBUG] [Thread-70472] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:37:01.877 [DEBUG] [Thread-70474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:37:16.918 [DEBUG] [Thread-70475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:37:28.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:37:28.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:37:28.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:37:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 37, 15), 24.94, 18.26, 0.0, 41.27, 20.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:37:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:37:15
2025-12-12T13:37:29.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:37:29.407 [DEBUG] [Thread-70476] [transport.py] [_log()] starting thread (client mode): 0xf813d3f0
2025-12-12T13:37:29.407 [DEBUG] [Thread-70476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:37:29.427 [DEBUG] [Thread-70476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:37:29.427 [INFO] [Thread-70476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:37:29.430 [DEBUG] [Thread-70476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:37:29.430 [DEBUG] [Thread-70476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:37:29.430 [DEBUG] [Thread-70476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:37:29.430 [DEBUG] [Thread-70476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] client lang: <none>
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] server lang: <none>
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] kex follows: False
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] Compression: none
2025-12-12T13:37:29.431 [DEBUG] [Thread-70476] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:37:29.448 [DEBUG] [Thread-70476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:37:29.449 [DEBUG] [Thread-70476] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:37:29.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:37:29.450 [DEBUG] [Thread-70476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:37:29.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:37:29.492 [DEBUG] [Thread-70476] [transport.py] [_log()] userauth is OK
2025-12-12T13:37:29.492 [DEBUG] [Thread-70476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:37:29.492 [DEBUG] [Thread-70476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:37:29.493 [DEBUG] [Thread-70476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:37:29.493 [DEBUG] [Thread-70476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:37:29.526 [INFO] [Thread-70476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:37:29.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:37:30.292 [DEBUG] [Thread-70476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:37:30.292 [DEBUG] [Thread-70476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:37:30.292 [DEBUG] [Thread-70476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:37:30.333 [DEBUG] [Thread-70476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:37:30.333 [DEBUG] [Thread-70476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:37:30.335 [DEBUG] [Thread-70476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:37:30.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:37:30.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:37:30.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:37:30.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:37:30.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:37:30.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:37:30.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:37:30.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:37:30.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:37:30.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.483775 -999.00  +21.50  43.49     22   -0.90 1 1 2 1 1   888    0 22.24 0.04 ----- 43.7 43.5 343.0 52.1 25.9 -25.3 25.3 -25.9 25.6 -21.9 26.2 -23.0
2025-12-12T13:37:30.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:37:30.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:37:30.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.483775
2025-12-12T13:37:30.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:37:30.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:37:30.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:37:30.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:37:30.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:37:30.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:37:15', tmtdew=24.94, humidity=18.26, cloud=0.0, wind=41.27, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:36:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:37:30.353 [DEBUG] [Thread-70476] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:37:30.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:37:30.448 [DEBUG] [Thread-70479] [transport.py] [_log()] starting thread (client mode): 0xf5700580
2025-12-12T13:37:30.449 [DEBUG] [Thread-70479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:37:30.463 [DEBUG] [Thread-70479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:37:30.464 [INFO] [Thread-70479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:37:30.471 [DEBUG] [Thread-70479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:37:30.471 [DEBUG] [Thread-70479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:37:30.471 [DEBUG] [Thread-70479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:37:30.471 [DEBUG] [Thread-70479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] client lang: <none>
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] server lang: <none>
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] kex follows: False
2025-12-12T13:37:30.472 [DEBUG] [Thread-70479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:37:30.473 [DEBUG] [Thread-70479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:37:30.473 [DEBUG] [Thread-70479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:37:30.473 [DEBUG] [Thread-70479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:37:30.473 [DEBUG] [Thread-70479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:37:30.473 [DEBUG] [Thread-70479] [transport.py] [_log()] Compression: none
2025-12-12T13:37:30.473 [DEBUG] [Thread-70479] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:37:30.532 [DEBUG] [Thread-70479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:37:30.533 [DEBUG] [Thread-70479] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:37:30.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:37:30.533 [DEBUG] [Thread-70479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:37:30.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:37:30.590 [DEBUG] [Thread-70479] [transport.py] [_log()] userauth is OK
2025-12-12T13:37:30.590 [DEBUG] [Thread-70479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:37:30.590 [DEBUG] [Thread-70479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:37:30.590 [DEBUG] [Thread-70479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:37:30.590 [DEBUG] [Thread-70479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:37:30.609 [INFO] [Thread-70479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:37:30.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:37:30.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:37:31.472 [DEBUG] [Thread-70479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:37:31.472 [DEBUG] [Thread-70479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:37:31.520 [DEBUG] [Thread-70479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:37:31.521 [DEBUG] [Thread-70479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:37:31.529 [DEBUG] [Thread-70479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:37:31.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:37:31.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:37:31.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:37:31.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:37:31.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:37:31.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:37:31.563 [DEBUG] [Thread-70479] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:37:31.946 [DEBUG] [Thread-70481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:37:45.323 [DEBUG] [Thread-70482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:37:45.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:37:45.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:37:46.993 [DEBUG] [Thread-70483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:01.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:38:01.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:38:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:38:02.023 [DEBUG] [Thread-70484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 37, 47), 25.33, 18.03, 0.0, 44.48, 20.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:38:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:37:47
2025-12-12T13:38:02.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:38:02.540 [DEBUG] [Thread-70485] [transport.py] [_log()] starting thread (client mode): 0xf575d0c0
2025-12-12T13:38:02.540 [DEBUG] [Thread-70485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:38:02.559 [DEBUG] [Thread-70485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:38:02.559 [INFO] [Thread-70485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:38:02.562 [DEBUG] [Thread-70485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] client lang: <none>
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] server lang: <none>
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] kex follows: False
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:38:02.563 [DEBUG] [Thread-70485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:38:02.564 [DEBUG] [Thread-70485] [transport.py] [_log()] Compression: none
2025-12-12T13:38:02.564 [DEBUG] [Thread-70485] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:38:02.583 [DEBUG] [Thread-70485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:38:02.584 [DEBUG] [Thread-70485] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:38:02.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:38:02.586 [DEBUG] [Thread-70485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:38:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:38:02.589 [DEBUG] [Thread-70485] [transport.py] [_log()] userauth is OK
2025-12-12T13:38:02.589 [DEBUG] [Thread-70485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:38:02.590 [DEBUG] [Thread-70485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:38:02.590 [DEBUG] [Thread-70485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:38:02.590 [DEBUG] [Thread-70485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:38:02.615 [INFO] [Thread-70485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:38:02.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:38:03.223 [DEBUG] [Thread-70485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:38:03.223 [DEBUG] [Thread-70485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:38:03.224 [DEBUG] [Thread-70485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:38:03.264 [DEBUG] [Thread-70485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:38:03.264 [DEBUG] [Thread-70485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:38:03.267 [DEBUG] [Thread-70485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:38:03.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:38:03.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:38:03.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:38:03.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:38:03.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:38:03.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:38:03.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:38:03.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:38:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:38:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.484123 -999.00  +21.00  48.77     22   -0.80 1 1 2 1 1   888    0 21.53 -3.62 ----- 41.8 48.8 320.6 57.1 25.9 -26.1 25.3 -24.3 25.6 -22.3 26.2 -23.1
2025-12-12T13:38:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:38:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:38:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.484123
2025-12-12T13:38:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:38:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:38:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:38:03.291 [DEBUG] [Thread-70485] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:38:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:38:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:38:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:37:47', tmtdew=25.33, humidity=18.03, cloud=0.0, wind=44.48, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:37:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:38:03.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:38:03.388 [DEBUG] [Thread-70488] [transport.py] [_log()] starting thread (client mode): 0xf813cd30
2025-12-12T13:38:03.388 [DEBUG] [Thread-70488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:38:03.402 [DEBUG] [Thread-70488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:38:03.402 [INFO] [Thread-70488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:38:03.410 [DEBUG] [Thread-70488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:38:03.410 [DEBUG] [Thread-70488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:38:03.410 [DEBUG] [Thread-70488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:38:03.410 [DEBUG] [Thread-70488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:03.410 [DEBUG] [Thread-70488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:03.410 [DEBUG] [Thread-70488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] client lang: <none>
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] server lang: <none>
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] kex follows: False
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:38:03.411 [DEBUG] [Thread-70488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:38:03.412 [DEBUG] [Thread-70488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:38:03.412 [DEBUG] [Thread-70488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:38:03.412 [DEBUG] [Thread-70488] [transport.py] [_log()] Compression: none
2025-12-12T13:38:03.412 [DEBUG] [Thread-70488] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:38:03.473 [DEBUG] [Thread-70488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:38:03.474 [DEBUG] [Thread-70488] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:38:03.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:38:03.475 [DEBUG] [Thread-70488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:38:03.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:38:03.543 [DEBUG] [Thread-70488] [transport.py] [_log()] userauth is OK
2025-12-12T13:38:03.543 [DEBUG] [Thread-70488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:38:03.543 [DEBUG] [Thread-70488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:38:03.543 [DEBUG] [Thread-70488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:38:03.543 [DEBUG] [Thread-70488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:38:03.566 [INFO] [Thread-70488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:38:03.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:38:03.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:38:04.414 [DEBUG] [Thread-70488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:38:04.414 [DEBUG] [Thread-70488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:38:04.462 [DEBUG] [Thread-70488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:38:04.462 [DEBUG] [Thread-70488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:38:04.471 [DEBUG] [Thread-70488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:38:04.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:38:04.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:38:04.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:38:04.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:38:04.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:38:04.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:38:04.509 [DEBUG] [Thread-70488] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:38:17.050 [DEBUG] [Thread-70490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:32.091 [DEBUG] [Thread-70491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:34.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:38:34.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:38:34.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:38:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 38, 19), 25.62, 17.66, 0.0, 43.67, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:38:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:38:19
2025-12-12T13:38:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:38:35.482 [DEBUG] [Thread-70492] [transport.py] [_log()] starting thread (client mode): 0xf81e4610
2025-12-12T13:38:35.482 [DEBUG] [Thread-70492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:38:35.504 [DEBUG] [Thread-70492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:38:35.504 [INFO] [Thread-70492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:38:35.507 [DEBUG] [Thread-70492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:38:35.507 [DEBUG] [Thread-70492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:38:35.507 [DEBUG] [Thread-70492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:38:35.507 [DEBUG] [Thread-70492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] client lang: <none>
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] server lang: <none>
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] kex follows: False
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:38:35.508 [DEBUG] [Thread-70492] [transport.py] [_log()] Compression: none
2025-12-12T13:38:35.509 [DEBUG] [Thread-70492] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:38:35.525 [DEBUG] [Thread-70492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:38:35.526 [DEBUG] [Thread-70492] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:38:35.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:38:35.527 [DEBUG] [Thread-70492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:38:35.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:38:35.528 [DEBUG] [Thread-70492] [transport.py] [_log()] userauth is OK
2025-12-12T13:38:35.528 [DEBUG] [Thread-70492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:38:35.528 [DEBUG] [Thread-70492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:38:35.528 [DEBUG] [Thread-70492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:38:35.528 [DEBUG] [Thread-70492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:38:35.540 [INFO] [Thread-70492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:38:35.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:38:36.268 [DEBUG] [Thread-70492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:38:36.268 [DEBUG] [Thread-70492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:38:36.269 [DEBUG] [Thread-70492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:38:36.309 [DEBUG] [Thread-70492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:38:36.309 [DEBUG] [Thread-70492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:38:36.312 [DEBUG] [Thread-70492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:38:36.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:38:36.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:38:36.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:38:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:38:36.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:38:36.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:38:36.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:38:36.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:38:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:38:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.484470 -999.00  +20.70  58.57     22   -1.30 1 1 2 1 1   888    0 22.01 -8.15 ----- 56.6 58.6 327.0 70.3 25.9 -26.9 25.3 -25.2 25.6 -22.2 26.1 -24.8
2025-12-12T13:38:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:38:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:38:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.484470
2025-12-12T13:38:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:38:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:38:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:38:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:38:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:38:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:38:19', tmtdew=25.62, humidity=17.66, cloud=0.0, wind=43.67, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:37:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:38:36.337 [DEBUG] [Thread-70492] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:38:36.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:38:36.436 [DEBUG] [Thread-70495] [transport.py] [_log()] starting thread (client mode): 0xf574f520
2025-12-12T13:38:36.437 [DEBUG] [Thread-70495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:38:36.451 [DEBUG] [Thread-70495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:38:36.451 [INFO] [Thread-70495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:38:36.458 [DEBUG] [Thread-70495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] client lang: <none>
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] server lang: <none>
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] kex follows: False
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] Compression: none
2025-12-12T13:38:36.459 [DEBUG] [Thread-70495] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:38:36.516 [DEBUG] [Thread-70495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:38:36.517 [DEBUG] [Thread-70495] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:38:36.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:38:36.518 [DEBUG] [Thread-70495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:38:36.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:38:36.573 [DEBUG] [Thread-70495] [transport.py] [_log()] userauth is OK
2025-12-12T13:38:36.574 [DEBUG] [Thread-70495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:38:36.574 [DEBUG] [Thread-70495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:38:36.574 [DEBUG] [Thread-70495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:38:36.574 [DEBUG] [Thread-70495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:38:36.593 [INFO] [Thread-70495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:38:36.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:38:36.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:38:37.442 [DEBUG] [Thread-70495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:38:37.442 [DEBUG] [Thread-70495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:38:37.490 [DEBUG] [Thread-70495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:38:37.490 [DEBUG] [Thread-70495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:38:37.499 [DEBUG] [Thread-70495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:38:37.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:38:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:38:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:38:37.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:38:37.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:38:37.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:38:37.533 [DEBUG] [Thread-70495] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:38:45.360 [DEBUG] [Thread-70497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:45.561 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:45.562 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:38:47.121 [DEBUG] [Thread-70498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:02.166 [DEBUG] [Thread-70499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:39:07.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:39:07.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:39:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 38, 51), 25.8, 17.3, 0.0, 47.69, 21.0, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:39:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:38:51
2025-12-12T13:39:08.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:39:08.558 [DEBUG] [Thread-70500] [transport.py] [_log()] starting thread (client mode): 0xf574c8e0
2025-12-12T13:39:08.558 [DEBUG] [Thread-70500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:39:08.579 [DEBUG] [Thread-70500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:39:08.579 [INFO] [Thread-70500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] client lang: <none>
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] server lang: <none>
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] kex follows: False
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] Compression: none
2025-12-12T13:39:08.583 [DEBUG] [Thread-70500] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:39:08.598 [DEBUG] [Thread-70500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:39:08.598 [DEBUG] [Thread-70500] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:39:08.599 [DEBUG] [Thread-70500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:39:08.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:39:08.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:39:08.599 [DEBUG] [Thread-70500] [transport.py] [_log()] userauth is OK
2025-12-12T13:39:08.599 [DEBUG] [Thread-70500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:39:08.599 [DEBUG] [Thread-70500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:39:08.599 [DEBUG] [Thread-70500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:39:08.599 [DEBUG] [Thread-70500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:39:08.616 [INFO] [Thread-70500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:39:08.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:39:09.265 [DEBUG] [Thread-70500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:39:09.265 [DEBUG] [Thread-70500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:39:09.265 [DEBUG] [Thread-70500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:39:09.306 [DEBUG] [Thread-70500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:39:09.306 [DEBUG] [Thread-70500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:39:09.308 [DEBUG] [Thread-70500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:39:09.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:39:09.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:39:09.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:39:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:39:09.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:39:09.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:39:09.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.484817 -999.00  +20.10  42.99     23   -1.40 1 1 2 1 1   888    0 21.90 -15.95 ----- 46.3 43.0 336.0 72.3 25.6 -26.8 25.0 -27.0 25.4 -24.7 25.8 -23.1
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.484817
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:39:09.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:38:51', tmtdew=25.8, humidity=17.3, cloud=0.0, wind=47.69, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:38:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:39:09.327 [DEBUG] [Thread-70500] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:39:09.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:39:09.411 [DEBUG] [Thread-70503] [transport.py] [_log()] starting thread (client mode): 0xf574d780
2025-12-12T13:39:09.411 [DEBUG] [Thread-70503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:39:09.425 [DEBUG] [Thread-70503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:39:09.425 [INFO] [Thread-70503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] client lang: <none>
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] server lang: <none>
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] kex follows: False
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] Compression: none
2025-12-12T13:39:09.433 [DEBUG] [Thread-70503] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:39:09.491 [DEBUG] [Thread-70503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:39:09.492 [DEBUG] [Thread-70503] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:39:09.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:39:09.492 [DEBUG] [Thread-70503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:39:09.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:39:09.548 [DEBUG] [Thread-70503] [transport.py] [_log()] userauth is OK
2025-12-12T13:39:09.548 [DEBUG] [Thread-70503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:39:09.548 [DEBUG] [Thread-70503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:39:09.548 [DEBUG] [Thread-70503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:39:09.548 [DEBUG] [Thread-70503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:39:09.566 [INFO] [Thread-70503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:39:09.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:39:09.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:39:10.413 [DEBUG] [Thread-70503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:39:10.413 [DEBUG] [Thread-70503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:39:10.462 [DEBUG] [Thread-70503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:39:10.462 [DEBUG] [Thread-70503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:39:10.471 [DEBUG] [Thread-70503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:39:10.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:39:10.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:39: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') -> 00000000
2025-12-12T13:39:10.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:39:10.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:39:10.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:39:10.502 [DEBUG] [Thread-70503] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:39:17.200 [DEBUG] [Thread-70505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:32.244 [DEBUG] [Thread-70506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:40.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:39:40.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:39:40.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:39:41.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 39, 23), 26.08, 16.98, 0.0, 50.34, 21.11, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:39:41.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:39:23
2025-12-12T13:39:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:39:41.503 [DEBUG] [Thread-70507] [transport.py] [_log()] starting thread (client mode): 0xf574f9a0
2025-12-12T13:39:41.503 [DEBUG] [Thread-70507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:39:41.522 [DEBUG] [Thread-70507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:39:41.523 [INFO] [Thread-70507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:41.526 [DEBUG] [Thread-70507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] client lang: <none>
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] server lang: <none>
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] kex follows: False
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] Compression: none
2025-12-12T13:39:41.527 [DEBUG] [Thread-70507] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:39:41.547 [DEBUG] [Thread-70507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:39:41.548 [DEBUG] [Thread-70507] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:39:41.548 [DEBUG] [Thread-70507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:39:41.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:39:41.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:39:41.593 [DEBUG] [Thread-70507] [transport.py] [_log()] userauth is OK
2025-12-12T13:39:41.593 [DEBUG] [Thread-70507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:39:41.593 [DEBUG] [Thread-70507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:39:41.593 [DEBUG] [Thread-70507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:39:41.593 [DEBUG] [Thread-70507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:39:41.628 [INFO] [Thread-70507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:39:41.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:39:42.381 [DEBUG] [Thread-70507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:39:42.381 [DEBUG] [Thread-70507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:39:42.382 [DEBUG] [Thread-70507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:39:42.422 [DEBUG] [Thread-70507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:39:42.422 [DEBUG] [Thread-70507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:39:42.426 [DEBUG] [Thread-70507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:39:42.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:39:42.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:39:42.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:39:42.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:39:42.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:39:42.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:39:42.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:39:42.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:39:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:39:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.485511 -999.00  +21.30  44.90     21   -1.40 1 1 2 1 1   888    0 20.72 -31.39 ----- 51.5 44.9 327.6 64.1 25.6 -25.4 25.1 -25.9 25.4 -24.2 25.9 -24.1
2025-12-12T13:39:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:39:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:39:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.485511
2025-12-12T13:39:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:39:42.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:39:42.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:39:42.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:39:42.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:39:42.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:39:23', tmtdew=26.08, humidity=16.98, cloud=0.0, wind=50.34, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:39:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:39:42.452 [DEBUG] [Thread-70507] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:39:42.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:39:42.547 [DEBUG] [Thread-70510] [transport.py] [_log()] starting thread (client mode): 0xf574dc00
2025-12-12T13:39:42.547 [DEBUG] [Thread-70510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:39:42.562 [DEBUG] [Thread-70510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:39:42.562 [INFO] [Thread-70510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] client lang: <none>
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] server lang: <none>
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] kex follows: False
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:39:42.570 [DEBUG] [Thread-70510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:39:42.571 [DEBUG] [Thread-70510] [transport.py] [_log()] Compression: none
2025-12-12T13:39:42.571 [DEBUG] [Thread-70510] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:39:42.629 [DEBUG] [Thread-70510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:39:42.629 [DEBUG] [Thread-70510] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:39:42.630 [DEBUG] [Thread-70510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:39:42.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:39:42.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:39:42.685 [DEBUG] [Thread-70510] [transport.py] [_log()] userauth is OK
2025-12-12T13:39:42.685 [DEBUG] [Thread-70510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:39:42.685 [DEBUG] [Thread-70510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:39:42.685 [DEBUG] [Thread-70510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:39:42.685 [DEBUG] [Thread-70510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:39:42.707 [INFO] [Thread-70510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:39:42.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:39:42.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:39:43.535 [DEBUG] [Thread-70510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:39:43.535 [DEBUG] [Thread-70510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:39:43.584 [DEBUG] [Thread-70510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:39:43.584 [DEBUG] [Thread-70510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:39:43.593 [DEBUG] [Thread-70510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:39:43.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:39:43.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:39: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') -> 00000000
2025-12-12T13:39:43.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:39:43.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:39:43.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:39:43.626 [DEBUG] [Thread-70510] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:39:45.394 [DEBUG] [Thread-70512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:45.704 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:45.705 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:39:47.272 [DEBUG] [Thread-70513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:02.309 [DEBUG] [Thread-70514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:40:13.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:40:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:40:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 39, 55), 26.62, 15.98, 0.0, 52.76, 21.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:40:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:39:55
2025-12-12T13:40:14.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:40:14.604 [DEBUG] [Thread-70515] [transport.py] [_log()] starting thread (client mode): 0xf574c5e0
2025-12-12T13:40:14.604 [DEBUG] [Thread-70515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:40:14.624 [DEBUG] [Thread-70515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:40:14.624 [INFO] [Thread-70515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] client lang: <none>
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] server lang: <none>
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] kex follows: False
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] Compression: none
2025-12-12T13:40:14.627 [DEBUG] [Thread-70515] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:40:14.635 [DEBUG] [Thread-70515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:40:14.635 [DEBUG] [Thread-70515] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:40:14.636 [DEBUG] [Thread-70515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:40:14.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:40:14.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:40:14.637 [DEBUG] [Thread-70515] [transport.py] [_log()] userauth is OK
2025-12-12T13:40:14.637 [DEBUG] [Thread-70515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:40:14.637 [DEBUG] [Thread-70515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:40:14.637 [DEBUG] [Thread-70515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:40:14.637 [DEBUG] [Thread-70515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:40:14.649 [INFO] [Thread-70515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:40:14.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:40:15.253 [DEBUG] [Thread-70515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:40:15.253 [DEBUG] [Thread-70515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:40:15.254 [DEBUG] [Thread-70515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:40:15.295 [DEBUG] [Thread-70515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:40:15.295 [DEBUG] [Thread-70515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:40:15.298 [DEBUG] [Thread-70515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:40:15.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:40:15.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:40:15.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:40:15.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:40:15.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:40:15.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:40:15.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:40:15.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:40:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:40:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.485859 -999.00  +21.30  38.32     21   -1.50 1 1 2 1 1   888    0 21.61 -29.94 ----- 43.5 38.3 319.4 60.1 25.7 -25.6 25.1 -25.1 25.4 -22.3 26.0 -23.3
2025-12-12T13:40:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:40:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:40:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.485859
2025-12-12T13:40:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:40:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:40:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:40:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:40:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:40:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:39:55', tmtdew=26.62, humidity=15.98, cloud=0.0, wind=52.76, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:39:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:40:15.326 [DEBUG] [Thread-70515] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:40:15.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:40:15.422 [DEBUG] [Thread-70518] [transport.py] [_log()] starting thread (client mode): 0xf574e8f0
2025-12-12T13:40:15.422 [DEBUG] [Thread-70518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:40:15.438 [DEBUG] [Thread-70518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:40:15.438 [INFO] [Thread-70518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:15.446 [DEBUG] [Thread-70518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] client lang: <none>
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] server lang: <none>
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] kex follows: False
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:40:15.447 [DEBUG] [Thread-70518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:40:15.448 [DEBUG] [Thread-70518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:40:15.448 [DEBUG] [Thread-70518] [transport.py] [_log()] Compression: none
2025-12-12T13:40:15.448 [DEBUG] [Thread-70518] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:40:15.507 [DEBUG] [Thread-70518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:40:15.508 [DEBUG] [Thread-70518] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:40:15.508 [DEBUG] [Thread-70518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:40:15.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:40:15.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:40:15.565 [DEBUG] [Thread-70518] [transport.py] [_log()] userauth is OK
2025-12-12T13:40:15.565 [DEBUG] [Thread-70518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:40:15.565 [DEBUG] [Thread-70518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:40:15.565 [DEBUG] [Thread-70518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:40:15.565 [DEBUG] [Thread-70518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:40:15.583 [INFO] [Thread-70518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:40:15.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:40:15.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:40:16.406 [DEBUG] [Thread-70518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:40:16.406 [DEBUG] [Thread-70518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:40:16.454 [DEBUG] [Thread-70518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:40:16.454 [DEBUG] [Thread-70518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:40:16.462 [DEBUG] [Thread-70518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:40:16.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:40:16.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:40:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:40:16.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:40:16.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:40:16.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:40:16.496 [DEBUG] [Thread-70518] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:40:17.335 [DEBUG] [Thread-70520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:32.385 [DEBUG] [Thread-70521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:45.427 [DEBUG] [Thread-70522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:45.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:45.846 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:46.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:40:46.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:40:46.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:40:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 40, 27), 26.53, 16.06, 0.0, 55.86, 21.06, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:40:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:40:27
2025-12-12T13:40:47.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:40:47.412 [DEBUG] [Thread-70523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:40:47.460 [DEBUG] [Thread-70524] [transport.py] [_log()] starting thread (client mode): 0xf81e5f30
2025-12-12T13:40:47.460 [DEBUG] [Thread-70524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:40:47.482 [DEBUG] [Thread-70524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:40:47.482 [INFO] [Thread-70524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:40:47.485 [DEBUG] [Thread-70524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] client lang: <none>
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] server lang: <none>
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] kex follows: False
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:40:47.486 [DEBUG] [Thread-70524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:40:47.487 [DEBUG] [Thread-70524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:40:47.487 [DEBUG] [Thread-70524] [transport.py] [_log()] Compression: none
2025-12-12T13:40:47.487 [DEBUG] [Thread-70524] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:40:47.505 [DEBUG] [Thread-70524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:40:47.505 [DEBUG] [Thread-70524] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:40:47.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:40:47.506 [DEBUG] [Thread-70524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:40:47.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:40:47.508 [DEBUG] [Thread-70524] [transport.py] [_log()] userauth is OK
2025-12-12T13:40:47.508 [DEBUG] [Thread-70524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:40:47.509 [DEBUG] [Thread-70524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:40:47.509 [DEBUG] [Thread-70524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:40:47.509 [DEBUG] [Thread-70524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:40:47.544 [INFO] [Thread-70524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:40:47.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:40:48.187 [DEBUG] [Thread-70524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:40:48.187 [DEBUG] [Thread-70524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:40:48.187 [DEBUG] [Thread-70524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:40:48.228 [DEBUG] [Thread-70524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:40:48.228 [DEBUG] [Thread-70524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:40:48.231 [DEBUG] [Thread-70524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:40:48.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:40:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:40:48.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:40:48.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:40:48.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:40:48.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:40:48.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:40:48.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:40:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:40:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.486206 -999.00  +21.20  42.83     21   -1.30 1 1 2 1 1   888    0 21.70 -29.30 ----- 40.9 42.8 302.6 54.6 25.8 -26.2 25.2 -25.1 25.5 -22.6 26.1 -22.6
2025-12-12T13:40:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:40:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:40:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.486206
2025-12-12T13:40:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:40:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:40:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:40:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:40:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:40:48.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:40:27', tmtdew=26.53, humidity=16.06, cloud=0.0, wind=55.86, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:40:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:40:48.259 [DEBUG] [Thread-70524] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:40:48.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:40:48.356 [DEBUG] [Thread-70527] [transport.py] [_log()] starting thread (client mode): 0xf81e6b00
2025-12-12T13:40:48.356 [DEBUG] [Thread-70527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:40:48.376 [DEBUG] [Thread-70527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:40:48.376 [INFO] [Thread-70527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:40:48.383 [DEBUG] [Thread-70527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] client lang: <none>
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] server lang: <none>
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] kex follows: False
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:40:48.384 [DEBUG] [Thread-70527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:40:48.385 [DEBUG] [Thread-70527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:40:48.385 [DEBUG] [Thread-70527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:40:48.385 [DEBUG] [Thread-70527] [transport.py] [_log()] Compression: none
2025-12-12T13:40:48.385 [DEBUG] [Thread-70527] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:40:48.445 [DEBUG] [Thread-70527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:40:48.445 [DEBUG] [Thread-70527] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:40:48.446 [DEBUG] [Thread-70527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:40:48.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:40:48.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:40:48.501 [DEBUG] [Thread-70527] [transport.py] [_log()] userauth is OK
2025-12-12T13:40:48.502 [DEBUG] [Thread-70527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:40:48.502 [DEBUG] [Thread-70527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:40:48.502 [DEBUG] [Thread-70527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:40:48.502 [DEBUG] [Thread-70527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:40:48.521 [INFO] [Thread-70527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:40:48.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:40:48.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:40:49.396 [DEBUG] [Thread-70527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:40:49.396 [DEBUG] [Thread-70527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:40:49.444 [DEBUG] [Thread-70527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:40:49.444 [DEBUG] [Thread-70527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:40:49.453 [DEBUG] [Thread-70527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:40:49.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:40:49.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:40:49.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:40:49.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:40:49.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:40:49.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:40:49.488 [DEBUG] [Thread-70527] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:41:02.438 [DEBUG] [Thread-70529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:17.482 [DEBUG] [Thread-70530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:41:19.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:41:19.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 40, 59), 26.07, 16.7, 0.0, 47.35, 20.9, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:40:59
2025-12-12T13:41:20.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:41:20.459 [DEBUG] [Thread-70531] [transport.py] [_log()] starting thread (client mode): 0xf574e860
2025-12-12T13:41:20.459 [DEBUG] [Thread-70531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:41:20.480 [DEBUG] [Thread-70531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:41:20.480 [INFO] [Thread-70531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] client lang: <none>
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] server lang: <none>
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] kex follows: False
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:41:20.483 [DEBUG] [Thread-70531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:41:20.484 [DEBUG] [Thread-70531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:41:20.484 [DEBUG] [Thread-70531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:41:20.484 [DEBUG] [Thread-70531] [transport.py] [_log()] Compression: none
2025-12-12T13:41:20.484 [DEBUG] [Thread-70531] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:41:20.502 [DEBUG] [Thread-70531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:41:20.502 [DEBUG] [Thread-70531] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:41:20.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:41:20.503 [DEBUG] [Thread-70531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:41:20.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:41:20.505 [DEBUG] [Thread-70531] [transport.py] [_log()] userauth is OK
2025-12-12T13:41:20.505 [DEBUG] [Thread-70531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:41:20.505 [DEBUG] [Thread-70531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:41:20.505 [DEBUG] [Thread-70531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:41:20.505 [DEBUG] [Thread-70531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:41:20.529 [INFO] [Thread-70531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:41:20.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:41:21.249 [DEBUG] [Thread-70531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:41:21.249 [DEBUG] [Thread-70531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:41:21.249 [DEBUG] [Thread-70531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:41:21.290 [DEBUG] [Thread-70531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:41:21.290 [DEBUG] [Thread-70531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:41:21.293 [DEBUG] [Thread-70531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:41:21.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:41:21.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:41:21.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:41:21.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:41:21.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:41:21.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:41:21.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:41:21.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:41:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:41:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.486553 -999.00  +21.10  39.25     22   -1.00 1 1 2 1 1   888    0 21.86 -29.20 ----- 46.9 39.2 320.0 53.8 25.6 -25.0 25.1 -25.9 25.3 -22.9 25.9 -23.8
2025-12-12T13:41:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:41:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:41:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.486553
2025-12-12T13:41:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:41:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:41:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:41:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:41:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:41:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:40:59', tmtdew=26.07, humidity=16.7, cloud=0.0, wind=47.35, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:40:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:41:21.321 [DEBUG] [Thread-70531] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:41:21.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:41:21.419 [DEBUG] [Thread-70534] [transport.py] [_log()] starting thread (client mode): 0xf570db10
2025-12-12T13:41:21.419 [DEBUG] [Thread-70534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:41:21.434 [DEBUG] [Thread-70534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:41:21.434 [INFO] [Thread-70534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:41:21.441 [DEBUG] [Thread-70534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] client lang: <none>
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] server lang: <none>
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] kex follows: False
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] Compression: none
2025-12-12T13:41:21.442 [DEBUG] [Thread-70534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:41:21.502 [DEBUG] [Thread-70534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:41:21.502 [DEBUG] [Thread-70534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:41:21.503 [DEBUG] [Thread-70534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:41:21.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:41:21.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:41:21.557 [DEBUG] [Thread-70534] [transport.py] [_log()] userauth is OK
2025-12-12T13:41:21.557 [DEBUG] [Thread-70534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:41:21.558 [DEBUG] [Thread-70534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:41:21.558 [DEBUG] [Thread-70534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:41:21.558 [DEBUG] [Thread-70534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:41:21.581 [INFO] [Thread-70534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:41:21.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:41:21.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:41:22.412 [DEBUG] [Thread-70534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:41:22.413 [DEBUG] [Thread-70534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:41:22.461 [DEBUG] [Thread-70534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:41:22.461 [DEBUG] [Thread-70534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:41:22.470 [DEBUG] [Thread-70534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:41:22.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:41: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')
2025-12-12T13:41: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') -> 00000000
2025-12-12T13:41:22.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:41:22.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:41:22.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:41:22.504 [DEBUG] [Thread-70534] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:41:32.509 [DEBUG] [Thread-70536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:45.456 [DEBUG] [Thread-70537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:45.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:45.987 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:47.544 [DEBUG] [Thread-70538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:41:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:41:52.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:41:52.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:41:53.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 41, 31), 25.89, 16.91, 0.0, 45.89, 20.82, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:41:53.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:41:31
2025-12-12T13:41:53.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:41:53.486 [DEBUG] [Thread-70539] [transport.py] [_log()] starting thread (client mode): 0xf81e78e0
2025-12-12T13:41:53.486 [DEBUG] [Thread-70539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:41:53.507 [DEBUG] [Thread-70539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:41:53.507 [INFO] [Thread-70539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:41:53.510 [DEBUG] [Thread-70539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] client lang: <none>
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] server lang: <none>
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] kex follows: False
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:41:53.511 [DEBUG] [Thread-70539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:41:53.512 [DEBUG] [Thread-70539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:41:53.512 [DEBUG] [Thread-70539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:41:53.512 [DEBUG] [Thread-70539] [transport.py] [_log()] Compression: none
2025-12-12T13:41:53.512 [DEBUG] [Thread-70539] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:41:53.531 [DEBUG] [Thread-70539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:41:53.531 [DEBUG] [Thread-70539] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:41:53.532 [DEBUG] [Thread-70539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:41:53.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:41:53.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:41:53.534 [DEBUG] [Thread-70539] [transport.py] [_log()] userauth is OK
2025-12-12T13:41:53.534 [DEBUG] [Thread-70539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:41:53.534 [DEBUG] [Thread-70539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:41:53.535 [DEBUG] [Thread-70539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:41:53.535 [DEBUG] [Thread-70539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:41:53.559 [INFO] [Thread-70539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:41:53.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:41:54.173 [DEBUG] [Thread-70539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:41:54.173 [DEBUG] [Thread-70539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:41:54.173 [DEBUG] [Thread-70539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:41:54.214 [DEBUG] [Thread-70539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:41:54.214 [DEBUG] [Thread-70539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:41:54.216 [DEBUG] [Thread-70539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:41:54.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:41:54.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:41:54.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:41:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:41:54.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:41:54.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:41:54.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:41:54.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:41:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:41:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.486900 -999.00  +21.50  27.79     21   -1.10 1 1 1 1 1   888    0 21.39 -30.62 ----- 33.7 27.8 341.9 57.6 25.7 -25.2 25.1 -25.4 25.2 -25.4 26.0 -22.8
2025-12-12T13:41:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:41:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:41:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.486900
2025-12-12T13:41:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:41:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:41:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:41:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:41:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:41:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:41:31', tmtdew=25.89, humidity=16.91, cloud=0.0, wind=45.89, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:41:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:41:54.244 [DEBUG] [Thread-70539] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:41:54.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:41:54.342 [DEBUG] [Thread-70542] [transport.py] [_log()] starting thread (client mode): 0xf81e65f0
2025-12-12T13:41:54.342 [DEBUG] [Thread-70542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:41:54.357 [DEBUG] [Thread-70542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:41:54.357 [INFO] [Thread-70542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:41:54.364 [DEBUG] [Thread-70542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:41:54.364 [DEBUG] [Thread-70542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:41:54.365 [DEBUG] [Thread-70542] [transport.py] [_log()] client lang: <none>
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] server lang: <none>
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] kex follows: False
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] Compression: none
2025-12-12T13:41:54.366 [DEBUG] [Thread-70542] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:41:54.424 [DEBUG] [Thread-70542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:41:54.424 [DEBUG] [Thread-70542] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:41:54.425 [DEBUG] [Thread-70542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:41:54.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:41:54.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:41:54.480 [DEBUG] [Thread-70542] [transport.py] [_log()] userauth is OK
2025-12-12T13:41:54.481 [DEBUG] [Thread-70542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:41:54.481 [DEBUG] [Thread-70542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:41:54.481 [DEBUG] [Thread-70542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:41:54.481 [DEBUG] [Thread-70542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:41:54.500 [INFO] [Thread-70542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:41:54.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:41:54.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:41:55.321 [DEBUG] [Thread-70542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:41:55.321 [DEBUG] [Thread-70542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:41:55.369 [DEBUG] [Thread-70542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:41:55.369 [DEBUG] [Thread-70542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:41:55.378 [DEBUG] [Thread-70542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:41:55.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:41:55.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:41:55.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:41:55.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:41:55.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:41:55.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:41:55.414 [DEBUG] [Thread-70542] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:42:02.577 [DEBUG] [Thread-70544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:17.620 [DEBUG] [Thread-70545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:25.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:42:25.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:42:25.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:42:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 42, 3), 25.59, 17.28, 0.0, 42.06, 20.75, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:42:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:42:03
2025-12-12T13:42:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:42:26.449 [DEBUG] [Thread-70546] [transport.py] [_log()] starting thread (client mode): 0xf81e64d0
2025-12-12T13:42:26.449 [DEBUG] [Thread-70546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:42:26.469 [DEBUG] [Thread-70546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:42:26.469 [INFO] [Thread-70546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] client lang: <none>
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] server lang: <none>
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] kex follows: False
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] Compression: none
2025-12-12T13:42:26.472 [DEBUG] [Thread-70546] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:42:26.490 [DEBUG] [Thread-70546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:42:26.490 [DEBUG] [Thread-70546] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:42:26.490 [DEBUG] [Thread-70546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:42:26.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:42:26.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:42:26.491 [DEBUG] [Thread-70546] [transport.py] [_log()] userauth is OK
2025-12-12T13:42:26.491 [DEBUG] [Thread-70546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:42:26.491 [DEBUG] [Thread-70546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:42:26.491 [DEBUG] [Thread-70546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:42:26.491 [DEBUG] [Thread-70546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:42:26.509 [INFO] [Thread-70546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:42:26.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:42:27.267 [DEBUG] [Thread-70546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:42:27.268 [DEBUG] [Thread-70546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:42:27.268 [DEBUG] [Thread-70546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:42:27.309 [DEBUG] [Thread-70546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:42:27.309 [DEBUG] [Thread-70546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:42:27.312 [DEBUG] [Thread-70546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:42:27.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:42:27.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:42:27.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:42:27.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:42:27.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:42:27.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:42:27.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:42:27.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:42:27.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:42:27.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.487248 -999.00  +21.00  47.56     22   -1.10 1 1 2 1 1   888    0 21.57 -32.82 ----- 50.0 47.6 339.4 59.3 25.7 -26.0 25.0 -26.6 25.3 -23.0 25.9 -24.1
2025-12-12T13:42:27.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:42:27.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:42:27.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.487248
2025-12-12T13:42:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:42:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:42:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:42:27.333 [DEBUG] [Thread-70546] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:42:27.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:42:27.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:42:27.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:42:03', tmtdew=25.59, humidity=17.28, cloud=0.0, wind=42.06, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:41:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:42:27.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:42:27.434 [DEBUG] [Thread-70549] [transport.py] [_log()] starting thread (client mode): 0xf574da20
2025-12-12T13:42:27.434 [DEBUG] [Thread-70549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:42:27.449 [DEBUG] [Thread-70549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:42:27.449 [INFO] [Thread-70549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:42:27.456 [DEBUG] [Thread-70549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:42:27.456 [DEBUG] [Thread-70549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] client lang: <none>
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] server lang: <none>
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] kex follows: False
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] Compression: none
2025-12-12T13:42:27.457 [DEBUG] [Thread-70549] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:42:27.515 [DEBUG] [Thread-70549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:42:27.515 [DEBUG] [Thread-70549] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:42:27.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:42:27.516 [DEBUG] [Thread-70549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:42:27.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:42:27.571 [DEBUG] [Thread-70549] [transport.py] [_log()] userauth is OK
2025-12-12T13:42:27.572 [DEBUG] [Thread-70549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:42:27.572 [DEBUG] [Thread-70549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:42:27.572 [DEBUG] [Thread-70549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:42:27.572 [DEBUG] [Thread-70549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:42:27.590 [INFO] [Thread-70549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:42:27.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:42:27.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:42:28.446 [DEBUG] [Thread-70549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:42:28.446 [DEBUG] [Thread-70549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:42:28.494 [DEBUG] [Thread-70549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:42:28.494 [DEBUG] [Thread-70549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:42:28.511 [DEBUG] [Thread-70549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:42:28.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:42:28.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:42:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:42:28.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:42:28.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:42:28.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:42:28.550 [DEBUG] [Thread-70549] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:42:32.648 [DEBUG] [Thread-70551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:45.499 [DEBUG] [Thread-70552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:46.126 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:46.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:47.688 [DEBUG] [Thread-70553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:42:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:42:58.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:42:58.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:42:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 42, 35), 25.41, 17.86, 0.0, 41.23, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:42:59.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:42:35
2025-12-12T13:42:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:42:59.522 [DEBUG] [Thread-70554] [transport.py] [_log()] starting thread (client mode): 0xf81e78e0
2025-12-12T13:42:59.523 [DEBUG] [Thread-70554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:42:59.543 [DEBUG] [Thread-70554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:42:59.543 [INFO] [Thread-70554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:42:59.546 [DEBUG] [Thread-70554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:42:59.546 [DEBUG] [Thread-70554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:42:59.546 [DEBUG] [Thread-70554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:42:59.546 [DEBUG] [Thread-70554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] client lang: <none>
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] server lang: <none>
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] kex follows: False
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:42:59.547 [DEBUG] [Thread-70554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:42:59.548 [DEBUG] [Thread-70554] [transport.py] [_log()] Compression: none
2025-12-12T13:42:59.548 [DEBUG] [Thread-70554] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:42:59.565 [DEBUG] [Thread-70554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:42:59.566 [DEBUG] [Thread-70554] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:42:59.566 [DEBUG] [Thread-70554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:42:59.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:42:59.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:42:59.568 [DEBUG] [Thread-70554] [transport.py] [_log()] userauth is OK
2025-12-12T13:42:59.568 [DEBUG] [Thread-70554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:42:59.569 [DEBUG] [Thread-70554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:42:59.569 [DEBUG] [Thread-70554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:42:59.569 [DEBUG] [Thread-70554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:42:59.603 [INFO] [Thread-70554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:42:59.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:43:00.258 [DEBUG] [Thread-70554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:43:00.258 [DEBUG] [Thread-70554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:43:00.258 [DEBUG] [Thread-70554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:43:00.299 [DEBUG] [Thread-70554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:43:00.299 [DEBUG] [Thread-70554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:43:00.301 [DEBUG] [Thread-70554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:43:00.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:43:00.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:43:00.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:43:00.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:43:00.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:43:00.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:43:00.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:43:00.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.487595 -999.00  +20.60  44.79     23   -0.80 1 1 2 1 1   888    0 21.26 -39.46 ----- 43.7 44.8 329.2 72.5 25.6 -25.7 25.0 -27.1 25.4 -23.1 25.9 -23.2
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.487595
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:43:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:42:35', tmtdew=25.41, humidity=17.86, cloud=0.0, wind=41.23, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:42:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:43:00.320 [DEBUG] [Thread-70554] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:43:00.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:43:00.406 [DEBUG] [Thread-70557] [transport.py] [_log()] starting thread (client mode): 0xf813dab0
2025-12-12T13:43:00.406 [DEBUG] [Thread-70557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:43:00.421 [DEBUG] [Thread-70557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:43:00.421 [INFO] [Thread-70557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] client lang: <none>
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] server lang: <none>
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] kex follows: False
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] Compression: none
2025-12-12T13:43:00.428 [DEBUG] [Thread-70557] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:43:00.485 [DEBUG] [Thread-70557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:43:00.485 [DEBUG] [Thread-70557] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:43:00.485 [DEBUG] [Thread-70557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:43:00.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:43:00.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:43:00.542 [DEBUG] [Thread-70557] [transport.py] [_log()] userauth is OK
2025-12-12T13:43:00.542 [DEBUG] [Thread-70557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:43:00.543 [DEBUG] [Thread-70557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:43:00.543 [DEBUG] [Thread-70557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:43:00.543 [DEBUG] [Thread-70557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:43:00.556 [INFO] [Thread-70557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:43:00.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:43:00.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:43:01.424 [DEBUG] [Thread-70557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:43:01.424 [DEBUG] [Thread-70557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:43:01.471 [DEBUG] [Thread-70557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:43:01.471 [DEBUG] [Thread-70557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:43:01.479 [DEBUG] [Thread-70557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:43:01.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:43:01.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:43:01.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:43:01.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:43:01.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:43:01.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:43:01.510 [DEBUG] [Thread-70557] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:43:02.718 [DEBUG] [Thread-70559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:43:17.752 [DEBUG] [Thread-70560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:43:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:43:31.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:43:31.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:43:32.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 43, 7), 25.75, 17.46, 0.0, 48.4, 21.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:43:32.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:43:07
2025-12-12T13:43:32.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:43:32.503 [DEBUG] [Thread-70561] [transport.py] [_log()] starting thread (client mode): 0xf813c400
2025-12-12T13:43:32.503 [DEBUG] [Thread-70561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:43:32.522 [DEBUG] [Thread-70561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:43:32.522 [INFO] [Thread-70561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:43:32.525 [DEBUG] [Thread-70561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] client lang: <none>
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] server lang: <none>
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] kex follows: False
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:43:32.526 [DEBUG] [Thread-70561] [transport.py] [_log()] Compression: none
2025-12-12T13:43:32.527 [DEBUG] [Thread-70561] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:43:32.544 [DEBUG] [Thread-70561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:43:32.545 [DEBUG] [Thread-70561] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:43:32.545 [DEBUG] [Thread-70561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:43:32.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:43:32.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:43:32.547 [DEBUG] [Thread-70561] [transport.py] [_log()] userauth is OK
2025-12-12T13:43:32.547 [DEBUG] [Thread-70561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:43:32.547 [DEBUG] [Thread-70561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:43:32.547 [DEBUG] [Thread-70561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:43:32.548 [DEBUG] [Thread-70561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:43:32.561 [INFO] [Thread-70561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:43:32.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:43:32.779 [DEBUG] [Thread-70563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:43:33.289 [DEBUG] [Thread-70561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:43:33.289 [DEBUG] [Thread-70561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:43:33.289 [DEBUG] [Thread-70561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:43:33.330 [DEBUG] [Thread-70561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:43:33.330 [DEBUG] [Thread-70561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:43:33.333 [DEBUG] [Thread-70561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:43:33.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:43:33.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:43:33.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:43:33.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:43:33.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:43:33.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:43:33.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:43:33.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:43:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:43:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.487942 -999.00  +20.70  44.16     23   -0.60 1 1 2 1 1   888    0 21.01 -45.32 ----- 39.9 44.2 331.0 61.0 25.6 -25.3 25.0 -25.5 25.4 -22.7 25.9 -23.3
2025-12-12T13:43:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:43:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:43:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.487942
2025-12-12T13:43:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:43:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:43:33.348 [DEBUG] [Thread-70561] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:43:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:43:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:43:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:43:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:43:07', tmtdew=25.75, humidity=17.46, cloud=0.0, wind=48.4, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:42:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:43:33.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:43:33.443 [DEBUG] [Thread-70565] [transport.py] [_log()] starting thread (client mode): 0xf81e6d10
2025-12-12T13:43:33.443 [DEBUG] [Thread-70565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:43:33.458 [DEBUG] [Thread-70565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:43:33.458 [INFO] [Thread-70565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:43:33.466 [DEBUG] [Thread-70565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:43:33.466 [DEBUG] [Thread-70565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:43:33.466 [DEBUG] [Thread-70565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:43:33.466 [DEBUG] [Thread-70565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:43:33.466 [DEBUG] [Thread-70565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] client lang: <none>
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] server lang: <none>
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] kex follows: False
2025-12-12T13:43:33.467 [DEBUG] [Thread-70565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:43:33.468 [DEBUG] [Thread-70565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:43:33.468 [DEBUG] [Thread-70565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:43:33.468 [DEBUG] [Thread-70565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:43:33.468 [DEBUG] [Thread-70565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:43:33.468 [DEBUG] [Thread-70565] [transport.py] [_log()] Compression: none
2025-12-12T13:43:33.468 [DEBUG] [Thread-70565] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:43:33.523 [DEBUG] [Thread-70565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:43:33.523 [DEBUG] [Thread-70565] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:43:33.524 [DEBUG] [Thread-70565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:43:33.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:43:33.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:43:33.578 [DEBUG] [Thread-70565] [transport.py] [_log()] userauth is OK
2025-12-12T13:43:33.578 [DEBUG] [Thread-70565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:43:33.579 [DEBUG] [Thread-70565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:43:33.579 [DEBUG] [Thread-70565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:43:33.579 [DEBUG] [Thread-70565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:43:33.601 [INFO] [Thread-70565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:43:33.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:43:33.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:43:34.437 [DEBUG] [Thread-70565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:43:34.437 [DEBUG] [Thread-70565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:43:34.485 [DEBUG] [Thread-70565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:43:34.485 [DEBUG] [Thread-70565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:43:34.494 [DEBUG] [Thread-70565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:43:34.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:43:34.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:43:34.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:43:34.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:43:34.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:43:34.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:43:34.529 [DEBUG] [Thread-70565] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:43:45.532 [DEBUG] [Thread-70567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:43:46.269 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:43:46.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:43:47.811 [DEBUG] [Thread-70568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:02.860 [DEBUG] [Thread-70569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:44:04.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:44:04.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:44:05.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 43, 39), 25.65, 17.48, 0.0, 50.85, 21.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:44:05.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:43:39
2025-12-12T13:44:05.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:44:05.486 [DEBUG] [Thread-70570] [transport.py] [_log()] starting thread (client mode): 0xf5700430
2025-12-12T13:44:05.487 [DEBUG] [Thread-70570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:44:05.507 [DEBUG] [Thread-70570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:44:05.507 [INFO] [Thread-70570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:44:05.510 [DEBUG] [Thread-70570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:44:05.510 [DEBUG] [Thread-70570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:44:05.510 [DEBUG] [Thread-70570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] client lang: <none>
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] server lang: <none>
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] kex follows: False
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] Compression: none
2025-12-12T13:44:05.511 [DEBUG] [Thread-70570] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:44:05.526 [DEBUG] [Thread-70570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:44:05.526 [DEBUG] [Thread-70570] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:44:05.527 [DEBUG] [Thread-70570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:44:05.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:44:05.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:44:05.527 [DEBUG] [Thread-70570] [transport.py] [_log()] userauth is OK
2025-12-12T13:44:05.527 [DEBUG] [Thread-70570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:44:05.527 [DEBUG] [Thread-70570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:44:05.527 [DEBUG] [Thread-70570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:44:05.527 [DEBUG] [Thread-70570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:44:05.537 [INFO] [Thread-70570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:44:05.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:44:06.143 [DEBUG] [Thread-70570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:44:06.143 [DEBUG] [Thread-70570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:44:06.144 [DEBUG] [Thread-70570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:44:06.184 [DEBUG] [Thread-70570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:44:06.184 [DEBUG] [Thread-70570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:44:06.188 [DEBUG] [Thread-70570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:44:06.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:44:06.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:44:06.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:44:06.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:44:06.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:44:06.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:44:06.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:44:06.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:44:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:44:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.488289 -999.00  +21.80  41.49     22   -0.50 1 2 2 1 1   888    0 20.87 -47.44 ----- 32.7 41.5 338.0 48.2 25.8 -24.2 25.1 -24.4 25.4 -21.3 26.1 -22.1
2025-12-12T13:44:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:44:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:44:06.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.488289
2025-12-12T13:44:06.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:44:06.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:44:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:44:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:44:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T13:44:06.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:43:39', tmtdew=25.65, humidity=17.48, cloud=0.0, wind=50.85, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:43:08.170', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:44:06.214 [DEBUG] [Thread-70570] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:44:06.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:44:06.311 [DEBUG] [Thread-70573] [transport.py] [_log()] starting thread (client mode): 0xf813ef80
2025-12-12T13:44:06.311 [DEBUG] [Thread-70573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:44:06.326 [DEBUG] [Thread-70573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:44:06.326 [INFO] [Thread-70573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] client lang: <none>
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] server lang: <none>
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] kex follows: False
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:44:06.334 [DEBUG] [Thread-70573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:44:06.335 [DEBUG] [Thread-70573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:44:06.335 [DEBUG] [Thread-70573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:44:06.335 [DEBUG] [Thread-70573] [transport.py] [_log()] Compression: none
2025-12-12T13:44:06.335 [DEBUG] [Thread-70573] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:44:06.389 [DEBUG] [Thread-70573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:44:06.390 [DEBUG] [Thread-70573] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:44:06.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:44:06.390 [DEBUG] [Thread-70573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:44:06.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:44:06.447 [DEBUG] [Thread-70573] [transport.py] [_log()] userauth is OK
2025-12-12T13:44:06.448 [DEBUG] [Thread-70573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:44:06.448 [DEBUG] [Thread-70573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:44:06.448 [DEBUG] [Thread-70573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:44:06.448 [DEBUG] [Thread-70573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:44:06.467 [INFO] [Thread-70573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:44:06.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:44:06.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:44:07.309 [DEBUG] [Thread-70573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:44:07.309 [DEBUG] [Thread-70573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:44:07.357 [DEBUG] [Thread-70573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:44:07.357 [DEBUG] [Thread-70573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:44:07.366 [DEBUG] [Thread-70573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:44:07.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:44:07.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:44:07.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:44:07.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:44:07.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:44:07.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:44:07.400 [DEBUG] [Thread-70573] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:44:17.892 [DEBUG] [Thread-70575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:32.924 [DEBUG] [Thread-70576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:44:37.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:44:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:44:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 44, 11), 25.57, 17.58, 0.0, 59.28, 21.43, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:44:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:44:11
2025-12-12T13:44:38.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:44:38.398 [DEBUG] [Thread-70577] [transport.py] [_log()] starting thread (client mode): 0xf81e5b70
2025-12-12T13:44:38.398 [DEBUG] [Thread-70577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:44:38.419 [DEBUG] [Thread-70577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:44:38.419 [INFO] [Thread-70577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] client lang: <none>
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] server lang: <none>
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] kex follows: False
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:44:38.423 [DEBUG] [Thread-70577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:44:38.424 [DEBUG] [Thread-70577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:44:38.424 [DEBUG] [Thread-70577] [transport.py] [_log()] Compression: none
2025-12-12T13:44:38.424 [DEBUG] [Thread-70577] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:44:38.440 [DEBUG] [Thread-70577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:44:38.441 [DEBUG] [Thread-70577] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:44:38.441 [DEBUG] [Thread-70577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:44:38.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:44:38.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:44:38.443 [DEBUG] [Thread-70577] [transport.py] [_log()] userauth is OK
2025-12-12T13:44:38.443 [DEBUG] [Thread-70577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:44:38.443 [DEBUG] [Thread-70577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:44:38.444 [DEBUG] [Thread-70577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:44:38.444 [DEBUG] [Thread-70577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:44:38.459 [INFO] [Thread-70577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:44:38.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:44:39.241 [DEBUG] [Thread-70577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:44:39.242 [DEBUG] [Thread-70577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:44:39.242 [DEBUG] [Thread-70577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:44:39.283 [DEBUG] [Thread-70577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:44:39.283 [DEBUG] [Thread-70577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:44:39.286 [DEBUG] [Thread-70577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:44:39.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:44:39.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:44:39.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:44:39.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:44:39.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:44:39.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:44:39.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:44:39.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:44:39.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:44:39.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.488636 -999.00  +22.00  43.68     22   -0.50 1 2 2 1 1   888    0 20.46 -43.69 ----- 48.6 43.7 320.0 52.7 25.9 -25.2 25.3 -24.3 25.6 -21.6 26.3 -22.4
2025-12-12T13:44:39.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:44:39.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:44:39.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.488636
2025-12-12T13:44:39.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:44:39.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:44:39.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:44:39.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:44:39.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T13:44:39.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:44:11', tmtdew=25.57, humidity=17.58, cloud=0.0, wind=59.28, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:43:38.150', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:44:39.310 [DEBUG] [Thread-70577] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:44:39.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:44:39.407 [DEBUG] [Thread-70580] [transport.py] [_log()] starting thread (client mode): 0xf81e60b0
2025-12-12T13:44:39.407 [DEBUG] [Thread-70580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:44:39.422 [DEBUG] [Thread-70580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:44:39.422 [INFO] [Thread-70580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:44:39.430 [DEBUG] [Thread-70580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:44:39.430 [DEBUG] [Thread-70580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:44:39.430 [DEBUG] [Thread-70580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:44:39.430 [DEBUG] [Thread-70580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:39.430 [DEBUG] [Thread-70580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:44:39.430 [DEBUG] [Thread-70580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] client lang: <none>
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] server lang: <none>
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] kex follows: False
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] Compression: none
2025-12-12T13:44:39.431 [DEBUG] [Thread-70580] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:44:39.489 [DEBUG] [Thread-70580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:44:39.489 [DEBUG] [Thread-70580] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:44:39.490 [DEBUG] [Thread-70580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:44:39.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:44:39.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:44:39.545 [DEBUG] [Thread-70580] [transport.py] [_log()] userauth is OK
2025-12-12T13:44:39.545 [DEBUG] [Thread-70580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:44:39.546 [DEBUG] [Thread-70580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:44:39.546 [DEBUG] [Thread-70580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:44:39.546 [DEBUG] [Thread-70580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:44:39.565 [INFO] [Thread-70580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:44:39.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:44:39.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:44:40.443 [DEBUG] [Thread-70580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:44:40.443 [DEBUG] [Thread-70580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:44:40.491 [DEBUG] [Thread-70580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:44:40.491 [DEBUG] [Thread-70580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:44:40.500 [DEBUG] [Thread-70580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:44:40.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:44:40.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:44:40.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:44:40.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:44:40.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:44:40.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:44:40.535 [DEBUG] [Thread-70580] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:44:45.563 [DEBUG] [Thread-70582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:46.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:46.411 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:44:47.955 [DEBUG] [Thread-70583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:03.003 [DEBUG] [Thread-70584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:10.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:45:10.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:45:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:45:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 44, 44), 25.28, 17.89, 0.0, 42.77, 21.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:45:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:44:44
2025-12-12T13:45:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:45:11.528 [DEBUG] [Thread-70585] [transport.py] [_log()] starting thread (client mode): 0xf5700610
2025-12-12T13:45:11.528 [DEBUG] [Thread-70585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:45:11.548 [DEBUG] [Thread-70585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:45:11.548 [INFO] [Thread-70585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:45:11.551 [DEBUG] [Thread-70585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:45:11.551 [DEBUG] [Thread-70585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:45:11.551 [DEBUG] [Thread-70585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:45:11.551 [DEBUG] [Thread-70585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:11.551 [DEBUG] [Thread-70585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] client lang: <none>
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] server lang: <none>
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] kex follows: False
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] Compression: none
2025-12-12T13:45:11.552 [DEBUG] [Thread-70585] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:45:11.570 [DEBUG] [Thread-70585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:45:11.571 [DEBUG] [Thread-70585] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:45:11.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:45:11.572 [DEBUG] [Thread-70585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:45:11.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:45:11.574 [DEBUG] [Thread-70585] [transport.py] [_log()] userauth is OK
2025-12-12T13:45:11.574 [DEBUG] [Thread-70585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:45:11.574 [DEBUG] [Thread-70585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:45:11.574 [DEBUG] [Thread-70585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:45:11.574 [DEBUG] [Thread-70585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:45:11.597 [INFO] [Thread-70585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:45:11.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:45:12.532 [DEBUG] [Thread-70585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:45:12.532 [DEBUG] [Thread-70585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:45:12.533 [DEBUG] [Thread-70585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:45:12.573 [DEBUG] [Thread-70585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:45:12.573 [DEBUG] [Thread-70585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:45:12.576 [DEBUG] [Thread-70585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:45:12.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:45:12.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:45:12.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:45:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:45:12.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:45:12.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:45:12.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:45:12.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:45:12.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:45:12.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.489331 -999.00  +21.20  49.91     23   -0.40 1 1 2 1 1   888    0 21.02 -46.76 ----- 35.8 49.9 333.2 67.5 25.9 -25.7 25.2 -27.2 25.7 -23.9 26.2 -24.5
2025-12-12T13:45:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:45:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:45:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.489331
2025-12-12T13:45:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:45:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:45:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:45:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:45:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:45:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:44:44', tmtdew=25.28, humidity=17.89, cloud=0.0, wind=42.77, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:44:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:45:12.599 [DEBUG] [Thread-70585] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:45:12.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:45:12.696 [DEBUG] [Thread-70588] [transport.py] [_log()] starting thread (client mode): 0xf5702d40
2025-12-12T13:45:12.696 [DEBUG] [Thread-70588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:45:12.710 [DEBUG] [Thread-70588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:45:12.710 [INFO] [Thread-70588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] client lang: <none>
2025-12-12T13:45:12.718 [DEBUG] [Thread-70588] [transport.py] [_log()] server lang: <none>
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] kex follows: False
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] Compression: none
2025-12-12T13:45:12.719 [DEBUG] [Thread-70588] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:45:12.776 [DEBUG] [Thread-70588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:45:12.776 [DEBUG] [Thread-70588] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:45:12.777 [DEBUG] [Thread-70588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:45:12.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:45:12.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:45:12.832 [DEBUG] [Thread-70588] [transport.py] [_log()] userauth is OK
2025-12-12T13:45:12.833 [DEBUG] [Thread-70588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:45:12.833 [DEBUG] [Thread-70588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:45:12.833 [DEBUG] [Thread-70588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:45:12.833 [DEBUG] [Thread-70588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:45:12.853 [INFO] [Thread-70588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:45:12.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:45:12.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:45:13.697 [DEBUG] [Thread-70588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:45:13.697 [DEBUG] [Thread-70588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:45:13.745 [DEBUG] [Thread-70588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:45:13.745 [DEBUG] [Thread-70588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:45:13.754 [DEBUG] [Thread-70588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:45:13.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:45:13.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:45:13.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:45:13.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:45:13.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:45:13.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:45:13.788 [DEBUG] [Thread-70588] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:45:18.031 [DEBUG] [Thread-70590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:33.077 [DEBUG] [Thread-70591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:45:43.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:45:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:45:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 45, 16), 25.27, 17.89, 0.0, 45.98, 21.21, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:45:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:45:16
2025-12-12T13:45:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:45:44.744 [DEBUG] [Thread-70592] [transport.py] [_log()] starting thread (client mode): 0xf5700130
2025-12-12T13:45:44.744 [DEBUG] [Thread-70592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:45:44.767 [DEBUG] [Thread-70592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:45:44.767 [INFO] [Thread-70592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] client lang: <none>
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] server lang: <none>
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] kex follows: False
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] Compression: none
2025-12-12T13:45:44.770 [DEBUG] [Thread-70592] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:45:44.786 [DEBUG] [Thread-70592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:45:44.787 [DEBUG] [Thread-70592] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:45:44.787 [DEBUG] [Thread-70592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:45:44.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:45:44.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:45:44.789 [DEBUG] [Thread-70592] [transport.py] [_log()] userauth is OK
2025-12-12T13:45:44.790 [DEBUG] [Thread-70592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:45:44.790 [DEBUG] [Thread-70592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:45:44.790 [DEBUG] [Thread-70592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:45:44.790 [DEBUG] [Thread-70592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:45:44.813 [INFO] [Thread-70592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:45:44.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:45:45.454 [DEBUG] [Thread-70592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:45:45.455 [DEBUG] [Thread-70592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:45:45.455 [DEBUG] [Thread-70592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:45:45.496 [DEBUG] [Thread-70592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:45:45.497 [DEBUG] [Thread-70592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:45:45.499 [DEBUG] [Thread-70592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:45:45.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:45:45.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:45:45.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:45:45.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:45:45.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:45:45.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:45:45.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:45:45.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:45:45.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:45:45.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.489678 -999.00  +21.30  45.17     23   -0.30 1 1 2 1 1   888    0 21.39 -45.52 ----- 41.0 45.2 328.8 77.0 25.9 -25.5 25.2 -24.7 25.7 -22.3 26.2 -22.7
2025-12-12T13:45:45.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:45:45.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:45:45.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.489678
2025-12-12T13:45:45.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:45:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:45:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:45:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:45:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:45:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:45:16', tmtdew=25.27, humidity=17.89, cloud=0.0, wind=45.98, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:45:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:45:45.525 [DEBUG] [Thread-70592] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:45:45.590 [DEBUG] [Thread-70595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:45.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:45:45.623 [DEBUG] [Thread-70596] [transport.py] [_log()] starting thread (client mode): 0xf570fd90
2025-12-12T13:45:45.623 [DEBUG] [Thread-70596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:45:45.637 [DEBUG] [Thread-70596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:45:45.638 [INFO] [Thread-70596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] client lang: <none>
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] server lang: <none>
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] kex follows: False
2025-12-12T13:45:45.645 [DEBUG] [Thread-70596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:45:45.646 [DEBUG] [Thread-70596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:45:45.646 [DEBUG] [Thread-70596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:45:45.646 [DEBUG] [Thread-70596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:45:45.646 [DEBUG] [Thread-70596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:45:45.646 [DEBUG] [Thread-70596] [transport.py] [_log()] Compression: none
2025-12-12T13:45:45.646 [DEBUG] [Thread-70596] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:45:45.704 [DEBUG] [Thread-70596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:45:45.704 [DEBUG] [Thread-70596] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:45:45.705 [DEBUG] [Thread-70596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:45:45.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:45:45.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:45:45.760 [DEBUG] [Thread-70596] [transport.py] [_log()] userauth is OK
2025-12-12T13:45:45.760 [DEBUG] [Thread-70596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:45:45.760 [DEBUG] [Thread-70596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:45:45.761 [DEBUG] [Thread-70596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:45:45.761 [DEBUG] [Thread-70596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:45:45.779 [INFO] [Thread-70596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:45:45.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:45:45.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:45:46.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:46.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:45:46.615 [DEBUG] [Thread-70596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:45:46.615 [DEBUG] [Thread-70596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:45:46.663 [DEBUG] [Thread-70596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:45:46.663 [DEBUG] [Thread-70596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:45:46.672 [DEBUG] [Thread-70596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:45:46.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:45:46.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:45:46.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
2025-12-12T13:45:46.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:45:46.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:45:46.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:45:46.706 [DEBUG] [Thread-70596] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:45:48.107 [DEBUG] [Thread-70598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:03.151 [DEBUG] [Thread-70599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:16.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:46:16.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:46:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:46:17.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 45, 48), 25.33, 17.59, 0.0, 51.45, 20.91, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:46:17.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:45:48
2025-12-12T13:46:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:46:17.739 [DEBUG] [Thread-70600] [transport.py] [_log()] starting thread (client mode): 0xf81e47f0
2025-12-12T13:46:17.739 [DEBUG] [Thread-70600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:46:17.759 [DEBUG] [Thread-70600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:46:17.759 [INFO] [Thread-70600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] client lang: <none>
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] server lang: <none>
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] kex follows: False
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] Compression: none
2025-12-12T13:46:17.763 [DEBUG] [Thread-70600] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:46:17.777 [DEBUG] [Thread-70600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:46:17.777 [DEBUG] [Thread-70600] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:46:17.778 [DEBUG] [Thread-70600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:46:17.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:46:17.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:46:17.820 [DEBUG] [Thread-70600] [transport.py] [_log()] userauth is OK
2025-12-12T13:46:17.820 [DEBUG] [Thread-70600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:46:17.820 [DEBUG] [Thread-70600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:46:17.820 [DEBUG] [Thread-70600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:46:17.820 [DEBUG] [Thread-70600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:46:17.835 [INFO] [Thread-70600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:46:17.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:46:18.178 [DEBUG] [Thread-70602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:18.471 [DEBUG] [Thread-70600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:46:18.471 [DEBUG] [Thread-70600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:46:18.471 [DEBUG] [Thread-70600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:46:18.513 [DEBUG] [Thread-70600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:46:18.513 [DEBUG] [Thread-70600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:46:18.515 [DEBUG] [Thread-70600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:46:18.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:46:18.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:46:18.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:46:18.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:46:18.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:46:18.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:46:18.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.490025 -999.00  +22.20  39.15     21   -0.60 1 1 2 1 1   888    0 20.84 -37.06 ----- 48.1 39.1 335.0 45.6 26.1 -24.5 25.4 -24.1 25.7 -22.1 26.4 -22.2
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.490025
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:46:18.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:46:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:46:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:46:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:45:48', tmtdew=25.33, humidity=17.59, cloud=0.0, wind=51.45, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:45:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:46:18.535 [DEBUG] [Thread-70600] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:46:18.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:46:18.621 [DEBUG] [Thread-70604] [transport.py] [_log()] starting thread (client mode): 0xf813d1e0
2025-12-12T13:46:18.621 [DEBUG] [Thread-70604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:46:18.636 [DEBUG] [Thread-70604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:46:18.636 [INFO] [Thread-70604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:46:18.643 [DEBUG] [Thread-70604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:46:18.643 [DEBUG] [Thread-70604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:46:18.643 [DEBUG] [Thread-70604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:46:18.643 [DEBUG] [Thread-70604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:18.643 [DEBUG] [Thread-70604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] client lang: <none>
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] server lang: <none>
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] kex follows: False
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] Compression: none
2025-12-12T13:46:18.644 [DEBUG] [Thread-70604] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:46:18.698 [DEBUG] [Thread-70604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:46:18.698 [DEBUG] [Thread-70604] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:46:18.699 [DEBUG] [Thread-70604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:46:18.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:46:18.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:46:18.755 [DEBUG] [Thread-70604] [transport.py] [_log()] userauth is OK
2025-12-12T13:46:18.755 [DEBUG] [Thread-70604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:46:18.756 [DEBUG] [Thread-70604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:46:18.756 [DEBUG] [Thread-70604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:46:18.756 [DEBUG] [Thread-70604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:46:18.773 [INFO] [Thread-70604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:46:18.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:46:18.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:46:19.627 [DEBUG] [Thread-70604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:46:19.627 [DEBUG] [Thread-70604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:46:19.676 [DEBUG] [Thread-70604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:46:19.676 [DEBUG] [Thread-70604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:46:19.684 [DEBUG] [Thread-70604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:46:19.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:46:19.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:46:19.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:46:19.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:46:19.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:46:19.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:46:19.716 [DEBUG] [Thread-70604] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:46:33.206 [DEBUG] [Thread-70606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:45.630 [DEBUG] [Thread-70607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:46.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:46.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:48.250 [DEBUG] [Thread-70608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:46:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:46:49.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:46:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:46:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 46, 20), 25.46, 17.43, 0.0, 53.81, 20.91, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:46:50.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:46:20
2025-12-12T13:46:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:46:50.696 [DEBUG] [Thread-70609] [transport.py] [_log()] starting thread (client mode): 0xf81c31f0
2025-12-12T13:46:50.696 [DEBUG] [Thread-70609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:46:50.717 [DEBUG] [Thread-70609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:46:50.717 [INFO] [Thread-70609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] client lang: <none>
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] server lang: <none>
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] kex follows: False
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] Compression: none
2025-12-12T13:46:50.720 [DEBUG] [Thread-70609] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:46:50.736 [DEBUG] [Thread-70609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:46:50.737 [DEBUG] [Thread-70609] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:46:50.737 [DEBUG] [Thread-70609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:46:50.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:46:50.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:46:50.738 [DEBUG] [Thread-70609] [transport.py] [_log()] userauth is OK
2025-12-12T13:46:50.738 [DEBUG] [Thread-70609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:46:50.738 [DEBUG] [Thread-70609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:46:50.738 [DEBUG] [Thread-70609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:46:50.738 [DEBUG] [Thread-70609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:46:50.757 [INFO] [Thread-70609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:46:50.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:46:51.396 [DEBUG] [Thread-70609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:46:51.396 [DEBUG] [Thread-70609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:46:51.396 [DEBUG] [Thread-70609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:46:51.437 [DEBUG] [Thread-70609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:46:51.437 [DEBUG] [Thread-70609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:46:51.440 [DEBUG] [Thread-70609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:46:51.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:46:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:46:51.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:46:51.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:46:51.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:46:51.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:46:51.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:46:51.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:46:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:46:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.490372 -999.00  +22.70  30.64     21   -0.30 1 1 2 1 1   888    0 21.83 -20.55 ----- 42.8 30.6 332.2 58.3 26.2 -23.9 25.5 -24.5 25.8 -21.7 26.6 -22.1
2025-12-12T13:46:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:46:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:46:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.490372
2025-12-12T13:46:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:46:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:46:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:46:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:46:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:46:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:46:20', tmtdew=25.46, humidity=17.43, cloud=0.0, wind=53.81, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:46:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:46:51.463 [DEBUG] [Thread-70609] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:46:51.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:46:51.562 [DEBUG] [Thread-70612] [transport.py] [_log()] starting thread (client mode): 0xf574fb80
2025-12-12T13:46:51.562 [DEBUG] [Thread-70612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:46:51.576 [DEBUG] [Thread-70612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:46:51.576 [INFO] [Thread-70612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:46:51.584 [DEBUG] [Thread-70612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] client lang: <none>
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] server lang: <none>
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] kex follows: False
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] Compression: none
2025-12-12T13:46:51.585 [DEBUG] [Thread-70612] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:46:51.642 [DEBUG] [Thread-70612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:46:51.643 [DEBUG] [Thread-70612] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:46:51.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:46:51.644 [DEBUG] [Thread-70612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:46:51.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:46:51.699 [DEBUG] [Thread-70612] [transport.py] [_log()] userauth is OK
2025-12-12T13:46:51.699 [DEBUG] [Thread-70612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:46:51.700 [DEBUG] [Thread-70612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:46:51.700 [DEBUG] [Thread-70612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:46:51.700 [DEBUG] [Thread-70612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:46:51.719 [INFO] [Thread-70612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:46:51.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:46:51.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:46:52.536 [DEBUG] [Thread-70612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:46:52.536 [DEBUG] [Thread-70612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:46:52.584 [DEBUG] [Thread-70612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:46:52.584 [DEBUG] [Thread-70612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:46:52.593 [DEBUG] [Thread-70612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:46:52.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:46:52.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:46:52.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:46:52.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:46:52.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:46:52.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:46:52.629 [DEBUG] [Thread-70612] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:47:03.278 [DEBUG] [Thread-70614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:18.323 [DEBUG] [Thread-70615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:47:22.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:47:22.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:47:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 46, 52), 25.71, 17.64, 0.0, 37.81, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:47:23.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:46:52
2025-12-12T13:47:23.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:47:23.623 [DEBUG] [Thread-70616] [transport.py] [_log()] starting thread (client mode): 0xf574df00
2025-12-12T13:47:23.623 [DEBUG] [Thread-70616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:47:23.643 [DEBUG] [Thread-70616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:47:23.643 [INFO] [Thread-70616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] client lang: <none>
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] server lang: <none>
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] kex follows: False
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:47:23.646 [DEBUG] [Thread-70616] [transport.py] [_log()] Compression: none
2025-12-12T13:47:23.647 [DEBUG] [Thread-70616] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:47:23.662 [DEBUG] [Thread-70616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:47:23.663 [DEBUG] [Thread-70616] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:47:23.663 [DEBUG] [Thread-70616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:47:23.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:47:23.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:47:23.704 [DEBUG] [Thread-70616] [transport.py] [_log()] userauth is OK
2025-12-12T13:47:23.704 [DEBUG] [Thread-70616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:47:23.705 [DEBUG] [Thread-70616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:47:23.705 [DEBUG] [Thread-70616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:47:23.705 [DEBUG] [Thread-70616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:47:23.737 [INFO] [Thread-70616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:47:23.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:47:24.386 [DEBUG] [Thread-70616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:47:24.386 [DEBUG] [Thread-70616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:47:24.387 [DEBUG] [Thread-70616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:47:24.428 [DEBUG] [Thread-70616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:47:24.428 [DEBUG] [Thread-70616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:47:24.431 [DEBUG] [Thread-70616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:47:24.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:47:24.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:47:24.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:47:24.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:47:24.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:47:24.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:47:24.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:47:24.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:47:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:47:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.490720 -999.00  +22.70  42.36     21   -0.50 1 2 2 1 1   888    0 22.15 -4.38 ----- 45.5 42.4 327.3 51.0 26.4 -25.6 25.8 -24.0 26.1 -21.5 26.8 -22.7
2025-12-12T13:47:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:47:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:47:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.490720
2025-12-12T13:47:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:47:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:47:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:47:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:47:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T13:47:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:46:52', tmtdew=25.71, humidity=17.64, cloud=0.0, wind=37.81, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:46:38.208', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:47:24.457 [DEBUG] [Thread-70616] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:47:24.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:47:24.549 [DEBUG] [Thread-70619] [transport.py] [_log()] starting thread (client mode): 0xf5703e50
2025-12-12T13:47:24.549 [DEBUG] [Thread-70619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:47:24.563 [DEBUG] [Thread-70619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:47:24.563 [INFO] [Thread-70619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:47:24.570 [DEBUG] [Thread-70619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] client lang: <none>
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] server lang: <none>
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] kex follows: False
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] Compression: none
2025-12-12T13:47:24.571 [DEBUG] [Thread-70619] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:47:24.631 [DEBUG] [Thread-70619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:47:24.632 [DEBUG] [Thread-70619] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:47:24.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:47:24.633 [DEBUG] [Thread-70619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:47:24.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:47:24.687 [DEBUG] [Thread-70619] [transport.py] [_log()] userauth is OK
2025-12-12T13:47:24.687 [DEBUG] [Thread-70619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:47:24.687 [DEBUG] [Thread-70619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:47:24.687 [DEBUG] [Thread-70619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:47:24.687 [DEBUG] [Thread-70619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:47:24.711 [INFO] [Thread-70619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:47:24.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:47:24.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:47:25.540 [DEBUG] [Thread-70619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:47:25.540 [DEBUG] [Thread-70619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:47:25.587 [DEBUG] [Thread-70619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:47:25.587 [DEBUG] [Thread-70619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:47:25.596 [DEBUG] [Thread-70619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:47:25.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:47:25.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:47:25.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:47:25.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:47:25.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:47:25.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:47:25.627 [DEBUG] [Thread-70619] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:47:33.350 [DEBUG] [Thread-70621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:45.664 [DEBUG] [Thread-70622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:46.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:46.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:48.384 [DEBUG] [Thread-70623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:47:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:47:55.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:47:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:47:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 47, 24), 26.17, 17.18, 0.0, 44.09, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:47:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:47:24
2025-12-12T13:47:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:47:56.587 [DEBUG] [Thread-70624] [transport.py] [_log()] starting thread (client mode): 0xf575c1f0
2025-12-12T13:47:56.587 [DEBUG] [Thread-70624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:47:56.606 [DEBUG] [Thread-70624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:47:56.606 [INFO] [Thread-70624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] client lang: <none>
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] server lang: <none>
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] kex follows: False
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] Compression: none
2025-12-12T13:47:56.610 [DEBUG] [Thread-70624] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:47:56.626 [DEBUG] [Thread-70624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:47:56.627 [DEBUG] [Thread-70624] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:47:56.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:47:56.628 [DEBUG] [Thread-70624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:47:56.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:47:56.630 [DEBUG] [Thread-70624] [transport.py] [_log()] userauth is OK
2025-12-12T13:47:56.630 [DEBUG] [Thread-70624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:47:56.630 [DEBUG] [Thread-70624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:47:56.630 [DEBUG] [Thread-70624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:47:56.630 [DEBUG] [Thread-70624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:47:56.666 [INFO] [Thread-70624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:47:56.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:47:57.311 [DEBUG] [Thread-70624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:47:57.311 [DEBUG] [Thread-70624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:47:57.311 [DEBUG] [Thread-70624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:47:57.353 [DEBUG] [Thread-70624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:47:57.353 [DEBUG] [Thread-70624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:47:57.356 [DEBUG] [Thread-70624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:47:57.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:47:57.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:47:57.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:47:57.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:47:57.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:47:57.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:47:57.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.491067 -999.00  +22.10  37.81     22   -0.30 1 1 2 1 1   888    0 21.98 4.91 ----- 50.1 37.8 326.8 52.6 26.4 -26.4 25.8 -25.7 26.1 -24.9 26.8 -23.4
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.491067
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:47:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:47:24', tmtdew=26.17, humidity=17.18, cloud=0.0, wind=44.09, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:47:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:47:57.376 [DEBUG] [Thread-70624] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:47:57.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:47:57.461 [DEBUG] [Thread-70627] [transport.py] [_log()] starting thread (client mode): 0xf575c670
2025-12-12T13:47:57.461 [DEBUG] [Thread-70627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:47:57.476 [DEBUG] [Thread-70627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:47:57.476 [INFO] [Thread-70627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:47:57.483 [DEBUG] [Thread-70627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] client lang: <none>
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] server lang: <none>
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] kex follows: False
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] Compression: none
2025-12-12T13:47:57.484 [DEBUG] [Thread-70627] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:47:57.541 [DEBUG] [Thread-70627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:47:57.541 [DEBUG] [Thread-70627] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:47:57.541 [DEBUG] [Thread-70627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:47:57.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:47:57.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:47:57.599 [DEBUG] [Thread-70627] [transport.py] [_log()] userauth is OK
2025-12-12T13:47:57.599 [DEBUG] [Thread-70627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:47:57.599 [DEBUG] [Thread-70627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:47:57.599 [DEBUG] [Thread-70627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:47:57.599 [DEBUG] [Thread-70627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:47:57.613 [INFO] [Thread-70627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:47:57.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:47:57.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:47:58.450 [DEBUG] [Thread-70627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:47:58.450 [DEBUG] [Thread-70627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:47:58.499 [DEBUG] [Thread-70627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:47:58.499 [DEBUG] [Thread-70627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:47:58.507 [DEBUG] [Thread-70627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:47:58.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:47:58.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:47:58.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:47:58.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:47:58.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:47:58.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:47:58.538 [DEBUG] [Thread-70627] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:48:03.417 [DEBUG] [Thread-70629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:48:18.460 [DEBUG] [Thread-70630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:48:28.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:48:28.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:48:28.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:48:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 47, 56), 26.45, 16.8, 0.0, 48.29, 22.49, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:48:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:47:56
2025-12-12T13:48:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:48:29.536 [DEBUG] [Thread-70631] [transport.py] [_log()] starting thread (client mode): 0xf57016f0
2025-12-12T13:48:29.537 [DEBUG] [Thread-70631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:48:29.556 [DEBUG] [Thread-70631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:48:29.556 [INFO] [Thread-70631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:48:29.559 [DEBUG] [Thread-70631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] client lang: <none>
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] server lang: <none>
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] kex follows: False
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] Compression: none
2025-12-12T13:48:29.560 [DEBUG] [Thread-70631] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:48:29.575 [DEBUG] [Thread-70631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:48:29.575 [DEBUG] [Thread-70631] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:48:29.575 [DEBUG] [Thread-70631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:48:29.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:48:29.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:48:29.576 [DEBUG] [Thread-70631] [transport.py] [_log()] userauth is OK
2025-12-12T13:48:29.576 [DEBUG] [Thread-70631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:48:29.576 [DEBUG] [Thread-70631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:48:29.576 [DEBUG] [Thread-70631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:48:29.576 [DEBUG] [Thread-70631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:48:29.589 [INFO] [Thread-70631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:48:29.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:48:30.231 [DEBUG] [Thread-70631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:48:30.231 [DEBUG] [Thread-70631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:48:30.231 [DEBUG] [Thread-70631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:48:30.272 [DEBUG] [Thread-70631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:48:30.273 [DEBUG] [Thread-70631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:48:30.275 [DEBUG] [Thread-70631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:48:30.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:48:30.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:48:30.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:48:30.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:48:30.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:48:30.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:48:30.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.491414 -999.00  +22.20  40.65     22   -0.10 1 1 2 1 1   888    0 22.56 13.44 ----- 33.7 40.6 333.0 55.2 26.4 -24.9 25.8 -26.0 26.1 -23.5 26.7 -23.0
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.491414
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:48:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:47:56', tmtdew=26.45, humidity=16.8, cloud=0.0, wind=48.29, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:47:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:48:30.294 [DEBUG] [Thread-70631] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:48:30.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:48:30.377 [DEBUG] [Thread-70634] [transport.py] [_log()] starting thread (client mode): 0xf81c34f0
2025-12-12T13:48:30.377 [DEBUG] [Thread-70634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:48:30.392 [DEBUG] [Thread-70634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:48:30.392 [INFO] [Thread-70634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:48:30.399 [DEBUG] [Thread-70634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:48:30.399 [DEBUG] [Thread-70634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] client lang: <none>
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] server lang: <none>
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] kex follows: False
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] Compression: none
2025-12-12T13:48:30.400 [DEBUG] [Thread-70634] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:48:30.457 [DEBUG] [Thread-70634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:48:30.457 [DEBUG] [Thread-70634] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:48:30.457 [DEBUG] [Thread-70634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:48:30.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:48:30.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:48:30.514 [DEBUG] [Thread-70634] [transport.py] [_log()] userauth is OK
2025-12-12T13:48:30.514 [DEBUG] [Thread-70634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:48:30.514 [DEBUG] [Thread-70634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:48:30.514 [DEBUG] [Thread-70634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:48:30.514 [DEBUG] [Thread-70634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:48:30.527 [INFO] [Thread-70634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:48:30.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:48:30.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:48:31.356 [DEBUG] [Thread-70634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:48:31.356 [DEBUG] [Thread-70634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:48:31.404 [DEBUG] [Thread-70634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:48:31.404 [DEBUG] [Thread-70634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:48:31.413 [DEBUG] [Thread-70634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:48:31.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:48:31.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')
2025-12-12T13:48: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') -> 00000000
2025-12-12T13:48:31.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:48:31.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:48:31.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:48:31.448 [DEBUG] [Thread-70634] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:48:33.487 [DEBUG] [Thread-70636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:48:45.706 [DEBUG] [Thread-70637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:48:46.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:48:46.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:48:48.529 [DEBUG] [Thread-70638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:49:01.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:49:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:49:02.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 48, 28), 26.27, 17.04, 0.0, 48.75, 22.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:49:02.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:48:28
2025-12-12T13:49:02.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:49:02.491 [DEBUG] [Thread-70639] [transport.py] [_log()] starting thread (client mode): 0xf813e740
2025-12-12T13:49:02.491 [DEBUG] [Thread-70639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:49:02.512 [DEBUG] [Thread-70639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:49:02.512 [INFO] [Thread-70639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] client lang: <none>
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] server lang: <none>
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] kex follows: False
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] Compression: none
2025-12-12T13:49:02.516 [DEBUG] [Thread-70639] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:49:02.533 [DEBUG] [Thread-70639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:49:02.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:49:02.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] userauth is OK
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:49:02.534 [DEBUG] [Thread-70639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:49:02.543 [INFO] [Thread-70639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:49:02.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:49:03.179 [DEBUG] [Thread-70639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:49:03.180 [DEBUG] [Thread-70639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:49:03.180 [DEBUG] [Thread-70639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:49:03.221 [DEBUG] [Thread-70639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:49:03.221 [DEBUG] [Thread-70639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:49:03.224 [DEBUG] [Thread-70639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:49:03.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:49:03.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:49:03.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:49:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:49:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:49:03.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:49:03.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:49:03.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:49:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:49:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.491761 -999.00  +21.90  46.82     23   +0.00 1 1 2 1 1   888    0 22.90 17.61 ----- 48.3 46.8 329.8 59.0 26.5 -26.6 25.9 -25.5 26.2 -22.8 26.9 -23.6
2025-12-12T13:49:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:49:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:49:03.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.491761
2025-12-12T13:49:03.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:49:03.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:49:03.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:49:03.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:49:03.248 [DEBUG] [Thread-70639] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:49:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:49:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:48:28', tmtdew=26.27, humidity=17.04, cloud=0.0, wind=48.75, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:48:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:49:03.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:49:03.344 [DEBUG] [Thread-70642] [transport.py] [_log()] starting thread (client mode): 0xf81f2ef0
2025-12-12T13:49:03.344 [DEBUG] [Thread-70642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:49:03.358 [DEBUG] [Thread-70642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:49:03.359 [INFO] [Thread-70642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:49:03.366 [DEBUG] [Thread-70642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:49:03.366 [DEBUG] [Thread-70642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:49:03.366 [DEBUG] [Thread-70642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] client lang: <none>
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] server lang: <none>
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] kex follows: False
2025-12-12T13:49:03.367 [DEBUG] [Thread-70642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:49:03.368 [DEBUG] [Thread-70642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:49:03.368 [DEBUG] [Thread-70642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:49:03.368 [DEBUG] [Thread-70642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:49:03.368 [DEBUG] [Thread-70642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:49:03.368 [DEBUG] [Thread-70642] [transport.py] [_log()] Compression: none
2025-12-12T13:49:03.368 [DEBUG] [Thread-70642] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:49:03.430 [DEBUG] [Thread-70642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:49:03.430 [DEBUG] [Thread-70642] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:49:03.431 [DEBUG] [Thread-70642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:49:03.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:49:03.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:49:03.486 [DEBUG] [Thread-70642] [transport.py] [_log()] userauth is OK
2025-12-12T13:49:03.486 [DEBUG] [Thread-70642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:49:03.486 [DEBUG] [Thread-70642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:49:03.486 [DEBUG] [Thread-70642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:49:03.486 [DEBUG] [Thread-70642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:49:03.505 [INFO] [Thread-70642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:49:03.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:49:03.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:49:03.553 [DEBUG] [Thread-70644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:04.369 [DEBUG] [Thread-70642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:49:04.370 [DEBUG] [Thread-70642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:49:04.417 [DEBUG] [Thread-70642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:49:04.418 [DEBUG] [Thread-70642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:49:04.426 [DEBUG] [Thread-70642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:49:04.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:49:04.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:49:04.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:49:04.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:49:04.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:49:04.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:49:04.457 [DEBUG] [Thread-70642] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:49:18.601 [DEBUG] [Thread-70645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:33.628 [DEBUG] [Thread-70646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:34.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:49:34.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:49:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:49:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 49), 25.93, 17.18, 0.0, 52.77, 22.23, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:49:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:49:00
2025-12-12T13:49:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:49:35.476 [DEBUG] [Thread-70647] [transport.py] [_log()] starting thread (client mode): 0xf81e5210
2025-12-12T13:49:35.477 [DEBUG] [Thread-70647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:49:35.497 [DEBUG] [Thread-70647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:49:35.497 [INFO] [Thread-70647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:49:35.500 [DEBUG] [Thread-70647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:49:35.500 [DEBUG] [Thread-70647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:49:35.500 [DEBUG] [Thread-70647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:49:35.500 [DEBUG] [Thread-70647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:35.500 [DEBUG] [Thread-70647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] client lang: <none>
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] server lang: <none>
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] kex follows: False
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:49:35.501 [DEBUG] [Thread-70647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:49:35.502 [DEBUG] [Thread-70647] [transport.py] [_log()] Compression: none
2025-12-12T13:49:35.502 [DEBUG] [Thread-70647] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:49:35.520 [DEBUG] [Thread-70647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:49:35.521 [DEBUG] [Thread-70647] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:49:35.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:49:35.522 [DEBUG] [Thread-70647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:49:35.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:49:35.525 [DEBUG] [Thread-70647] [transport.py] [_log()] userauth is OK
2025-12-12T13:49:35.525 [DEBUG] [Thread-70647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:49:35.525 [DEBUG] [Thread-70647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:49:35.525 [DEBUG] [Thread-70647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:49:35.525 [DEBUG] [Thread-70647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:49:35.550 [INFO] [Thread-70647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:49:35.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:49:36.176 [DEBUG] [Thread-70647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:49:36.177 [DEBUG] [Thread-70647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:49:36.177 [DEBUG] [Thread-70647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:49:36.218 [DEBUG] [Thread-70647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:49:36.218 [DEBUG] [Thread-70647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:49:36.221 [DEBUG] [Thread-70647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:49:36.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:49:36.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:49:36.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:49:36.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:49:36.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:49:36.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:49:36.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:49:36.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:49:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:49:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.492109 -999.00  +21.60  53.55     24   +0.20 1 1 2 1 1   888    0 22.30 11.99 ----- 38.4 53.5 331.8 68.8 26.4 -25.6 25.9 -26.1 26.2 -23.0 26.8 -23.4
2025-12-12T13:49:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:49:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:49:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.492109
2025-12-12T13:49:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:49:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:49:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:49:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:49:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:49:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:49:00', tmtdew=25.93, humidity=17.18, cloud=0.0, wind=52.77, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:48:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:49:36.246 [DEBUG] [Thread-70647] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:49:36.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:49:36.342 [DEBUG] [Thread-70650] [transport.py] [_log()] starting thread (client mode): 0xf81f2860
2025-12-12T13:49:36.342 [DEBUG] [Thread-70650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:49:36.356 [DEBUG] [Thread-70650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:49:36.357 [INFO] [Thread-70650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:49:36.364 [DEBUG] [Thread-70650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:49:36.364 [DEBUG] [Thread-70650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:49:36.364 [DEBUG] [Thread-70650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:49:36.364 [DEBUG] [Thread-70650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:36.364 [DEBUG] [Thread-70650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] client lang: <none>
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] server lang: <none>
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] kex follows: False
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] Compression: none
2025-12-12T13:49:36.365 [DEBUG] [Thread-70650] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:49:36.421 [DEBUG] [Thread-70650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:49:36.422 [DEBUG] [Thread-70650] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:49:36.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:49:36.422 [DEBUG] [Thread-70650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:49:36.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:49:36.477 [DEBUG] [Thread-70650] [transport.py] [_log()] userauth is OK
2025-12-12T13:49:36.478 [DEBUG] [Thread-70650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:49:36.478 [DEBUG] [Thread-70650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:49:36.478 [DEBUG] [Thread-70650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:49:36.478 [DEBUG] [Thread-70650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:49:36.497 [INFO] [Thread-70650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:49:36.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:49:36.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:49:37.326 [DEBUG] [Thread-70650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:49:37.326 [DEBUG] [Thread-70650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:49:37.374 [DEBUG] [Thread-70650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:49:37.374 [DEBUG] [Thread-70650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:49:37.383 [DEBUG] [Thread-70650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:49:37.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:49:37.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:49:37.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:49:37.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:49:37.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:49:37.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:49:37.417 [DEBUG] [Thread-70650] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:49:45.749 [DEBUG] [Thread-70652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:47.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:47.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:49:48.654 [DEBUG] [Thread-70653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:03.711 [DEBUG] [Thread-70654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:50:07.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:50:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:50:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 50, 4), 25.14, 18.1, 0.0, 47.55, 21.6, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:50:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:50:04
2025-12-12T13:50:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:50:08.426 [DEBUG] [Thread-70655] [transport.py] [_log()] starting thread (client mode): 0xf575d8d0
2025-12-12T13:50:08.426 [DEBUG] [Thread-70655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:50:08.445 [DEBUG] [Thread-70655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:50:08.445 [INFO] [Thread-70655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] client lang: <none>
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] server lang: <none>
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] kex follows: False
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] Compression: none
2025-12-12T13:50:08.449 [DEBUG] [Thread-70655] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:50:08.463 [DEBUG] [Thread-70655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:50:08.463 [DEBUG] [Thread-70655] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:50:08.463 [DEBUG] [Thread-70655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:50:08.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:50:08.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:50:08.464 [DEBUG] [Thread-70655] [transport.py] [_log()] userauth is OK
2025-12-12T13:50:08.464 [DEBUG] [Thread-70655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:50:08.464 [DEBUG] [Thread-70655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:50:08.464 [DEBUG] [Thread-70655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:50:08.464 [DEBUG] [Thread-70655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:50:08.478 [INFO] [Thread-70655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:50:08.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:50:09.371 [DEBUG] [Thread-70655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:50:09.371 [DEBUG] [Thread-70655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:50:09.371 [DEBUG] [Thread-70655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:50:09.411 [DEBUG] [Thread-70655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:50:09.411 [DEBUG] [Thread-70655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:50:09.413 [DEBUG] [Thread-70655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:50:09.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:50:09.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:50:09.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:50:09.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:50:09.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:50:09.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:50:09.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.492803 -999.00  +21.70  43.35     24   +0.40 1 1 2 1 1   888    0 21.82 3.08 ----- 45.5 43.4 309.0 58.9 26.3 -25.2 25.8 -27.2 25.9 -29.7 26.8 -23.3
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.492803
2025-12-12T13:50:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:50:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:50:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:50:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:50:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:50:09.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:50:04', tmtdew=25.14, humidity=18.1, cloud=0.0, wind=47.55, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:49:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:50:09.434 [DEBUG] [Thread-70655] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:50:09.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:50:09.530 [DEBUG] [Thread-70658] [transport.py] [_log()] starting thread (client mode): 0xf575f3a0
2025-12-12T13:50:09.530 [DEBUG] [Thread-70658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:50:09.544 [DEBUG] [Thread-70658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:50:09.545 [INFO] [Thread-70658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] client lang: <none>
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] server lang: <none>
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] kex follows: False
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:50:09.552 [DEBUG] [Thread-70658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:50:09.553 [DEBUG] [Thread-70658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:50:09.553 [DEBUG] [Thread-70658] [transport.py] [_log()] Compression: none
2025-12-12T13:50:09.553 [DEBUG] [Thread-70658] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:50:09.610 [DEBUG] [Thread-70658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:50:09.610 [DEBUG] [Thread-70658] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:50:09.610 [DEBUG] [Thread-70658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:50:09.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:50:09.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:50:09.665 [DEBUG] [Thread-70658] [transport.py] [_log()] userauth is OK
2025-12-12T13:50:09.665 [DEBUG] [Thread-70658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:50:09.665 [DEBUG] [Thread-70658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:50:09.666 [DEBUG] [Thread-70658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:50:09.666 [DEBUG] [Thread-70658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:50:09.680 [INFO] [Thread-70658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:50:09.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:50:09.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:50:10.520 [DEBUG] [Thread-70658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:50:10.520 [DEBUG] [Thread-70658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:50:10.568 [DEBUG] [Thread-70658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:50:10.568 [DEBUG] [Thread-70658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:50:10.577 [DEBUG] [Thread-70658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:50:10.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:50:10.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:50:10.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:50:10.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:50:10.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:50:10.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:50:10.608 [DEBUG] [Thread-70658] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:50:18.737 [DEBUG] [Thread-70660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:33.791 [DEBUG] [Thread-70661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:40.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:50:40.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:50:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:50:41.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 50, 36), 23.83, 19.7, 0.0, 39.52, 20.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:50:41.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:50:36
2025-12-12T13:50:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:50:41.590 [DEBUG] [Thread-70662] [transport.py] [_log()] starting thread (client mode): 0xf575e230
2025-12-12T13:50:41.590 [DEBUG] [Thread-70662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:50:41.609 [DEBUG] [Thread-70662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:50:41.609 [INFO] [Thread-70662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:50:41.612 [DEBUG] [Thread-70662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:50:41.612 [DEBUG] [Thread-70662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:50:41.612 [DEBUG] [Thread-70662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] client lang: <none>
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] server lang: <none>
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] kex follows: False
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] Compression: none
2025-12-12T13:50:41.613 [DEBUG] [Thread-70662] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:50:41.631 [DEBUG] [Thread-70662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:50:41.632 [DEBUG] [Thread-70662] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:50:41.632 [DEBUG] [Thread-70662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:50:41.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:50:41.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:50:41.634 [DEBUG] [Thread-70662] [transport.py] [_log()] userauth is OK
2025-12-12T13:50:41.635 [DEBUG] [Thread-70662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:50:41.635 [DEBUG] [Thread-70662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:50:41.635 [DEBUG] [Thread-70662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:50:41.635 [DEBUG] [Thread-70662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:50:41.658 [INFO] [Thread-70662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:50:41.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:50:42.284 [DEBUG] [Thread-70662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:50:42.284 [DEBUG] [Thread-70662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:50:42.284 [DEBUG] [Thread-70662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:50:42.325 [DEBUG] [Thread-70662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:50:42.325 [DEBUG] [Thread-70662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:50:42.328 [DEBUG] [Thread-70662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:50:42.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:50:42.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:50:42.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:50:42.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:50:42.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:50:42.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:50:42.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:50:42.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:50:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:50:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.493150 -999.00  +21.10  31.51     24   +0.10 1 1 2 1 1   888    0 22.53 -0.85 ----- 33.9 31.5 304.4 49.8 26.2 -25.9 25.7 -26.9 26.0 -25.3 -999.0 -999.0
2025-12-12T13:50:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:50:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:50:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.493150
2025-12-12T13:50:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:50:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:50:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:50:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:50:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:50:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:50:36', tmtdew=23.83, humidity=19.7, cloud=0.0, wind=39.52, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:50:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:50:42.353 [DEBUG] [Thread-70662] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:50:42.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:50:42.449 [DEBUG] [Thread-70665] [transport.py] [_log()] starting thread (client mode): 0xf81c03a0
2025-12-12T13:50:42.449 [DEBUG] [Thread-70665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:50:42.467 [DEBUG] [Thread-70665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:50:42.467 [INFO] [Thread-70665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:50:42.474 [DEBUG] [Thread-70665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] client lang: <none>
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] server lang: <none>
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] kex follows: False
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:50:42.475 [DEBUG] [Thread-70665] [transport.py] [_log()] Compression: none
2025-12-12T13:50:42.476 [DEBUG] [Thread-70665] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:50:42.533 [DEBUG] [Thread-70665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:50:42.533 [DEBUG] [Thread-70665] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:50:42.534 [DEBUG] [Thread-70665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:50:42.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:50:42.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:50:42.589 [DEBUG] [Thread-70665] [transport.py] [_log()] userauth is OK
2025-12-12T13:50:42.589 [DEBUG] [Thread-70665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:50:42.589 [DEBUG] [Thread-70665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:50:42.590 [DEBUG] [Thread-70665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:50:42.590 [DEBUG] [Thread-70665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:50:42.608 [INFO] [Thread-70665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:50:42.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:50:42.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:50:43.490 [DEBUG] [Thread-70665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:50:43.490 [DEBUG] [Thread-70665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:50:43.538 [DEBUG] [Thread-70665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:50:43.538 [DEBUG] [Thread-70665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:50:43.546 [DEBUG] [Thread-70665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:50:43.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:50:43.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:50:43.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:50:43.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:50:43.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:50:43.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:50:43.581 [DEBUG] [Thread-70665] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:50:45.778 [DEBUG] [Thread-70667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:47.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:47.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:50:48.819 [DEBUG] [Thread-70668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:03.856 [DEBUG] [Thread-70669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:13.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:51:13.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:51:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:51:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 51, 9), 23.85, 19.69, 0.0, 42.84, 20.55, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:51:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:51:09
2025-12-12T13:51:14.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:51:14.562 [DEBUG] [Thread-70670] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T13:51:14.562 [DEBUG] [Thread-70670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:51:14.577 [DEBUG] [Thread-70670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:51:14.577 [INFO] [Thread-70670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] client lang: <none>
2025-12-12T13:51:14.580 [DEBUG] [Thread-70670] [transport.py] [_log()] server lang: <none>
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] kex follows: False
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] Compression: none
2025-12-12T13:51:14.581 [DEBUG] [Thread-70670] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:51:14.601 [DEBUG] [Thread-70670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:51:14.601 [DEBUG] [Thread-70670] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:51:14.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:51:14.602 [DEBUG] [Thread-70670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:51:14.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:51:14.604 [DEBUG] [Thread-70670] [transport.py] [_log()] userauth is OK
2025-12-12T13:51:14.604 [DEBUG] [Thread-70670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:51:14.604 [DEBUG] [Thread-70670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:51:14.604 [DEBUG] [Thread-70670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:51:14.604 [DEBUG] [Thread-70670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:51:14.627 [INFO] [Thread-70670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:51:14.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:51:15.248 [DEBUG] [Thread-70670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:51:15.248 [DEBUG] [Thread-70670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:51:15.248 [DEBUG] [Thread-70670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:51:15.290 [DEBUG] [Thread-70670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:51:15.290 [DEBUG] [Thread-70670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:51:15.293 [DEBUG] [Thread-70670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:51:15.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:51:15.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:51:15.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:51:15.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:51:15.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:51:15.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:51:15.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:51:15.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:51:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:51:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.493497 -999.00  +21.20  37.66     25   +0.50 1 1 2 1 1   888    0 21.95 -10.81 ----- 37.6 37.7 322.8 43.4 26.3 -25.1 25.6 -26.1 26.0 -23.0 26.6 -22.5
2025-12-12T13:51:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:51:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:51:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.493497
2025-12-12T13:51:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:51:15.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:51:15.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:51:15.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:51:15.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:51:15.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:51:09', tmtdew=23.85, humidity=19.69, cloud=0.0, wind=42.84, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:50:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:51:15.316 [DEBUG] [Thread-70670] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:51:15.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:51:15.410 [DEBUG] [Thread-70673] [transport.py] [_log()] starting thread (client mode): 0xf575d450
2025-12-12T13:51:15.410 [DEBUG] [Thread-70673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:51:15.425 [DEBUG] [Thread-70673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:51:15.426 [INFO] [Thread-70673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:51:15.433 [DEBUG] [Thread-70673] [transport.py] [_log()] client lang: <none>
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] server lang: <none>
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] kex follows: False
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] Compression: none
2025-12-12T13:51:15.434 [DEBUG] [Thread-70673] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:51:15.492 [DEBUG] [Thread-70673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:51:15.493 [DEBUG] [Thread-70673] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:51:15.493 [DEBUG] [Thread-70673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:51:15.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:51:15.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:51:15.549 [DEBUG] [Thread-70673] [transport.py] [_log()] userauth is OK
2025-12-12T13:51:15.549 [DEBUG] [Thread-70673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:51:15.549 [DEBUG] [Thread-70673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:51:15.549 [DEBUG] [Thread-70673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:51:15.549 [DEBUG] [Thread-70673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:51:15.569 [INFO] [Thread-70673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:51:15.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:51:15.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:51:16.412 [DEBUG] [Thread-70673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:51:16.413 [DEBUG] [Thread-70673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:51:16.461 [DEBUG] [Thread-70673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:51:16.461 [DEBUG] [Thread-70673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:51:16.470 [DEBUG] [Thread-70673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:51:16.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:51:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:51:16.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:51:16.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:51:16.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:51:16.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:51:16.504 [DEBUG] [Thread-70673] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:51:18.889 [DEBUG] [Thread-70675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:33.943 [DEBUG] [Thread-70676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:45.812 [DEBUG] [Thread-70677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:51:46.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:51:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:51:47.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 51, 41), 23.9, 19.64, 0.0, 42.19, 21.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:51:47.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:51:41
2025-12-12T13:51:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:51:47.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:47.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:47.474 [DEBUG] [Thread-70678] [transport.py] [_log()] starting thread (client mode): 0xf81f34c0
2025-12-12T13:51:47.474 [DEBUG] [Thread-70678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:51:47.494 [DEBUG] [Thread-70678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:51:47.494 [INFO] [Thread-70678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] client lang: <none>
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] server lang: <none>
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] kex follows: False
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:51:47.497 [DEBUG] [Thread-70678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:51:47.498 [DEBUG] [Thread-70678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:51:47.498 [DEBUG] [Thread-70678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:51:47.498 [DEBUG] [Thread-70678] [transport.py] [_log()] Compression: none
2025-12-12T13:51:47.498 [DEBUG] [Thread-70678] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:51:47.513 [DEBUG] [Thread-70678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:51:47.514 [DEBUG] [Thread-70678] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:51:47.514 [DEBUG] [Thread-70678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:51:47.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:51:47.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:51:47.516 [DEBUG] [Thread-70678] [transport.py] [_log()] userauth is OK
2025-12-12T13:51:47.516 [DEBUG] [Thread-70678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:51:47.516 [DEBUG] [Thread-70678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:51:47.516 [DEBUG] [Thread-70678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:51:47.517 [DEBUG] [Thread-70678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:51:47.537 [INFO] [Thread-70678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:51:47.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:51:48.187 [DEBUG] [Thread-70678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:51:48.187 [DEBUG] [Thread-70678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:51:48.187 [DEBUG] [Thread-70678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:51:48.228 [DEBUG] [Thread-70678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:51:48.228 [DEBUG] [Thread-70678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:51:48.231 [DEBUG] [Thread-70678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:51:48.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:51:48.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:51:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:51:48.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:51:48.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:51:48.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:51:48.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:51:48.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:51:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:51:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.493845 -999.00  +21.40  40.17     24   +0.30 1 1 2 1 1   888    0 21.14 -18.82 ----- 46.9 40.2 325.4 48.0 26.4 -26.2 25.8 -25.1 26.1 -23.1 26.7 -23.3
2025-12-12T13:51:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:51:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:51:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.493845
2025-12-12T13:51:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:51:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:51:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:51:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:51:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:51:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:51:41', tmtdew=23.9, humidity=19.64, cloud=0.0, wind=42.19, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:51:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:51:48.255 [DEBUG] [Thread-70678] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:51:48.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:51:48.351 [DEBUG] [Thread-70681] [transport.py] [_log()] starting thread (client mode): 0xf575dd80
2025-12-12T13:51:48.351 [DEBUG] [Thread-70681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:51:48.365 [DEBUG] [Thread-70681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:51:48.365 [INFO] [Thread-70681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] client lang: <none>
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] server lang: <none>
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] kex follows: False
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:51:48.373 [DEBUG] [Thread-70681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:51:48.374 [DEBUG] [Thread-70681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:51:48.374 [DEBUG] [Thread-70681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:51:48.374 [DEBUG] [Thread-70681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:51:48.374 [DEBUG] [Thread-70681] [transport.py] [_log()] Compression: none
2025-12-12T13:51:48.374 [DEBUG] [Thread-70681] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:51:48.432 [DEBUG] [Thread-70681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:51:48.433 [DEBUG] [Thread-70681] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:51:48.433 [DEBUG] [Thread-70681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:51:48.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:51:48.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:51:48.489 [DEBUG] [Thread-70681] [transport.py] [_log()] userauth is OK
2025-12-12T13:51:48.489 [DEBUG] [Thread-70681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:51:48.489 [DEBUG] [Thread-70681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:51:48.489 [DEBUG] [Thread-70681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:51:48.489 [DEBUG] [Thread-70681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:51:48.508 [INFO] [Thread-70681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:51:48.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:51:48.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:51:48.973 [DEBUG] [Thread-70683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:51:49.374 [DEBUG] [Thread-70681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:51:49.374 [DEBUG] [Thread-70681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:51:49.422 [DEBUG] [Thread-70681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:51:49.422 [DEBUG] [Thread-70681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:51:49.431 [DEBUG] [Thread-70681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:51:49.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:51:49.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:51:49.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:51:49.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:51:49.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:51:49.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:51:49.464 [DEBUG] [Thread-70681] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:52:04.017 [DEBUG] [Thread-70684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:19.045 [DEBUG] [Thread-70685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:52:19.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:52:19.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:52:20.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 52, 13), 24.01, 19.52, 0.0, 44.27, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T13:52:20.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:52:13
2025-12-12T13:52:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:52:20.445 [DEBUG] [Thread-70686] [transport.py] [_log()] starting thread (client mode): 0xfabc71f0
2025-12-12T13:52:20.445 [DEBUG] [Thread-70686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:52:20.466 [DEBUG] [Thread-70686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:52:20.466 [INFO] [Thread-70686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] client lang: <none>
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] server lang: <none>
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] kex follows: False
2025-12-12T13:52:20.469 [DEBUG] [Thread-70686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:52:20.470 [DEBUG] [Thread-70686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:52:20.470 [DEBUG] [Thread-70686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:52:20.470 [DEBUG] [Thread-70686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:52:20.470 [DEBUG] [Thread-70686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:52:20.470 [DEBUG] [Thread-70686] [transport.py] [_log()] Compression: none
2025-12-12T13:52:20.470 [DEBUG] [Thread-70686] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:52:20.486 [DEBUG] [Thread-70686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:52:20.486 [DEBUG] [Thread-70686] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:52:20.487 [DEBUG] [Thread-70686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:52:20.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:52:20.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:52:20.489 [DEBUG] [Thread-70686] [transport.py] [_log()] userauth is OK
2025-12-12T13:52:20.489 [DEBUG] [Thread-70686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:52:20.489 [DEBUG] [Thread-70686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:52:20.489 [DEBUG] [Thread-70686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:52:20.490 [DEBUG] [Thread-70686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:52:20.514 [INFO] [Thread-70686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:52:20.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:52:21.171 [DEBUG] [Thread-70686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:52:21.172 [DEBUG] [Thread-70686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:52:21.172 [DEBUG] [Thread-70686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:52:21.213 [DEBUG] [Thread-70686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:52:21.213 [DEBUG] [Thread-70686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:52:21.216 [DEBUG] [Thread-70686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:52:21.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:52:21.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:52:21.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:52:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:52:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:52:21.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:52:21.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:52:21.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:52:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:52:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.494192 -999.00  +21.80  40.38     24   +0.50 1 1 2 1 1   888    0 21.09 -22.78 ----- 40.5 40.4 310.8 58.4 26.3 -25.6 25.8 -26.1 26.0 -26.3 26.7 -23.2
2025-12-12T13:52:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:52:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:52:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.494192
2025-12-12T13:52:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:52:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:52:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:52:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:52:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:52:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:52:13', tmtdew=24.01, humidity=19.52, cloud=0.0, wind=44.27, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:51:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:52:21.241 [DEBUG] [Thread-70686] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:52:21.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:52:21.336 [DEBUG] [Thread-70689] [transport.py] [_log()] starting thread (client mode): 0xfabc5c30
2025-12-12T13:52:21.336 [DEBUG] [Thread-70689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:52:21.352 [DEBUG] [Thread-70689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:52:21.352 [INFO] [Thread-70689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] client lang: <none>
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] server lang: <none>
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] kex follows: False
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:52:21.360 [DEBUG] [Thread-70689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:52:21.361 [DEBUG] [Thread-70689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:52:21.361 [DEBUG] [Thread-70689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:52:21.361 [DEBUG] [Thread-70689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:52:21.361 [DEBUG] [Thread-70689] [transport.py] [_log()] Compression: none
2025-12-12T13:52:21.361 [DEBUG] [Thread-70689] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:52:21.420 [DEBUG] [Thread-70689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:52:21.421 [DEBUG] [Thread-70689] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:52:21.421 [DEBUG] [Thread-70689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:52:21.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:52:21.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:52:21.476 [DEBUG] [Thread-70689] [transport.py] [_log()] userauth is OK
2025-12-12T13:52:21.477 [DEBUG] [Thread-70689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:52:21.477 [DEBUG] [Thread-70689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:52:21.477 [DEBUG] [Thread-70689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:52:21.477 [DEBUG] [Thread-70689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:52:21.496 [INFO] [Thread-70689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:52:21.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:52:21.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:52:22.344 [DEBUG] [Thread-70689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:52:22.344 [DEBUG] [Thread-70689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:52:22.392 [DEBUG] [Thread-70689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:52:22.392 [DEBUG] [Thread-70689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:52:22.401 [DEBUG] [Thread-70689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:52:22.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:52:22.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:52:22.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:52:22.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:52:22.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:52:22.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:52:22.437 [DEBUG] [Thread-70689] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:52:34.079 [DEBUG] [Thread-70691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:45.840 [DEBUG] [Thread-70692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:47.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:47.542 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:49.121 [DEBUG] [Thread-70693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:52:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:52:52.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:52:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:52:53.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 52, 45), 24.91, 18.64, 0.0, 50.23, 21.18, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:52:53.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:52:45
2025-12-12T13:52:53.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:52:53.414 [DEBUG] [Thread-70694] [transport.py] [_log()] starting thread (client mode): 0xf81f0d90
2025-12-12T13:52:53.414 [DEBUG] [Thread-70694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:52:53.435 [DEBUG] [Thread-70694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:52:53.436 [INFO] [Thread-70694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] client lang: <none>
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] server lang: <none>
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] kex follows: False
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] Compression: none
2025-12-12T13:52:53.439 [DEBUG] [Thread-70694] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:52:53.456 [DEBUG] [Thread-70694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:52:53.457 [DEBUG] [Thread-70694] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:52:53.457 [DEBUG] [Thread-70694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:52:53.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:52:53.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:52:53.459 [DEBUG] [Thread-70694] [transport.py] [_log()] userauth is OK
2025-12-12T13:52:53.460 [DEBUG] [Thread-70694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:52:53.460 [DEBUG] [Thread-70694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:52:53.460 [DEBUG] [Thread-70694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:52:53.460 [DEBUG] [Thread-70694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:52:53.478 [INFO] [Thread-70694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:52:53.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:52:54.125 [DEBUG] [Thread-70694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:52:54.125 [DEBUG] [Thread-70694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:52:54.126 [DEBUG] [Thread-70694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:52:54.166 [DEBUG] [Thread-70694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:52:54.166 [DEBUG] [Thread-70694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:52:54.169 [DEBUG] [Thread-70694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:52:54.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:52:54.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:52:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:52:54.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:52:54.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:52:54.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:52:54.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:52:54.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:52:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:52:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.494539 -999.00  +21.80  42.30     23   +0.10 1 1 2 1 1   888    0 20.48 -26.50 ----- 44.7 42.3 297.6 52.8 26.2 -27.2 25.8 -25.5 25.9 -24.3 26.6 -24.8
2025-12-12T13:52:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:52:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:52:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.494539
2025-12-12T13:52:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:52:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:52:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:52:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:52:54.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:52:54.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:52:45', tmtdew=24.91, humidity=18.64, cloud=0.0, wind=50.23, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:52:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:52:54.193 [DEBUG] [Thread-70694] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:52:54.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:52:54.290 [DEBUG] [Thread-70697] [transport.py] [_log()] starting thread (client mode): 0xf81c2fb0
2025-12-12T13:52:54.290 [DEBUG] [Thread-70697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:52:54.305 [DEBUG] [Thread-70697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:52:54.305 [INFO] [Thread-70697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] client lang: <none>
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] server lang: <none>
2025-12-12T13:52:54.313 [DEBUG] [Thread-70697] [transport.py] [_log()] kex follows: False
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] Compression: none
2025-12-12T13:52:54.314 [DEBUG] [Thread-70697] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:52:54.372 [DEBUG] [Thread-70697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:52:54.373 [DEBUG] [Thread-70697] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:52:54.373 [DEBUG] [Thread-70697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:52:54.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:52:54.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:52:54.428 [DEBUG] [Thread-70697] [transport.py] [_log()] userauth is OK
2025-12-12T13:52:54.428 [DEBUG] [Thread-70697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:52:54.429 [DEBUG] [Thread-70697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:52:54.429 [DEBUG] [Thread-70697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:52:54.429 [DEBUG] [Thread-70697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:52:54.451 [INFO] [Thread-70697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:52:54.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:52:54.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:52:55.278 [DEBUG] [Thread-70697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:52:55.278 [DEBUG] [Thread-70697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:52:55.326 [DEBUG] [Thread-70697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:52:55.326 [DEBUG] [Thread-70697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:52:55.335 [DEBUG] [Thread-70697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:52:55.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:52:55.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:52:55.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:52:55.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:52:55.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:52:55.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:52:55.370 [DEBUG] [Thread-70697] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:53:04.155 [DEBUG] [Thread-70699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:19.199 [DEBUG] [Thread-70700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:53:25.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:53:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:53:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 53, 17), 24.81, 18.78, 0.0, 52.88, 21.19, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:53:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:53:17
2025-12-12T13:53:26.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:53:26.336 [DEBUG] [Thread-70701] [transport.py] [_log()] starting thread (client mode): 0xf81c1570
2025-12-12T13:53:26.336 [DEBUG] [Thread-70701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:53:26.357 [DEBUG] [Thread-70701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:53:26.357 [INFO] [Thread-70701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:53:26.360 [DEBUG] [Thread-70701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:53:26.360 [DEBUG] [Thread-70701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] client lang: <none>
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] server lang: <none>
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] kex follows: False
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:53:26.361 [DEBUG] [Thread-70701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:53:26.362 [DEBUG] [Thread-70701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:53:26.362 [DEBUG] [Thread-70701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:53:26.362 [DEBUG] [Thread-70701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:53:26.362 [DEBUG] [Thread-70701] [transport.py] [_log()] Compression: none
2025-12-12T13:53:26.362 [DEBUG] [Thread-70701] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:53:26.379 [DEBUG] [Thread-70701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:53:26.380 [DEBUG] [Thread-70701] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:53:26.380 [DEBUG] [Thread-70701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:53:26.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:53:26.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:53:26.382 [DEBUG] [Thread-70701] [transport.py] [_log()] userauth is OK
2025-12-12T13:53:26.383 [DEBUG] [Thread-70701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:53:26.383 [DEBUG] [Thread-70701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:53:26.383 [DEBUG] [Thread-70701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:53:26.383 [DEBUG] [Thread-70701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:53:26.398 [INFO] [Thread-70701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:53:26.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:53:27.034 [DEBUG] [Thread-70701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:53:27.035 [DEBUG] [Thread-70701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:53:27.035 [DEBUG] [Thread-70701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:53:27.076 [DEBUG] [Thread-70701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:53:27.076 [DEBUG] [Thread-70701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:53:27.080 [DEBUG] [Thread-70701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:53:27.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:53:27.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:53:27.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:53:27.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:53:27.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:53:27.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:53:27.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:53:27.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:53:27.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:53:27.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.494886 -999.00  +21.70  30.81     24   +0.30 1 1 2 1 1   888    0 21.32 -32.18 ----- 40.5 30.8 312.8 53.9 26.2 -24.5 25.6 -26.6 25.8 -24.1 26.4 -23.4
2025-12-12T13:53:27.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:53:27.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:53:27.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.494886
2025-12-12T13:53:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:53:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:53:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:53:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:53:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:53:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:53:17', tmtdew=24.81, humidity=18.78, cloud=0.0, wind=52.88, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:52:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:53:27.109 [DEBUG] [Thread-70701] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:53:27.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:53:27.204 [DEBUG] [Thread-70704] [transport.py] [_log()] starting thread (client mode): 0xf57025f0
2025-12-12T13:53:27.205 [DEBUG] [Thread-70704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:53:27.219 [DEBUG] [Thread-70704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:53:27.219 [INFO] [Thread-70704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] client lang: <none>
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] server lang: <none>
2025-12-12T13:53:27.227 [DEBUG] [Thread-70704] [transport.py] [_log()] kex follows: False
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] Compression: none
2025-12-12T13:53:27.228 [DEBUG] [Thread-70704] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:53:27.288 [DEBUG] [Thread-70704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:53:27.288 [DEBUG] [Thread-70704] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:53:27.289 [DEBUG] [Thread-70704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:53:27.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:53:27.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:53:27.344 [DEBUG] [Thread-70704] [transport.py] [_log()] userauth is OK
2025-12-12T13:53:27.344 [DEBUG] [Thread-70704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:53:27.344 [DEBUG] [Thread-70704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:53:27.344 [DEBUG] [Thread-70704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:53:27.345 [DEBUG] [Thread-70704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:53:27.363 [INFO] [Thread-70704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:53:27.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:53:27.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:53:28.242 [DEBUG] [Thread-70704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:53:28.242 [DEBUG] [Thread-70704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:53:28.290 [DEBUG] [Thread-70704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:53:28.290 [DEBUG] [Thread-70704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:53:28.299 [DEBUG] [Thread-70704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:53:28.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:53:28.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:53:28.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:53:28.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:53:28.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:53:28.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:53:28.333 [DEBUG] [Thread-70704] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:53:34.231 [DEBUG] [Thread-70706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:45.887 [DEBUG] [Thread-70707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:47.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:47.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:49.287 [DEBUG] [Thread-70708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:53:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:53:58.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:53:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:53:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 53, 49), 25.36, 18.18, 0.0, 53.85, 22.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:53:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:53:49
2025-12-12T13:53:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:53:59.344 [DEBUG] [Thread-70709] [transport.py] [_log()] starting thread (client mode): 0xf575c0a0
2025-12-12T13:53:59.344 [DEBUG] [Thread-70709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:53:59.364 [DEBUG] [Thread-70709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:53:59.364 [INFO] [Thread-70709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:53:59.367 [DEBUG] [Thread-70709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:53:59.367 [DEBUG] [Thread-70709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] client lang: <none>
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] server lang: <none>
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] kex follows: False
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] Compression: none
2025-12-12T13:53:59.368 [DEBUG] [Thread-70709] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:53:59.383 [DEBUG] [Thread-70709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:53:59.383 [DEBUG] [Thread-70709] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:53:59.383 [DEBUG] [Thread-70709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:53:59.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:53:59.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:53:59.384 [DEBUG] [Thread-70709] [transport.py] [_log()] userauth is OK
2025-12-12T13:53:59.384 [DEBUG] [Thread-70709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:53:59.384 [DEBUG] [Thread-70709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:53:59.384 [DEBUG] [Thread-70709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:53:59.384 [DEBUG] [Thread-70709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:53:59.399 [INFO] [Thread-70709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:53:59.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:54:00.016 [DEBUG] [Thread-70709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:54:00.017 [DEBUG] [Thread-70709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:54:00.017 [DEBUG] [Thread-70709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:54:00.058 [DEBUG] [Thread-70709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:54:00.058 [DEBUG] [Thread-70709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:54:00.060 [DEBUG] [Thread-70709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:54:00.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:54:00.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:54:00.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:54:00.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:54:00.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:54:00.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:54:00.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:54:00.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:54:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:54:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.495234 -999.00  +21.50  43.61     23   +0.00 1 1 2 1 1   888    0 21.25 -32.13 ----- 39.5 43.6 330.6 58.9 26.2 -25.8 25.8 -25.2 25.9 -22.9 26.6 -23.2
2025-12-12T13:54:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:54:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:54:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.495234
2025-12-12T13:54:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:54:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:54:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:54:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:54:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:54:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:53:49', tmtdew=25.36, humidity=18.18, cloud=0.0, wind=53.85, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:53:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:54:00.080 [DEBUG] [Thread-70709] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:54:00.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:54:00.166 [DEBUG] [Thread-70712] [transport.py] [_log()] starting thread (client mode): 0xf81f0ee0
2025-12-12T13:54:00.166 [DEBUG] [Thread-70712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:54:00.182 [DEBUG] [Thread-70712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:54:00.182 [INFO] [Thread-70712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] client lang: <none>
2025-12-12T13:54:00.189 [DEBUG] [Thread-70712] [transport.py] [_log()] server lang: <none>
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] kex follows: False
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] Compression: none
2025-12-12T13:54:00.190 [DEBUG] [Thread-70712] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:54:00.246 [DEBUG] [Thread-70712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:54:00.246 [DEBUG] [Thread-70712] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:54:00.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:54:00.246 [DEBUG] [Thread-70712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:54:00.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:54:00.304 [DEBUG] [Thread-70712] [transport.py] [_log()] userauth is OK
2025-12-12T13:54:00.304 [DEBUG] [Thread-70712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:54:00.304 [DEBUG] [Thread-70712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:54:00.304 [DEBUG] [Thread-70712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:54:00.304 [DEBUG] [Thread-70712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:54:00.321 [INFO] [Thread-70712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:54:00.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:54:00.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:54:01.149 [DEBUG] [Thread-70712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:54:01.150 [DEBUG] [Thread-70712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:54:01.197 [DEBUG] [Thread-70712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:54:01.197 [DEBUG] [Thread-70712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:54:01.205 [DEBUG] [Thread-70712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:54:01.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:54:01.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:54:01.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:54:01.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:54:01.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:54:01.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:54:01.236 [DEBUG] [Thread-70712] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:54:04.313 [DEBUG] [Thread-70714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:54:19.351 [DEBUG] [Thread-70715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:54:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:54:31.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:54:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:54:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 54, 21), 25.31, 18.23, 0.0, 53.18, 21.98, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:54:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:54:21
2025-12-12T13:54:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:54:32.206 [DEBUG] [Thread-70716] [transport.py] [_log()] starting thread (client mode): 0xfabc52a0
2025-12-12T13:54:32.206 [DEBUG] [Thread-70716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:54:32.228 [DEBUG] [Thread-70716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:54:32.228 [INFO] [Thread-70716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:54:32.231 [DEBUG] [Thread-70716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:54:32.231 [DEBUG] [Thread-70716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:54:32.231 [DEBUG] [Thread-70716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:54:32.231 [DEBUG] [Thread-70716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:54:32.231 [DEBUG] [Thread-70716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] client lang: <none>
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] server lang: <none>
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] kex follows: False
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] Compression: none
2025-12-12T13:54:32.232 [DEBUG] [Thread-70716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:54:32.248 [DEBUG] [Thread-70716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:54:32.249 [DEBUG] [Thread-70716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:54:32.249 [DEBUG] [Thread-70716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:54:32.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:54:32.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:54:32.251 [DEBUG] [Thread-70716] [transport.py] [_log()] userauth is OK
2025-12-12T13:54:32.251 [DEBUG] [Thread-70716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:54:32.251 [DEBUG] [Thread-70716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:54:32.251 [DEBUG] [Thread-70716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:54:32.251 [DEBUG] [Thread-70716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:54:32.285 [INFO] [Thread-70716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:54:32.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:54:32.904 [DEBUG] [Thread-70716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:54:32.904 [DEBUG] [Thread-70716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:54:32.905 [DEBUG] [Thread-70716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:54:32.945 [DEBUG] [Thread-70716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:54:32.945 [DEBUG] [Thread-70716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:54:32.948 [DEBUG] [Thread-70716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:54:32.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:54:32.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:54:32.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:54:32.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:54:32.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:54:32.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:54:32.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:54:32.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:54:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:54:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.495581 -999.00  +21.70  60.58     23   -0.10 1 1 3 1 1   888    0 20.99 -32.03 ----- 49.8 60.6 306.4 64.1 26.2 -27.5 25.8 -26.0 25.9 -23.6 26.6 -24.3
2025-12-12T13:54:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:54:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:54:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.495581
2025-12-12T13:54:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:54:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:54:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:54:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:54:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:54:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:54:21', tmtdew=25.31, humidity=18.23, cloud=0.0, wind=53.18, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:53:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:54:32.975 [DEBUG] [Thread-70716] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:54:33.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:54:33.070 [DEBUG] [Thread-70719] [transport.py] [_log()] starting thread (client mode): 0xfabc57b0
2025-12-12T13:54:33.070 [DEBUG] [Thread-70719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:54:33.085 [DEBUG] [Thread-70719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:54:33.085 [INFO] [Thread-70719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:54:33.092 [DEBUG] [Thread-70719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:54:33.092 [DEBUG] [Thread-70719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] client lang: <none>
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] server lang: <none>
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] kex follows: False
2025-12-12T13:54:33.093 [DEBUG] [Thread-70719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:54:33.094 [DEBUG] [Thread-70719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:54:33.094 [DEBUG] [Thread-70719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:54:33.094 [DEBUG] [Thread-70719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:54:33.094 [DEBUG] [Thread-70719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:54:33.094 [DEBUG] [Thread-70719] [transport.py] [_log()] Compression: none
2025-12-12T13:54:33.094 [DEBUG] [Thread-70719] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:54:33.151 [DEBUG] [Thread-70719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:54:33.152 [DEBUG] [Thread-70719] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:54:33.152 [DEBUG] [Thread-70719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:54:33.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:54:33.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:54:33.208 [DEBUG] [Thread-70719] [transport.py] [_log()] userauth is OK
2025-12-12T13:54:33.208 [DEBUG] [Thread-70719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:54:33.208 [DEBUG] [Thread-70719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:54:33.208 [DEBUG] [Thread-70719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:54:33.208 [DEBUG] [Thread-70719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:54:33.234 [INFO] [Thread-70719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:54:33.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:54:33.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:54:34.125 [DEBUG] [Thread-70719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:54:34.125 [DEBUG] [Thread-70719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:54:34.173 [DEBUG] [Thread-70719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:54:34.173 [DEBUG] [Thread-70719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:54:34.182 [DEBUG] [Thread-70719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:54:34.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:54:34.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:54:34.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:54:34.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:54:34.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:54:34.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:54:34.216 [DEBUG] [Thread-70719] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:54:34.380 [DEBUG] [Thread-70721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:54:45.919 [DEBUG] [Thread-70722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:54:47.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:54:47.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:54:49.419 [DEBUG] [Thread-70723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:04.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:55:04.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:55:04.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:55:04.447 [DEBUG] [Thread-70724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:04.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 54, 53), 25.14, 18.28, 0.0, 49.81, 21.74, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:55:04.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:54:53
2025-12-12T13:55:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:55:05.197 [DEBUG] [Thread-70725] [transport.py] [_log()] starting thread (client mode): 0xfabc61a0
2025-12-12T13:55:05.197 [DEBUG] [Thread-70725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:55:05.216 [DEBUG] [Thread-70725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:55:05.217 [INFO] [Thread-70725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:55:05.218 [DEBUG] [Thread-70725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] client lang: <none>
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] server lang: <none>
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] kex follows: False
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] Compression: none
2025-12-12T13:55:05.219 [DEBUG] [Thread-70725] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:55:05.231 [DEBUG] [Thread-70725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:55:05.232 [DEBUG] [Thread-70725] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:55:05.232 [DEBUG] [Thread-70725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:55:05.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:55:05.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:55:05.234 [DEBUG] [Thread-70725] [transport.py] [_log()] userauth is OK
2025-12-12T13:55:05.234 [DEBUG] [Thread-70725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:55:05.234 [DEBUG] [Thread-70725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:55:05.234 [DEBUG] [Thread-70725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:55:05.234 [DEBUG] [Thread-70725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:55:05.247 [INFO] [Thread-70725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:55:05.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:55:07.326 [DEBUG] [Thread-70725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:55:07.327 [DEBUG] [Thread-70725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:55:07.327 [DEBUG] [Thread-70725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:55:07.368 [DEBUG] [Thread-70725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:55:07.368 [DEBUG] [Thread-70725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:55:07.371 [DEBUG] [Thread-70725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:55:07.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:55:07.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:55:07.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:55:07.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:55:07.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:55:07.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:55:07.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:55:07.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:55:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:55:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.495928 -999.00  +22.10  44.14     23   +0.20 1 1 2 1 1   888    0 21.39 -30.83 ----- 37.7 44.1 311.2 57.2 26.3 -24.2 25.6 -25.3 25.8 -24.9 26.6 -22.5
2025-12-12T13:55:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:55:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:55:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.495928
2025-12-12T13:55:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:55:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:55:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:55:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:55:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:55:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:54:53', tmtdew=25.14, humidity=18.28, cloud=0.0, wind=49.81, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:54:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:55:07.398 [DEBUG] [Thread-70725] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:55:07.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:55:07.493 [DEBUG] [Thread-70728] [transport.py] [_log()] starting thread (client mode): 0xf570f250
2025-12-12T13:55:07.493 [DEBUG] [Thread-70728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:55:07.511 [DEBUG] [Thread-70728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:55:07.512 [INFO] [Thread-70728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:55:07.519 [DEBUG] [Thread-70728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:55:07.519 [DEBUG] [Thread-70728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:55:07.519 [DEBUG] [Thread-70728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] client lang: <none>
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] server lang: <none>
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] kex follows: False
2025-12-12T13:55:07.520 [DEBUG] [Thread-70728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:55:07.521 [DEBUG] [Thread-70728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:55:07.521 [DEBUG] [Thread-70728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:55:07.521 [DEBUG] [Thread-70728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:55:07.521 [DEBUG] [Thread-70728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:55:07.521 [DEBUG] [Thread-70728] [transport.py] [_log()] Compression: none
2025-12-12T13:55:07.521 [DEBUG] [Thread-70728] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:55:07.575 [DEBUG] [Thread-70728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:55:07.576 [DEBUG] [Thread-70728] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:55:07.576 [DEBUG] [Thread-70728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:55:07.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:55:07.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:55:07.632 [DEBUG] [Thread-70728] [transport.py] [_log()] userauth is OK
2025-12-12T13:55:07.632 [DEBUG] [Thread-70728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:55:07.632 [DEBUG] [Thread-70728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:55:07.632 [DEBUG] [Thread-70728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:55:07.632 [DEBUG] [Thread-70728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:55:07.651 [INFO] [Thread-70728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:55:07.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:55:07.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:55:08.510 [DEBUG] [Thread-70728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:55:08.511 [DEBUG] [Thread-70728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:55:08.559 [DEBUG] [Thread-70728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:55:08.559 [DEBUG] [Thread-70728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:55:08.567 [DEBUG] [Thread-70728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:55:08.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:55:08.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:55:08.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:55:08.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:55:08.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:55:08.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:55:08.602 [DEBUG] [Thread-70728] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:55:19.472 [DEBUG] [Thread-70730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:34.508 [DEBUG] [Thread-70731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:38.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:55:38.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:55:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:55:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 55, 25), 25.21, 18.21, 0.0, 48.91, 21.87, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:55:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:55:25
2025-12-12T13:55:39.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:55:39.582 [DEBUG] [Thread-70732] [transport.py] [_log()] starting thread (client mode): 0xfabc7fa0
2025-12-12T13:55:39.582 [DEBUG] [Thread-70732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:55:39.602 [DEBUG] [Thread-70732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:55:39.602 [INFO] [Thread-70732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:39.605 [DEBUG] [Thread-70732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] client lang: <none>
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] server lang: <none>
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] kex follows: False
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] Compression: none
2025-12-12T13:55:39.606 [DEBUG] [Thread-70732] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:55:39.624 [DEBUG] [Thread-70732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:55:39.624 [DEBUG] [Thread-70732] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:55:39.625 [DEBUG] [Thread-70732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:55:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:55:39.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:55:39.627 [DEBUG] [Thread-70732] [transport.py] [_log()] userauth is OK
2025-12-12T13:55:39.627 [DEBUG] [Thread-70732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:55:39.627 [DEBUG] [Thread-70732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:55:39.627 [DEBUG] [Thread-70732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:55:39.627 [DEBUG] [Thread-70732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:55:39.662 [INFO] [Thread-70732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:55:39.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:55:40.279 [DEBUG] [Thread-70732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:55:40.279 [DEBUG] [Thread-70732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:55:40.280 [DEBUG] [Thread-70732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:55:40.320 [DEBUG] [Thread-70732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:55:40.320 [DEBUG] [Thread-70732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:55:40.323 [DEBUG] [Thread-70732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:55:40.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:55:40.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:55:40.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:55:40.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:55:40.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:55:40.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:55:40.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:55:40.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:55:40.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:55:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.496622 -999.00  +21.20  45.26     24   +0.10 1 1 2 1 1   888    0 21.42 -30.01 ----- 56.8 45.3 310.0 63.9 26.1 -25.5 25.6 -27.3 25.8 -23.8 26.5 -22.4
2025-12-12T13:55:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:55:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:55:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.496622
2025-12-12T13:55:40.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:55:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:55:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:55:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:55:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:55:40.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:55:25', tmtdew=25.21, humidity=18.21, cloud=0.0, wind=48.91, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:55:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:55:40.345 [DEBUG] [Thread-70732] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:55:40.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:55:40.442 [DEBUG] [Thread-70735] [transport.py] [_log()] starting thread (client mode): 0xfabc6140
2025-12-12T13:55:40.442 [DEBUG] [Thread-70735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:55:40.457 [DEBUG] [Thread-70735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:55:40.457 [INFO] [Thread-70735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] client lang: <none>
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] server lang: <none>
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] kex follows: False
2025-12-12T13:55:40.465 [DEBUG] [Thread-70735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:55:40.466 [DEBUG] [Thread-70735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:55:40.466 [DEBUG] [Thread-70735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:55:40.466 [DEBUG] [Thread-70735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:55:40.466 [DEBUG] [Thread-70735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:55:40.466 [DEBUG] [Thread-70735] [transport.py] [_log()] Compression: none
2025-12-12T13:55:40.466 [DEBUG] [Thread-70735] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:55:40.523 [DEBUG] [Thread-70735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:55:40.524 [DEBUG] [Thread-70735] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:55:40.524 [DEBUG] [Thread-70735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:55:40.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:55:40.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:55:40.579 [DEBUG] [Thread-70735] [transport.py] [_log()] userauth is OK
2025-12-12T13:55:40.579 [DEBUG] [Thread-70735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:55:40.579 [DEBUG] [Thread-70735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:55:40.580 [DEBUG] [Thread-70735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:55:40.580 [DEBUG] [Thread-70735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:55:40.599 [INFO] [Thread-70735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:55:40.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:55:40.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:55:41.443 [DEBUG] [Thread-70735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:55:41.444 [DEBUG] [Thread-70735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:55:41.492 [DEBUG] [Thread-70735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:55:41.492 [DEBUG] [Thread-70735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:55:41.501 [DEBUG] [Thread-70735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:55:41.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:55:41.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:55:41.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:55:41.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:55:41.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:55:41.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:55:41.535 [DEBUG] [Thread-70735] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:55:45.954 [DEBUG] [Thread-70737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:47.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:47.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:55:49.537 [DEBUG] [Thread-70738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:04.586 [DEBUG] [Thread-70739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:11.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:56:11.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:56:11.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:56:12.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 55, 57), 25.11, 18.19, 0.0, 49.77, 21.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:56:12.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:55:57
2025-12-12T13:56:12.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:56:12.497 [DEBUG] [Thread-70740] [transport.py] [_log()] starting thread (client mode): 0xf81f20e0
2025-12-12T13:56:12.497 [DEBUG] [Thread-70740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:56:12.517 [DEBUG] [Thread-70740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:56:12.518 [INFO] [Thread-70740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] client lang: <none>
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] server lang: <none>
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] kex follows: False
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] Compression: none
2025-12-12T13:56:12.521 [DEBUG] [Thread-70740] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:56:12.538 [DEBUG] [Thread-70740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:56:12.539 [DEBUG] [Thread-70740] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:56:12.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:56:12.540 [DEBUG] [Thread-70740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:56:12.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:56:12.542 [DEBUG] [Thread-70740] [transport.py] [_log()] userauth is OK
2025-12-12T13:56:12.542 [DEBUG] [Thread-70740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:56:12.542 [DEBUG] [Thread-70740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:56:12.542 [DEBUG] [Thread-70740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:56:12.542 [DEBUG] [Thread-70740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:56:12.566 [INFO] [Thread-70740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:56:12.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:56:13.225 [DEBUG] [Thread-70740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:56:13.226 [DEBUG] [Thread-70740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:56:13.226 [DEBUG] [Thread-70740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:56:13.266 [DEBUG] [Thread-70740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:56:13.266 [DEBUG] [Thread-70740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:56:13.269 [DEBUG] [Thread-70740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:56:13.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:56:13.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:56:13.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:56:13.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:56:13.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:56:13.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:56:13.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:56:13.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:56:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:56:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.496970 -999.00  +21.50  42.21     24   +0.30 1 1 2 1 1   888    0 20.49 -36.01 ----- 43.3 42.2 302.2 65.6 26.0 -26.6 25.5 -25.9 25.6 -26.0 26.4 -23.7
2025-12-12T13:56:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:56:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:56:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.496970
2025-12-12T13:56:13.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:56:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:56:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:56:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:56:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:56:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:55:57', tmtdew=25.11, humidity=18.19, cloud=0.0, wind=49.77, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:55:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:56:13.292 [DEBUG] [Thread-70740] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:56:13.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:56:13.388 [DEBUG] [Thread-70743] [transport.py] [_log()] starting thread (client mode): 0xf57020e0
2025-12-12T13:56:13.388 [DEBUG] [Thread-70743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:56:13.403 [DEBUG] [Thread-70743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:56:13.403 [INFO] [Thread-70743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:56:13.410 [DEBUG] [Thread-70743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:56:13.410 [DEBUG] [Thread-70743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:56:13.410 [DEBUG] [Thread-70743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] client lang: <none>
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] server lang: <none>
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] kex follows: False
2025-12-12T13:56:13.411 [DEBUG] [Thread-70743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:56:13.412 [DEBUG] [Thread-70743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:56:13.412 [DEBUG] [Thread-70743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:56:13.412 [DEBUG] [Thread-70743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:56:13.412 [DEBUG] [Thread-70743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:56:13.412 [DEBUG] [Thread-70743] [transport.py] [_log()] Compression: none
2025-12-12T13:56:13.412 [DEBUG] [Thread-70743] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:56:13.467 [DEBUG] [Thread-70743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:56:13.468 [DEBUG] [Thread-70743] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:56:13.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:56:13.469 [DEBUG] [Thread-70743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:56:13.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:56:13.523 [DEBUG] [Thread-70743] [transport.py] [_log()] userauth is OK
2025-12-12T13:56:13.524 [DEBUG] [Thread-70743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:56:13.524 [DEBUG] [Thread-70743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:56:13.524 [DEBUG] [Thread-70743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:56:13.524 [DEBUG] [Thread-70743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:56:13.543 [INFO] [Thread-70743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:56:13.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:56:13.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:56:14.381 [DEBUG] [Thread-70743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:56:14.381 [DEBUG] [Thread-70743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:56:14.429 [DEBUG] [Thread-70743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:56:14.429 [DEBUG] [Thread-70743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:56:14.437 [DEBUG] [Thread-70743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:56:14.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:56:14.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:56: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
2025-12-12T13:56:14.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:56:14.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:56:14.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:56:14.471 [DEBUG] [Thread-70743] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:56:19.615 [DEBUG] [Thread-70745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:34.647 [DEBUG] [Thread-70746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:56:44.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:56:44.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:56:45.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 56, 29), 25.04, 18.21, 0.0, 52.81, 21.71, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:56:45.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:56:29
2025-12-12T13:56:45.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:56:45.458 [DEBUG] [Thread-70747] [transport.py] [_log()] starting thread (client mode): 0xf813d3f0
2025-12-12T13:56:45.458 [DEBUG] [Thread-70747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:56:45.479 [DEBUG] [Thread-70747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:56:45.479 [INFO] [Thread-70747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:56:45.482 [DEBUG] [Thread-70747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:56:45.482 [DEBUG] [Thread-70747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:56:45.482 [DEBUG] [Thread-70747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:56:45.482 [DEBUG] [Thread-70747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:45.482 [DEBUG] [Thread-70747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:45.482 [DEBUG] [Thread-70747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] client lang: <none>
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] server lang: <none>
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] kex follows: False
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] Compression: none
2025-12-12T13:56:45.483 [DEBUG] [Thread-70747] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:56:45.500 [DEBUG] [Thread-70747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:56:45.500 [DEBUG] [Thread-70747] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:56:45.501 [DEBUG] [Thread-70747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:56:45.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:56:45.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:56:45.501 [DEBUG] [Thread-70747] [transport.py] [_log()] userauth is OK
2025-12-12T13:56:45.501 [DEBUG] [Thread-70747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:56:45.501 [DEBUG] [Thread-70747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:56:45.501 [DEBUG] [Thread-70747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:56:45.502 [DEBUG] [Thread-70747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:56:45.519 [INFO] [Thread-70747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:56:45.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:56:45.998 [DEBUG] [Thread-70749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:46.170 [DEBUG] [Thread-70747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:56:46.170 [DEBUG] [Thread-70747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:56:46.171 [DEBUG] [Thread-70747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:56:46.211 [DEBUG] [Thread-70747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:56:46.211 [DEBUG] [Thread-70747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:56:46.214 [DEBUG] [Thread-70747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:56:46.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:56:46.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:56:46.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:56:46.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:56:46.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:56:46.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:56:46.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:56:46.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:56:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:56:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.497317 -999.00  +21.60  49.92     24   +0.50 1 1 2 1 1   888    0 20.36 -42.97 ----- 47.0 49.9 312.2 58.6 25.9 -24.4 25.4 -25.9 25.4 -23.4 26.2 -22.8
2025-12-12T13:56:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:56:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:56:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.497317
2025-12-12T13:56:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:56:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:56:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:56:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:56:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:56:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:56:29', tmtdew=25.04, humidity=18.21, cloud=0.0, wind=52.81, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:56:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:56:46.238 [DEBUG] [Thread-70747] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:56:46.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:56:46.325 [DEBUG] [Thread-70751] [transport.py] [_log()] starting thread (client mode): 0xf813cb50
2025-12-12T13:56:46.326 [DEBUG] [Thread-70751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:56:46.341 [DEBUG] [Thread-70751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:56:46.341 [INFO] [Thread-70751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:56:46.348 [DEBUG] [Thread-70751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:56:46.348 [DEBUG] [Thread-70751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:56:46.348 [DEBUG] [Thread-70751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] client lang: <none>
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] server lang: <none>
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] kex follows: False
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] Compression: none
2025-12-12T13:56:46.349 [DEBUG] [Thread-70751] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:56:46.407 [DEBUG] [Thread-70751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:56:46.408 [DEBUG] [Thread-70751] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:56:46.408 [DEBUG] [Thread-70751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:56:46.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:56:46.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:56:46.463 [DEBUG] [Thread-70751] [transport.py] [_log()] userauth is OK
2025-12-12T13:56:46.464 [DEBUG] [Thread-70751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:56:46.464 [DEBUG] [Thread-70751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:56:46.464 [DEBUG] [Thread-70751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:56:46.464 [DEBUG] [Thread-70751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:56:46.483 [INFO] [Thread-70751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:56:46.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:56:46.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:56:47.343 [DEBUG] [Thread-70751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:56:47.343 [DEBUG] [Thread-70751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:56:47.391 [DEBUG] [Thread-70751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:56:47.391 [DEBUG] [Thread-70751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:56:47.400 [DEBUG] [Thread-70751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:56:47.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:56:47.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:56: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') -> 00000000
2025-12-12T13:56:47.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:56:47.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:56:47.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:56:47.434 [DEBUG] [Thread-70751] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:56:48.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:48.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:56:49.674 [DEBUG] [Thread-70753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:04.725 [DEBUG] [Thread-70754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:17.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:57:17.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:57:17.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:57:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 57, 1), 24.57, 19.22, 0.0, 45.38, 21.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:57:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:57:01
2025-12-12T13:57:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:57:18.498 [DEBUG] [Thread-70755] [transport.py] [_log()] starting thread (client mode): 0xf570cc70
2025-12-12T13:57:18.498 [DEBUG] [Thread-70755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:57:18.518 [DEBUG] [Thread-70755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:57:18.518 [INFO] [Thread-70755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] client lang: <none>
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] server lang: <none>
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] kex follows: False
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] Compression: none
2025-12-12T13:57:18.521 [DEBUG] [Thread-70755] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:57:18.540 [DEBUG] [Thread-70755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:57:18.540 [DEBUG] [Thread-70755] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:57:18.541 [DEBUG] [Thread-70755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:57:18.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:57:18.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:57:18.543 [DEBUG] [Thread-70755] [transport.py] [_log()] userauth is OK
2025-12-12T13:57:18.543 [DEBUG] [Thread-70755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:57:18.543 [DEBUG] [Thread-70755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:57:18.543 [DEBUG] [Thread-70755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:57:18.543 [DEBUG] [Thread-70755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:57:18.566 [INFO] [Thread-70755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:57:18.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:57:19.197 [DEBUG] [Thread-70755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:57:19.197 [DEBUG] [Thread-70755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:57:19.198 [DEBUG] [Thread-70755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:57:19.238 [DEBUG] [Thread-70755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:57:19.238 [DEBUG] [Thread-70755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:57:19.241 [DEBUG] [Thread-70755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:57:19.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:57:19.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:57:19.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:57:19.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:57:19.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:57:19.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:57:19.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:57:19.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:57:19.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:57:19.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.497664 -999.00  +21.30  59.88     24   +0.00 1 1 2 1 1   888    0 21.00 -42.55 ----- 48.7 59.9 311.6 62.1 25.9 -25.7 25.5 -25.3 25.6 -23.9 26.3 -23.4
2025-12-12T13:57:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:57:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:57:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.497664
2025-12-12T13:57:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:57:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:57:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:57:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:57:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:57:19.267 [DEBUG] [Thread-70755] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:57:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:57:01', tmtdew=24.57, humidity=19.22, cloud=0.0, wind=45.38, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:56:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:57:19.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:57:19.365 [DEBUG] [Thread-70758] [transport.py] [_log()] starting thread (client mode): 0xfabc5a80
2025-12-12T13:57:19.365 [DEBUG] [Thread-70758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:57:19.380 [DEBUG] [Thread-70758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:57:19.380 [INFO] [Thread-70758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:19.389 [DEBUG] [Thread-70758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] client lang: <none>
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] server lang: <none>
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] kex follows: False
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] Compression: none
2025-12-12T13:57:19.390 [DEBUG] [Thread-70758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:57:19.446 [DEBUG] [Thread-70758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:57:19.447 [DEBUG] [Thread-70758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:57:19.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:57:19.448 [DEBUG] [Thread-70758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:57:19.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:57:19.503 [DEBUG] [Thread-70758] [transport.py] [_log()] userauth is OK
2025-12-12T13:57:19.503 [DEBUG] [Thread-70758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:57:19.503 [DEBUG] [Thread-70758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:57:19.503 [DEBUG] [Thread-70758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:57:19.503 [DEBUG] [Thread-70758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:57:19.525 [INFO] [Thread-70758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:57:19.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:57:19.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:57:19.754 [DEBUG] [Thread-70760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:20.465 [DEBUG] [Thread-70758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:57:20.466 [DEBUG] [Thread-70758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:57:20.514 [DEBUG] [Thread-70758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:57:20.514 [DEBUG] [Thread-70758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:57:20.522 [DEBUG] [Thread-70758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:57:20.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:57:20.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:57:20.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:57:20.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:57:20.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:57:20.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:57:20.555 [DEBUG] [Thread-70758] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:57:34.796 [DEBUG] [Thread-70761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:46.034 [DEBUG] [Thread-70762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:48.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:48.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:49.823 [DEBUG] [Thread-70763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:57:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:57:50.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:57:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:57:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 57, 33), 25.63, 17.85, 0.0, 47.88, 22.69, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:57:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:57:33
2025-12-12T13:57:51.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:57:51.542 [DEBUG] [Thread-70764] [transport.py] [_log()] starting thread (client mode): 0xf813c820
2025-12-12T13:57:51.542 [DEBUG] [Thread-70764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:57:51.563 [DEBUG] [Thread-70764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:57:51.563 [INFO] [Thread-70764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] client lang: <none>
2025-12-12T13:57:51.566 [DEBUG] [Thread-70764] [transport.py] [_log()] server lang: <none>
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] kex follows: False
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] Compression: none
2025-12-12T13:57:51.567 [DEBUG] [Thread-70764] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:57:51.583 [DEBUG] [Thread-70764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:57:51.583 [DEBUG] [Thread-70764] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:57:51.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:57:51.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:57:51.583 [DEBUG] [Thread-70764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:57:51.584 [DEBUG] [Thread-70764] [transport.py] [_log()] userauth is OK
2025-12-12T13:57:51.584 [DEBUG] [Thread-70764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:57:51.584 [DEBUG] [Thread-70764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:57:51.584 [DEBUG] [Thread-70764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:57:51.584 [DEBUG] [Thread-70764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:57:51.596 [INFO] [Thread-70764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:57:51.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:57:52.645 [DEBUG] [Thread-70764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:57:52.645 [DEBUG] [Thread-70764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:57:52.645 [DEBUG] [Thread-70764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:57:52.686 [DEBUG] [Thread-70764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:57:52.687 [DEBUG] [Thread-70764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:57:52.689 [DEBUG] [Thread-70764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:57:52.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:57:52.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:57:52.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:57:52.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:57:52.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:57:52.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:57:52.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.498011 -999.00  +20.90  44.06     25   +0.20 1 1 2 1 1   888    0 20.71 -43.84 ----- 38.4 44.1 294.8 60.0 25.8 -24.7 25.3 -26.7 25.5 -23.0 26.2 -23.3
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.498011
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:57:52.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:57:33', tmtdew=25.63, humidity=17.85, cloud=0.0, wind=47.88, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:57:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:57:52.707 [DEBUG] [Thread-70764] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:57:52.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:57:52.794 [DEBUG] [Thread-70767] [transport.py] [_log()] starting thread (client mode): 0xf813c850
2025-12-12T13:57:52.794 [DEBUG] [Thread-70767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:57:52.811 [DEBUG] [Thread-70767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:57:52.811 [INFO] [Thread-70767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:57:52.818 [DEBUG] [Thread-70767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:57:52.818 [DEBUG] [Thread-70767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:57:52.818 [DEBUG] [Thread-70767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] client lang: <none>
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] server lang: <none>
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] kex follows: False
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] Compression: none
2025-12-12T13:57:52.819 [DEBUG] [Thread-70767] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:57:52.873 [DEBUG] [Thread-70767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:57:52.874 [DEBUG] [Thread-70767] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:57:52.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:57:52.874 [DEBUG] [Thread-70767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:57:52.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:57:52.931 [DEBUG] [Thread-70767] [transport.py] [_log()] userauth is OK
2025-12-12T13:57:52.931 [DEBUG] [Thread-70767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:57:52.931 [DEBUG] [Thread-70767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:57:52.931 [DEBUG] [Thread-70767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:57:52.931 [DEBUG] [Thread-70767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:57:52.945 [INFO] [Thread-70767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:57:52.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:57:52.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:57:53.823 [DEBUG] [Thread-70767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:57:53.823 [DEBUG] [Thread-70767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:57:53.871 [DEBUG] [Thread-70767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:57:53.871 [DEBUG] [Thread-70767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:57:53.879 [DEBUG] [Thread-70767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:57:53.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:57:53.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:57:53.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:57:53.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:57:53.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:57:53.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:57:53.911 [DEBUG] [Thread-70767] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:58:04.853 [DEBUG] [Thread-70769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:19.898 [DEBUG] [Thread-70770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:23.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:58:23.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:58:23.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:58:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 58, 5), 25.11, 18.59, 0.0, 46.95, 21.69, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:58:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:58:05
2025-12-12T13:58:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:58:24.900 [DEBUG] [Thread-70771] [transport.py] [_log()] starting thread (client mode): 0xfabc6230
2025-12-12T13:58:24.900 [DEBUG] [Thread-70771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:58:24.912 [DEBUG] [Thread-70771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:58:24.912 [INFO] [Thread-70771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] client lang: <none>
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] server lang: <none>
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] kex follows: False
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] Compression: none
2025-12-12T13:58:24.915 [DEBUG] [Thread-70771] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:58:24.932 [DEBUG] [Thread-70771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:58:24.933 [DEBUG] [Thread-70771] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:58:24.933 [DEBUG] [Thread-70771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:58:24.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:58:24.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:58:24.935 [DEBUG] [Thread-70771] [transport.py] [_log()] userauth is OK
2025-12-12T13:58:24.935 [DEBUG] [Thread-70771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:58:24.935 [DEBUG] [Thread-70771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:58:24.935 [DEBUG] [Thread-70771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:58:24.935 [DEBUG] [Thread-70771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:58:24.959 [INFO] [Thread-70771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:58:24.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:58:25.620 [DEBUG] [Thread-70771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:58:25.620 [DEBUG] [Thread-70771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:58:25.620 [DEBUG] [Thread-70771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:58:25.661 [DEBUG] [Thread-70771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:58:25.661 [DEBUG] [Thread-70771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:58:25.665 [DEBUG] [Thread-70771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:58:25.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:58:25.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:58:25.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:58:25.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:58:25.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:58:25.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:58:25.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:58:25.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:58:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:58:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.498359 -999.00  +21.30  36.81     24   +0.00 1 1 2 1 1   888    0 20.27 -51.16 ----- 37.0 36.8 303.2 46.6 25.8 -25.5 25.4 -25.1 25.4 -24.5 26.2 -24.4
2025-12-12T13:58:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:58:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:58:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.498359
2025-12-12T13:58:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:58:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:58:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:58:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:58:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:58:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:58:05', tmtdew=25.11, humidity=18.59, cloud=0.0, wind=46.95, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:57:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:58:25.692 [DEBUG] [Thread-70771] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:58:25.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:58:25.786 [DEBUG] [Thread-70774] [transport.py] [_log()] starting thread (client mode): 0xfabc6680
2025-12-12T13:58:25.786 [DEBUG] [Thread-70774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:58:25.800 [DEBUG] [Thread-70774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:58:25.800 [INFO] [Thread-70774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:58:25.808 [DEBUG] [Thread-70774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:58:25.808 [DEBUG] [Thread-70774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:58:25.808 [DEBUG] [Thread-70774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:58:25.808 [DEBUG] [Thread-70774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:25.808 [DEBUG] [Thread-70774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] client lang: <none>
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] server lang: <none>
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] kex follows: False
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] Compression: none
2025-12-12T13:58:25.809 [DEBUG] [Thread-70774] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:58:25.867 [DEBUG] [Thread-70774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:58:25.868 [DEBUG] [Thread-70774] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:58:25.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:58:25.868 [DEBUG] [Thread-70774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:58:25.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:58:25.923 [DEBUG] [Thread-70774] [transport.py] [_log()] userauth is OK
2025-12-12T13:58:25.923 [DEBUG] [Thread-70774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:58:25.924 [DEBUG] [Thread-70774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:58:25.924 [DEBUG] [Thread-70774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:58:25.924 [DEBUG] [Thread-70774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:58:25.942 [INFO] [Thread-70774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:58:25.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:58:25.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:58:26.813 [DEBUG] [Thread-70774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:58:26.813 [DEBUG] [Thread-70774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:58:26.864 [DEBUG] [Thread-70774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:58:26.864 [DEBUG] [Thread-70774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:58:26.876 [DEBUG] [Thread-70774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:58:26.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:58:26.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:58:26.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:58:26.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:58:26.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:58:26.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:58:26.911 [DEBUG] [Thread-70774] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:58:34.932 [DEBUG] [Thread-70776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:46.077 [DEBUG] [Thread-70777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:48.416 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:48.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:49.971 [DEBUG] [Thread-70778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:58:56.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:58:56.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:58:56.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:58:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 58, 37), 25.38, 18.01, 0.0, 46.86, 22.07, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:58:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:58:37
2025-12-12T13:58:57.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:58:57.909 [DEBUG] [Thread-70779] [transport.py] [_log()] starting thread (client mode): 0xf574cfa0
2025-12-12T13:58:57.909 [DEBUG] [Thread-70779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:58:57.929 [DEBUG] [Thread-70779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:58:57.929 [INFO] [Thread-70779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:58:57.932 [DEBUG] [Thread-70779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:58:57.932 [DEBUG] [Thread-70779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] client lang: <none>
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] server lang: <none>
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] kex follows: False
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] Compression: none
2025-12-12T13:58:57.933 [DEBUG] [Thread-70779] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:58:57.951 [DEBUG] [Thread-70779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:58:57.951 [DEBUG] [Thread-70779] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:58:57.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:58:57.952 [DEBUG] [Thread-70779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:58:57.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:58:57.954 [DEBUG] [Thread-70779] [transport.py] [_log()] userauth is OK
2025-12-12T13:58:57.954 [DEBUG] [Thread-70779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:58:57.954 [DEBUG] [Thread-70779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:58:57.954 [DEBUG] [Thread-70779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:58:57.954 [DEBUG] [Thread-70779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:58:57.978 [INFO] [Thread-70779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:58:57.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:58:58.618 [DEBUG] [Thread-70779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:58:58.618 [DEBUG] [Thread-70779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:58:58.618 [DEBUG] [Thread-70779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:58:58.659 [DEBUG] [Thread-70779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:58:58.659 [DEBUG] [Thread-70779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:58:58.662 [DEBUG] [Thread-70779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:58:58.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:58:58.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:58:58.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:58:58.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:58:58.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:58:58.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:58:58.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:58:58.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:58:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:58:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.498706 -999.00  +21.70  50.48     24   +0.30 1 1 2 1 1   888    0 20.30 -51.33 ----- 48.0 50.5 305.0 58.2 25.9 -24.5 25.4 -24.8 25.5 -22.7 26.2 -23.1
2025-12-12T13:58:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:58:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:58:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.498706
2025-12-12T13:58:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:58:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:58:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:58:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:58:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:58:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:58:37', tmtdew=25.38, humidity=18.01, cloud=0.0, wind=46.86, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:58:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:58:58.687 [DEBUG] [Thread-70779] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:58:58.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:58:58.782 [DEBUG] [Thread-70782] [transport.py] [_log()] starting thread (client mode): 0xf81e46d0
2025-12-12T13:58:58.782 [DEBUG] [Thread-70782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:58:58.797 [DEBUG] [Thread-70782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:58:58.797 [INFO] [Thread-70782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:58:58.804 [DEBUG] [Thread-70782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:58:58.804 [DEBUG] [Thread-70782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:58:58.804 [DEBUG] [Thread-70782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] client lang: <none>
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] server lang: <none>
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] kex follows: False
2025-12-12T13:58:58.805 [DEBUG] [Thread-70782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:58:58.806 [DEBUG] [Thread-70782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:58:58.806 [DEBUG] [Thread-70782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:58:58.806 [DEBUG] [Thread-70782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:58:58.806 [DEBUG] [Thread-70782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:58:58.806 [DEBUG] [Thread-70782] [transport.py] [_log()] Compression: none
2025-12-12T13:58:58.806 [DEBUG] [Thread-70782] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:58:58.862 [DEBUG] [Thread-70782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:58:58.862 [DEBUG] [Thread-70782] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:58:58.863 [DEBUG] [Thread-70782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:58:58.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:58:58.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:58:58.919 [DEBUG] [Thread-70782] [transport.py] [_log()] userauth is OK
2025-12-12T13:58:58.919 [DEBUG] [Thread-70782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:58:58.919 [DEBUG] [Thread-70782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:58:58.920 [DEBUG] [Thread-70782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:58:58.920 [DEBUG] [Thread-70782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:58:58.938 [INFO] [Thread-70782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:58:58.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:58:58.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:58:59.759 [DEBUG] [Thread-70782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:58:59.759 [DEBUG] [Thread-70782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:58:59.807 [DEBUG] [Thread-70782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:58:59.807 [DEBUG] [Thread-70782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:58:59.815 [DEBUG] [Thread-70782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:58:59.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:58:59.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T13:58:59.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:58:59.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:58:59.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:58:59.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:58:59.850 [DEBUG] [Thread-70782] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:59:05.006 [DEBUG] [Thread-70784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:59:20.045 [DEBUG] [Thread-70785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:59:29.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T13:59:29.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T13:59:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T13:59:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 59, 9), 25.25, 18.16, 0.0, 46.75, 22.02, 0, 0, 0, 2, 1, 0),)
2025-12-12T13:59:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:59:09
2025-12-12T13:59:30.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T13:59:30.844 [DEBUG] [Thread-70786] [transport.py] [_log()] starting thread (client mode): 0xf81e7550
2025-12-12T13:59:30.844 [DEBUG] [Thread-70786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:59:30.864 [DEBUG] [Thread-70786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T13:59:30.864 [INFO] [Thread-70786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:59:30.867 [DEBUG] [Thread-70786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] client lang: <none>
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] server lang: <none>
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] kex follows: False
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] Compression: none
2025-12-12T13:59:30.868 [DEBUG] [Thread-70786] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:59:30.885 [DEBUG] [Thread-70786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:59:30.886 [DEBUG] [Thread-70786] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:59:30.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T13:59:30.887 [DEBUG] [Thread-70786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T13:59:30.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:59:30.889 [DEBUG] [Thread-70786] [transport.py] [_log()] userauth is OK
2025-12-12T13:59:30.889 [DEBUG] [Thread-70786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:59:30.889 [DEBUG] [Thread-70786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:59:30.889 [DEBUG] [Thread-70786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T13:59:30.889 [DEBUG] [Thread-70786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:59:30.906 [INFO] [Thread-70786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:59:30.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:59:31.681 [DEBUG] [Thread-70786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:59:31.681 [DEBUG] [Thread-70786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:59:31.682 [DEBUG] [Thread-70786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T13:59:31.722 [DEBUG] [Thread-70786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:59:31.722 [DEBUG] [Thread-70786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:59:31.725 [DEBUG] [Thread-70786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:59:31.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:59:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T13:59:31.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T13:59:31.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T13:59:31.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:59:31.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T13:59:31.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:59:31.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:59:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T13:59:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.499053 -999.00  +20.90  60.72     24   -0.00 1 1 3 1 1   888    0 19.90 -56.30 ----- 61.2 60.7 313.0 68.2 25.8 -26.0 25.4 -25.3 25.6 -22.9 26.2 -23.3
2025-12-12T13:59:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T13:59:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T13:59:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.499053
2025-12-12T13:59:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T13:59:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T13:59:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T13:59:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T13:59:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T13:59:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:59:09', tmtdew=25.25, humidity=18.16, cloud=0.0, wind=46.75, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:58:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T13:59:31.748 [DEBUG] [Thread-70786] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:59:31.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T13:59:31.842 [DEBUG] [Thread-70789] [transport.py] [_log()] starting thread (client mode): 0xf574c910
2025-12-12T13:59:31.842 [DEBUG] [Thread-70789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T13:59:31.857 [DEBUG] [Thread-70789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T13:59:31.857 [INFO] [Thread-70789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T13:59:31.864 [DEBUG] [Thread-70789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T13:59:31.864 [DEBUG] [Thread-70789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T13:59:31.864 [DEBUG] [Thread-70789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T13:59:31.864 [DEBUG] [Thread-70789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:59:31.864 [DEBUG] [Thread-70789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T13:59:31.864 [DEBUG] [Thread-70789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] client lang: <none>
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] server lang: <none>
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] kex follows: False
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] Compression: none
2025-12-12T13:59:31.865 [DEBUG] [Thread-70789] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T13:59:31.925 [DEBUG] [Thread-70789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T13:59:31.925 [DEBUG] [Thread-70789] [transport.py] [_log()] Switch to new keys ...
2025-12-12T13:59:31.926 [DEBUG] [Thread-70789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T13:59:31.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T13:59:31.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T13:59:31.983 [DEBUG] [Thread-70789] [transport.py] [_log()] userauth is OK
2025-12-12T13:59:31.983 [DEBUG] [Thread-70789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T13:59:31.983 [DEBUG] [Thread-70789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T13:59:31.983 [DEBUG] [Thread-70789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T13:59:31.983 [DEBUG] [Thread-70789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T13:59:31.997 [INFO] [Thread-70789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T13:59:31.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T13:59:31.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T13:59:32.812 [DEBUG] [Thread-70789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T13:59:32.812 [DEBUG] [Thread-70789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T13:59:32.861 [DEBUG] [Thread-70789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T13:59:32.861 [DEBUG] [Thread-70789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T13:59:32.870 [DEBUG] [Thread-70789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T13:59:32.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T13:59: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')
2025-12-12T13:59:32.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T13:59:32.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T13:59:32.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T13:59:32.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T13:59:32.903 [DEBUG] [Thread-70789] [transport.py] [_log()] EOF in transport thread
2025-12-12T13:59:35.080 [DEBUG] [Thread-70791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:59:46.120 [DEBUG] [Thread-70792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:59:48.557 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:59:48.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T13:59:50.121 [DEBUG] [Thread-70793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:00:02.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:00:02.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:00:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 13, 59, 41), 25.08, 18.78, 0.0, 54.7, 21.99, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:00:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 13:59:41
2025-12-12T14:00:03.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:00:03.880 [DEBUG] [Thread-70794] [transport.py] [_log()] starting thread (client mode): 0xf570e410
2025-12-12T14:00:03.880 [DEBUG] [Thread-70794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:00:03.900 [DEBUG] [Thread-70794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:00:03.900 [INFO] [Thread-70794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] client lang: <none>
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] server lang: <none>
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] kex follows: False
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:00:03.904 [DEBUG] [Thread-70794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:00:03.905 [DEBUG] [Thread-70794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:00:03.905 [DEBUG] [Thread-70794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:00:03.905 [DEBUG] [Thread-70794] [transport.py] [_log()] Compression: none
2025-12-12T14:00:03.905 [DEBUG] [Thread-70794] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:00:03.921 [DEBUG] [Thread-70794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:00:03.921 [DEBUG] [Thread-70794] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:00:03.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:00:03.922 [DEBUG] [Thread-70794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:00:03.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:00:03.924 [DEBUG] [Thread-70794] [transport.py] [_log()] userauth is OK
2025-12-12T14:00:03.924 [DEBUG] [Thread-70794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:00:03.924 [DEBUG] [Thread-70794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:00:03.924 [DEBUG] [Thread-70794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:00:03.925 [DEBUG] [Thread-70794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:00:03.947 [INFO] [Thread-70794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:00:03.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:00:05.146 [DEBUG] [Thread-70796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:05.537 [DEBUG] [Thread-70794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:00:05.537 [DEBUG] [Thread-70794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:00:05.537 [DEBUG] [Thread-70794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:00:05.579 [DEBUG] [Thread-70794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:00:05.579 [DEBUG] [Thread-70794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:00:05.582 [DEBUG] [Thread-70794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:00:05.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:00:05.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:00:05.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:00:05.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:00:05.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:00:05.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:00:05.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:00:05.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:00:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:00:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.499400 -999.00  +20.70  56.94     25   +0.30 1 1 2 1 1   888    0 19.50 -66.63 ----- 52.7 56.9 310.2 72.5 25.8 -25.0 25.2 -26.6 25.4 -22.7 26.1 -23.2
2025-12-12T14:00:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:00:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:00:05.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.499400
2025-12-12T14:00:05.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:00:05.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:00:05.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:00:05.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:00:05.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:00:05.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T13:59:41', tmtdew=25.08, humidity=18.78, cloud=0.0, wind=54.7, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:59:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:00:05.598 [DEBUG] [Thread-70794] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:00:05.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:00:05.682 [DEBUG] [Thread-70798] [transport.py] [_log()] starting thread (client mode): 0xfabc6f80
2025-12-12T14:00:05.682 [DEBUG] [Thread-70798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:00:05.697 [DEBUG] [Thread-70798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:00:05.697 [INFO] [Thread-70798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:00:05.704 [DEBUG] [Thread-70798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:00:05.705 [DEBUG] [Thread-70798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] client lang: <none>
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] server lang: <none>
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] kex follows: False
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:00:05.706 [DEBUG] [Thread-70798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:00:05.707 [DEBUG] [Thread-70798] [transport.py] [_log()] Compression: none
2025-12-12T14:00:05.707 [DEBUG] [Thread-70798] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:00:05.763 [DEBUG] [Thread-70798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:00:05.764 [DEBUG] [Thread-70798] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:00:05.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:00:05.765 [DEBUG] [Thread-70798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:00:05.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:00:05.823 [DEBUG] [Thread-70798] [transport.py] [_log()] userauth is OK
2025-12-12T14:00:05.823 [DEBUG] [Thread-70798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:00:05.824 [DEBUG] [Thread-70798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:00:05.824 [DEBUG] [Thread-70798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:00:05.824 [DEBUG] [Thread-70798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:00:05.841 [INFO] [Thread-70798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:00:05.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:00:05.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:00:06.688 [DEBUG] [Thread-70798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:00:06.689 [DEBUG] [Thread-70798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:00:06.737 [DEBUG] [Thread-70798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:00:06.737 [DEBUG] [Thread-70798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:00:06.746 [DEBUG] [Thread-70798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:00:06.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:00:06.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:00:06.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:00:06.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:00:06.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:00:06.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:00:06.781 [DEBUG] [Thread-70798] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:00:20.176 [DEBUG] [Thread-70800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:35.217 [DEBUG] [Thread-70801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:00:36.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:00:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:00:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 0, 13), 24.98, 18.89, 0.0, 55.23, 21.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:00:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:00:13
2025-12-12T14:00:37.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:00:37.740 [DEBUG] [Thread-70802] [transport.py] [_log()] starting thread (client mode): 0xf81e4400
2025-12-12T14:00:37.741 [DEBUG] [Thread-70802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:00:37.760 [DEBUG] [Thread-70802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:00:37.760 [INFO] [Thread-70802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] client lang: <none>
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] server lang: <none>
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] kex follows: False
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:00:37.764 [DEBUG] [Thread-70802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:00:37.765 [DEBUG] [Thread-70802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:00:37.765 [DEBUG] [Thread-70802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:00:37.765 [DEBUG] [Thread-70802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:00:37.765 [DEBUG] [Thread-70802] [transport.py] [_log()] Compression: none
2025-12-12T14:00:37.765 [DEBUG] [Thread-70802] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:00:37.784 [DEBUG] [Thread-70802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:00:37.785 [DEBUG] [Thread-70802] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:00:37.785 [DEBUG] [Thread-70802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:00:37.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:00:37.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:00:37.787 [DEBUG] [Thread-70802] [transport.py] [_log()] userauth is OK
2025-12-12T14:00:37.788 [DEBUG] [Thread-70802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:00:37.788 [DEBUG] [Thread-70802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:00:37.788 [DEBUG] [Thread-70802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:00:37.788 [DEBUG] [Thread-70802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:00:37.812 [INFO] [Thread-70802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:00:37.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:00:38.625 [DEBUG] [Thread-70802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:00:38.626 [DEBUG] [Thread-70802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:00:38.626 [DEBUG] [Thread-70802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:00:38.667 [DEBUG] [Thread-70802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:00:38.667 [DEBUG] [Thread-70802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:00:38.670 [DEBUG] [Thread-70802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:00:38.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:00:38.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:00:38.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:00:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:00:38.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:00:38.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:00:38.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:00:38.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:00:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:00:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.499747 -999.00  +21.50  34.07     24   +0.60 1 1 2 1 1   888    0 19.57 -67.98 ----- 56.3 34.1 304.8 60.1 25.8 -26.5 25.3 -25.4 25.4 -24.2 26.1 -22.3
2025-12-12T14:00:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:00:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:00:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.499747
2025-12-12T14:00:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:00:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:00:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:00:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:00:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:00:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:00:13', tmtdew=24.98, humidity=18.89, cloud=0.0, wind=55.23, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T11:59:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:00:38.697 [DEBUG] [Thread-70802] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:00:38.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:00:38.793 [DEBUG] [Thread-70805] [transport.py] [_log()] starting thread (client mode): 0xf5741480
2025-12-12T14:00:38.793 [DEBUG] [Thread-70805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:00:38.808 [DEBUG] [Thread-70805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:00:38.808 [INFO] [Thread-70805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] client lang: <none>
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] server lang: <none>
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] kex follows: False
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:00:38.816 [DEBUG] [Thread-70805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:00:38.817 [DEBUG] [Thread-70805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:00:38.817 [DEBUG] [Thread-70805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:00:38.817 [DEBUG] [Thread-70805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:00:38.817 [DEBUG] [Thread-70805] [transport.py] [_log()] Compression: none
2025-12-12T14:00:38.817 [DEBUG] [Thread-70805] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:00:38.875 [DEBUG] [Thread-70805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:00:38.875 [DEBUG] [Thread-70805] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:00:38.875 [DEBUG] [Thread-70805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:00:38.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:00:38.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:00:38.931 [DEBUG] [Thread-70805] [transport.py] [_log()] userauth is OK
2025-12-12T14:00:38.931 [DEBUG] [Thread-70805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:00:38.931 [DEBUG] [Thread-70805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:00:38.931 [DEBUG] [Thread-70805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:00:38.931 [DEBUG] [Thread-70805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:00:38.950 [INFO] [Thread-70805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:00:38.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:00:38.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:00:39.791 [DEBUG] [Thread-70805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:00:39.791 [DEBUG] [Thread-70805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:00:39.839 [DEBUG] [Thread-70805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:00:39.839 [DEBUG] [Thread-70805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:00:39.848 [DEBUG] [Thread-70805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:00:39.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:00:39.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')
2025-12-12T14:00:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:00:39.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:00:39.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:00:39.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:00:39.882 [DEBUG] [Thread-70805] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:00:46.157 [DEBUG] [Thread-70807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:48.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:48.701 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:00:50.249 [DEBUG] [Thread-70808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:05.302 [DEBUG] [Thread-70809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:09.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:01:09.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:01:09.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
2025-12-12T14:01:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 0, 45), 24.53, 19.47, 0.0, 56.16, 21.92, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:01:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:00:45
2025-12-12T14:01:10.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:01:10.903 [DEBUG] [Thread-70810] [transport.py] [_log()] starting thread (client mode): 0xf81e68f0
2025-12-12T14:01:10.904 [DEBUG] [Thread-70810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:01:10.926 [DEBUG] [Thread-70810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:01:10.926 [INFO] [Thread-70810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] client lang: <none>
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] server lang: <none>
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] kex follows: False
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:01:10.930 [DEBUG] [Thread-70810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:01:10.931 [DEBUG] [Thread-70810] [transport.py] [_log()] Compression: none
2025-12-12T14:01:10.931 [DEBUG] [Thread-70810] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:01:10.942 [DEBUG] [Thread-70810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:01:10.942 [DEBUG] [Thread-70810] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:01:10.942 [DEBUG] [Thread-70810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:01:10.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:01:10.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:01:10.943 [DEBUG] [Thread-70810] [transport.py] [_log()] userauth is OK
2025-12-12T14:01:10.943 [DEBUG] [Thread-70810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:01:10.943 [DEBUG] [Thread-70810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:01:10.943 [DEBUG] [Thread-70810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:01:10.943 [DEBUG] [Thread-70810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:01:10.958 [INFO] [Thread-70810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:01:10.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:01:11.596 [DEBUG] [Thread-70810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:01:11.596 [DEBUG] [Thread-70810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:01:11.596 [DEBUG] [Thread-70810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:01:11.636 [DEBUG] [Thread-70810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:01:11.636 [DEBUG] [Thread-70810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:01:11.639 [DEBUG] [Thread-70810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:01:11.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:01:11.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:01:11.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:01:11.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:01:11.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:01:11.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:01:11.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.500442 -999.00  +21.30  53.91     25   +0.90 1 1 2 1 1   888    0 19.88 -66.88 ----- 66.6 53.9 321.4 82.0 25.5 -25.9 25.1 -26.6 25.2 -29.6 25.9 -23.5
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.500442
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:01:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:00:45', tmtdew=24.53, humidity=19.47, cloud=0.0, wind=56.16, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:00:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:01:11.655 [DEBUG] [Thread-70810] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:01:11.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:01:11.741 [DEBUG] [Thread-70813] [transport.py] [_log()] starting thread (client mode): 0xf81e64d0
2025-12-12T14:01:11.741 [DEBUG] [Thread-70813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:01:11.756 [DEBUG] [Thread-70813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:01:11.756 [INFO] [Thread-70813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] client lang: <none>
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] server lang: <none>
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] kex follows: False
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:01:11.764 [DEBUG] [Thread-70813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:01:11.765 [DEBUG] [Thread-70813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:01:11.765 [DEBUG] [Thread-70813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:01:11.765 [DEBUG] [Thread-70813] [transport.py] [_log()] Compression: none
2025-12-12T14:01:11.765 [DEBUG] [Thread-70813] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:01:11.822 [DEBUG] [Thread-70813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:01:11.822 [DEBUG] [Thread-70813] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:01:11.822 [DEBUG] [Thread-70813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:01:11.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:01:11.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:01:11.879 [DEBUG] [Thread-70813] [transport.py] [_log()] userauth is OK
2025-12-12T14:01:11.879 [DEBUG] [Thread-70813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:01:11.879 [DEBUG] [Thread-70813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:01:11.879 [DEBUG] [Thread-70813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:01:11.879 [DEBUG] [Thread-70813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:01:11.898 [INFO] [Thread-70813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:01:11.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:01:11.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:01:12.739 [DEBUG] [Thread-70813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:01:12.740 [DEBUG] [Thread-70813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:01:12.787 [DEBUG] [Thread-70813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:01:12.787 [DEBUG] [Thread-70813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:01:12.796 [DEBUG] [Thread-70813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:01:12.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:01:12.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:01:12.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:01:12.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:01:12.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:01:12.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:01:12.830 [DEBUG] [Thread-70813] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:01:20.332 [DEBUG] [Thread-70815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:35.377 [DEBUG] [Thread-70816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:42.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:01:42.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:01:42.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:01:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 1, 17), 24.46, 19.52, 0.0, 57.78, 21.76, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:01:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:01:17
2025-12-12T14:01:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:01:43.830 [DEBUG] [Thread-70817] [transport.py] [_log()] starting thread (client mode): 0xf81e6b30
2025-12-12T14:01:43.830 [DEBUG] [Thread-70817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:01:43.851 [DEBUG] [Thread-70817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:01:43.851 [INFO] [Thread-70817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:01:43.854 [DEBUG] [Thread-70817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:01:43.854 [DEBUG] [Thread-70817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:01:43.854 [DEBUG] [Thread-70817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:01:43.854 [DEBUG] [Thread-70817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] client lang: <none>
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] server lang: <none>
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] kex follows: False
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] Compression: none
2025-12-12T14:01:43.855 [DEBUG] [Thread-70817] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:01:43.868 [DEBUG] [Thread-70817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:01:43.869 [DEBUG] [Thread-70817] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:01:43.869 [DEBUG] [Thread-70817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:01:43.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:01:43.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:01:43.871 [DEBUG] [Thread-70817] [transport.py] [_log()] userauth is OK
2025-12-12T14:01:43.871 [DEBUG] [Thread-70817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:01:43.871 [DEBUG] [Thread-70817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:01:43.871 [DEBUG] [Thread-70817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:01:43.872 [DEBUG] [Thread-70817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:01:43.895 [INFO] [Thread-70817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:01:43.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:01:44.705 [DEBUG] [Thread-70817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:01:44.705 [DEBUG] [Thread-70817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:01:44.705 [DEBUG] [Thread-70817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:01:44.746 [DEBUG] [Thread-70817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:01:44.747 [DEBUG] [Thread-70817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:01:44.749 [DEBUG] [Thread-70817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:01:44.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:01:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:01:44.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:01:44.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:01:44.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:01:44.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:01:44.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.500789 -999.00  +20.70  55.45     26   +0.70 1 1 2 1 1   888    0 19.26 -72.44 ----- 51.0 55.5 312.8 72.2 25.4 -26.7 25.0 -25.4 25.3 -23.6 25.8 -24.1
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.500789
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:01:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:01:17', tmtdew=24.46, humidity=19.52, cloud=0.0, wind=57.78, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:01:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:01:44.772 [DEBUG] [Thread-70817] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:01:44.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:01:44.859 [DEBUG] [Thread-70820] [transport.py] [_log()] starting thread (client mode): 0xf81e7f40
2025-12-12T14:01:44.859 [DEBUG] [Thread-70820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:01:44.874 [DEBUG] [Thread-70820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:01:44.874 [INFO] [Thread-70820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] client lang: <none>
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] server lang: <none>
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] kex follows: False
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] Compression: none
2025-12-12T14:01:44.881 [DEBUG] [Thread-70820] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:01:44.937 [DEBUG] [Thread-70820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:01:44.937 [DEBUG] [Thread-70820] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:01:44.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:01:44.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:01:44.938 [DEBUG] [Thread-70820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:01:44.995 [DEBUG] [Thread-70820] [transport.py] [_log()] userauth is OK
2025-12-12T14:01:44.995 [DEBUG] [Thread-70820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:01:44.995 [DEBUG] [Thread-70820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:01:44.995 [DEBUG] [Thread-70820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:01:44.995 [DEBUG] [Thread-70820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:01:45.009 [INFO] [Thread-70820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:01:45.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:01:45.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:01:45.871 [DEBUG] [Thread-70820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:01:45.871 [DEBUG] [Thread-70820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:01:45.920 [DEBUG] [Thread-70820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:01:45.920 [DEBUG] [Thread-70820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:01:45.928 [DEBUG] [Thread-70820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:01:45.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:01:45.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:01:45.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
2025-12-12T14:01:45.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:01:45.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:01:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:01:45.960 [DEBUG] [Thread-70820] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:01:46.184 [DEBUG] [Thread-70822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:48.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:48.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:01:50.403 [DEBUG] [Thread-70823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:05.440 [DEBUG] [Thread-70824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:02:15.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:02:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:02:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 1, 49), 24.11, 19.77, 0.0, 46.26, 21.64, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:02:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:01:49
2025-12-12T14:02:16.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:02:16.919 [DEBUG] [Thread-70825] [transport.py] [_log()] starting thread (client mode): 0xf5740ee0
2025-12-12T14:02:16.919 [DEBUG] [Thread-70825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:02:16.939 [DEBUG] [Thread-70825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:02:16.940 [INFO] [Thread-70825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] client lang: <none>
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] server lang: <none>
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] kex follows: False
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:02:16.943 [DEBUG] [Thread-70825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:02:16.944 [DEBUG] [Thread-70825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:02:16.944 [DEBUG] [Thread-70825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:02:16.944 [DEBUG] [Thread-70825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:02:16.944 [DEBUG] [Thread-70825] [transport.py] [_log()] Compression: none
2025-12-12T14:02:16.944 [DEBUG] [Thread-70825] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:02:16.962 [DEBUG] [Thread-70825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:02:16.963 [DEBUG] [Thread-70825] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:02:16.963 [DEBUG] [Thread-70825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:02:16.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:02:16.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:02:16.965 [DEBUG] [Thread-70825] [transport.py] [_log()] userauth is OK
2025-12-12T14:02:16.965 [DEBUG] [Thread-70825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:02:16.965 [DEBUG] [Thread-70825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:02:16.966 [DEBUG] [Thread-70825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:02:16.966 [DEBUG] [Thread-70825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:02:16.998 [INFO] [Thread-70825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:02:16.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:02:17.635 [DEBUG] [Thread-70825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:02:17.635 [DEBUG] [Thread-70825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:02:17.636 [DEBUG] [Thread-70825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:02:17.676 [DEBUG] [Thread-70825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:02:17.676 [DEBUG] [Thread-70825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:02:17.679 [DEBUG] [Thread-70825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:02:17.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:02:17.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:02:17.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:02:17.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:02:17.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:02:17.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:02:17.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:02:17.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.501136 -999.00  +20.70  54.29     26   +0.90 1 1 2 1 1   888    0 18.98 -78.21 ----- 55.3 54.3 306.6 56.8 25.3 -25.5 24.9 -25.8 24.9 -25.8 25.7 -23.4
2025-12-12T14:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.501136
2025-12-12T14:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:02:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:02:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:02:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:02:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:02:17.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:01:49', tmtdew=24.11, humidity=19.77, cloud=0.0, wind=46.26, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:01:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:02:17.708 [DEBUG] [Thread-70825] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:02:17.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:02:17.805 [DEBUG] [Thread-70828] [transport.py] [_log()] starting thread (client mode): 0xf5740fa0
2025-12-12T14:02:17.805 [DEBUG] [Thread-70828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:02:17.820 [DEBUG] [Thread-70828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:02:17.820 [INFO] [Thread-70828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] client lang: <none>
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] server lang: <none>
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] kex follows: False
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:02:17.828 [DEBUG] [Thread-70828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:02:17.829 [DEBUG] [Thread-70828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:02:17.829 [DEBUG] [Thread-70828] [transport.py] [_log()] Compression: none
2025-12-12T14:02:17.829 [DEBUG] [Thread-70828] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:02:17.890 [DEBUG] [Thread-70828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:02:17.891 [DEBUG] [Thread-70828] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:02:17.891 [DEBUG] [Thread-70828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:02:17.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:02:17.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:02:17.947 [DEBUG] [Thread-70828] [transport.py] [_log()] userauth is OK
2025-12-12T14:02:17.947 [DEBUG] [Thread-70828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:02:17.947 [DEBUG] [Thread-70828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:02:17.947 [DEBUG] [Thread-70828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:02:17.947 [DEBUG] [Thread-70828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:02:17.967 [INFO] [Thread-70828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:02:17.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:02:17.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:02:18.884 [DEBUG] [Thread-70828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:02:18.884 [DEBUG] [Thread-70828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:02:18.935 [DEBUG] [Thread-70828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:02:18.936 [DEBUG] [Thread-70828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:02:18.946 [DEBUG] [Thread-70828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:02:18.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:02:18.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:02:18.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:02:18.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:02:18.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:02:18.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:02:18.981 [DEBUG] [Thread-70828] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:02:20.468 [DEBUG] [Thread-70830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:35.514 [DEBUG] [Thread-70831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:46.219 [DEBUG] [Thread-70832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:48.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:48.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:49.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:02:49.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:02:49.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:02:49.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 2, 21), 23.89, 20.05, 0.0, 47.64, 21.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:02:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:02:21
2025-12-12T14:02:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:02:49.958 [DEBUG] [Thread-70833] [transport.py] [_log()] starting thread (client mode): 0xf5742ce0
2025-12-12T14:02:49.958 [DEBUG] [Thread-70833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:02:49.978 [DEBUG] [Thread-70833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:02:49.978 [INFO] [Thread-70833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] client lang: <none>
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] server lang: <none>
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] kex follows: False
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] Compression: none
2025-12-12T14:02:49.980 [DEBUG] [Thread-70833] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:02:49.996 [DEBUG] [Thread-70833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:02:49.997 [DEBUG] [Thread-70833] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:02:49.997 [DEBUG] [Thread-70833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:02:49.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:02:49.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:02:49.999 [DEBUG] [Thread-70833] [transport.py] [_log()] userauth is OK
2025-12-12T14:02:49.999 [DEBUG] [Thread-70833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:02:49.999 [DEBUG] [Thread-70833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:02:49.999 [DEBUG] [Thread-70833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:02:49.999 [DEBUG] [Thread-70833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:02:50.024 [INFO] [Thread-70833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:02:50.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:02:50.543 [DEBUG] [Thread-70835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:02:50.813 [DEBUG] [Thread-70833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:02:50.813 [DEBUG] [Thread-70833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:02:50.813 [DEBUG] [Thread-70833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:02:50.854 [DEBUG] [Thread-70833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:02:50.854 [DEBUG] [Thread-70833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:02:50.857 [DEBUG] [Thread-70833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:02:50.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:02:50.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:02:50.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:02:50.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:02:50.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:02:50.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:02:50.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:02:50.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:02:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:02:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.501483 -999.00  +21.00  56.29     26   +0.70 1 1 2 1 1   888    0 19.34 -84.07 ----- 48.3 56.3 313.4 69.0 25.4 -25.3 24.9 -25.4 25.0 -25.0 25.8 -22.9
2025-12-12T14:02:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:02:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:02:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.501483
2025-12-12T14:02:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:02:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:02:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:02:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:02:50.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:02:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:02:21', tmtdew=23.89, humidity=20.05, cloud=0.0, wind=47.64, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:02:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:02:50.878 [DEBUG] [Thread-70833] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:02:50.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:02:50.976 [DEBUG] [Thread-70837] [transport.py] [_log()] starting thread (client mode): 0xf81e79d0
2025-12-12T14:02:50.976 [DEBUG] [Thread-70837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:02:50.991 [DEBUG] [Thread-70837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:02:50.991 [INFO] [Thread-70837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] client lang: <none>
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] server lang: <none>
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] kex follows: False
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:02:50.999 [DEBUG] [Thread-70837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:02:51.000 [DEBUG] [Thread-70837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:02:51.000 [DEBUG] [Thread-70837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:02:51.000 [DEBUG] [Thread-70837] [transport.py] [_log()] Compression: none
2025-12-12T14:02:51.000 [DEBUG] [Thread-70837] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:02:51.059 [DEBUG] [Thread-70837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:02:51.060 [DEBUG] [Thread-70837] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:02:51.060 [DEBUG] [Thread-70837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:02:51.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:02:51.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:02:51.119 [DEBUG] [Thread-70837] [transport.py] [_log()] userauth is OK
2025-12-12T14:02:51.119 [DEBUG] [Thread-70837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:02:51.119 [DEBUG] [Thread-70837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:02:51.119 [DEBUG] [Thread-70837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:02:51.119 [DEBUG] [Thread-70837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:02:51.138 [INFO] [Thread-70837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:02:51.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:02:51.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:02:51.965 [DEBUG] [Thread-70837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:02:51.965 [DEBUG] [Thread-70837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:02:52.013 [DEBUG] [Thread-70837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:02:52.013 [DEBUG] [Thread-70837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:02:52.023 [DEBUG] [Thread-70837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:02:52.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:02:52.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:02:52.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:02:52.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:02:52.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:02:52.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:02:52.058 [DEBUG] [Thread-70837] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:03:05.570 [DEBUG] [Thread-70839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:20.601 [DEBUG] [Thread-70840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:22.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:03:22.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:03:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:03:22.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 2, 54), 23.92, 19.88, 0.0, 53.58, 21.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:03:22.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:02:54
2025-12-12T14:03:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:03:23.043 [DEBUG] [Thread-70841] [transport.py] [_log()] starting thread (client mode): 0xf81e53f0
2025-12-12T14:03:23.043 [DEBUG] [Thread-70841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:03:23.063 [DEBUG] [Thread-70841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:03:23.063 [INFO] [Thread-70841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:03:23.066 [DEBUG] [Thread-70841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:03:23.066 [DEBUG] [Thread-70841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:03:23.066 [DEBUG] [Thread-70841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:03:23.066 [DEBUG] [Thread-70841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] client lang: <none>
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] server lang: <none>
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] kex follows: False
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] Compression: none
2025-12-12T14:03:23.067 [DEBUG] [Thread-70841] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:03:23.085 [DEBUG] [Thread-70841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:03:23.085 [DEBUG] [Thread-70841] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:03:23.086 [DEBUG] [Thread-70841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:03:23.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:03:23.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:03:23.087 [DEBUG] [Thread-70841] [transport.py] [_log()] userauth is OK
2025-12-12T14:03:23.088 [DEBUG] [Thread-70841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:03:23.088 [DEBUG] [Thread-70841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:03:23.088 [DEBUG] [Thread-70841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:03:23.088 [DEBUG] [Thread-70841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:03:23.111 [INFO] [Thread-70841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:03:23.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:03:23.755 [DEBUG] [Thread-70841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:03:23.756 [DEBUG] [Thread-70841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:03:23.756 [DEBUG] [Thread-70841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:03:23.797 [DEBUG] [Thread-70841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:03:23.797 [DEBUG] [Thread-70841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:03:23.800 [DEBUG] [Thread-70841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:03:23.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:03:23.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:03:23.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:03:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:03:23.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:03:23.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:03:23.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:03:23.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:03:23.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:03:23.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.501831 -999.00  +20.70  67.90     26   +0.90 1 1 3 1 1   888    0 18.90 -89.67 ----- 44.5 67.9 312.0 75.9 25.3 -25.3 24.9 -25.9 25.1 -24.2 25.7 -22.8
2025-12-12T14:03:23.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:03:23.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:03:23.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.501831
2025-12-12T14:03:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:03:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:03:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:03:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:03:23.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:03:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:02:54', tmtdew=23.92, humidity=19.88, cloud=0.0, wind=53.58, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:02:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:03:23.825 [DEBUG] [Thread-70841] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:03:23.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:03:23.921 [DEBUG] [Thread-70844] [transport.py] [_log()] starting thread (client mode): 0xf5741480
2025-12-12T14:03:23.921 [DEBUG] [Thread-70844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:03:23.938 [DEBUG] [Thread-70844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:03:23.938 [INFO] [Thread-70844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:03:23.946 [DEBUG] [Thread-70844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:03:23.946 [DEBUG] [Thread-70844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:03:23.946 [DEBUG] [Thread-70844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:03:23.946 [DEBUG] [Thread-70844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:23.946 [DEBUG] [Thread-70844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] client lang: <none>
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] server lang: <none>
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] kex follows: False
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] Compression: none
2025-12-12T14:03:23.947 [DEBUG] [Thread-70844] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:03:24.007 [DEBUG] [Thread-70844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:03:24.007 [DEBUG] [Thread-70844] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:03:24.007 [DEBUG] [Thread-70844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:03:24.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:03:24.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:03:24.063 [DEBUG] [Thread-70844] [transport.py] [_log()] userauth is OK
2025-12-12T14:03:24.063 [DEBUG] [Thread-70844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:03:24.063 [DEBUG] [Thread-70844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:03:24.063 [DEBUG] [Thread-70844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:03:24.063 [DEBUG] [Thread-70844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:03:24.083 [INFO] [Thread-70844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:03:24.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:03:24.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:03:24.947 [DEBUG] [Thread-70844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:03:24.948 [DEBUG] [Thread-70844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:03:24.995 [DEBUG] [Thread-70844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:03:24.995 [DEBUG] [Thread-70844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:03:25.004 [DEBUG] [Thread-70844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:03:25.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:03:25.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')
2025-12-12T14:03:25.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:03:25.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:03:25.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:03:25.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:03:25.038 [DEBUG] [Thread-70844] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:03:35.638 [DEBUG] [Thread-70846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:46.247 [DEBUG] [Thread-70847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:49.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:49.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:50.688 [DEBUG] [Thread-70848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:03:55.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:03:55.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:03:55.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:03:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 3, 26), 24.06, 19.75, 0.0, 51.91, 21.86, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:03:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:03:26
2025-12-12T14:03:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:03:56.013 [DEBUG] [Thread-70849] [transport.py] [_log()] starting thread (client mode): 0xf574fee0
2025-12-12T14:03:56.013 [DEBUG] [Thread-70849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:03:56.032 [DEBUG] [Thread-70849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:03:56.032 [INFO] [Thread-70849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:03:56.035 [DEBUG] [Thread-70849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:03:56.035 [DEBUG] [Thread-70849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] client lang: <none>
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] server lang: <none>
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] kex follows: False
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] Compression: none
2025-12-12T14:03:56.036 [DEBUG] [Thread-70849] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:03:56.052 [DEBUG] [Thread-70849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:03:56.052 [DEBUG] [Thread-70849] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:03:56.053 [DEBUG] [Thread-70849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:03:56.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:03:56.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:03:56.055 [DEBUG] [Thread-70849] [transport.py] [_log()] userauth is OK
2025-12-12T14:03:56.055 [DEBUG] [Thread-70849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:03:56.055 [DEBUG] [Thread-70849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:03:56.055 [DEBUG] [Thread-70849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:03:56.055 [DEBUG] [Thread-70849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:03:56.080 [INFO] [Thread-70849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:03:56.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:03:56.876 [DEBUG] [Thread-70849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:03:56.876 [DEBUG] [Thread-70849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:03:56.876 [DEBUG] [Thread-70849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:03:56.917 [DEBUG] [Thread-70849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:03:56.917 [DEBUG] [Thread-70849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:03:56.920 [DEBUG] [Thread-70849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:03:56.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:03:56.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:03:56.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:03:56.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:03:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:03:56.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:03:56.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:03:56.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:03:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:03:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.502178 -999.00  +21.30  46.21     26   +1.20 1 1 2 1 1   888    0 19.27 -89.32 ----- 51.3 46.2 291.4 59.8 25.4 -25.8 24.9 -25.5 25.0 -27.7 25.8 -22.6
2025-12-12T14:03:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:03:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:03:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.502178
2025-12-12T14:03:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:03:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:03:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:03:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:03:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:03:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:03:26', tmtdew=24.06, humidity=19.75, cloud=0.0, wind=51.91, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:03:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:03:56.944 [DEBUG] [Thread-70849] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:03:57.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:03:57.041 [DEBUG] [Thread-70852] [transport.py] [_log()] starting thread (client mode): 0xf574fa00
2025-12-12T14:03:57.041 [DEBUG] [Thread-70852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:03:57.055 [DEBUG] [Thread-70852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:03:57.055 [INFO] [Thread-70852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:03:57.063 [DEBUG] [Thread-70852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:03:57.063 [DEBUG] [Thread-70852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:03:57.063 [DEBUG] [Thread-70852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:03:57.063 [DEBUG] [Thread-70852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:57.063 [DEBUG] [Thread-70852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:03:57.063 [DEBUG] [Thread-70852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] client lang: <none>
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] server lang: <none>
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] kex follows: False
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:03:57.064 [DEBUG] [Thread-70852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:03:57.065 [DEBUG] [Thread-70852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:03:57.065 [DEBUG] [Thread-70852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:03:57.065 [DEBUG] [Thread-70852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:03:57.065 [DEBUG] [Thread-70852] [transport.py] [_log()] Compression: none
2025-12-12T14:03:57.065 [DEBUG] [Thread-70852] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:03:57.124 [DEBUG] [Thread-70852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:03:57.124 [DEBUG] [Thread-70852] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:03:57.125 [DEBUG] [Thread-70852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:03:57.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:03:57.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:03:57.179 [DEBUG] [Thread-70852] [transport.py] [_log()] userauth is OK
2025-12-12T14:03:57.179 [DEBUG] [Thread-70852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:03:57.179 [DEBUG] [Thread-70852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:03:57.179 [DEBUG] [Thread-70852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:03:57.179 [DEBUG] [Thread-70852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:03:57.198 [INFO] [Thread-70852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:03:57.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:03:57.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:03:58.127 [DEBUG] [Thread-70852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:03:58.127 [DEBUG] [Thread-70852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:03:58.175 [DEBUG] [Thread-70852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:03:58.175 [DEBUG] [Thread-70852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:03:58.184 [DEBUG] [Thread-70852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:03:58.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:03:58.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:03:58.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:03:58.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:03:58.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:03:58.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:03:58.219 [DEBUG] [Thread-70852] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:04:05.716 [DEBUG] [Thread-70854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:04:20.759 [DEBUG] [Thread-70855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:04:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:04:28.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:04:28.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:04:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 3, 58), 23.94, 20.26, 0.0, 54.32, 22.04, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:04:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:03:58
2025-12-12T14:04:29.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:04:29.205 [DEBUG] [Thread-70856] [transport.py] [_log()] starting thread (client mode): 0xf574ea10
2025-12-12T14:04:29.206 [DEBUG] [Thread-70856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:04:29.226 [DEBUG] [Thread-70856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:04:29.226 [INFO] [Thread-70856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] client lang: <none>
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] server lang: <none>
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] kex follows: False
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:04:29.229 [DEBUG] [Thread-70856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:04:29.230 [DEBUG] [Thread-70856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:04:29.230 [DEBUG] [Thread-70856] [transport.py] [_log()] Compression: none
2025-12-12T14:04:29.230 [DEBUG] [Thread-70856] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:04:29.245 [DEBUG] [Thread-70856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:04:29.246 [DEBUG] [Thread-70856] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:04:29.246 [DEBUG] [Thread-70856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:04:29.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:04:29.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:04:29.248 [DEBUG] [Thread-70856] [transport.py] [_log()] userauth is OK
2025-12-12T14:04:29.249 [DEBUG] [Thread-70856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:04:29.249 [DEBUG] [Thread-70856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:04:29.249 [DEBUG] [Thread-70856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:04:29.249 [DEBUG] [Thread-70856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:04:29.284 [INFO] [Thread-70856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:04:29.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:04:29.903 [DEBUG] [Thread-70856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:04:29.903 [DEBUG] [Thread-70856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:04:29.904 [DEBUG] [Thread-70856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:04:29.944 [DEBUG] [Thread-70856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:04:29.944 [DEBUG] [Thread-70856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:04:29.948 [DEBUG] [Thread-70856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:04:29.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:04:29.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:04:29.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:04:29.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:04:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:04:29.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:04:29.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:04:29.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:04:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:04:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.502525 -999.00  +21.40  48.32     26   +1.40 1 1 2 1 1   888    0 18.78 -99.80 ----- 42.8 48.3 295.6 65.7 25.3 -25.4 24.9 -25.1 25.0 -24.4 25.7 -22.5
2025-12-12T14:04:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:04:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:04:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.502525
2025-12-12T14:04:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:04:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:04:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:04:29.975 [DEBUG] [Thread-70856] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:04:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:04:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:04:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:03:58', tmtdew=23.94, humidity=20.26, cloud=0.0, wind=54.32, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:03:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:04:30.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:04:30.074 [DEBUG] [Thread-70859] [transport.py] [_log()] starting thread (client mode): 0xf81f2a40
2025-12-12T14:04:30.074 [DEBUG] [Thread-70859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:04:30.090 [DEBUG] [Thread-70859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:04:30.090 [INFO] [Thread-70859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:04:30.097 [DEBUG] [Thread-70859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:04:30.097 [DEBUG] [Thread-70859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:04:30.097 [DEBUG] [Thread-70859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:04:30.097 [DEBUG] [Thread-70859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:04:30.097 [DEBUG] [Thread-70859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:04:30.097 [DEBUG] [Thread-70859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] client lang: <none>
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] server lang: <none>
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] kex follows: False
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] Compression: none
2025-12-12T14:04:30.098 [DEBUG] [Thread-70859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:04:30.155 [DEBUG] [Thread-70859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:04:30.155 [DEBUG] [Thread-70859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:04:30.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:04:30.156 [DEBUG] [Thread-70859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:04:30.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:04:30.211 [DEBUG] [Thread-70859] [transport.py] [_log()] userauth is OK
2025-12-12T14:04:30.211 [DEBUG] [Thread-70859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:04:30.211 [DEBUG] [Thread-70859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:04:30.211 [DEBUG] [Thread-70859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:04:30.211 [DEBUG] [Thread-70859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:04:30.230 [INFO] [Thread-70859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:04:30.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:04:30.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:04:31.093 [DEBUG] [Thread-70859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:04:31.093 [DEBUG] [Thread-70859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:04:31.141 [DEBUG] [Thread-70859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:04:31.141 [DEBUG] [Thread-70859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:04:31.149 [DEBUG] [Thread-70859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:04:31.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:04:31.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:04:31.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:04:31.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:04:31.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:04:31.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:04:31.181 [DEBUG] [Thread-70859] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:04:35.784 [DEBUG] [Thread-70861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:04:46.281 [DEBUG] [Thread-70862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:04:49.264 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:04:49.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:04:50.825 [DEBUG] [Thread-70863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:05:01.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:05:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:05:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 4, 30), 24.2, 19.91, 0.0, 53.53, 22.02, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:05:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:04:30
2025-12-12T14:05:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:05:02.215 [DEBUG] [Thread-70864] [transport.py] [_log()] starting thread (client mode): 0xf574fee0
2025-12-12T14:05:02.215 [DEBUG] [Thread-70864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:05:02.236 [DEBUG] [Thread-70864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:05:02.236 [INFO] [Thread-70864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] client lang: <none>
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] server lang: <none>
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] kex follows: False
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] Compression: none
2025-12-12T14:05:02.240 [DEBUG] [Thread-70864] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:05:02.255 [DEBUG] [Thread-70864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:05:02.255 [DEBUG] [Thread-70864] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:05:02.256 [DEBUG] [Thread-70864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:05:02.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:05:02.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:05:02.257 [DEBUG] [Thread-70864] [transport.py] [_log()] userauth is OK
2025-12-12T14:05:02.257 [DEBUG] [Thread-70864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:05:02.257 [DEBUG] [Thread-70864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:05:02.257 [DEBUG] [Thread-70864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:05:02.257 [DEBUG] [Thread-70864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:05:02.268 [INFO] [Thread-70864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:05:02.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:05:03.040 [DEBUG] [Thread-70864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:05:03.040 [DEBUG] [Thread-70864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:05:03.040 [DEBUG] [Thread-70864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:05:03.081 [DEBUG] [Thread-70864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:05:03.081 [DEBUG] [Thread-70864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:05:03.083 [DEBUG] [Thread-70864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:05:03.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:05:03.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:05:03.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:05:03.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:05:03.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:05:03.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:05:03.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:05:03.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.502872 -999.00  +21.70  43.78     25   +1.20 1 1 2 1 1   888    0 18.67 -96.16 ----- 50.9 43.8 309.4 53.3 25.5 -24.7 24.9 -25.4 25.0 -24.3 25.8 -22.5
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.502872
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:05:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:04:30', tmtdew=24.2, humidity=19.91, cloud=0.0, wind=53.53, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:04:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:05:03.106 [DEBUG] [Thread-70864] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:05:03.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:05:03.195 [DEBUG] [Thread-70867] [transport.py] [_log()] starting thread (client mode): 0xf574d3f0
2025-12-12T14:05:03.196 [DEBUG] [Thread-70867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:05:03.214 [DEBUG] [Thread-70867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:05:03.214 [INFO] [Thread-70867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] client lang: <none>
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] server lang: <none>
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] kex follows: False
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:05:03.223 [DEBUG] [Thread-70867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:05:03.224 [DEBUG] [Thread-70867] [transport.py] [_log()] Compression: none
2025-12-12T14:05:03.224 [DEBUG] [Thread-70867] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:05:03.283 [DEBUG] [Thread-70867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:05:03.283 [DEBUG] [Thread-70867] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:05:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:05:03.283 [DEBUG] [Thread-70867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:05:03.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:05:03.347 [DEBUG] [Thread-70867] [transport.py] [_log()] userauth is OK
2025-12-12T14:05:03.347 [DEBUG] [Thread-70867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:05:03.347 [DEBUG] [Thread-70867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:05:03.347 [DEBUG] [Thread-70867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:05:03.347 [DEBUG] [Thread-70867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:05:03.361 [INFO] [Thread-70867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:05:03.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:05:03.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:05:04.198 [DEBUG] [Thread-70867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:05:04.199 [DEBUG] [Thread-70867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:05:04.246 [DEBUG] [Thread-70867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:05:04.246 [DEBUG] [Thread-70867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:05:04.255 [DEBUG] [Thread-70867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:05:04.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:05:04.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:05:04.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:05:04.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:05:04.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:05:04.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:05:04.290 [DEBUG] [Thread-70867] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:05:05.858 [DEBUG] [Thread-70869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:20.905 [DEBUG] [Thread-70870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:05:34.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:05:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:05:34.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 5, 2), 23.73, 20.42, 0.0, 51.33, 21.54, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:05:34.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:05:02
2025-12-12T14:05:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:05:35.279 [DEBUG] [Thread-70871] [transport.py] [_log()] starting thread (client mode): 0xf5741f60
2025-12-12T14:05:35.279 [DEBUG] [Thread-70871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:05:35.299 [DEBUG] [Thread-70871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:05:35.299 [INFO] [Thread-70871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] client lang: <none>
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] server lang: <none>
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] kex follows: False
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] Compression: none
2025-12-12T14:05:35.303 [DEBUG] [Thread-70871] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:05:35.317 [DEBUG] [Thread-70871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:05:35.317 [DEBUG] [Thread-70871] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:05:35.318 [DEBUG] [Thread-70871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:05:35.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:05:35.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:05:35.319 [DEBUG] [Thread-70871] [transport.py] [_log()] userauth is OK
2025-12-12T14:05:35.319 [DEBUG] [Thread-70871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:05:35.319 [DEBUG] [Thread-70871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:05:35.319 [DEBUG] [Thread-70871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:05:35.319 [DEBUG] [Thread-70871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:05:35.338 [INFO] [Thread-70871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:05:35.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:05:35.923 [DEBUG] [Thread-70871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:05:35.923 [DEBUG] [Thread-70871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:05:35.923 [DEBUG] [Thread-70871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:05:35.931 [DEBUG] [Thread-70873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:35.964 [DEBUG] [Thread-70871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:05:35.964 [DEBUG] [Thread-70871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:05:35.966 [DEBUG] [Thread-70871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:05:35.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:05:35.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:05:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:05:35.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:05:35.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:05:35.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:05:35.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.503220 -999.00  +21.00  45.32     26   +0.80 1 1 2 1 1   888    0 18.57 -97.19 ----- 44.5 45.3 310.8 62.8 25.4 -25.8 24.9 -25.6 25.2 -22.1 25.8 -23.0
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.503220
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:05:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:05:02', tmtdew=23.73, humidity=20.42, cloud=0.0, wind=51.33, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:04:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:05:35.985 [DEBUG] [Thread-70871] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:05:36.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:05:36.070 [DEBUG] [Thread-70875] [transport.py] [_log()] starting thread (client mode): 0xf813ca00
2025-12-12T14:05:36.070 [DEBUG] [Thread-70875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:05:36.088 [DEBUG] [Thread-70875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:05:36.088 [INFO] [Thread-70875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] client lang: <none>
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] server lang: <none>
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] kex follows: False
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] Compression: none
2025-12-12T14:05:36.099 [DEBUG] [Thread-70875] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:05:36.155 [DEBUG] [Thread-70875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:05:36.155 [DEBUG] [Thread-70875] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:05:36.155 [DEBUG] [Thread-70875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:05:36.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:05:36.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:05:36.214 [DEBUG] [Thread-70875] [transport.py] [_log()] userauth is OK
2025-12-12T14:05:36.215 [DEBUG] [Thread-70875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:05:36.215 [DEBUG] [Thread-70875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:05:36.215 [DEBUG] [Thread-70875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:05:36.215 [DEBUG] [Thread-70875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:05:36.231 [INFO] [Thread-70875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:05:36.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:05:36.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:05:37.091 [DEBUG] [Thread-70875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:05:37.091 [DEBUG] [Thread-70875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:05:37.140 [DEBUG] [Thread-70875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:05:37.140 [DEBUG] [Thread-70875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:05:37.149 [DEBUG] [Thread-70875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:05:37.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:05:37.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:05:37.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:05:37.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:05:37.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:05:37.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:05:37.185 [DEBUG] [Thread-70875] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:05:46.320 [DEBUG] [Thread-70877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:49.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:49.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:05:50.958 [DEBUG] [Thread-70878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:06.001 [DEBUG] [Thread-70879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:07.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:06:07.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:06: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
2025-12-12T14:06:07.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 5, 34), 24.21, 19.35, 0.0, 49.67, 21.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:06:07.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:05:34
2025-12-12T14:06:08.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:06:08.228 [DEBUG] [Thread-70880] [transport.py] [_log()] starting thread (client mode): 0xf81f08e0
2025-12-12T14:06:08.228 [DEBUG] [Thread-70880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:06:08.248 [DEBUG] [Thread-70880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:06:08.248 [INFO] [Thread-70880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:06:08.251 [DEBUG] [Thread-70880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:06:08.251 [DEBUG] [Thread-70880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:06:08.251 [DEBUG] [Thread-70880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:06:08.251 [DEBUG] [Thread-70880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] client lang: <none>
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] server lang: <none>
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] kex follows: False
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] Compression: none
2025-12-12T14:06:08.252 [DEBUG] [Thread-70880] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:06:08.267 [DEBUG] [Thread-70880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:06:08.267 [DEBUG] [Thread-70880] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:06:08.267 [DEBUG] [Thread-70880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:06:08.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:06:08.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:06:08.268 [DEBUG] [Thread-70880] [transport.py] [_log()] userauth is OK
2025-12-12T14:06:08.268 [DEBUG] [Thread-70880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:06:08.268 [DEBUG] [Thread-70880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:06:08.268 [DEBUG] [Thread-70880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:06:08.268 [DEBUG] [Thread-70880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:06:08.277 [INFO] [Thread-70880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:06:08.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:06:09.044 [DEBUG] [Thread-70880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:06:09.044 [DEBUG] [Thread-70880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:06:09.044 [DEBUG] [Thread-70880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:06:09.084 [DEBUG] [Thread-70880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:06:09.085 [DEBUG] [Thread-70880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:06:09.087 [DEBUG] [Thread-70880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:06:09.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:06:09.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:06:09.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:06:09.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:06:09.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:06:09.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:06:09.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:06:09.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:06:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:06:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.503914 -999.00  +21.30  56.69     25   +0.60 1 1 2 1 1   888    0 18.12 -96.47 ----- 49.5 56.7 309.0 62.6 25.4 -27.4 25.0 -24.9 25.2 -22.5 25.9 -24.4
2025-12-12T14:06:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:06:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:06:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.503914
2025-12-12T14:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:06:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:05:34', tmtdew=24.21, humidity=19.35, cloud=0.0, wind=49.67, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:05:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:06:09.105 [DEBUG] [Thread-70880] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:06:09.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:06:09.208 [DEBUG] [Thread-70883] [transport.py] [_log()] starting thread (client mode): 0xf570c340
2025-12-12T14:06:09.208 [DEBUG] [Thread-70883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:06:09.222 [DEBUG] [Thread-70883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:06:09.223 [INFO] [Thread-70883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] client lang: <none>
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] server lang: <none>
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] kex follows: False
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] Compression: none
2025-12-12T14:06:09.230 [DEBUG] [Thread-70883] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:06:09.287 [DEBUG] [Thread-70883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:06:09.288 [DEBUG] [Thread-70883] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:06:09.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:06:09.289 [DEBUG] [Thread-70883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:06:09.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:06:09.343 [DEBUG] [Thread-70883] [transport.py] [_log()] userauth is OK
2025-12-12T14:06:09.343 [DEBUG] [Thread-70883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:06:09.343 [DEBUG] [Thread-70883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:06:09.343 [DEBUG] [Thread-70883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:06:09.343 [DEBUG] [Thread-70883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:06:09.362 [INFO] [Thread-70883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:06:09.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:06:09.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:06:10.215 [DEBUG] [Thread-70883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:06:10.215 [DEBUG] [Thread-70883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:06:10.263 [DEBUG] [Thread-70883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:06:10.263 [DEBUG] [Thread-70883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:06:10.272 [DEBUG] [Thread-70883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:06:10.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:06:10.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:06:10.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:06:10.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:06:10.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:06:10.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:06:10.307 [DEBUG] [Thread-70883] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:06:21.028 [DEBUG] [Thread-70885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:36.069 [DEBUG] [Thread-70886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:06:40.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:06:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:06:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 6, 6), 24.44, 19.07, 0.0, 47.92, 21.76, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:06:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:06:06
2025-12-12T14:06:41.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:06:41.348 [DEBUG] [Thread-70887] [transport.py] [_log()] starting thread (client mode): 0xf81f3b80
2025-12-12T14:06:41.348 [DEBUG] [Thread-70887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:06:41.370 [DEBUG] [Thread-70887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:06:41.370 [INFO] [Thread-70887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:06:41.373 [DEBUG] [Thread-70887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] client lang: <none>
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] server lang: <none>
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] kex follows: False
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] Compression: none
2025-12-12T14:06:41.374 [DEBUG] [Thread-70887] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:06:41.392 [DEBUG] [Thread-70887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:06:41.393 [DEBUG] [Thread-70887] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:06:41.393 [DEBUG] [Thread-70887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:06:41.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:06:41.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:06:41.395 [DEBUG] [Thread-70887] [transport.py] [_log()] userauth is OK
2025-12-12T14:06:41.395 [DEBUG] [Thread-70887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:06:41.395 [DEBUG] [Thread-70887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:06:41.395 [DEBUG] [Thread-70887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:06:41.396 [DEBUG] [Thread-70887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:06:41.412 [INFO] [Thread-70887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:06:41.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:06:42.077 [DEBUG] [Thread-70887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:06:42.077 [DEBUG] [Thread-70887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:06:42.077 [DEBUG] [Thread-70887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:06:42.118 [DEBUG] [Thread-70887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:06:42.118 [DEBUG] [Thread-70887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:06:42.122 [DEBUG] [Thread-70887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:06:42.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:06:42.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:06:42.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:06:42.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:06:42.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:06:42.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:06:42.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:06:42.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:06:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:06:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.504261 -999.00  +20.70  53.01     26   +0.90 1 1 2 1 1   888    0 18.08 -93.22 ----- 50.5 53.0 314.2 67.2 25.2 -25.6 24.8 -26.3 25.0 -23.5 25.6 -23.0
2025-12-12T14:06:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:06:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:06:42.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.504261
2025-12-12T14:06:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:06:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:06:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:06:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:06:42.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:06:42.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:06:06', tmtdew=24.44, humidity=19.07, cloud=0.0, wind=47.92, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:06:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:06:42.146 [DEBUG] [Thread-70887] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:06:42.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:06:42.242 [DEBUG] [Thread-70890] [transport.py] [_log()] starting thread (client mode): 0xf81f2e90
2025-12-12T14:06:42.243 [DEBUG] [Thread-70890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:06:42.257 [DEBUG] [Thread-70890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:06:42.257 [INFO] [Thread-70890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:06:42.265 [DEBUG] [Thread-70890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:06:42.265 [DEBUG] [Thread-70890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:06:42.265 [DEBUG] [Thread-70890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] client lang: <none>
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] server lang: <none>
2025-12-12T14:06:42.266 [DEBUG] [Thread-70890] [transport.py] [_log()] kex follows: False
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] Compression: none
2025-12-12T14:06:42.267 [DEBUG] [Thread-70890] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:06:42.323 [DEBUG] [Thread-70890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:06:42.324 [DEBUG] [Thread-70890] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:06:42.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:06:42.325 [DEBUG] [Thread-70890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:06:42.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:06:42.379 [DEBUG] [Thread-70890] [transport.py] [_log()] userauth is OK
2025-12-12T14:06:42.380 [DEBUG] [Thread-70890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:06:42.380 [DEBUG] [Thread-70890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:06:42.380 [DEBUG] [Thread-70890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:06:42.380 [DEBUG] [Thread-70890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:06:42.400 [INFO] [Thread-70890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:06:42.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:06:42.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:06:43.241 [DEBUG] [Thread-70890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:06:43.241 [DEBUG] [Thread-70890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:06:43.290 [DEBUG] [Thread-70890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:06:43.290 [DEBUG] [Thread-70890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:06:43.302 [DEBUG] [Thread-70890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:06:43.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:06:43.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')
2025-12-12T14:06:43.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:06:43.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:06:43.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:06:43.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:06:43.349 [DEBUG] [Thread-70890] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:06:46.370 [DEBUG] [Thread-70892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:49.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:49.550 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:06:51.099 [DEBUG] [Thread-70893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:06.140 [DEBUG] [Thread-70894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:13.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:07:13.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:07:13.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:07:14.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 6, 39), 24.47, 19.34, 0.0, 46.26, 21.89, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:07:14.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:06:39
2025-12-12T14:07:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:07:14.330 [DEBUG] [Thread-70895] [transport.py] [_log()] starting thread (client mode): 0xf574d3c0
2025-12-12T14:07:14.330 [DEBUG] [Thread-70895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:07:14.350 [DEBUG] [Thread-70895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:07:14.350 [INFO] [Thread-70895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:07:14.353 [DEBUG] [Thread-70895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] client lang: <none>
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] server lang: <none>
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] kex follows: False
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] Compression: none
2025-12-12T14:07:14.354 [DEBUG] [Thread-70895] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:07:14.371 [DEBUG] [Thread-70895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:07:14.371 [DEBUG] [Thread-70895] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:07:14.372 [DEBUG] [Thread-70895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:07:14.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:07:14.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:07:14.374 [DEBUG] [Thread-70895] [transport.py] [_log()] userauth is OK
2025-12-12T14:07:14.374 [DEBUG] [Thread-70895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:07:14.374 [DEBUG] [Thread-70895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:07:14.374 [DEBUG] [Thread-70895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:07:14.374 [DEBUG] [Thread-70895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:07:14.397 [INFO] [Thread-70895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:07:14.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:07:15.191 [DEBUG] [Thread-70895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:07:15.191 [DEBUG] [Thread-70895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:07:15.191 [DEBUG] [Thread-70895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:07:15.232 [DEBUG] [Thread-70895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:07:15.232 [DEBUG] [Thread-70895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:07:15.235 [DEBUG] [Thread-70895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:07:15.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:07:15.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:07:15.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:07:15.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:07:15.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:07:15.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:07:15.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:07:15.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:07:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:07:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.504608 -999.00  +20.70  55.30     27   +1.20 1 1 2 1 1   888    0 18.71 -92.49 ----- 48.4 55.3 314.6 65.3 25.2 -26.6 24.8 -24.9 25.0 -23.3 25.6 -24.1
2025-12-12T14:07:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:07:15.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:07:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.504608
2025-12-12T14:07:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:07:15.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:07:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:07:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:07:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:07:15.259 [DEBUG] [Thread-70895] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:07:15.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:06:39', tmtdew=24.47, humidity=19.34, cloud=0.0, wind=46.26, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:06:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:07:15.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:07:15.358 [DEBUG] [Thread-70898] [transport.py] [_log()] starting thread (client mode): 0xf81e7310
2025-12-12T14:07:15.358 [DEBUG] [Thread-70898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:07:15.373 [DEBUG] [Thread-70898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:07:15.374 [INFO] [Thread-70898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:07:15.381 [DEBUG] [Thread-70898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:07:15.381 [DEBUG] [Thread-70898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:07:15.381 [DEBUG] [Thread-70898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:07:15.381 [DEBUG] [Thread-70898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:15.381 [DEBUG] [Thread-70898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] client lang: <none>
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] server lang: <none>
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] kex follows: False
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] Compression: none
2025-12-12T14:07:15.382 [DEBUG] [Thread-70898] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:07:15.439 [DEBUG] [Thread-70898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:07:15.439 [DEBUG] [Thread-70898] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:07:15.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:07:15.440 [DEBUG] [Thread-70898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:07:15.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:07:15.495 [DEBUG] [Thread-70898] [transport.py] [_log()] userauth is OK
2025-12-12T14:07:15.495 [DEBUG] [Thread-70898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:07:15.495 [DEBUG] [Thread-70898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:07:15.496 [DEBUG] [Thread-70898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:07:15.496 [DEBUG] [Thread-70898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:07:15.514 [INFO] [Thread-70898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:07:15.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:07:15.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:07:16.369 [DEBUG] [Thread-70898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:07:16.369 [DEBUG] [Thread-70898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:07:16.417 [DEBUG] [Thread-70898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:07:16.417 [DEBUG] [Thread-70898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:07:16.426 [DEBUG] [Thread-70898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:07:16.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:07:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:07:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:07:16.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:07:16.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:07:16.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:07:16.461 [DEBUG] [Thread-70898] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:07:21.170 [DEBUG] [Thread-70900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:36.224 [DEBUG] [Thread-70901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:46.424 [DEBUG] [Thread-70902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:07:46.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:07:46.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:07:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 7, 43), 23.46, 20.77, 0.0, 52.07, 21.44, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:07:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:07:43
2025-12-12T14:07:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:07:47.460 [DEBUG] [Thread-70903] [transport.py] [_log()] starting thread (client mode): 0xf81f3670
2025-12-12T14:07:47.461 [DEBUG] [Thread-70903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:07:47.484 [DEBUG] [Thread-70903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:07:47.484 [INFO] [Thread-70903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:07:47.488 [DEBUG] [Thread-70903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:07:47.488 [DEBUG] [Thread-70903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] client lang: <none>
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] server lang: <none>
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] kex follows: False
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] Compression: none
2025-12-12T14:07:47.489 [DEBUG] [Thread-70903] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:07:47.512 [DEBUG] [Thread-70903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:07:47.512 [DEBUG] [Thread-70903] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:07:47.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:07:47.513 [DEBUG] [Thread-70903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:07:47.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:07:47.519 [DEBUG] [Thread-70903] [transport.py] [_log()] userauth is OK
2025-12-12T14:07:47.519 [DEBUG] [Thread-70903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:07:47.519 [DEBUG] [Thread-70903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:07:47.519 [DEBUG] [Thread-70903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:07:47.519 [DEBUG] [Thread-70903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:07:47.542 [INFO] [Thread-70903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:07:47.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:07:48.167 [DEBUG] [Thread-70903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:07:48.168 [DEBUG] [Thread-70903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:07:48.168 [DEBUG] [Thread-70903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:07:48.209 [DEBUG] [Thread-70903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:07:48.209 [DEBUG] [Thread-70903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:07:48.212 [DEBUG] [Thread-70903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:07:48.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:07:48.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:07:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:07:48.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:07:48.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:07:48.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:07:48.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:07:48.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:07:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:07:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.504956 -999.00  +21.00  52.35     26   +1.20 1 1 2 1 1   888    0 18.36 -93.00 ----- 40.7 52.4 306.4 60.8 25.2 -25.5 24.7 -24.4 24.9 -22.7 25.7 -23.3
2025-12-12T14:07:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:07:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:07:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.504956
2025-12-12T14:07:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:07:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:07:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:07:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:07:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:07:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:07:43', tmtdew=23.46, humidity=20.77, cloud=0.0, wind=52.07, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:07:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:07:48.238 [DEBUG] [Thread-70903] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:07:48.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:07:48.334 [DEBUG] [Thread-70906] [transport.py] [_log()] starting thread (client mode): 0xf574e6e0
2025-12-12T14:07:48.334 [DEBUG] [Thread-70906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:07:48.349 [DEBUG] [Thread-70906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:07:48.349 [INFO] [Thread-70906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:07:48.357 [DEBUG] [Thread-70906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] client lang: <none>
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] server lang: <none>
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] kex follows: False
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] Compression: none
2025-12-12T14:07:48.358 [DEBUG] [Thread-70906] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:07:48.415 [DEBUG] [Thread-70906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:07:48.415 [DEBUG] [Thread-70906] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:07:48.416 [DEBUG] [Thread-70906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:07:48.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:07:48.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:07:48.471 [DEBUG] [Thread-70906] [transport.py] [_log()] userauth is OK
2025-12-12T14:07:48.471 [DEBUG] [Thread-70906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:07:48.471 [DEBUG] [Thread-70906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:07:48.471 [DEBUG] [Thread-70906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:07:48.472 [DEBUG] [Thread-70906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:07:48.491 [INFO] [Thread-70906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:07:48.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:07:48.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:07:49.347 [DEBUG] [Thread-70906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:07:49.347 [DEBUG] [Thread-70906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:07:49.395 [DEBUG] [Thread-70906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:07:49.395 [DEBUG] [Thread-70906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:07:49.403 [DEBUG] [Thread-70906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:07:49.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:07:49.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:07:49.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:07:49.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:07:49.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:07:49.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:07:49.437 [DEBUG] [Thread-70906] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:07:49.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:49.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:07:51.253 [DEBUG] [Thread-70908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:06.300 [DEBUG] [Thread-70909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:08:19.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:08:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:08:20.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 8, 15), 23.5, 20.7, 0.0, 50.04, 21.44, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:08:20.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:08:15
2025-12-12T14:08:20.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:08:20.416 [DEBUG] [Thread-70910] [transport.py] [_log()] starting thread (client mode): 0xf570df60
2025-12-12T14:08:20.416 [DEBUG] [Thread-70910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:08:20.435 [DEBUG] [Thread-70910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:08:20.435 [INFO] [Thread-70910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:08:20.438 [DEBUG] [Thread-70910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] client lang: <none>
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] server lang: <none>
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] kex follows: False
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] Compression: none
2025-12-12T14:08:20.439 [DEBUG] [Thread-70910] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:08:20.456 [DEBUG] [Thread-70910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:08:20.456 [DEBUG] [Thread-70910] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:08:20.457 [DEBUG] [Thread-70910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:08:20.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:08:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:08:20.459 [DEBUG] [Thread-70910] [transport.py] [_log()] userauth is OK
2025-12-12T14:08:20.459 [DEBUG] [Thread-70910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:08:20.459 [DEBUG] [Thread-70910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:08:20.459 [DEBUG] [Thread-70910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:08:20.459 [DEBUG] [Thread-70910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:08:20.483 [INFO] [Thread-70910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:08:20.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:08:21.301 [DEBUG] [Thread-70910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:08:21.302 [DEBUG] [Thread-70910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:08:21.302 [DEBUG] [Thread-70910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:08:21.329 [DEBUG] [Thread-70912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:21.343 [DEBUG] [Thread-70910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:08:21.343 [DEBUG] [Thread-70910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:08:21.346 [DEBUG] [Thread-70910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:08:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:08:21.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:08:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:08:21.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:08:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:08:21.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:08:21.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:08:21.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.505303 -999.00  +21.00  43.03     26   +1.20 1 1 2 1 1   888    0 17.96 -99.31 ----- 44.9 43.0 299.4 63.5 25.2 -25.7 24.8 -25.3 24.9 -25.2 25.6 -23.6
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.505303
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:08:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:08:15', tmtdew=23.5, humidity=20.7, cloud=0.0, wind=50.04, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:07:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:08:21.367 [DEBUG] [Thread-70910] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:08:21.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:08:21.459 [DEBUG] [Thread-70914] [transport.py] [_log()] starting thread (client mode): 0xf57436a0
2025-12-12T14:08:21.459 [DEBUG] [Thread-70914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:08:21.473 [DEBUG] [Thread-70914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:08:21.473 [INFO] [Thread-70914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:08:21.481 [DEBUG] [Thread-70914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:08:21.482 [DEBUG] [Thread-70914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] client lang: <none>
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] server lang: <none>
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] kex follows: False
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] Compression: none
2025-12-12T14:08:21.483 [DEBUG] [Thread-70914] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:08:21.539 [DEBUG] [Thread-70914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:08:21.540 [DEBUG] [Thread-70914] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:08:21.540 [DEBUG] [Thread-70914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:08:21.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:08:21.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:08:21.599 [DEBUG] [Thread-70914] [transport.py] [_log()] userauth is OK
2025-12-12T14:08:21.600 [DEBUG] [Thread-70914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:08:21.600 [DEBUG] [Thread-70914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:08:21.600 [DEBUG] [Thread-70914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:08:21.600 [DEBUG] [Thread-70914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:08:21.618 [INFO] [Thread-70914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:08:21.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:08:21.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:08:22.471 [DEBUG] [Thread-70914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:08:22.472 [DEBUG] [Thread-70914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:08:22.520 [DEBUG] [Thread-70914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:08:22.520 [DEBUG] [Thread-70914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:08:22.528 [DEBUG] [Thread-70914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:08:22.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:08:22.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:08:22.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:08:22.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:08:22.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:08:22.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:08:22.563 [DEBUG] [Thread-70914] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:08:36.366 [DEBUG] [Thread-70916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:46.477 [DEBUG] [Thread-70917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:49.832 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:49.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:51.421 [DEBUG] [Thread-70918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:08:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:08:52.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:08:52.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:08:53.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 8, 47), 23.28, 20.74, 0.0, 43.9, 21.21, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:08:53.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:08:47
2025-12-12T14:08:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:08:53.562 [DEBUG] [Thread-70919] [transport.py] [_log()] starting thread (client mode): 0xf575c7f0
2025-12-12T14:08:53.562 [DEBUG] [Thread-70919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:08:53.582 [DEBUG] [Thread-70919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:08:53.582 [INFO] [Thread-70919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] client lang: <none>
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] server lang: <none>
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] kex follows: False
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] Compression: none
2025-12-12T14:08:53.586 [DEBUG] [Thread-70919] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:08:53.604 [DEBUG] [Thread-70919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:08:53.605 [DEBUG] [Thread-70919] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:08:53.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:08:53.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:08:53.605 [DEBUG] [Thread-70919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:08:53.608 [DEBUG] [Thread-70919] [transport.py] [_log()] userauth is OK
2025-12-12T14:08:53.608 [DEBUG] [Thread-70919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:08:53.608 [DEBUG] [Thread-70919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:08:53.608 [DEBUG] [Thread-70919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:08:53.608 [DEBUG] [Thread-70919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:08:53.624 [INFO] [Thread-70919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:08:53.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:08:54.263 [DEBUG] [Thread-70919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:08:54.263 [DEBUG] [Thread-70919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:08:54.263 [DEBUG] [Thread-70919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:08:54.305 [DEBUG] [Thread-70919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:08:54.306 [DEBUG] [Thread-70919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:08:54.308 [DEBUG] [Thread-70919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:08:54.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:08:54.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:08:54.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:08:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:08:54.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:08:54.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:08:54.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:08:54.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:08:54.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.505650 -999.00  +20.40  53.43     27   +1.10 1 1 2 1 1   888    0 17.97 -101.30 ----- 43.3 53.4 312.2 64.7 25.1 -25.1 24.8 -26.6 24.8 -29.9 25.5 -23.2
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.505650
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:08:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:08:47', tmtdew=23.28, humidity=20.74, cloud=0.0, wind=43.9, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:08:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:08:54.330 [DEBUG] [Thread-70919] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:08:54.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:08:54.416 [DEBUG] [Thread-70922] [transport.py] [_log()] starting thread (client mode): 0xf575dc90
2025-12-12T14:08:54.416 [DEBUG] [Thread-70922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:08:54.431 [DEBUG] [Thread-70922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:08:54.431 [INFO] [Thread-70922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] client lang: <none>
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] server lang: <none>
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] kex follows: False
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] Compression: none
2025-12-12T14:08:54.438 [DEBUG] [Thread-70922] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:08:54.498 [DEBUG] [Thread-70922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:08:54.498 [DEBUG] [Thread-70922] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:08:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:08:54.499 [DEBUG] [Thread-70922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:08:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:08:54.555 [DEBUG] [Thread-70922] [transport.py] [_log()] userauth is OK
2025-12-12T14:08:54.555 [DEBUG] [Thread-70922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:08:54.555 [DEBUG] [Thread-70922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:08:54.555 [DEBUG] [Thread-70922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:08:54.555 [DEBUG] [Thread-70922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:08:54.574 [INFO] [Thread-70922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:08:54.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:08:54.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:08:55.420 [DEBUG] [Thread-70922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:08:55.420 [DEBUG] [Thread-70922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:08:55.469 [DEBUG] [Thread-70922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:08:55.469 [DEBUG] [Thread-70922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:08:55.477 [DEBUG] [Thread-70922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:08:55.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:08:55.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:08:55.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:08:55.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:08:55.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:08:55.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:08:55.512 [DEBUG] [Thread-70922] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:09:06.452 [DEBUG] [Thread-70924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:21.497 [DEBUG] [Thread-70925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:25.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:09:25.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:09:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:09:26.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 9, 19), 23.14, 20.88, 0.0, 43.83, 21.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:09:26.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:09:19
2025-12-12T14:09:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:09:26.493 [DEBUG] [Thread-70926] [transport.py] [_log()] starting thread (client mode): 0xf81f2170
2025-12-12T14:09:26.493 [DEBUG] [Thread-70926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:09:26.513 [DEBUG] [Thread-70926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:09:26.513 [INFO] [Thread-70926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:09:26.516 [DEBUG] [Thread-70926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:09:26.516 [DEBUG] [Thread-70926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] client lang: <none>
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] server lang: <none>
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] kex follows: False
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] Compression: none
2025-12-12T14:09:26.517 [DEBUG] [Thread-70926] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:09:26.534 [DEBUG] [Thread-70926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:09:26.535 [DEBUG] [Thread-70926] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:09:26.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:09:26.536 [DEBUG] [Thread-70926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:09:26.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:09:26.538 [DEBUG] [Thread-70926] [transport.py] [_log()] userauth is OK
2025-12-12T14:09:26.538 [DEBUG] [Thread-70926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:09:26.538 [DEBUG] [Thread-70926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:09:26.538 [DEBUG] [Thread-70926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:09:26.539 [DEBUG] [Thread-70926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:09:26.557 [INFO] [Thread-70926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:09:26.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:09:27.361 [DEBUG] [Thread-70926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:09:27.361 [DEBUG] [Thread-70926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:09:27.362 [DEBUG] [Thread-70926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:09:27.402 [DEBUG] [Thread-70926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:09:27.402 [DEBUG] [Thread-70926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:09:27.405 [DEBUG] [Thread-70926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:09:27.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:09:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:09:27.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:09:27.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:09:27.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:09:27.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:09:27.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:09:27.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:09:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:09:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.505997 -999.00  +20.70  44.03     27   +1.30 1 1 2 1 1   888    0 17.99 -110.80 ----- 38.4 44.0 310.2 58.7 25.1 -27.1 24.6 -24.4 24.9 -22.6 25.5 -23.2
2025-12-12T14:09:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:09:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:09:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.505997
2025-12-12T14:09:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:09:27.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:09:27.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:09:27.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:09:27.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:09:27.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:09:19', tmtdew=23.14, humidity=20.88, cloud=0.0, wind=43.83, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:08:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:09:27.436 [DEBUG] [Thread-70926] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:09:27.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:09:27.531 [DEBUG] [Thread-70929] [transport.py] [_log()] starting thread (client mode): 0xf574f0d0
2025-12-12T14:09:27.531 [DEBUG] [Thread-70929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:09:27.547 [DEBUG] [Thread-70929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:09:27.548 [INFO] [Thread-70929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:09:27.555 [DEBUG] [Thread-70929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:09:27.555 [DEBUG] [Thread-70929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:09:27.555 [DEBUG] [Thread-70929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:09:27.555 [DEBUG] [Thread-70929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] client lang: <none>
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] server lang: <none>
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] kex follows: False
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] Compression: none
2025-12-12T14:09:27.556 [DEBUG] [Thread-70929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:09:27.615 [DEBUG] [Thread-70929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:09:27.615 [DEBUG] [Thread-70929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:09:27.616 [DEBUG] [Thread-70929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:09:27.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:09:27.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:09:27.671 [DEBUG] [Thread-70929] [transport.py] [_log()] userauth is OK
2025-12-12T14:09:27.671 [DEBUG] [Thread-70929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:09:27.671 [DEBUG] [Thread-70929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:09:27.672 [DEBUG] [Thread-70929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:09:27.672 [DEBUG] [Thread-70929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:09:27.691 [INFO] [Thread-70929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:09:27.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:09:27.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:09:28.580 [DEBUG] [Thread-70929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:09:28.581 [DEBUG] [Thread-70929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:09:28.629 [DEBUG] [Thread-70929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:09:28.629 [DEBUG] [Thread-70929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:09:28.638 [DEBUG] [Thread-70929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:09:28.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:09:28.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:09:28.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:09:28.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:09:28.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:09:28.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:09:28.674 [DEBUG] [Thread-70929] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:09:36.521 [DEBUG] [Thread-70931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:46.524 [DEBUG] [Thread-70932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:49.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:49.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:51.558 [DEBUG] [Thread-70933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:09:58.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:09:58.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:09:58.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:09:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 9, 51), 23.1, 21.05, 0.0, 45.08, 21.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:09:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:09:51
2025-12-12T14:09:59.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:09:59.653 [DEBUG] [Thread-70934] [transport.py] [_log()] starting thread (client mode): 0xf81f3940
2025-12-12T14:09:59.654 [DEBUG] [Thread-70934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:09:59.673 [DEBUG] [Thread-70934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:09:59.673 [INFO] [Thread-70934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] client lang: <none>
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] server lang: <none>
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] kex follows: False
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:09:59.677 [DEBUG] [Thread-70934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:09:59.678 [DEBUG] [Thread-70934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:09:59.678 [DEBUG] [Thread-70934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:09:59.678 [DEBUG] [Thread-70934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:09:59.678 [DEBUG] [Thread-70934] [transport.py] [_log()] Compression: none
2025-12-12T14:09:59.678 [DEBUG] [Thread-70934] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:09:59.696 [DEBUG] [Thread-70934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:09:59.697 [DEBUG] [Thread-70934] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:09:59.697 [DEBUG] [Thread-70934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:09:59.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:09:59.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:09:59.699 [DEBUG] [Thread-70934] [transport.py] [_log()] userauth is OK
2025-12-12T14:09:59.700 [DEBUG] [Thread-70934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:09:59.700 [DEBUG] [Thread-70934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:09:59.700 [DEBUG] [Thread-70934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:09:59.700 [DEBUG] [Thread-70934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:09:59.717 [INFO] [Thread-70934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:09:59.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:10:00.371 [DEBUG] [Thread-70934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:10:00.372 [DEBUG] [Thread-70934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:10:00.372 [DEBUG] [Thread-70934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:10:00.413 [DEBUG] [Thread-70934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:10:00.413 [DEBUG] [Thread-70934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:10:00.417 [DEBUG] [Thread-70934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:10:00.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:10:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:10:00.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:10:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:10:00.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:10:00.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:10:00.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:10:00.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:10:00.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:10:00.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.506345 -999.00  +20.80  48.51     27   +1.20 1 1 2 1 1   888    0 17.73 -112.26 ----- 37.9 48.5 313.8 50.8 25.2 -23.8 24.8 -24.2 24.9 -24.2 25.7 -22.1
2025-12-12T14:10:00.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:10:00.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:10:00.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.506345
2025-12-12T14:10:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:10:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:10:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:10:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:10:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:10:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:09:51', tmtdew=23.1, humidity=21.05, cloud=0.0, wind=45.08, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:09:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:10:00.441 [DEBUG] [Thread-70934] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:10:00.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:10:00.538 [DEBUG] [Thread-70937] [transport.py] [_log()] starting thread (client mode): 0xf81c1c90
2025-12-12T14:10:00.538 [DEBUG] [Thread-70937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:10:00.553 [DEBUG] [Thread-70937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:10:00.553 [INFO] [Thread-70937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:10:00.561 [DEBUG] [Thread-70937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:10:00.561 [DEBUG] [Thread-70937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:10:00.561 [DEBUG] [Thread-70937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:10:00.561 [DEBUG] [Thread-70937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:10:00.561 [DEBUG] [Thread-70937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:10:00.561 [DEBUG] [Thread-70937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] client lang: <none>
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] server lang: <none>
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] kex follows: False
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:10:00.562 [DEBUG] [Thread-70937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:10:00.563 [DEBUG] [Thread-70937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:10:00.563 [DEBUG] [Thread-70937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:10:00.563 [DEBUG] [Thread-70937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:10:00.563 [DEBUG] [Thread-70937] [transport.py] [_log()] Compression: none
2025-12-12T14:10:00.563 [DEBUG] [Thread-70937] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:10:00.622 [DEBUG] [Thread-70937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:10:00.622 [DEBUG] [Thread-70937] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:10:00.631 [DEBUG] [Thread-70937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:10:00.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:10:00.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:10:00.679 [DEBUG] [Thread-70937] [transport.py] [_log()] userauth is OK
2025-12-12T14:10:00.679 [DEBUG] [Thread-70937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:10:00.680 [DEBUG] [Thread-70937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:10:00.680 [DEBUG] [Thread-70937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:10:00.680 [DEBUG] [Thread-70937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:10:00.699 [INFO] [Thread-70937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:10:00.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:10:00.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:10:01.582 [DEBUG] [Thread-70937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:10:01.582 [DEBUG] [Thread-70937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:10:01.629 [DEBUG] [Thread-70937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:10:01.630 [DEBUG] [Thread-70937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:10:01.638 [DEBUG] [Thread-70937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:10:01.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:10:01.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:10:01.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:10:01.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:10:01.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:10:01.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:10:01.669 [DEBUG] [Thread-70937] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:10:06.586 [DEBUG] [Thread-70939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:10:21.628 [DEBUG] [Thread-70940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:10:31.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:10:31.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:10:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:10:32.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 10, 23), 23.2, 20.9, 0.0, 40.97, 20.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:10:32.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:10:23
2025-12-12T14:10:32.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:10:32.652 [DEBUG] [Thread-70941] [transport.py] [_log()] starting thread (client mode): 0xf5701780
2025-12-12T14:10:32.652 [DEBUG] [Thread-70941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:10:32.672 [DEBUG] [Thread-70941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:10:32.672 [INFO] [Thread-70941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] client lang: <none>
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] server lang: <none>
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] kex follows: False
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:10:32.675 [DEBUG] [Thread-70941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:10:32.676 [DEBUG] [Thread-70941] [transport.py] [_log()] Compression: none
2025-12-12T14:10:32.676 [DEBUG] [Thread-70941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:10:32.692 [DEBUG] [Thread-70941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:10:32.692 [DEBUG] [Thread-70941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:10:32.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:10:32.692 [DEBUG] [Thread-70941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:10:32.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:10:32.694 [DEBUG] [Thread-70941] [transport.py] [_log()] userauth is OK
2025-12-12T14:10:32.694 [DEBUG] [Thread-70941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:10:32.694 [DEBUG] [Thread-70941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:10:32.694 [DEBUG] [Thread-70941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:10:32.695 [DEBUG] [Thread-70941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:10:32.709 [INFO] [Thread-70941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:10:32.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:10:33.522 [DEBUG] [Thread-70941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:10:33.523 [DEBUG] [Thread-70941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:10:33.523 [DEBUG] [Thread-70941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:10:33.563 [DEBUG] [Thread-70941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:10:33.564 [DEBUG] [Thread-70941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:10:33.567 [DEBUG] [Thread-70941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:10:33.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:10:33.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:10:33.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:10:33.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:10:33.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:10:33.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:10:33.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:10:33.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:10:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:10:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.506692 -999.00  +21.20  43.98     25   +0.70 1 1 2 1 1   888    0 17.38 -122.90 ----- 46.6 44.0 312.0 50.5 25.2 -26.1 24.9 -24.6 25.1 -22.9 25.7 -23.1
2025-12-12T14:10:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:10:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:10:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.506692
2025-12-12T14:10:33.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:10:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:10:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:10:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:10:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:10:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:10:23', tmtdew=23.2, humidity=20.9, cloud=0.0, wind=40.97, temperature=20.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:09:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:10:33.590 [DEBUG] [Thread-70941] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:10:33.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:10:33.699 [DEBUG] [Thread-70944] [transport.py] [_log()] starting thread (client mode): 0xf5700df0
2025-12-12T14:10:33.699 [DEBUG] [Thread-70944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:10:33.713 [DEBUG] [Thread-70944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:10:33.714 [INFO] [Thread-70944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:10:33.721 [DEBUG] [Thread-70944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:10:33.721 [DEBUG] [Thread-70944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] client lang: <none>
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] server lang: <none>
2025-12-12T14:10:33.722 [DEBUG] [Thread-70944] [transport.py] [_log()] kex follows: False
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] Compression: none
2025-12-12T14:10:33.723 [DEBUG] [Thread-70944] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:10:33.779 [DEBUG] [Thread-70944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:10:33.779 [DEBUG] [Thread-70944] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:10:33.780 [DEBUG] [Thread-70944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:10:33.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:10:33.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:10:33.835 [DEBUG] [Thread-70944] [transport.py] [_log()] userauth is OK
2025-12-12T14:10:33.836 [DEBUG] [Thread-70944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:10:33.836 [DEBUG] [Thread-70944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:10:33.836 [DEBUG] [Thread-70944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:10:33.836 [DEBUG] [Thread-70944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:10:33.854 [INFO] [Thread-70944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:10:33.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:10:33.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:10:34.712 [DEBUG] [Thread-70944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:10:34.712 [DEBUG] [Thread-70944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:10:34.761 [DEBUG] [Thread-70944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:10:34.761 [DEBUG] [Thread-70944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:10:34.770 [DEBUG] [Thread-70944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:10:34.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:10: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')
2025-12-12T14:10:34.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:10:34.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:10:34.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:10:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:10:34.804 [DEBUG] [Thread-70944] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:10:36.661 [DEBUG] [Thread-70946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:10:46.576 [DEBUG] [Thread-70947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:10:50.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:10:50.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:10:51.705 [DEBUG] [Thread-70948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:11:04.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:11:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:11:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 10, 55), 24.07, 19.62, 0.0, 45.31, 21.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:11:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:10:55
2025-12-12T14:11:05.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:11:05.780 [DEBUG] [Thread-70949] [transport.py] [_log()] starting thread (client mode): 0xf575cbb0
2025-12-12T14:11:05.780 [DEBUG] [Thread-70949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:11:05.800 [DEBUG] [Thread-70949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:11:05.800 [INFO] [Thread-70949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] client lang: <none>
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] server lang: <none>
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] kex follows: False
2025-12-12T14:11:05.803 [DEBUG] [Thread-70949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:11:05.804 [DEBUG] [Thread-70949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:11:05.804 [DEBUG] [Thread-70949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:11:05.804 [DEBUG] [Thread-70949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:11:05.804 [DEBUG] [Thread-70949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:11:05.804 [DEBUG] [Thread-70949] [transport.py] [_log()] Compression: none
2025-12-12T14:11:05.804 [DEBUG] [Thread-70949] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:11:05.821 [DEBUG] [Thread-70949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:11:05.822 [DEBUG] [Thread-70949] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:11:05.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:11:05.823 [DEBUG] [Thread-70949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:11:05.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:11:05.824 [DEBUG] [Thread-70949] [transport.py] [_log()] userauth is OK
2025-12-12T14:11:05.825 [DEBUG] [Thread-70949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:11:05.825 [DEBUG] [Thread-70949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:11:05.825 [DEBUG] [Thread-70949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:11:05.825 [DEBUG] [Thread-70949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:11:05.839 [INFO] [Thread-70949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:11:05.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:11:06.472 [DEBUG] [Thread-70949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:11:06.472 [DEBUG] [Thread-70949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:11:06.473 [DEBUG] [Thread-70949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:11:06.514 [DEBUG] [Thread-70949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:11:06.514 [DEBUG] [Thread-70949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:11:06.517 [DEBUG] [Thread-70949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:11:06.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:11:06.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:11:06.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:11:06.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:11:06.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:11:06.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:11:06.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:11:06.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:11:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:11:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.507039 -999.00  +21.10  37.00     25   +0.70 1 1 2 1 1   888    0 17.69 -119.44 ----- 31.3 37.0 299.4 49.1 25.2 -24.9 24.9 -25.1 24.9 -23.1 25.7 -23.4
2025-12-12T14:11:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:11:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:11:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.507039
2025-12-12T14:11:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:10:55', tmtdew=24.07, humidity=19.62, cloud=0.0, wind=45.31, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:10:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:11:06.541 [DEBUG] [Thread-70949] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:11:06.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:11:06.636 [DEBUG] [Thread-70952] [transport.py] [_log()] starting thread (client mode): 0xf575f2b0
2025-12-12T14:11:06.636 [DEBUG] [Thread-70952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:11:06.651 [DEBUG] [Thread-70952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:11:06.651 [INFO] [Thread-70952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:11:06.658 [DEBUG] [Thread-70952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] client lang: <none>
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] server lang: <none>
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] kex follows: False
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] Compression: none
2025-12-12T14:11:06.659 [DEBUG] [Thread-70952] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:11:06.715 [DEBUG] [Thread-70952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:11:06.715 [DEBUG] [Thread-70952] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:11:06.716 [DEBUG] [Thread-70952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:11:06.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:11:06.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:11:06.732 [DEBUG] [Thread-70954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:06.771 [DEBUG] [Thread-70952] [transport.py] [_log()] userauth is OK
2025-12-12T14:11:06.771 [DEBUG] [Thread-70952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:11:06.772 [DEBUG] [Thread-70952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:11:06.772 [DEBUG] [Thread-70952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:11:06.772 [DEBUG] [Thread-70952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:11:06.794 [INFO] [Thread-70952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:11:06.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:11:06.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:11:07.640 [DEBUG] [Thread-70952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:11:07.640 [DEBUG] [Thread-70952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:11:07.688 [DEBUG] [Thread-70952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:11:07.688 [DEBUG] [Thread-70952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:11:07.696 [DEBUG] [Thread-70952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:11:07.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:11:07.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:11:07.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
2025-12-12T14:11:07.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:11:07.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:11:07.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:11:07.731 [DEBUG] [Thread-70952] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:11:21.778 [DEBUG] [Thread-70955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:36.806 [DEBUG] [Thread-70956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:37.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:11:37.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:11:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:11:38.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 11, 27), 23.68, 20.07, 0.0, 47.0, 21.14, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:11:38.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:11:27
2025-12-12T14:11:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:11:38.714 [DEBUG] [Thread-70957] [transport.py] [_log()] starting thread (client mode): 0xf570d300
2025-12-12T14:11:38.714 [DEBUG] [Thread-70957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:11:38.734 [DEBUG] [Thread-70957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:11:38.734 [INFO] [Thread-70957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] client lang: <none>
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] server lang: <none>
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] kex follows: False
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:11:38.737 [DEBUG] [Thread-70957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:11:38.738 [DEBUG] [Thread-70957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:11:38.738 [DEBUG] [Thread-70957] [transport.py] [_log()] Compression: none
2025-12-12T14:11:38.738 [DEBUG] [Thread-70957] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:11:38.752 [DEBUG] [Thread-70957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:11:38.753 [DEBUG] [Thread-70957] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:11:38.753 [DEBUG] [Thread-70957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:11:38.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:11:38.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:11:38.755 [DEBUG] [Thread-70957] [transport.py] [_log()] userauth is OK
2025-12-12T14:11:38.755 [DEBUG] [Thread-70957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:11:38.755 [DEBUG] [Thread-70957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:11:38.756 [DEBUG] [Thread-70957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:11:38.756 [DEBUG] [Thread-70957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:11:38.773 [INFO] [Thread-70957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:11:38.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:11:39.535 [DEBUG] [Thread-70957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:11:39.536 [DEBUG] [Thread-70957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:11:39.536 [DEBUG] [Thread-70957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:11:39.576 [DEBUG] [Thread-70957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:11:39.577 [DEBUG] [Thread-70957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:11:39.579 [DEBUG] [Thread-70957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:11:39.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:11:39.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:11:39.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:11:39.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:11:39.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:11:39.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:11:39.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:11:39.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:11:39.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:11:39.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.507733 -999.00  +21.10  57.82     25   +0.80 1 1 2 1 1   888    0 17.47 -115.22 ----- 58.7 57.8 314.8 73.2 25.2 -26.9 24.9 -26.4 24.9 -24.2 25.7 -23.1
2025-12-12T14:11:39.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:11:39.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:11:39.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.507733
2025-12-12T14:11:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:11:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:11:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:11:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:11:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:11:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:11:27', tmtdew=23.68, humidity=20.07, cloud=0.0, wind=47.0, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:11:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:11:39.602 [DEBUG] [Thread-70957] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:11:39.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:11:39.698 [DEBUG] [Thread-70960] [transport.py] [_log()] starting thread (client mode): 0xfabc5660
2025-12-12T14:11:39.698 [DEBUG] [Thread-70960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:11:39.713 [DEBUG] [Thread-70960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:11:39.713 [INFO] [Thread-70960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:11:39.721 [DEBUG] [Thread-70960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] client lang: <none>
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] server lang: <none>
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] kex follows: False
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] Compression: none
2025-12-12T14:11:39.722 [DEBUG] [Thread-70960] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:11:39.779 [DEBUG] [Thread-70960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:11:39.779 [DEBUG] [Thread-70960] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:11:39.780 [DEBUG] [Thread-70960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:11:39.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:11:39.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:11:39.836 [DEBUG] [Thread-70960] [transport.py] [_log()] userauth is OK
2025-12-12T14:11:39.836 [DEBUG] [Thread-70960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:11:39.836 [DEBUG] [Thread-70960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:11:39.836 [DEBUG] [Thread-70960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:11:39.836 [DEBUG] [Thread-70960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:11:39.854 [INFO] [Thread-70960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:11:39.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:11:39.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:11:40.679 [DEBUG] [Thread-70960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:11:40.679 [DEBUG] [Thread-70960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:11:40.727 [DEBUG] [Thread-70960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:11:40.727 [DEBUG] [Thread-70960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:11:40.736 [DEBUG] [Thread-70960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:11:40.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:11:40.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:11:40.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:11:40.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:11:40.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:11:40.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:11:40.771 [DEBUG] [Thread-70960] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:11:46.629 [DEBUG] [Thread-70962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:50.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:50.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:11:51.837 [DEBUG] [Thread-70963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:06.881 [DEBUG] [Thread-70964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:10.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:12:10.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:12: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
2025-12-12T14:12:11.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 11, 59), 23.69, 20.37, 0.0, 47.75, 21.1, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:12:11.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:11:59
2025-12-12T14:12:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:12:11.770 [DEBUG] [Thread-70965] [transport.py] [_log()] starting thread (client mode): 0xf81c1570
2025-12-12T14:12:11.770 [DEBUG] [Thread-70965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:12:11.789 [DEBUG] [Thread-70965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:12:11.789 [INFO] [Thread-70965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] client lang: <none>
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] server lang: <none>
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] kex follows: False
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] Compression: none
2025-12-12T14:12:11.791 [DEBUG] [Thread-70965] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:12:11.804 [DEBUG] [Thread-70965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:12:11.804 [DEBUG] [Thread-70965] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:12:11.804 [DEBUG] [Thread-70965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:12:11.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:12:11.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:12:11.805 [DEBUG] [Thread-70965] [transport.py] [_log()] userauth is OK
2025-12-12T14:12:11.805 [DEBUG] [Thread-70965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:12:11.805 [DEBUG] [Thread-70965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:12:11.805 [DEBUG] [Thread-70965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:12:11.805 [DEBUG] [Thread-70965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:12:11.820 [INFO] [Thread-70965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:12:11.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:12:12.464 [DEBUG] [Thread-70965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:12:12.464 [DEBUG] [Thread-70965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:12:12.464 [DEBUG] [Thread-70965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:12:12.504 [DEBUG] [Thread-70965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:12:12.504 [DEBUG] [Thread-70965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:12:12.507 [DEBUG] [Thread-70965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:12:12.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:12:12.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:12:12.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:12:12.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:12:12.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:12:12.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:12:12.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.508081 -999.00  +21.20  47.05     26   +0.90 1 1 2 1 1   888    0 17.13 -117.84 ----- 44.7 47.0 309.4 67.0 25.2 -24.7 24.7 -25.9 25.1 -22.8 25.7 -22.8
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.508081
2025-12-12T14:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:11:59', tmtdew=23.69, humidity=20.37, cloud=0.0, wind=47.75, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:11:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:12:12.524 [DEBUG] [Thread-70965] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:12:12.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:12:12.610 [DEBUG] [Thread-70968] [transport.py] [_log()] starting thread (client mode): 0xf81c2590
2025-12-12T14:12:12.610 [DEBUG] [Thread-70968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:12:12.625 [DEBUG] [Thread-70968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:12:12.625 [INFO] [Thread-70968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:12:12.632 [DEBUG] [Thread-70968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:12:12.632 [DEBUG] [Thread-70968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:12:12.632 [DEBUG] [Thread-70968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:12:12.632 [DEBUG] [Thread-70968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:12.632 [DEBUG] [Thread-70968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:12.632 [DEBUG] [Thread-70968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] client lang: <none>
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] server lang: <none>
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] kex follows: False
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] Compression: none
2025-12-12T14:12:12.633 [DEBUG] [Thread-70968] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:12:12.691 [DEBUG] [Thread-70968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:12:12.692 [DEBUG] [Thread-70968] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:12:12.692 [DEBUG] [Thread-70968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:12:12.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:12:12.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:12:12.747 [DEBUG] [Thread-70968] [transport.py] [_log()] userauth is OK
2025-12-12T14:12:12.748 [DEBUG] [Thread-70968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:12:12.748 [DEBUG] [Thread-70968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:12:12.748 [DEBUG] [Thread-70968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:12:12.748 [DEBUG] [Thread-70968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:12:12.770 [INFO] [Thread-70968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:12:12.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:12:12.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:12:13.676 [DEBUG] [Thread-70968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:12:13.676 [DEBUG] [Thread-70968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:12:13.724 [DEBUG] [Thread-70968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:12:13.724 [DEBUG] [Thread-70968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:12:13.733 [DEBUG] [Thread-70968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:12:13.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:12:13.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:12:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:12:13.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:12:13.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:12:13.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:12:13.767 [DEBUG] [Thread-70968] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:12:21.908 [DEBUG] [Thread-70970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:36.948 [DEBUG] [Thread-70971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:12:43.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:12:43.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:12:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 12, 31), 23.37, 20.81, 0.0, 50.43, 20.95, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:12:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:12:31
2025-12-12T14:12:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:12:44.745 [DEBUG] [Thread-70972] [transport.py] [_log()] starting thread (client mode): 0xf81c1ab0
2025-12-12T14:12:44.745 [DEBUG] [Thread-70972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:12:44.765 [DEBUG] [Thread-70972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:12:44.765 [INFO] [Thread-70972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] client lang: <none>
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] server lang: <none>
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] kex follows: False
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:12:44.768 [DEBUG] [Thread-70972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:12:44.769 [DEBUG] [Thread-70972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:12:44.769 [DEBUG] [Thread-70972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:12:44.769 [DEBUG] [Thread-70972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:12:44.769 [DEBUG] [Thread-70972] [transport.py] [_log()] Compression: none
2025-12-12T14:12:44.769 [DEBUG] [Thread-70972] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:12:44.784 [DEBUG] [Thread-70972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:12:44.785 [DEBUG] [Thread-70972] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:12:44.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:12:44.785 [DEBUG] [Thread-70972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:12:44.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:12:44.787 [DEBUG] [Thread-70972] [transport.py] [_log()] userauth is OK
2025-12-12T14:12:44.788 [DEBUG] [Thread-70972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:12:44.788 [DEBUG] [Thread-70972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:12:44.788 [DEBUG] [Thread-70972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:12:44.788 [DEBUG] [Thread-70972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:12:44.811 [INFO] [Thread-70972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:12:44.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:12:45.653 [DEBUG] [Thread-70972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:12:45.653 [DEBUG] [Thread-70972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:12:45.653 [DEBUG] [Thread-70972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:12:45.694 [DEBUG] [Thread-70972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:12:45.694 [DEBUG] [Thread-70972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:12:45.697 [DEBUG] [Thread-70972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:12:45.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:12:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:12:45.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:12:45.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:12:45.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:12:45.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:12:45.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:12:45.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:12:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:12:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.508428 -999.00  +21.00  46.34     26   +1.00 1 1 2 1 1   888    0 16.57 -128.52 ----- 48.0 46.3 312.4 57.4 25.2 -25.5 24.7 -25.3 24.9 -22.9 25.7 -22.6
2025-12-12T14:12:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:12:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:12:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.508428
2025-12-12T14:12:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:12:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:12:45.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:12:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:12:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:12:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:12:31', tmtdew=23.37, humidity=20.81, cloud=0.0, wind=50.43, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:12:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:12:45.721 [DEBUG] [Thread-70972] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:12:45.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:12:45.821 [DEBUG] [Thread-70975] [transport.py] [_log()] starting thread (client mode): 0xf81f0a00
2025-12-12T14:12:45.821 [DEBUG] [Thread-70975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:12:45.837 [DEBUG] [Thread-70975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:12:45.837 [INFO] [Thread-70975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:12:45.845 [DEBUG] [Thread-70975] [transport.py] [_log()] client lang: <none>
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] server lang: <none>
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] kex follows: False
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] Compression: none
2025-12-12T14:12:45.846 [DEBUG] [Thread-70975] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:12:45.904 [DEBUG] [Thread-70975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:12:45.904 [DEBUG] [Thread-70975] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:12:45.904 [DEBUG] [Thread-70975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:12:45.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:12:45.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:12:45.959 [DEBUG] [Thread-70975] [transport.py] [_log()] userauth is OK
2025-12-12T14:12:45.959 [DEBUG] [Thread-70975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:12:45.959 [DEBUG] [Thread-70975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:12:45.959 [DEBUG] [Thread-70975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:12:45.959 [DEBUG] [Thread-70975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:12:45.978 [INFO] [Thread-70975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:12:45.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:12:45.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:12:46.678 [DEBUG] [Thread-70977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:46.824 [DEBUG] [Thread-70975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:12:46.824 [DEBUG] [Thread-70975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:12:46.872 [DEBUG] [Thread-70975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:12:46.872 [DEBUG] [Thread-70975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:12:46.881 [DEBUG] [Thread-70975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:12:46.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:12:46.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:12:46.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:12:46.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:12:46.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:12:46.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:12:46.912 [DEBUG] [Thread-70975] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:12:50.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:50.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:12:51.976 [DEBUG] [Thread-70978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:07.025 [DEBUG] [Thread-70979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:16.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:13:16.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:13:16.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:13:17.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 13, 3), 23.59, 20.6, 0.0, 52.54, 21.41, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:13:17.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:13:03
2025-12-12T14:13:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:13:17.891 [DEBUG] [Thread-70980] [transport.py] [_log()] starting thread (client mode): 0xfabc5780
2025-12-12T14:13:17.891 [DEBUG] [Thread-70980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:13:17.911 [DEBUG] [Thread-70980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:13:17.912 [INFO] [Thread-70980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] client lang: <none>
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] server lang: <none>
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] kex follows: False
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:13:17.915 [DEBUG] [Thread-70980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:13:17.916 [DEBUG] [Thread-70980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:13:17.916 [DEBUG] [Thread-70980] [transport.py] [_log()] Compression: none
2025-12-12T14:13:17.916 [DEBUG] [Thread-70980] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:13:17.932 [DEBUG] [Thread-70980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:13:17.933 [DEBUG] [Thread-70980] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:13:17.933 [DEBUG] [Thread-70980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:13:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:13:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:13:17.935 [DEBUG] [Thread-70980] [transport.py] [_log()] userauth is OK
2025-12-12T14:13:17.935 [DEBUG] [Thread-70980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:13:17.935 [DEBUG] [Thread-70980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:13:17.935 [DEBUG] [Thread-70980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:13:17.935 [DEBUG] [Thread-70980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:13:17.949 [INFO] [Thread-70980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:13:17.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:13:18.602 [DEBUG] [Thread-70980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:13:18.602 [DEBUG] [Thread-70980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:13:18.602 [DEBUG] [Thread-70980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:13:18.643 [DEBUG] [Thread-70980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:13:18.643 [DEBUG] [Thread-70980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:13:18.646 [DEBUG] [Thread-70980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:13:18.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:13:18.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:13:18.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:13:18.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:13:18.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:13:18.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:13:18.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:13:18.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:13:18.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:13:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.508775 -999.00  +21.10  48.18     26   +1.30 1 1 2 1 1   888    0 16.39 -131.28 ----- 62.6 48.2 307.2 62.9 25.2 -25.2 24.7 -25.8 24.9 -23.9 25.7 -21.9
2025-12-12T14:13:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:13:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:13:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.508775
2025-12-12T14:13:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:13:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:13:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:13:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:13:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:13:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:13:03', tmtdew=23.59, humidity=20.6, cloud=0.0, wind=52.54, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:12:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:13:18.669 [DEBUG] [Thread-70980] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:13:18.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:13:18.765 [DEBUG] [Thread-70983] [transport.py] [_log()] starting thread (client mode): 0xfabc6e60
2025-12-12T14:13:18.765 [DEBUG] [Thread-70983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:13:18.780 [DEBUG] [Thread-70983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:13:18.780 [INFO] [Thread-70983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:13:18.788 [DEBUG] [Thread-70983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:13:18.788 [DEBUG] [Thread-70983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:13:18.788 [DEBUG] [Thread-70983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:13:18.788 [DEBUG] [Thread-70983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:18.788 [DEBUG] [Thread-70983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:18.788 [DEBUG] [Thread-70983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] client lang: <none>
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] server lang: <none>
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] kex follows: False
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] Compression: none
2025-12-12T14:13:18.789 [DEBUG] [Thread-70983] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:13:18.847 [DEBUG] [Thread-70983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:13:18.847 [DEBUG] [Thread-70983] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:13:18.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:13:18.848 [DEBUG] [Thread-70983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:13:18.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:13:18.903 [DEBUG] [Thread-70983] [transport.py] [_log()] userauth is OK
2025-12-12T14:13:18.904 [DEBUG] [Thread-70983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:13:18.904 [DEBUG] [Thread-70983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:13:18.904 [DEBUG] [Thread-70983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:13:18.904 [DEBUG] [Thread-70983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:13:18.927 [INFO] [Thread-70983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:13:18.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:13:18.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:13:19.820 [DEBUG] [Thread-70983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:13:19.820 [DEBUG] [Thread-70983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:13:19.868 [DEBUG] [Thread-70983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:13:19.868 [DEBUG] [Thread-70983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:13:19.877 [DEBUG] [Thread-70983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:13:19.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:13: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')
2025-12-12T14:13:19.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:13:19.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:13:19.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:13:19.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:13:19.911 [DEBUG] [Thread-70983] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:13:22.057 [DEBUG] [Thread-70985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:37.104 [DEBUG] [Thread-70986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:46.733 [DEBUG] [Thread-70987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:49.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:13:49.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:13:49.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:13:50.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:50.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 13, 35), 23.16, 21.2, 0.0, 55.91, 21.46, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:13:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:13:35
2025-12-12T14:13:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:13:50.909 [DEBUG] [Thread-70988] [transport.py] [_log()] starting thread (client mode): 0xfabc73d0
2025-12-12T14:13:50.909 [DEBUG] [Thread-70988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:13:50.929 [DEBUG] [Thread-70988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:13:50.929 [INFO] [Thread-70988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] client lang: <none>
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] server lang: <none>
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] kex follows: False
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] Compression: none
2025-12-12T14:13:50.932 [DEBUG] [Thread-70988] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:13:50.950 [DEBUG] [Thread-70988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:13:50.951 [DEBUG] [Thread-70988] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:13:50.951 [DEBUG] [Thread-70988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:13:50.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:13:50.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:13:50.953 [DEBUG] [Thread-70988] [transport.py] [_log()] userauth is OK
2025-12-12T14:13:50.953 [DEBUG] [Thread-70988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:13:50.953 [DEBUG] [Thread-70988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:13:50.953 [DEBUG] [Thread-70988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:13:50.954 [DEBUG] [Thread-70988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:13:50.971 [INFO] [Thread-70988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:13:50.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:13:51.570 [DEBUG] [Thread-70988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:13:51.570 [DEBUG] [Thread-70988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:13:51.570 [DEBUG] [Thread-70988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:13:51.611 [DEBUG] [Thread-70988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:13:51.611 [DEBUG] [Thread-70988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:13:51.614 [DEBUG] [Thread-70988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:13:51.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:13:51.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:13:51.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:13:51.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:13:51.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:13:51.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:13:51.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:13:51.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:13:51.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:13:51.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.509122 -999.00  +21.20  42.46     27   +1.50 1 1 2 1 1   888    0 16.70 -135.67 ----- 46.9 42.5 313.8 70.2 25.1 -24.8 24.6 -26.4 24.8 -25.1 25.6 -22.7
2025-12-12T14:13:51.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:13:51.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:13:51.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.509122
2025-12-12T14:13:51.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:13:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:13:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:13:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:13:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:13:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:13:35', tmtdew=23.16, humidity=21.2, cloud=0.0, wind=55.91, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:13:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:13:51.642 [DEBUG] [Thread-70988] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:13:51.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:13:51.739 [DEBUG] [Thread-70991] [transport.py] [_log()] starting thread (client mode): 0xf81f0a00
2025-12-12T14:13:51.739 [DEBUG] [Thread-70991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:13:51.755 [DEBUG] [Thread-70991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:13:51.755 [INFO] [Thread-70991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:13:51.762 [DEBUG] [Thread-70991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] client lang: <none>
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] server lang: <none>
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] kex follows: False
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] Compression: none
2025-12-12T14:13:51.763 [DEBUG] [Thread-70991] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:13:51.820 [DEBUG] [Thread-70991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:13:51.820 [DEBUG] [Thread-70991] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:13:51.821 [DEBUG] [Thread-70991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:13:51.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:13:51.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:13:51.875 [DEBUG] [Thread-70991] [transport.py] [_log()] userauth is OK
2025-12-12T14:13:51.876 [DEBUG] [Thread-70991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:13:51.876 [DEBUG] [Thread-70991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:13:51.876 [DEBUG] [Thread-70991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:13:51.876 [DEBUG] [Thread-70991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:13:51.894 [INFO] [Thread-70991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:13:51.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:13:51.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:13:52.132 [DEBUG] [Thread-70993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:13:52.777 [DEBUG] [Thread-70991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:13:52.777 [DEBUG] [Thread-70991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:13:52.824 [DEBUG] [Thread-70991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:13:52.824 [DEBUG] [Thread-70991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:13:52.833 [DEBUG] [Thread-70991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:13:52.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:13:52.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:13:52.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:13:52.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:13:52.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:13:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:13:52.866 [DEBUG] [Thread-70991] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:14:07.172 [DEBUG] [Thread-70994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:22.201 [DEBUG] [Thread-70995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:14:22.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:14:22.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:14:23.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 14, 7), 23.06, 21.35, 0.0, 62.72, 21.44, 0, 0, 0, 2, 2, 0),)
2025-12-12T14:14:23.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:14:07
2025-12-12T14:14:23.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:14:23.853 [DEBUG] [Thread-70996] [transport.py] [_log()] starting thread (client mode): 0xf575caf0
2025-12-12T14:14:23.854 [DEBUG] [Thread-70996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:14:23.873 [DEBUG] [Thread-70996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:14:23.873 [INFO] [Thread-70996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:14:23.876 [DEBUG] [Thread-70996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] client lang: <none>
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] server lang: <none>
2025-12-12T14:14:23.882 [DEBUG] [Thread-70996] [transport.py] [_log()] kex follows: False
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] Compression: none
2025-12-12T14:14:23.883 [DEBUG] [Thread-70996] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:14:23.901 [DEBUG] [Thread-70996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:14:23.902 [DEBUG] [Thread-70996] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:14:23.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:14:23.903 [DEBUG] [Thread-70996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:14:23.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:14:23.904 [DEBUG] [Thread-70996] [transport.py] [_log()] userauth is OK
2025-12-12T14:14:23.905 [DEBUG] [Thread-70996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:14:23.905 [DEBUG] [Thread-70996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:14:23.905 [DEBUG] [Thread-70996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:14:23.905 [DEBUG] [Thread-70996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:14:23.927 [INFO] [Thread-70996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:14:23.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:14:24.509 [DEBUG] [Thread-70996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:14:24.509 [DEBUG] [Thread-70996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:14:24.509 [DEBUG] [Thread-70996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:14:24.550 [DEBUG] [Thread-70996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:14:24.550 [DEBUG] [Thread-70996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:14:24.553 [DEBUG] [Thread-70996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:14:24.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:14:24.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:14:24.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:14:24.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:14:24.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:14:24.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:14:24.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:14:24.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:14:24.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:14:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.509469 -999.00  +21.10  54.72     27   +1.50 1 1 2 1 1   888    0 16.55 -139.76 ----- 43.4 54.7 308.4 68.8 25.1 -24.6 24.6 -25.7 24.8 -25.4 25.6 -22.8
2025-12-12T14:14:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:14:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:14:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.509469
2025-12-12T14:14:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:14:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:14:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:14:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:14:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:14:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:14:07', tmtdew=23.06, humidity=21.35, cloud=0.0, wind=62.72, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:13:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:14:24.576 [DEBUG] [Thread-70996] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:14:24.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:14:24.678 [DEBUG] [Thread-70999] [transport.py] [_log()] starting thread (client mode): 0xfabc6f80
2025-12-12T14:14:24.678 [DEBUG] [Thread-70999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:14:24.693 [DEBUG] [Thread-70999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:14:24.693 [INFO] [Thread-70999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:14:24.701 [DEBUG] [Thread-70999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] client lang: <none>
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] server lang: <none>
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] kex follows: False
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] Compression: none
2025-12-12T14:14:24.702 [DEBUG] [Thread-70999] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:14:24.759 [DEBUG] [Thread-70999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:14:24.760 [DEBUG] [Thread-70999] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:14:24.760 [DEBUG] [Thread-70999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:14:24.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:14:24.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:14:24.816 [DEBUG] [Thread-70999] [transport.py] [_log()] userauth is OK
2025-12-12T14:14:24.816 [DEBUG] [Thread-70999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:14:24.816 [DEBUG] [Thread-70999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:14:24.816 [DEBUG] [Thread-70999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:14:24.816 [DEBUG] [Thread-70999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:14:24.835 [INFO] [Thread-70999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:14:24.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:14:24.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:14:25.709 [DEBUG] [Thread-70999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:14:25.709 [DEBUG] [Thread-70999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:14:25.757 [DEBUG] [Thread-70999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:14:25.757 [DEBUG] [Thread-70999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:14:25.766 [DEBUG] [Thread-70999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:14:25.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:14:25.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:14:25.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:14:25.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:14:25.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:14:25.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:14:25.801 [DEBUG] [Thread-70999] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:14:37.231 [DEBUG] [Thread-71001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:46.780 [DEBUG] [Thread-71002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:50.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:50.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:52.279 [DEBUG] [Thread-71003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:14:55.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:14:55.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:14:55.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
2025-12-12T14:14:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 14, 39), 23.19, 21.13, 0.0, 53.65, 21.33, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:14:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:14:39
2025-12-12T14:14:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:14:56.762 [DEBUG] [Thread-71004] [transport.py] [_log()] starting thread (client mode): 0xfabc5c60
2025-12-12T14:14:56.762 [DEBUG] [Thread-71004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:14:56.783 [DEBUG] [Thread-71004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:14:56.784 [INFO] [Thread-71004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:14:56.785 [DEBUG] [Thread-71004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:14:56.785 [DEBUG] [Thread-71004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:14:56.785 [DEBUG] [Thread-71004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:14:56.785 [DEBUG] [Thread-71004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:56.785 [DEBUG] [Thread-71004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:56.785 [DEBUG] [Thread-71004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] client lang: <none>
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] server lang: <none>
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] kex follows: False
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:14:56.786 [DEBUG] [Thread-71004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:14:56.787 [DEBUG] [Thread-71004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:14:56.787 [DEBUG] [Thread-71004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:14:56.787 [DEBUG] [Thread-71004] [transport.py] [_log()] Compression: none
2025-12-12T14:14:56.787 [DEBUG] [Thread-71004] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:14:56.805 [DEBUG] [Thread-71004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:14:56.805 [DEBUG] [Thread-71004] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:14:56.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:14:56.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:14:56.807 [DEBUG] [Thread-71004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:14:56.807 [DEBUG] [Thread-71004] [transport.py] [_log()] userauth is OK
2025-12-12T14:14:56.807 [DEBUG] [Thread-71004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:14:56.808 [DEBUG] [Thread-71004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:14:56.808 [DEBUG] [Thread-71004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:14:56.808 [DEBUG] [Thread-71004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:14:56.831 [INFO] [Thread-71004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:14:56.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:14:57.611 [DEBUG] [Thread-71004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:14:57.612 [DEBUG] [Thread-71004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:14:57.612 [DEBUG] [Thread-71004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:14:57.654 [DEBUG] [Thread-71004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:14:57.654 [DEBUG] [Thread-71004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:14:57.657 [DEBUG] [Thread-71004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:14:57.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:14:57.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:14:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:14:57.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:14:57.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:14:57.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:14:57.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:14:57.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:14:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:14:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.509817 -999.00  +21.10  55.57     27   +1.40 1 1 2 1 1   888    0 16.43 -146.04 ----- 37.4 55.6 309.4 70.0 25.1 -24.5 24.7 -26.7 24.9 -24.5 25.6 -23.5
2025-12-12T14:14:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:14:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:14:57.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.509817
2025-12-12T14:14:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:14:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:14:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:14:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:14:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:14:57.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:14:39', tmtdew=23.19, humidity=21.13, cloud=0.0, wind=53.65, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:14:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:14:57.690 [DEBUG] [Thread-71004] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:14:57.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:14:57.776 [DEBUG] [Thread-71007] [transport.py] [_log()] starting thread (client mode): 0xf575c340
2025-12-12T14:14:57.776 [DEBUG] [Thread-71007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:14:57.792 [DEBUG] [Thread-71007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:14:57.792 [INFO] [Thread-71007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:14:57.799 [DEBUG] [Thread-71007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:14:57.800 [DEBUG] [Thread-71007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] client lang: <none>
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] server lang: <none>
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] kex follows: False
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] Compression: none
2025-12-12T14:14:57.801 [DEBUG] [Thread-71007] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:14:57.863 [DEBUG] [Thread-71007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:14:57.864 [DEBUG] [Thread-71007] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:14:57.864 [DEBUG] [Thread-71007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:14:57.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:14:57.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:14:57.920 [DEBUG] [Thread-71007] [transport.py] [_log()] userauth is OK
2025-12-12T14:14:57.920 [DEBUG] [Thread-71007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:14:57.920 [DEBUG] [Thread-71007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:14:57.920 [DEBUG] [Thread-71007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:14:57.920 [DEBUG] [Thread-71007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:14:57.939 [INFO] [Thread-71007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:14:57.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:14:57.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:14:58.803 [DEBUG] [Thread-71007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:14:58.803 [DEBUG] [Thread-71007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:14:58.851 [DEBUG] [Thread-71007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:14:58.851 [DEBUG] [Thread-71007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:14:58.859 [DEBUG] [Thread-71007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:14:58.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:14:58.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:14:58.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:14:58.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:14:58.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:14:58.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:14:58.893 [DEBUG] [Thread-71007] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:15:07.311 [DEBUG] [Thread-71009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:15:22.352 [DEBUG] [Thread-71010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:15:28.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:15:28.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:15:28.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:15:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 15, 11), 23.55, 20.65, 0.0, 51.56, 21.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:15:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:15:11
2025-12-12T14:15:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:15:29.878 [DEBUG] [Thread-71011] [transport.py] [_log()] starting thread (client mode): 0xf575d150
2025-12-12T14:15:29.878 [DEBUG] [Thread-71011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:15:29.894 [DEBUG] [Thread-71011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:15:29.894 [INFO] [Thread-71011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] client lang: <none>
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] server lang: <none>
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] kex follows: False
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] Compression: none
2025-12-12T14:15:29.898 [DEBUG] [Thread-71011] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:15:29.917 [DEBUG] [Thread-71011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:15:29.918 [DEBUG] [Thread-71011] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:15:29.918 [DEBUG] [Thread-71011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:15:29.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:15:29.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:15:29.920 [DEBUG] [Thread-71011] [transport.py] [_log()] userauth is OK
2025-12-12T14:15:29.920 [DEBUG] [Thread-71011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:15:29.920 [DEBUG] [Thread-71011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:15:29.920 [DEBUG] [Thread-71011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:15:29.920 [DEBUG] [Thread-71011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:15:29.955 [INFO] [Thread-71011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:15:29.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:15:30.556 [DEBUG] [Thread-71011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:15:30.556 [DEBUG] [Thread-71011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:15:30.557 [DEBUG] [Thread-71011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:15:30.597 [DEBUG] [Thread-71011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:15:30.597 [DEBUG] [Thread-71011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:15:30.600 [DEBUG] [Thread-71011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:15:30.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:15:30.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:15:30.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:15:30.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:15:30.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:15:30.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:15:30.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:15:30.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:15:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:15:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.510164 -999.00  +21.30  53.50     26   +1.10 1 1 2 1 1   888    0 15.26 -155.66 ----- 47.2 53.5 300.6 59.2 25.1 -24.6 24.6 -24.7 25.0 -25.4 25.6 -22.9
2025-12-12T14:15:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:15:30.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:15:30.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.510164
2025-12-12T14:15:30.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:15:30.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:15:30.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:15:30.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:15:30.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:15:30.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:15:11', tmtdew=23.55, humidity=20.65, cloud=0.0, wind=51.56, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:14:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:15:30.624 [DEBUG] [Thread-71011] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:15:30.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:15:30.720 [DEBUG] [Thread-71014] [transport.py] [_log()] starting thread (client mode): 0xf5700160
2025-12-12T14:15:30.720 [DEBUG] [Thread-71014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:15:30.735 [DEBUG] [Thread-71014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:15:30.736 [INFO] [Thread-71014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] client lang: <none>
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] server lang: <none>
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] kex follows: False
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:15:30.744 [DEBUG] [Thread-71014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:15:30.745 [DEBUG] [Thread-71014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:15:30.745 [DEBUG] [Thread-71014] [transport.py] [_log()] Compression: none
2025-12-12T14:15:30.745 [DEBUG] [Thread-71014] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:15:30.804 [DEBUG] [Thread-71014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:15:30.804 [DEBUG] [Thread-71014] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:15:30.805 [DEBUG] [Thread-71014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:15:30.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:15:30.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:15:30.860 [DEBUG] [Thread-71014] [transport.py] [_log()] userauth is OK
2025-12-12T14:15:30.860 [DEBUG] [Thread-71014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:15:30.860 [DEBUG] [Thread-71014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:15:30.860 [DEBUG] [Thread-71014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:15:30.860 [DEBUG] [Thread-71014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:15:30.882 [INFO] [Thread-71014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:15:30.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:15:30.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:15:31.792 [DEBUG] [Thread-71014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:15:31.793 [DEBUG] [Thread-71014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:15:31.841 [DEBUG] [Thread-71014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:15:31.841 [DEBUG] [Thread-71014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:15:31.852 [DEBUG] [Thread-71014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:15:31.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:15: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')
2025-12-12T14:15:31.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:15:31.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:15:31.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:15:31.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:15:31.888 [DEBUG] [Thread-71014] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:15:37.382 [DEBUG] [Thread-71016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:15:46.835 [DEBUG] [Thread-71017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:15:50.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:15:50.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:15:52.433 [DEBUG] [Thread-71018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:01.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:16:01.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:16:01.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:16:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 15, 43), 23.84, 20.22, 0.0, 41.27, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:16:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:15:43
2025-12-12T14:16:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:16:02.931 [DEBUG] [Thread-71019] [transport.py] [_log()] starting thread (client mode): 0xf575f490
2025-12-12T14:16:02.931 [DEBUG] [Thread-71019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:16:02.951 [DEBUG] [Thread-71019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:16:02.951 [INFO] [Thread-71019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:16:02.954 [DEBUG] [Thread-71019] [transport.py] [_log()] client lang: <none>
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] server lang: <none>
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] kex follows: False
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] Compression: none
2025-12-12T14:16:02.955 [DEBUG] [Thread-71019] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:16:02.974 [DEBUG] [Thread-71019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:16:02.974 [DEBUG] [Thread-71019] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:16:02.974 [DEBUG] [Thread-71019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:16:02.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:16:02.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:16:03.017 [DEBUG] [Thread-71019] [transport.py] [_log()] userauth is OK
2025-12-12T14:16:03.017 [DEBUG] [Thread-71019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:16:03.017 [DEBUG] [Thread-71019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:16:03.017 [DEBUG] [Thread-71019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:16:03.017 [DEBUG] [Thread-71019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:16:03.032 [INFO] [Thread-71019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:16:03.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:16:03.858 [DEBUG] [Thread-71019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:16:03.858 [DEBUG] [Thread-71019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:16:03.858 [DEBUG] [Thread-71019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:16:03.898 [DEBUG] [Thread-71019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:16:03.898 [DEBUG] [Thread-71019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:16:03.901 [DEBUG] [Thread-71019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:16:03.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:16:03.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:16:03.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:16:03.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:16:03.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:16:03.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:16:03.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:16:03.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:16:03.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:16:03.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.510511 -999.00  +20.50  44.12     27   +0.80 1 1 2 1 1   888    0 16.26 -148.91 ----- 41.8 44.1 322.0 66.5 25.1 -25.2 24.6 -26.4 24.8 -27.8 25.5 -22.9
2025-12-12T14:16:03.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.510511
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:16:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:15:43', tmtdew=23.84, humidity=20.22, cloud=0.0, wind=41.27, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:15:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:16:03.922 [DEBUG] [Thread-71019] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:16:03.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:16:04.008 [DEBUG] [Thread-71022] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T14:16:04.008 [DEBUG] [Thread-71022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:16:04.022 [DEBUG] [Thread-71022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:16:04.022 [INFO] [Thread-71022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] client lang: <none>
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] server lang: <none>
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] kex follows: False
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] Compression: none
2025-12-12T14:16:04.030 [DEBUG] [Thread-71022] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:16:04.086 [DEBUG] [Thread-71022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:16:04.087 [DEBUG] [Thread-71022] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:16:04.087 [DEBUG] [Thread-71022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:16:04.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:16:04.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:16:04.143 [DEBUG] [Thread-71022] [transport.py] [_log()] userauth is OK
2025-12-12T14:16:04.143 [DEBUG] [Thread-71022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:16:04.143 [DEBUG] [Thread-71022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:16:04.143 [DEBUG] [Thread-71022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:16:04.143 [DEBUG] [Thread-71022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:16:04.160 [INFO] [Thread-71022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:16:04.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:16:04.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:16:05.016 [DEBUG] [Thread-71022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:16:05.017 [DEBUG] [Thread-71022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:16:05.065 [DEBUG] [Thread-71022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:16:05.065 [DEBUG] [Thread-71022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:16:05.074 [DEBUG] [Thread-71022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:16:05.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:16:05.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:16:05.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:16:05.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:16:05.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:16:05.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:16:05.106 [DEBUG] [Thread-71022] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:16:07.464 [DEBUG] [Thread-71024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:22.510 [DEBUG] [Thread-71025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:35.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:16:35.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:16:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:16:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 16, 15), 23.66, 20.42, 0.0, 41.53, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:16:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:16:15
2025-12-12T14:16:35.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:16:36.102 [DEBUG] [Thread-71026] [transport.py] [_log()] starting thread (client mode): 0xf81f2dd0
2025-12-12T14:16:36.102 [DEBUG] [Thread-71026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:16:36.122 [DEBUG] [Thread-71026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:16:36.122 [INFO] [Thread-71026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:16:36.123 [DEBUG] [Thread-71026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:16:36.123 [DEBUG] [Thread-71026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:16:36.123 [DEBUG] [Thread-71026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:16:36.123 [DEBUG] [Thread-71026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] client lang: <none>
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] server lang: <none>
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] kex follows: False
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] Compression: none
2025-12-12T14:16:36.124 [DEBUG] [Thread-71026] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:16:36.132 [DEBUG] [Thread-71026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:16:36.132 [DEBUG] [Thread-71026] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:16:36.132 [DEBUG] [Thread-71026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:16:36.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:16:36.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:16:36.134 [DEBUG] [Thread-71026] [transport.py] [_log()] userauth is OK
2025-12-12T14:16:36.134 [DEBUG] [Thread-71026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:16:36.134 [DEBUG] [Thread-71026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:16:36.134 [DEBUG] [Thread-71026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:16:36.134 [DEBUG] [Thread-71026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:16:36.152 [INFO] [Thread-71026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:16:36.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:16:36.750 [DEBUG] [Thread-71026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:16:36.750 [DEBUG] [Thread-71026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:16:36.751 [DEBUG] [Thread-71026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:16:36.791 [DEBUG] [Thread-71026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:16:36.791 [DEBUG] [Thread-71026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:16:36.794 [DEBUG] [Thread-71026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:16:36.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:16:36.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:16:36.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:16:36.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:16:36.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:16:36.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:16:36.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:16:36.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:16:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:16:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.511206 -999.00  +21.00  33.20     26   +1.30 1 2 2 1 1   888    0 16.30 -144.01 ----- 48.5 33.2 329.8 40.1 25.2 -25.1 24.6 -23.9 25.2 -21.2 25.8 -23.0
2025-12-12T14:16:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:16:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:16:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.511206
2025-12-12T14:16:36.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:16:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:16:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:16:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:16:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T14:16:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:16:15', tmtdew=23.66, humidity=20.42, cloud=0.0, wind=41.53, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:16:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:16:36.819 [DEBUG] [Thread-71026] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:16:36.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:16:36.917 [DEBUG] [Thread-71029] [transport.py] [_log()] starting thread (client mode): 0xfabc5750
2025-12-12T14:16:36.917 [DEBUG] [Thread-71029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:16:36.931 [DEBUG] [Thread-71029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:16:36.932 [INFO] [Thread-71029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:16:36.939 [DEBUG] [Thread-71029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:16:36.939 [DEBUG] [Thread-71029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] client lang: <none>
2025-12-12T14:16:36.940 [DEBUG] [Thread-71029] [transport.py] [_log()] server lang: <none>
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] kex follows: False
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] Compression: none
2025-12-12T14:16:36.941 [DEBUG] [Thread-71029] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:16:36.999 [DEBUG] [Thread-71029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:16:37.000 [DEBUG] [Thread-71029] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:16:37.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:16:37.001 [DEBUG] [Thread-71029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:16:37.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:16:37.056 [DEBUG] [Thread-71029] [transport.py] [_log()] userauth is OK
2025-12-12T14:16:37.056 [DEBUG] [Thread-71029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:16:37.056 [DEBUG] [Thread-71029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:16:37.056 [DEBUG] [Thread-71029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:16:37.056 [DEBUG] [Thread-71029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:16:37.075 [INFO] [Thread-71029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:16:37.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:16:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:16:37.538 [DEBUG] [Thread-71031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:37.905 [DEBUG] [Thread-71029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:16:37.905 [DEBUG] [Thread-71029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:16:37.953 [DEBUG] [Thread-71029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:16:37.953 [DEBUG] [Thread-71029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:16:37.962 [DEBUG] [Thread-71029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:16:37.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:16: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')
2025-12-12T14:16:37.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:16:37.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:16:37.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:16:37.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:16:37.997 [DEBUG] [Thread-71029] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:16:46.885 [DEBUG] [Thread-71032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:50.964 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:50.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:16:52.584 [DEBUG] [Thread-71033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:07.614 [DEBUG] [Thread-71034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:17:08.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:17:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:17:08.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 16, 47), 24.02, 19.67, 0.0, 46.39, 21.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:17:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:16:47
2025-12-12T14:17:08.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:17:08.988 [DEBUG] [Thread-71035] [transport.py] [_log()] starting thread (client mode): 0xf570df60
2025-12-12T14:17:08.989 [DEBUG] [Thread-71035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:17:09.009 [DEBUG] [Thread-71035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:17:09.010 [INFO] [Thread-71035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:17:09.012 [DEBUG] [Thread-71035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] client lang: <none>
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] server lang: <none>
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] kex follows: False
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] Compression: none
2025-12-12T14:17:09.013 [DEBUG] [Thread-71035] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:17:09.030 [DEBUG] [Thread-71035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:17:09.031 [DEBUG] [Thread-71035] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:17:09.031 [DEBUG] [Thread-71035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:17:09.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:17:09.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:17:09.033 [DEBUG] [Thread-71035] [transport.py] [_log()] userauth is OK
2025-12-12T14:17:09.034 [DEBUG] [Thread-71035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:17:09.034 [DEBUG] [Thread-71035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:17:09.034 [DEBUG] [Thread-71035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:17:09.034 [DEBUG] [Thread-71035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:17:09.052 [INFO] [Thread-71035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:17:09.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:17:09.867 [DEBUG] [Thread-71035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:17:09.868 [DEBUG] [Thread-71035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:17:09.868 [DEBUG] [Thread-71035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:17:09.909 [DEBUG] [Thread-71035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:17:09.909 [DEBUG] [Thread-71035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:17:09.912 [DEBUG] [Thread-71035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:17:09.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:17:09.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:17:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:17:09.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:17:09.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:17:09.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:17:09.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:17:09.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:17:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:17:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.511553 -999.00  +21.20  41.75     26   +1.10 1 1 2 1 1   888    0 16.43 -133.63 ----- 49.3 41.8 309.2 53.9 25.2 -25.0 24.8 -24.9 25.1 -22.9 25.8 -22.6
2025-12-12T14:17:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:17:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:17:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.511553
2025-12-12T14:17:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:17:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:17:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:17:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:17:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:17:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:16:47', tmtdew=24.02, humidity=19.67, cloud=0.0, wind=46.39, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:16:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:17:09.938 [DEBUG] [Thread-71035] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:17:10.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:17:10.034 [DEBUG] [Thread-71038] [transport.py] [_log()] starting thread (client mode): 0xf813ca00
2025-12-12T14:17:10.034 [DEBUG] [Thread-71038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:17:10.049 [DEBUG] [Thread-71038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:17:10.049 [INFO] [Thread-71038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:17:10.056 [DEBUG] [Thread-71038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] client lang: <none>
2025-12-12T14:17:10.057 [DEBUG] [Thread-71038] [transport.py] [_log()] server lang: <none>
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] kex follows: False
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] Compression: none
2025-12-12T14:17:10.058 [DEBUG] [Thread-71038] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:17:10.115 [DEBUG] [Thread-71038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:17:10.116 [DEBUG] [Thread-71038] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:17:10.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:17:10.117 [DEBUG] [Thread-71038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:17:10.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:17:10.171 [DEBUG] [Thread-71038] [transport.py] [_log()] userauth is OK
2025-12-12T14:17:10.171 [DEBUG] [Thread-71038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:17:10.172 [DEBUG] [Thread-71038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:17:10.172 [DEBUG] [Thread-71038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:17:10.172 [DEBUG] [Thread-71038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:17:10.190 [INFO] [Thread-71038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:17:10.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:17:10.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:17:10.993 [DEBUG] [Thread-71038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:17:10.993 [DEBUG] [Thread-71038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:17:11.042 [DEBUG] [Thread-71038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:17:11.042 [DEBUG] [Thread-71038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:17:11.051 [DEBUG] [Thread-71038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:17:11.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:17:11.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:17:11.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:17:11.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:17:11.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:17:11.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:17:11.087 [DEBUG] [Thread-71038] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:17:22.645 [DEBUG] [Thread-71040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:37.681 [DEBUG] [Thread-71041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:17:41.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:17:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:17:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 17, 19), 24.01, 19.67, 0.0, 46.6, 21.74, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:17:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:17:19
2025-12-12T14:17:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:17:42.076 [DEBUG] [Thread-71042] [transport.py] [_log()] starting thread (client mode): 0xfabc7a30
2025-12-12T14:17:42.076 [DEBUG] [Thread-71042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:17:42.097 [DEBUG] [Thread-71042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:17:42.097 [INFO] [Thread-71042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:17:42.100 [DEBUG] [Thread-71042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] client lang: <none>
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] server lang: <none>
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] kex follows: False
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:17:42.101 [DEBUG] [Thread-71042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:17:42.102 [DEBUG] [Thread-71042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:17:42.102 [DEBUG] [Thread-71042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:17:42.102 [DEBUG] [Thread-71042] [transport.py] [_log()] Compression: none
2025-12-12T14:17:42.102 [DEBUG] [Thread-71042] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:17:42.123 [DEBUG] [Thread-71042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:17:42.123 [DEBUG] [Thread-71042] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:17:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:17:42.124 [DEBUG] [Thread-71042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:17:42.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:17:42.126 [DEBUG] [Thread-71042] [transport.py] [_log()] userauth is OK
2025-12-12T14:17:42.126 [DEBUG] [Thread-71042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:17:42.126 [DEBUG] [Thread-71042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:17:42.126 [DEBUG] [Thread-71042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:17:42.126 [DEBUG] [Thread-71042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:17:42.149 [INFO] [Thread-71042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:17:42.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:17:42.781 [DEBUG] [Thread-71042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:17:42.781 [DEBUG] [Thread-71042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:17:42.781 [DEBUG] [Thread-71042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:17:42.823 [DEBUG] [Thread-71042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:17:42.823 [DEBUG] [Thread-71042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:17:42.826 [DEBUG] [Thread-71042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:17:42.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:17:42.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:17:42.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:17:42.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:17:42.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:17:42.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:17:42.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:17:42.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:17:42.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:17:42.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.511900 -999.00  +20.60  46.97     26   +0.80 1 1 2 1 1   888    0 16.56 -118.30 ----- 41.0 47.0 302.2 65.8 25.1 -25.7 24.7 -26.1 25.1 -25.8 25.6 -22.9
2025-12-12T14:17:42.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:17:42.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:17:42.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.511900
2025-12-12T14:17:42.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:17:42.849 [DEBUG] [Thread-71042] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:17:42.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:17:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:17:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:17:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:17:42.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:17:19', tmtdew=24.01, humidity=19.67, cloud=0.0, wind=46.6, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:17:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:17:42.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:17:42.951 [DEBUG] [Thread-71045] [transport.py] [_log()] starting thread (client mode): 0xf81c18d0
2025-12-12T14:17:42.951 [DEBUG] [Thread-71045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:17:42.970 [DEBUG] [Thread-71045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:17:42.970 [INFO] [Thread-71045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:17:42.977 [DEBUG] [Thread-71045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:17:42.977 [DEBUG] [Thread-71045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] client lang: <none>
2025-12-12T14:17:42.978 [DEBUG] [Thread-71045] [transport.py] [_log()] server lang: <none>
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] kex follows: False
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:17:42.979 [DEBUG] [Thread-71045] [transport.py] [_log()] Compression: none
2025-12-12T14:17:42.980 [DEBUG] [Thread-71045] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:17:43.035 [DEBUG] [Thread-71045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:17:43.036 [DEBUG] [Thread-71045] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:17:43.036 [DEBUG] [Thread-71045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:17:43.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:17:43.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:17:43.091 [DEBUG] [Thread-71045] [transport.py] [_log()] userauth is OK
2025-12-12T14:17:43.092 [DEBUG] [Thread-71045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:17:43.092 [DEBUG] [Thread-71045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:17:43.092 [DEBUG] [Thread-71045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:17:43.092 [DEBUG] [Thread-71045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:17:43.111 [INFO] [Thread-71045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:17:43.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:17:43.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:17:43.969 [DEBUG] [Thread-71045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:17:43.969 [DEBUG] [Thread-71045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:17:44.017 [DEBUG] [Thread-71045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:17:44.017 [DEBUG] [Thread-71045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:17:44.026 [DEBUG] [Thread-71045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:17:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:17:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:17:44.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:17:44.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:17:44.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:17:44.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:17:44.062 [DEBUG] [Thread-71045] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:17:46.937 [DEBUG] [Thread-71047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:51.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:51.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:17:52.708 [DEBUG] [Thread-71048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:07.745 [DEBUG] [Thread-71049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:14.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:18:14.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:18:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:18:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 17, 51), 23.29, 20.83, 0.0, 57.64, 21.26, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:18:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:17:51
2025-12-12T14:18:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:18:15.066 [DEBUG] [Thread-71050] [transport.py] [_log()] starting thread (client mode): 0xf5740220
2025-12-12T14:18:15.066 [DEBUG] [Thread-71050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:18:15.087 [DEBUG] [Thread-71050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:18:15.087 [INFO] [Thread-71050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:18:15.088 [DEBUG] [Thread-71050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:18:15.088 [DEBUG] [Thread-71050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] client lang: <none>
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] server lang: <none>
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] kex follows: False
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] Compression: none
2025-12-12T14:18:15.089 [DEBUG] [Thread-71050] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:18:15.101 [DEBUG] [Thread-71050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:18:15.101 [DEBUG] [Thread-71050] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:18:15.102 [DEBUG] [Thread-71050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:18:15.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:18:15.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:18:15.103 [DEBUG] [Thread-71050] [transport.py] [_log()] userauth is OK
2025-12-12T14:18:15.103 [DEBUG] [Thread-71050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:18:15.104 [DEBUG] [Thread-71050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:18:15.104 [DEBUG] [Thread-71050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:18:15.104 [DEBUG] [Thread-71050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:18:15.134 [INFO] [Thread-71050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:18:15.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:18:15.961 [DEBUG] [Thread-71050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:18:15.961 [DEBUG] [Thread-71050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:18:15.961 [DEBUG] [Thread-71050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:18:16.002 [DEBUG] [Thread-71050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:18:16.002 [DEBUG] [Thread-71050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:18:16.005 [DEBUG] [Thread-71050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:18:16.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:18:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:18:16.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:18:16.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:18:16.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:18:16.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:18:16.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:18:16.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:18:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:18:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.512247 -999.00  +21.10  47.02     26   +1.10 1 1 2 1 1   888    0 16.92 -114.51 ----- 50.7 47.0 312.8 55.6 25.2 -24.7 24.7 -24.8 25.0 -23.0 25.7 -23.0
2025-12-12T14:18:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:18:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:18:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.512247
2025-12-12T14:18:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:18:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:18:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:18:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:18:16.027 [DEBUG] [Thread-71050] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:18:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:18:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:17:51', tmtdew=23.29, humidity=20.83, cloud=0.0, wind=57.64, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:17:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:18:16.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:18:16.120 [DEBUG] [Thread-71053] [transport.py] [_log()] starting thread (client mode): 0xf5742c80
2025-12-12T14:18:16.120 [DEBUG] [Thread-71053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:18:16.135 [DEBUG] [Thread-71053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:18:16.135 [INFO] [Thread-71053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:18:16.145 [DEBUG] [Thread-71053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:18:16.146 [DEBUG] [Thread-71053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] client lang: <none>
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] server lang: <none>
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] kex follows: False
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] Compression: none
2025-12-12T14:18:16.147 [DEBUG] [Thread-71053] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:18:16.205 [DEBUG] [Thread-71053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:18:16.206 [DEBUG] [Thread-71053] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:18:16.206 [DEBUG] [Thread-71053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:18:16.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:18:16.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:18:16.269 [DEBUG] [Thread-71053] [transport.py] [_log()] userauth is OK
2025-12-12T14:18:16.269 [DEBUG] [Thread-71053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:18:16.269 [DEBUG] [Thread-71053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:18:16.270 [DEBUG] [Thread-71053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:18:16.270 [DEBUG] [Thread-71053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:18:16.291 [INFO] [Thread-71053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:18:16.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:18:16.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:18:17.128 [DEBUG] [Thread-71053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:18:17.128 [DEBUG] [Thread-71053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:18:17.176 [DEBUG] [Thread-71053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:18:17.177 [DEBUG] [Thread-71053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:18:17.186 [DEBUG] [Thread-71053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:18:17.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:18:17.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:18:17.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:18:17.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:18:17.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:18:17.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:18:17.221 [DEBUG] [Thread-71053] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:18:22.773 [DEBUG] [Thread-71055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:37.823 [DEBUG] [Thread-71056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:46.987 [DEBUG] [Thread-71057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:47.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:18:47.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:18:47.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:18:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 18, 23), 23.56, 20.49, 0.0, 56.92, 21.41, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:18:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:18:23
2025-12-12T14:18:48.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:18:48.213 [DEBUG] [Thread-71058] [transport.py] [_log()] starting thread (client mode): 0xf570c880
2025-12-12T14:18:48.213 [DEBUG] [Thread-71058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:18:48.233 [DEBUG] [Thread-71058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:18:48.233 [INFO] [Thread-71058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:18:48.236 [DEBUG] [Thread-71058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:18:48.236 [DEBUG] [Thread-71058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:18:48.236 [DEBUG] [Thread-71058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] client lang: <none>
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] server lang: <none>
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] kex follows: False
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] Compression: none
2025-12-12T14:18:48.237 [DEBUG] [Thread-71058] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:18:48.254 [DEBUG] [Thread-71058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:18:48.254 [DEBUG] [Thread-71058] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:18:48.254 [DEBUG] [Thread-71058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:18:48.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:18:48.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:18:48.255 [DEBUG] [Thread-71058] [transport.py] [_log()] userauth is OK
2025-12-12T14:18:48.255 [DEBUG] [Thread-71058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:18:48.255 [DEBUG] [Thread-71058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:18:48.255 [DEBUG] [Thread-71058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:18:48.255 [DEBUG] [Thread-71058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:18:48.272 [INFO] [Thread-71058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:18:48.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:18:48.902 [DEBUG] [Thread-71058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:18:48.902 [DEBUG] [Thread-71058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:18:48.903 [DEBUG] [Thread-71058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:18:48.943 [DEBUG] [Thread-71058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:18:48.943 [DEBUG] [Thread-71058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:18:48.946 [DEBUG] [Thread-71058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:18:48.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:18:48.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:18:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:18:48.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:18:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:18:48.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:18:48.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:18:48.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:18:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:18:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.512595 -999.00  +20.80  61.39     26   +0.80 1 1 3 1 1   888    0 17.09 -111.95 ----- 55.9 61.4 314.6 72.5 25.1 -26.4 24.7 -24.0 25.1 -24.2 25.6 -23.9
2025-12-12T14:18:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:18:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:18:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.512595
2025-12-12T14:18:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:18:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:18:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:18:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:18:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:18:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:18:23', tmtdew=23.56, humidity=20.49, cloud=0.0, wind=56.92, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:18:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:18:48.972 [DEBUG] [Thread-71058] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:18:49.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:18:49.069 [DEBUG] [Thread-71061] [transport.py] [_log()] starting thread (client mode): 0xfabc7a30
2025-12-12T14:18:49.070 [DEBUG] [Thread-71061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:18:49.085 [DEBUG] [Thread-71061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:18:49.086 [INFO] [Thread-71061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:18:49.093 [DEBUG] [Thread-71061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:18:49.093 [DEBUG] [Thread-71061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:18:49.093 [DEBUG] [Thread-71061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] client lang: <none>
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] server lang: <none>
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] kex follows: False
2025-12-12T14:18:49.094 [DEBUG] [Thread-71061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:18:49.095 [DEBUG] [Thread-71061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:18:49.095 [DEBUG] [Thread-71061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:18:49.095 [DEBUG] [Thread-71061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:18:49.095 [DEBUG] [Thread-71061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:18:49.095 [DEBUG] [Thread-71061] [transport.py] [_log()] Compression: none
2025-12-12T14:18:49.095 [DEBUG] [Thread-71061] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:18:49.151 [DEBUG] [Thread-71061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:18:49.152 [DEBUG] [Thread-71061] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:18:49.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:18:49.153 [DEBUG] [Thread-71061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:18:49.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:18:49.207 [DEBUG] [Thread-71061] [transport.py] [_log()] userauth is OK
2025-12-12T14:18:49.207 [DEBUG] [Thread-71061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:18:49.207 [DEBUG] [Thread-71061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:18:49.207 [DEBUG] [Thread-71061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:18:49.207 [DEBUG] [Thread-71061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:18:49.230 [INFO] [Thread-71061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:18:49.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:18:49.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:18:50.109 [DEBUG] [Thread-71061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:18:50.109 [DEBUG] [Thread-71061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:18:50.157 [DEBUG] [Thread-71061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:18:50.157 [DEBUG] [Thread-71061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:18:50.166 [DEBUG] [Thread-71061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:18:50.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:18:50.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:18:50.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:18:50.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:18:50.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:18:50.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:18:50.201 [DEBUG] [Thread-71061] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:18:51.248 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:51.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:18:52.850 [DEBUG] [Thread-71063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:07.888 [DEBUG] [Thread-71064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:20.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:19:20.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:19:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:19:20.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 18, 55), 24.02, 19.94, 0.0, 58.31, 21.48, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:19:20.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:18:55
2025-12-12T14:19:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:19:21.209 [DEBUG] [Thread-71065] [transport.py] [_log()] starting thread (client mode): 0xf81c3280
2025-12-12T14:19:21.209 [DEBUG] [Thread-71065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:19:21.230 [DEBUG] [Thread-71065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:19:21.230 [INFO] [Thread-71065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:19:21.233 [DEBUG] [Thread-71065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:19:21.233 [DEBUG] [Thread-71065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:19:21.233 [DEBUG] [Thread-71065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:19:21.233 [DEBUG] [Thread-71065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:21.233 [DEBUG] [Thread-71065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] client lang: <none>
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] server lang: <none>
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] kex follows: False
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] Compression: none
2025-12-12T14:19:21.234 [DEBUG] [Thread-71065] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:19:21.250 [DEBUG] [Thread-71065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:19:21.251 [DEBUG] [Thread-71065] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:19:21.252 [DEBUG] [Thread-71065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:19:21.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:19:21.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:19:21.253 [DEBUG] [Thread-71065] [transport.py] [_log()] userauth is OK
2025-12-12T14:19:21.254 [DEBUG] [Thread-71065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:19:21.254 [DEBUG] [Thread-71065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:19:21.254 [DEBUG] [Thread-71065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:19:21.254 [DEBUG] [Thread-71065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:19:21.278 [INFO] [Thread-71065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:19:21.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:19:22.054 [DEBUG] [Thread-71065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:19:22.054 [DEBUG] [Thread-71065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:19:22.054 [DEBUG] [Thread-71065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:19:22.095 [DEBUG] [Thread-71065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:19:22.095 [DEBUG] [Thread-71065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:19:22.098 [DEBUG] [Thread-71065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:19:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:19:22.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:19:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:19:22.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:19:22.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:19:22.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:19:22.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:19:22.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:19:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:19:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.512942 -999.00  +20.40  60.93     27   +0.90 1 1 3 1 1   888    0 17.03 -113.03 ----- 49.0 60.9 311.0 66.6 25.0 -25.2 24.7 -24.9 25.0 -23.5 25.6 -23.4
2025-12-12T14:19:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:19:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:19:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.512942
2025-12-12T14:19:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:19:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:19:22.125 [DEBUG] [Thread-71065] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:19:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:19:22.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:19:22.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:19:22.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:18:55', tmtdew=24.02, humidity=19.94, cloud=0.0, wind=58.31, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:18:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:19:22.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:19:22.237 [DEBUG] [Thread-71068] [transport.py] [_log()] starting thread (client mode): 0xf575ee90
2025-12-12T14:19:22.238 [DEBUG] [Thread-71068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:19:22.255 [DEBUG] [Thread-71068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:19:22.255 [INFO] [Thread-71068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:19:22.265 [DEBUG] [Thread-71068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] client lang: <none>
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] server lang: <none>
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] kex follows: False
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:19:22.266 [DEBUG] [Thread-71068] [transport.py] [_log()] Compression: none
2025-12-12T14:19:22.267 [DEBUG] [Thread-71068] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:19:22.329 [DEBUG] [Thread-71068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:19:22.329 [DEBUG] [Thread-71068] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:19:22.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:19:22.330 [DEBUG] [Thread-71068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:19:22.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:19:22.398 [DEBUG] [Thread-71068] [transport.py] [_log()] userauth is OK
2025-12-12T14:19:22.399 [DEBUG] [Thread-71068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:19:22.399 [DEBUG] [Thread-71068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:19:22.399 [DEBUG] [Thread-71068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:19:22.399 [DEBUG] [Thread-71068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:19:22.424 [INFO] [Thread-71068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:19:22.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:19:22.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:19:22.917 [DEBUG] [Thread-71070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:23.263 [DEBUG] [Thread-71068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:19:23.263 [DEBUG] [Thread-71068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:19:23.311 [DEBUG] [Thread-71068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:19:23.311 [DEBUG] [Thread-71068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:19:23.320 [DEBUG] [Thread-71068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:19:23.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:19:23.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:19:23.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:19:23.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:19:23.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:19:23.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:19:23.355 [DEBUG] [Thread-71068] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:19:37.968 [DEBUG] [Thread-71071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:47.036 [DEBUG] [Thread-71072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:51.391 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:51.393 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:53.001 [DEBUG] [Thread-71073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:19:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:19:53.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:19:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:19:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 19, 28), 23.45, 20.62, 0.0, 55.65, 20.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:19:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:19:28
2025-12-12T14:19:54.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:19:54.398 [DEBUG] [Thread-71074] [transport.py] [_log()] starting thread (client mode): 0xf570fd30
2025-12-12T14:19:54.398 [DEBUG] [Thread-71074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:19:54.419 [DEBUG] [Thread-71074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:19:54.419 [INFO] [Thread-71074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] client lang: <none>
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] server lang: <none>
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] kex follows: False
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] Compression: none
2025-12-12T14:19:54.422 [DEBUG] [Thread-71074] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:19:54.440 [DEBUG] [Thread-71074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:19:54.440 [DEBUG] [Thread-71074] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:19:54.440 [DEBUG] [Thread-71074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:19:54.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:19:54.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:19:54.441 [DEBUG] [Thread-71074] [transport.py] [_log()] userauth is OK
2025-12-12T14:19:54.441 [DEBUG] [Thread-71074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:19:54.441 [DEBUG] [Thread-71074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:19:54.441 [DEBUG] [Thread-71074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:19:54.441 [DEBUG] [Thread-71074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:19:54.450 [INFO] [Thread-71074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:19:54.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:19:55.117 [DEBUG] [Thread-71074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:19:55.117 [DEBUG] [Thread-71074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:19:55.118 [DEBUG] [Thread-71074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:19:55.159 [DEBUG] [Thread-71074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:19:55.159 [DEBUG] [Thread-71074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:19:55.161 [DEBUG] [Thread-71074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:19:55.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:19:55.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:19:55.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:19:55.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:19:55.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:19:55.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:19:55.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.513289 -999.00  +20.70  40.08     27   +1.20 1 1 2 1 1   888    0 16.78 -116.26 ----- 37.4 40.1 318.8 60.3 25.2 -23.7 24.5 -25.9 25.0 -24.0 25.6 -21.8
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.513289
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:19:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:19:28', tmtdew=23.45, humidity=20.62, cloud=0.0, wind=55.65, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:19:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:19:55.180 [DEBUG] [Thread-71074] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:19:55.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:19:55.268 [DEBUG] [Thread-71077] [transport.py] [_log()] starting thread (client mode): 0xf570f7f0
2025-12-12T14:19:55.268 [DEBUG] [Thread-71077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:19:55.282 [DEBUG] [Thread-71077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:19:55.283 [INFO] [Thread-71077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] client lang: <none>
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] server lang: <none>
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] kex follows: False
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] Compression: none
2025-12-12T14:19:55.290 [DEBUG] [Thread-71077] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:19:55.345 [DEBUG] [Thread-71077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:19:55.345 [DEBUG] [Thread-71077] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:19:55.345 [DEBUG] [Thread-71077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:19:55.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:19:55.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:19:55.403 [DEBUG] [Thread-71077] [transport.py] [_log()] userauth is OK
2025-12-12T14:19:55.403 [DEBUG] [Thread-71077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:19:55.403 [DEBUG] [Thread-71077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:19:55.403 [DEBUG] [Thread-71077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:19:55.403 [DEBUG] [Thread-71077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:19:55.416 [INFO] [Thread-71077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:19:55.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:19:55.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:19:56.264 [DEBUG] [Thread-71077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:19:56.264 [DEBUG] [Thread-71077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:19:56.312 [DEBUG] [Thread-71077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:19:56.312 [DEBUG] [Thread-71077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:19:56.321 [DEBUG] [Thread-71077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:19:56.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:19:56.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:19:56.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:19:56.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:19:56.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:19:56.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:19:56.352 [DEBUG] [Thread-71077] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:20:08.030 [DEBUG] [Thread-71079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:23.076 [DEBUG] [Thread-71080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:26.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:20:26.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:20:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:20:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 19, 28), 23.45, 20.62, 0.0, 55.65, 20.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:20:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:19:28
2025-12-12T14:20:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:20:27.350 [DEBUG] [Thread-71081] [transport.py] [_log()] starting thread (client mode): 0xfabc5e10
2025-12-12T14:20:27.350 [DEBUG] [Thread-71081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:20:27.371 [DEBUG] [Thread-71081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:20:27.371 [INFO] [Thread-71081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] client lang: <none>
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] server lang: <none>
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] kex follows: False
2025-12-12T14:20:27.375 [DEBUG] [Thread-71081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:20:27.376 [DEBUG] [Thread-71081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:20:27.376 [DEBUG] [Thread-71081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:20:27.376 [DEBUG] [Thread-71081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:20:27.376 [DEBUG] [Thread-71081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:20:27.376 [DEBUG] [Thread-71081] [transport.py] [_log()] Compression: none
2025-12-12T14:20:27.376 [DEBUG] [Thread-71081] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:20:27.395 [DEBUG] [Thread-71081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:20:27.396 [DEBUG] [Thread-71081] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:20:27.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:20:27.397 [DEBUG] [Thread-71081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:20:27.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:20:27.400 [DEBUG] [Thread-71081] [transport.py] [_log()] userauth is OK
2025-12-12T14:20:27.400 [DEBUG] [Thread-71081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:20:27.400 [DEBUG] [Thread-71081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:20:27.400 [DEBUG] [Thread-71081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:20:27.400 [DEBUG] [Thread-71081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:20:27.437 [INFO] [Thread-71081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:20:27.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:20:28.028 [DEBUG] [Thread-71081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:20:28.028 [DEBUG] [Thread-71081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:20:28.028 [DEBUG] [Thread-71081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:20:28.069 [DEBUG] [Thread-71081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:20:28.069 [DEBUG] [Thread-71081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:20:28.072 [DEBUG] [Thread-71081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:20:28.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:20:28.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:20:28.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:20:28.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:20:28.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:20:28.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:20:28.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:20:28.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:20:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:20:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.513636 -999.00  +21.30  37.17     26   +1.20 1 2 2 1 1   888    0 17.08 -114.06 ----- 51.7 37.2 313.4 52.1 25.2 -25.5 24.7 -25.0 25.2 -21.0 25.8 -22.2
2025-12-12T14:20:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:20:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:20:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.513636
2025-12-12T14:20:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:20:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:20:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:20:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:20:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T14:20:28.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:19:28', tmtdew=23.45, humidity=20.62, cloud=0.0, wind=55.65, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:19:38.150', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:20:28.097 [DEBUG] [Thread-71081] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:20:28.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:20:28.195 [DEBUG] [Thread-71084] [transport.py] [_log()] starting thread (client mode): 0xf575f6a0
2025-12-12T14:20:28.195 [DEBUG] [Thread-71084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:20:28.213 [DEBUG] [Thread-71084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:20:28.213 [INFO] [Thread-71084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:20:28.220 [DEBUG] [Thread-71084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:20:28.220 [DEBUG] [Thread-71084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] client lang: <none>
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] server lang: <none>
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] kex follows: False
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] Compression: none
2025-12-12T14:20:28.221 [DEBUG] [Thread-71084] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:20:28.278 [DEBUG] [Thread-71084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:20:28.278 [DEBUG] [Thread-71084] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:20:28.279 [DEBUG] [Thread-71084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:20:28.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:20:28.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:20:28.335 [DEBUG] [Thread-71084] [transport.py] [_log()] userauth is OK
2025-12-12T14:20:28.335 [DEBUG] [Thread-71084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:20:28.335 [DEBUG] [Thread-71084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:20:28.335 [DEBUG] [Thread-71084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:20:28.336 [DEBUG] [Thread-71084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:20:28.355 [INFO] [Thread-71084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:20:28.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:20:28.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:20:29.190 [DEBUG] [Thread-71084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:20:29.190 [DEBUG] [Thread-71084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:20:29.238 [DEBUG] [Thread-71084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:20:29.238 [DEBUG] [Thread-71084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:20:29.248 [DEBUG] [Thread-71084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:20:29.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:20:29.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:20:29.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:20:29.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:20:29.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:20:29.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:20:29.281 [DEBUG] [Thread-71084] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:20:38.103 [DEBUG] [Thread-71086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:47.088 [DEBUG] [Thread-71087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:51.532 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:51.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:53.147 [DEBUG] [Thread-71088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:20:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:20:59.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:20:59.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:20:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 20, 32), 23.24, 20.67, 0.0, 48.06, 21.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:20:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:20:32
2025-12-12T14:21:00.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:21:00.256 [DEBUG] [Thread-71089] [transport.py] [_log()] starting thread (client mode): 0xf575f250
2025-12-12T14:21:00.256 [DEBUG] [Thread-71089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:21:00.278 [DEBUG] [Thread-71089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:21:00.278 [INFO] [Thread-71089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] client lang: <none>
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] server lang: <none>
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] kex follows: False
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] Compression: none
2025-12-12T14:21:00.281 [DEBUG] [Thread-71089] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:21:00.301 [DEBUG] [Thread-71089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:21:00.301 [DEBUG] [Thread-71089] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:21:00.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:21:00.302 [DEBUG] [Thread-71089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:21:00.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:21:00.304 [DEBUG] [Thread-71089] [transport.py] [_log()] userauth is OK
2025-12-12T14:21:00.305 [DEBUG] [Thread-71089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:21:00.305 [DEBUG] [Thread-71089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:21:00.305 [DEBUG] [Thread-71089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:21:00.305 [DEBUG] [Thread-71089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:21:00.328 [INFO] [Thread-71089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:21:00.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:21:00.928 [DEBUG] [Thread-71089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:21:00.928 [DEBUG] [Thread-71089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:21:00.929 [DEBUG] [Thread-71089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:21:00.970 [DEBUG] [Thread-71089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:21:00.970 [DEBUG] [Thread-71089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:21:00.973 [DEBUG] [Thread-71089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:21:00.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:21:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:21:00.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:21:00.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:21:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:21:00.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:21:00.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:21:00.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:21:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:21:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.513983 -999.00  +21.40  46.07     25   +0.90 1 1 2 1 1   888    0 16.59 -112.67 ----- 47.6 46.1 313.6 66.8 25.3 -25.0 24.8 -24.1 25.2 -22.0 25.8 -22.0
2025-12-12T14:21:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:21:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:21:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.513983
2025-12-12T14:21:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:21:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:21:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:21:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:21:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:21:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:20:32', tmtdew=23.24, humidity=20.67, cloud=0.0, wind=48.06, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:20:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:21:01.000 [DEBUG] [Thread-71089] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:21:01.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:21:01.096 [DEBUG] [Thread-71092] [transport.py] [_log()] starting thread (client mode): 0xf575f490
2025-12-12T14:21:01.096 [DEBUG] [Thread-71092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:21:01.111 [DEBUG] [Thread-71092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:21:01.111 [INFO] [Thread-71092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] client lang: <none>
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] server lang: <none>
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] kex follows: False
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:21:01.118 [DEBUG] [Thread-71092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:21:01.119 [DEBUG] [Thread-71092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:21:01.119 [DEBUG] [Thread-71092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:21:01.119 [DEBUG] [Thread-71092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:21:01.119 [DEBUG] [Thread-71092] [transport.py] [_log()] Compression: none
2025-12-12T14:21:01.119 [DEBUG] [Thread-71092] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:21:01.178 [DEBUG] [Thread-71092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:21:01.178 [DEBUG] [Thread-71092] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:21:01.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:21:01.179 [DEBUG] [Thread-71092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:21:01.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:21:01.234 [DEBUG] [Thread-71092] [transport.py] [_log()] userauth is OK
2025-12-12T14:21:01.235 [DEBUG] [Thread-71092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:21:01.235 [DEBUG] [Thread-71092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:21:01.235 [DEBUG] [Thread-71092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:21:01.235 [DEBUG] [Thread-71092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:21:01.254 [INFO] [Thread-71092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:21:01.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:21:01.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:21:02.176 [DEBUG] [Thread-71092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:21:02.177 [DEBUG] [Thread-71092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:21:02.225 [DEBUG] [Thread-71092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:21:02.225 [DEBUG] [Thread-71092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:21:02.234 [DEBUG] [Thread-71092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:21:02.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:21:02.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:21:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:21:02.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:21:02.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:21:02.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:21:02.269 [DEBUG] [Thread-71092] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:21:08.175 [DEBUG] [Thread-71094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:21:23.217 [DEBUG] [Thread-71095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:21:32.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:21:32.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:21:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:21:32.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 21, 4), 23.35, 20.52, 0.0, 44.3, 21.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:21:32.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:21:04
2025-12-12T14:21:33.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:21:33.274 [DEBUG] [Thread-71096] [transport.py] [_log()] starting thread (client mode): 0xf5703fd0
2025-12-12T14:21:33.274 [DEBUG] [Thread-71096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:21:33.295 [DEBUG] [Thread-71096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:21:33.295 [INFO] [Thread-71096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] client lang: <none>
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] server lang: <none>
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] kex follows: False
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] Compression: none
2025-12-12T14:21:33.298 [DEBUG] [Thread-71096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:21:33.313 [DEBUG] [Thread-71096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:21:33.314 [DEBUG] [Thread-71096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:21:33.314 [DEBUG] [Thread-71096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:21:33.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:21:33.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:21:33.316 [DEBUG] [Thread-71096] [transport.py] [_log()] userauth is OK
2025-12-12T14:21:33.316 [DEBUG] [Thread-71096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:21:33.316 [DEBUG] [Thread-71096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:21:33.317 [DEBUG] [Thread-71096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:21:33.317 [DEBUG] [Thread-71096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:21:33.340 [INFO] [Thread-71096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:21:33.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:21:33.986 [DEBUG] [Thread-71096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:21:33.986 [DEBUG] [Thread-71096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:21:33.987 [DEBUG] [Thread-71096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:21:34.027 [DEBUG] [Thread-71096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:21:34.027 [DEBUG] [Thread-71096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:21:34.030 [DEBUG] [Thread-71096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:21:34.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:21:34.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:21:34.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:21:34.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:21:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:21:34.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:21:34.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:21:34.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:21:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:21:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.514678 -999.00  +22.10  42.86     24   +0.90 1 2 2 1 1   888    0 17.09 -108.29 ----- 47.5 42.9 316.2 56.2 25.4 -26.0 24.9 -24.1 25.3 -21.5 26.1 -23.2
2025-12-12T14:21:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:21:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:21:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.514678
2025-12-12T14:21:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:21:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:21:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:21:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:21:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T14:21:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:21:04', tmtdew=23.35, humidity=20.52, cloud=0.0, wind=44.3, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:21:08.179', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:21:34.056 [DEBUG] [Thread-71096] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:21:34.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:21:34.151 [DEBUG] [Thread-71099] [transport.py] [_log()] starting thread (client mode): 0xf81e5780
2025-12-12T14:21:34.151 [DEBUG] [Thread-71099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:21:34.167 [DEBUG] [Thread-71099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:21:34.167 [INFO] [Thread-71099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:21:34.174 [DEBUG] [Thread-71099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] client lang: <none>
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] server lang: <none>
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] kex follows: False
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] Compression: none
2025-12-12T14:21:34.175 [DEBUG] [Thread-71099] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:21:34.238 [DEBUG] [Thread-71099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:21:34.238 [DEBUG] [Thread-71099] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:21:34.239 [DEBUG] [Thread-71099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:21:34.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:21:34.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:21:34.301 [DEBUG] [Thread-71099] [transport.py] [_log()] userauth is OK
2025-12-12T14:21:34.301 [DEBUG] [Thread-71099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:21:34.301 [DEBUG] [Thread-71099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:21:34.301 [DEBUG] [Thread-71099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:21:34.301 [DEBUG] [Thread-71099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:21:34.326 [INFO] [Thread-71099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:21:34.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:21:34.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:21:35.167 [DEBUG] [Thread-71099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:21:35.167 [DEBUG] [Thread-71099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:21:35.217 [DEBUG] [Thread-71099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:21:35.217 [DEBUG] [Thread-71099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:21:35.226 [DEBUG] [Thread-71099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:21:35.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14: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')
2025-12-12T14:21:35.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:21:35.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:21:35.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:21:35.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:21:35.260 [DEBUG] [Thread-71099] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:21:38.249 [DEBUG] [Thread-71101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:21:47.147 [DEBUG] [Thread-71102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:21:51.673 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:21:51.674 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:21:53.282 [DEBUG] [Thread-71103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:05.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:22:05.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:22:05.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:22:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 21, 36), 24.52, 19.07, 0.0, 58.68, 21.54, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:22:05.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:21:36
2025-12-12T14:22:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:22:06.251 [DEBUG] [Thread-71104] [transport.py] [_log()] starting thread (client mode): 0xf81e4880
2025-12-12T14:22:06.252 [DEBUG] [Thread-71104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:22:06.275 [DEBUG] [Thread-71104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:22:06.275 [INFO] [Thread-71104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:22:06.278 [DEBUG] [Thread-71104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] client lang: <none>
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] server lang: <none>
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] kex follows: False
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] Compression: none
2025-12-12T14:22:06.279 [DEBUG] [Thread-71104] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:22:06.297 [DEBUG] [Thread-71104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:22:06.298 [DEBUG] [Thread-71104] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:22:06.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:22:06.298 [DEBUG] [Thread-71104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:22:06.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:22:06.300 [DEBUG] [Thread-71104] [transport.py] [_log()] userauth is OK
2025-12-12T14:22:06.300 [DEBUG] [Thread-71104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:22:06.301 [DEBUG] [Thread-71104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:22:06.301 [DEBUG] [Thread-71104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:22:06.301 [DEBUG] [Thread-71104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:22:06.324 [INFO] [Thread-71104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:22:06.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:22:06.986 [DEBUG] [Thread-71104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:22:06.986 [DEBUG] [Thread-71104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:22:06.987 [DEBUG] [Thread-71104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:22:07.028 [DEBUG] [Thread-71104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:22:07.028 [DEBUG] [Thread-71104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:22:07.031 [DEBUG] [Thread-71104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:22:07.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:22:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:22:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:22:07.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:22:07.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:22:07.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:22:07.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:22:07.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:22:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:22:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.515025 -999.00  +21.30  50.18     25   +0.60 1 1 2 1 1   888    0 16.97 -104.04 ----- 53.4 50.2 321.0 72.1 25.4 -26.0 24.9 -25.8 25.3 -24.2 26.0 -23.3
2025-12-12T14:22:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:22:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:22:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.515025
2025-12-12T14:22:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:22:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:22:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:22:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:22:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:22:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:21:36', tmtdew=24.52, humidity=19.07, cloud=0.0, wind=58.68, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:21:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:22:07.058 [DEBUG] [Thread-71104] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:22:07.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:22:07.157 [DEBUG] [Thread-71107] [transport.py] [_log()] starting thread (client mode): 0xf5702650
2025-12-12T14:22:07.158 [DEBUG] [Thread-71107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:22:07.174 [DEBUG] [Thread-71107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:22:07.174 [INFO] [Thread-71107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:22:07.182 [DEBUG] [Thread-71107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:22:07.182 [DEBUG] [Thread-71107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:22:07.182 [DEBUG] [Thread-71107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:22:07.182 [DEBUG] [Thread-71107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] client lang: <none>
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] server lang: <none>
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] kex follows: False
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:22:07.183 [DEBUG] [Thread-71107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:22:07.184 [DEBUG] [Thread-71107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:22:07.184 [DEBUG] [Thread-71107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:22:07.184 [DEBUG] [Thread-71107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:22:07.184 [DEBUG] [Thread-71107] [transport.py] [_log()] Compression: none
2025-12-12T14:22:07.184 [DEBUG] [Thread-71107] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:22:07.242 [DEBUG] [Thread-71107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:22:07.243 [DEBUG] [Thread-71107] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:22:07.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:22:07.244 [DEBUG] [Thread-71107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:22:07.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:22:07.298 [DEBUG] [Thread-71107] [transport.py] [_log()] userauth is OK
2025-12-12T14:22:07.298 [DEBUG] [Thread-71107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:22:07.298 [DEBUG] [Thread-71107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:22:07.298 [DEBUG] [Thread-71107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:22:07.298 [DEBUG] [Thread-71107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:22:07.321 [INFO] [Thread-71107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:22:07.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:22:07.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:22:08.242 [DEBUG] [Thread-71107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:22:08.242 [DEBUG] [Thread-71107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:22:08.290 [DEBUG] [Thread-71107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:22:08.290 [DEBUG] [Thread-71107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:22:08.299 [DEBUG] [Thread-71107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:22:08.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:22:08.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:22:08.310 [DEBUG] [Thread-71109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:08.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:22:08.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:22:08.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:22:08.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:22:08.335 [DEBUG] [Thread-71107] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:22:23.368 [DEBUG] [Thread-71110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:38.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:22:38.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:22:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:22:38.396 [DEBUG] [Thread-71111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 22, 8), 24.34, 19.32, 0.0, 53.07, 21.53, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:22:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:22:08
2025-12-12T14:22:39.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:22:39.316 [DEBUG] [Thread-71112] [transport.py] [_log()] starting thread (client mode): 0xf57029b0
2025-12-12T14:22:39.316 [DEBUG] [Thread-71112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:22:39.337 [DEBUG] [Thread-71112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:22:39.337 [INFO] [Thread-71112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] client lang: <none>
2025-12-12T14:22:39.340 [DEBUG] [Thread-71112] [transport.py] [_log()] server lang: <none>
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] kex follows: False
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] Compression: none
2025-12-12T14:22:39.341 [DEBUG] [Thread-71112] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:22:39.358 [DEBUG] [Thread-71112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:22:39.359 [DEBUG] [Thread-71112] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:22:39.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:22:39.359 [DEBUG] [Thread-71112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:22:39.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:22:39.361 [DEBUG] [Thread-71112] [transport.py] [_log()] userauth is OK
2025-12-12T14:22:39.361 [DEBUG] [Thread-71112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:22:39.362 [DEBUG] [Thread-71112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:22:39.362 [DEBUG] [Thread-71112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:22:39.362 [DEBUG] [Thread-71112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:22:39.380 [INFO] [Thread-71112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:22:39.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:22:40.011 [DEBUG] [Thread-71112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:22:40.012 [DEBUG] [Thread-71112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:22:40.012 [DEBUG] [Thread-71112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:22:40.053 [DEBUG] [Thread-71112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:22:40.053 [DEBUG] [Thread-71112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:22:40.056 [DEBUG] [Thread-71112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:22:40.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:22:40.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:22:40.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:22:40.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:22:40.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:22:40.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:22:40.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.515372 -999.00  +20.90  57.77     25   +0.60 1 1 2 1 1   888    0 16.95 -86.70 ----- 55.9 57.8 323.8 66.8 25.4 -26.4 24.9 -25.2 25.5 -22.6 25.9 -23.4
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.515372
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:22:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:22:08', tmtdew=24.34, humidity=19.32, cloud=0.0, wind=53.07, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:22:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:22:40.076 [DEBUG] [Thread-71112] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:22:40.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:22:40.172 [DEBUG] [Thread-71115] [transport.py] [_log()] starting thread (client mode): 0xf574d1b0
2025-12-12T14:22:40.172 [DEBUG] [Thread-71115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:22:40.187 [DEBUG] [Thread-71115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:22:40.188 [INFO] [Thread-71115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:22:40.195 [DEBUG] [Thread-71115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:22:40.195 [DEBUG] [Thread-71115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] client lang: <none>
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] server lang: <none>
2025-12-12T14:22:40.196 [DEBUG] [Thread-71115] [transport.py] [_log()] kex follows: False
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] Compression: none
2025-12-12T14:22:40.197 [DEBUG] [Thread-71115] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:22:40.254 [DEBUG] [Thread-71115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:22:40.255 [DEBUG] [Thread-71115] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:22:40.255 [DEBUG] [Thread-71115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:22:40.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:22:40.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:22:40.310 [DEBUG] [Thread-71115] [transport.py] [_log()] userauth is OK
2025-12-12T14:22:40.310 [DEBUG] [Thread-71115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:22:40.311 [DEBUG] [Thread-71115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:22:40.311 [DEBUG] [Thread-71115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:22:40.311 [DEBUG] [Thread-71115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:22:40.331 [INFO] [Thread-71115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:22:40.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:22:40.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:22:41.177 [DEBUG] [Thread-71115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:22:41.177 [DEBUG] [Thread-71115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:22:41.225 [DEBUG] [Thread-71115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:22:41.226 [DEBUG] [Thread-71115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:22:41.234 [DEBUG] [Thread-71115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:22:41.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:22:41.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:22:41.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:22:41.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:22:41.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:22:41.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:22:41.266 [DEBUG] [Thread-71115] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:22:47.208 [DEBUG] [Thread-71117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:51.813 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:51.814 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:22:53.424 [DEBUG] [Thread-71118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:08.473 [DEBUG] [Thread-71119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:23:11.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:23:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:23:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 22, 40), 23.68, 20.35, 0.0, 56.44, 21.03, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:23:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:22:40
2025-12-12T14:23:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:23:12.298 [DEBUG] [Thread-71120] [transport.py] [_log()] starting thread (client mode): 0xf574e050
2025-12-12T14:23:12.299 [DEBUG] [Thread-71120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:23:12.319 [DEBUG] [Thread-71120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:23:12.319 [INFO] [Thread-71120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] client lang: <none>
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] server lang: <none>
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] kex follows: False
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:23:12.322 [DEBUG] [Thread-71120] [transport.py] [_log()] Compression: none
2025-12-12T14:23:12.323 [DEBUG] [Thread-71120] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:23:12.338 [DEBUG] [Thread-71120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:23:12.338 [DEBUG] [Thread-71120] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:23:12.338 [DEBUG] [Thread-71120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:23:12.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:23:12.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:23:12.339 [DEBUG] [Thread-71120] [transport.py] [_log()] userauth is OK
2025-12-12T14:23:12.339 [DEBUG] [Thread-71120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:23:12.339 [DEBUG] [Thread-71120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:23:12.339 [DEBUG] [Thread-71120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:23:12.339 [DEBUG] [Thread-71120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:23:12.348 [INFO] [Thread-71120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:23:12.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:23:13.014 [DEBUG] [Thread-71120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:23:13.014 [DEBUG] [Thread-71120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:23:13.015 [DEBUG] [Thread-71120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:23:13.056 [DEBUG] [Thread-71120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:23:13.056 [DEBUG] [Thread-71120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:23:13.058 [DEBUG] [Thread-71120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:23:13.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:23:13.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:23:13.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:23:13.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:23:13.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:23:13.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:23:13.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:23:13.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.515719 -999.00  +21.10  49.92     26   +0.90 1 1 2 1 1   888    0 18.07 -81.54 ----- 34.6 49.9 330.8 67.4 25.4 -25.4 24.9 -26.2 25.5 -22.6 26.0 -22.8
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.515719
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:23:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:22:40', tmtdew=23.68, humidity=20.35, cloud=0.0, wind=56.44, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:22:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:23:13.076 [DEBUG] [Thread-71120] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:23:13.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:23:13.161 [DEBUG] [Thread-71123] [transport.py] [_log()] starting thread (client mode): 0xf574da50
2025-12-12T14:23:13.161 [DEBUG] [Thread-71123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:23:13.176 [DEBUG] [Thread-71123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:23:13.176 [INFO] [Thread-71123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] client lang: <none>
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] server lang: <none>
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] kex follows: False
2025-12-12T14:23:13.183 [DEBUG] [Thread-71123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:23:13.184 [DEBUG] [Thread-71123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:23:13.184 [DEBUG] [Thread-71123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:23:13.184 [DEBUG] [Thread-71123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:23:13.184 [DEBUG] [Thread-71123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:23:13.184 [DEBUG] [Thread-71123] [transport.py] [_log()] Compression: none
2025-12-12T14:23:13.184 [DEBUG] [Thread-71123] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:23:13.241 [DEBUG] [Thread-71123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:23:13.241 [DEBUG] [Thread-71123] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:23:13.241 [DEBUG] [Thread-71123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:23:13.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:23:13.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:23:13.298 [DEBUG] [Thread-71123] [transport.py] [_log()] userauth is OK
2025-12-12T14:23:13.298 [DEBUG] [Thread-71123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:23:13.298 [DEBUG] [Thread-71123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:23:13.298 [DEBUG] [Thread-71123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:23:13.298 [DEBUG] [Thread-71123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:23:13.312 [INFO] [Thread-71123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:23:13.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:23:13.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:23:14.167 [DEBUG] [Thread-71123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:23:14.167 [DEBUG] [Thread-71123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:23:14.214 [DEBUG] [Thread-71123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:23:14.214 [DEBUG] [Thread-71123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:23:14.222 [DEBUG] [Thread-71123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:23:14.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:23:14.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:23:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:23:14.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:23:14.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:23:14.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:23:14.253 [DEBUG] [Thread-71123] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:23:23.501 [DEBUG] [Thread-71125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:38.555 [DEBUG] [Thread-71126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:44.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:23:44.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:23:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:23:44.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 23, 12), 23.4, 20.68, 0.0, 50.85, 20.7, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:23:44.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:23:12
2025-12-12T14:23:45.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:23:45.250 [DEBUG] [Thread-71127] [transport.py] [_log()] starting thread (client mode): 0xf574c430
2025-12-12T14:23:45.250 [DEBUG] [Thread-71127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:23:45.261 [DEBUG] [Thread-71127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:23:45.261 [INFO] [Thread-71127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] client lang: <none>
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] server lang: <none>
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] kex follows: False
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] Compression: none
2025-12-12T14:23:45.265 [DEBUG] [Thread-71127] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:23:45.281 [DEBUG] [Thread-71127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:23:45.281 [DEBUG] [Thread-71127] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:23:45.281 [DEBUG] [Thread-71127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:23:45.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:23:45.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:23:45.281 [DEBUG] [Thread-71127] [transport.py] [_log()] userauth is OK
2025-12-12T14:23:45.282 [DEBUG] [Thread-71127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:23:45.282 [DEBUG] [Thread-71127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:23:45.282 [DEBUG] [Thread-71127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:23:45.282 [DEBUG] [Thread-71127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:23:45.290 [INFO] [Thread-71127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:23:45.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:23:46.011 [DEBUG] [Thread-71127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:23:46.011 [DEBUG] [Thread-71127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:23:46.011 [DEBUG] [Thread-71127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:23:46.052 [DEBUG] [Thread-71127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:23:46.052 [DEBUG] [Thread-71127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:23:46.054 [DEBUG] [Thread-71127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:23:46.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:23:46.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:23:46.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:23:46.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:23:46.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:23:46.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:23:46.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.516067 -999.00  +21.80  46.84     24   +0.70 1 1 2 1 1   888    0 18.13 -69.29 ----- 61.0 46.8 307.6 52.0 25.5 -24.5 25.0 -25.0 25.5 -28.1 26.2 -23.4
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.516067
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:23:46.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:23:12', tmtdew=23.4, humidity=20.68, cloud=0.0, wind=50.85, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:23:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:23:46.072 [DEBUG] [Thread-71127] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:23:46.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:23:46.160 [DEBUG] [Thread-71130] [transport.py] [_log()] starting thread (client mode): 0xf81e6530
2025-12-12T14:23:46.160 [DEBUG] [Thread-71130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:23:46.174 [DEBUG] [Thread-71130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:23:46.174 [INFO] [Thread-71130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] client lang: <none>
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] server lang: <none>
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] kex follows: False
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] Compression: none
2025-12-12T14:23:46.183 [DEBUG] [Thread-71130] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:23:46.241 [DEBUG] [Thread-71130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:23:46.241 [DEBUG] [Thread-71130] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:23:46.241 [DEBUG] [Thread-71130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:23:46.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:23:46.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:23:46.298 [DEBUG] [Thread-71130] [transport.py] [_log()] userauth is OK
2025-12-12T14:23:46.298 [DEBUG] [Thread-71130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:23:46.298 [DEBUG] [Thread-71130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:23:46.298 [DEBUG] [Thread-71130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:23:46.298 [DEBUG] [Thread-71130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:23:46.315 [INFO] [Thread-71130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:23:46.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:23:46.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:23:47.159 [DEBUG] [Thread-71130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:23:47.159 [DEBUG] [Thread-71130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:23:47.206 [DEBUG] [Thread-71130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:23:47.206 [DEBUG] [Thread-71130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:23:47.216 [DEBUG] [Thread-71130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:23:47.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:23:47.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:23:47.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:23:47.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:23:47.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:23:47.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:23:47.249 [DEBUG] [Thread-71130] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:23:47.254 [DEBUG] [Thread-71132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:51.955 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:51.956 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:23:53.584 [DEBUG] [Thread-71133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:08.629 [DEBUG] [Thread-71134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:17.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:24:17.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:24:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:24:17.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 23, 44), 23.62, 20.07, 0.0, 56.57, 20.83, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:24:17.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:23:44
2025-12-12T14:24:18.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:24:18.276 [DEBUG] [Thread-71135] [transport.py] [_log()] starting thread (client mode): 0xf574df90
2025-12-12T14:24:18.276 [DEBUG] [Thread-71135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:24:18.296 [DEBUG] [Thread-71135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:24:18.296 [INFO] [Thread-71135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] client lang: <none>
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] server lang: <none>
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] kex follows: False
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] Compression: none
2025-12-12T14:24:18.298 [DEBUG] [Thread-71135] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:24:18.313 [DEBUG] [Thread-71135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:24:18.313 [DEBUG] [Thread-71135] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:24:18.313 [DEBUG] [Thread-71135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:24:18.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:24:18.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:24:18.314 [DEBUG] [Thread-71135] [transport.py] [_log()] userauth is OK
2025-12-12T14:24:18.314 [DEBUG] [Thread-71135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:24:18.314 [DEBUG] [Thread-71135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:24:18.314 [DEBUG] [Thread-71135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:24:18.314 [DEBUG] [Thread-71135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:24:18.329 [INFO] [Thread-71135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:24:18.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:24:18.971 [DEBUG] [Thread-71135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:24:18.972 [DEBUG] [Thread-71135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:24:18.972 [DEBUG] [Thread-71135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:24:19.013 [DEBUG] [Thread-71135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:24:19.013 [DEBUG] [Thread-71135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:24:19.016 [DEBUG] [Thread-71135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:24:19.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:24:19.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:24:19.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:24:19.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:24:19.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:24:19.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:24:19.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:24:19.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:24:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:24:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.516414 -999.00  +21.10  49.88     25   +0.50 1 1 2 1 1   888    0 18.77 -57.80 ----- 42.4 49.9 310.2 66.8 25.5 -25.8 25.0 -26.4 25.4 -24.8 26.0 -23.9
2025-12-12T14:24:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:24:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:24:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.516414
2025-12-12T14:24:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:24:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:24:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:24:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:24:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:24:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:23:44', tmtdew=23.62, humidity=20.07, cloud=0.0, wind=56.57, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:23:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:24:19.042 [DEBUG] [Thread-71135] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:24:19.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:24:19.145 [DEBUG] [Thread-71138] [transport.py] [_log()] starting thread (client mode): 0xf574f730
2025-12-12T14:24:19.145 [DEBUG] [Thread-71138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:24:19.160 [DEBUG] [Thread-71138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:24:19.161 [INFO] [Thread-71138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:24:19.168 [DEBUG] [Thread-71138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:24:19.168 [DEBUG] [Thread-71138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:24:19.168 [DEBUG] [Thread-71138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:24:19.168 [DEBUG] [Thread-71138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:19.168 [DEBUG] [Thread-71138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:19.168 [DEBUG] [Thread-71138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] client lang: <none>
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] server lang: <none>
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] kex follows: False
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] Compression: none
2025-12-12T14:24:19.169 [DEBUG] [Thread-71138] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:24:19.225 [DEBUG] [Thread-71138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:24:19.226 [DEBUG] [Thread-71138] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:24:19.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:24:19.227 [DEBUG] [Thread-71138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:24:19.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:24:19.289 [DEBUG] [Thread-71138] [transport.py] [_log()] userauth is OK
2025-12-12T14:24:19.290 [DEBUG] [Thread-71138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:24:19.290 [DEBUG] [Thread-71138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:24:19.290 [DEBUG] [Thread-71138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:24:19.290 [DEBUG] [Thread-71138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:24:19.309 [INFO] [Thread-71138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:24:19.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:24:19.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:24:20.147 [DEBUG] [Thread-71138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:24:20.147 [DEBUG] [Thread-71138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:24:20.197 [DEBUG] [Thread-71138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:24:20.197 [DEBUG] [Thread-71138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:24:20.206 [DEBUG] [Thread-71138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:24:20.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:24:20.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:24:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:24:20.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:24:20.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:24:20.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:24:20.244 [DEBUG] [Thread-71138] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:24:23.657 [DEBUG] [Thread-71140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:38.702 [DEBUG] [Thread-71141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:47.307 [DEBUG] [Thread-71142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:24:50.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:24:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:24:50.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 24, 16), 23.55, 20.18, 0.0, 54.41, 20.86, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:24:50.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:24:16
2025-12-12T14:24:51.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:24:51.234 [DEBUG] [Thread-71143] [transport.py] [_log()] starting thread (client mode): 0xf574c2e0
2025-12-12T14:24:51.234 [DEBUG] [Thread-71143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:24:51.258 [DEBUG] [Thread-71143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:24:51.258 [INFO] [Thread-71143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] client lang: <none>
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] server lang: <none>
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] kex follows: False
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:24:51.259 [DEBUG] [Thread-71143] [transport.py] [_log()] Compression: none
2025-12-12T14:24:51.260 [DEBUG] [Thread-71143] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:24:51.277 [DEBUG] [Thread-71143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:24:51.277 [DEBUG] [Thread-71143] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:24:51.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:24:51.278 [DEBUG] [Thread-71143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:24:51.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:24:51.280 [DEBUG] [Thread-71143] [transport.py] [_log()] userauth is OK
2025-12-12T14:24:51.280 [DEBUG] [Thread-71143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:24:51.280 [DEBUG] [Thread-71143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:24:51.281 [DEBUG] [Thread-71143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:24:51.281 [DEBUG] [Thread-71143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:24:51.305 [INFO] [Thread-71143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:24:51.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:24:51.957 [DEBUG] [Thread-71143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:24:51.957 [DEBUG] [Thread-71143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:24:51.958 [DEBUG] [Thread-71143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:24:51.999 [DEBUG] [Thread-71143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:24:51.999 [DEBUG] [Thread-71143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:24:52.002 [DEBUG] [Thread-71143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:24:52.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:24:52.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:24:52.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:24:52.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:24:52.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:24:52.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:24:52.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:24:52.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:24:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:24:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.516761 -999.00  +21.00  45.73     25   +0.60 1 1 2 1 1   888    0 19.08 -47.13 ----- 48.8 45.7 316.2 58.0 25.3 -26.9 24.9 -27.3 25.2 -29.2 25.9 -23.8
2025-12-12T14:24:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:24:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:24:52.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.516761
2025-12-12T14:24:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:24:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:24:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:24:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:24:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:24:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:24:16', tmtdew=23.55, humidity=20.18, cloud=0.0, wind=54.41, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:24:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:24:52.027 [DEBUG] [Thread-71143] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:24:52.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:52.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:24:52.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:24:52.137 [DEBUG] [Thread-71146] [transport.py] [_log()] starting thread (client mode): 0xf574e6e0
2025-12-12T14:24:52.137 [DEBUG] [Thread-71146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:24:52.152 [DEBUG] [Thread-71146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:24:52.152 [INFO] [Thread-71146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] client lang: <none>
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] server lang: <none>
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] kex follows: False
2025-12-12T14:24:52.160 [DEBUG] [Thread-71146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:24:52.161 [DEBUG] [Thread-71146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:24:52.161 [DEBUG] [Thread-71146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:24:52.161 [DEBUG] [Thread-71146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:24:52.161 [DEBUG] [Thread-71146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:24:52.161 [DEBUG] [Thread-71146] [transport.py] [_log()] Compression: none
2025-12-12T14:24:52.161 [DEBUG] [Thread-71146] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:24:52.218 [DEBUG] [Thread-71146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:24:52.218 [DEBUG] [Thread-71146] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:24:52.219 [DEBUG] [Thread-71146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:24:52.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:24:52.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:24:52.274 [DEBUG] [Thread-71146] [transport.py] [_log()] userauth is OK
2025-12-12T14:24:52.274 [DEBUG] [Thread-71146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:24:52.274 [DEBUG] [Thread-71146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:24:52.275 [DEBUG] [Thread-71146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:24:52.275 [DEBUG] [Thread-71146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:24:52.294 [INFO] [Thread-71146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:24:52.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:24:52.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:24:53.209 [DEBUG] [Thread-71146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:24:53.209 [DEBUG] [Thread-71146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:24:53.257 [DEBUG] [Thread-71146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:24:53.257 [DEBUG] [Thread-71146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:24:53.266 [DEBUG] [Thread-71146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:24:53.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:24:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:24:53.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:24:53.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:24:53.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:24:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:24:53.303 [DEBUG] [Thread-71146] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:24:53.731 [DEBUG] [Thread-71148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:08.772 [DEBUG] [Thread-71149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:25:23.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:25:23.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:25:23.799 [DEBUG] [Thread-71150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 25, 20), 23.54, 20.4, 0.0, 48.03, 21.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:25:24.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:25:20
2025-12-12T14:25:24.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:25:24.300 [DEBUG] [Thread-71151] [transport.py] [_log()] starting thread (client mode): 0xf574c6d0
2025-12-12T14:25:24.300 [DEBUG] [Thread-71151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:25:24.321 [DEBUG] [Thread-71151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:25:24.321 [INFO] [Thread-71151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:25:24.324 [DEBUG] [Thread-71151] [transport.py] [_log()] client lang: <none>
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] server lang: <none>
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] kex follows: False
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] Compression: none
2025-12-12T14:25:24.325 [DEBUG] [Thread-71151] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:25:24.342 [DEBUG] [Thread-71151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:25:24.342 [DEBUG] [Thread-71151] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:25:24.343 [DEBUG] [Thread-71151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:25:24.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:25:24.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:25:24.345 [DEBUG] [Thread-71151] [transport.py] [_log()] userauth is OK
2025-12-12T14:25:24.345 [DEBUG] [Thread-71151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:25:24.345 [DEBUG] [Thread-71151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:25:24.345 [DEBUG] [Thread-71151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:25:24.345 [DEBUG] [Thread-71151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:25:24.367 [INFO] [Thread-71151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:25:24.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:25:25.003 [DEBUG] [Thread-71151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:25:25.003 [DEBUG] [Thread-71151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:25:25.004 [DEBUG] [Thread-71151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:25:25.045 [DEBUG] [Thread-71151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:25:25.045 [DEBUG] [Thread-71151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:25:25.048 [DEBUG] [Thread-71151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:25:25.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:25:25.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:25:25.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:25:25.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:25:25.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:25:25.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:25:25.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:25:25.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:25:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:25:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.517108 -999.00  +21.10  44.40     25   +0.60 1 1 2 1 1   888    0 19.06 -35.58 ----- 50.5 44.4 326.6 59.8 25.2 -26.4 24.9 -25.1 25.2 -22.5 26.0 -23.3
2025-12-12T14:25:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:25:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:25:25.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.517108
2025-12-12T14:25:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:25:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:25:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:25:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:25:25.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:25:25.072 [DEBUG] [Thread-71151] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:25:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:25:20', tmtdew=23.54, humidity=20.4, cloud=0.0, wind=48.03, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:24:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:25:25.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:25:25.167 [DEBUG] [Thread-71154] [transport.py] [_log()] starting thread (client mode): 0xf57427d0
2025-12-12T14:25:25.167 [DEBUG] [Thread-71154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:25:25.181 [DEBUG] [Thread-71154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:25:25.181 [INFO] [Thread-71154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] client lang: <none>
2025-12-12T14:25:25.189 [DEBUG] [Thread-71154] [transport.py] [_log()] server lang: <none>
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] kex follows: False
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] Compression: none
2025-12-12T14:25:25.190 [DEBUG] [Thread-71154] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:25:25.246 [DEBUG] [Thread-71154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:25:25.246 [DEBUG] [Thread-71154] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:25:25.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:25:25.247 [DEBUG] [Thread-71154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:25:25.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:25:25.302 [DEBUG] [Thread-71154] [transport.py] [_log()] userauth is OK
2025-12-12T14:25:25.302 [DEBUG] [Thread-71154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:25:25.303 [DEBUG] [Thread-71154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:25:25.303 [DEBUG] [Thread-71154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:25:25.303 [DEBUG] [Thread-71154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:25:25.321 [INFO] [Thread-71154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:25:25.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:25:25.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:25:26.220 [DEBUG] [Thread-71154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:25:26.221 [DEBUG] [Thread-71154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:25:26.269 [DEBUG] [Thread-71154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:25:26.269 [DEBUG] [Thread-71154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:25:26.278 [DEBUG] [Thread-71154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:25:26.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:25:26.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:25:26.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:25:26.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:25:26.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:25:26.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:25:26.314 [DEBUG] [Thread-71154] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:25:38.828 [DEBUG] [Thread-71156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:47.353 [DEBUG] [Thread-71157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:52.237 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:52.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:53.868 [DEBUG] [Thread-71158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:25:56.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:25:56.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:25:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:25:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 25, 52), 23.65, 20.37, 0.0, 46.79, 20.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:25:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:25:52
2025-12-12T14:25:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:25:57.291 [DEBUG] [Thread-71159] [transport.py] [_log()] starting thread (client mode): 0xf81e7880
2025-12-12T14:25:57.291 [DEBUG] [Thread-71159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:25:57.311 [DEBUG] [Thread-71159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:25:57.311 [INFO] [Thread-71159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:57.315 [DEBUG] [Thread-71159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] client lang: <none>
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] server lang: <none>
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] kex follows: False
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] Compression: none
2025-12-12T14:25:57.316 [DEBUG] [Thread-71159] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:25:57.333 [DEBUG] [Thread-71159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:25:57.333 [DEBUG] [Thread-71159] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:25:57.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:25:57.334 [DEBUG] [Thread-71159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:25:57.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:25:57.376 [DEBUG] [Thread-71159] [transport.py] [_log()] userauth is OK
2025-12-12T14:25:57.377 [DEBUG] [Thread-71159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:25:57.377 [DEBUG] [Thread-71159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:25:57.377 [DEBUG] [Thread-71159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:25:57.377 [DEBUG] [Thread-71159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:25:57.397 [INFO] [Thread-71159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:25:57.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:25:58.036 [DEBUG] [Thread-71159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:25:58.036 [DEBUG] [Thread-71159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:25:58.037 [DEBUG] [Thread-71159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:25:58.078 [DEBUG] [Thread-71159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:25:58.078 [DEBUG] [Thread-71159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:25:58.080 [DEBUG] [Thread-71159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:25:58.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:25:58.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:25:58.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:25:58.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:25:58.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:25:58.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:25:58.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:25:58.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:25:58.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:25:58.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.517455 -999.00  +20.40  46.06     26   +0.60 1 1 2 1 1   888    0 19.46 -27.95 ----- 31.9 46.1 319.0 61.1 25.4 -25.9 24.8 -28.0 25.3 -23.3 25.9 -22.6
2025-12-12T14:25:58.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:25:58.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:25:58.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.517455
2025-12-12T14:25:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:25:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:25:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:25:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:25:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:25:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:25:52', tmtdew=23.65, humidity=20.37, cloud=0.0, wind=46.79, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:25:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:25:58.105 [DEBUG] [Thread-71159] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:25:58.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:25:58.202 [DEBUG] [Thread-71162] [transport.py] [_log()] starting thread (client mode): 0xf81e5b70
2025-12-12T14:25:58.203 [DEBUG] [Thread-71162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:25:58.217 [DEBUG] [Thread-71162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:25:58.218 [INFO] [Thread-71162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:25:58.225 [DEBUG] [Thread-71162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:25:58.225 [DEBUG] [Thread-71162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:25:58.225 [DEBUG] [Thread-71162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:25:58.225 [DEBUG] [Thread-71162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] client lang: <none>
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] server lang: <none>
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] kex follows: False
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] Compression: none
2025-12-12T14:25:58.226 [DEBUG] [Thread-71162] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:25:58.281 [DEBUG] [Thread-71162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:25:58.282 [DEBUG] [Thread-71162] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:25:58.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:25:58.283 [DEBUG] [Thread-71162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:25:58.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:25:58.338 [DEBUG] [Thread-71162] [transport.py] [_log()] userauth is OK
2025-12-12T14:25:58.339 [DEBUG] [Thread-71162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:25:58.339 [DEBUG] [Thread-71162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:25:58.339 [DEBUG] [Thread-71162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:25:58.339 [DEBUG] [Thread-71162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:25:58.358 [INFO] [Thread-71162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:25:58.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:25:58.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:25:59.187 [DEBUG] [Thread-71162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:25:59.188 [DEBUG] [Thread-71162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:25:59.236 [DEBUG] [Thread-71162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:25:59.236 [DEBUG] [Thread-71162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:25:59.245 [DEBUG] [Thread-71162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:25:59.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:25:59.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:25:59.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:25:59.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:25:59.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:25:59.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:25:59.280 [DEBUG] [Thread-71162] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:26:08.894 [DEBUG] [Thread-71164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:26:23.939 [DEBUG] [Thread-71165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:26:29.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:26:29.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:26:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:26:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 26, 24), 23.76, 20.2, 0.0, 47.92, 20.89, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:26:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:26:24
2025-12-12T14:26:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:26:30.261 [DEBUG] [Thread-71166] [transport.py] [_log()] starting thread (client mode): 0xf813e920
2025-12-12T14:26:30.261 [DEBUG] [Thread-71166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:26:30.282 [DEBUG] [Thread-71166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:26:30.282 [INFO] [Thread-71166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] client lang: <none>
2025-12-12T14:26:30.285 [DEBUG] [Thread-71166] [transport.py] [_log()] server lang: <none>
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] kex follows: False
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] Compression: none
2025-12-12T14:26:30.286 [DEBUG] [Thread-71166] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:26:30.305 [DEBUG] [Thread-71166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:26:30.306 [DEBUG] [Thread-71166] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:26:30.306 [DEBUG] [Thread-71166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:26:30.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:26:30.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:26:30.309 [DEBUG] [Thread-71166] [transport.py] [_log()] userauth is OK
2025-12-12T14:26:30.309 [DEBUG] [Thread-71166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:26:30.309 [DEBUG] [Thread-71166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:26:30.309 [DEBUG] [Thread-71166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:26:30.309 [DEBUG] [Thread-71166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:26:30.346 [INFO] [Thread-71166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:26:30.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:26:30.997 [DEBUG] [Thread-71166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:26:30.997 [DEBUG] [Thread-71166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:26:30.998 [DEBUG] [Thread-71166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:26:31.038 [DEBUG] [Thread-71166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:26:31.038 [DEBUG] [Thread-71166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:26:31.041 [DEBUG] [Thread-71166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:26:31.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:26:31.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:26:31.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:26:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:26:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:26:31.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:26:31.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:26:31.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:26:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:26:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.517803 -999.00  +21.10  31.10     26   +1.00 1 1 2 1 1   888    0 19.74 -24.32 ----- 34.0 31.1 313.7 49.9 25.3 -24.8 24.9 -25.2 25.6 -22.7 26.0 -23.1
2025-12-12T14:26:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:26:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:26:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.517803
2025-12-12T14:26:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:26:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:26:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:26:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:26:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:26:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:26:24', tmtdew=23.76, humidity=20.2, cloud=0.0, wind=47.92, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:25:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:26:31.068 [DEBUG] [Thread-71166] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:26:31.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:26:31.163 [DEBUG] [Thread-71169] [transport.py] [_log()] starting thread (client mode): 0xf570f130
2025-12-12T14:26:31.164 [DEBUG] [Thread-71169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:26:31.178 [DEBUG] [Thread-71169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:26:31.178 [INFO] [Thread-71169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:26:31.186 [DEBUG] [Thread-71169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:26:31.186 [DEBUG] [Thread-71169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:26:31.186 [DEBUG] [Thread-71169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:26:31.186 [DEBUG] [Thread-71169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:26:31.186 [DEBUG] [Thread-71169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] client lang: <none>
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] server lang: <none>
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] kex follows: False
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:26:31.187 [DEBUG] [Thread-71169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:26:31.188 [DEBUG] [Thread-71169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:26:31.188 [DEBUG] [Thread-71169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:26:31.188 [DEBUG] [Thread-71169] [transport.py] [_log()] Compression: none
2025-12-12T14:26:31.188 [DEBUG] [Thread-71169] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:26:31.246 [DEBUG] [Thread-71169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:26:31.247 [DEBUG] [Thread-71169] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:26:31.248 [DEBUG] [Thread-71169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:26:31.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:26:31.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:26:31.302 [DEBUG] [Thread-71169] [transport.py] [_log()] userauth is OK
2025-12-12T14:26:31.302 [DEBUG] [Thread-71169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:26:31.302 [DEBUG] [Thread-71169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:26:31.302 [DEBUG] [Thread-71169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:26:31.303 [DEBUG] [Thread-71169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:26:31.321 [INFO] [Thread-71169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:26:31.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:26:31.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:26:32.174 [DEBUG] [Thread-71169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:26:32.174 [DEBUG] [Thread-71169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:26:32.222 [DEBUG] [Thread-71169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:26:32.222 [DEBUG] [Thread-71169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:26:32.231 [DEBUG] [Thread-71169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:26:32.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:26:32.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:26:32.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:26:32.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:26:32.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:26:32.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:26:32.266 [DEBUG] [Thread-71169] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:26:38.965 [DEBUG] [Thread-71171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:26:47.409 [DEBUG] [Thread-71172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:26:52.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:26:52.379 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:26:54.012 [DEBUG] [Thread-71173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:27:02.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:27:02.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:27:02.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 26, 56), 24.06, 19.73, 0.0, 46.62, 20.95, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:27:02.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:26:56
2025-12-12T14:27:03.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:27:03.276 [DEBUG] [Thread-71174] [transport.py] [_log()] starting thread (client mode): 0xf574ca00
2025-12-12T14:27:03.276 [DEBUG] [Thread-71174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:27:03.298 [DEBUG] [Thread-71174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:27:03.298 [INFO] [Thread-71174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] client lang: <none>
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] server lang: <none>
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] kex follows: False
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] Compression: none
2025-12-12T14:27:03.301 [DEBUG] [Thread-71174] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:27:03.318 [DEBUG] [Thread-71174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:27:03.319 [DEBUG] [Thread-71174] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:27:03.319 [DEBUG] [Thread-71174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:27:03.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:27:03.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:27:03.320 [DEBUG] [Thread-71174] [transport.py] [_log()] userauth is OK
2025-12-12T14:27:03.320 [DEBUG] [Thread-71174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:27:03.320 [DEBUG] [Thread-71174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:27:03.320 [DEBUG] [Thread-71174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:27:03.320 [DEBUG] [Thread-71174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:27:03.337 [INFO] [Thread-71174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:27:03.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:27:03.988 [DEBUG] [Thread-71174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:27:03.988 [DEBUG] [Thread-71174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:27:03.988 [DEBUG] [Thread-71174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:27:04.029 [DEBUG] [Thread-71174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:27:04.030 [DEBUG] [Thread-71174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:27:04.032 [DEBUG] [Thread-71174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:27:04.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:27:04.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:27:04.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:27:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:27:04.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:27:04.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:27:04.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.518497 -999.00  +22.10  45.49     24   +0.60 1 1 2 1 1   888    0 19.76 -6.75 ----- 52.8 45.5 301.8 58.1 25.5 -24.8 25.1 -25.8 25.4 -22.9 26.3 -23.2
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.518497
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:27:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:26:56', tmtdew=24.06, humidity=19.73, cloud=0.0, wind=46.62, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:26:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:27:04.050 [DEBUG] [Thread-71174] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:27:04.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:27:04.135 [DEBUG] [Thread-71177] [transport.py] [_log()] starting thread (client mode): 0xf81e43a0
2025-12-12T14:27:04.135 [DEBUG] [Thread-71177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:27:04.150 [DEBUG] [Thread-71177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:27:04.150 [INFO] [Thread-71177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] client lang: <none>
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] server lang: <none>
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] kex follows: False
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] Compression: none
2025-12-12T14:27:04.158 [DEBUG] [Thread-71177] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:27:04.213 [DEBUG] [Thread-71177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:27:04.213 [DEBUG] [Thread-71177] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:27:04.213 [DEBUG] [Thread-71177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:27:04.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:27:04.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:27:04.269 [DEBUG] [Thread-71177] [transport.py] [_log()] userauth is OK
2025-12-12T14:27:04.269 [DEBUG] [Thread-71177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:27:04.269 [DEBUG] [Thread-71177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:27:04.269 [DEBUG] [Thread-71177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:27:04.269 [DEBUG] [Thread-71177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:27:04.287 [INFO] [Thread-71177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:27:04.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:27:04.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:27:05.163 [DEBUG] [Thread-71177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:27:05.163 [DEBUG] [Thread-71177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:27:05.212 [DEBUG] [Thread-71177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:27:05.212 [DEBUG] [Thread-71177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:27:05.221 [DEBUG] [Thread-71177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:27:05.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:27:05.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:27:05.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:27:05.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:27:05.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:27:05.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:27:05.254 [DEBUG] [Thread-71177] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:27:09.042 [DEBUG] [Thread-71179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:24.091 [DEBUG] [Thread-71180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:27:35.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:27:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:27:35.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 27, 28), 23.96, 19.9, 0.0, 51.64, 21.04, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:27:35.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:27:28
2025-12-12T14:27:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:27:36.231 [DEBUG] [Thread-71181] [transport.py] [_log()] starting thread (client mode): 0xf5741b40
2025-12-12T14:27:36.231 [DEBUG] [Thread-71181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:27:36.253 [DEBUG] [Thread-71181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:27:36.253 [INFO] [Thread-71181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:27:36.256 [DEBUG] [Thread-71181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] client lang: <none>
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] server lang: <none>
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] kex follows: False
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] Compression: none
2025-12-12T14:27:36.257 [DEBUG] [Thread-71181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:27:36.274 [DEBUG] [Thread-71181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:27:36.275 [DEBUG] [Thread-71181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:27:36.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:27:36.275 [DEBUG] [Thread-71181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:27:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:27:36.277 [DEBUG] [Thread-71181] [transport.py] [_log()] userauth is OK
2025-12-12T14:27:36.278 [DEBUG] [Thread-71181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:27:36.278 [DEBUG] [Thread-71181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:27:36.278 [DEBUG] [Thread-71181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:27:36.278 [DEBUG] [Thread-71181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:27:36.299 [INFO] [Thread-71181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:27:36.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:27:36.945 [DEBUG] [Thread-71181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:27:36.946 [DEBUG] [Thread-71181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:27:36.946 [DEBUG] [Thread-71181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:27:36.987 [DEBUG] [Thread-71181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:27:36.987 [DEBUG] [Thread-71181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:27:36.990 [DEBUG] [Thread-71181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:27:37.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:27:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:27:37.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:27:37.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:27:37.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:27:37.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:27:37.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:27:37.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:27:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:27:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.518844 -999.00  +21.10  57.85     25   +0.30 1 1 2 1 1   888    0 20.32 1.19 ----- 49.9 57.9 312.0 65.7 25.6 -25.3 25.1 -26.5 25.2 -25.0 26.1 -23.9
2025-12-12T14:27:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:27:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:27:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.518844
2025-12-12T14:27:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:27:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:27:37.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:27:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:27:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:27:37.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:27:28', tmtdew=23.96, humidity=19.9, cloud=0.0, wind=51.64, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:27:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:27:37.017 [DEBUG] [Thread-71181] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:27:37.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:27:37.114 [DEBUG] [Thread-71184] [transport.py] [_log()] starting thread (client mode): 0xf81e6110
2025-12-12T14:27:37.114 [DEBUG] [Thread-71184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:27:37.129 [DEBUG] [Thread-71184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:27:37.129 [INFO] [Thread-71184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] client lang: <none>
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] server lang: <none>
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] kex follows: False
2025-12-12T14:27:37.137 [DEBUG] [Thread-71184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:27:37.138 [DEBUG] [Thread-71184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:27:37.138 [DEBUG] [Thread-71184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:27:37.138 [DEBUG] [Thread-71184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:27:37.138 [DEBUG] [Thread-71184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:27:37.138 [DEBUG] [Thread-71184] [transport.py] [_log()] Compression: none
2025-12-12T14:27:37.138 [DEBUG] [Thread-71184] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:27:37.194 [DEBUG] [Thread-71184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:27:37.195 [DEBUG] [Thread-71184] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:27:37.195 [DEBUG] [Thread-71184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:27:37.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:27:37.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:27:37.250 [DEBUG] [Thread-71184] [transport.py] [_log()] userauth is OK
2025-12-12T14:27:37.250 [DEBUG] [Thread-71184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:27:37.250 [DEBUG] [Thread-71184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:27:37.251 [DEBUG] [Thread-71184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:27:37.251 [DEBUG] [Thread-71184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:27:37.270 [INFO] [Thread-71184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:27:37.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:27:37.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:27:38.131 [DEBUG] [Thread-71184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:27:38.131 [DEBUG] [Thread-71184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:27:38.179 [DEBUG] [Thread-71184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:27:38.179 [DEBUG] [Thread-71184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:27:38.188 [DEBUG] [Thread-71184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:27:38.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:27: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')
2025-12-12T14:27:38.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:27:38.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:27:38.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:27:38.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:27:38.221 [DEBUG] [Thread-71184] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:27:39.123 [DEBUG] [Thread-71186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:47.483 [DEBUG] [Thread-71187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:52.528 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:52.529 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:27:54.158 [DEBUG] [Thread-71188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:08.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:28:08.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:28:08.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:28:08.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 27, 28), 23.96, 19.9, 0.0, 51.64, 21.04, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:28:08.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:27:28
2025-12-12T14:28:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:28:09.170 [DEBUG] [Thread-71189] [transport.py] [_log()] starting thread (client mode): 0xf81e7850
2025-12-12T14:28:09.170 [DEBUG] [Thread-71189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:28:09.188 [DEBUG] [Thread-71190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:09.190 [DEBUG] [Thread-71189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:28:09.190 [INFO] [Thread-71189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] client lang: <none>
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] server lang: <none>
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] kex follows: False
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] Compression: none
2025-12-12T14:28:09.193 [DEBUG] [Thread-71189] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:28:09.208 [DEBUG] [Thread-71189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:28:09.209 [DEBUG] [Thread-71189] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:28:09.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:28:09.210 [DEBUG] [Thread-71189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:28:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:28:09.211 [DEBUG] [Thread-71189] [transport.py] [_log()] userauth is OK
2025-12-12T14:28:09.211 [DEBUG] [Thread-71189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:28:09.211 [DEBUG] [Thread-71189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:28:09.211 [DEBUG] [Thread-71189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:28:09.211 [DEBUG] [Thread-71189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:28:09.235 [INFO] [Thread-71189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:28:09.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:28:09.908 [DEBUG] [Thread-71189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:28:09.909 [DEBUG] [Thread-71189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:28:09.909 [DEBUG] [Thread-71189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:28:09.950 [DEBUG] [Thread-71189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:28:09.950 [DEBUG] [Thread-71189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:28:09.953 [DEBUG] [Thread-71189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:28:09.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:28:09.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:28:09.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:28:09.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:28:09.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:28:09.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:28:09.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:28:09.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:28:09.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:28:09.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.519192 -999.00  +21.10  50.16     25   +0.40 1 1 2 1 1   888    0 20.33 5.87 ----- 40.3 50.2 309.2 62.0 25.4 -26.3 24.9 -26.6 25.4 -24.2 26.1 -23.0
2025-12-12T14:28:09.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:28:09.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:28:09.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.519192
2025-12-12T14:28:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:28:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:28:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:28:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:28:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:28:09.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:27:28', tmtdew=23.96, humidity=19.9, cloud=0.0, wind=51.64, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:27:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:28:09.982 [DEBUG] [Thread-71189] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:28:10.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:28:10.078 [DEBUG] [Thread-71193] [transport.py] [_log()] starting thread (client mode): 0xf57036d0
2025-12-12T14:28:10.078 [DEBUG] [Thread-71193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:28:10.093 [DEBUG] [Thread-71193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:28:10.093 [INFO] [Thread-71193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] client lang: <none>
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] server lang: <none>
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] kex follows: False
2025-12-12T14:28:10.101 [DEBUG] [Thread-71193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:28:10.102 [DEBUG] [Thread-71193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:28:10.102 [DEBUG] [Thread-71193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:28:10.102 [DEBUG] [Thread-71193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:28:10.102 [DEBUG] [Thread-71193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:28:10.102 [DEBUG] [Thread-71193] [transport.py] [_log()] Compression: none
2025-12-12T14:28:10.102 [DEBUG] [Thread-71193] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:28:10.158 [DEBUG] [Thread-71193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:28:10.158 [DEBUG] [Thread-71193] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:28:10.159 [DEBUG] [Thread-71193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:28:10.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:28:10.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:28:10.214 [DEBUG] [Thread-71193] [transport.py] [_log()] userauth is OK
2025-12-12T14:28:10.214 [DEBUG] [Thread-71193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:28:10.214 [DEBUG] [Thread-71193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:28:10.214 [DEBUG] [Thread-71193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:28:10.215 [DEBUG] [Thread-71193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:28:10.234 [INFO] [Thread-71193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:28:10.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:28:10.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:28:11.111 [DEBUG] [Thread-71193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:28:11.111 [DEBUG] [Thread-71193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:28:11.159 [DEBUG] [Thread-71193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:28:11.159 [DEBUG] [Thread-71193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:28:11.168 [DEBUG] [Thread-71193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:28:11.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:28:11.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:28:11.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
2025-12-12T14:28:11.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:28:11.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:28:11.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:28:11.203 [DEBUG] [Thread-71193] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:28:24.215 [DEBUG] [Thread-71195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:39.261 [DEBUG] [Thread-71196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:41.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:28:41.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:28:41.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:28:41.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 28, 32), 24.38, 19.2, 0.0, 48.36, 21.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:28:41.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:28:32
2025-12-12T14:28:42.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:28:42.170 [DEBUG] [Thread-71197] [transport.py] [_log()] starting thread (client mode): 0xf57413f0
2025-12-12T14:28:42.170 [DEBUG] [Thread-71197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:28:42.191 [DEBUG] [Thread-71197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:28:42.191 [INFO] [Thread-71197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:28:42.194 [DEBUG] [Thread-71197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:28:42.194 [DEBUG] [Thread-71197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] client lang: <none>
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] server lang: <none>
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] kex follows: False
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] Compression: none
2025-12-12T14:28:42.195 [DEBUG] [Thread-71197] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:28:42.213 [DEBUG] [Thread-71197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:28:42.213 [DEBUG] [Thread-71197] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:28:42.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:28:42.214 [DEBUG] [Thread-71197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:28:42.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:28:42.216 [DEBUG] [Thread-71197] [transport.py] [_log()] userauth is OK
2025-12-12T14:28:42.216 [DEBUG] [Thread-71197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:28:42.216 [DEBUG] [Thread-71197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:28:42.216 [DEBUG] [Thread-71197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:28:42.216 [DEBUG] [Thread-71197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:28:42.242 [INFO] [Thread-71197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:28:42.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:28:42.863 [DEBUG] [Thread-71197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:28:42.863 [DEBUG] [Thread-71197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:28:42.863 [DEBUG] [Thread-71197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:28:42.904 [DEBUG] [Thread-71197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:28:42.904 [DEBUG] [Thread-71197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:28:42.906 [DEBUG] [Thread-71197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:28:42.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:28:42.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:28:42.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:28:42.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:28:42.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:28:42.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:28:42.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:28:42.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:28:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:28:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.519539 -999.00  +21.50  39.96     24   +0.20 1 1 2 1 1   888    0 20.60 15.73 ----- 50.4 40.0 301.2 58.2 25.5 -25.8 25.1 -26.6 25.3 -23.2 26.1 -23.7
2025-12-12T14:28:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:28:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:28:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.519539
2025-12-12T14:28:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:28:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:28:42.936 [DEBUG] [Thread-71197] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:28:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:28:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:28:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:28:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:28:32', tmtdew=24.38, humidity=19.2, cloud=0.0, wind=48.36, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:28:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:28:43.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:28:43.027 [DEBUG] [Thread-71200] [transport.py] [_log()] starting thread (client mode): 0xf5743730
2025-12-12T14:28:43.027 [DEBUG] [Thread-71200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:28:43.042 [DEBUG] [Thread-71200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:28:43.042 [INFO] [Thread-71200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:28:43.050 [DEBUG] [Thread-71200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:28:43.050 [DEBUG] [Thread-71200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:28:43.050 [DEBUG] [Thread-71200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:28:43.050 [DEBUG] [Thread-71200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:43.050 [DEBUG] [Thread-71200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:28:43.050 [DEBUG] [Thread-71200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] client lang: <none>
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] server lang: <none>
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] kex follows: False
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] Compression: none
2025-12-12T14:28:43.051 [DEBUG] [Thread-71200] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:28:43.109 [DEBUG] [Thread-71200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:28:43.109 [DEBUG] [Thread-71200] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:28:43.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:28:43.110 [DEBUG] [Thread-71200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:28:43.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:28:43.165 [DEBUG] [Thread-71200] [transport.py] [_log()] userauth is OK
2025-12-12T14:28:43.165 [DEBUG] [Thread-71200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:28:43.165 [DEBUG] [Thread-71200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:28:43.165 [DEBUG] [Thread-71200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:28:43.165 [DEBUG] [Thread-71200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:28:43.179 [INFO] [Thread-71200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:28:43.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:28:43.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:28:44.032 [DEBUG] [Thread-71200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:28:44.032 [DEBUG] [Thread-71200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:28:44.080 [DEBUG] [Thread-71200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:28:44.080 [DEBUG] [Thread-71200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:28:44.089 [DEBUG] [Thread-71200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:28:44.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:28:44.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:28:44.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:28:44.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:28:44.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:28:44.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:28:44.123 [DEBUG] [Thread-71200] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:28:47.542 [DEBUG] [Thread-71202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:52.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:52.671 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:28:54.294 [DEBUG] [Thread-71203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:09.335 [DEBUG] [Thread-71204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:29:14.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:29:14.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:29:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 29, 4), 24.74, 18.82, 0.0, 46.56, 21.66, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:29:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:29:04
2025-12-12T14:29:14.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:29:15.100 [DEBUG] [Thread-71205] [transport.py] [_log()] starting thread (client mode): 0xf5740b20
2025-12-12T14:29:15.100 [DEBUG] [Thread-71205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:29:15.120 [DEBUG] [Thread-71205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:29:15.120 [INFO] [Thread-71205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] client lang: <none>
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] server lang: <none>
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] kex follows: False
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] Compression: none
2025-12-12T14:29:15.123 [DEBUG] [Thread-71205] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:29:15.142 [DEBUG] [Thread-71205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:29:15.142 [DEBUG] [Thread-71205] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:29:15.143 [DEBUG] [Thread-71205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:29:15.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:29:15.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:29:15.145 [DEBUG] [Thread-71205] [transport.py] [_log()] userauth is OK
2025-12-12T14:29:15.145 [DEBUG] [Thread-71205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:29:15.145 [DEBUG] [Thread-71205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:29:15.145 [DEBUG] [Thread-71205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:29:15.145 [DEBUG] [Thread-71205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:29:15.170 [INFO] [Thread-71205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:29:15.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:29:15.789 [DEBUG] [Thread-71205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:29:15.789 [DEBUG] [Thread-71205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:29:15.790 [DEBUG] [Thread-71205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:29:15.830 [DEBUG] [Thread-71205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:29:15.830 [DEBUG] [Thread-71205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:29:15.833 [DEBUG] [Thread-71205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:29:15.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:29:15.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:29:15.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:29:15.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:29:15.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:29:15.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:29:15.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:29:15.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:29:15.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:29:15.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.519886 -999.00  +21.50  39.92     24   +0.20 1 1 2 1 1   888    0 20.81 24.67 ----- 31.8 39.9 295.0 60.9 25.4 -27.3 25.0 -25.5 25.4 -25.4 26.0 -23.6
2025-12-12T14:29:15.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:29:15.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:29:15.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.519886
2025-12-12T14:29:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:29:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:29:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:29:15.858 [DEBUG] [Thread-71205] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:29:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:29:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:29:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:29:04', tmtdew=24.74, humidity=18.82, cloud=0.0, wind=46.56, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:28:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:29:15.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:29:15.956 [DEBUG] [Thread-71208] [transport.py] [_log()] starting thread (client mode): 0xfabc4be0
2025-12-12T14:29:15.956 [DEBUG] [Thread-71208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:29:15.971 [DEBUG] [Thread-71208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:29:15.972 [INFO] [Thread-71208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:29:15.979 [DEBUG] [Thread-71208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] client lang: <none>
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] server lang: <none>
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] kex follows: False
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] Compression: none
2025-12-12T14:29:15.980 [DEBUG] [Thread-71208] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:29:16.038 [DEBUG] [Thread-71208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:29:16.038 [DEBUG] [Thread-71208] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:29:16.039 [DEBUG] [Thread-71208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:29:16.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:29:16.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:29:16.094 [DEBUG] [Thread-71208] [transport.py] [_log()] userauth is OK
2025-12-12T14:29:16.094 [DEBUG] [Thread-71208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:29:16.094 [DEBUG] [Thread-71208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:29:16.094 [DEBUG] [Thread-71208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:29:16.094 [DEBUG] [Thread-71208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:29:16.112 [INFO] [Thread-71208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:29:16.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:29:16.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:29:17.028 [DEBUG] [Thread-71208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:29:17.028 [DEBUG] [Thread-71208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:29:17.076 [DEBUG] [Thread-71208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:29:17.076 [DEBUG] [Thread-71208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:29:17.086 [DEBUG] [Thread-71208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:29:17.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:29:17.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:29:17.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:29:17.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:29:17.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:29:17.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:29:17.121 [DEBUG] [Thread-71208] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:29:24.363 [DEBUG] [Thread-71210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:39.411 [DEBUG] [Thread-71211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:47.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:29:47.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:29:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:29:47.591 [DEBUG] [Thread-71212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 29, 36), 24.51, 19.09, 0.0, 57.45, 21.86, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:29:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:29:36
2025-12-12T14:29:47.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:29:48.053 [DEBUG] [Thread-71213] [transport.py] [_log()] starting thread (client mode): 0xfabc74c0
2025-12-12T14:29:48.053 [DEBUG] [Thread-71213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:29:48.073 [DEBUG] [Thread-71213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:29:48.074 [INFO] [Thread-71213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] client lang: <none>
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] server lang: <none>
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] kex follows: False
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] Compression: none
2025-12-12T14:29:48.077 [DEBUG] [Thread-71213] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:29:48.095 [DEBUG] [Thread-71213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:29:48.095 [DEBUG] [Thread-71213] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:29:48.096 [DEBUG] [Thread-71213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:29:48.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:29:48.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:29:48.097 [DEBUG] [Thread-71213] [transport.py] [_log()] userauth is OK
2025-12-12T14:29:48.097 [DEBUG] [Thread-71213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:29:48.098 [DEBUG] [Thread-71213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:29:48.098 [DEBUG] [Thread-71213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:29:48.098 [DEBUG] [Thread-71213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:29:48.129 [INFO] [Thread-71213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:29:48.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:29:48.788 [DEBUG] [Thread-71213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:29:48.788 [DEBUG] [Thread-71213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:29:48.789 [DEBUG] [Thread-71213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:29:48.829 [DEBUG] [Thread-71213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:29:48.829 [DEBUG] [Thread-71213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:29:48.832 [DEBUG] [Thread-71213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:29:48.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:29:48.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:29:48.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:29:48.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:29:48.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:29:48.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:29:48.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:29:48.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:29:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:29:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.520233 -999.00  +21.60  34.78     24   +0.50 1 1 2 1 1   888    0 21.28 31.95 ----- 41.5 34.8 300.7 55.4 25.4 -25.1 25.0 -25.1 25.3 -22.1 26.1 -23.1
2025-12-12T14:29:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:29:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:29:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.520233
2025-12-12T14:29:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:29:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:29:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:29:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:29:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:29:48.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:29:36', tmtdew=24.51, humidity=19.09, cloud=0.0, wind=57.45, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:29:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:29:48.857 [DEBUG] [Thread-71213] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:29:48.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:29:48.965 [DEBUG] [Thread-71216] [transport.py] [_log()] starting thread (client mode): 0xf570e6b0
2025-12-12T14:29:48.966 [DEBUG] [Thread-71216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:29:48.980 [DEBUG] [Thread-71216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:29:48.980 [INFO] [Thread-71216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:29:48.987 [DEBUG] [Thread-71216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:29:48.988 [DEBUG] [Thread-71216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] client lang: <none>
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] server lang: <none>
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] kex follows: False
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:29:48.989 [DEBUG] [Thread-71216] [transport.py] [_log()] Compression: none
2025-12-12T14:29:48.990 [DEBUG] [Thread-71216] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:29:49.047 [DEBUG] [Thread-71216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:29:49.047 [DEBUG] [Thread-71216] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:29:49.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:29:49.049 [DEBUG] [Thread-71216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:29:49.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:29:49.102 [DEBUG] [Thread-71216] [transport.py] [_log()] userauth is OK
2025-12-12T14:29:49.103 [DEBUG] [Thread-71216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:29:49.103 [DEBUG] [Thread-71216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:29:49.103 [DEBUG] [Thread-71216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:29:49.103 [DEBUG] [Thread-71216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:29:49.125 [INFO] [Thread-71216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:29:49.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:29:49.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:29:50.006 [DEBUG] [Thread-71216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:29:50.006 [DEBUG] [Thread-71216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:29:50.054 [DEBUG] [Thread-71216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:29:50.054 [DEBUG] [Thread-71216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:29:50.063 [DEBUG] [Thread-71216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:29:50.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:29:50.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:29:50.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:29:50.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:29:50.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:29:50.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:29:50.102 [DEBUG] [Thread-71216] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:29:52.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:52.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:29:54.436 [DEBUG] [Thread-71218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:09.480 [DEBUG] [Thread-71219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:20.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:30:20.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:30:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:30:20.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 30, 8), 24.17, 19.5, 0.0, 58.79, 21.69, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:30:20.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:30:08
2025-12-12T14:30:20.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:30:21.051 [DEBUG] [Thread-71220] [transport.py] [_log()] starting thread (client mode): 0xf81e7d00
2025-12-12T14:30:21.051 [DEBUG] [Thread-71220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:30:21.071 [DEBUG] [Thread-71220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:30:21.071 [INFO] [Thread-71220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] client lang: <none>
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] server lang: <none>
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] kex follows: False
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:30:21.072 [DEBUG] [Thread-71220] [transport.py] [_log()] Compression: none
2025-12-12T14:30:21.073 [DEBUG] [Thread-71220] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:30:21.091 [DEBUG] [Thread-71220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:30:21.091 [DEBUG] [Thread-71220] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:30:21.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:30:21.092 [DEBUG] [Thread-71220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:30:21.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:30:21.094 [DEBUG] [Thread-71220] [transport.py] [_log()] userauth is OK
2025-12-12T14:30:21.095 [DEBUG] [Thread-71220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:30:21.095 [DEBUG] [Thread-71220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:30:21.095 [DEBUG] [Thread-71220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:30:21.095 [DEBUG] [Thread-71220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:30:21.119 [INFO] [Thread-71220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:30:21.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:30:21.716 [DEBUG] [Thread-71220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:30:21.716 [DEBUG] [Thread-71220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:30:21.717 [DEBUG] [Thread-71220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:30:21.758 [DEBUG] [Thread-71220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:30:21.759 [DEBUG] [Thread-71220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:30:21.763 [DEBUG] [Thread-71220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:30:21.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:30:21.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:30:21.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:30:21.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:30:21.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:30:21.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:30:21.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:30:21.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:30:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:30:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.520581 -999.00  +21.40  59.63     25   +0.70 1 1 2 1 1   888    0 21.41 37.69 ----- 56.5 59.6 296.2 70.8 25.5 -25.9 25.0 -25.3 25.3 -22.8 25.9 -24.5
2025-12-12T14:30:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:30:21.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:30:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.520581
2025-12-12T14:30:21.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:30:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:30:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:30:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:30:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:30:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:30:08', tmtdew=24.17, humidity=19.5, cloud=0.0, wind=58.79, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:29:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:30:21.792 [DEBUG] [Thread-71220] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:30:21.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:30:21.889 [DEBUG] [Thread-71223] [transport.py] [_log()] starting thread (client mode): 0xf570c9d0
2025-12-12T14:30:21.889 [DEBUG] [Thread-71223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:30:21.903 [DEBUG] [Thread-71223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:30:21.903 [INFO] [Thread-71223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:30:21.912 [DEBUG] [Thread-71223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:30:21.912 [DEBUG] [Thread-71223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:30:21.912 [DEBUG] [Thread-71223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:30:21.912 [DEBUG] [Thread-71223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:21.912 [DEBUG] [Thread-71223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] client lang: <none>
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] server lang: <none>
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] kex follows: False
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] Compression: none
2025-12-12T14:30:21.913 [DEBUG] [Thread-71223] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:30:21.969 [DEBUG] [Thread-71223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:30:21.970 [DEBUG] [Thread-71223] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:30:21.970 [DEBUG] [Thread-71223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:30:21.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:30:21.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:30:22.030 [DEBUG] [Thread-71223] [transport.py] [_log()] userauth is OK
2025-12-12T14:30:22.031 [DEBUG] [Thread-71223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:30:22.031 [DEBUG] [Thread-71223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:30:22.031 [DEBUG] [Thread-71223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:30:22.031 [DEBUG] [Thread-71223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:30:22.051 [INFO] [Thread-71223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:30:22.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:30:22.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:30:22.878 [DEBUG] [Thread-71223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:30:22.878 [DEBUG] [Thread-71223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:30:22.925 [DEBUG] [Thread-71223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:30:22.926 [DEBUG] [Thread-71223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:30:22.935 [DEBUG] [Thread-71223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:30:22.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:30:22.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:30:22.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:30:22.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:30:22.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:30:22.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:30:22.970 [DEBUG] [Thread-71223] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:30:24.506 [DEBUG] [Thread-71225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:39.553 [DEBUG] [Thread-71226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:47.645 [DEBUG] [Thread-71227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:52.951 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:52.952 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:52.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:30:52.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:30:52.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:30:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 30, 40), 23.42, 20.67, 0.0, 55.37, 21.34, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:30:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:30:40
2025-12-12T14:30:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:30:53.932 [DEBUG] [Thread-71228] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T14:30:53.932 [DEBUG] [Thread-71228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:30:53.948 [DEBUG] [Thread-71228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:30:53.948 [INFO] [Thread-71228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] client lang: <none>
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] server lang: <none>
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] kex follows: False
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] Compression: none
2025-12-12T14:30:53.951 [DEBUG] [Thread-71228] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:30:53.967 [DEBUG] [Thread-71228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:30:53.967 [DEBUG] [Thread-71228] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:30:53.968 [DEBUG] [Thread-71228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:30:53.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:30:53.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:30:53.969 [DEBUG] [Thread-71228] [transport.py] [_log()] userauth is OK
2025-12-12T14:30:53.969 [DEBUG] [Thread-71228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:30:53.969 [DEBUG] [Thread-71228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:30:53.969 [DEBUG] [Thread-71228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:30:53.969 [DEBUG] [Thread-71228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:30:53.980 [INFO] [Thread-71228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:30:53.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:30:54.566 [DEBUG] [Thread-71228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:30:54.566 [DEBUG] [Thread-71228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:30:54.567 [DEBUG] [Thread-71228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:30:54.579 [DEBUG] [Thread-71230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:30:54.607 [DEBUG] [Thread-71228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:30:54.607 [DEBUG] [Thread-71228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:30:54.610 [DEBUG] [Thread-71228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:30:54.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:30:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:30:54.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:30:54.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:30:54.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:30:54.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:30:54.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.520927 -999.00  +21.00  66.47     26   +1.10 1 1 3 1 1   888    0 21.85 40.00 ----- 58.8 66.5 311.8 72.2 25.2 -26.8 24.9 -25.9 25.2 -24.9 25.8 -24.2
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.520927
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:30:54.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:30:40', tmtdew=23.42, humidity=20.67, cloud=0.0, wind=55.37, temperature=21.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:30:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:30:54.628 [DEBUG] [Thread-71228] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:30:54.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:30:54.714 [DEBUG] [Thread-71232] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-12T14:30:54.714 [DEBUG] [Thread-71232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:30:54.729 [DEBUG] [Thread-71232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:30:54.729 [INFO] [Thread-71232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] client lang: <none>
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] server lang: <none>
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] kex follows: False
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] Compression: none
2025-12-12T14:30:54.737 [DEBUG] [Thread-71232] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:30:54.793 [DEBUG] [Thread-71232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:30:54.793 [DEBUG] [Thread-71232] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:30:54.793 [DEBUG] [Thread-71232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:30:54.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:30:54.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:30:54.850 [DEBUG] [Thread-71232] [transport.py] [_log()] userauth is OK
2025-12-12T14:30:54.850 [DEBUG] [Thread-71232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:30:54.850 [DEBUG] [Thread-71232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:30:54.850 [DEBUG] [Thread-71232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:30:54.850 [DEBUG] [Thread-71232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:30:54.865 [INFO] [Thread-71232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:30:54.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:30:54.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:30:55.723 [DEBUG] [Thread-71232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:30:55.723 [DEBUG] [Thread-71232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:30:55.772 [DEBUG] [Thread-71232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:30:55.772 [DEBUG] [Thread-71232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:30:55.781 [DEBUG] [Thread-71232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:30:55.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:30:55.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:30:55.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:30:55.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:30:55.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:30:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:30:55.814 [DEBUG] [Thread-71232] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:31:09.606 [DEBUG] [Thread-71234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:24.644 [DEBUG] [Thread-71235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:31:25.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:31:25.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:31:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 31, 13), 23.13, 21.05, 0.0, 51.77, 21.19, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:31:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:31:13
2025-12-12T14:31:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:31:26.763 [DEBUG] [Thread-71236] [transport.py] [_log()] starting thread (client mode): 0xf570d810
2025-12-12T14:31:26.763 [DEBUG] [Thread-71236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:31:26.782 [DEBUG] [Thread-71236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:31:26.783 [INFO] [Thread-71236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] client lang: <none>
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] server lang: <none>
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] kex follows: False
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] Compression: none
2025-12-12T14:31:26.786 [DEBUG] [Thread-71236] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:31:26.802 [DEBUG] [Thread-71236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:31:26.803 [DEBUG] [Thread-71236] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:31:26.803 [DEBUG] [Thread-71236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:31:26.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:31:26.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:31:26.844 [DEBUG] [Thread-71236] [transport.py] [_log()] userauth is OK
2025-12-12T14:31:26.844 [DEBUG] [Thread-71236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:31:26.844 [DEBUG] [Thread-71236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:31:26.845 [DEBUG] [Thread-71236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:31:26.845 [DEBUG] [Thread-71236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:31:26.869 [INFO] [Thread-71236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:31:26.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:31:27.479 [DEBUG] [Thread-71236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:31:27.479 [DEBUG] [Thread-71236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:31:27.479 [DEBUG] [Thread-71236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:31:27.521 [DEBUG] [Thread-71236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:31:27.521 [DEBUG] [Thread-71236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:31:27.524 [DEBUG] [Thread-71236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:31:27.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:31:27.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:31:27.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:31:27.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:31:27.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:31:27.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:31:27.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:31:27.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:31:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:31:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.521275 -999.00  +20.60  48.77     27   +1.10 1 1 2 1 1   888    0 21.24 38.61 ----- 53.5 48.8 313.0 64.8 25.3 -26.3 24.8 -26.4 25.1 -26.1 25.7 -23.5
2025-12-12T14:31:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:31:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:31:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.521275
2025-12-12T14:31:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:31:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:31:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:31:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:31:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:31:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:31:13', tmtdew=23.13, humidity=21.05, cloud=0.0, wind=51.77, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:30:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:31:27.551 [DEBUG] [Thread-71236] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:31:27.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:31:27.646 [DEBUG] [Thread-71239] [transport.py] [_log()] starting thread (client mode): 0xf574cfa0
2025-12-12T14:31:27.647 [DEBUG] [Thread-71239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:31:27.661 [DEBUG] [Thread-71239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:31:27.661 [INFO] [Thread-71239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:31:27.669 [DEBUG] [Thread-71239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] client lang: <none>
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] server lang: <none>
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] kex follows: False
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] Compression: none
2025-12-12T14:31:27.670 [DEBUG] [Thread-71239] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:31:27.726 [DEBUG] [Thread-71239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:31:27.726 [DEBUG] [Thread-71239] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:31:27.727 [DEBUG] [Thread-71239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:31:27.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:31:27.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:31:27.782 [DEBUG] [Thread-71239] [transport.py] [_log()] userauth is OK
2025-12-12T14:31:27.782 [DEBUG] [Thread-71239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:31:27.782 [DEBUG] [Thread-71239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:31:27.782 [DEBUG] [Thread-71239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:31:27.782 [DEBUG] [Thread-71239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:31:27.801 [INFO] [Thread-71239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:31:27.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:31:27.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:31:28.647 [DEBUG] [Thread-71239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:31:28.647 [DEBUG] [Thread-71239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:31:28.695 [DEBUG] [Thread-71239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:31:28.695 [DEBUG] [Thread-71239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:31:28.704 [DEBUG] [Thread-71239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:31:28.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:31:28.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:31:28.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:31:28.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:31:28.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:31:28.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:31:28.739 [DEBUG] [Thread-71239] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:31:39.676 [DEBUG] [Thread-71241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:47.698 [DEBUG] [Thread-71242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:53.094 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:53.095 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:54.718 [DEBUG] [Thread-71243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:31:58.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:31:58.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:31:58.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:31:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 31, 45), 23.02, 21.22, 0.0, 42.31, 21.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:31:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:31:45
2025-12-12T14:31:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:31:59.731 [DEBUG] [Thread-71244] [transport.py] [_log()] starting thread (client mode): 0xf574e170
2025-12-12T14:31:59.731 [DEBUG] [Thread-71244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:31:59.748 [DEBUG] [Thread-71244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:31:59.748 [INFO] [Thread-71244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] client lang: <none>
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] server lang: <none>
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] kex follows: False
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] Compression: none
2025-12-12T14:31:59.751 [DEBUG] [Thread-71244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:31:59.769 [DEBUG] [Thread-71244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:31:59.770 [DEBUG] [Thread-71244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:31:59.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:31:59.770 [DEBUG] [Thread-71244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:31:59.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:31:59.773 [DEBUG] [Thread-71244] [transport.py] [_log()] userauth is OK
2025-12-12T14:31:59.773 [DEBUG] [Thread-71244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:31:59.773 [DEBUG] [Thread-71244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:31:59.773 [DEBUG] [Thread-71244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:31:59.773 [DEBUG] [Thread-71244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:31:59.794 [INFO] [Thread-71244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:31:59.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:32:00.421 [DEBUG] [Thread-71244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:32:00.421 [DEBUG] [Thread-71244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:32:00.421 [DEBUG] [Thread-71244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:32:00.462 [DEBUG] [Thread-71244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:32:00.462 [DEBUG] [Thread-71244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:32:00.465 [DEBUG] [Thread-71244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:32:00.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:32:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:32:00.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:32:00.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:32:00.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:32:00.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:32:00.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:32:00.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:32:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:32:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.521622 -999.00  +21.10  57.48     27   +1.40 1 1 2 1 1   888    0 21.07 36.92 ----- 63.2 57.5 311.4 63.9 25.1 -25.9 24.7 -24.5 25.1 -22.7 25.8 -24.4
2025-12-12T14:32:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:32:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:32:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.521622
2025-12-12T14:32:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:32:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:32:00.491 [DEBUG] [Thread-71244] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:32:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:32:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:32:00.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:32:00.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:31:45', tmtdew=23.02, humidity=21.22, cloud=0.0, wind=42.31, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:31:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:32:00.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:32:00.591 [DEBUG] [Thread-71247] [transport.py] [_log()] starting thread (client mode): 0xf570f160
2025-12-12T14:32:00.591 [DEBUG] [Thread-71247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:32:00.606 [DEBUG] [Thread-71247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:32:00.606 [INFO] [Thread-71247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:32:00.613 [DEBUG] [Thread-71247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:32:00.613 [DEBUG] [Thread-71247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:32:00.613 [DEBUG] [Thread-71247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] client lang: <none>
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] server lang: <none>
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] kex follows: False
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] Compression: none
2025-12-12T14:32:00.614 [DEBUG] [Thread-71247] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:32:00.670 [DEBUG] [Thread-71247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:32:00.670 [DEBUG] [Thread-71247] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:32:00.671 [DEBUG] [Thread-71247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:32:00.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:32:00.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:32:00.726 [DEBUG] [Thread-71247] [transport.py] [_log()] userauth is OK
2025-12-12T14:32:00.726 [DEBUG] [Thread-71247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:32:00.726 [DEBUG] [Thread-71247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:32:00.726 [DEBUG] [Thread-71247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:32:00.726 [DEBUG] [Thread-71247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:32:00.745 [INFO] [Thread-71247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:32:00.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:32:00.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:32:01.590 [DEBUG] [Thread-71247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:32:01.590 [DEBUG] [Thread-71247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:32:01.638 [DEBUG] [Thread-71247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:32:01.638 [DEBUG] [Thread-71247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:32:01.647 [DEBUG] [Thread-71247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:32:01.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:32:01.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:32:01.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:32:01.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:32:01.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:32:01.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:32:01.681 [DEBUG] [Thread-71247] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:32:09.747 [DEBUG] [Thread-71249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:32:24.783 [DEBUG] [Thread-71250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:32:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:32:31.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:32:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:32:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 32, 17), 22.99, 21.23, 0.0, 41.97, 21.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:32:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:32:17
2025-12-12T14:32:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:32:32.661 [DEBUG] [Thread-71251] [transport.py] [_log()] starting thread (client mode): 0xfabc5900
2025-12-12T14:32:32.662 [DEBUG] [Thread-71251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:32:32.682 [DEBUG] [Thread-71251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:32:32.682 [INFO] [Thread-71251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] client lang: <none>
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] server lang: <none>
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] kex follows: False
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:32:32.685 [DEBUG] [Thread-71251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:32:32.686 [DEBUG] [Thread-71251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:32:32.686 [DEBUG] [Thread-71251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:32:32.686 [DEBUG] [Thread-71251] [transport.py] [_log()] Compression: none
2025-12-12T14:32:32.686 [DEBUG] [Thread-71251] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:32:32.700 [DEBUG] [Thread-71251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:32:32.700 [DEBUG] [Thread-71251] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:32:32.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:32:32.700 [DEBUG] [Thread-71251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:32:32.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:32:32.701 [DEBUG] [Thread-71251] [transport.py] [_log()] userauth is OK
2025-12-12T14:32:32.701 [DEBUG] [Thread-71251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:32:32.701 [DEBUG] [Thread-71251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:32:32.701 [DEBUG] [Thread-71251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:32:32.701 [DEBUG] [Thread-71251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:32:32.718 [INFO] [Thread-71251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:32:32.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:32:33.378 [DEBUG] [Thread-71251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:32:33.378 [DEBUG] [Thread-71251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:32:33.378 [DEBUG] [Thread-71251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:32:33.419 [DEBUG] [Thread-71251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:32:33.420 [DEBUG] [Thread-71251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:32:33.423 [DEBUG] [Thread-71251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:32:33.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:32:33.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:32:33.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:32:33.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:32:33.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:32:33.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:32:33.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:32:33.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:32:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:32:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.522317 -999.00  +21.30  39.10     26   +1.40 1 1 2 1 1   888    0 21.03 31.47 ----- 42.5 39.1 300.2 45.4 25.2 -26.8 24.8 -24.4 25.3 -23.1 25.8 -23.3
2025-12-12T14:32:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:32:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:32:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.522317
2025-12-12T14:32:33.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:32:33.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:32:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:32:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:32:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:32:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:32:17', tmtdew=22.99, humidity=21.23, cloud=0.0, wind=41.97, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:32:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:32:33.452 [DEBUG] [Thread-71251] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:32:33.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:32:33.548 [DEBUG] [Thread-71254] [transport.py] [_log()] starting thread (client mode): 0xfabc5cc0
2025-12-12T14:32:33.549 [DEBUG] [Thread-71254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:32:33.563 [DEBUG] [Thread-71254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:32:33.563 [INFO] [Thread-71254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:32:33.571 [DEBUG] [Thread-71254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:32:33.571 [DEBUG] [Thread-71254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:32:33.571 [DEBUG] [Thread-71254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:32:33.571 [DEBUG] [Thread-71254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:32:33.571 [DEBUG] [Thread-71254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] client lang: <none>
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] server lang: <none>
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] kex follows: False
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] Compression: none
2025-12-12T14:32:33.572 [DEBUG] [Thread-71254] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:32:33.630 [DEBUG] [Thread-71254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:32:33.630 [DEBUG] [Thread-71254] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:32:33.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:32:33.631 [DEBUG] [Thread-71254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:32:33.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:32:33.686 [DEBUG] [Thread-71254] [transport.py] [_log()] userauth is OK
2025-12-12T14:32:33.686 [DEBUG] [Thread-71254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:32:33.686 [DEBUG] [Thread-71254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:32:33.686 [DEBUG] [Thread-71254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:32:33.686 [DEBUG] [Thread-71254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:32:33.706 [INFO] [Thread-71254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:32:33.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:32:33.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:32:34.603 [DEBUG] [Thread-71254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:32:34.604 [DEBUG] [Thread-71254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:32:34.652 [DEBUG] [Thread-71254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:32:34.652 [DEBUG] [Thread-71254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:32:34.661 [DEBUG] [Thread-71254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:32:34.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:32:34.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:32:34.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:32:34.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:32:34.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:32:34.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:32:34.695 [DEBUG] [Thread-71254] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:32:39.814 [DEBUG] [Thread-71256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:32:47.747 [DEBUG] [Thread-71257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:32:53.235 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:32:53.236 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:32:54.856 [DEBUG] [Thread-71258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:04.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:33:04.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:33:04.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:33:05.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 32, 49), 22.85, 21.55, 0.0, 46.35, 20.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:33:05.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:32:49
2025-12-12T14:33:05.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:33:05.649 [DEBUG] [Thread-71259] [transport.py] [_log()] starting thread (client mode): 0xfabc4d30
2025-12-12T14:33:05.649 [DEBUG] [Thread-71259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:33:05.660 [DEBUG] [Thread-71259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:33:05.660 [INFO] [Thread-71259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] client lang: <none>
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] server lang: <none>
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] kex follows: False
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] Compression: none
2025-12-12T14:33:05.662 [DEBUG] [Thread-71259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:33:05.669 [DEBUG] [Thread-71259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:33:05.670 [DEBUG] [Thread-71259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:33:05.670 [DEBUG] [Thread-71259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:33:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:33:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:33:05.671 [DEBUG] [Thread-71259] [transport.py] [_log()] userauth is OK
2025-12-12T14:33:05.671 [DEBUG] [Thread-71259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:33:05.671 [DEBUG] [Thread-71259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:33:05.671 [DEBUG] [Thread-71259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:33:05.671 [DEBUG] [Thread-71259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:33:05.681 [INFO] [Thread-71259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:33:05.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:33:06.295 [DEBUG] [Thread-71259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:33:06.295 [DEBUG] [Thread-71259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:33:06.296 [DEBUG] [Thread-71259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:33:06.336 [DEBUG] [Thread-71259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:33:06.336 [DEBUG] [Thread-71259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:33:06.339 [DEBUG] [Thread-71259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:33:06.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:33:06.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:33:06.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:33:06.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:33:06.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:33:06.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:33:06.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:33:06.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:33:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:33:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.522664 -999.00  +21.00  43.44     26   +1.00 1 1 2 1 1   888    0 21.32 33.43 ----- 42.6 43.4 310.0 55.4 25.2 -24.9 24.9 -24.9 25.4 -25.1 25.9 -22.8
2025-12-12T14:33:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:33:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:33:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.522664
2025-12-12T14:33:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:33:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:33:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:33:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:33:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:33:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:32:49', tmtdew=22.85, humidity=21.55, cloud=0.0, wind=46.35, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:32:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:33:06.364 [DEBUG] [Thread-71259] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:33:06.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:33:06.458 [DEBUG] [Thread-71262] [transport.py] [_log()] starting thread (client mode): 0xf81c1600
2025-12-12T14:33:06.459 [DEBUG] [Thread-71262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:33:06.472 [DEBUG] [Thread-71262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:33:06.472 [INFO] [Thread-71262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:33:06.480 [DEBUG] [Thread-71262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] client lang: <none>
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] server lang: <none>
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] kex follows: False
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] Compression: none
2025-12-12T14:33:06.481 [DEBUG] [Thread-71262] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:33:06.538 [DEBUG] [Thread-71262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:33:06.538 [DEBUG] [Thread-71262] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:33:06.539 [DEBUG] [Thread-71262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:33:06.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:33:06.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:33:06.594 [DEBUG] [Thread-71262] [transport.py] [_log()] userauth is OK
2025-12-12T14:33:06.594 [DEBUG] [Thread-71262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:33:06.594 [DEBUG] [Thread-71262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:33:06.595 [DEBUG] [Thread-71262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:33:06.595 [DEBUG] [Thread-71262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:33:06.618 [INFO] [Thread-71262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:33:06.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:33:06.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:33:07.476 [DEBUG] [Thread-71262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:33:07.476 [DEBUG] [Thread-71262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:33:07.524 [DEBUG] [Thread-71262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:33:07.524 [DEBUG] [Thread-71262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:33:07.533 [DEBUG] [Thread-71262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:33:07.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:33:07.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:33:07.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:33:07.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:33:07.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:33:07.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:33:07.568 [DEBUG] [Thread-71262] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:33:09.886 [DEBUG] [Thread-71264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:24.934 [DEBUG] [Thread-71265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:33:37.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:33:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:33:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 33, 21), 22.74, 21.71, 0.0, 52.96, 20.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:33:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:33:21
2025-12-12T14:33:38.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:33:38.521 [DEBUG] [Thread-71266] [transport.py] [_log()] starting thread (client mode): 0xf81c13c0
2025-12-12T14:33:38.521 [DEBUG] [Thread-71266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:33:38.542 [DEBUG] [Thread-71266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:33:38.542 [INFO] [Thread-71266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] client lang: <none>
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] server lang: <none>
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] kex follows: False
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] Compression: none
2025-12-12T14:33:38.545 [DEBUG] [Thread-71266] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:33:38.564 [DEBUG] [Thread-71266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:33:38.564 [DEBUG] [Thread-71266] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:33:38.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:33:38.565 [DEBUG] [Thread-71266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:33:38.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:33:38.567 [DEBUG] [Thread-71266] [transport.py] [_log()] userauth is OK
2025-12-12T14:33:38.567 [DEBUG] [Thread-71266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:33:38.567 [DEBUG] [Thread-71266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:33:38.567 [DEBUG] [Thread-71266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:33:38.568 [DEBUG] [Thread-71266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:33:38.603 [INFO] [Thread-71266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:33:38.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:33:39.225 [DEBUG] [Thread-71266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:33:39.226 [DEBUG] [Thread-71266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:33:39.226 [DEBUG] [Thread-71266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:33:39.267 [DEBUG] [Thread-71266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:33:39.267 [DEBUG] [Thread-71266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:33:39.270 [DEBUG] [Thread-71266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:33:39.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:33:39.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:33:39.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:33:39.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:33:39.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:33:39.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:33:39.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:33:39.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:33:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:33:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.523011 -999.00  +21.20  53.82     26   +1.00 1 1 2 1 1   888    0 20.91 32.25 ----- 41.3 53.8 310.2 69.2 25.3 -24.5 24.9 -25.2 25.3 -24.1 26.0 -22.7
2025-12-12T14:33:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:33:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:33:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.523011
2025-12-12T14:33:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:33:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:33:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:33:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:33:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:33:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:33:21', tmtdew=22.74, humidity=21.71, cloud=0.0, wind=52.96, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:33:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:33:39.296 [DEBUG] [Thread-71266] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:33:39.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:33:39.403 [DEBUG] [Thread-71269] [transport.py] [_log()] starting thread (client mode): 0xfabc5420
2025-12-12T14:33:39.403 [DEBUG] [Thread-71269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:33:39.419 [DEBUG] [Thread-71269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:33:39.419 [INFO] [Thread-71269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:39.427 [DEBUG] [Thread-71269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] client lang: <none>
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] server lang: <none>
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] kex follows: False
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] Compression: none
2025-12-12T14:33:39.428 [DEBUG] [Thread-71269] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:33:39.486 [DEBUG] [Thread-71269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:33:39.486 [DEBUG] [Thread-71269] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:33:39.487 [DEBUG] [Thread-71269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:33:39.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:33:39.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:33:39.542 [DEBUG] [Thread-71269] [transport.py] [_log()] userauth is OK
2025-12-12T14:33:39.542 [DEBUG] [Thread-71269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:33:39.542 [DEBUG] [Thread-71269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:33:39.542 [DEBUG] [Thread-71269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:33:39.542 [DEBUG] [Thread-71269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:33:39.561 [INFO] [Thread-71269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:33:39.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:33:39.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:33:39.963 [DEBUG] [Thread-71271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:40.487 [DEBUG] [Thread-71269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:33:40.487 [DEBUG] [Thread-71269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:33:40.534 [DEBUG] [Thread-71269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:33:40.534 [DEBUG] [Thread-71269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:33:40.544 [DEBUG] [Thread-71269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:33:40.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:33:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:33:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:33:40.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:33:40.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:33:40.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:33:40.576 [DEBUG] [Thread-71269] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:33:47.807 [DEBUG] [Thread-71272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:53.375 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:53.376 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:33:55.004 [DEBUG] [Thread-71273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:10.033 [DEBUG] [Thread-71274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:10.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:34:10.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:34:10.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:34:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 33, 53), 22.75, 21.83, 0.0, 55.14, 20.9, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:34:11.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:33:53
2025-12-12T14:34:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:34:11.532 [DEBUG] [Thread-71275] [transport.py] [_log()] starting thread (client mode): 0xf575ec50
2025-12-12T14:34:11.532 [DEBUG] [Thread-71275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:34:11.551 [DEBUG] [Thread-71275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:34:11.551 [INFO] [Thread-71275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] client lang: <none>
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] server lang: <none>
2025-12-12T14:34:11.552 [DEBUG] [Thread-71275] [transport.py] [_log()] kex follows: False
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] Compression: none
2025-12-12T14:34:11.553 [DEBUG] [Thread-71275] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:34:11.561 [DEBUG] [Thread-71275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:34:11.561 [DEBUG] [Thread-71275] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:34:11.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:34:11.561 [DEBUG] [Thread-71275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:34:11.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:34:11.562 [DEBUG] [Thread-71275] [transport.py] [_log()] userauth is OK
2025-12-12T14:34:11.562 [DEBUG] [Thread-71275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:34:11.562 [DEBUG] [Thread-71275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:34:11.562 [DEBUG] [Thread-71275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:34:11.562 [DEBUG] [Thread-71275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:34:11.575 [INFO] [Thread-71275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:34:11.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:34:12.221 [DEBUG] [Thread-71275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:34:12.221 [DEBUG] [Thread-71275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:34:12.221 [DEBUG] [Thread-71275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:34:12.262 [DEBUG] [Thread-71275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:34:12.262 [DEBUG] [Thread-71275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:34:12.265 [DEBUG] [Thread-71275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:34:12.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:34:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:34:12.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:34:12.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:34:12.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:34:12.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:34:12.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:34:12.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:34:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:34:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.523358 -999.00  +21.30  59.44     26   +1.10 1 1 2 1 1   888    0 21.59 30.15 ----- 44.8 59.4 322.8 73.2 25.4 -24.4 25.1 -25.0 25.4 -24.6 26.0 -23.0
2025-12-12T14:34:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:34:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:34:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.523358
2025-12-12T14:34:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:34:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:34:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:34:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:34:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:34:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:33:53', tmtdew=22.75, humidity=21.83, cloud=0.0, wind=55.14, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:33:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:34:12.292 [DEBUG] [Thread-71275] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:34:12.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:34:12.388 [DEBUG] [Thread-71278] [transport.py] [_log()] starting thread (client mode): 0xf575c3d0
2025-12-12T14:34:12.388 [DEBUG] [Thread-71278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:34:12.403 [DEBUG] [Thread-71278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:34:12.403 [INFO] [Thread-71278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:34:12.410 [DEBUG] [Thread-71278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] client lang: <none>
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] server lang: <none>
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] kex follows: False
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:34:12.411 [DEBUG] [Thread-71278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:34:12.412 [DEBUG] [Thread-71278] [transport.py] [_log()] Compression: none
2025-12-12T14:34:12.412 [DEBUG] [Thread-71278] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:34:12.469 [DEBUG] [Thread-71278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:34:12.470 [DEBUG] [Thread-71278] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:34:12.470 [DEBUG] [Thread-71278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:34:12.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:34:12.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:34:12.526 [DEBUG] [Thread-71278] [transport.py] [_log()] userauth is OK
2025-12-12T14:34:12.526 [DEBUG] [Thread-71278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:34:12.526 [DEBUG] [Thread-71278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:34:12.527 [DEBUG] [Thread-71278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:34:12.527 [DEBUG] [Thread-71278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:34:12.546 [INFO] [Thread-71278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:34:12.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:34:12.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:34:13.411 [DEBUG] [Thread-71278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:34:13.411 [DEBUG] [Thread-71278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:34:13.459 [DEBUG] [Thread-71278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:34:13.459 [DEBUG] [Thread-71278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:34:13.468 [DEBUG] [Thread-71278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:34:13.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:34:13.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')
2025-12-12T14:34:13.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:34:13.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:34:13.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:34:13.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:34:13.503 [DEBUG] [Thread-71278] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:34:25.063 [DEBUG] [Thread-71280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:40.118 [DEBUG] [Thread-71281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:43.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:34:43.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:34:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:34:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 34, 25), 22.62, 22.01, 0.0, 49.9, 20.78, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:34:44.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:34:25
2025-12-12T14:34:44.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:34:44.464 [DEBUG] [Thread-71282] [transport.py] [_log()] starting thread (client mode): 0xf575f2b0
2025-12-12T14:34:44.465 [DEBUG] [Thread-71282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:34:44.485 [DEBUG] [Thread-71282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:34:44.485 [INFO] [Thread-71282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] client lang: <none>
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] server lang: <none>
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] kex follows: False
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] Compression: none
2025-12-12T14:34:44.488 [DEBUG] [Thread-71282] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:34:44.502 [DEBUG] [Thread-71282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:34:44.502 [DEBUG] [Thread-71282] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:34:44.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:34:44.502 [DEBUG] [Thread-71282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:34:44.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:34:44.503 [DEBUG] [Thread-71282] [transport.py] [_log()] userauth is OK
2025-12-12T14:34:44.503 [DEBUG] [Thread-71282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:34:44.503 [DEBUG] [Thread-71282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:34:44.503 [DEBUG] [Thread-71282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:34:44.503 [DEBUG] [Thread-71282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:34:44.522 [INFO] [Thread-71282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:34:44.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:34:45.147 [DEBUG] [Thread-71282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:34:45.147 [DEBUG] [Thread-71282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:34:45.147 [DEBUG] [Thread-71282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:34:45.189 [DEBUG] [Thread-71282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:34:45.189 [DEBUG] [Thread-71282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:34:45.191 [DEBUG] [Thread-71282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:34:45.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:34:45.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:34:45.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:34:45.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:34:45.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:34:45.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:34:45.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.523705 -999.00  +21.30  45.66     26   +1.20 1 1 2 1 1   888    0 21.16 31.25 ----- 40.3 45.7 318.8 55.4 25.4 -24.8 25.0 -25.1 25.6 -22.7 26.1 -22.5
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.523705
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:34:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:34:25', tmtdew=22.62, humidity=22.01, cloud=0.0, wind=49.9, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:34:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:34:45.209 [DEBUG] [Thread-71282] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:34:45.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:34:45.299 [DEBUG] [Thread-71285] [transport.py] [_log()] starting thread (client mode): 0xf81c0310
2025-12-12T14:34:45.299 [DEBUG] [Thread-71285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:34:45.316 [DEBUG] [Thread-71285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:34:45.316 [INFO] [Thread-71285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] client lang: <none>
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] server lang: <none>
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] kex follows: False
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] Compression: none
2025-12-12T14:34:45.327 [DEBUG] [Thread-71285] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:34:45.384 [DEBUG] [Thread-71285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:34:45.384 [DEBUG] [Thread-71285] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:34:45.385 [DEBUG] [Thread-71285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:34:45.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:34:45.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:34:45.442 [DEBUG] [Thread-71285] [transport.py] [_log()] userauth is OK
2025-12-12T14:34:45.442 [DEBUG] [Thread-71285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:34:45.442 [DEBUG] [Thread-71285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:34:45.442 [DEBUG] [Thread-71285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:34:45.442 [DEBUG] [Thread-71285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:34:45.455 [INFO] [Thread-71285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:34:45.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:34:45.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:34:46.288 [DEBUG] [Thread-71285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:34:46.288 [DEBUG] [Thread-71285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:34:46.336 [DEBUG] [Thread-71285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:34:46.336 [DEBUG] [Thread-71285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:34:46.344 [DEBUG] [Thread-71285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:34:46.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:34:46.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:34:46.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:34:46.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:34:46.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:34:46.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:34:46.376 [DEBUG] [Thread-71285] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:34:47.854 [DEBUG] [Thread-71287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:53.516 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:53.517 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:34:55.149 [DEBUG] [Thread-71288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:10.195 [DEBUG] [Thread-71289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:16.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:35:16.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:35:16.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:35:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 34, 57), 22.17, 22.53, 0.0, 55.61, 20.23, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:35:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:34:57
2025-12-12T14:35:17.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:35:17.338 [DEBUG] [Thread-71290] [transport.py] [_log()] starting thread (client mode): 0xf575e5c0
2025-12-12T14:35:17.338 [DEBUG] [Thread-71290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:35:17.356 [DEBUG] [Thread-71290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:35:17.356 [INFO] [Thread-71290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] client lang: <none>
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] server lang: <none>
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] kex follows: False
2025-12-12T14:35:17.359 [DEBUG] [Thread-71290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:35:17.360 [DEBUG] [Thread-71290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:35:17.360 [DEBUG] [Thread-71290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:35:17.360 [DEBUG] [Thread-71290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:35:17.360 [DEBUG] [Thread-71290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:35:17.360 [DEBUG] [Thread-71290] [transport.py] [_log()] Compression: none
2025-12-12T14:35:17.360 [DEBUG] [Thread-71290] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:35:17.381 [DEBUG] [Thread-71290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:35:17.381 [DEBUG] [Thread-71290] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:35:17.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:35:17.382 [DEBUG] [Thread-71290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:35:17.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:35:17.384 [DEBUG] [Thread-71290] [transport.py] [_log()] userauth is OK
2025-12-12T14:35:17.384 [DEBUG] [Thread-71290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:35:17.385 [DEBUG] [Thread-71290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:35:17.385 [DEBUG] [Thread-71290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:35:17.385 [DEBUG] [Thread-71290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:35:17.406 [INFO] [Thread-71290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:35:17.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:35:18.158 [DEBUG] [Thread-71290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:35:18.158 [DEBUG] [Thread-71290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:35:18.158 [DEBUG] [Thread-71290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:35:18.199 [DEBUG] [Thread-71290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:35:18.199 [DEBUG] [Thread-71290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:35:18.202 [DEBUG] [Thread-71290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:35:18.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:35:18.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:35:18.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:35:18.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:35:18.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:35:18.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:35:18.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:35:18.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:35:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:35:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.524053 -999.00  +21.70  40.52     26   +1.50 1 1 2 1 1   888    0 21.37 31.95 ----- 41.2 40.5 308.8 59.4 25.4 -27.9 25.0 -26.1 25.4 -23.6 26.1 -22.5
2025-12-12T14:35:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:35:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:35:18.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.524053
2025-12-12T14:35:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:35:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:35:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:35:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:35:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:35:18.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:34:57', tmtdew=22.17, humidity=22.53, cloud=0.0, wind=55.61, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:34:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:35:18.229 [DEBUG] [Thread-71290] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:35:18.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:35:18.326 [DEBUG] [Thread-71293] [transport.py] [_log()] starting thread (client mode): 0xf575d720
2025-12-12T14:35:18.326 [DEBUG] [Thread-71293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:35:18.341 [DEBUG] [Thread-71293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:35:18.341 [INFO] [Thread-71293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:35:18.350 [DEBUG] [Thread-71293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:35:18.350 [DEBUG] [Thread-71293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:35:18.350 [DEBUG] [Thread-71293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:35:18.350 [DEBUG] [Thread-71293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:18.350 [DEBUG] [Thread-71293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:18.350 [DEBUG] [Thread-71293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] client lang: <none>
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] server lang: <none>
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] kex follows: False
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] Compression: none
2025-12-12T14:35:18.351 [DEBUG] [Thread-71293] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:35:18.407 [DEBUG] [Thread-71293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:35:18.408 [DEBUG] [Thread-71293] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:35:18.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:35:18.409 [DEBUG] [Thread-71293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:35:18.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:35:18.468 [DEBUG] [Thread-71293] [transport.py] [_log()] userauth is OK
2025-12-12T14:35:18.468 [DEBUG] [Thread-71293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:35:18.468 [DEBUG] [Thread-71293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:35:18.468 [DEBUG] [Thread-71293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:35:18.468 [DEBUG] [Thread-71293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:35:18.493 [INFO] [Thread-71293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:35:18.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:35:18.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:35:19.347 [DEBUG] [Thread-71293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:35:19.347 [DEBUG] [Thread-71293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:35:19.395 [DEBUG] [Thread-71293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:35:19.395 [DEBUG] [Thread-71293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:35:19.404 [DEBUG] [Thread-71293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:35:19.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:35:19.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:35:19.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:35:19.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:35:19.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:35:19.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:35:19.439 [DEBUG] [Thread-71293] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:35:25.226 [DEBUG] [Thread-71295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:40.262 [DEBUG] [Thread-71296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:47.908 [DEBUG] [Thread-71297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:35:49.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:35:49.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:35:50.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 35, 29), 22.26, 22.43, 0.0, 51.26, 20.38, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:35:50.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:35:29
2025-12-12T14:35:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:35:50.383 [DEBUG] [Thread-71298] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-12T14:35:50.383 [DEBUG] [Thread-71298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:35:50.404 [DEBUG] [Thread-71298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:35:50.404 [INFO] [Thread-71298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] client lang: <none>
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] server lang: <none>
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] kex follows: False
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:35:50.407 [DEBUG] [Thread-71298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:35:50.408 [DEBUG] [Thread-71298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:35:50.408 [DEBUG] [Thread-71298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:35:50.408 [DEBUG] [Thread-71298] [transport.py] [_log()] Compression: none
2025-12-12T14:35:50.408 [DEBUG] [Thread-71298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:35:50.424 [DEBUG] [Thread-71298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:35:50.424 [DEBUG] [Thread-71298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:35:50.425 [DEBUG] [Thread-71298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:35:50.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:35:50.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:35:50.427 [DEBUG] [Thread-71298] [transport.py] [_log()] userauth is OK
2025-12-12T14:35:50.427 [DEBUG] [Thread-71298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:35:50.427 [DEBUG] [Thread-71298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:35:50.427 [DEBUG] [Thread-71298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:35:50.427 [DEBUG] [Thread-71298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:35:50.461 [INFO] [Thread-71298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:35:50.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:35:51.098 [DEBUG] [Thread-71298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:35:51.099 [DEBUG] [Thread-71298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:35:51.099 [DEBUG] [Thread-71298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:35:51.141 [DEBUG] [Thread-71298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:35:51.141 [DEBUG] [Thread-71298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:35:51.143 [DEBUG] [Thread-71298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:35:51.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:35:51.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:35:51.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:35:51.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:35:51.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:35:51.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:35:51.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:35:51.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:35:51.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:35:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.524399 -999.00  +22.10  35.04     25   +1.60 1 1 2 1 1   888    0 21.14 31.86 ----- 40.8 35.0 311.9 49.4 25.4 -25.8 25.0 -25.3 25.6 -21.2 26.1 -24.1
2025-12-12T14:35:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:35:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:35:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.524399
2025-12-12T14:35:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:35:51.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:35:51.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:35:51.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:35:51.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:35:51.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:35:29', tmtdew=22.26, humidity=22.43, cloud=0.0, wind=51.26, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:35:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:35:51.170 [DEBUG] [Thread-71298] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:35:51.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:35:51.266 [DEBUG] [Thread-71301] [transport.py] [_log()] starting thread (client mode): 0xf575ed10
2025-12-12T14:35:51.267 [DEBUG] [Thread-71301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:35:51.281 [DEBUG] [Thread-71301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:35:51.281 [INFO] [Thread-71301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:35:51.289 [DEBUG] [Thread-71301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:35:51.289 [DEBUG] [Thread-71301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:35:51.289 [DEBUG] [Thread-71301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] client lang: <none>
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] server lang: <none>
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] kex follows: False
2025-12-12T14:35:51.290 [DEBUG] [Thread-71301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:35:51.291 [DEBUG] [Thread-71301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:35:51.291 [DEBUG] [Thread-71301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:35:51.291 [DEBUG] [Thread-71301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:35:51.291 [DEBUG] [Thread-71301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:35:51.291 [DEBUG] [Thread-71301] [transport.py] [_log()] Compression: none
2025-12-12T14:35:51.291 [DEBUG] [Thread-71301] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:35:51.350 [DEBUG] [Thread-71301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:35:51.351 [DEBUG] [Thread-71301] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:35:51.351 [DEBUG] [Thread-71301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:35:51.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:35:51.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:35:51.406 [DEBUG] [Thread-71301] [transport.py] [_log()] userauth is OK
2025-12-12T14:35:51.406 [DEBUG] [Thread-71301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:35:51.406 [DEBUG] [Thread-71301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:35:51.406 [DEBUG] [Thread-71301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:35:51.406 [DEBUG] [Thread-71301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:35:51.425 [INFO] [Thread-71301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:35:51.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:35:51.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:35:52.328 [DEBUG] [Thread-71301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:35:52.329 [DEBUG] [Thread-71301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:35:52.377 [DEBUG] [Thread-71301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:35:52.377 [DEBUG] [Thread-71301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:35:52.386 [DEBUG] [Thread-71301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:35:52.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:35:52.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:35: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
2025-12-12T14:35:52.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:35:52.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:35:52.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:35:52.420 [DEBUG] [Thread-71301] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:35:53.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:53.659 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:35:55.292 [DEBUG] [Thread-71303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:10.335 [DEBUG] [Thread-71304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:22.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:36:22.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:36: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
2025-12-12T14:36:23.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 36, 1), 22.39, 22.03, 0.0, 50.32, 20.7, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:36:23.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:36:01
2025-12-12T14:36:23.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:36:23.372 [DEBUG] [Thread-71305] [transport.py] [_log()] starting thread (client mode): 0xfabc59c0
2025-12-12T14:36:23.372 [DEBUG] [Thread-71305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:36:23.391 [DEBUG] [Thread-71305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:36:23.391 [INFO] [Thread-71305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] client lang: <none>
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] server lang: <none>
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] kex follows: False
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:36:23.393 [DEBUG] [Thread-71305] [transport.py] [_log()] Compression: none
2025-12-12T14:36:23.394 [DEBUG] [Thread-71305] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:36:23.403 [DEBUG] [Thread-71305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:36:23.403 [DEBUG] [Thread-71305] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:36:23.403 [DEBUG] [Thread-71305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:36:23.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:36:23.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:36:23.405 [DEBUG] [Thread-71305] [transport.py] [_log()] userauth is OK
2025-12-12T14:36:23.405 [DEBUG] [Thread-71305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:36:23.405 [DEBUG] [Thread-71305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:36:23.405 [DEBUG] [Thread-71305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:36:23.405 [DEBUG] [Thread-71305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:36:23.422 [INFO] [Thread-71305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:36:23.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:36:24.073 [DEBUG] [Thread-71305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:36:24.074 [DEBUG] [Thread-71305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:36:24.074 [DEBUG] [Thread-71305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:36:24.115 [DEBUG] [Thread-71305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:36:24.115 [DEBUG] [Thread-71305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:36:24.118 [DEBUG] [Thread-71305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:36:24.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:36:24.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:36:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:36:24.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:36:24.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:36:24.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:36:24.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:36:24.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:36:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:36:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.524747 -999.00  +21.80  45.42     26   +1.60 1 1 2 1 1   888    0 21.38 33.74 ----- 53.9 45.4 317.2 68.8 25.5 -25.5 25.1 -25.7 25.6 -22.8 26.1 -23.1
2025-12-12T14:36:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:36:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:36:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.524747
2025-12-12T14:36:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:36:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:36:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:36:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:36:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:36:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:36:01', tmtdew=22.39, humidity=22.03, cloud=0.0, wind=50.32, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:35:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:36:24.143 [DEBUG] [Thread-71305] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:36:24.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:36:24.239 [DEBUG] [Thread-71308] [transport.py] [_log()] starting thread (client mode): 0xf570c3a0
2025-12-12T14:36:24.239 [DEBUG] [Thread-71308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:36:24.254 [DEBUG] [Thread-71308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:36:24.254 [INFO] [Thread-71308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:24.262 [DEBUG] [Thread-71308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] client lang: <none>
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] server lang: <none>
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] kex follows: False
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:36:24.263 [DEBUG] [Thread-71308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:36:24.264 [DEBUG] [Thread-71308] [transport.py] [_log()] Compression: none
2025-12-12T14:36:24.264 [DEBUG] [Thread-71308] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:36:24.322 [DEBUG] [Thread-71308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:36:24.322 [DEBUG] [Thread-71308] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:36:24.323 [DEBUG] [Thread-71308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:36:24.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:36:24.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:36:24.378 [DEBUG] [Thread-71308] [transport.py] [_log()] userauth is OK
2025-12-12T14:36:24.378 [DEBUG] [Thread-71308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:36:24.378 [DEBUG] [Thread-71308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:36:24.378 [DEBUG] [Thread-71308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:36:24.378 [DEBUG] [Thread-71308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:36:24.401 [INFO] [Thread-71308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:36:24.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:36:24.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:36:25.242 [DEBUG] [Thread-71308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:36:25.242 [DEBUG] [Thread-71308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:36:25.290 [DEBUG] [Thread-71308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:36:25.290 [DEBUG] [Thread-71308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:36:25.299 [DEBUG] [Thread-71308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:36:25.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:36:25.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:36:25.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:36:25.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:36:25.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:36:25.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:36:25.333 [DEBUG] [Thread-71308] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:36:25.361 [DEBUG] [Thread-71310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:40.407 [DEBUG] [Thread-71311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:47.960 [DEBUG] [Thread-71312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:53.801 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:53.802 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:36:55.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:36:55.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:36:55.438 [DEBUG] [Thread-71313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:36:56.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 36, 33), 22.54, 22.02, 0.0, 46.64, 21.22, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:36:56.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:36:33
2025-12-12T14:36:56.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:36:56.303 [DEBUG] [Thread-71314] [transport.py] [_log()] starting thread (client mode): 0xf570f550
2025-12-12T14:36:56.303 [DEBUG] [Thread-71314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:36:56.323 [DEBUG] [Thread-71314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:36:56.323 [INFO] [Thread-71314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:36:56.326 [DEBUG] [Thread-71314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:36:56.326 [DEBUG] [Thread-71314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:36:56.326 [DEBUG] [Thread-71314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] client lang: <none>
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] server lang: <none>
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] kex follows: False
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] Compression: none
2025-12-12T14:36:56.327 [DEBUG] [Thread-71314] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:36:56.346 [DEBUG] [Thread-71314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:36:56.347 [DEBUG] [Thread-71314] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:36:56.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:36:56.348 [DEBUG] [Thread-71314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:36:56.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:36:56.388 [DEBUG] [Thread-71314] [transport.py] [_log()] userauth is OK
2025-12-12T14:36:56.389 [DEBUG] [Thread-71314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:36:56.389 [DEBUG] [Thread-71314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:36:56.389 [DEBUG] [Thread-71314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:36:56.389 [DEBUG] [Thread-71314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:36:56.420 [INFO] [Thread-71314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:36:56.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:36:57.050 [DEBUG] [Thread-71314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:36:57.050 [DEBUG] [Thread-71314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:36:57.051 [DEBUG] [Thread-71314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:36:57.091 [DEBUG] [Thread-71314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:36:57.091 [DEBUG] [Thread-71314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:36:57.094 [DEBUG] [Thread-71314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:36:57.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:36:57.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:36:57.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:36:57.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:36:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:36:57.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:36:57.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:36:57.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:36:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:36:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.525094 -999.00  +20.70  61.80     27   +1.30 1 1 3 1 1   888    0 20.89 31.84 ----- 56.2 61.8 311.4 71.3 25.5 -26.2 25.1 -25.7 25.4 -23.6 26.2 -23.6
2025-12-12T14:36:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:36:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:36:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.525094
2025-12-12T14:36:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:36:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:36:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:36:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:36:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:36:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:36:33', tmtdew=22.54, humidity=22.02, cloud=0.0, wind=46.64, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:36:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:36:57.119 [DEBUG] [Thread-71314] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:36:57.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:36:57.214 [DEBUG] [Thread-71317] [transport.py] [_log()] starting thread (client mode): 0xfabc6b00
2025-12-12T14:36:57.214 [DEBUG] [Thread-71317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:36:57.229 [DEBUG] [Thread-71317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:36:57.229 [INFO] [Thread-71317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:57.236 [DEBUG] [Thread-71317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] client lang: <none>
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] server lang: <none>
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] kex follows: False
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] Compression: none
2025-12-12T14:36:57.237 [DEBUG] [Thread-71317] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:36:57.293 [DEBUG] [Thread-71317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:36:57.294 [DEBUG] [Thread-71317] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:36:57.294 [DEBUG] [Thread-71317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:36:57.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:36:57.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:36:57.350 [DEBUG] [Thread-71317] [transport.py] [_log()] userauth is OK
2025-12-12T14:36:57.350 [DEBUG] [Thread-71317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:36:57.350 [DEBUG] [Thread-71317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:36:57.350 [DEBUG] [Thread-71317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:36:57.350 [DEBUG] [Thread-71317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:36:57.372 [INFO] [Thread-71317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:36:57.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:36:57.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:36:58.201 [DEBUG] [Thread-71317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:36:58.201 [DEBUG] [Thread-71317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:36:58.249 [DEBUG] [Thread-71317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:36:58.249 [DEBUG] [Thread-71317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:36:58.258 [DEBUG] [Thread-71317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:36:58.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:36:58.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:36:58.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:36:58.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:36:58.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:36:58.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:36:58.293 [DEBUG] [Thread-71317] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:37:10.465 [DEBUG] [Thread-71319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:37:25.506 [DEBUG] [Thread-71320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:37:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:37:28.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:37:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:37:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 37, 5), 22.36, 22.16, 0.0, 50.16, 20.98, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:37:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:37:05
2025-12-12T14:37:29.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:37:29.238 [DEBUG] [Thread-71321] [transport.py] [_log()] starting thread (client mode): 0xf81c1180
2025-12-12T14:37:29.238 [DEBUG] [Thread-71321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:37:29.251 [DEBUG] [Thread-71321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:37:29.251 [INFO] [Thread-71321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] client lang: <none>
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] server lang: <none>
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] kex follows: False
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] Compression: none
2025-12-12T14:37:29.252 [DEBUG] [Thread-71321] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:37:29.260 [DEBUG] [Thread-71321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:37:29.260 [DEBUG] [Thread-71321] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:37:29.260 [DEBUG] [Thread-71321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:37:29.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:37:29.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:37:29.261 [DEBUG] [Thread-71321] [transport.py] [_log()] userauth is OK
2025-12-12T14:37:29.261 [DEBUG] [Thread-71321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:37:29.261 [DEBUG] [Thread-71321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:37:29.261 [DEBUG] [Thread-71321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:37:29.261 [DEBUG] [Thread-71321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:37:29.273 [INFO] [Thread-71321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:37:29.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:37:29.915 [DEBUG] [Thread-71321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:37:29.915 [DEBUG] [Thread-71321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:37:29.915 [DEBUG] [Thread-71321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:37:29.956 [DEBUG] [Thread-71321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:37:29.956 [DEBUG] [Thread-71321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:37:29.959 [DEBUG] [Thread-71321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:37:29.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:37:29.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:37:29.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:37:29.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:37:29.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:37:29.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:37:29.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:37:29.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:37:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:37:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.525789 -999.00  +20.70  43.60     28   +1.70 1 1 2 1 1   888    0 20.87 13.13 ----- 44.2 43.6 310.2 60.1 25.2 -25.9 24.8 -26.5 25.2 -26.0 25.9 -23.4
2025-12-12T14:37:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:37:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:37:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.525789
2025-12-12T14:37:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:37:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:37:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:37:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:37:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:37:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:37:05', tmtdew=22.36, humidity=22.16, cloud=0.0, wind=50.16, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:37:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:37:29.978 [DEBUG] [Thread-71321] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:37:30.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:37:30.078 [DEBUG] [Thread-71324] [transport.py] [_log()] starting thread (client mode): 0xf575cbb0
2025-12-12T14:37:30.078 [DEBUG] [Thread-71324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:37:30.093 [DEBUG] [Thread-71324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:37:30.093 [INFO] [Thread-71324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] client lang: <none>
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] server lang: <none>
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] kex follows: False
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:37:30.101 [DEBUG] [Thread-71324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:37:30.102 [DEBUG] [Thread-71324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:37:30.102 [DEBUG] [Thread-71324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:37:30.102 [DEBUG] [Thread-71324] [transport.py] [_log()] Compression: none
2025-12-12T14:37:30.102 [DEBUG] [Thread-71324] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:37:30.157 [DEBUG] [Thread-71324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:37:30.158 [DEBUG] [Thread-71324] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:37:30.158 [DEBUG] [Thread-71324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:37:30.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:37:30.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:37:30.214 [DEBUG] [Thread-71324] [transport.py] [_log()] userauth is OK
2025-12-12T14:37:30.214 [DEBUG] [Thread-71324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:37:30.214 [DEBUG] [Thread-71324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:37:30.215 [DEBUG] [Thread-71324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:37:30.215 [DEBUG] [Thread-71324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:37:30.234 [INFO] [Thread-71324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:37:30.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:37:30.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:37:31.077 [DEBUG] [Thread-71324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:37:31.077 [DEBUG] [Thread-71324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:37:31.125 [DEBUG] [Thread-71324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:37:31.125 [DEBUG] [Thread-71324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:37:31.134 [DEBUG] [Thread-71324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:37:31.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:37: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')
2025-12-12T14:37:31.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:37:31.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:37:31.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:37:31.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:37:31.168 [DEBUG] [Thread-71324] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:37:40.539 [DEBUG] [Thread-71326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:37:48.013 [DEBUG] [Thread-71327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:37:53.942 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:37:53.943 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:37:55.581 [DEBUG] [Thread-71328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:01.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:38:01.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:38:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:38:01.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 37, 37), 22.57, 21.86, 0.0, 47.73, 21.22, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:38:01.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:37:37
2025-12-12T14:38:01.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:38:02.119 [DEBUG] [Thread-71329] [transport.py] [_log()] starting thread (client mode): 0xfabc56c0
2025-12-12T14:38:02.119 [DEBUG] [Thread-71329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:38:02.138 [DEBUG] [Thread-71329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:38:02.139 [INFO] [Thread-71329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] client lang: <none>
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] server lang: <none>
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] kex follows: False
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] Compression: none
2025-12-12T14:38:02.142 [DEBUG] [Thread-71329] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:38:02.158 [DEBUG] [Thread-71329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:38:02.159 [DEBUG] [Thread-71329] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:38:02.159 [DEBUG] [Thread-71329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:38:02.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:38:02.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:38:02.160 [DEBUG] [Thread-71329] [transport.py] [_log()] userauth is OK
2025-12-12T14:38:02.160 [DEBUG] [Thread-71329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:38:02.160 [DEBUG] [Thread-71329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:38:02.160 [DEBUG] [Thread-71329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:38:02.160 [DEBUG] [Thread-71329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:38:02.188 [INFO] [Thread-71329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:38:02.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:38:02.828 [DEBUG] [Thread-71329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:38:02.828 [DEBUG] [Thread-71329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:38:02.828 [DEBUG] [Thread-71329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:38:02.869 [DEBUG] [Thread-71329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:38:02.869 [DEBUG] [Thread-71329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:38:02.871 [DEBUG] [Thread-71329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:38:02.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:38:02.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:38:02.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:38:02.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:38:02.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:38:02.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:38:02.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.526136 -999.00  +20.70  50.57     27   +1.20 1 1 2 1 1   888    0 20.19 7.78 ----- 46.9 50.6 306.4 60.9 25.2 -26.1 24.8 -26.1 25.2 -22.8 25.9 -24.3
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.526136
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:38:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:37:37', tmtdew=22.57, humidity=21.86, cloud=0.0, wind=47.73, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:37:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:38:02.891 [DEBUG] [Thread-71329] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:38:02.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:38:02.975 [DEBUG] [Thread-71332] [transport.py] [_log()] starting thread (client mode): 0xf570fd60
2025-12-12T14:38:02.975 [DEBUG] [Thread-71332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:38:02.989 [DEBUG] [Thread-71332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:38:02.989 [INFO] [Thread-71332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] client lang: <none>
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] server lang: <none>
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] kex follows: False
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] Compression: none
2025-12-12T14:38:02.997 [DEBUG] [Thread-71332] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:38:03.052 [DEBUG] [Thread-71332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:38:03.053 [DEBUG] [Thread-71332] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:38:03.053 [DEBUG] [Thread-71332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:38:03.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:38:03.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:38:03.114 [DEBUG] [Thread-71332] [transport.py] [_log()] userauth is OK
2025-12-12T14:38:03.114 [DEBUG] [Thread-71332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:38:03.114 [DEBUG] [Thread-71332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:38:03.114 [DEBUG] [Thread-71332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:38:03.114 [DEBUG] [Thread-71332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:38:03.128 [INFO] [Thread-71332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:38:03.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:38:03.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:38:04.008 [DEBUG] [Thread-71332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:38:04.009 [DEBUG] [Thread-71332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:38:04.056 [DEBUG] [Thread-71332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:38:04.056 [DEBUG] [Thread-71332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:38:04.066 [DEBUG] [Thread-71332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:38:04.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:38:04.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:38:04.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:38:04.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:38:04.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:38:04.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:38:04.101 [DEBUG] [Thread-71332] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:38:10.605 [DEBUG] [Thread-71334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:25.643 [DEBUG] [Thread-71335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:38:34.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:38:34.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
2025-12-12T14:38:34.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 38, 9), 22.66, 21.75, 0.0, 54.73, 21.29, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:38:34.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:38:09
2025-12-12T14:38:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:38:35.081 [DEBUG] [Thread-71336] [transport.py] [_log()] starting thread (client mode): 0xfabc64d0
2025-12-12T14:38:35.081 [DEBUG] [Thread-71336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:38:35.095 [DEBUG] [Thread-71336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:38:35.095 [INFO] [Thread-71336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:38:35.098 [DEBUG] [Thread-71336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] client lang: <none>
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] server lang: <none>
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] kex follows: False
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] Compression: none
2025-12-12T14:38:35.099 [DEBUG] [Thread-71336] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:38:35.107 [DEBUG] [Thread-71336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:38:35.107 [DEBUG] [Thread-71336] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:38:35.108 [DEBUG] [Thread-71336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:38:35.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:38:35.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:38:35.108 [DEBUG] [Thread-71336] [transport.py] [_log()] userauth is OK
2025-12-12T14:38:35.108 [DEBUG] [Thread-71336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:38:35.109 [DEBUG] [Thread-71336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:38:35.109 [DEBUG] [Thread-71336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:38:35.109 [DEBUG] [Thread-71336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:38:35.122 [INFO] [Thread-71336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:38:35.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:38:35.772 [DEBUG] [Thread-71336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:38:35.772 [DEBUG] [Thread-71336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:38:35.772 [DEBUG] [Thread-71336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:38:35.813 [DEBUG] [Thread-71336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:38:35.813 [DEBUG] [Thread-71336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:38:35.816 [DEBUG] [Thread-71336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:38:35.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:38:35.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:38:35.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:38:35.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:38:35.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:38:35.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:38:35.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:38:35.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:38:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:38:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.526483 -999.00  +20.80  47.36     27   +1.30 1 1 2 1 1   888    0 20.26 3.40 ----- 53.4 47.4 311.4 60.4 25.2 -26.6 24.8 -25.2 25.1 -23.4 25.9 -23.1
2025-12-12T14:38:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:38:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:38:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.526483
2025-12-12T14:38:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:38:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:38:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:38:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:38:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:38:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:38:09', tmtdew=22.66, humidity=21.75, cloud=0.0, wind=54.73, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:38:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:38:35.839 [DEBUG] [Thread-71336] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:38:35.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:38:35.937 [DEBUG] [Thread-71339] [transport.py] [_log()] starting thread (client mode): 0xf57012a0
2025-12-12T14:38:35.937 [DEBUG] [Thread-71339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:38:35.952 [DEBUG] [Thread-71339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:38:35.952 [INFO] [Thread-71339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:38:35.959 [DEBUG] [Thread-71339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] client lang: <none>
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] server lang: <none>
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] kex follows: False
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:38:35.960 [DEBUG] [Thread-71339] [transport.py] [_log()] Compression: none
2025-12-12T14:38:35.961 [DEBUG] [Thread-71339] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:38:36.018 [DEBUG] [Thread-71339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:38:36.018 [DEBUG] [Thread-71339] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:38:36.019 [DEBUG] [Thread-71339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:38:36.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:38:36.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:38:36.074 [DEBUG] [Thread-71339] [transport.py] [_log()] userauth is OK
2025-12-12T14:38:36.074 [DEBUG] [Thread-71339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:38:36.074 [DEBUG] [Thread-71339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:38:36.074 [DEBUG] [Thread-71339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:38:36.074 [DEBUG] [Thread-71339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:38:36.093 [INFO] [Thread-71339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:38:36.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:38:36.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:38:36.942 [DEBUG] [Thread-71339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:38:36.942 [DEBUG] [Thread-71339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:38:36.990 [DEBUG] [Thread-71339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:38:36.990 [DEBUG] [Thread-71339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:38:36.999 [DEBUG] [Thread-71339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:38:37.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:38:37.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:38:37.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:38:37.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:38:37.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:38:37.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:38:37.031 [DEBUG] [Thread-71339] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:38:40.673 [DEBUG] [Thread-71341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:48.063 [DEBUG] [Thread-71342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:54.082 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:54.083 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:38:55.708 [DEBUG] [Thread-71343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:39:07.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:39: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
2025-12-12T14:39:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 38, 41), 22.51, 21.93, 0.0, 54.47, 20.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:39:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:38:41
2025-12-12T14:39:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:39:08.008 [DEBUG] [Thread-71344] [transport.py] [_log()] starting thread (client mode): 0xf575c4c0
2025-12-12T14:39:08.009 [DEBUG] [Thread-71344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:39:08.029 [DEBUG] [Thread-71344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:39:08.029 [INFO] [Thread-71344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:39:08.032 [DEBUG] [Thread-71344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:39:08.032 [DEBUG] [Thread-71344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:39:08.032 [DEBUG] [Thread-71344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:39:08.032 [DEBUG] [Thread-71344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] client lang: <none>
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] server lang: <none>
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] kex follows: False
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] Compression: none
2025-12-12T14:39:08.033 [DEBUG] [Thread-71344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:39:08.050 [DEBUG] [Thread-71344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:39:08.050 [DEBUG] [Thread-71344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:39:08.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:39:08.051 [DEBUG] [Thread-71344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:39:08.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:39:08.054 [DEBUG] [Thread-71344] [transport.py] [_log()] userauth is OK
2025-12-12T14:39:08.054 [DEBUG] [Thread-71344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:39:08.054 [DEBUG] [Thread-71344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:39:08.055 [DEBUG] [Thread-71344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:39:08.055 [DEBUG] [Thread-71344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:39:08.080 [INFO] [Thread-71344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:39:08.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:39:08.738 [DEBUG] [Thread-71344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:39:08.739 [DEBUG] [Thread-71344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:39:08.739 [DEBUG] [Thread-71344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:39:08.780 [DEBUG] [Thread-71344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:39:08.780 [DEBUG] [Thread-71344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:39:08.783 [DEBUG] [Thread-71344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:39:08.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:39:08.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:39:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:39:08.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:39:08.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:39:08.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:39:08.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:39:08.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:39:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:39:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.526830 -999.00  +21.00  57.92     27   +1.60 1 1 2 1 1   888    0 20.18 -3.66 ----- 48.2 57.9 307.6 65.2 25.2 -26.2 24.8 -25.0 25.2 -26.1 25.8 -23.2
2025-12-12T14:39:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:39:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:39:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.526830
2025-12-12T14:39:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:39:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:39:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:39:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:39:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:39:08.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:38:41', tmtdew=22.51, humidity=21.93, cloud=0.0, wind=54.47, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:38:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:39:08.811 [DEBUG] [Thread-71344] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:39:08.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:39:08.906 [DEBUG] [Thread-71347] [transport.py] [_log()] starting thread (client mode): 0xfabc5a50
2025-12-12T14:39:08.906 [DEBUG] [Thread-71347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:39:08.921 [DEBUG] [Thread-71347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:39:08.921 [INFO] [Thread-71347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] client lang: <none>
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] server lang: <none>
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] kex follows: False
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:39:08.929 [DEBUG] [Thread-71347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:39:08.930 [DEBUG] [Thread-71347] [transport.py] [_log()] Compression: none
2025-12-12T14:39:08.930 [DEBUG] [Thread-71347] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:39:08.985 [DEBUG] [Thread-71347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:39:08.986 [DEBUG] [Thread-71347] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:39:08.986 [DEBUG] [Thread-71347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:39:08.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:39:08.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:39:09.042 [DEBUG] [Thread-71347] [transport.py] [_log()] userauth is OK
2025-12-12T14:39:09.042 [DEBUG] [Thread-71347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:39:09.042 [DEBUG] [Thread-71347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:39:09.042 [DEBUG] [Thread-71347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:39:09.043 [DEBUG] [Thread-71347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:39:09.061 [INFO] [Thread-71347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:39:09.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:39:09.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:39:09.895 [DEBUG] [Thread-71347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:39:09.896 [DEBUG] [Thread-71347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:39:09.944 [DEBUG] [Thread-71347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:39:09.944 [DEBUG] [Thread-71347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:39:09.953 [DEBUG] [Thread-71347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:39:09.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:39:09.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:39:09.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:39:09.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:39:09.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:39:09.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:39:09.988 [DEBUG] [Thread-71347] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:39:10.738 [DEBUG] [Thread-71349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:25.784 [DEBUG] [Thread-71350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:40.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:39:40.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:39:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:39:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 39, 13), 22.44, 22.03, 0.0, 53.78, 20.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:39:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:39:13
2025-12-12T14:39:40.814 [DEBUG] [Thread-71351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:39:40.967 [DEBUG] [Thread-71352] [transport.py] [_log()] starting thread (client mode): 0xfabc6140
2025-12-12T14:39:40.967 [DEBUG] [Thread-71352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:39:40.987 [DEBUG] [Thread-71352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:39:40.987 [INFO] [Thread-71352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:39:40.990 [DEBUG] [Thread-71352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] client lang: <none>
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] server lang: <none>
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] kex follows: False
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] Compression: none
2025-12-12T14:39:40.991 [DEBUG] [Thread-71352] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:39:41.009 [DEBUG] [Thread-71352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:39:41.010 [DEBUG] [Thread-71352] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:39:41.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:39:41.011 [DEBUG] [Thread-71352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:39:41.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:39:41.013 [DEBUG] [Thread-71352] [transport.py] [_log()] userauth is OK
2025-12-12T14:39:41.013 [DEBUG] [Thread-71352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:39:41.013 [DEBUG] [Thread-71352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:39:41.014 [DEBUG] [Thread-71352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:39:41.014 [DEBUG] [Thread-71352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:39:41.038 [INFO] [Thread-71352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:39:41.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:39:41.785 [DEBUG] [Thread-71352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:39:41.785 [DEBUG] [Thread-71352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:39:41.785 [DEBUG] [Thread-71352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:39:41.826 [DEBUG] [Thread-71352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:39:41.826 [DEBUG] [Thread-71352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:39:41.830 [DEBUG] [Thread-71352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:39:41.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:39:41.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:39:41.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:39:41.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:39:41.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:39:41.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:39:41.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:39:41.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:39:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:39:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.527178 -999.00  +21.10  43.78     27   +1.70 1 1 2 1 1   888    0 19.34 -9.88 ----- 47.5 43.8 322.2 55.0 25.1 -26.4 24.6 -24.9 25.1 -22.3 25.8 -23.8
2025-12-12T14:39:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:39:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:39:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.527178
2025-12-12T14:39:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:39:41.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:39:41.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:39:41.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:39:41.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:39:41.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:39:13', tmtdew=22.44, humidity=22.03, cloud=0.0, wind=53.78, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:39:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:39:41.856 [DEBUG] [Thread-71352] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:39:41.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:39:41.954 [DEBUG] [Thread-71355] [transport.py] [_log()] starting thread (client mode): 0xf575f280
2025-12-12T14:39:41.954 [DEBUG] [Thread-71355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:39:41.973 [DEBUG] [Thread-71355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:39:41.974 [INFO] [Thread-71355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:39:41.982 [DEBUG] [Thread-71355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:39:41.982 [DEBUG] [Thread-71355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:39:41.982 [DEBUG] [Thread-71355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:39:41.982 [DEBUG] [Thread-71355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:41.982 [DEBUG] [Thread-71355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] client lang: <none>
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] server lang: <none>
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] kex follows: False
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] Compression: none
2025-12-12T14:39:41.983 [DEBUG] [Thread-71355] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:39:42.042 [DEBUG] [Thread-71355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:39:42.042 [DEBUG] [Thread-71355] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:39:42.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:39:42.043 [DEBUG] [Thread-71355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:39:42.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:39:42.106 [DEBUG] [Thread-71355] [transport.py] [_log()] userauth is OK
2025-12-12T14:39:42.106 [DEBUG] [Thread-71355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:39:42.106 [DEBUG] [Thread-71355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:39:42.107 [DEBUG] [Thread-71355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:39:42.107 [DEBUG] [Thread-71355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:39:42.127 [INFO] [Thread-71355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:39:42.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:39:42.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:39:42.962 [DEBUG] [Thread-71355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:39:42.962 [DEBUG] [Thread-71355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:39:43.013 [DEBUG] [Thread-71355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:39:43.013 [DEBUG] [Thread-71355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:39:43.025 [DEBUG] [Thread-71355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:39:43.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:39: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')
2025-12-12T14:39:43.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:39:43.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:39:43.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:39:43.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:39:43.065 [DEBUG] [Thread-71355] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:39:48.112 [DEBUG] [Thread-71357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:54.224 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:54.225 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:39:55.837 [DEBUG] [Thread-71358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:10.870 [DEBUG] [Thread-71359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:13.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:40:13.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:40:13.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:40:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 39, 45), 22.05, 22.56, 0.0, 48.77, 20.78, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:40:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:39:45
2025-12-12T14:40:13.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:40:14.063 [DEBUG] [Thread-71360] [transport.py] [_log()] starting thread (client mode): 0xf5700dc0
2025-12-12T14:40:14.063 [DEBUG] [Thread-71360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:40:14.086 [DEBUG] [Thread-71360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:40:14.086 [INFO] [Thread-71360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:40:14.090 [DEBUG] [Thread-71360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:40:14.090 [DEBUG] [Thread-71360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:40:14.090 [DEBUG] [Thread-71360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] client lang: <none>
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] server lang: <none>
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] kex follows: False
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:40:14.091 [DEBUG] [Thread-71360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:40:14.092 [DEBUG] [Thread-71360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:40:14.092 [DEBUG] [Thread-71360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:40:14.092 [DEBUG] [Thread-71360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:40:14.092 [DEBUG] [Thread-71360] [transport.py] [_log()] Compression: none
2025-12-12T14:40:14.092 [DEBUG] [Thread-71360] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:40:14.112 [DEBUG] [Thread-71360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:40:14.112 [DEBUG] [Thread-71360] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:40:14.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:40:14.113 [DEBUG] [Thread-71360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:40:14.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:40:14.115 [DEBUG] [Thread-71360] [transport.py] [_log()] userauth is OK
2025-12-12T14:40:14.115 [DEBUG] [Thread-71360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:40:14.115 [DEBUG] [Thread-71360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:40:14.115 [DEBUG] [Thread-71360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:40:14.115 [DEBUG] [Thread-71360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:40:14.135 [INFO] [Thread-71360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:40:14.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:40:14.938 [DEBUG] [Thread-71360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:40:14.938 [DEBUG] [Thread-71360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:40:14.939 [DEBUG] [Thread-71360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:40:14.979 [DEBUG] [Thread-71360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:40:14.979 [DEBUG] [Thread-71360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:40:14.982 [DEBUG] [Thread-71360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:40:14.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:40:14.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:40:14.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:40:14.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:40:15.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:40:15.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:40:15.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:40:15.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:40:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:40:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.527525 -999.00  +21.20  48.28     27   +1.80 1 1 2 1 1   888    0 20.00 -13.28 ----- 45.6 48.3 331.2 56.7 25.1 -24.7 24.8 -24.4 25.3 -21.8 25.8 -23.2
2025-12-12T14:40:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:40:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:40:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.527525
2025-12-12T14:40:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:40:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:40:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:40:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:40:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:40:15.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:39:45', tmtdew=22.05, humidity=22.56, cloud=0.0, wind=48.77, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:39:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:40:15.005 [DEBUG] [Thread-71360] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:40:15.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:40:15.104 [DEBUG] [Thread-71363] [transport.py] [_log()] starting thread (client mode): 0xf5701420
2025-12-12T14:40:15.104 [DEBUG] [Thread-71363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:40:15.119 [DEBUG] [Thread-71363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:40:15.120 [INFO] [Thread-71363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:40:15.127 [DEBUG] [Thread-71363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:40:15.127 [DEBUG] [Thread-71363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:40:15.127 [DEBUG] [Thread-71363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:40:15.127 [DEBUG] [Thread-71363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:15.127 [DEBUG] [Thread-71363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:15.127 [DEBUG] [Thread-71363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] client lang: <none>
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] server lang: <none>
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] kex follows: False
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] Compression: none
2025-12-12T14:40:15.128 [DEBUG] [Thread-71363] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:40:15.186 [DEBUG] [Thread-71363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:40:15.186 [DEBUG] [Thread-71363] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:40:15.187 [DEBUG] [Thread-71363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:40:15.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:40:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:40:15.242 [DEBUG] [Thread-71363] [transport.py] [_log()] userauth is OK
2025-12-12T14:40:15.242 [DEBUG] [Thread-71363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:40:15.242 [DEBUG] [Thread-71363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:40:15.243 [DEBUG] [Thread-71363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:40:15.243 [DEBUG] [Thread-71363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:40:15.261 [INFO] [Thread-71363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:40:15.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:40:15.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:40:16.152 [DEBUG] [Thread-71363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:40:16.152 [DEBUG] [Thread-71363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:40:16.200 [DEBUG] [Thread-71363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:40:16.200 [DEBUG] [Thread-71363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:40:16.209 [DEBUG] [Thread-71363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:40:16.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:40:16.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:40:16.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:40:16.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:40:16.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:40:16.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:40:16.244 [DEBUG] [Thread-71363] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:40:25.899 [DEBUG] [Thread-71365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:40.950 [DEBUG] [Thread-71366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:40:46.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:40:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:40:46.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 40, 17), 21.92, 22.74, 0.0, 45.24, 20.68, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:40:46.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:40:17
2025-12-12T14:40:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:40:47.213 [DEBUG] [Thread-71367] [transport.py] [_log()] starting thread (client mode): 0xf813d1e0
2025-12-12T14:40:47.213 [DEBUG] [Thread-71367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:40:47.230 [DEBUG] [Thread-71367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:40:47.230 [INFO] [Thread-71367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:47.233 [DEBUG] [Thread-71367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] client lang: <none>
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] server lang: <none>
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] kex follows: False
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] Compression: none
2025-12-12T14:40:47.234 [DEBUG] [Thread-71367] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:40:47.252 [DEBUG] [Thread-71367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:40:47.253 [DEBUG] [Thread-71367] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:40:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:40:47.254 [DEBUG] [Thread-71367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:40:47.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:40:47.256 [DEBUG] [Thread-71367] [transport.py] [_log()] userauth is OK
2025-12-12T14:40:47.256 [DEBUG] [Thread-71367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:40:47.256 [DEBUG] [Thread-71367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:40:47.256 [DEBUG] [Thread-71367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:40:47.256 [DEBUG] [Thread-71367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:40:47.280 [INFO] [Thread-71367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:40:47.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:40:48.040 [DEBUG] [Thread-71367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:40:48.040 [DEBUG] [Thread-71367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:40:48.040 [DEBUG] [Thread-71367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:40:48.081 [DEBUG] [Thread-71367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:40:48.081 [DEBUG] [Thread-71367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:40:48.083 [DEBUG] [Thread-71367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:40:48.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:40:48.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:40:48.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:40:48.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:40:48.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:40:48.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:40:48.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:40:48.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:40:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:40:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.527872 -999.00  +20.70  39.19     28   +1.90 1 1 2 1 1   888    0 19.34 -15.93 ----- 42.5 39.2 328.0 77.8 25.1 -25.6 24.6 -27.0 25.2 -23.0 25.8 -24.0
2025-12-12T14:40:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:40:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:40:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.527872
2025-12-12T14:40:48.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:40:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:40:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:40:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:40:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:40:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:40:17', tmtdew=21.92, humidity=22.74, cloud=0.0, wind=45.24, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:40:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:40:48.107 [DEBUG] [Thread-71367] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:40:48.156 [DEBUG] [Thread-71370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:48.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:40:48.204 [DEBUG] [Thread-71371] [transport.py] [_log()] starting thread (client mode): 0xf570cb50
2025-12-12T14:40:48.205 [DEBUG] [Thread-71371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:40:48.219 [DEBUG] [Thread-71371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:40:48.219 [INFO] [Thread-71371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:40:48.226 [DEBUG] [Thread-71371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:40:48.226 [DEBUG] [Thread-71371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:40:48.226 [DEBUG] [Thread-71371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:40:48.226 [DEBUG] [Thread-71371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] client lang: <none>
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] server lang: <none>
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] kex follows: False
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] Compression: none
2025-12-12T14:40:48.227 [DEBUG] [Thread-71371] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:40:48.287 [DEBUG] [Thread-71371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:40:48.288 [DEBUG] [Thread-71371] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:40:48.288 [DEBUG] [Thread-71371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:40:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:40:48.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:40:48.346 [DEBUG] [Thread-71371] [transport.py] [_log()] userauth is OK
2025-12-12T14:40:48.347 [DEBUG] [Thread-71371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:40:48.347 [DEBUG] [Thread-71371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:40:48.347 [DEBUG] [Thread-71371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:40:48.347 [DEBUG] [Thread-71371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:40:48.365 [INFO] [Thread-71371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:40:48.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:40:48.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:40:49.230 [DEBUG] [Thread-71371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:40:49.231 [DEBUG] [Thread-71371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:40:49.279 [DEBUG] [Thread-71371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:40:49.279 [DEBUG] [Thread-71371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:40:49.288 [DEBUG] [Thread-71371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:40:49.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:40:49.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:40:49.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:40:49.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:40:49.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:40:49.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:40:49.323 [DEBUG] [Thread-71371] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:40:54.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:54.366 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:40:55.986 [DEBUG] [Thread-71373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:11.029 [DEBUG] [Thread-71374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:41:19.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:41:19.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:41:20.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 40, 50), 21.45, 23.47, 0.0, 52.6, 20.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:41:20.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:40:50
2025-12-12T14:41:20.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:41:20.311 [DEBUG] [Thread-71375] [transport.py] [_log()] starting thread (client mode): 0xf813d1e0
2025-12-12T14:41:20.311 [DEBUG] [Thread-71375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:41:20.330 [DEBUG] [Thread-71375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:41:20.330 [INFO] [Thread-71375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:20.340 [DEBUG] [Thread-71375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] client lang: <none>
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] server lang: <none>
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] kex follows: False
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:41:20.341 [DEBUG] [Thread-71375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:41:20.342 [DEBUG] [Thread-71375] [transport.py] [_log()] Compression: none
2025-12-12T14:41:20.342 [DEBUG] [Thread-71375] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:41:20.360 [DEBUG] [Thread-71375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:41:20.361 [DEBUG] [Thread-71375] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:41:20.361 [DEBUG] [Thread-71375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:41:20.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:41:20.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:41:20.364 [DEBUG] [Thread-71375] [transport.py] [_log()] userauth is OK
2025-12-12T14:41:20.364 [DEBUG] [Thread-71375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:41:20.364 [DEBUG] [Thread-71375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:41:20.364 [DEBUG] [Thread-71375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:41:20.364 [DEBUG] [Thread-71375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:41:20.387 [INFO] [Thread-71375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:41:20.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:41:21.038 [DEBUG] [Thread-71375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:41:21.039 [DEBUG] [Thread-71375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:41:21.039 [DEBUG] [Thread-71375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:41:21.080 [DEBUG] [Thread-71375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:41:21.080 [DEBUG] [Thread-71375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:41:21.083 [DEBUG] [Thread-71375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:41:21.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:41:21.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:41:21.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:41:21.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:41:21.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:41:21.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:41:21.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:41:21.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:41:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:41:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.528219 -999.00  +20.50  50.85     29   +1.90 1 1 2 1 1   888    0 19.14 -21.58 ----- 37.7 50.9 320.4 57.7 25.2 -25.8 24.6 -26.4 25.3 -22.5 25.8 -23.0
2025-12-12T14:41:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:41:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:41:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.528219
2025-12-12T14:41:21.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:41:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:41:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:41:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:41:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:41:21.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:40:50', tmtdew=21.45, humidity=23.47, cloud=0.0, wind=52.6, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:40:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:41:21.110 [DEBUG] [Thread-71375] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:41:21.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:41:21.209 [DEBUG] [Thread-71378] [transport.py] [_log()] starting thread (client mode): 0xf575d150
2025-12-12T14:41:21.210 [DEBUG] [Thread-71378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:41:21.224 [DEBUG] [Thread-71378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:41:21.224 [INFO] [Thread-71378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:21.232 [DEBUG] [Thread-71378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] client lang: <none>
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] server lang: <none>
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] kex follows: False
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:41:21.233 [DEBUG] [Thread-71378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:41:21.234 [DEBUG] [Thread-71378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:41:21.234 [DEBUG] [Thread-71378] [transport.py] [_log()] Compression: none
2025-12-12T14:41:21.234 [DEBUG] [Thread-71378] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:41:21.290 [DEBUG] [Thread-71378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:41:21.291 [DEBUG] [Thread-71378] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:41:21.292 [DEBUG] [Thread-71378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:41:21.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:41:21.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:41:21.346 [DEBUG] [Thread-71378] [transport.py] [_log()] userauth is OK
2025-12-12T14:41:21.346 [DEBUG] [Thread-71378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:41:21.346 [DEBUG] [Thread-71378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:41:21.346 [DEBUG] [Thread-71378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:41:21.347 [DEBUG] [Thread-71378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:41:21.368 [INFO] [Thread-71378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:41:21.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:41:21.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:41:22.191 [DEBUG] [Thread-71378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:41:22.192 [DEBUG] [Thread-71378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:41:22.240 [DEBUG] [Thread-71378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:41:22.240 [DEBUG] [Thread-71378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:41:22.250 [DEBUG] [Thread-71378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:41:22.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:41:22.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:41:22.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:41:22.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:41:22.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:41:22.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:41:22.286 [DEBUG] [Thread-71378] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:41:26.059 [DEBUG] [Thread-71380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:41.108 [DEBUG] [Thread-71381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:48.206 [DEBUG] [Thread-71382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:41:52.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:41:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:41:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 41, 22), 21.3, 23.72, 0.0, 57.71, 20.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:41:53.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:41:22
2025-12-12T14:41:53.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:41:53.311 [DEBUG] [Thread-71383] [transport.py] [_log()] starting thread (client mode): 0xf81c0910
2025-12-12T14:41:53.311 [DEBUG] [Thread-71383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:41:53.338 [DEBUG] [Thread-71383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:41:53.338 [INFO] [Thread-71383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] client lang: <none>
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] server lang: <none>
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] kex follows: False
2025-12-12T14:41:53.342 [DEBUG] [Thread-71383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:41:53.343 [DEBUG] [Thread-71383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:41:53.343 [DEBUG] [Thread-71383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:41:53.343 [DEBUG] [Thread-71383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:41:53.343 [DEBUG] [Thread-71383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:41:53.343 [DEBUG] [Thread-71383] [transport.py] [_log()] Compression: none
2025-12-12T14:41:53.343 [DEBUG] [Thread-71383] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:41:53.358 [DEBUG] [Thread-71383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:41:53.358 [DEBUG] [Thread-71383] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:41:53.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:41:53.358 [DEBUG] [Thread-71383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:41:53.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:41:53.360 [DEBUG] [Thread-71383] [transport.py] [_log()] userauth is OK
2025-12-12T14:41:53.360 [DEBUG] [Thread-71383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:41:53.360 [DEBUG] [Thread-71383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:41:53.360 [DEBUG] [Thread-71383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:41:53.360 [DEBUG] [Thread-71383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:41:53.375 [INFO] [Thread-71383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:41:53.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:41:54.038 [DEBUG] [Thread-71383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:41:54.038 [DEBUG] [Thread-71383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:41:54.038 [DEBUG] [Thread-71383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:41:54.078 [DEBUG] [Thread-71383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:41:54.078 [DEBUG] [Thread-71383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:41:54.081 [DEBUG] [Thread-71383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:41:54.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:41:54.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:41:54.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:41:54.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:41:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:41:54.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:41:54.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:41:54.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:41:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:41:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.528567 -999.00  +20.90  42.64     28   +2.00 1 1 2 1 1   888    0 19.20 -26.78 ----- 36.7 42.6 317.6 55.1 25.2 -25.0 24.7 -25.9 25.1 -26.9 25.8 -22.6
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.528567
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:41:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:41:22', tmtdew=21.3, humidity=23.72, cloud=0.0, wind=57.71, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:41:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:41:54.099 [DEBUG] [Thread-71383] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:41:54.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:41:54.188 [DEBUG] [Thread-71386] [transport.py] [_log()] starting thread (client mode): 0xfabc7a30
2025-12-12T14:41:54.188 [DEBUG] [Thread-71386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:41:54.202 [DEBUG] [Thread-71386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:41:54.202 [INFO] [Thread-71386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] client lang: <none>
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] server lang: <none>
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] kex follows: False
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] Compression: none
2025-12-12T14:41:54.210 [DEBUG] [Thread-71386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:41:54.265 [DEBUG] [Thread-71386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:41:54.265 [DEBUG] [Thread-71386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:41:54.265 [DEBUG] [Thread-71386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:41:54.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:41:54.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:41:54.322 [DEBUG] [Thread-71386] [transport.py] [_log()] userauth is OK
2025-12-12T14:41:54.322 [DEBUG] [Thread-71386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:41:54.322 [DEBUG] [Thread-71386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:41:54.322 [DEBUG] [Thread-71386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:41:54.322 [DEBUG] [Thread-71386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:41:54.336 [INFO] [Thread-71386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:41:54.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:41:54.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:41:54.526 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:54.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:41:55.145 [DEBUG] [Thread-71386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:41:55.145 [DEBUG] [Thread-71386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:41:55.193 [DEBUG] [Thread-71386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:41:55.193 [DEBUG] [Thread-71386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:41:55.201 [DEBUG] [Thread-71386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:41:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:41:55.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')
2025-12-12T14:41:55.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:41:55.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:41:55.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:41:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:41:55.232 [DEBUG] [Thread-71386] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:41:56.132 [DEBUG] [Thread-71388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:11.176 [DEBUG] [Thread-71389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:25.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:42:25.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:42:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:42:25.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 41, 54), 21.33, 23.86, 0.0, 52.35, 20.43, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:42:25.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:41:54
2025-12-12T14:42:26.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:42:26.203 [DEBUG] [Thread-71390] [transport.py] [_log()] starting thread (client mode): 0xf570fa00
2025-12-12T14:42:26.203 [DEBUG] [Thread-71390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:42:26.203 [DEBUG] [Thread-71391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:26.224 [DEBUG] [Thread-71390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:42:26.224 [INFO] [Thread-71390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:42:26.227 [DEBUG] [Thread-71390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:42:26.227 [DEBUG] [Thread-71390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:42:26.227 [DEBUG] [Thread-71390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:42:26.227 [DEBUG] [Thread-71390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] client lang: <none>
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] server lang: <none>
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] kex follows: False
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] Compression: none
2025-12-12T14:42:26.228 [DEBUG] [Thread-71390] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:42:26.245 [DEBUG] [Thread-71390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:42:26.246 [DEBUG] [Thread-71390] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:42:26.246 [DEBUG] [Thread-71390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:42:26.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:42:26.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:42:26.288 [DEBUG] [Thread-71390] [transport.py] [_log()] userauth is OK
2025-12-12T14:42:26.289 [DEBUG] [Thread-71390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:42:26.289 [DEBUG] [Thread-71390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:42:26.289 [DEBUG] [Thread-71390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:42:26.289 [DEBUG] [Thread-71390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:42:26.321 [INFO] [Thread-71390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:42:26.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:42:26.958 [DEBUG] [Thread-71390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:42:26.958 [DEBUG] [Thread-71390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:42:26.958 [DEBUG] [Thread-71390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:42:27.000 [DEBUG] [Thread-71390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:42:27.000 [DEBUG] [Thread-71390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:42:27.002 [DEBUG] [Thread-71390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:42:27.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:42:27.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:42:27.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:42:27.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:42:27.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:42:27.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:42:27.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:42:27.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:42:27.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.528914 -999.00  +21.20  48.56     27   +1.80 1 1 2 1 1   888    0 18.98 -30.71 ----- 50.2 48.6 322.4 57.5 25.2 -24.5 24.8 -25.3 25.4 -22.9 25.8 -22.9
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.528914
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:42:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:41:54', tmtdew=21.33, humidity=23.86, cloud=0.0, wind=52.35, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:41:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:42:27.025 [DEBUG] [Thread-71390] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:42:27.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:42:27.114 [DEBUG] [Thread-71394] [transport.py] [_log()] starting thread (client mode): 0xf5700f10
2025-12-12T14:42:27.114 [DEBUG] [Thread-71394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:42:27.129 [DEBUG] [Thread-71394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:42:27.129 [INFO] [Thread-71394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:42:27.136 [DEBUG] [Thread-71394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] client lang: <none>
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] server lang: <none>
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] kex follows: False
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] Compression: none
2025-12-12T14:42:27.137 [DEBUG] [Thread-71394] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:42:27.193 [DEBUG] [Thread-71394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:42:27.193 [DEBUG] [Thread-71394] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:42:27.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:42:27.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:42:27.193 [DEBUG] [Thread-71394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:42:27.250 [DEBUG] [Thread-71394] [transport.py] [_log()] userauth is OK
2025-12-12T14:42:27.250 [DEBUG] [Thread-71394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:42:27.250 [DEBUG] [Thread-71394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:42:27.250 [DEBUG] [Thread-71394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:42:27.250 [DEBUG] [Thread-71394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:42:27.264 [INFO] [Thread-71394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:42:27.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:42:27.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:42:28.114 [DEBUG] [Thread-71394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:42:28.114 [DEBUG] [Thread-71394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:42:28.162 [DEBUG] [Thread-71394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:42:28.162 [DEBUG] [Thread-71394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:42:28.171 [DEBUG] [Thread-71394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:42:28.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:42:28.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:42:28.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:42:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:42:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:42:28.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:42:28.207 [DEBUG] [Thread-71394] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:42:41.229 [DEBUG] [Thread-71396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:48.266 [DEBUG] [Thread-71397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:54.666 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:54.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:56.274 [DEBUG] [Thread-71398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:42:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:42:58.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:42:58.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:42:58.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 42, 26), 21.1, 24.22, 0.0, 48.38, 20.33, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:42:58.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:42:26
2025-12-12T14:42:59.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:42:59.229 [DEBUG] [Thread-71399] [transport.py] [_log()] starting thread (client mode): 0xf81c1090
2025-12-12T14:42:59.229 [DEBUG] [Thread-71399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:42:59.256 [DEBUG] [Thread-71399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:42:59.256 [INFO] [Thread-71399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] client lang: <none>
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] server lang: <none>
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] kex follows: False
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] Compression: none
2025-12-12T14:42:59.257 [DEBUG] [Thread-71399] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:42:59.272 [DEBUG] [Thread-71399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:42:59.272 [DEBUG] [Thread-71399] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:42:59.272 [DEBUG] [Thread-71399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:42:59.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:42:59.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:42:59.273 [DEBUG] [Thread-71399] [transport.py] [_log()] userauth is OK
2025-12-12T14:42:59.273 [DEBUG] [Thread-71399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:42:59.273 [DEBUG] [Thread-71399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:42:59.273 [DEBUG] [Thread-71399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:42:59.273 [DEBUG] [Thread-71399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:42:59.296 [INFO] [Thread-71399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:42:59.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:42:59.955 [DEBUG] [Thread-71399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:42:59.955 [DEBUG] [Thread-71399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:42:59.955 [DEBUG] [Thread-71399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:42:59.996 [DEBUG] [Thread-71399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:42:59.996 [DEBUG] [Thread-71399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:42:59.998 [DEBUG] [Thread-71399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:43:00.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:43:00.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:43:00.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:43:00.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:43:00.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:43:00.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:43:00.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:43:00.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:43:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:43:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.529608 -999.00  +21.10  34.36     28   +2.20 1 1 2 1 1   888    0 18.76 -41.31 ----- 45.7 34.4 330.0 56.7 25.2 -25.7 24.8 -26.0 25.4 -22.8 25.8 -23.2
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.529608
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:43:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:42:26', tmtdew=21.1, humidity=24.22, cloud=0.0, wind=48.38, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:42:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:43:00.017 [DEBUG] [Thread-71399] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:43:00.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:43:00.103 [DEBUG] [Thread-71402] [transport.py] [_log()] starting thread (client mode): 0xf81c0be0
2025-12-12T14:43:00.103 [DEBUG] [Thread-71402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:43:00.117 [DEBUG] [Thread-71402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:43:00.117 [INFO] [Thread-71402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] client lang: <none>
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] server lang: <none>
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] kex follows: False
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] Compression: none
2025-12-12T14:43:00.125 [DEBUG] [Thread-71402] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:43:00.185 [DEBUG] [Thread-71402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:43:00.186 [DEBUG] [Thread-71402] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:43:00.186 [DEBUG] [Thread-71402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:43:00.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:43:00.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:43:00.242 [DEBUG] [Thread-71402] [transport.py] [_log()] userauth is OK
2025-12-12T14:43:00.242 [DEBUG] [Thread-71402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:43:00.242 [DEBUG] [Thread-71402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:43:00.242 [DEBUG] [Thread-71402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:43:00.242 [DEBUG] [Thread-71402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:43:00.258 [INFO] [Thread-71402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:43:00.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:43:00.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:43:01.112 [DEBUG] [Thread-71402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:43:01.112 [DEBUG] [Thread-71402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:43:01.160 [DEBUG] [Thread-71402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:43:01.160 [DEBUG] [Thread-71402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:43:01.169 [DEBUG] [Thread-71402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:43:01.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:43: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')
2025-12-12T14:43:01.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
2025-12-12T14:43:01.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:43:01.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:43:01.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:43:01.204 [DEBUG] [Thread-71402] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:43:11.306 [DEBUG] [Thread-71404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:43:26.340 [DEBUG] [Thread-71405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:43:31.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:43:31.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:43:31.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:43:31.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 42, 58), 21.27, 23.79, 0.0, 45.24, 20.41, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:43:31.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:42:58
2025-12-12T14:43:32.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:43:32.241 [DEBUG] [Thread-71406] [transport.py] [_log()] starting thread (client mode): 0xf574e290
2025-12-12T14:43:32.241 [DEBUG] [Thread-71406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:43:32.261 [DEBUG] [Thread-71406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:43:32.261 [INFO] [Thread-71406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] client lang: <none>
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] server lang: <none>
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] kex follows: False
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] Compression: none
2025-12-12T14:43:32.264 [DEBUG] [Thread-71406] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:43:32.282 [DEBUG] [Thread-71406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:43:32.282 [DEBUG] [Thread-71406] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:43:32.282 [DEBUG] [Thread-71406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:43:32.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:43:32.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:43:32.283 [DEBUG] [Thread-71406] [transport.py] [_log()] userauth is OK
2025-12-12T14:43:32.283 [DEBUG] [Thread-71406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:43:32.283 [DEBUG] [Thread-71406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:43:32.283 [DEBUG] [Thread-71406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:43:32.283 [DEBUG] [Thread-71406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:43:32.293 [INFO] [Thread-71406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:43:32.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:43:32.887 [DEBUG] [Thread-71406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:43:32.887 [DEBUG] [Thread-71406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:43:32.888 [DEBUG] [Thread-71406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:43:32.928 [DEBUG] [Thread-71406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:43:32.928 [DEBUG] [Thread-71406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:43:32.931 [DEBUG] [Thread-71406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:43:32.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:43:32.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:43:32.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:43:32.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:43:32.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:43:32.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:43:32.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:43:32.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.529955 -999.00  +20.90  46.50     29   +2.20 1 1 2 1 1   888    0 18.06 -50.44 ----- 45.2 46.5 332.2 53.1 25.3 -25.2 24.8 -25.7 25.5 -22.8 26.0 -23.0
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.529955
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:43:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:43:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:43:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:42:58', tmtdew=21.27, humidity=23.79, cloud=0.0, wind=45.24, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:43:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:43:32.954 [DEBUG] [Thread-71406] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:43:33.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:43:33.055 [DEBUG] [Thread-71409] [transport.py] [_log()] starting thread (client mode): 0xf574fbb0
2025-12-12T14:43:33.055 [DEBUG] [Thread-71409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:43:33.069 [DEBUG] [Thread-71409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:43:33.070 [INFO] [Thread-71409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:43:33.077 [DEBUG] [Thread-71409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:43:33.077 [DEBUG] [Thread-71409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:43:33.077 [DEBUG] [Thread-71409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:43:33.077 [DEBUG] [Thread-71409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] client lang: <none>
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] server lang: <none>
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] kex follows: False
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:43:33.078 [DEBUG] [Thread-71409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:43:33.079 [DEBUG] [Thread-71409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:43:33.079 [DEBUG] [Thread-71409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:43:33.079 [DEBUG] [Thread-71409] [transport.py] [_log()] Compression: none
2025-12-12T14:43:33.079 [DEBUG] [Thread-71409] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:43:33.134 [DEBUG] [Thread-71409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:43:33.135 [DEBUG] [Thread-71409] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:43:33.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:43:33.136 [DEBUG] [Thread-71409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:43:33.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:43:33.190 [DEBUG] [Thread-71409] [transport.py] [_log()] userauth is OK
2025-12-12T14:43:33.191 [DEBUG] [Thread-71409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:43:33.191 [DEBUG] [Thread-71409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:43:33.191 [DEBUG] [Thread-71409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:43:33.191 [DEBUG] [Thread-71409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:43:33.213 [INFO] [Thread-71409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:43:33.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:43:33.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:43:34.064 [DEBUG] [Thread-71409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:43:34.065 [DEBUG] [Thread-71409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:43:34.114 [DEBUG] [Thread-71409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:43:34.114 [DEBUG] [Thread-71409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:43:34.124 [DEBUG] [Thread-71409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:43:34.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:43:34.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:43:34.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:43:34.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:43:34.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:43:34.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:43:34.159 [DEBUG] [Thread-71409] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:43:41.373 [DEBUG] [Thread-71411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:43:48.311 [DEBUG] [Thread-71412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:43:54.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:43:54.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:43:56.417 [DEBUG] [Thread-71413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:04.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:44:04.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:44:04.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:44:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 43, 30), 20.97, 24.27, 0.0, 43.81, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:44:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:43:30
2025-12-12T14:44:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:44:05.178 [DEBUG] [Thread-71414] [transport.py] [_log()] starting thread (client mode): 0xf5702ef0
2025-12-12T14:44:05.178 [DEBUG] [Thread-71414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:44:05.199 [DEBUG] [Thread-71414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:44:05.199 [INFO] [Thread-71414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] client lang: <none>
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] server lang: <none>
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] kex follows: False
2025-12-12T14:44:05.203 [DEBUG] [Thread-71414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:44:05.204 [DEBUG] [Thread-71414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:44:05.204 [DEBUG] [Thread-71414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:44:05.204 [DEBUG] [Thread-71414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:44:05.204 [DEBUG] [Thread-71414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:44:05.204 [DEBUG] [Thread-71414] [transport.py] [_log()] Compression: none
2025-12-12T14:44:05.204 [DEBUG] [Thread-71414] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:44:05.221 [DEBUG] [Thread-71414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:44:05.221 [DEBUG] [Thread-71414] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:44:05.222 [DEBUG] [Thread-71414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:44:05.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:44:05.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:44:05.223 [DEBUG] [Thread-71414] [transport.py] [_log()] userauth is OK
2025-12-12T14:44:05.224 [DEBUG] [Thread-71414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:44:05.224 [DEBUG] [Thread-71414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:44:05.224 [DEBUG] [Thread-71414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:44:05.224 [DEBUG] [Thread-71414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:44:05.240 [INFO] [Thread-71414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:44:05.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:44:05.972 [DEBUG] [Thread-71414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:44:05.972 [DEBUG] [Thread-71414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:44:05.973 [DEBUG] [Thread-71414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:44:06.013 [DEBUG] [Thread-71414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:44:06.013 [DEBUG] [Thread-71414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:44:06.015 [DEBUG] [Thread-71414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:44:06.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:44:06.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:44:06.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:44:06.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:44:06.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:44:06.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:44:06.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:44:06.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:44:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:44:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.530302 -999.00  +21.20  41.46     29   +2.40 1 1 2 1 1   888    0 18.26 -55.81 ----- 49.9 41.5 318.4 55.5 25.3 -25.2 24.8 -25.7 25.4 -22.3 25.9 -23.0
2025-12-12T14:44:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:44:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:44:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.530302
2025-12-12T14:44:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:44:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:44:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:44:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:44:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:44:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:43:30', tmtdew=20.97, humidity=24.27, cloud=0.0, wind=43.81, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:43:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:44:06.041 [DEBUG] [Thread-71414] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:44:06.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:44:06.137 [DEBUG] [Thread-71417] [transport.py] [_log()] starting thread (client mode): 0xfabc5480
2025-12-12T14:44:06.137 [DEBUG] [Thread-71417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:44:06.151 [DEBUG] [Thread-71417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:44:06.152 [INFO] [Thread-71417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:06.159 [DEBUG] [Thread-71417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] client lang: <none>
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] server lang: <none>
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] kex follows: False
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] Compression: none
2025-12-12T14:44:06.160 [DEBUG] [Thread-71417] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:44:06.218 [DEBUG] [Thread-71417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:44:06.219 [DEBUG] [Thread-71417] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:44:06.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:44:06.220 [DEBUG] [Thread-71417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:44:06.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:44:06.274 [DEBUG] [Thread-71417] [transport.py] [_log()] userauth is OK
2025-12-12T14:44:06.275 [DEBUG] [Thread-71417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:44:06.275 [DEBUG] [Thread-71417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:44:06.275 [DEBUG] [Thread-71417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:44:06.275 [DEBUG] [Thread-71417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:44:06.293 [INFO] [Thread-71417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:44:06.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:44:06.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:44:07.198 [DEBUG] [Thread-71417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:44:07.198 [DEBUG] [Thread-71417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:44:07.246 [DEBUG] [Thread-71417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:44:07.246 [DEBUG] [Thread-71417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:44:07.255 [DEBUG] [Thread-71417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:44:07.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:44:07.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:44:07.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:44:07.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:44:07.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:44:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:44:07.289 [DEBUG] [Thread-71417] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:44:11.446 [DEBUG] [Thread-71419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:26.492 [DEBUG] [Thread-71420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:44:37.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:44:37.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:44:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 44, 34), 21.24, 23.85, 0.0, 42.8, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-12T14:44:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:44:34
2025-12-12T14:44:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:44:38.295 [DEBUG] [Thread-71421] [transport.py] [_log()] starting thread (client mode): 0xf574fbe0
2025-12-12T14:44:38.295 [DEBUG] [Thread-71421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:44:38.314 [DEBUG] [Thread-71421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:44:38.314 [INFO] [Thread-71421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] client lang: <none>
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] server lang: <none>
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] kex follows: False
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] Compression: none
2025-12-12T14:44:38.317 [DEBUG] [Thread-71421] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:44:38.332 [DEBUG] [Thread-71421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:44:38.332 [DEBUG] [Thread-71421] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:44:38.332 [DEBUG] [Thread-71421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:44:38.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:44:38.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:44:38.333 [DEBUG] [Thread-71421] [transport.py] [_log()] userauth is OK
2025-12-12T14:44:38.333 [DEBUG] [Thread-71421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:44:38.333 [DEBUG] [Thread-71421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:44:38.333 [DEBUG] [Thread-71421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:44:38.333 [DEBUG] [Thread-71421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:44:38.349 [INFO] [Thread-71421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:44:38.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:44:38.998 [DEBUG] [Thread-71421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:44:38.999 [DEBUG] [Thread-71421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:44:38.999 [DEBUG] [Thread-71421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:44:39.039 [DEBUG] [Thread-71421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:44:39.039 [DEBUG] [Thread-71421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:44:39.042 [DEBUG] [Thread-71421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:44:39.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:44:39.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:44:39.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:44:39.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:44:39.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:44:39.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:44:39.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:44:39.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:44:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:44:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.530650 -999.00  +21.00  53.92     28   +2.30 1 1 2 1 1   888    0 17.70 -67.73 ----- 51.2 53.9 307.2 64.7 25.3 -24.9 24.9 -25.4 25.4 -23.9 26.1 -22.9
2025-12-12T14:44:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:44:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:44:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.530650
2025-12-12T14:44:39.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:44:39.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:44:39.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:44:39.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:44:39.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:44:39.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:44:34', tmtdew=21.24, humidity=23.85, cloud=0.0, wind=42.8, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:44:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:44:39.067 [DEBUG] [Thread-71421] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:44:39.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:44:39.163 [DEBUG] [Thread-71424] [transport.py] [_log()] starting thread (client mode): 0xf572c1f0
2025-12-12T14:44:39.163 [DEBUG] [Thread-71424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:44:39.178 [DEBUG] [Thread-71424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:44:39.178 [INFO] [Thread-71424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:44:39.186 [DEBUG] [Thread-71424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] client lang: <none>
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] server lang: <none>
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] kex follows: False
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] Compression: none
2025-12-12T14:44:39.187 [DEBUG] [Thread-71424] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:44:39.241 [DEBUG] [Thread-71424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:44:39.242 [DEBUG] [Thread-71424] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:44:39.242 [DEBUG] [Thread-71424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:44:39.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:44:39.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:44:39.298 [DEBUG] [Thread-71424] [transport.py] [_log()] userauth is OK
2025-12-12T14:44:39.298 [DEBUG] [Thread-71424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:44:39.298 [DEBUG] [Thread-71424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:44:39.299 [DEBUG] [Thread-71424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:44:39.299 [DEBUG] [Thread-71424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:44:39.317 [INFO] [Thread-71424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:44:39.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:44:39.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:44:40.164 [DEBUG] [Thread-71424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:44:40.164 [DEBUG] [Thread-71424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:44:40.212 [DEBUG] [Thread-71424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:44:40.212 [DEBUG] [Thread-71424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:44:40.221 [DEBUG] [Thread-71424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:44:40.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:44:40.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:44:40.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:44:40.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:44:40.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:44:40.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:44:40.255 [DEBUG] [Thread-71424] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:44:41.517 [DEBUG] [Thread-71426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:48.361 [DEBUG] [Thread-71427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:54.960 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:54.961 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:44:56.560 [DEBUG] [Thread-71428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:45:10.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:45:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:45:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 45, 6), 21.43, 23.61, 0.0, 45.56, 20.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:45:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:45:06
2025-12-12T14:45:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:45:11.246 [DEBUG] [Thread-71429] [transport.py] [_log()] starting thread (client mode): 0xf81e63b0
2025-12-12T14:45:11.247 [DEBUG] [Thread-71429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:45:11.267 [DEBUG] [Thread-71429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:45:11.268 [INFO] [Thread-71429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:45:11.271 [DEBUG] [Thread-71429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] client lang: <none>
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] server lang: <none>
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] kex follows: False
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] Compression: none
2025-12-12T14:45:11.272 [DEBUG] [Thread-71429] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:45:11.286 [DEBUG] [Thread-71429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:45:11.286 [DEBUG] [Thread-71429] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:45:11.287 [DEBUG] [Thread-71429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:45:11.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:45:11.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:45:11.288 [DEBUG] [Thread-71429] [transport.py] [_log()] userauth is OK
2025-12-12T14:45:11.289 [DEBUG] [Thread-71429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:45:11.289 [DEBUG] [Thread-71429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:45:11.289 [DEBUG] [Thread-71429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:45:11.289 [DEBUG] [Thread-71429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:45:11.312 [INFO] [Thread-71429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:45:11.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:45:11.589 [DEBUG] [Thread-71431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:12.319 [DEBUG] [Thread-71429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:45:12.319 [DEBUG] [Thread-71429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:45:12.320 [DEBUG] [Thread-71429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:45:12.361 [DEBUG] [Thread-71429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:45:12.361 [DEBUG] [Thread-71429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:45:12.364 [DEBUG] [Thread-71429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:45:12.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:45:12.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:45:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:45:12.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:45:12.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:45:12.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:45:12.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:45:12.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:45:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:45:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.530997 -999.00  +20.60  45.70     29   +2.20 1 1 2 1 1   888    0 17.63 -72.14 ----- 36.3 45.7 306.4 57.6 25.1 -27.1 24.6 -26.8 25.2 -22.4 25.9 -23.7
2025-12-12T14:45:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:45:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:45:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.530997
2025-12-12T14:45:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:45:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:45:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:45:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:45:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:45:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:45:06', tmtdew=21.43, humidity=23.61, cloud=0.0, wind=45.56, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:44:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:45:12.388 [DEBUG] [Thread-71429] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:45:12.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:45:12.482 [DEBUG] [Thread-71433] [transport.py] [_log()] starting thread (client mode): 0xf5740760
2025-12-12T14:45:12.482 [DEBUG] [Thread-71433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:45:12.505 [DEBUG] [Thread-71433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:45:12.505 [INFO] [Thread-71433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:45:12.513 [DEBUG] [Thread-71433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:45:12.513 [DEBUG] [Thread-71433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:45:12.513 [DEBUG] [Thread-71433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:45:12.513 [DEBUG] [Thread-71433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:12.513 [DEBUG] [Thread-71433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] client lang: <none>
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] server lang: <none>
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] kex follows: False
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] Compression: none
2025-12-12T14:45:12.514 [DEBUG] [Thread-71433] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:45:12.570 [DEBUG] [Thread-71433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:45:12.570 [DEBUG] [Thread-71433] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:45:12.571 [DEBUG] [Thread-71433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:45:12.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:45:12.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:45:12.626 [DEBUG] [Thread-71433] [transport.py] [_log()] userauth is OK
2025-12-12T14:45:12.627 [DEBUG] [Thread-71433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:45:12.627 [DEBUG] [Thread-71433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:45:12.627 [DEBUG] [Thread-71433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:45:12.627 [DEBUG] [Thread-71433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:45:12.645 [INFO] [Thread-71433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:45:12.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:45:12.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:45:13.493 [DEBUG] [Thread-71433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:45:13.493 [DEBUG] [Thread-71433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:45:13.541 [DEBUG] [Thread-71433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:45:13.541 [DEBUG] [Thread-71433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:45:13.550 [DEBUG] [Thread-71433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:45:13.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:45:13.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:45:13.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:45:13.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:45:13.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:45:13.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:45:13.585 [DEBUG] [Thread-71433] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:45:26.618 [DEBUG] [Thread-71435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:41.666 [DEBUG] [Thread-71436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:45:43.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:45:43.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:45:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 45, 38), 21.46, 23.77, 0.0, 52.65, 20.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:45:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:45:38
2025-12-12T14:45:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:45:44.626 [DEBUG] [Thread-71437] [transport.py] [_log()] starting thread (client mode): 0xf81c2020
2025-12-12T14:45:44.627 [DEBUG] [Thread-71437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:45:44.647 [DEBUG] [Thread-71437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:45:44.647 [INFO] [Thread-71437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] client lang: <none>
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] server lang: <none>
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] kex follows: False
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:45:44.650 [DEBUG] [Thread-71437] [transport.py] [_log()] Compression: none
2025-12-12T14:45:44.651 [DEBUG] [Thread-71437] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:45:44.667 [DEBUG] [Thread-71437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:45:44.667 [DEBUG] [Thread-71437] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:45:44.667 [DEBUG] [Thread-71437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:45:44.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:45:44.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:45:44.668 [DEBUG] [Thread-71437] [transport.py] [_log()] userauth is OK
2025-12-12T14:45:44.668 [DEBUG] [Thread-71437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:45:44.668 [DEBUG] [Thread-71437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:45:44.668 [DEBUG] [Thread-71437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:45:44.668 [DEBUG] [Thread-71437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:45:44.681 [INFO] [Thread-71437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:45:44.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:45:45.338 [DEBUG] [Thread-71437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:45:45.338 [DEBUG] [Thread-71437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:45:45.338 [DEBUG] [Thread-71437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:45:45.378 [DEBUG] [Thread-71437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:45:45.379 [DEBUG] [Thread-71437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:45:45.381 [DEBUG] [Thread-71437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:45:45.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:45:45.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:45:45.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:45:45.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:45:45.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:45:45.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:45:45.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.531344 -999.00  +21.00  42.57     29   +2.20 1 1 2 1 1   888    0 17.40 -77.66 ----- 41.6 42.6 297.8 48.6 25.1 -26.4 24.7 -25.2 25.2 -22.3 25.9 -24.0
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.531344
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:45:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:45:38', tmtdew=21.46, humidity=23.77, cloud=0.0, wind=52.65, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:45:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:45:45.398 [DEBUG] [Thread-71437] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:45:45.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:45:45.483 [DEBUG] [Thread-71440] [transport.py] [_log()] starting thread (client mode): 0xf81c32e0
2025-12-12T14:45:45.483 [DEBUG] [Thread-71440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:45:45.497 [DEBUG] [Thread-71440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:45:45.497 [INFO] [Thread-71440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:45:45.504 [DEBUG] [Thread-71440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:45:45.504 [DEBUG] [Thread-71440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:45:45.504 [DEBUG] [Thread-71440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] client lang: <none>
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] server lang: <none>
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] kex follows: False
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] Compression: none
2025-12-12T14:45:45.505 [DEBUG] [Thread-71440] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:45:45.564 [DEBUG] [Thread-71440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:45:45.564 [DEBUG] [Thread-71440] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:45:45.564 [DEBUG] [Thread-71440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:45:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:45:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:45:45.622 [DEBUG] [Thread-71440] [transport.py] [_log()] userauth is OK
2025-12-12T14:45:45.622 [DEBUG] [Thread-71440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:45:45.622 [DEBUG] [Thread-71440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:45:45.622 [DEBUG] [Thread-71440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:45:45.622 [DEBUG] [Thread-71440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:45:45.637 [INFO] [Thread-71440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:45:45.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:45:45.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:45:46.478 [DEBUG] [Thread-71440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:45:46.478 [DEBUG] [Thread-71440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:45:46.527 [DEBUG] [Thread-71440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:45:46.527 [DEBUG] [Thread-71440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:45:46.535 [DEBUG] [Thread-71440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:45:46.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:45:46.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:45:46.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:45:46.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:45:46.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:45:46.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:45:46.566 [DEBUG] [Thread-71440] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:45:48.404 [DEBUG] [Thread-71442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:55.104 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:55.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:45:56.694 [DEBUG] [Thread-71443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:11.740 [DEBUG] [Thread-71444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:46:16.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:46:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:46:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 46, 10), 21.49, 23.74, 0.0, 53.36, 20.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:46:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:46:10
2025-12-12T14:46:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:46:17.546 [DEBUG] [Thread-71445] [transport.py] [_log()] starting thread (client mode): 0xf81c2b00
2025-12-12T14:46:17.546 [DEBUG] [Thread-71445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:46:17.566 [DEBUG] [Thread-71445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:46:17.566 [INFO] [Thread-71445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] client lang: <none>
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] server lang: <none>
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] kex follows: False
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] Compression: none
2025-12-12T14:46:17.570 [DEBUG] [Thread-71445] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:46:17.587 [DEBUG] [Thread-71445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:46:17.587 [DEBUG] [Thread-71445] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:46:17.588 [DEBUG] [Thread-71445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:46:17.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:46:17.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:46:17.590 [DEBUG] [Thread-71445] [transport.py] [_log()] userauth is OK
2025-12-12T14:46:17.590 [DEBUG] [Thread-71445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:46:17.590 [DEBUG] [Thread-71445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:46:17.590 [DEBUG] [Thread-71445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:46:17.590 [DEBUG] [Thread-71445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:46:17.614 [INFO] [Thread-71445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:46:17.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:46:18.416 [DEBUG] [Thread-71445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:46:18.416 [DEBUG] [Thread-71445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:46:18.417 [DEBUG] [Thread-71445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:46:18.457 [DEBUG] [Thread-71445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:46:18.457 [DEBUG] [Thread-71445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:46:18.460 [DEBUG] [Thread-71445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:46:18.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:46:18.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:46:18.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:46:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:46:18.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:46:18.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:46:18.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:46:18.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:46:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:46:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.531691 -999.00  +20.80  40.08     28   +1.70 1 1 2 1 1   888    0 17.18 -87.28 ----- 58.4 40.1 301.0 56.1 25.1 -27.0 24.7 -25.6 25.1 -23.3 25.8 -22.7
2025-12-12T14:46:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:46:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:46:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.531691
2025-12-12T14:46:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:46:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:46:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:46:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:46:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:46:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:46:10', tmtdew=21.49, humidity=23.74, cloud=0.0, wind=53.36, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:45:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:46:18.485 [DEBUG] [Thread-71445] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:46:18.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:46:18.592 [DEBUG] [Thread-71448] [transport.py] [_log()] starting thread (client mode): 0xf81e66e0
2025-12-12T14:46:18.592 [DEBUG] [Thread-71448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:46:18.608 [DEBUG] [Thread-71448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:46:18.608 [INFO] [Thread-71448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:46:18.615 [DEBUG] [Thread-71448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:46:18.616 [DEBUG] [Thread-71448] [transport.py] [_log()] client lang: <none>
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] server lang: <none>
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] kex follows: False
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:46:18.617 [DEBUG] [Thread-71448] [transport.py] [_log()] Compression: none
2025-12-12T14:46:18.618 [DEBUG] [Thread-71448] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:46:18.675 [DEBUG] [Thread-71448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:46:18.675 [DEBUG] [Thread-71448] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:46:18.676 [DEBUG] [Thread-71448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:46:18.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:46:18.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:46:18.731 [DEBUG] [Thread-71448] [transport.py] [_log()] userauth is OK
2025-12-12T14:46:18.731 [DEBUG] [Thread-71448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:46:18.731 [DEBUG] [Thread-71448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:46:18.731 [DEBUG] [Thread-71448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:46:18.731 [DEBUG] [Thread-71448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:46:18.750 [INFO] [Thread-71448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:46:18.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:46:18.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:46:19.610 [DEBUG] [Thread-71448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:46:19.611 [DEBUG] [Thread-71448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:46:19.659 [DEBUG] [Thread-71448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:46:19.659 [DEBUG] [Thread-71448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:46:19.668 [DEBUG] [Thread-71448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:46:19.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:46:19.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:46:19.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:46:19.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:46:19.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:46:19.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:46:19.702 [DEBUG] [Thread-71448] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:46:26.766 [DEBUG] [Thread-71450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:41.812 [DEBUG] [Thread-71451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:48.460 [DEBUG] [Thread-71452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:46:49.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:46:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:46:50.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 46, 42), 21.46, 23.92, 0.0, 53.13, 20.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:46:50.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:46:42
2025-12-12T14:46:50.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:46:50.690 [DEBUG] [Thread-71453] [transport.py] [_log()] starting thread (client mode): 0xf81e5a80
2025-12-12T14:46:50.690 [DEBUG] [Thread-71453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:46:50.714 [DEBUG] [Thread-71453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:46:50.714 [INFO] [Thread-71453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:46:50.718 [DEBUG] [Thread-71453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] client lang: <none>
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] server lang: <none>
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] kex follows: False
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] Compression: none
2025-12-12T14:46:50.719 [DEBUG] [Thread-71453] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:46:50.729 [DEBUG] [Thread-71453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:46:50.729 [DEBUG] [Thread-71453] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:46:50.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:46:50.730 [DEBUG] [Thread-71453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:46:50.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:46:50.732 [DEBUG] [Thread-71453] [transport.py] [_log()] userauth is OK
2025-12-12T14:46:50.732 [DEBUG] [Thread-71453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:46:50.733 [DEBUG] [Thread-71453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:46:50.733 [DEBUG] [Thread-71453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:46:50.733 [DEBUG] [Thread-71453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:46:50.757 [INFO] [Thread-71453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:46:50.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:46:51.398 [DEBUG] [Thread-71453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:46:51.399 [DEBUG] [Thread-71453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:46:51.399 [DEBUG] [Thread-71453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:46:51.440 [DEBUG] [Thread-71453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:46:51.440 [DEBUG] [Thread-71453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:46:51.443 [DEBUG] [Thread-71453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:46:51.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:46:51.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:46:51.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:46:51.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:46:51.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:46:51.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:46:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:46:51.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:46:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:46:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.532039 -999.00  +20.70  43.87     28   +1.80 1 1 2 1 1   888    0 17.00 -90.70 ----- 36.3 43.9 305.2 70.2 25.0 -25.7 24.6 -25.5 24.9 -25.6 25.7 -23.7
2025-12-12T14:46:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:46:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:46:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.532039
2025-12-12T14:46:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:46:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:46:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:46:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:46:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:46:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:46:42', tmtdew=21.46, humidity=23.92, cloud=0.0, wind=53.13, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:46:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:46:51.471 [DEBUG] [Thread-71453] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:46:51.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:46:51.567 [DEBUG] [Thread-71456] [transport.py] [_log()] starting thread (client mode): 0xf81e77c0
2025-12-12T14:46:51.567 [DEBUG] [Thread-71456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:46:51.582 [DEBUG] [Thread-71456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:46:51.582 [INFO] [Thread-71456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:46:51.590 [DEBUG] [Thread-71456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] client lang: <none>
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] server lang: <none>
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] kex follows: False
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] Compression: none
2025-12-12T14:46:51.591 [DEBUG] [Thread-71456] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:46:51.647 [DEBUG] [Thread-71456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:46:51.648 [DEBUG] [Thread-71456] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:46:51.648 [DEBUG] [Thread-71456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:46:51.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:46:51.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:46:51.702 [DEBUG] [Thread-71456] [transport.py] [_log()] userauth is OK
2025-12-12T14:46:51.702 [DEBUG] [Thread-71456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:46:51.702 [DEBUG] [Thread-71456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:46:51.702 [DEBUG] [Thread-71456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:46:51.702 [DEBUG] [Thread-71456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:46:51.717 [INFO] [Thread-71456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:46:51.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:46:51.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:46:52.576 [DEBUG] [Thread-71456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:46:52.576 [DEBUG] [Thread-71456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:46:52.624 [DEBUG] [Thread-71456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:46:52.624 [DEBUG] [Thread-71456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:46:52.633 [DEBUG] [Thread-71456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:46:52.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:46:52.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:46:52.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:46:52.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:46:52.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:46:52.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:46:52.668 [DEBUG] [Thread-71456] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:46:55.245 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:55.246 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:46:56.843 [DEBUG] [Thread-71458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:11.895 [DEBUG] [Thread-71459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:22.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:47:22.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:47:22.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:47:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 47, 14), 21.25, 24.24, 0.0, 51.98, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:47:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:47:14
2025-12-12T14:47:23.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:47:23.661 [DEBUG] [Thread-71460] [transport.py] [_log()] starting thread (client mode): 0xf81e4ee0
2025-12-12T14:47:23.661 [DEBUG] [Thread-71460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:47:23.681 [DEBUG] [Thread-71460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:47:23.681 [INFO] [Thread-71460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:47:23.684 [DEBUG] [Thread-71460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] client lang: <none>
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] server lang: <none>
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] kex follows: False
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] Compression: none
2025-12-12T14:47:23.685 [DEBUG] [Thread-71460] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:47:23.704 [DEBUG] [Thread-71460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:47:23.705 [DEBUG] [Thread-71460] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:47:23.705 [DEBUG] [Thread-71460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:47:23.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:47:23.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:47:23.707 [DEBUG] [Thread-71460] [transport.py] [_log()] userauth is OK
2025-12-12T14:47:23.707 [DEBUG] [Thread-71460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:47:23.707 [DEBUG] [Thread-71460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:47:23.708 [DEBUG] [Thread-71460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:47:23.708 [DEBUG] [Thread-71460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:47:23.731 [INFO] [Thread-71460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:47:23.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:47:24.453 [DEBUG] [Thread-71460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:47:24.453 [DEBUG] [Thread-71460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:47:24.454 [DEBUG] [Thread-71460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:47:24.494 [DEBUG] [Thread-71460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:47:24.494 [DEBUG] [Thread-71460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:47:24.497 [DEBUG] [Thread-71460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:47:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:47:24.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:47:24.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:47:24.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:47:24.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:47:24.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:47:24.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:47:24.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:47:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:47:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.532386 -999.00  +21.20  43.81     28   +2.10 1 2 2 1 1   888    0 17.25 -98.93 ----- 49.8 43.8 313.0 59.3 25.1 -24.3 24.7 -23.6 25.3 -22.1 25.7 -22.8
2025-12-12T14:47:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:47:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:47:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.532386
2025-12-12T14:47:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:47:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:47:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:47:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:47:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T14:47:24.522 [DEBUG] [Thread-71460] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:47:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:47:14', tmtdew=21.25, humidity=24.24, cloud=0.0, wind=51.98, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:46:38.150', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:47:24.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:47:24.618 [DEBUG] [Thread-71463] [transport.py] [_log()] starting thread (client mode): 0xf81e6c20
2025-12-12T14:47:24.618 [DEBUG] [Thread-71463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:47:24.633 [DEBUG] [Thread-71463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:47:24.633 [INFO] [Thread-71463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:47:24.640 [DEBUG] [Thread-71463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:47:24.640 [DEBUG] [Thread-71463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:47:24.640 [DEBUG] [Thread-71463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:47:24.640 [DEBUG] [Thread-71463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] client lang: <none>
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] server lang: <none>
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] kex follows: False
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] Compression: none
2025-12-12T14:47:24.641 [DEBUG] [Thread-71463] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:47:24.699 [DEBUG] [Thread-71463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:47:24.699 [DEBUG] [Thread-71463] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:47:24.700 [DEBUG] [Thread-71463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:47:24.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:47:24.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:47:24.754 [DEBUG] [Thread-71463] [transport.py] [_log()] userauth is OK
2025-12-12T14:47:24.755 [DEBUG] [Thread-71463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:47:24.755 [DEBUG] [Thread-71463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:47:24.755 [DEBUG] [Thread-71463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:47:24.755 [DEBUG] [Thread-71463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:47:24.774 [INFO] [Thread-71463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:47:24.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:47:24.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:47:25.629 [DEBUG] [Thread-71463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:47:25.629 [DEBUG] [Thread-71463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:47:25.677 [DEBUG] [Thread-71463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:47:25.677 [DEBUG] [Thread-71463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:47:25.686 [DEBUG] [Thread-71463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:47:25.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:47:25.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:47:25.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:47:25.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:47:25.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:47:25.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:47:25.720 [DEBUG] [Thread-71463] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:47:26.924 [DEBUG] [Thread-71465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:41.965 [DEBUG] [Thread-71466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:48.507 [DEBUG] [Thread-71467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:55.388 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:55.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:47:55.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:47:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:47:56.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 47, 46), 21.08, 24.42, 0.0, 50.53, 20.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:47:56.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:47:46
2025-12-12T14:47:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:47:56.690 [DEBUG] [Thread-71468] [transport.py] [_log()] starting thread (client mode): 0xf81e78b0
2025-12-12T14:47:56.690 [DEBUG] [Thread-71468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:47:56.709 [DEBUG] [Thread-71468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:47:56.709 [INFO] [Thread-71468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:47:56.712 [DEBUG] [Thread-71468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:47:56.712 [DEBUG] [Thread-71468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:47:56.712 [DEBUG] [Thread-71468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:47:56.712 [DEBUG] [Thread-71468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] client lang: <none>
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] server lang: <none>
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] kex follows: False
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] Compression: none
2025-12-12T14:47:56.713 [DEBUG] [Thread-71468] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:47:56.730 [DEBUG] [Thread-71468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:47:56.731 [DEBUG] [Thread-71468] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:47:56.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:47:56.732 [DEBUG] [Thread-71468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:47:56.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:47:56.733 [DEBUG] [Thread-71468] [transport.py] [_log()] userauth is OK
2025-12-12T14:47:56.733 [DEBUG] [Thread-71468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:47:56.734 [DEBUG] [Thread-71468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:47:56.734 [DEBUG] [Thread-71468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:47:56.734 [DEBUG] [Thread-71468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:47:56.748 [INFO] [Thread-71468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:47:56.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:47:56.993 [DEBUG] [Thread-71470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:47:57.370 [DEBUG] [Thread-71468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:47:57.370 [DEBUG] [Thread-71468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:47:57.371 [DEBUG] [Thread-71468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:47:57.411 [DEBUG] [Thread-71468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:47:57.411 [DEBUG] [Thread-71468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:47:57.414 [DEBUG] [Thread-71468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:47:57.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:47:57.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:47:57.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:47:57.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:47:57.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:47:57.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:47:57.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:47:57.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:47:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:47:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.533080 -999.00  +21.10  48.65     28   +2.20 1 1 2 1 1   888    0 16.16 -106.38 ----- 46.9 48.6 298.6 56.8 25.2 -27.9 24.8 -25.4 25.1 -25.5 26.0 -23.3
2025-12-12T14:47:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:47:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:47:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.533080
2025-12-12T14:47:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:47:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:47:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:47:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:47:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:47:57.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:47:46', tmtdew=21.08, humidity=24.42, cloud=0.0, wind=50.53, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:47:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:47:57.439 [DEBUG] [Thread-71468] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:47:57.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:47:57.535 [DEBUG] [Thread-71472] [transport.py] [_log()] starting thread (client mode): 0xf81c11b0
2025-12-12T14:47:57.535 [DEBUG] [Thread-71472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:47:57.551 [DEBUG] [Thread-71472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:47:57.551 [INFO] [Thread-71472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:47:57.558 [DEBUG] [Thread-71472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:47:57.558 [DEBUG] [Thread-71472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:47:57.558 [DEBUG] [Thread-71472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:47:57.558 [DEBUG] [Thread-71472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:57.558 [DEBUG] [Thread-71472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] client lang: <none>
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] server lang: <none>
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] kex follows: False
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] Compression: none
2025-12-12T14:47:57.559 [DEBUG] [Thread-71472] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:47:57.618 [DEBUG] [Thread-71472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:47:57.618 [DEBUG] [Thread-71472] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:47:57.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:47:57.619 [DEBUG] [Thread-71472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:47:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:47:57.675 [DEBUG] [Thread-71472] [transport.py] [_log()] userauth is OK
2025-12-12T14:47:57.675 [DEBUG] [Thread-71472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:47:57.675 [DEBUG] [Thread-71472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:47:57.675 [DEBUG] [Thread-71472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:47:57.675 [DEBUG] [Thread-71472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:47:57.694 [INFO] [Thread-71472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:47:57.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:47:57.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:47:58.534 [DEBUG] [Thread-71472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:47:58.534 [DEBUG] [Thread-71472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:47:58.582 [DEBUG] [Thread-71472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:47:58.582 [DEBUG] [Thread-71472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:47:58.591 [DEBUG] [Thread-71472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:47:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:47:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:47:58.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:47:58.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:47:58.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:47:58.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:47:58.625 [DEBUG] [Thread-71472] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:48:12.024 [DEBUG] [Thread-71474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:48:27.070 [DEBUG] [Thread-71475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:48:28.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:48:28.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:48:28.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:48:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 48, 18), 21.05, 24.45, 0.0, 52.83, 20.46, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:48:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:48:18
2025-12-12T14:48:29.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:48:29.593 [DEBUG] [Thread-71476] [transport.py] [_log()] starting thread (client mode): 0xf574ff70
2025-12-12T14:48:29.593 [DEBUG] [Thread-71476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:48:29.614 [DEBUG] [Thread-71476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:48:29.614 [INFO] [Thread-71476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] client lang: <none>
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] server lang: <none>
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] kex follows: False
2025-12-12T14:48:29.618 [DEBUG] [Thread-71476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:48:29.619 [DEBUG] [Thread-71476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:48:29.619 [DEBUG] [Thread-71476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:48:29.619 [DEBUG] [Thread-71476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:48:29.619 [DEBUG] [Thread-71476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:48:29.619 [DEBUG] [Thread-71476] [transport.py] [_log()] Compression: none
2025-12-12T14:48:29.619 [DEBUG] [Thread-71476] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:48:29.636 [DEBUG] [Thread-71476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:48:29.636 [DEBUG] [Thread-71476] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:48:29.637 [DEBUG] [Thread-71476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:48:29.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:48:29.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:48:29.639 [DEBUG] [Thread-71476] [transport.py] [_log()] userauth is OK
2025-12-12T14:48:29.639 [DEBUG] [Thread-71476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:48:29.639 [DEBUG] [Thread-71476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:48:29.639 [DEBUG] [Thread-71476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:48:29.639 [DEBUG] [Thread-71476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:48:29.657 [INFO] [Thread-71476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:48:29.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:48:30.379 [DEBUG] [Thread-71476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:48:30.379 [DEBUG] [Thread-71476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:48:30.380 [DEBUG] [Thread-71476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:48:30.420 [DEBUG] [Thread-71476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:48:30.420 [DEBUG] [Thread-71476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:48:30.423 [DEBUG] [Thread-71476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:48:30.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:48:30.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:48:30.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:48:30.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:48:30.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:48:30.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:48:30.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:48:30.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:48:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:48:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.533427 -999.00  +20.60  54.95     29   +2.40 1 1 2 1 1   888    0 15.91 -111.35 ----- 34.0 55.0 301.4 66.1 25.0 -26.2 24.6 -25.9 24.8 -25.3 25.8 -24.5
2025-12-12T14:48:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:48:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:48:30.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.533427
2025-12-12T14:48:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:48:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:48:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:48:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:48:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:48:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:48:18', tmtdew=21.05, humidity=24.45, cloud=0.0, wind=52.83, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:48:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:48:30.448 [DEBUG] [Thread-71476] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:48:30.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:48:30.542 [DEBUG] [Thread-71479] [transport.py] [_log()] starting thread (client mode): 0xf81c1000
2025-12-12T14:48:30.542 [DEBUG] [Thread-71479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:48:30.556 [DEBUG] [Thread-71479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:48:30.556 [INFO] [Thread-71479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:48:30.564 [DEBUG] [Thread-71479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] client lang: <none>
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] server lang: <none>
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] kex follows: False
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:48:30.565 [DEBUG] [Thread-71479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:48:30.566 [DEBUG] [Thread-71479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:48:30.566 [DEBUG] [Thread-71479] [transport.py] [_log()] Compression: none
2025-12-12T14:48:30.566 [DEBUG] [Thread-71479] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:48:30.626 [DEBUG] [Thread-71479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:48:30.627 [DEBUG] [Thread-71479] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:48:30.627 [DEBUG] [Thread-71479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:48:30.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:48:30.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:48:30.683 [DEBUG] [Thread-71479] [transport.py] [_log()] userauth is OK
2025-12-12T14:48:30.683 [DEBUG] [Thread-71479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:48:30.683 [DEBUG] [Thread-71479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:48:30.683 [DEBUG] [Thread-71479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:48:30.683 [DEBUG] [Thread-71479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:48:30.701 [INFO] [Thread-71479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:48:30.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:48:30.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:48:31.657 [DEBUG] [Thread-71479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:48:31.657 [DEBUG] [Thread-71479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:48:31.706 [DEBUG] [Thread-71479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:48:31.706 [DEBUG] [Thread-71479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:48:31.714 [DEBUG] [Thread-71479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:48:31.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:48:31.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:48:31.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:48:31.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:48:31.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:48:31.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:48:31.748 [DEBUG] [Thread-71479] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:48:42.103 [DEBUG] [Thread-71481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:48:48.563 [DEBUG] [Thread-71482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:48:55.529 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:48:55.530 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:48:57.148 [DEBUG] [Thread-71483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:49:01.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:49:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:49:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 48, 50), 20.88, 24.55, 29.3, 53.71, 20.43, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:49:02.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:48:50
2025-12-12T14:49:02.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:49:02.740 [DEBUG] [Thread-71484] [transport.py] [_log()] starting thread (client mode): 0xf5741db0
2025-12-12T14:49:02.740 [DEBUG] [Thread-71484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:49:02.760 [DEBUG] [Thread-71484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:49:02.760 [INFO] [Thread-71484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:49:02.763 [DEBUG] [Thread-71484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:49:02.763 [DEBUG] [Thread-71484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:49:02.763 [DEBUG] [Thread-71484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:49:02.763 [DEBUG] [Thread-71484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:02.763 [DEBUG] [Thread-71484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:02.763 [DEBUG] [Thread-71484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] client lang: <none>
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] server lang: <none>
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] kex follows: False
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] Compression: none
2025-12-12T14:49:02.764 [DEBUG] [Thread-71484] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:49:02.779 [DEBUG] [Thread-71484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:49:02.779 [DEBUG] [Thread-71484] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:49:02.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:49:02.779 [DEBUG] [Thread-71484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:49:02.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:49:02.780 [DEBUG] [Thread-71484] [transport.py] [_log()] userauth is OK
2025-12-12T14:49:02.780 [DEBUG] [Thread-71484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:49:02.780 [DEBUG] [Thread-71484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:49:02.780 [DEBUG] [Thread-71484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:49:02.780 [DEBUG] [Thread-71484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:49:02.795 [INFO] [Thread-71484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:49:02.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:49:03.574 [DEBUG] [Thread-71484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:49:03.574 [DEBUG] [Thread-71484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:49:03.574 [DEBUG] [Thread-71484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:49:03.615 [DEBUG] [Thread-71484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:49:03.615 [DEBUG] [Thread-71484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:49:03.617 [DEBUG] [Thread-71484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:49:03.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:49:03.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:49:03.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:49:03.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:49:03.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:49:03.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:49:03.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:49:03.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:49:03.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:49:03.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.533775 -999.00  +20.70  37.77     29   +2.40 1 1 2 1 1   888    0 16.43 -113.05 ----- 51.6 37.8 306.1 67.4 25.0 -26.2 24.6 -24.5 25.0 -22.4 25.7 -23.2
2025-12-12T14:49:03.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:49:03.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:49:03.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.533775
2025-12-12T14:49:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:49:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:49:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:49:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:49:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:49:03.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:48:50', tmtdew=20.88, humidity=24.55, cloud=29.3, wind=53.71, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:48:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:49:03.639 [DEBUG] [Thread-71484] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:49:03.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:49:03.729 [DEBUG] [Thread-71487] [transport.py] [_log()] starting thread (client mode): 0xf81e61a0
2025-12-12T14:49:03.729 [DEBUG] [Thread-71487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:49:03.744 [DEBUG] [Thread-71487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:49:03.744 [INFO] [Thread-71487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:49:03.751 [DEBUG] [Thread-71487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] client lang: <none>
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] server lang: <none>
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] kex follows: False
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:49:03.752 [DEBUG] [Thread-71487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:49:03.753 [DEBUG] [Thread-71487] [transport.py] [_log()] Compression: none
2025-12-12T14:49:03.753 [DEBUG] [Thread-71487] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:49:03.810 [DEBUG] [Thread-71487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:49:03.811 [DEBUG] [Thread-71487] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:49:03.811 [DEBUG] [Thread-71487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:49:03.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:49:03.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:49:03.867 [DEBUG] [Thread-71487] [transport.py] [_log()] userauth is OK
2025-12-12T14:49:03.867 [DEBUG] [Thread-71487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:49:03.867 [DEBUG] [Thread-71487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:49:03.867 [DEBUG] [Thread-71487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:49:03.867 [DEBUG] [Thread-71487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:49:03.886 [INFO] [Thread-71487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:49:03.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:49:03.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:49:04.751 [DEBUG] [Thread-71487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:49:04.755 [DEBUG] [Thread-71487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:49:04.798 [DEBUG] [Thread-71487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:49:04.799 [DEBUG] [Thread-71487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:49:04.807 [DEBUG] [Thread-71487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:49:04.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:49:04.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:49:04.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:49:04.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:49:04.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:49:04.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:49:04.842 [DEBUG] [Thread-71487] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:49:12.178 [DEBUG] [Thread-71489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:27.230 [DEBUG] [Thread-71490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:34.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:49:34.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:49: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
2025-12-12T14:49:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 49, 22), 20.92, 24.49, 29.3, 54.87, 20.48, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:49:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:49:22
2025-12-12T14:49:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:49:35.824 [DEBUG] [Thread-71491] [transport.py] [_log()] starting thread (client mode): 0xf81e4a90
2025-12-12T14:49:35.824 [DEBUG] [Thread-71491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:49:35.844 [DEBUG] [Thread-71491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:49:35.844 [INFO] [Thread-71491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:49:35.847 [DEBUG] [Thread-71491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:49:35.847 [DEBUG] [Thread-71491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:49:35.847 [DEBUG] [Thread-71491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] client lang: <none>
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] server lang: <none>
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] kex follows: False
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:49:35.848 [DEBUG] [Thread-71491] [transport.py] [_log()] Compression: none
2025-12-12T14:49:35.849 [DEBUG] [Thread-71491] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:49:35.865 [DEBUG] [Thread-71491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:49:35.865 [DEBUG] [Thread-71491] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:49:35.866 [DEBUG] [Thread-71491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:49:35.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:49:35.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:49:35.868 [DEBUG] [Thread-71491] [transport.py] [_log()] userauth is OK
2025-12-12T14:49:35.868 [DEBUG] [Thread-71491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:49:35.868 [DEBUG] [Thread-71491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:49:35.868 [DEBUG] [Thread-71491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:49:35.868 [DEBUG] [Thread-71491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:49:35.892 [INFO] [Thread-71491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:49:35.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:49:36.523 [DEBUG] [Thread-71491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:49:36.523 [DEBUG] [Thread-71491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:49:36.523 [DEBUG] [Thread-71491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:49:36.565 [DEBUG] [Thread-71491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:49:36.565 [DEBUG] [Thread-71491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:49:36.567 [DEBUG] [Thread-71491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:49:36.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:49:36.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:49:36.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:49:36.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:49:36.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:49:36.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:49:36.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.534122 -999.00  +20.50  55.54     29   +1.90 1 1 2 1 1   888    0 15.90 -127.43 ----- 48.0 55.5 316.0 69.6 24.9 -25.4 24.6 -24.6 24.8 -29.9 25.6 -23.9
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.534122
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:49:36.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:49:22', tmtdew=20.92, humidity=24.49, cloud=29.3, wind=54.87, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:49:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:49:36.587 [DEBUG] [Thread-71491] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:49:36.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:49:36.673 [DEBUG] [Thread-71494] [transport.py] [_log()] starting thread (client mode): 0xf81e4130
2025-12-12T14:49:36.673 [DEBUG] [Thread-71494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:49:36.686 [DEBUG] [Thread-71494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:49:36.686 [INFO] [Thread-71494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] client lang: <none>
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] server lang: <none>
2025-12-12T14:49:36.694 [DEBUG] [Thread-71494] [transport.py] [_log()] kex follows: False
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] Compression: none
2025-12-12T14:49:36.695 [DEBUG] [Thread-71494] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:49:36.749 [DEBUG] [Thread-71494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:49:36.749 [DEBUG] [Thread-71494] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:49:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:49:36.750 [DEBUG] [Thread-71494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:49:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:49:36.806 [DEBUG] [Thread-71494] [transport.py] [_log()] userauth is OK
2025-12-12T14:49:36.806 [DEBUG] [Thread-71494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:49:36.806 [DEBUG] [Thread-71494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:49:36.806 [DEBUG] [Thread-71494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:49:36.807 [DEBUG] [Thread-71494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:49:36.820 [INFO] [Thread-71494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:49:36.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:49:36.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:49:37.661 [DEBUG] [Thread-71494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:49:37.661 [DEBUG] [Thread-71494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:49:37.709 [DEBUG] [Thread-71494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:49:37.709 [DEBUG] [Thread-71494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:49:37.717 [DEBUG] [Thread-71494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:49:37.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:49:37.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:49:37.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:49:37.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:49:37.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:49:37.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:49:37.751 [DEBUG] [Thread-71494] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:49:42.256 [DEBUG] [Thread-71496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:48.620 [DEBUG] [Thread-71497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:55.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:55.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:49:57.287 [DEBUG] [Thread-71498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:50:07.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:50:07.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:50:08.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 49, 54), 21.66, 23.41, 29.3, 62.35, 20.96, 0, 0, 0, 0, 2, 0),)
2025-12-12T14:50:08.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:49:54
2025-12-12T14:50:08.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:50:08.742 [DEBUG] [Thread-71499] [transport.py] [_log()] starting thread (client mode): 0xf574e5f0
2025-12-12T14:50:08.742 [DEBUG] [Thread-71499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:50:08.764 [DEBUG] [Thread-71499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:50:08.765 [INFO] [Thread-71499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:50:08.768 [DEBUG] [Thread-71499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] client lang: <none>
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] server lang: <none>
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] kex follows: False
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:50:08.769 [DEBUG] [Thread-71499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:50:08.770 [DEBUG] [Thread-71499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:50:08.770 [DEBUG] [Thread-71499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:50:08.770 [DEBUG] [Thread-71499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:50:08.770 [DEBUG] [Thread-71499] [transport.py] [_log()] Compression: none
2025-12-12T14:50:08.770 [DEBUG] [Thread-71499] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:50:08.787 [DEBUG] [Thread-71499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:50:08.788 [DEBUG] [Thread-71499] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:50:08.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:50:08.789 [DEBUG] [Thread-71499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:50:08.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:50:08.790 [DEBUG] [Thread-71499] [transport.py] [_log()] userauth is OK
2025-12-12T14:50:08.791 [DEBUG] [Thread-71499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:50:08.791 [DEBUG] [Thread-71499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:50:08.791 [DEBUG] [Thread-71499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:50:08.791 [DEBUG] [Thread-71499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:50:08.814 [INFO] [Thread-71499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:50:08.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:50:09.986 [DEBUG] [Thread-71499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:50:09.986 [DEBUG] [Thread-71499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:50:09.986 [DEBUG] [Thread-71499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:50:10.027 [DEBUG] [Thread-71499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:50:10.027 [DEBUG] [Thread-71499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:50:10.030 [DEBUG] [Thread-71499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:50:10.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:50:10.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:50:10.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:50:10.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:50:10.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:50:10.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:50:10.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:50:10.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:50:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:50:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.534469 -999.00  +20.90  51.87     28   +1.90 1 1 2 1 1   888    0 16.24 -130.13 ----- 41.6 51.9 327.4 61.5 24.9 -24.1 24.4 -24.8 24.9 -24.3 25.4 -22.7
2025-12-12T14:50:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:50:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:50:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.534469
2025-12-12T14:50:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:50:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:50:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:50:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:50:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:50:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:49:54', tmtdew=21.66, humidity=23.41, cloud=29.3, wind=62.35, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:49:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:50:10.056 [DEBUG] [Thread-71499] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:50:10.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:50:10.153 [DEBUG] [Thread-71502] [transport.py] [_log()] starting thread (client mode): 0xf5740d60
2025-12-12T14:50:10.153 [DEBUG] [Thread-71502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:50:10.168 [DEBUG] [Thread-71502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:50:10.169 [INFO] [Thread-71502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:50:10.176 [DEBUG] [Thread-71502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:50:10.176 [DEBUG] [Thread-71502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] client lang: <none>
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] server lang: <none>
2025-12-12T14:50:10.177 [DEBUG] [Thread-71502] [transport.py] [_log()] kex follows: False
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] Compression: none
2025-12-12T14:50:10.178 [DEBUG] [Thread-71502] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:50:10.235 [DEBUG] [Thread-71502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:50:10.235 [DEBUG] [Thread-71502] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:50:10.236 [DEBUG] [Thread-71502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:50:10.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:50:10.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:50:10.291 [DEBUG] [Thread-71502] [transport.py] [_log()] userauth is OK
2025-12-12T14:50:10.291 [DEBUG] [Thread-71502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:50:10.291 [DEBUG] [Thread-71502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:50:10.291 [DEBUG] [Thread-71502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:50:10.291 [DEBUG] [Thread-71502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:50:10.316 [INFO] [Thread-71502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:50:10.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:50:10.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:50:11.176 [DEBUG] [Thread-71502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:50:11.176 [DEBUG] [Thread-71502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:50:11.223 [DEBUG] [Thread-71502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:50:11.224 [DEBUG] [Thread-71502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:50:11.232 [DEBUG] [Thread-71502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:50:11.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:50:11.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:50:11.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:50:11.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:50:11.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:50:11.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:50:11.268 [DEBUG] [Thread-71502] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:50:12.318 [DEBUG] [Thread-71504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:27.368 [DEBUG] [Thread-71505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:41.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:50:41.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:50:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:50:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 50, 26), 21.66, 23.37, 29.3, 57.26, 20.86, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:50:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:50:26
2025-12-12T14:50:42.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:50:42.227 [DEBUG] [Thread-71506] [transport.py] [_log()] starting thread (client mode): 0xf81e6530
2025-12-12T14:50:42.227 [DEBUG] [Thread-71506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:50:42.246 [DEBUG] [Thread-71506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:50:42.246 [INFO] [Thread-71506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:50:42.249 [DEBUG] [Thread-71506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] client lang: <none>
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] server lang: <none>
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] kex follows: False
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] Compression: none
2025-12-12T14:50:42.250 [DEBUG] [Thread-71506] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:50:42.261 [DEBUG] [Thread-71506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:50:42.262 [DEBUG] [Thread-71506] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:50:42.262 [DEBUG] [Thread-71506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:50:42.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:50:42.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:50:42.264 [DEBUG] [Thread-71506] [transport.py] [_log()] userauth is OK
2025-12-12T14:50:42.264 [DEBUG] [Thread-71506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:50:42.264 [DEBUG] [Thread-71506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:50:42.264 [DEBUG] [Thread-71506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:50:42.264 [DEBUG] [Thread-71506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:50:42.301 [INFO] [Thread-71506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:50:42.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:50:42.395 [DEBUG] [Thread-71508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:42.932 [DEBUG] [Thread-71506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:50:42.932 [DEBUG] [Thread-71506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:50:42.932 [DEBUG] [Thread-71506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:50:42.973 [DEBUG] [Thread-71506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:50:42.973 [DEBUG] [Thread-71506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:50:42.976 [DEBUG] [Thread-71506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:50:42.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:50:42.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:50:42.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:50:42.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:50:42.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:50:42.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:50:42.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:50:42.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:50:42.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:50:42.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.534816 -999.00  +21.00  55.43     28   +1.90 1 1 2 1 1   888    0 15.67 -127.60 ----- 54.9 55.4 305.7 72.7 24.8 -25.3 24.4 -26.0 24.9 -22.4 25.6 -23.2
2025-12-12T14:50:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:50:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:50:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.534816
2025-12-12T14:50:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:50:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:50:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:50:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:50:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:50:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:50:26', tmtdew=21.66, humidity=23.37, cloud=29.3, wind=57.26, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:50:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:50:42.998 [DEBUG] [Thread-71506] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:50:43.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:50:43.096 [DEBUG] [Thread-71510] [transport.py] [_log()] starting thread (client mode): 0xf81c2fb0
2025-12-12T14:50:43.096 [DEBUG] [Thread-71510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:50:43.110 [DEBUG] [Thread-71510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:50:43.110 [INFO] [Thread-71510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:50:43.117 [DEBUG] [Thread-71510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:50:43.117 [DEBUG] [Thread-71510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:50:43.117 [DEBUG] [Thread-71510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:50:43.117 [DEBUG] [Thread-71510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:43.117 [DEBUG] [Thread-71510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] client lang: <none>
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] server lang: <none>
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] kex follows: False
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] Compression: none
2025-12-12T14:50:43.118 [DEBUG] [Thread-71510] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:50:43.178 [DEBUG] [Thread-71510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:50:43.179 [DEBUG] [Thread-71510] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:50:43.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:50:43.180 [DEBUG] [Thread-71510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:50:43.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:50:43.235 [DEBUG] [Thread-71510] [transport.py] [_log()] userauth is OK
2025-12-12T14:50:43.235 [DEBUG] [Thread-71510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:50:43.235 [DEBUG] [Thread-71510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:50:43.235 [DEBUG] [Thread-71510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:50:43.235 [DEBUG] [Thread-71510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:50:43.258 [INFO] [Thread-71510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:50:43.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:50:43.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:50:44.103 [DEBUG] [Thread-71510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:50:44.103 [DEBUG] [Thread-71510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:50:44.151 [DEBUG] [Thread-71510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:50:44.151 [DEBUG] [Thread-71510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:50:44.160 [DEBUG] [Thread-71510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:50:44.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:50:44.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:50:44.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:50:44.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:50:44.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:50:44.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:50:44.195 [DEBUG] [Thread-71510] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:50:48.666 [DEBUG] [Thread-71512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:55.810 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:55.810 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:50:57.423 [DEBUG] [Thread-71513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:12.460 [DEBUG] [Thread-71514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:51:14.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:51:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:51:14.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 50, 58), 21.66, 23.39, 29.3, 49.79, 20.54, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:51:14.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:50:58
2025-12-12T14:51:15.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:51:15.172 [DEBUG] [Thread-71515] [transport.py] [_log()] starting thread (client mode): 0xf5700d60
2025-12-12T14:51:15.172 [DEBUG] [Thread-71515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:51:15.192 [DEBUG] [Thread-71515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:51:15.193 [INFO] [Thread-71515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:51:15.196 [DEBUG] [Thread-71515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] client lang: <none>
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] server lang: <none>
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] kex follows: False
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:51:15.197 [DEBUG] [Thread-71515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:51:15.198 [DEBUG] [Thread-71515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:51:15.198 [DEBUG] [Thread-71515] [transport.py] [_log()] Compression: none
2025-12-12T14:51:15.198 [DEBUG] [Thread-71515] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:51:15.214 [DEBUG] [Thread-71515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:51:15.215 [DEBUG] [Thread-71515] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:51:15.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:51:15.216 [DEBUG] [Thread-71515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:51:15.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:51:15.217 [DEBUG] [Thread-71515] [transport.py] [_log()] userauth is OK
2025-12-12T14:51:15.217 [DEBUG] [Thread-71515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:51:15.218 [DEBUG] [Thread-71515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:51:15.218 [DEBUG] [Thread-71515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:51:15.218 [DEBUG] [Thread-71515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:51:15.233 [INFO] [Thread-71515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:51:15.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:51:16.013 [DEBUG] [Thread-71515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:51:16.013 [DEBUG] [Thread-71515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:51:16.014 [DEBUG] [Thread-71515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:51:16.054 [DEBUG] [Thread-71515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:51:16.054 [DEBUG] [Thread-71515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:51:16.056 [DEBUG] [Thread-71515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:51:16.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:51:16.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:51:16.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:51:16.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:51:16.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:51:16.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:51:16.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:51:16.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:51:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:51:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.535164 -999.00  +20.20  62.14     29   +1.80 1 1 3 1 1   888    0 15.37 -131.76 ----- 43.0 62.1 313.0 67.6 24.8 -26.1 24.4 -26.1 24.8 -22.5 25.5 -23.3
2025-12-12T14:51:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:51:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:51:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.535164
2025-12-12T14:51:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:51:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:51:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:51:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:51:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:51:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:50:58', tmtdew=21.66, humidity=23.39, cloud=29.3, wind=49.79, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:50:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:51:16.081 [DEBUG] [Thread-71515] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:51:16.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:51:16.177 [DEBUG] [Thread-71518] [transport.py] [_log()] starting thread (client mode): 0xf81e5ed0
2025-12-12T14:51:16.177 [DEBUG] [Thread-71518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:51:16.192 [DEBUG] [Thread-71518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:51:16.192 [INFO] [Thread-71518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:16.200 [DEBUG] [Thread-71518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] client lang: <none>
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] server lang: <none>
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] kex follows: False
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] Compression: none
2025-12-12T14:51:16.201 [DEBUG] [Thread-71518] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:51:16.258 [DEBUG] [Thread-71518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:51:16.258 [DEBUG] [Thread-71518] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:51:16.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:51:16.259 [DEBUG] [Thread-71518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:51:16.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:51:16.314 [DEBUG] [Thread-71518] [transport.py] [_log()] userauth is OK
2025-12-12T14:51:16.315 [DEBUG] [Thread-71518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:51:16.315 [DEBUG] [Thread-71518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:51:16.315 [DEBUG] [Thread-71518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:51:16.315 [DEBUG] [Thread-71518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:51:16.334 [INFO] [Thread-71518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:51:16.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:51:16.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:51:17.164 [DEBUG] [Thread-71518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:51:17.164 [DEBUG] [Thread-71518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:51:17.212 [DEBUG] [Thread-71518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:51:17.212 [DEBUG] [Thread-71518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:51:17.221 [DEBUG] [Thread-71518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:51:17.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:51:17.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:51:17.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:51:17.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:51:17.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:51:17.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:51:17.256 [DEBUG] [Thread-71518] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:51:27.489 [DEBUG] [Thread-71520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:42.531 [DEBUG] [Thread-71521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:47.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:51:47.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:51:47.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 51, 31), 21.52, 23.57, 29.3, 49.76, 20.35, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:51:31
2025-12-12T14:51:48.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:51:48.215 [DEBUG] [Thread-71522] [transport.py] [_log()] starting thread (client mode): 0xf574fe80
2025-12-12T14:51:48.215 [DEBUG] [Thread-71522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:51:48.235 [DEBUG] [Thread-71522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:51:48.236 [INFO] [Thread-71522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] client lang: <none>
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] server lang: <none>
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] kex follows: False
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] Compression: none
2025-12-12T14:51:48.239 [DEBUG] [Thread-71522] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:51:48.258 [DEBUG] [Thread-71522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:51:48.258 [DEBUG] [Thread-71522] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:51:48.259 [DEBUG] [Thread-71522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:51:48.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:51:48.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:51:48.301 [DEBUG] [Thread-71522] [transport.py] [_log()] userauth is OK
2025-12-12T14:51:48.301 [DEBUG] [Thread-71522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:51:48.301 [DEBUG] [Thread-71522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:51:48.301 [DEBUG] [Thread-71522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:51:48.301 [DEBUG] [Thread-71522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:51:48.322 [INFO] [Thread-71522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:51:48.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:51:48.714 [DEBUG] [Thread-71524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:48.962 [DEBUG] [Thread-71522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:51:48.962 [DEBUG] [Thread-71522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:51:48.962 [DEBUG] [Thread-71522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:51:49.003 [DEBUG] [Thread-71522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:51:49.003 [DEBUG] [Thread-71522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:51:49.006 [DEBUG] [Thread-71522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:51:49.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:51:49.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:51:49.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:51:49.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:51:49.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:51:49.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:51:49.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:51:49.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:51:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:51:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.535511 -999.00  +20.60  32.26     29   +2.20 1 1 2 1 1   888    0 15.70 -134.14 ----- 41.8 32.3 312.0 56.2 24.8 -25.6 24.3 -25.3 24.9 -23.4 25.4 -23.0
2025-12-12T14:51:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:51:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:51:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.535511
2025-12-12T14:51:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:51:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:51:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:51:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:51:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:51:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:51:31', tmtdew=21.52, humidity=23.57, cloud=29.3, wind=49.76, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:51:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:51:49.032 [DEBUG] [Thread-71522] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:51:49.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:51:49.129 [DEBUG] [Thread-71526] [transport.py] [_log()] starting thread (client mode): 0xf574e4a0
2025-12-12T14:51:49.129 [DEBUG] [Thread-71526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:51:49.144 [DEBUG] [Thread-71526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:51:49.144 [INFO] [Thread-71526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:51:49.151 [DEBUG] [Thread-71526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:51:49.151 [DEBUG] [Thread-71526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:51:49.151 [DEBUG] [Thread-71526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] client lang: <none>
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] server lang: <none>
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] kex follows: False
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] Compression: none
2025-12-12T14:51:49.152 [DEBUG] [Thread-71526] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:51:49.210 [DEBUG] [Thread-71526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:51:49.210 [DEBUG] [Thread-71526] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:51:49.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:51:49.212 [DEBUG] [Thread-71526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:51:49.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:51:49.266 [DEBUG] [Thread-71526] [transport.py] [_log()] userauth is OK
2025-12-12T14:51:49.266 [DEBUG] [Thread-71526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:51:49.267 [DEBUG] [Thread-71526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:51:49.267 [DEBUG] [Thread-71526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:51:49.267 [DEBUG] [Thread-71526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:51:49.286 [INFO] [Thread-71526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:51:49.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:51:49.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:51:50.121 [DEBUG] [Thread-71526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:51:50.121 [DEBUG] [Thread-71526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:51:50.169 [DEBUG] [Thread-71526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:51:50.169 [DEBUG] [Thread-71526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:51:50.178 [DEBUG] [Thread-71526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:51:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:51:50.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:51:50.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:51:50.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:51:50.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:51:50.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:51:50.213 [DEBUG] [Thread-71526] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:51:55.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:55.951 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:51:57.563 [DEBUG] [Thread-71528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:12.608 [DEBUG] [Thread-71529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:52:20.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:52:20.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:52:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 52, 3), 21.49, 23.64, 29.3, 57.94, 20.43, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:52:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:52:03
2025-12-12T14:52:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:52:21.198 [DEBUG] [Thread-71530] [transport.py] [_log()] starting thread (client mode): 0xf81f0a00
2025-12-12T14:52:21.199 [DEBUG] [Thread-71530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:52:21.219 [DEBUG] [Thread-71530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:52:21.219 [INFO] [Thread-71530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:52:21.222 [DEBUG] [Thread-71530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] client lang: <none>
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] server lang: <none>
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] kex follows: False
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:52:21.223 [DEBUG] [Thread-71530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:52:21.224 [DEBUG] [Thread-71530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:52:21.224 [DEBUG] [Thread-71530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:52:21.224 [DEBUG] [Thread-71530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:52:21.224 [DEBUG] [Thread-71530] [transport.py] [_log()] Compression: none
2025-12-12T14:52:21.224 [DEBUG] [Thread-71530] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:52:21.241 [DEBUG] [Thread-71530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:52:21.242 [DEBUG] [Thread-71530] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:52:21.242 [DEBUG] [Thread-71530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:52:21.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:52:21.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:52:21.244 [DEBUG] [Thread-71530] [transport.py] [_log()] userauth is OK
2025-12-12T14:52:21.244 [DEBUG] [Thread-71530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:52:21.244 [DEBUG] [Thread-71530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:52:21.244 [DEBUG] [Thread-71530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:52:21.244 [DEBUG] [Thread-71530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:52:21.268 [INFO] [Thread-71530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:52:21.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:52:22.069 [DEBUG] [Thread-71530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:52:22.069 [DEBUG] [Thread-71530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:52:22.069 [DEBUG] [Thread-71530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:52:22.110 [DEBUG] [Thread-71530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:52:22.110 [DEBUG] [Thread-71530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:52:22.114 [DEBUG] [Thread-71530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:52:22.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:52:22.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:52:22.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:52:22.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:52:22.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:52:22.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:52:22.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:52:22.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:52:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:52:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.535858 -999.00  +21.00  46.36     28   +2.10 1 1 2 1 1   888    0 15.11 -129.00 ----- 66.0 46.4 306.2 52.8 24.9 -25.3 24.5 -25.4 25.0 -21.6 25.5 -23.0
2025-12-12T14:52:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:52:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:52:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.535858
2025-12-12T14:52:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:52:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:52:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:52:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:52:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:52:22.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:52:03', tmtdew=21.49, humidity=23.64, cloud=29.3, wind=57.94, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:51:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:52:22.139 [DEBUG] [Thread-71530] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:52:22.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:52:22.235 [DEBUG] [Thread-71533] [transport.py] [_log()] starting thread (client mode): 0xf81f16c0
2025-12-12T14:52:22.235 [DEBUG] [Thread-71533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:52:22.249 [DEBUG] [Thread-71533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:52:22.250 [INFO] [Thread-71533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:52:22.259 [DEBUG] [Thread-71533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:52:22.259 [DEBUG] [Thread-71533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:52:22.259 [DEBUG] [Thread-71533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] client lang: <none>
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] server lang: <none>
2025-12-12T14:52:22.260 [DEBUG] [Thread-71533] [transport.py] [_log()] kex follows: False
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] Compression: none
2025-12-12T14:52:22.261 [DEBUG] [Thread-71533] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:52:22.320 [DEBUG] [Thread-71533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:52:22.320 [DEBUG] [Thread-71533] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:52:22.320 [DEBUG] [Thread-71533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:52:22.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:52:22.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:52:22.378 [DEBUG] [Thread-71533] [transport.py] [_log()] userauth is OK
2025-12-12T14:52:22.378 [DEBUG] [Thread-71533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:52:22.379 [DEBUG] [Thread-71533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:52:22.379 [DEBUG] [Thread-71533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:52:22.379 [DEBUG] [Thread-71533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:52:22.397 [INFO] [Thread-71533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:52:22.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:52:22.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:52:23.241 [DEBUG] [Thread-71533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:52:23.242 [DEBUG] [Thread-71533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:52:23.290 [DEBUG] [Thread-71533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:52:23.290 [DEBUG] [Thread-71533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:52:23.299 [DEBUG] [Thread-71533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:52:23.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:52:23.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:52:23.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:52:23.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:52:23.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:52:23.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:52:23.334 [DEBUG] [Thread-71533] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:52:27.636 [DEBUG] [Thread-71535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:42.679 [DEBUG] [Thread-71536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:48.762 [DEBUG] [Thread-71537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:53.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:52:53.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:52:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:52:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 52, 35), 21.34, 24.01, 29.3, 52.58, 20.79, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:52:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:52:35
2025-12-12T14:52:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:52:54.316 [DEBUG] [Thread-71538] [transport.py] [_log()] starting thread (client mode): 0xf5701660
2025-12-12T14:52:54.317 [DEBUG] [Thread-71538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:52:54.338 [DEBUG] [Thread-71538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:52:54.338 [INFO] [Thread-71538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:52:54.341 [DEBUG] [Thread-71538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:52:54.341 [DEBUG] [Thread-71538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:52:54.341 [DEBUG] [Thread-71538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:52:54.341 [DEBUG] [Thread-71538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:54.341 [DEBUG] [Thread-71538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:54.341 [DEBUG] [Thread-71538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] client lang: <none>
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] server lang: <none>
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] kex follows: False
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] Compression: none
2025-12-12T14:52:54.342 [DEBUG] [Thread-71538] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:52:54.358 [DEBUG] [Thread-71538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:52:54.358 [DEBUG] [Thread-71538] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:52:54.358 [DEBUG] [Thread-71538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:52:54.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:52:54.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:52:54.359 [DEBUG] [Thread-71538] [transport.py] [_log()] userauth is OK
2025-12-12T14:52:54.359 [DEBUG] [Thread-71538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:52:54.359 [DEBUG] [Thread-71538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:52:54.359 [DEBUG] [Thread-71538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:52:54.359 [DEBUG] [Thread-71538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:52:54.368 [INFO] [Thread-71538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:52:54.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:52:55.007 [DEBUG] [Thread-71538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:52:55.007 [DEBUG] [Thread-71538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:52:55.007 [DEBUG] [Thread-71538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:52:55.049 [DEBUG] [Thread-71538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:52:55.049 [DEBUG] [Thread-71538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:52:55.051 [DEBUG] [Thread-71538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:52:55.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:52:55.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:52:55.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:52:55.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:52:55.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:52:55.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:52:55.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.536205 -999.00  +20.30  54.72     30   +2.20 1 1 2 1 1   888    0 15.26 -134.90 ----- 56.0 54.7 314.0 67.9 24.8 -26.0 24.4 -25.8 24.9 -23.0 25.5 -23.9
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.536205
2025-12-12T14:52:55.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:52:55.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:52:55.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:52:55.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:52:55.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:52:55.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:52:35', tmtdew=21.34, humidity=24.01, cloud=29.3, wind=52.58, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:52:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:52:55.072 [DEBUG] [Thread-71538] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:52:55.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:52:55.159 [DEBUG] [Thread-71541] [transport.py] [_log()] starting thread (client mode): 0xfabc5480
2025-12-12T14:52:55.159 [DEBUG] [Thread-71541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:52:55.174 [DEBUG] [Thread-71541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:52:55.174 [INFO] [Thread-71541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] client lang: <none>
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] server lang: <none>
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] kex follows: False
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] Compression: none
2025-12-12T14:52:55.181 [DEBUG] [Thread-71541] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:52:55.236 [DEBUG] [Thread-71541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:52:55.236 [DEBUG] [Thread-71541] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:52:55.236 [DEBUG] [Thread-71541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:52:55.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:52:55.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:52:55.294 [DEBUG] [Thread-71541] [transport.py] [_log()] userauth is OK
2025-12-12T14:52:55.294 [DEBUG] [Thread-71541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:52:55.294 [DEBUG] [Thread-71541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:52:55.294 [DEBUG] [Thread-71541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:52:55.294 [DEBUG] [Thread-71541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:52:55.308 [INFO] [Thread-71541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:52:55.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:52:55.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:52:56.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:56.091 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:52:56.152 [DEBUG] [Thread-71541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:52:56.152 [DEBUG] [Thread-71541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:52:56.200 [DEBUG] [Thread-71541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:52:56.200 [DEBUG] [Thread-71541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:52:56.209 [DEBUG] [Thread-71541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:52:56.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:52:56.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:52:56.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:52:56.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:52:56.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:52:56.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:52:56.243 [DEBUG] [Thread-71541] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:52:57.710 [DEBUG] [Thread-71543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:12.752 [DEBUG] [Thread-71544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:53:26.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:53:26.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
2025-12-12T14:53:26.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 53, 7), 21.67, 23.58, 29.3, 57.78, 21.24, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:53:26.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:53:07
2025-12-12T14:53:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:53:27.212 [DEBUG] [Thread-71545] [transport.py] [_log()] starting thread (client mode): 0xf81f3a30
2025-12-12T14:53:27.212 [DEBUG] [Thread-71545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:53:27.232 [DEBUG] [Thread-71545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:53:27.232 [INFO] [Thread-71545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:53:27.235 [DEBUG] [Thread-71545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:53:27.235 [DEBUG] [Thread-71545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:53:27.235 [DEBUG] [Thread-71545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:53:27.235 [DEBUG] [Thread-71545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:53:27.235 [DEBUG] [Thread-71545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] client lang: <none>
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] server lang: <none>
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] kex follows: False
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:53:27.236 [DEBUG] [Thread-71545] [transport.py] [_log()] Compression: none
2025-12-12T14:53:27.237 [DEBUG] [Thread-71545] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:53:27.256 [DEBUG] [Thread-71545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:53:27.257 [DEBUG] [Thread-71545] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:53:27.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:53:27.258 [DEBUG] [Thread-71545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:53:27.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:53:27.301 [DEBUG] [Thread-71545] [transport.py] [_log()] userauth is OK
2025-12-12T14:53:27.301 [DEBUG] [Thread-71545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:53:27.301 [DEBUG] [Thread-71545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:53:27.301 [DEBUG] [Thread-71545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:53:27.302 [DEBUG] [Thread-71545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:53:27.324 [INFO] [Thread-71545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:53:27.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:53:27.783 [DEBUG] [Thread-71547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:28.078 [DEBUG] [Thread-71545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:53:28.078 [DEBUG] [Thread-71545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:53:28.079 [DEBUG] [Thread-71545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:53:28.119 [DEBUG] [Thread-71545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:53:28.119 [DEBUG] [Thread-71545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:53:28.121 [DEBUG] [Thread-71545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:53:28.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:53:28.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:53:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:53:28.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:53:28.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:53:28.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:53:28.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:53:28.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:53:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:53:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.536900 -999.00  +21.50  34.57     28   +2.50 1 1 2 1 1   888    0 15.73 -140.07 ----- 43.1 34.6 338.0 70.6 24.6 -25.3 24.4 -24.7 25.0 -22.9 25.4 -22.9
2025-12-12T14:53:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:53:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:53:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.536900
2025-12-12T14:53:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:53:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:53:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:53:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:53:28.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:53:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:53:07', tmtdew=21.67, humidity=23.58, cloud=29.3, wind=57.78, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:53:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:53:28.137 [DEBUG] [Thread-71545] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:53:28.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:53:28.235 [DEBUG] [Thread-71549] [transport.py] [_log()] starting thread (client mode): 0xf5701780
2025-12-12T14:53:28.235 [DEBUG] [Thread-71549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:53:28.253 [DEBUG] [Thread-71549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:53:28.254 [INFO] [Thread-71549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] client lang: <none>
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] server lang: <none>
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] kex follows: False
2025-12-12T14:53:28.264 [DEBUG] [Thread-71549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:53:28.265 [DEBUG] [Thread-71549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:53:28.265 [DEBUG] [Thread-71549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:53:28.265 [DEBUG] [Thread-71549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:53:28.265 [DEBUG] [Thread-71549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:53:28.265 [DEBUG] [Thread-71549] [transport.py] [_log()] Compression: none
2025-12-12T14:53:28.265 [DEBUG] [Thread-71549] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:53:28.327 [DEBUG] [Thread-71549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:53:28.328 [DEBUG] [Thread-71549] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:53:28.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:53:28.329 [DEBUG] [Thread-71549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:53:28.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:53:28.392 [DEBUG] [Thread-71549] [transport.py] [_log()] userauth is OK
2025-12-12T14:53:28.392 [DEBUG] [Thread-71549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:53:28.392 [DEBUG] [Thread-71549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:53:28.392 [DEBUG] [Thread-71549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:53:28.392 [DEBUG] [Thread-71549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:53:28.415 [INFO] [Thread-71549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:53:28.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:53:28.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:53:29.308 [DEBUG] [Thread-71549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:53:29.308 [DEBUG] [Thread-71549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:53:29.358 [DEBUG] [Thread-71549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:53:29.358 [DEBUG] [Thread-71549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:53:29.371 [DEBUG] [Thread-71549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:53:29.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:53:29.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:53:29.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:53:29.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:53:29.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:53:29.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:53:29.419 [DEBUG] [Thread-71549] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:53:42.810 [DEBUG] [Thread-71551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:48.818 [DEBUG] [Thread-71552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:56.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:56.232 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:57.853 [DEBUG] [Thread-71553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:53:59.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:53:59.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:53:59.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:54:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 53, 39), 22.02, 22.78, 29.3, 54.04, 21.44, 0, 0, 0, 0, 1, 0),)
2025-12-12T14:54:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:53:39
2025-12-12T14:54:00.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:54:00.381 [DEBUG] [Thread-71554] [transport.py] [_log()] starting thread (client mode): 0xf575f9a0
2025-12-12T14:54:00.382 [DEBUG] [Thread-71554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:54:00.401 [DEBUG] [Thread-71554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:54:00.402 [INFO] [Thread-71554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:54:00.404 [DEBUG] [Thread-71554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] client lang: <none>
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] server lang: <none>
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] kex follows: False
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] Compression: none
2025-12-12T14:54:00.405 [DEBUG] [Thread-71554] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:54:00.423 [DEBUG] [Thread-71554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:54:00.423 [DEBUG] [Thread-71554] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:54:00.424 [DEBUG] [Thread-71554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:54:00.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:54:00.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:54:00.427 [DEBUG] [Thread-71554] [transport.py] [_log()] userauth is OK
2025-12-12T14:54:00.427 [DEBUG] [Thread-71554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:54:00.427 [DEBUG] [Thread-71554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:54:00.427 [DEBUG] [Thread-71554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:54:00.427 [DEBUG] [Thread-71554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:54:00.451 [INFO] [Thread-71554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:54:00.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:54:01.098 [DEBUG] [Thread-71554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:54:01.098 [DEBUG] [Thread-71554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:54:01.099 [DEBUG] [Thread-71554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:54:01.139 [DEBUG] [Thread-71554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:54:01.139 [DEBUG] [Thread-71554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:54:01.142 [DEBUG] [Thread-71554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:54:01.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:54:01.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:54:01.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:54:01.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:54:01.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:54:01.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:54:01.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:54:01.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:54:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:54:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.537247 -999.00  +21.70  45.74     27   +2.30 1 1 2 1 1   888    0 15.19 -142.09 ----- 54.2 45.7 315.8 58.4 24.8 -25.3 24.4 -24.0 25.0 -23.9 25.6 -22.6
2025-12-12T14:54:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:54:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:54:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.537247
2025-12-12T14:54:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:54:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:54:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:54:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:54:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:54:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:53:39', tmtdew=22.02, humidity=22.78, cloud=29.3, wind=54.04, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:53:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:54:01.167 [DEBUG] [Thread-71554] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:54:01.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:54:01.272 [DEBUG] [Thread-71557] [transport.py] [_log()] starting thread (client mode): 0xf5700520
2025-12-12T14:54:01.272 [DEBUG] [Thread-71557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:54:01.287 [DEBUG] [Thread-71557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:54:01.287 [INFO] [Thread-71557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:54:01.294 [DEBUG] [Thread-71557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:54:01.295 [DEBUG] [Thread-71557] [transport.py] [_log()] client lang: <none>
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] server lang: <none>
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] kex follows: False
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] Compression: none
2025-12-12T14:54:01.296 [DEBUG] [Thread-71557] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:54:01.353 [DEBUG] [Thread-71557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:54:01.354 [DEBUG] [Thread-71557] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:54:01.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:54:01.355 [DEBUG] [Thread-71557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:54:01.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:54:01.410 [DEBUG] [Thread-71557] [transport.py] [_log()] userauth is OK
2025-12-12T14:54:01.410 [DEBUG] [Thread-71557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:54:01.410 [DEBUG] [Thread-71557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:54:01.410 [DEBUG] [Thread-71557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:54:01.411 [DEBUG] [Thread-71557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:54:01.430 [INFO] [Thread-71557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:54:01.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:54:01.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:54:02.295 [DEBUG] [Thread-71557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:54:02.295 [DEBUG] [Thread-71557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:54:02.343 [DEBUG] [Thread-71557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:54:02.343 [DEBUG] [Thread-71557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:54:02.352 [DEBUG] [Thread-71557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:54:02.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:54:02.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:54:02.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:54:02.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:54:02.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:54:02.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:54:02.386 [DEBUG] [Thread-71557] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:54:12.877 [DEBUG] [Thread-71559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:54:27.912 [DEBUG] [Thread-71560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:54:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:54:32.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:54:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:54:33.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 54, 11), 21.97, 22.83, 0.0, 54.91, 21.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:54:33.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:54:11
2025-12-12T14:54:33.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:54:33.376 [DEBUG] [Thread-71561] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-12T14:54:33.376 [DEBUG] [Thread-71561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:54:33.397 [DEBUG] [Thread-71561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:54:33.398 [INFO] [Thread-71561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:33.401 [DEBUG] [Thread-71561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] client lang: <none>
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] server lang: <none>
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] kex follows: False
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:54:33.402 [DEBUG] [Thread-71561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:54:33.403 [DEBUG] [Thread-71561] [transport.py] [_log()] Compression: none
2025-12-12T14:54:33.403 [DEBUG] [Thread-71561] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:54:33.421 [DEBUG] [Thread-71561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:54:33.422 [DEBUG] [Thread-71561] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:54:33.422 [DEBUG] [Thread-71561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:54:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:54:33.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:54:33.424 [DEBUG] [Thread-71561] [transport.py] [_log()] userauth is OK
2025-12-12T14:54:33.424 [DEBUG] [Thread-71561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:54:33.424 [DEBUG] [Thread-71561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:54:33.424 [DEBUG] [Thread-71561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:54:33.424 [DEBUG] [Thread-71561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:54:33.442 [INFO] [Thread-71561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:54:33.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:54:34.183 [DEBUG] [Thread-71561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:54:34.183 [DEBUG] [Thread-71561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:54:34.184 [DEBUG] [Thread-71561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:54:34.225 [DEBUG] [Thread-71561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:54:34.225 [DEBUG] [Thread-71561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:54:34.228 [DEBUG] [Thread-71561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:54:34.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:54:34.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:54:34.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:54:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:54:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:54:34.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:54:34.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:54:34.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:54:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:54:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.537594 -999.00  +20.70  50.51     29   +2.20 1 1 2 1 1   888    0 15.06 -133.15 ----- 47.6 50.5 310.6 65.8 24.8 -26.1 24.4 -26.6 24.8 -27.9 25.5 -23.9
2025-12-12T14:54:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:54:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:54:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.537594
2025-12-12T14:54:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:54:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:54:34.246 [DEBUG] [Thread-71561] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:54:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:54:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:54:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:54:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:54:11', tmtdew=21.97, humidity=22.83, cloud=0.0, wind=54.91, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:54:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:54:34.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:54:34.343 [DEBUG] [Thread-71564] [transport.py] [_log()] starting thread (client mode): 0xf5700a90
2025-12-12T14:54:34.343 [DEBUG] [Thread-71564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:54:34.358 [DEBUG] [Thread-71564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:54:34.358 [INFO] [Thread-71564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:54:34.365 [DEBUG] [Thread-71564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:54:34.365 [DEBUG] [Thread-71564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] client lang: <none>
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] server lang: <none>
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] kex follows: False
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] Compression: none
2025-12-12T14:54:34.366 [DEBUG] [Thread-71564] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:54:34.425 [DEBUG] [Thread-71564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:54:34.426 [DEBUG] [Thread-71564] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:54:34.426 [DEBUG] [Thread-71564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:54:34.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:54:34.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:54:34.482 [DEBUG] [Thread-71564] [transport.py] [_log()] userauth is OK
2025-12-12T14:54:34.482 [DEBUG] [Thread-71564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:54:34.482 [DEBUG] [Thread-71564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:54:34.482 [DEBUG] [Thread-71564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:54:34.482 [DEBUG] [Thread-71564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:54:34.505 [INFO] [Thread-71564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:54:34.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:54:34.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:54:35.350 [DEBUG] [Thread-71564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:54:35.350 [DEBUG] [Thread-71564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:54:35.398 [DEBUG] [Thread-71564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:54:35.398 [DEBUG] [Thread-71564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:54:35.407 [DEBUG] [Thread-71564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:54:35.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:54:35.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:54:35.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:54:35.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:54:35.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:54:35.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:54:35.442 [DEBUG] [Thread-71564] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:54:42.944 [DEBUG] [Thread-71566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:54:48.861 [DEBUG] [Thread-71567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:54:56.373 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:54:56.374 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:54:57.988 [DEBUG] [Thread-71568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:05.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:55:05.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:55:05.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:55:06.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 54, 43), 21.66, 23.59, 0.0, 50.18, 20.81, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:55:06.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:54:43
2025-12-12T14:55:06.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:55:06.413 [DEBUG] [Thread-71569] [transport.py] [_log()] starting thread (client mode): 0xf5700730
2025-12-12T14:55:06.413 [DEBUG] [Thread-71569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:55:06.433 [DEBUG] [Thread-71569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:55:06.433 [INFO] [Thread-71569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] client lang: <none>
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] server lang: <none>
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] kex follows: False
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] Compression: none
2025-12-12T14:55:06.436 [DEBUG] [Thread-71569] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:55:06.454 [DEBUG] [Thread-71569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:55:06.454 [DEBUG] [Thread-71569] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:55:06.455 [DEBUG] [Thread-71569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:55:06.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:55:06.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:55:06.457 [DEBUG] [Thread-71569] [transport.py] [_log()] userauth is OK
2025-12-12T14:55:06.457 [DEBUG] [Thread-71569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:55:06.457 [DEBUG] [Thread-71569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:55:06.457 [DEBUG] [Thread-71569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:55:06.457 [DEBUG] [Thread-71569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:55:06.478 [INFO] [Thread-71569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:55:06.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:55:07.365 [DEBUG] [Thread-71569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:55:07.365 [DEBUG] [Thread-71569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:55:07.365 [DEBUG] [Thread-71569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:55:07.406 [DEBUG] [Thread-71569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:55:07.406 [DEBUG] [Thread-71569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:55:07.409 [DEBUG] [Thread-71569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:55:07.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:55:07.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:55:07.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:55:07.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:55:07.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:55:07.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:55:07.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:55:07.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:55:07.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:55:07.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.537941 -999.00  +20.60  47.38     28   +1.50 1 1 2 1 1   888    0 15.76 -127.72 ----- 43.5 47.4 305.6 56.2 24.8 -24.9 24.4 -26.3 24.9 -23.3 25.5 -22.9
2025-12-12T14:55:07.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:55:07.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:55:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.537941
2025-12-12T14:55:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:55:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:55:07.454 [DEBUG] [Thread-71569] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:55:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:55:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:55:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:55:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:54:43', tmtdew=21.66, humidity=23.59, cloud=0.0, wind=50.18, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:54:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:55:07.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:55:07.554 [DEBUG] [Thread-71572] [transport.py] [_log()] starting thread (client mode): 0xfabc5d80
2025-12-12T14:55:07.554 [DEBUG] [Thread-71572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:55:07.569 [DEBUG] [Thread-71572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:55:07.569 [INFO] [Thread-71572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] client lang: <none>
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] server lang: <none>
2025-12-12T14:55:07.576 [DEBUG] [Thread-71572] [transport.py] [_log()] kex follows: False
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] Compression: none
2025-12-12T14:55:07.577 [DEBUG] [Thread-71572] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:55:07.633 [DEBUG] [Thread-71572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:55:07.633 [DEBUG] [Thread-71572] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:55:07.634 [DEBUG] [Thread-71572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:55:07.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:55:07.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:55:07.690 [DEBUG] [Thread-71572] [transport.py] [_log()] userauth is OK
2025-12-12T14:55:07.690 [DEBUG] [Thread-71572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:55:07.690 [DEBUG] [Thread-71572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:55:07.690 [DEBUG] [Thread-71572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:55:07.690 [DEBUG] [Thread-71572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:55:07.708 [INFO] [Thread-71572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:55:07.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:55:07.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:55:08.573 [DEBUG] [Thread-71572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:55:08.573 [DEBUG] [Thread-71572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:55:08.621 [DEBUG] [Thread-71572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:55:08.621 [DEBUG] [Thread-71572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:55:08.630 [DEBUG] [Thread-71572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:55:08.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:55:08.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:55:08.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:55:08.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:55:08.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:55:08.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:55:08.665 [DEBUG] [Thread-71572] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:55:13.023 [DEBUG] [Thread-71574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:28.076 [DEBUG] [Thread-71575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:55:38.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:55:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:55:39.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 55, 15), 21.24, 24.2, 0.0, 46.09, 20.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:55:39.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:55:15
2025-12-12T14:55:39.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:55:39.633 [DEBUG] [Thread-71576] [transport.py] [_log()] starting thread (client mode): 0xf570f5b0
2025-12-12T14:55:39.633 [DEBUG] [Thread-71576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:55:39.649 [DEBUG] [Thread-71576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:55:39.649 [INFO] [Thread-71576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:55:39.652 [DEBUG] [Thread-71576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:55:39.652 [DEBUG] [Thread-71576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:55:39.652 [DEBUG] [Thread-71576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:55:39.652 [DEBUG] [Thread-71576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:39.652 [DEBUG] [Thread-71576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] client lang: <none>
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] server lang: <none>
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] kex follows: False
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] Compression: none
2025-12-12T14:55:39.653 [DEBUG] [Thread-71576] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:55:39.674 [DEBUG] [Thread-71576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:55:39.675 [DEBUG] [Thread-71576] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:55:39.676 [DEBUG] [Thread-71576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:55:39.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:55:39.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:55:39.678 [DEBUG] [Thread-71576] [transport.py] [_log()] userauth is OK
2025-12-12T14:55:39.679 [DEBUG] [Thread-71576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:55:39.679 [DEBUG] [Thread-71576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:55:39.679 [DEBUG] [Thread-71576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:55:39.679 [DEBUG] [Thread-71576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:55:39.703 [INFO] [Thread-71576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:55:39.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:55:40.501 [DEBUG] [Thread-71576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:55:40.501 [DEBUG] [Thread-71576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:55:40.501 [DEBUG] [Thread-71576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:55:40.542 [DEBUG] [Thread-71576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:55:40.542 [DEBUG] [Thread-71576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:55:40.544 [DEBUG] [Thread-71576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:55:40.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:55:40.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:55:40.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:55:40.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:55:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:55:40.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:55:40.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:55:40.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:55:40.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:55:40.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.538288 -999.00  +20.00  51.47     28   +1.30 1 1 2 1 1   888    0 15.55 -117.24 ----- 48.9 51.5 308.0 59.6 24.8 -25.3 24.4 -25.0 25.0 -24.0 25.5 -23.3
2025-12-12T14:55:40.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:55:40.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:55:40.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.538288
2025-12-12T14:55:40.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:55:40.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:55:40.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:55:40.563 [DEBUG] [Thread-71576] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:55:40.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:55:40.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:55:40.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:55:15', tmtdew=21.24, humidity=24.2, cloud=0.0, wind=46.09, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:55:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:55:40.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:55:40.661 [DEBUG] [Thread-71579] [transport.py] [_log()] starting thread (client mode): 0xf570d8a0
2025-12-12T14:55:40.661 [DEBUG] [Thread-71579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:55:40.680 [DEBUG] [Thread-71579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:55:40.680 [INFO] [Thread-71579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:55:40.688 [DEBUG] [Thread-71579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:55:40.688 [DEBUG] [Thread-71579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:55:40.688 [DEBUG] [Thread-71579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:55:40.688 [DEBUG] [Thread-71579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:40.688 [DEBUG] [Thread-71579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] client lang: <none>
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] server lang: <none>
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] kex follows: False
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:55:40.689 [DEBUG] [Thread-71579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:55:40.690 [DEBUG] [Thread-71579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:55:40.690 [DEBUG] [Thread-71579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:55:40.690 [DEBUG] [Thread-71579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:55:40.690 [DEBUG] [Thread-71579] [transport.py] [_log()] Compression: none
2025-12-12T14:55:40.690 [DEBUG] [Thread-71579] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:55:40.746 [DEBUG] [Thread-71579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:55:40.747 [DEBUG] [Thread-71579] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:55:40.747 [DEBUG] [Thread-71579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:55:40.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:55:40.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:55:40.802 [DEBUG] [Thread-71579] [transport.py] [_log()] userauth is OK
2025-12-12T14:55:40.802 [DEBUG] [Thread-71579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:55:40.802 [DEBUG] [Thread-71579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:55:40.802 [DEBUG] [Thread-71579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:55:40.802 [DEBUG] [Thread-71579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:55:40.822 [INFO] [Thread-71579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:55:40.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:55:40.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:55:41.671 [DEBUG] [Thread-71579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:55:41.671 [DEBUG] [Thread-71579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:55:41.719 [DEBUG] [Thread-71579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:55:41.719 [DEBUG] [Thread-71579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:55:41.728 [DEBUG] [Thread-71579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:55:41.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:55:41.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')
2025-12-12T14:55:41.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:55:41.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:55:41.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:55:41.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:55:41.763 [DEBUG] [Thread-71579] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:55:43.104 [DEBUG] [Thread-71581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:48.905 [DEBUG] [Thread-71582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:56.516 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:56.517 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:55:58.149 [DEBUG] [Thread-71583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:11.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:56:11.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:56: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
2025-12-12T14:56:12.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 55, 47), 21.28, 23.85, 0.0, 52.49, 20.33, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:56:12.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:55:47
2025-12-12T14:56:12.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:56:12.730 [DEBUG] [Thread-71584] [transport.py] [_log()] starting thread (client mode): 0xf575d090
2025-12-12T14:56:12.730 [DEBUG] [Thread-71584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:56:12.745 [DEBUG] [Thread-71584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:56:12.745 [INFO] [Thread-71584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] client lang: <none>
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] server lang: <none>
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] kex follows: False
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] Compression: none
2025-12-12T14:56:12.749 [DEBUG] [Thread-71584] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:56:12.766 [DEBUG] [Thread-71584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:56:12.767 [DEBUG] [Thread-71584] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:56:12.767 [DEBUG] [Thread-71584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:56:12.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:56:12.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:56:12.768 [DEBUG] [Thread-71584] [transport.py] [_log()] userauth is OK
2025-12-12T14:56:12.768 [DEBUG] [Thread-71584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:56:12.768 [DEBUG] [Thread-71584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:56:12.768 [DEBUG] [Thread-71584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:56:12.768 [DEBUG] [Thread-71584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:56:12.788 [INFO] [Thread-71584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:56:12.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:56:13.178 [DEBUG] [Thread-71586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:13.441 [DEBUG] [Thread-71584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:56:13.442 [DEBUG] [Thread-71584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:56:13.442 [DEBUG] [Thread-71584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:56:13.483 [DEBUG] [Thread-71584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:56:13.483 [DEBUG] [Thread-71584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:56:13.486 [DEBUG] [Thread-71584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:56:13.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:56:13.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:56:13.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:56:13.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:56:13.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:56:13.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:56:13.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:56:13.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:56:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:56:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.538636 -999.00  +20.90  40.82     28   +1.90 1 1 2 1 1   888    0 15.57 -115.04 ----- 54.1 40.8 312.6 56.7 24.8 -25.6 24.3 -24.9 24.9 -22.6 25.5 -23.2
2025-12-12T14:56:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:56:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:56:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.538636
2025-12-12T14:56:13.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:56:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:56:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:56:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:56:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:56:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:55:47', tmtdew=21.28, humidity=23.85, cloud=0.0, wind=52.49, temperature=20.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:55:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:56:13.514 [DEBUG] [Thread-71584] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:56:13.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:56:13.611 [DEBUG] [Thread-71588] [transport.py] [_log()] starting thread (client mode): 0xf575cfa0
2025-12-12T14:56:13.611 [DEBUG] [Thread-71588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:56:13.626 [DEBUG] [Thread-71588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:56:13.626 [INFO] [Thread-71588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:13.634 [DEBUG] [Thread-71588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] client lang: <none>
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] server lang: <none>
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] kex follows: False
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] Compression: none
2025-12-12T14:56:13.635 [DEBUG] [Thread-71588] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:56:13.693 [DEBUG] [Thread-71588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:56:13.694 [DEBUG] [Thread-71588] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:56:13.694 [DEBUG] [Thread-71588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:56:13.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:56:13.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:56:13.749 [DEBUG] [Thread-71588] [transport.py] [_log()] userauth is OK
2025-12-12T14:56:13.750 [DEBUG] [Thread-71588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:56:13.750 [DEBUG] [Thread-71588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:56:13.750 [DEBUG] [Thread-71588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:56:13.750 [DEBUG] [Thread-71588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:56:13.766 [INFO] [Thread-71588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:56:13.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:56:13.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:56:14.671 [DEBUG] [Thread-71588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:56:14.671 [DEBUG] [Thread-71588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:56:14.720 [DEBUG] [Thread-71588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:56:14.720 [DEBUG] [Thread-71588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:56:14.729 [DEBUG] [Thread-71588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:56:14.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:56:14.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')
2025-12-12T14:56:14.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:56:14.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:56:14.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:56:14.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:56:14.763 [DEBUG] [Thread-71588] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:56:28.206 [DEBUG] [Thread-71590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:43.262 [DEBUG] [Thread-71591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:44.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:56:44.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:56:44.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
2025-12-12T14:56:45.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 56, 19), 21.09, 24.2, 0.0, 57.31, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:56:45.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:56:19
2025-12-12T14:56:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:56:45.711 [DEBUG] [Thread-71592] [transport.py] [_log()] starting thread (client mode): 0xf575da50
2025-12-12T14:56:45.711 [DEBUG] [Thread-71592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:56:45.733 [DEBUG] [Thread-71592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:56:45.733 [INFO] [Thread-71592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] client lang: <none>
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] server lang: <none>
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] kex follows: False
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] Compression: none
2025-12-12T14:56:45.735 [DEBUG] [Thread-71592] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:56:45.752 [DEBUG] [Thread-71592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:56:45.753 [DEBUG] [Thread-71592] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:56:45.753 [DEBUG] [Thread-71592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:56:45.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:56:45.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:56:45.754 [DEBUG] [Thread-71592] [transport.py] [_log()] userauth is OK
2025-12-12T14:56:45.754 [DEBUG] [Thread-71592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:56:45.754 [DEBUG] [Thread-71592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:56:45.754 [DEBUG] [Thread-71592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:56:45.754 [DEBUG] [Thread-71592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:56:45.764 [INFO] [Thread-71592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:56:45.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:56:46.475 [DEBUG] [Thread-71592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:56:46.475 [DEBUG] [Thread-71592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:56:46.476 [DEBUG] [Thread-71592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:56:46.516 [DEBUG] [Thread-71592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:56:46.516 [DEBUG] [Thread-71592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:56:46.518 [DEBUG] [Thread-71592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:56:46.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:56:46.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:56:46.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:56:46.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:56:46.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:56:46.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:56:46.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.538983 -999.00  +20.70  59.28     29   +2.40 1 1 2 1 1   888    0 15.62 -111.08 ----- 59.5 59.3 298.0 65.2 24.7 -27.3 24.4 -26.2 24.6 -24.6 25.5 -23.5
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.538983
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:56:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:56:19', tmtdew=21.09, humidity=24.2, cloud=0.0, wind=57.31, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:56:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:56:46.538 [DEBUG] [Thread-71592] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:56:46.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:56:46.624 [DEBUG] [Thread-71595] [transport.py] [_log()] starting thread (client mode): 0xf572d390
2025-12-12T14:56:46.624 [DEBUG] [Thread-71595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:56:46.639 [DEBUG] [Thread-71595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:56:46.639 [INFO] [Thread-71595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:56:46.646 [DEBUG] [Thread-71595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:56:46.646 [DEBUG] [Thread-71595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:56:46.646 [DEBUG] [Thread-71595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] client lang: <none>
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] server lang: <none>
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] kex follows: False
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] Compression: none
2025-12-12T14:56:46.647 [DEBUG] [Thread-71595] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:56:46.704 [DEBUG] [Thread-71595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:56:46.704 [DEBUG] [Thread-71595] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:56:46.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:56:46.704 [DEBUG] [Thread-71595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:56:46.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:56:46.761 [DEBUG] [Thread-71595] [transport.py] [_log()] userauth is OK
2025-12-12T14:56:46.761 [DEBUG] [Thread-71595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:56:46.761 [DEBUG] [Thread-71595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:56:46.761 [DEBUG] [Thread-71595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:56:46.761 [DEBUG] [Thread-71595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:56:46.775 [INFO] [Thread-71595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:56:46.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:56:46.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:56:47.658 [DEBUG] [Thread-71595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:56:47.658 [DEBUG] [Thread-71595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:56:47.706 [DEBUG] [Thread-71595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:56:47.706 [DEBUG] [Thread-71595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:56:47.714 [DEBUG] [Thread-71595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:56:47.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:56:47.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:56:47.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:56:47.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:56:47.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:56:47.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:56:47.746 [DEBUG] [Thread-71595] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:56:48.955 [DEBUG] [Thread-71597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:56.657 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:56.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:56:58.294 [DEBUG] [Thread-71598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:13.336 [DEBUG] [Thread-71599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:17.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:57:17.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:57:17.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:57:18.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 56, 51), 20.88, 24.6, 0.0, 54.54, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:57:18.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:56:51
2025-12-12T14:57:18.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:57:18.720 [DEBUG] [Thread-71600] [transport.py] [_log()] starting thread (client mode): 0xf575fb20
2025-12-12T14:57:18.720 [DEBUG] [Thread-71600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:57:18.740 [DEBUG] [Thread-71600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:57:18.740 [INFO] [Thread-71600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] client lang: <none>
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] server lang: <none>
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] kex follows: False
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:57:18.743 [DEBUG] [Thread-71600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:57:18.744 [DEBUG] [Thread-71600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:57:18.744 [DEBUG] [Thread-71600] [transport.py] [_log()] Compression: none
2025-12-12T14:57:18.744 [DEBUG] [Thread-71600] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:57:18.760 [DEBUG] [Thread-71600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:57:18.760 [DEBUG] [Thread-71600] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:57:18.760 [DEBUG] [Thread-71600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:57:18.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:57:18.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:57:18.761 [DEBUG] [Thread-71600] [transport.py] [_log()] userauth is OK
2025-12-12T14:57:18.761 [DEBUG] [Thread-71600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:57:18.761 [DEBUG] [Thread-71600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:57:18.761 [DEBUG] [Thread-71600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:57:18.761 [DEBUG] [Thread-71600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:57:18.770 [INFO] [Thread-71600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:57:18.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:57:19.413 [DEBUG] [Thread-71600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:57:19.413 [DEBUG] [Thread-71600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:57:19.413 [DEBUG] [Thread-71600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:57:19.454 [DEBUG] [Thread-71600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:57:19.454 [DEBUG] [Thread-71600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:57:19.457 [DEBUG] [Thread-71600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:57:19.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:57:19.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:57:19.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:57:19.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:57:19.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:57:19.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:57:19.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:57:19.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:57:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:57:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.539330 -999.00  +20.40  56.79     30   +2.30 1 1 2 1 1   888    0 15.91 -115.07 ----- 43.2 56.8 311.4 75.5 24.6 -26.1 24.2 -26.0 24.8 -24.8 25.4 -23.4
2025-12-12T14:57:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:57:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:57:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.539330
2025-12-12T14:57:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:57:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:57:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:57:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:57:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:57:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:56:51', tmtdew=20.88, humidity=24.6, cloud=0.0, wind=54.54, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:56:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:57:19.480 [DEBUG] [Thread-71600] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:57:19.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:57:19.577 [DEBUG] [Thread-71603] [transport.py] [_log()] starting thread (client mode): 0xf575f190
2025-12-12T14:57:19.577 [DEBUG] [Thread-71603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:57:19.592 [DEBUG] [Thread-71603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:57:19.592 [INFO] [Thread-71603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:57:19.599 [DEBUG] [Thread-71603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:57:19.599 [DEBUG] [Thread-71603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:57:19.599 [DEBUG] [Thread-71603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] client lang: <none>
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] server lang: <none>
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] kex follows: False
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] Compression: none
2025-12-12T14:57:19.600 [DEBUG] [Thread-71603] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:57:19.657 [DEBUG] [Thread-71603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:57:19.658 [DEBUG] [Thread-71603] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:57:19.658 [DEBUG] [Thread-71603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:57:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:57:19.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:57:19.717 [DEBUG] [Thread-71603] [transport.py] [_log()] userauth is OK
2025-12-12T14:57:19.718 [DEBUG] [Thread-71603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:57:19.718 [DEBUG] [Thread-71603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:57:19.718 [DEBUG] [Thread-71603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:57:19.718 [DEBUG] [Thread-71603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:57:19.737 [INFO] [Thread-71603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:57:19.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:57:19.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:57:20.655 [DEBUG] [Thread-71603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:57:20.655 [DEBUG] [Thread-71603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:57:20.703 [DEBUG] [Thread-71603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:57:20.703 [DEBUG] [Thread-71603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:57:20.712 [DEBUG] [Thread-71603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:57:20.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:57:20.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:57:20.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:57:20.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:57:20.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:57:20.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:57:20.746 [DEBUG] [Thread-71603] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:57:28.370 [DEBUG] [Thread-71605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:43.413 [DEBUG] [Thread-71606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:49.019 [DEBUG] [Thread-71607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:57:50.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:57:50.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:57:51.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 57, 23), 21.44, 23.72, 0.0, 59.09, 20.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:57:51.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:57:23
2025-12-12T14:57:51.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:57:51.692 [DEBUG] [Thread-71608] [transport.py] [_log()] starting thread (client mode): 0xf81f0a00
2025-12-12T14:57:51.692 [DEBUG] [Thread-71608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:57:51.712 [DEBUG] [Thread-71608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:57:51.712 [INFO] [Thread-71608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] client lang: <none>
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] server lang: <none>
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] kex follows: False
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] Compression: none
2025-12-12T14:57:51.715 [DEBUG] [Thread-71608] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:57:51.732 [DEBUG] [Thread-71608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:57:51.733 [DEBUG] [Thread-71608] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:57:51.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:57:51.734 [DEBUG] [Thread-71608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:57:51.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:57:51.781 [DEBUG] [Thread-71608] [transport.py] [_log()] userauth is OK
2025-12-12T14:57:51.781 [DEBUG] [Thread-71608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:57:51.781 [DEBUG] [Thread-71608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:57:51.781 [DEBUG] [Thread-71608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:57:51.782 [DEBUG] [Thread-71608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:57:51.796 [INFO] [Thread-71608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:57:51.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:57:52.559 [DEBUG] [Thread-71608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:57:52.559 [DEBUG] [Thread-71608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:57:52.559 [DEBUG] [Thread-71608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:57:52.600 [DEBUG] [Thread-71608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:57:52.600 [DEBUG] [Thread-71608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:57:52.603 [DEBUG] [Thread-71608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:57:52.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:57:52.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:57:52.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:57:52.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:57:52.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:57:52.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:57:52.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:57:52.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:57:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:57:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.539677 -999.00  +20.60  54.53     28   +1.60 1 1 2 1 1   888    0 16.17 -104.71 ----- 53.7 54.5 310.8 67.2 24.7 -26.1 24.3 -26.2 24.7 -23.3 25.4 -23.1
2025-12-12T14:57:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:57:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:57:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.539677
2025-12-12T14:57:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:57:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:57:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:57:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:57:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:57:52.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:57:23', tmtdew=21.44, humidity=23.72, cloud=0.0, wind=59.09, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:57:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:57:52.627 [DEBUG] [Thread-71608] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:57:52.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:57:52.727 [DEBUG] [Thread-71611] [transport.py] [_log()] starting thread (client mode): 0xf570f7f0
2025-12-12T14:57:52.727 [DEBUG] [Thread-71611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:57:52.742 [DEBUG] [Thread-71611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:57:52.742 [INFO] [Thread-71611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:57:52.749 [DEBUG] [Thread-71611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] client lang: <none>
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] server lang: <none>
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] kex follows: False
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:57:52.750 [DEBUG] [Thread-71611] [transport.py] [_log()] Compression: none
2025-12-12T14:57:52.751 [DEBUG] [Thread-71611] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:57:52.809 [DEBUG] [Thread-71611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:57:52.810 [DEBUG] [Thread-71611] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:57:52.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:57:52.811 [DEBUG] [Thread-71611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:57:52.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:57:52.865 [DEBUG] [Thread-71611] [transport.py] [_log()] userauth is OK
2025-12-12T14:57:52.865 [DEBUG] [Thread-71611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:57:52.866 [DEBUG] [Thread-71611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:57:52.866 [DEBUG] [Thread-71611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:57:52.866 [DEBUG] [Thread-71611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:57:52.887 [INFO] [Thread-71611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:57:52.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:57:52.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:57:53.775 [DEBUG] [Thread-71611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:57:53.775 [DEBUG] [Thread-71611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:57:53.823 [DEBUG] [Thread-71611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:57:53.823 [DEBUG] [Thread-71611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:57:53.831 [DEBUG] [Thread-71611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:57:53.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:57:53.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:57:53.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:57:53.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:57:53.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:57:53.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:57:53.866 [DEBUG] [Thread-71611] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:57:56.798 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:56.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:57:58.443 [DEBUG] [Thread-71613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:13.487 [DEBUG] [Thread-71614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:23.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:58:23.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:58:23.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:58:24.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 57, 55), 22.62, 21.53, 0.0, 55.84, 20.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:58:24.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:57:55
2025-12-12T14:58:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:58:24.841 [DEBUG] [Thread-71615] [transport.py] [_log()] starting thread (client mode): 0xf572f1c0
2025-12-12T14:58:24.841 [DEBUG] [Thread-71615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:58:24.861 [DEBUG] [Thread-71615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:58:24.861 [INFO] [Thread-71615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:58:24.864 [DEBUG] [Thread-71615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] client lang: <none>
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] server lang: <none>
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] kex follows: False
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:58:24.865 [DEBUG] [Thread-71615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:58:24.866 [DEBUG] [Thread-71615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:58:24.866 [DEBUG] [Thread-71615] [transport.py] [_log()] Compression: none
2025-12-12T14:58:24.866 [DEBUG] [Thread-71615] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:58:24.884 [DEBUG] [Thread-71615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:58:24.885 [DEBUG] [Thread-71615] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:58:24.885 [DEBUG] [Thread-71615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:58:24.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:58:24.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:58:24.887 [DEBUG] [Thread-71615] [transport.py] [_log()] userauth is OK
2025-12-12T14:58:24.888 [DEBUG] [Thread-71615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:58:24.888 [DEBUG] [Thread-71615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:58:24.888 [DEBUG] [Thread-71615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:58:24.888 [DEBUG] [Thread-71615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:58:24.912 [INFO] [Thread-71615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:58:24.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:58:25.550 [DEBUG] [Thread-71615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:58:25.550 [DEBUG] [Thread-71615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:58:25.551 [DEBUG] [Thread-71615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:58:25.591 [DEBUG] [Thread-71615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:58:25.591 [DEBUG] [Thread-71615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:58:25.594 [DEBUG] [Thread-71615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:58:25.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:58:25.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:58:25.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:58:25.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:58:25.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:58:25.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:58:25.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:58:25.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:58:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:58:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.540025 -999.00  +20.70  50.14     26   +0.80 1 1 2 1 1   888    0 16.11 -97.41 ----- 58.9 50.1 303.6 67.0 24.8 -24.9 24.4 -25.0 24.8 -24.8 25.5 -22.3
2025-12-12T14:58:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:58:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:58:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.540025
2025-12-12T14:58:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:58:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:58:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:58:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:58:25.621 [DEBUG] [Thread-71615] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:58:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:58:25.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:57:55', tmtdew=22.62, humidity=21.53, cloud=0.0, wind=55.84, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:57:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:58:25.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:58:25.718 [DEBUG] [Thread-71618] [transport.py] [_log()] starting thread (client mode): 0xf572cc10
2025-12-12T14:58:25.718 [DEBUG] [Thread-71618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:58:25.736 [DEBUG] [Thread-71618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:58:25.736 [INFO] [Thread-71618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:58:25.744 [DEBUG] [Thread-71618] [transport.py] [_log()] client lang: <none>
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] server lang: <none>
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] kex follows: False
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] Compression: none
2025-12-12T14:58:25.745 [DEBUG] [Thread-71618] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:58:25.801 [DEBUG] [Thread-71618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:58:25.801 [DEBUG] [Thread-71618] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:58:25.802 [DEBUG] [Thread-71618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:58:25.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:58:25.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:58:25.857 [DEBUG] [Thread-71618] [transport.py] [_log()] userauth is OK
2025-12-12T14:58:25.857 [DEBUG] [Thread-71618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:58:25.857 [DEBUG] [Thread-71618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:58:25.858 [DEBUG] [Thread-71618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:58:25.858 [DEBUG] [Thread-71618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:58:25.875 [INFO] [Thread-71618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:58:25.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:58:25.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:58:26.758 [DEBUG] [Thread-71618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:58:26.759 [DEBUG] [Thread-71618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:58:26.807 [DEBUG] [Thread-71618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:58:26.807 [DEBUG] [Thread-71618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:58:26.816 [DEBUG] [Thread-71618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:58:26.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:58:26.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:58:26.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:58:26.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:58:26.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:58:26.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:58:26.851 [DEBUG] [Thread-71618] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:58:28.515 [DEBUG] [Thread-71620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:43.546 [DEBUG] [Thread-71621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:49.072 [DEBUG] [Thread-71622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:56.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:58:56.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:58:56.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:58:56.939 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:56.939 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:57.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 58, 27), 23.22, 20.7, 0.0, 59.18, 21.06, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:58:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:58:27
2025-12-12T14:58:57.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:58:57.844 [DEBUG] [Thread-71623] [transport.py] [_log()] starting thread (client mode): 0xf570e320
2025-12-12T14:58:57.844 [DEBUG] [Thread-71623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:58:57.864 [DEBUG] [Thread-71623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:58:57.864 [INFO] [Thread-71623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:58:57.867 [DEBUG] [Thread-71623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:58:57.867 [DEBUG] [Thread-71623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:58:57.867 [DEBUG] [Thread-71623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:58:57.867 [DEBUG] [Thread-71623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:57.867 [DEBUG] [Thread-71623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] client lang: <none>
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] server lang: <none>
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] kex follows: False
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] Compression: none
2025-12-12T14:58:57.868 [DEBUG] [Thread-71623] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:58:57.885 [DEBUG] [Thread-71623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:58:57.886 [DEBUG] [Thread-71623] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:58:57.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:58:57.887 [DEBUG] [Thread-71623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:58:57.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:58:57.888 [DEBUG] [Thread-71623] [transport.py] [_log()] userauth is OK
2025-12-12T14:58:57.888 [DEBUG] [Thread-71623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:58:57.888 [DEBUG] [Thread-71623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:58:57.888 [DEBUG] [Thread-71623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:58:57.889 [DEBUG] [Thread-71623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:58:57.906 [INFO] [Thread-71623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:58:57.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:58:58.571 [DEBUG] [Thread-71625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:58:58.615 [DEBUG] [Thread-71623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:58:58.615 [DEBUG] [Thread-71623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:58:58.615 [DEBUG] [Thread-71623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:58:58.655 [DEBUG] [Thread-71623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:58:58.656 [DEBUG] [Thread-71623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:58:58.658 [DEBUG] [Thread-71623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:58:58.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:58:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:58:58.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:58:58.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:58:58.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:58:58.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:58:58.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:58:58.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:58:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:58:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.540719 -999.00  +20.50  44.43     27   +1.10 1 1 2 1 1   888    0 16.48 -95.84 ----- 49.2 44.4 304.0 58.9 24.6 -27.4 24.3 -26.9 24.6 -24.0 25.4 -23.3
2025-12-12T14:58:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:58:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:58:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.540719
2025-12-12T14:58:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:58:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:58:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:58:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:58:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:58:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:58:27', tmtdew=23.22, humidity=20.7, cloud=0.0, wind=59.18, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:58:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:58:58.682 [DEBUG] [Thread-71623] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:58:58.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:58:58.779 [DEBUG] [Thread-71627] [transport.py] [_log()] starting thread (client mode): 0xf570c5b0
2025-12-12T14:58:58.779 [DEBUG] [Thread-71627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:58:58.793 [DEBUG] [Thread-71627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:58:58.794 [INFO] [Thread-71627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:58:58.801 [DEBUG] [Thread-71627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:58:58.801 [DEBUG] [Thread-71627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:58:58.801 [DEBUG] [Thread-71627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:58:58.801 [DEBUG] [Thread-71627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:58.801 [DEBUG] [Thread-71627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:58:58.801 [DEBUG] [Thread-71627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] client lang: <none>
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] server lang: <none>
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] kex follows: False
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] Compression: none
2025-12-12T14:58:58.802 [DEBUG] [Thread-71627] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:58:58.860 [DEBUG] [Thread-71627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:58:58.861 [DEBUG] [Thread-71627] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:58:58.861 [DEBUG] [Thread-71627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:58:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:58:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:58:58.917 [DEBUG] [Thread-71627] [transport.py] [_log()] userauth is OK
2025-12-12T14:58:58.917 [DEBUG] [Thread-71627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:58:58.917 [DEBUG] [Thread-71627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:58:58.918 [DEBUG] [Thread-71627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:58:58.918 [DEBUG] [Thread-71627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:58:58.939 [INFO] [Thread-71627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:58:58.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:58:58.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:58:59.810 [DEBUG] [Thread-71627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:58:59.810 [DEBUG] [Thread-71627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:58:59.857 [DEBUG] [Thread-71627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:58:59.858 [DEBUG] [Thread-71627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:58:59.867 [DEBUG] [Thread-71627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:58:59.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:58:59.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:58:59.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:58:59.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:58:59.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:58:59.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:58:59.900 [DEBUG] [Thread-71627] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:59:13.601 [DEBUG] [Thread-71629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:59:28.652 [DEBUG] [Thread-71630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:59:29.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T14:59:29.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T14:59:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T14:59:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 58, 59), 23.18, 20.98, 0.0, 50.8, 21.06, 0, 0, 0, 2, 1, 0),)
2025-12-12T14:59:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:58:59
2025-12-12T14:59:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T14:59:30.860 [DEBUG] [Thread-71631] [transport.py] [_log()] starting thread (client mode): 0xf575d330
2025-12-12T14:59:30.860 [DEBUG] [Thread-71631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:59:30.880 [DEBUG] [Thread-71631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T14:59:30.880 [INFO] [Thread-71631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] client lang: <none>
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] server lang: <none>
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] kex follows: False
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] Compression: none
2025-12-12T14:59:30.881 [DEBUG] [Thread-71631] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:59:30.889 [DEBUG] [Thread-71631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:59:30.890 [DEBUG] [Thread-71631] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:59:30.890 [DEBUG] [Thread-71631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T14:59:30.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T14:59:30.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:59:30.891 [DEBUG] [Thread-71631] [transport.py] [_log()] userauth is OK
2025-12-12T14:59:30.891 [DEBUG] [Thread-71631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:59:30.891 [DEBUG] [Thread-71631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:59:30.891 [DEBUG] [Thread-71631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T14:59:30.891 [DEBUG] [Thread-71631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:59:30.914 [INFO] [Thread-71631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:59:30.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:59:31.524 [DEBUG] [Thread-71631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:59:31.524 [DEBUG] [Thread-71631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:59:31.524 [DEBUG] [Thread-71631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T14:59:31.565 [DEBUG] [Thread-71631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:59:31.565 [DEBUG] [Thread-71631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:59:31.568 [DEBUG] [Thread-71631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:59:31.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:59:31.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T14:59:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T14:59:31.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T14:59:31.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:59:31.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T14:59:31.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:59:31.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:59:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T14:59:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.541066 -999.00  +20.60  56.43     27   +1.30 1 1 2 1 1   888    0 16.30 -82.55 ----- 43.1 56.4 311.0 70.3 24.6 -27.1 24.2 -25.6 24.7 -25.9 25.4 -23.6
2025-12-12T14:59:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T14:59:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T14:59:31.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.541066
2025-12-12T14:59:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T14:59:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T14:59:31.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T14:59:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T14:59:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T14:59:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:58:59', tmtdew=23.18, humidity=20.98, cloud=0.0, wind=50.8, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:59:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T14:59:31.596 [DEBUG] [Thread-71631] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:59:31.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T14:59:31.690 [DEBUG] [Thread-71634] [transport.py] [_log()] starting thread (client mode): 0xf572cc10
2025-12-12T14:59:31.690 [DEBUG] [Thread-71634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T14:59:31.707 [DEBUG] [Thread-71634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T14:59:31.707 [INFO] [Thread-71634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T14:59:31.714 [DEBUG] [Thread-71634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T14:59:31.714 [DEBUG] [Thread-71634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] client lang: <none>
2025-12-12T14:59:31.715 [DEBUG] [Thread-71634] [transport.py] [_log()] server lang: <none>
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] kex follows: False
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] Compression: none
2025-12-12T14:59:31.716 [DEBUG] [Thread-71634] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T14:59:31.774 [DEBUG] [Thread-71634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T14:59:31.774 [DEBUG] [Thread-71634] [transport.py] [_log()] Switch to new keys ...
2025-12-12T14:59:31.775 [DEBUG] [Thread-71634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T14:59:31.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T14:59:31.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T14:59:31.830 [DEBUG] [Thread-71634] [transport.py] [_log()] userauth is OK
2025-12-12T14:59:31.830 [DEBUG] [Thread-71634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T14:59:31.830 [DEBUG] [Thread-71634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T14:59:31.830 [DEBUG] [Thread-71634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T14:59:31.830 [DEBUG] [Thread-71634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T14:59:31.853 [INFO] [Thread-71634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T14:59:31.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T14:59:31.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T14:59:32.697 [DEBUG] [Thread-71634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T14:59:32.697 [DEBUG] [Thread-71634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T14:59:32.746 [DEBUG] [Thread-71634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T14:59:32.746 [DEBUG] [Thread-71634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T14:59:32.755 [DEBUG] [Thread-71634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T14:59:32.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T14:59:32.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T14:59:32.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T14:59:32.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T14:59:32.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T14:59:32.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T14:59:32.787 [DEBUG] [Thread-71634] [transport.py] [_log()] EOF in transport thread
2025-12-12T14:59:43.681 [DEBUG] [Thread-71636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:59:49.125 [DEBUG] [Thread-71637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:59:57.079 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:59:57.080 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T14:59:58.725 [DEBUG] [Thread-71638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:02.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:00:02.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:00:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:00:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 14, 59, 31), 22.92, 21.33, 0.0, 51.64, 20.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:00:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 14:59:31
2025-12-12T15:00:03.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:00:03.774 [DEBUG] [Thread-71639] [transport.py] [_log()] starting thread (client mode): 0xf575ee90
2025-12-12T15:00:03.775 [DEBUG] [Thread-71639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:00:03.790 [DEBUG] [Thread-71639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:00:03.791 [INFO] [Thread-71639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] client lang: <none>
2025-12-12T15:00:03.794 [DEBUG] [Thread-71639] [transport.py] [_log()] server lang: <none>
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] kex follows: False
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] Compression: none
2025-12-12T15:00:03.795 [DEBUG] [Thread-71639] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:00:03.810 [DEBUG] [Thread-71639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:00:03.811 [DEBUG] [Thread-71639] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:00:03.811 [DEBUG] [Thread-71639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:00:03.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:00:03.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:00:03.813 [DEBUG] [Thread-71639] [transport.py] [_log()] userauth is OK
2025-12-12T15:00:03.813 [DEBUG] [Thread-71639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:00:03.813 [DEBUG] [Thread-71639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:00:03.813 [DEBUG] [Thread-71639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:00:03.813 [DEBUG] [Thread-71639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:00:03.838 [INFO] [Thread-71639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:00:03.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:00:04.723 [DEBUG] [Thread-71639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:00:04.723 [DEBUG] [Thread-71639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:00:04.723 [DEBUG] [Thread-71639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:00:04.765 [DEBUG] [Thread-71639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:00:04.765 [DEBUG] [Thread-71639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:00:04.767 [DEBUG] [Thread-71639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:00:04.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:00:04.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:00:04.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:00:04.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:00:04.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:00:04.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:00:04.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.541413 -999.00  +20.60  48.97     28   +1.50 1 1 2 1 1   888    0 16.98 -71.63 ----- 49.7 49.0 313.0 56.2 24.6 -26.7 24.2 -25.5 24.6 -23.5 25.3 -24.0
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.541413
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:00:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T14:59:31', tmtdew=22.92, humidity=21.33, cloud=0.0, wind=51.64, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T12:59:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:00:04.816 [DEBUG] [Thread-71639] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:00:04.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:00:04.902 [DEBUG] [Thread-71642] [transport.py] [_log()] starting thread (client mode): 0xf570e080
2025-12-12T15:00:04.902 [DEBUG] [Thread-71642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:00:04.919 [DEBUG] [Thread-71642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:00:04.919 [INFO] [Thread-71642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] client lang: <none>
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] server lang: <none>
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] kex follows: False
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:00:04.926 [DEBUG] [Thread-71642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:00:04.927 [DEBUG] [Thread-71642] [transport.py] [_log()] Compression: none
2025-12-12T15:00:04.927 [DEBUG] [Thread-71642] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:00:04.984 [DEBUG] [Thread-71642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:00:04.984 [DEBUG] [Thread-71642] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:00:04.984 [DEBUG] [Thread-71642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:00:04.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:00:04.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:00:05.046 [DEBUG] [Thread-71642] [transport.py] [_log()] userauth is OK
2025-12-12T15:00:05.046 [DEBUG] [Thread-71642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:00:05.046 [DEBUG] [Thread-71642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:00:05.046 [DEBUG] [Thread-71642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:00:05.046 [DEBUG] [Thread-71642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:00:05.060 [INFO] [Thread-71642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:00:05.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:00:05.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:00:05.932 [DEBUG] [Thread-71642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:00:05.932 [DEBUG] [Thread-71642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:00:05.980 [DEBUG] [Thread-71642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:00:05.980 [DEBUG] [Thread-71642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:00:05.989 [DEBUG] [Thread-71642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:00:05.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:00:05.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:00:06.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:00:06.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:00:06.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:00:06.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:00:06.020 [DEBUG] [Thread-71642] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:00:13.759 [DEBUG] [Thread-71644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:28.805 [DEBUG] [Thread-71645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:36.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:00:36.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:00:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:00:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 0, 3), 22.22, 22.36, 0.0, 52.31, 20.59, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:00:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:00:03
2025-12-12T15:00:36.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:00:37.107 [DEBUG] [Thread-71646] [transport.py] [_log()] starting thread (client mode): 0xf81f0670
2025-12-12T15:00:37.107 [DEBUG] [Thread-71646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:00:37.127 [DEBUG] [Thread-71646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:00:37.128 [INFO] [Thread-71646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] client lang: <none>
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] server lang: <none>
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] kex follows: False
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] Compression: none
2025-12-12T15:00:37.131 [DEBUG] [Thread-71646] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:00:37.146 [DEBUG] [Thread-71646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:00:37.146 [DEBUG] [Thread-71646] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:00:37.146 [DEBUG] [Thread-71646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:00:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:00:37.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:00:37.147 [DEBUG] [Thread-71646] [transport.py] [_log()] userauth is OK
2025-12-12T15:00:37.147 [DEBUG] [Thread-71646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:00:37.147 [DEBUG] [Thread-71646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:00:37.147 [DEBUG] [Thread-71646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:00:37.147 [DEBUG] [Thread-71646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:00:37.176 [INFO] [Thread-71646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:00:37.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:00:37.820 [DEBUG] [Thread-71646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:00:37.820 [DEBUG] [Thread-71646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:00:37.820 [DEBUG] [Thread-71646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:00:37.860 [DEBUG] [Thread-71646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:00:37.861 [DEBUG] [Thread-71646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:00:37.863 [DEBUG] [Thread-71646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:00:37.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:00:37.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:00:37.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:00:37.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:00:37.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:00:37.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:00:37.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:00:37.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:00:37.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.541760 -999.00  +21.00  44.01     28   +1.90 1 1 2 1 1   888    0 17.42 -60.22 ----- 36.0 44.0 309.8 57.1 24.7 -24.8 24.3 -24.6 24.8 -24.8 25.4 -23.0
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.541760
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:00:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:00:03', tmtdew=22.22, humidity=22.36, cloud=0.0, wind=52.31, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:00:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:00:37.882 [DEBUG] [Thread-71646] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:00:37.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:00:37.967 [DEBUG] [Thread-71649] [transport.py] [_log()] starting thread (client mode): 0xf570c5b0
2025-12-12T15:00:37.967 [DEBUG] [Thread-71649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:00:37.982 [DEBUG] [Thread-71649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:00:37.982 [INFO] [Thread-71649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] client lang: <none>
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] server lang: <none>
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] kex follows: False
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] Compression: none
2025-12-12T15:00:37.990 [DEBUG] [Thread-71649] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:00:38.047 [DEBUG] [Thread-71649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:00:38.048 [DEBUG] [Thread-71649] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:00:38.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:00:38.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:00:38.048 [DEBUG] [Thread-71649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:00:38.106 [DEBUG] [Thread-71649] [transport.py] [_log()] userauth is OK
2025-12-12T15:00:38.106 [DEBUG] [Thread-71649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:00:38.106 [DEBUG] [Thread-71649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:00:38.106 [DEBUG] [Thread-71649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:00:38.106 [DEBUG] [Thread-71649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:00:38.123 [INFO] [Thread-71649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:00:38.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:00:38.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:00:38.989 [DEBUG] [Thread-71649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:00:38.989 [DEBUG] [Thread-71649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:00:39.037 [DEBUG] [Thread-71649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:00:39.037 [DEBUG] [Thread-71649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:00:39.045 [DEBUG] [Thread-71649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:00:39.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:00:39.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:00:39.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:00:39.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:00:39.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:00:39.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:00:39.078 [DEBUG] [Thread-71649] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:00:43.836 [DEBUG] [Thread-71651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:49.174 [DEBUG] [Thread-71652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:57.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:57.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:00:58.879 [DEBUG] [Thread-71653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:09.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:01:09.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:01:09.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:01:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 0, 35), 21.8, 22.94, 0.0, 48.15, 20.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:01:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:00:35
2025-12-12T15:01:09.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:01:10.117 [DEBUG] [Thread-71654] [transport.py] [_log()] starting thread (client mode): 0xf81c34f0
2025-12-12T15:01:10.117 [DEBUG] [Thread-71654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:01:10.138 [DEBUG] [Thread-71654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:01:10.138 [INFO] [Thread-71654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:01:10.141 [DEBUG] [Thread-71654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:01:10.141 [DEBUG] [Thread-71654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:01:10.141 [DEBUG] [Thread-71654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] client lang: <none>
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] server lang: <none>
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] kex follows: False
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] Compression: none
2025-12-12T15:01:10.142 [DEBUG] [Thread-71654] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:01:10.157 [DEBUG] [Thread-71654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:01:10.158 [DEBUG] [Thread-71654] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:01:10.158 [DEBUG] [Thread-71654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:01:10.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:01:10.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:01:10.158 [DEBUG] [Thread-71654] [transport.py] [_log()] userauth is OK
2025-12-12T15:01:10.158 [DEBUG] [Thread-71654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:01:10.159 [DEBUG] [Thread-71654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:01:10.159 [DEBUG] [Thread-71654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:01:10.159 [DEBUG] [Thread-71654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:01:10.168 [INFO] [Thread-71654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:01:10.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:01:10.944 [DEBUG] [Thread-71654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:01:10.945 [DEBUG] [Thread-71654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:01:10.945 [DEBUG] [Thread-71654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:01:10.986 [DEBUG] [Thread-71654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:01:10.986 [DEBUG] [Thread-71654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:01:10.989 [DEBUG] [Thread-71654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:01:10.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:01:10.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:01:10.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:01:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:01:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:01:11.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:01:11.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:01:11.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:01:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:01:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.542108 -999.00  +21.60  41.09     27   +2.20 1 1 2 1 1   888    0 17.64 -51.18 ----- 38.6 41.1 313.6 43.2 24.8 -25.7 24.4 -24.9 24.9 -23.0 25.6 -22.8
2025-12-12T15:01:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:01:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:01:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.542108
2025-12-12T15:01:11.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:01:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:01:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:01:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:01:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:01:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:00:35', tmtdew=21.8, humidity=22.94, cloud=0.0, wind=48.15, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:00:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:01:11.009 [DEBUG] [Thread-71654] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:01:11.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:01:11.107 [DEBUG] [Thread-71657] [transport.py] [_log()] starting thread (client mode): 0xfabc6b00
2025-12-12T15:01:11.107 [DEBUG] [Thread-71657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:01:11.122 [DEBUG] [Thread-71657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:01:11.122 [INFO] [Thread-71657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:01:11.129 [DEBUG] [Thread-71657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] client lang: <none>
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] server lang: <none>
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] kex follows: False
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] Compression: none
2025-12-12T15:01:11.130 [DEBUG] [Thread-71657] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:01:11.193 [DEBUG] [Thread-71657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:01:11.193 [DEBUG] [Thread-71657] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:01:11.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:01:11.194 [DEBUG] [Thread-71657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:01:11.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:01:11.249 [DEBUG] [Thread-71657] [transport.py] [_log()] userauth is OK
2025-12-12T15:01:11.249 [DEBUG] [Thread-71657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:01:11.249 [DEBUG] [Thread-71657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:01:11.250 [DEBUG] [Thread-71657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:01:11.250 [DEBUG] [Thread-71657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:01:11.267 [INFO] [Thread-71657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:01:11.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:01:11.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:01:12.103 [DEBUG] [Thread-71657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:01:12.103 [DEBUG] [Thread-71657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:01:12.151 [DEBUG] [Thread-71657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:01:12.151 [DEBUG] [Thread-71657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:01:12.160 [DEBUG] [Thread-71657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:01:12.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:01:12.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:01:12.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:01:12.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:01:12.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:01:12.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:01:12.194 [DEBUG] [Thread-71657] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:01:13.906 [DEBUG] [Thread-71659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:28.952 [DEBUG] [Thread-71660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:42.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:01:42.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:01: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
2025-12-12T15:01:42.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 1, 8), 21.74, 23.01, 0.0, 48.41, 20.5, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:01:42.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:01:08
2025-12-12T15:01:43.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:01:43.193 [DEBUG] [Thread-71661] [transport.py] [_log()] starting thread (client mode): 0xf57027a0
2025-12-12T15:01:43.194 [DEBUG] [Thread-71661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:01:43.213 [DEBUG] [Thread-71661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:01:43.213 [INFO] [Thread-71661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] client lang: <none>
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] server lang: <none>
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] kex follows: False
2025-12-12T15:01:43.217 [DEBUG] [Thread-71661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:01:43.218 [DEBUG] [Thread-71661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:01:43.218 [DEBUG] [Thread-71661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:01:43.218 [DEBUG] [Thread-71661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:01:43.218 [DEBUG] [Thread-71661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:01:43.218 [DEBUG] [Thread-71661] [transport.py] [_log()] Compression: none
2025-12-12T15:01:43.218 [DEBUG] [Thread-71661] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:01:43.235 [DEBUG] [Thread-71661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:01:43.236 [DEBUG] [Thread-71661] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:01:43.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:01:43.237 [DEBUG] [Thread-71661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:01:43.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:01:43.239 [DEBUG] [Thread-71661] [transport.py] [_log()] userauth is OK
2025-12-12T15:01:43.239 [DEBUG] [Thread-71661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:01:43.239 [DEBUG] [Thread-71661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:01:43.239 [DEBUG] [Thread-71661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:01:43.239 [DEBUG] [Thread-71661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:01:43.256 [INFO] [Thread-71661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:01:43.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:01:43.869 [DEBUG] [Thread-71661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:01:43.869 [DEBUG] [Thread-71661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:01:43.869 [DEBUG] [Thread-71661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:01:43.910 [DEBUG] [Thread-71661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:01:43.910 [DEBUG] [Thread-71661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:01:43.912 [DEBUG] [Thread-71661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:01:43.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:01:43.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:01:43.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:01:43.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:01:43.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:01:43.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:01:43.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:01:43.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:01:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:01:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.542455 -999.00  +21.10  50.34     27   +1.80 1 1 2 1 1   888    0 17.32 -50.39 ----- 58.8 50.3 319.0 62.3 24.8 -26.5 24.4 -26.4 24.7 -29.5 25.6 -24.2
2025-12-12T15:01:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:01:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:01:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.542455
2025-12-12T15:01:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:01:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:01:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:01:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:01:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:01:43.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:01:08', tmtdew=21.74, humidity=23.01, cloud=0.0, wind=48.41, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:01:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:01:43.937 [DEBUG] [Thread-71661] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:01:43.983 [DEBUG] [Thread-71664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:44.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:01:44.033 [DEBUG] [Thread-71665] [transport.py] [_log()] starting thread (client mode): 0xf5702f50
2025-12-12T15:01:44.033 [DEBUG] [Thread-71665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:01:44.048 [DEBUG] [Thread-71665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:01:44.048 [INFO] [Thread-71665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] client lang: <none>
2025-12-12T15:01:44.056 [DEBUG] [Thread-71665] [transport.py] [_log()] server lang: <none>
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] kex follows: False
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] Compression: none
2025-12-12T15:01:44.057 [DEBUG] [Thread-71665] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:01:44.112 [DEBUG] [Thread-71665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:01:44.113 [DEBUG] [Thread-71665] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:01:44.113 [DEBUG] [Thread-71665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:01:44.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:01:44.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:01:44.170 [DEBUG] [Thread-71665] [transport.py] [_log()] userauth is OK
2025-12-12T15:01:44.170 [DEBUG] [Thread-71665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:01:44.170 [DEBUG] [Thread-71665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:01:44.170 [DEBUG] [Thread-71665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:01:44.170 [DEBUG] [Thread-71665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:01:44.192 [INFO] [Thread-71665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:01:44.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:01:44.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:01:45.007 [DEBUG] [Thread-71665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:01:45.007 [DEBUG] [Thread-71665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:01:45.055 [DEBUG] [Thread-71665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:01:45.055 [DEBUG] [Thread-71665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:01:45.064 [DEBUG] [Thread-71665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:01:45.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:01:45.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:01:45.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:01:45.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:01:45.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:01:45.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:01:45.100 [DEBUG] [Thread-71665] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:01:49.233 [DEBUG] [Thread-71667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:57.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:57.358 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:01:59.015 [DEBUG] [Thread-71668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:14.047 [DEBUG] [Thread-71669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:15.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:02:15.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:02:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:02:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 2, 12), 21.82, 22.92, 0.0, 55.54, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:02:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:02:12
2025-12-12T15:02:15.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:02:16.081 [DEBUG] [Thread-71670] [transport.py] [_log()] starting thread (client mode): 0xf5701e40
2025-12-12T15:02:16.082 [DEBUG] [Thread-71670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:02:16.102 [DEBUG] [Thread-71670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:02:16.102 [INFO] [Thread-71670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] client lang: <none>
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] server lang: <none>
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] kex follows: False
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] Compression: none
2025-12-12T15:02:16.106 [DEBUG] [Thread-71670] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:02:16.124 [DEBUG] [Thread-71670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:02:16.124 [DEBUG] [Thread-71670] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:02:16.125 [DEBUG] [Thread-71670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:02:16.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:02:16.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:02:16.126 [DEBUG] [Thread-71670] [transport.py] [_log()] userauth is OK
2025-12-12T15:02:16.127 [DEBUG] [Thread-71670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:02:16.127 [DEBUG] [Thread-71670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:02:16.127 [DEBUG] [Thread-71670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:02:16.127 [DEBUG] [Thread-71670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:02:16.150 [INFO] [Thread-71670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:02:16.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:02:16.897 [DEBUG] [Thread-71670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:02:16.897 [DEBUG] [Thread-71670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:02:16.898 [DEBUG] [Thread-71670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:02:16.939 [DEBUG] [Thread-71670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:02:16.939 [DEBUG] [Thread-71670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:02:16.942 [DEBUG] [Thread-71670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:02:16.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:02:16.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:02:16.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:02:16.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:02:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:02:16.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:02:16.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:02:16.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:02:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:02:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.542802 -999.00  +20.30  48.61     29   +1.70 1 1 2 1 1   888    0 17.30 -47.87 ----- 48.8 48.6 307.6 66.8 24.7 -26.1 24.3 -26.3 24.9 -25.4 25.4 -24.1
2025-12-12T15:02:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:02:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:02:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.542802
2025-12-12T15:02:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:02:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:02:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:02:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:02:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:02:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:02:12', tmtdew=21.82, humidity=22.92, cloud=0.0, wind=55.54, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:01:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:02:16.971 [DEBUG] [Thread-71670] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:02:17.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:02:17.067 [DEBUG] [Thread-71673] [transport.py] [_log()] starting thread (client mode): 0xf575f310
2025-12-12T15:02:17.067 [DEBUG] [Thread-71673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:02:17.082 [DEBUG] [Thread-71673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:02:17.082 [INFO] [Thread-71673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:02:17.089 [DEBUG] [Thread-71673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] client lang: <none>
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] server lang: <none>
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] kex follows: False
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] Compression: none
2025-12-12T15:02:17.090 [DEBUG] [Thread-71673] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:02:17.153 [DEBUG] [Thread-71673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:02:17.153 [DEBUG] [Thread-71673] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:02:17.154 [DEBUG] [Thread-71673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:02:17.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:02:17.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:02:17.209 [DEBUG] [Thread-71673] [transport.py] [_log()] userauth is OK
2025-12-12T15:02:17.210 [DEBUG] [Thread-71673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:02:17.210 [DEBUG] [Thread-71673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:02:17.210 [DEBUG] [Thread-71673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:02:17.210 [DEBUG] [Thread-71673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:02:17.229 [INFO] [Thread-71673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:02:17.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:02:17.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:02:18.075 [DEBUG] [Thread-71673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:02:18.075 [DEBUG] [Thread-71673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:02:18.124 [DEBUG] [Thread-71673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:02:18.124 [DEBUG] [Thread-71673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:02:18.133 [DEBUG] [Thread-71673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:02:18.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:02:18.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:02:18.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:02:18.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:02:18.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:02:18.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:02:18.167 [DEBUG] [Thread-71673] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:02:29.075 [DEBUG] [Thread-71675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:44.123 [DEBUG] [Thread-71676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:02:48.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:02: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
2025-12-12T15:02:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 2, 44), 23.05, 21.12, 0.0, 53.66, 20.11, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:02:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:02:44
2025-12-12T15:02:48.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:02:49.121 [DEBUG] [Thread-71677] [transport.py] [_log()] starting thread (client mode): 0xf81f28f0
2025-12-12T15:02:49.121 [DEBUG] [Thread-71677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:02:49.141 [DEBUG] [Thread-71677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:02:49.141 [INFO] [Thread-71677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:02:49.144 [DEBUG] [Thread-71677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:02:49.144 [DEBUG] [Thread-71677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:02:49.144 [DEBUG] [Thread-71677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] client lang: <none>
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] server lang: <none>
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] kex follows: False
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] Compression: none
2025-12-12T15:02:49.145 [DEBUG] [Thread-71677] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:02:49.164 [DEBUG] [Thread-71677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:02:49.165 [DEBUG] [Thread-71677] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:02:49.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:02:49.165 [DEBUG] [Thread-71677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:02:49.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:02:49.167 [DEBUG] [Thread-71677] [transport.py] [_log()] userauth is OK
2025-12-12T15:02:49.168 [DEBUG] [Thread-71677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:02:49.168 [DEBUG] [Thread-71677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:02:49.168 [DEBUG] [Thread-71677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:02:49.168 [DEBUG] [Thread-71677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:02:49.192 [INFO] [Thread-71677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:02:49.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:02:49.295 [DEBUG] [Thread-71679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:49.843 [DEBUG] [Thread-71677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:02:49.844 [DEBUG] [Thread-71677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:02:49.844 [DEBUG] [Thread-71677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:02:49.886 [DEBUG] [Thread-71677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:02:49.886 [DEBUG] [Thread-71677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:02:49.889 [DEBUG] [Thread-71677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:02:49.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:02:49.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:02:49.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:02:49.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:02:49.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:02:49.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:02:49.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:02:49.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:02:49.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:02:49.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.543150 -999.00  +20.90  63.09     26   +1.10 1 1 3 1 1   888    0 17.55 -47.51 ----- 55.7 63.1 312.4 81.3 24.7 -25.0 24.4 -26.0 24.9 -22.7 25.5 -23.2
2025-12-12T15:02:49.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:02:49.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:02:49.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.543150
2025-12-12T15:02:49.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:02:49.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:02:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:02:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:02:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:02:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:02:44', tmtdew=23.05, humidity=21.12, cloud=0.0, wind=53.66, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:02:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:02:49.914 [DEBUG] [Thread-71677] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:02:49.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:02:50.009 [DEBUG] [Thread-71681] [transport.py] [_log()] starting thread (client mode): 0xf813d240
2025-12-12T15:02:50.009 [DEBUG] [Thread-71681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:02:50.024 [DEBUG] [Thread-71681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:02:50.024 [INFO] [Thread-71681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:02:50.032 [DEBUG] [Thread-71681] [transport.py] [_log()] client lang: <none>
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] server lang: <none>
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] kex follows: False
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] Compression: none
2025-12-12T15:02:50.033 [DEBUG] [Thread-71681] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:02:50.090 [DEBUG] [Thread-71681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:02:50.091 [DEBUG] [Thread-71681] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:02:50.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:02:50.092 [DEBUG] [Thread-71681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:02:50.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:02:50.149 [DEBUG] [Thread-71681] [transport.py] [_log()] userauth is OK
2025-12-12T15:02:50.149 [DEBUG] [Thread-71681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:02:50.149 [DEBUG] [Thread-71681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:02:50.149 [DEBUG] [Thread-71681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:02:50.149 [DEBUG] [Thread-71681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:02:50.168 [INFO] [Thread-71681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:02:50.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:02:50.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:02:51.045 [DEBUG] [Thread-71681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:02:51.045 [DEBUG] [Thread-71681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:02:51.093 [DEBUG] [Thread-71681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:02:51.093 [DEBUG] [Thread-71681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:02:51.102 [DEBUG] [Thread-71681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:02:51.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:02:51.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:02:51.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:02:51.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:02:51.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:02:51.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:02:51.137 [DEBUG] [Thread-71681] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:02:57.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:57.499 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:02:59.154 [DEBUG] [Thread-71683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:14.206 [DEBUG] [Thread-71684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:21.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:03:21.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:03:21.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:03:21.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 3, 16), 23.16, 20.98, 0.0, 50.57, 20.25, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:03:21.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:03:16
2025-12-12T15:03:21.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:03:22.084 [DEBUG] [Thread-71685] [transport.py] [_log()] starting thread (client mode): 0xf813f070
2025-12-12T15:03:22.084 [DEBUG] [Thread-71685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:03:22.102 [DEBUG] [Thread-71685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:03:22.103 [INFO] [Thread-71685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] client lang: <none>
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] server lang: <none>
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] kex follows: False
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] Compression: none
2025-12-12T15:03:22.106 [DEBUG] [Thread-71685] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:03:22.123 [DEBUG] [Thread-71685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:03:22.123 [DEBUG] [Thread-71685] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:03:22.123 [DEBUG] [Thread-71685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:03:22.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:03:22.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:03:22.124 [DEBUG] [Thread-71685] [transport.py] [_log()] userauth is OK
2025-12-12T15:03:22.125 [DEBUG] [Thread-71685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:03:22.125 [DEBUG] [Thread-71685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:03:22.125 [DEBUG] [Thread-71685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:03:22.125 [DEBUG] [Thread-71685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:03:22.137 [INFO] [Thread-71685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:03:22.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:03:22.896 [DEBUG] [Thread-71685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:03:22.896 [DEBUG] [Thread-71685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:03:22.897 [DEBUG] [Thread-71685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:03:22.938 [DEBUG] [Thread-71685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:03:22.938 [DEBUG] [Thread-71685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:03:22.940 [DEBUG] [Thread-71685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:03:22.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:03:22.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:03:22.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:03:22.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:03:22.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:03:22.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:03:22.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:03:22.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.543497 -999.00  +20.60  51.72     26   +0.40 1 1 2 1 1   888    0 17.79 -41.39 ----- 49.4 51.7 298.4 72.3 24.7 -25.7 24.4 -26.0 24.7 -22.8 25.4 -24.0
2025-12-12T15:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.543497
2025-12-12T15:03:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:03:22.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:03:22.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:03:22.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:03:22.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:03:22.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:03:16', tmtdew=23.16, humidity=20.98, cloud=0.0, wind=50.57, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:02:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:03:22.963 [DEBUG] [Thread-71685] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:03:23.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:03:23.067 [DEBUG] [Thread-71688] [transport.py] [_log()] starting thread (client mode): 0xf575df30
2025-12-12T15:03:23.067 [DEBUG] [Thread-71688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:03:23.083 [DEBUG] [Thread-71688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:03:23.083 [INFO] [Thread-71688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:03:23.090 [DEBUG] [Thread-71688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:03:23.090 [DEBUG] [Thread-71688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:03:23.090 [DEBUG] [Thread-71688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:03:23.090 [DEBUG] [Thread-71688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] client lang: <none>
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] server lang: <none>
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] kex follows: False
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:03:23.091 [DEBUG] [Thread-71688] [transport.py] [_log()] Compression: none
2025-12-12T15:03:23.092 [DEBUG] [Thread-71688] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:03:23.150 [DEBUG] [Thread-71688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:03:23.151 [DEBUG] [Thread-71688] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:03:23.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:03:23.152 [DEBUG] [Thread-71688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:03:23.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:03:23.209 [DEBUG] [Thread-71688] [transport.py] [_log()] userauth is OK
2025-12-12T15:03:23.209 [DEBUG] [Thread-71688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:03:23.209 [DEBUG] [Thread-71688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:03:23.209 [DEBUG] [Thread-71688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:03:23.209 [DEBUG] [Thread-71688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:03:23.229 [INFO] [Thread-71688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:03:23.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:03:23.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:03:24.071 [DEBUG] [Thread-71688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:03:24.071 [DEBUG] [Thread-71688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:03:24.119 [DEBUG] [Thread-71688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:03:24.119 [DEBUG] [Thread-71688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:03:24.128 [DEBUG] [Thread-71688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:03:24.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:03:24.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:03:24.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:03:24.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:03:24.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:03:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:03:24.163 [DEBUG] [Thread-71688] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:03:29.233 [DEBUG] [Thread-71690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:44.279 [DEBUG] [Thread-71691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:49.342 [DEBUG] [Thread-71692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:03:54.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:03:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:03:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 3, 48), 24.72, 18.82, 0.0, 49.35, 20.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:03:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:03:48
2025-12-12T15:03:55.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:03:55.181 [DEBUG] [Thread-71693] [transport.py] [_log()] starting thread (client mode): 0xf81e6050
2025-12-12T15:03:55.181 [DEBUG] [Thread-71693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:03:55.202 [DEBUG] [Thread-71693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:03:55.202 [INFO] [Thread-71693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] client lang: <none>
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] server lang: <none>
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] kex follows: False
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] Compression: none
2025-12-12T15:03:55.205 [DEBUG] [Thread-71693] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:03:55.222 [DEBUG] [Thread-71693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:03:55.222 [DEBUG] [Thread-71693] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:03:55.222 [DEBUG] [Thread-71693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:03:55.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:03:55.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:03:55.223 [DEBUG] [Thread-71693] [transport.py] [_log()] userauth is OK
2025-12-12T15:03:55.223 [DEBUG] [Thread-71693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:03:55.223 [DEBUG] [Thread-71693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:03:55.223 [DEBUG] [Thread-71693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:03:55.223 [DEBUG] [Thread-71693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:03:55.243 [INFO] [Thread-71693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:03:55.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:03:55.896 [DEBUG] [Thread-71693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:03:55.897 [DEBUG] [Thread-71693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:03:55.897 [DEBUG] [Thread-71693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:03:55.938 [DEBUG] [Thread-71693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:03:55.938 [DEBUG] [Thread-71693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:03:55.941 [DEBUG] [Thread-71693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:03:55.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:03:55.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:03:55.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:03:55.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:03:55.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:03:55.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:03:55.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:03:55.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:03:55.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:03:55.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.544191 -999.00  +20.60  49.80     23   -0.80 1 1 2 1 1   888    0 18.95 -7.04 ----- 62.8 49.8 315.3 67.7 24.6 -25.5 24.2 -26.5 24.8 -25.3 25.3 -23.7
2025-12-12T15:03:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:03:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:03:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.544191
2025-12-12T15:03:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:03:55.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:03:55.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:03:55.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:03:55.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:03:55.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:03:48', tmtdew=24.72, humidity=18.82, cloud=0.0, wind=49.35, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:03:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:03:55.968 [DEBUG] [Thread-71693] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:03:56.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:03:56.065 [DEBUG] [Thread-71696] [transport.py] [_log()] starting thread (client mode): 0xf81f0ee0
2025-12-12T15:03:56.065 [DEBUG] [Thread-71696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:03:56.079 [DEBUG] [Thread-71696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:03:56.079 [INFO] [Thread-71696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] client lang: <none>
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] server lang: <none>
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] kex follows: False
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:03:56.087 [DEBUG] [Thread-71696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:03:56.088 [DEBUG] [Thread-71696] [transport.py] [_log()] Compression: none
2025-12-12T15:03:56.088 [DEBUG] [Thread-71696] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:03:56.147 [DEBUG] [Thread-71696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:03:56.148 [DEBUG] [Thread-71696] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:03:56.148 [DEBUG] [Thread-71696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:03:56.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:03:56.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:03:56.205 [DEBUG] [Thread-71696] [transport.py] [_log()] userauth is OK
2025-12-12T15:03:56.205 [DEBUG] [Thread-71696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:03:56.205 [DEBUG] [Thread-71696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:03:56.205 [DEBUG] [Thread-71696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:03:56.206 [DEBUG] [Thread-71696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:03:56.225 [INFO] [Thread-71696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:03:56.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:03:56.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:03:57.060 [DEBUG] [Thread-71696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:03:57.060 [DEBUG] [Thread-71696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:03:57.108 [DEBUG] [Thread-71696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:03:57.108 [DEBUG] [Thread-71696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:03:57.117 [DEBUG] [Thread-71696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:03:57.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:03:57.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:03:57.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:03:57.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:03:57.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:03:57.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:03:57.152 [DEBUG] [Thread-71696] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:03:57.638 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:57.638 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:03:59.307 [DEBUG] [Thread-71698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:14.355 [DEBUG] [Thread-71699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:04:27.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:04:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:04:27.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 4, 20), 24.77, 18.77, 0.0, 50.96, 21.01, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:04:27.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:04:20
2025-12-12T15:04:27.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:04:28.151 [DEBUG] [Thread-71700] [transport.py] [_log()] starting thread (client mode): 0xf81e65c0
2025-12-12T15:04:28.151 [DEBUG] [Thread-71700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:04:28.171 [DEBUG] [Thread-71700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:04:28.172 [INFO] [Thread-71700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] client lang: <none>
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] server lang: <none>
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] kex follows: False
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] Compression: none
2025-12-12T15:04:28.175 [DEBUG] [Thread-71700] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:04:28.193 [DEBUG] [Thread-71700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:04:28.193 [DEBUG] [Thread-71700] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:04:28.193 [DEBUG] [Thread-71700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:04:28.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:04:28.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:04:28.194 [DEBUG] [Thread-71700] [transport.py] [_log()] userauth is OK
2025-12-12T15:04:28.194 [DEBUG] [Thread-71700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:04:28.194 [DEBUG] [Thread-71700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:04:28.194 [DEBUG] [Thread-71700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:04:28.194 [DEBUG] [Thread-71700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:04:28.213 [INFO] [Thread-71700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:04:28.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:04:29.004 [DEBUG] [Thread-71700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:04:29.004 [DEBUG] [Thread-71700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:04:29.004 [DEBUG] [Thread-71700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:04:29.044 [DEBUG] [Thread-71700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:04:29.044 [DEBUG] [Thread-71700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:04:29.047 [DEBUG] [Thread-71700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:04:29.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:04:29.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:04:29.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:04:29.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:04:29.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:04:29.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:04:29.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.544538 -999.00  +19.60  58.11     24   -1.20 1 1 2 1 1   888    0 19.52 9.84 ----- 55.4 58.1 313.8 68.8 24.4 -27.0 24.0 -26.8 24.6 -23.6 25.1 -25.9
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.544538
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:04:29.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:04:20', tmtdew=24.77, humidity=18.77, cloud=0.0, wind=50.96, temperature=21.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:04:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:04:29.065 [DEBUG] [Thread-71700] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:04:29.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:04:29.152 [DEBUG] [Thread-71703] [transport.py] [_log()] starting thread (client mode): 0xf81f0670
2025-12-12T15:04:29.152 [DEBUG] [Thread-71703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:04:29.167 [DEBUG] [Thread-71703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:04:29.167 [INFO] [Thread-71703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:04:29.174 [DEBUG] [Thread-71703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:04:29.174 [DEBUG] [Thread-71703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] client lang: <none>
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] server lang: <none>
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] kex follows: False
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] Compression: none
2025-12-12T15:04:29.175 [DEBUG] [Thread-71703] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:04:29.232 [DEBUG] [Thread-71703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:04:29.232 [DEBUG] [Thread-71703] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:04:29.232 [DEBUG] [Thread-71703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:04:29.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:04:29.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:04:29.289 [DEBUG] [Thread-71703] [transport.py] [_log()] userauth is OK
2025-12-12T15:04:29.289 [DEBUG] [Thread-71703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:04:29.289 [DEBUG] [Thread-71703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:04:29.289 [DEBUG] [Thread-71703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:04:29.289 [DEBUG] [Thread-71703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:04:29.303 [INFO] [Thread-71703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:04:29.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:04:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:04:29.380 [DEBUG] [Thread-71705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:30.153 [DEBUG] [Thread-71703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:04:30.153 [DEBUG] [Thread-71703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:04:30.200 [DEBUG] [Thread-71703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:04:30.201 [DEBUG] [Thread-71703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:04:30.209 [DEBUG] [Thread-71703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:04:30.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:04:30.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:04:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:04:30.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:04:30.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:04:30.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:04:30.240 [DEBUG] [Thread-71703] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:04:44.414 [DEBUG] [Thread-71706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:49.392 [DEBUG] [Thread-71707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:57.779 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:57.780 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:04:59.450 [DEBUG] [Thread-71708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:05:00.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:05:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:05:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 4, 52), 25.3, 17.79, 0.0, 57.45, 20.88, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:05:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:04:52
2025-12-12T15:05:01.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:05:01.235 [DEBUG] [Thread-71709] [transport.py] [_log()] starting thread (client mode): 0xf5703eb0
2025-12-12T15:05:01.235 [DEBUG] [Thread-71709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:05:01.256 [DEBUG] [Thread-71709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:05:01.256 [INFO] [Thread-71709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] client lang: <none>
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] server lang: <none>
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] kex follows: False
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] Compression: none
2025-12-12T15:05:01.260 [DEBUG] [Thread-71709] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:05:01.277 [DEBUG] [Thread-71709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:05:01.278 [DEBUG] [Thread-71709] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:05:01.278 [DEBUG] [Thread-71709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:05:01.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:05:01.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:05:01.280 [DEBUG] [Thread-71709] [transport.py] [_log()] userauth is OK
2025-12-12T15:05:01.280 [DEBUG] [Thread-71709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:05:01.280 [DEBUG] [Thread-71709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:05:01.280 [DEBUG] [Thread-71709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:05:01.280 [DEBUG] [Thread-71709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:05:01.304 [INFO] [Thread-71709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:05:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:05:01.876 [DEBUG] [Thread-71709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:05:01.877 [DEBUG] [Thread-71709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:05:01.877 [DEBUG] [Thread-71709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:05:01.918 [DEBUG] [Thread-71709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:05:01.919 [DEBUG] [Thread-71709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:05:01.921 [DEBUG] [Thread-71709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:05:01.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:05:01.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:05:01.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:05:01.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:05:01.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:05:01.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:05:01.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.544886 -999.00  +20.70  59.50     24   -0.50 1 1 2 1 1   888    0 20.52 24.74 ----- 50.2 59.5 310.4 65.5 24.6 -25.3 24.1 -25.9 24.6 -23.5 25.2 -22.7
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.544886
2025-12-12T15:05:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:05:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:05:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:05:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:05:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:05:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:04:52', tmtdew=25.3, humidity=17.79, cloud=0.0, wind=57.45, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:04:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:05:01.945 [DEBUG] [Thread-71709] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:05:02.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:05:02.033 [DEBUG] [Thread-71712] [transport.py] [_log()] starting thread (client mode): 0xf81e78e0
2025-12-12T15:05:02.033 [DEBUG] [Thread-71712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:05:02.047 [DEBUG] [Thread-71712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:05:02.048 [INFO] [Thread-71712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:02.055 [DEBUG] [Thread-71712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] client lang: <none>
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] server lang: <none>
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] kex follows: False
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] Compression: none
2025-12-12T15:05:02.056 [DEBUG] [Thread-71712] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:05:02.113 [DEBUG] [Thread-71712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:05:02.113 [DEBUG] [Thread-71712] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:05:02.114 [DEBUG] [Thread-71712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:05:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:05:02.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:05:02.169 [DEBUG] [Thread-71712] [transport.py] [_log()] userauth is OK
2025-12-12T15:05:02.169 [DEBUG] [Thread-71712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:05:02.169 [DEBUG] [Thread-71712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:05:02.169 [DEBUG] [Thread-71712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:05:02.169 [DEBUG] [Thread-71712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:05:02.187 [INFO] [Thread-71712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:05:02.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:05:02.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:05:03.065 [DEBUG] [Thread-71712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:05:03.065 [DEBUG] [Thread-71712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:05:03.114 [DEBUG] [Thread-71712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:05:03.115 [DEBUG] [Thread-71712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:05:03.130 [DEBUG] [Thread-71712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:05:03.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:05:03.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:05:03.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:05:03.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:05:03.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:05:03.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:05:03.171 [DEBUG] [Thread-71712] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:05:14.482 [DEBUG] [Thread-71714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:29.536 [DEBUG] [Thread-71715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:05:33.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:05:33.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:05:33.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 5, 24), 24.75, 18.47, 0.0, 55.51, 20.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:05:33.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:05:24
2025-12-12T15:05:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:05:34.166 [DEBUG] [Thread-71716] [transport.py] [_log()] starting thread (client mode): 0xf575ff10
2025-12-12T15:05:34.166 [DEBUG] [Thread-71716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:05:34.186 [DEBUG] [Thread-71716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:05:34.186 [INFO] [Thread-71716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:34.190 [DEBUG] [Thread-71716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] client lang: <none>
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] server lang: <none>
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] kex follows: False
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] Compression: none
2025-12-12T15:05:34.191 [DEBUG] [Thread-71716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:05:34.209 [DEBUG] [Thread-71716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:05:34.210 [DEBUG] [Thread-71716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:05:34.210 [DEBUG] [Thread-71716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:05:34.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:05:34.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:05:34.212 [DEBUG] [Thread-71716] [transport.py] [_log()] userauth is OK
2025-12-12T15:05:34.212 [DEBUG] [Thread-71716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:05:34.212 [DEBUG] [Thread-71716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:05:34.212 [DEBUG] [Thread-71716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:05:34.213 [DEBUG] [Thread-71716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:05:34.229 [INFO] [Thread-71716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:05:34.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:05:34.991 [DEBUG] [Thread-71716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:05:34.991 [DEBUG] [Thread-71716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:05:34.992 [DEBUG] [Thread-71716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:05:35.032 [DEBUG] [Thread-71716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:05:35.032 [DEBUG] [Thread-71716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:05:35.034 [DEBUG] [Thread-71716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:05:35.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:05:35.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:05:35.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:05:35.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:05:35.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:05:35.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:05:35.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:05:35.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:05:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:05:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.545232 -999.00  +20.70  57.40     24   -0.40 1 1 2 1 1   888    0 20.64 42.16 ----- 40.9 57.4 322.6 68.8 24.4 -26.1 24.1 -26.1 24.8 -22.0 25.2 -23.9
2025-12-12T15:05:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:05:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:05:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.545232
2025-12-12T15:05:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:05:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:05:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:05:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:05:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:05:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:05:24', tmtdew=24.75, humidity=18.47, cloud=0.0, wind=55.51, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:05:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:05:35.055 [DEBUG] [Thread-71716] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:05:35.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:05:35.153 [DEBUG] [Thread-71719] [transport.py] [_log()] starting thread (client mode): 0xf813ca00
2025-12-12T15:05:35.153 [DEBUG] [Thread-71719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:05:35.168 [DEBUG] [Thread-71719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:05:35.168 [INFO] [Thread-71719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:05:35.175 [DEBUG] [Thread-71719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:05:35.176 [DEBUG] [Thread-71719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] client lang: <none>
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] server lang: <none>
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] kex follows: False
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] Compression: none
2025-12-12T15:05:35.177 [DEBUG] [Thread-71719] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:05:35.232 [DEBUG] [Thread-71719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:05:35.233 [DEBUG] [Thread-71719] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:05:35.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:05:35.234 [DEBUG] [Thread-71719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:05:35.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:05:35.289 [DEBUG] [Thread-71719] [transport.py] [_log()] userauth is OK
2025-12-12T15:05:35.289 [DEBUG] [Thread-71719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:05:35.289 [DEBUG] [Thread-71719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:05:35.289 [DEBUG] [Thread-71719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:05:35.289 [DEBUG] [Thread-71719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:05:35.308 [INFO] [Thread-71719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:05:35.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:05:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:05:36.143 [DEBUG] [Thread-71719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:05:36.144 [DEBUG] [Thread-71719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:05:36.192 [DEBUG] [Thread-71719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:05:36.192 [DEBUG] [Thread-71719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:05:36.201 [DEBUG] [Thread-71719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:05:36.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:05:36.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:05:36.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:05:36.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:05:36.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:05:36.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:05:36.238 [DEBUG] [Thread-71719] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:05:44.566 [DEBUG] [Thread-71721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:49.455 [DEBUG] [Thread-71722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:57.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:57.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:05:59.606 [DEBUG] [Thread-71723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:06.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:06:06.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:06:06.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:06:06.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 5, 56), 24.24, 19.43, 0.0, 60.15, 20.6, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:06:06.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:05:56
2025-12-12T15:06:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:06:07.226 [DEBUG] [Thread-71724] [transport.py] [_log()] starting thread (client mode): 0xf575cfa0
2025-12-12T15:06:07.227 [DEBUG] [Thread-71724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:06:07.248 [DEBUG] [Thread-71724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:06:07.248 [INFO] [Thread-71724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:06:07.251 [DEBUG] [Thread-71724] [transport.py] [_log()] client lang: <none>
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] server lang: <none>
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] kex follows: False
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] Compression: none
2025-12-12T15:06:07.252 [DEBUG] [Thread-71724] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:06:07.269 [DEBUG] [Thread-71724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:06:07.270 [DEBUG] [Thread-71724] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:06:07.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:06:07.270 [DEBUG] [Thread-71724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:06:07.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:06:07.272 [DEBUG] [Thread-71724] [transport.py] [_log()] userauth is OK
2025-12-12T15:06:07.273 [DEBUG] [Thread-71724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:06:07.273 [DEBUG] [Thread-71724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:06:07.273 [DEBUG] [Thread-71724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:06:07.273 [DEBUG] [Thread-71724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:06:07.310 [INFO] [Thread-71724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:06:07.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:06:07.958 [DEBUG] [Thread-71724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:06:07.958 [DEBUG] [Thread-71724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:06:07.958 [DEBUG] [Thread-71724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:06:07.999 [DEBUG] [Thread-71724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:06:07.999 [DEBUG] [Thread-71724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:06:08.002 [DEBUG] [Thread-71724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:06:08.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:06:08.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:06:08.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:06:08.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:06:08.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:06:08.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:06:08.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:06:08.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:06:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:06:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.545580 -999.00  +21.40  48.46     23   +0.00 1 1 2 1 1   888    0 21.33 63.63 ----- 53.3 48.5 312.6 53.1 24.7 -25.4 24.3 -25.7 24.9 -23.0 25.4 -23.3
2025-12-12T15:06:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:06:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:06:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.545580
2025-12-12T15:06:08.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:06:08.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:06:08.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:06:08.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:06:08.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:06:08.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:05:56', tmtdew=24.24, humidity=19.43, cloud=0.0, wind=60.15, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:05:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:06:08.027 [DEBUG] [Thread-71724] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:06:08.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:06:08.119 [DEBUG] [Thread-71727] [transport.py] [_log()] starting thread (client mode): 0xf57413f0
2025-12-12T15:06:08.119 [DEBUG] [Thread-71727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:06:08.133 [DEBUG] [Thread-71727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:06:08.133 [INFO] [Thread-71727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:06:08.140 [DEBUG] [Thread-71727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] client lang: <none>
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] server lang: <none>
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] kex follows: False
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] Compression: none
2025-12-12T15:06:08.141 [DEBUG] [Thread-71727] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:06:08.197 [DEBUG] [Thread-71727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:06:08.197 [DEBUG] [Thread-71727] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:06:08.197 [DEBUG] [Thread-71727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:06:08.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:06:08.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:06:08.253 [DEBUG] [Thread-71727] [transport.py] [_log()] userauth is OK
2025-12-12T15:06:08.253 [DEBUG] [Thread-71727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:06:08.253 [DEBUG] [Thread-71727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:06:08.253 [DEBUG] [Thread-71727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:06:08.254 [DEBUG] [Thread-71727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:06:08.273 [INFO] [Thread-71727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:06:08.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:06:08.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:06:09.114 [DEBUG] [Thread-71727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:06:09.114 [DEBUG] [Thread-71727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:06:09.162 [DEBUG] [Thread-71727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:06:09.162 [DEBUG] [Thread-71727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:06:09.171 [DEBUG] [Thread-71727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:06:09.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:06:09.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:06:09.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:06:09.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:06:09.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:06:09.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:06:09.205 [DEBUG] [Thread-71727] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:06:14.636 [DEBUG] [Thread-71729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:29.678 [DEBUG] [Thread-71730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:39.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:06:39.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:06:39.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 6, 28), 23.84, 19.96, 0.0, 66.64, 20.35, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:06:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:06:28
2025-12-12T15:06:40.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:06:40.193 [DEBUG] [Thread-71731] [transport.py] [_log()] starting thread (client mode): 0xf81c1ab0
2025-12-12T15:06:40.193 [DEBUG] [Thread-71731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:06:40.213 [DEBUG] [Thread-71731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:06:40.213 [INFO] [Thread-71731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] client lang: <none>
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] server lang: <none>
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] kex follows: False
2025-12-12T15:06:40.214 [DEBUG] [Thread-71731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:06:40.215 [DEBUG] [Thread-71731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:06:40.215 [DEBUG] [Thread-71731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:06:40.215 [DEBUG] [Thread-71731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:06:40.215 [DEBUG] [Thread-71731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:06:40.215 [DEBUG] [Thread-71731] [transport.py] [_log()] Compression: none
2025-12-12T15:06:40.215 [DEBUG] [Thread-71731] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:06:40.234 [DEBUG] [Thread-71731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:06:40.234 [DEBUG] [Thread-71731] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:06:40.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:06:40.235 [DEBUG] [Thread-71731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:06:40.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:06:40.237 [DEBUG] [Thread-71731] [transport.py] [_log()] userauth is OK
2025-12-12T15:06:40.237 [DEBUG] [Thread-71731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:06:40.237 [DEBUG] [Thread-71731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:06:40.237 [DEBUG] [Thread-71731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:06:40.237 [DEBUG] [Thread-71731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:06:40.257 [INFO] [Thread-71731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:06:40.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:06:40.987 [DEBUG] [Thread-71731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:06:40.987 [DEBUG] [Thread-71731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:06:40.988 [DEBUG] [Thread-71731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:06:41.028 [DEBUG] [Thread-71731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:06:41.028 [DEBUG] [Thread-71731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:06:41.031 [DEBUG] [Thread-71731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:06:41.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:06:41.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:06:41.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:06:41.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:06:41.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:06:41.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:06:41.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:06:41.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:06:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:06:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.545927 -999.00  +20.50  57.63     25   +0.30 1 1 2 1 1   888    0 22.12 78.32 ----- 65.9 57.6 308.0 68.9 24.6 -28.1 24.1 -28.0 24.6 -24.8 25.4 -24.4
2025-12-12T15:06:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:06:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:06:41.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.545927
2025-12-12T15:06:41.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:06:41.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:06:41.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:06:41.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:06:41.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:06:41.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:06:28', tmtdew=23.84, humidity=19.96, cloud=0.0, wind=66.64, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:06:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:06:41.054 [DEBUG] [Thread-71731] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:06:41.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:06:41.150 [DEBUG] [Thread-71734] [transport.py] [_log()] starting thread (client mode): 0xf574ebc0
2025-12-12T15:06:41.150 [DEBUG] [Thread-71734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:06:41.165 [DEBUG] [Thread-71734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:06:41.165 [INFO] [Thread-71734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:06:41.173 [DEBUG] [Thread-71734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:06:41.173 [DEBUG] [Thread-71734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:06:41.173 [DEBUG] [Thread-71734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:06:41.173 [DEBUG] [Thread-71734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:41.173 [DEBUG] [Thread-71734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:06:41.173 [DEBUG] [Thread-71734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] client lang: <none>
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] server lang: <none>
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] kex follows: False
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:06:41.174 [DEBUG] [Thread-71734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:06:41.175 [DEBUG] [Thread-71734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:06:41.175 [DEBUG] [Thread-71734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:06:41.175 [DEBUG] [Thread-71734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:06:41.175 [DEBUG] [Thread-71734] [transport.py] [_log()] Compression: none
2025-12-12T15:06:41.175 [DEBUG] [Thread-71734] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:06:41.234 [DEBUG] [Thread-71734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:06:41.234 [DEBUG] [Thread-71734] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:06:41.235 [DEBUG] [Thread-71734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:06:41.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:06:41.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:06:41.289 [DEBUG] [Thread-71734] [transport.py] [_log()] userauth is OK
2025-12-12T15:06:41.289 [DEBUG] [Thread-71734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:06:41.289 [DEBUG] [Thread-71734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:06:41.289 [DEBUG] [Thread-71734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:06:41.290 [DEBUG] [Thread-71734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:06:41.309 [INFO] [Thread-71734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:06:41.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:06:41.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:06:42.133 [DEBUG] [Thread-71734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:06:42.133 [DEBUG] [Thread-71734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:06:42.181 [DEBUG] [Thread-71734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:06:42.181 [DEBUG] [Thread-71734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:06:42.190 [DEBUG] [Thread-71734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:06:42.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:06:42.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:06:42.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:06:42.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:06:42.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:06:42.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:06:42.226 [DEBUG] [Thread-71734] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:06:44.709 [DEBUG] [Thread-71736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:49.510 [DEBUG] [Thread-71737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:58.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:58.062 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:06:59.754 [DEBUG] [Thread-71738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:12.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:07:12.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:07:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:07:12.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 6, 28), 23.84, 19.96, 0.0, 66.64, 20.35, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:07:12.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:06:28
2025-12-12T15:07:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:07:13.207 [DEBUG] [Thread-71739] [transport.py] [_log()] starting thread (client mode): 0xf574c5e0
2025-12-12T15:07:13.207 [DEBUG] [Thread-71739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:07:13.228 [DEBUG] [Thread-71739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:07:13.228 [INFO] [Thread-71739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:07:13.231 [DEBUG] [Thread-71739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:07:13.231 [DEBUG] [Thread-71739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:07:13.231 [DEBUG] [Thread-71739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:07:13.231 [DEBUG] [Thread-71739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] client lang: <none>
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] server lang: <none>
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] kex follows: False
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:07:13.232 [DEBUG] [Thread-71739] [transport.py] [_log()] Compression: none
2025-12-12T15:07:13.233 [DEBUG] [Thread-71739] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:07:13.250 [DEBUG] [Thread-71739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:07:13.250 [DEBUG] [Thread-71739] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:07:13.251 [DEBUG] [Thread-71739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:07:13.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:07:13.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:07:13.252 [DEBUG] [Thread-71739] [transport.py] [_log()] userauth is OK
2025-12-12T15:07:13.252 [DEBUG] [Thread-71739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:07:13.253 [DEBUG] [Thread-71739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:07:13.253 [DEBUG] [Thread-71739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:07:13.253 [DEBUG] [Thread-71739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:07:13.277 [INFO] [Thread-71739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:07:13.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:07:13.899 [DEBUG] [Thread-71739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:07:13.899 [DEBUG] [Thread-71739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:07:13.899 [DEBUG] [Thread-71739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:07:13.940 [DEBUG] [Thread-71739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:07:13.940 [DEBUG] [Thread-71739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:07:13.943 [DEBUG] [Thread-71739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:07:13.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:07:13.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:07:13.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:07:13.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:07:13.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:07:13.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:07:13.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:07:13.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:07:13.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:07:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.546275 -999.00  +20.40  58.35     27   +1.10 1 1 2 1 1   888    0 21.24 77.23 ----- 54.1 58.4 310.4 75.0 24.4 -26.5 24.1 -25.8 24.6 -24.4 25.2 -24.6
2025-12-12T15:07:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:07:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:07:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.546275
2025-12-12T15:07:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:07:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:07:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:07:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:07:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:07:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:06:28', tmtdew=23.84, humidity=19.96, cloud=0.0, wind=66.64, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:06:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:07:13.968 [DEBUG] [Thread-71739] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:07:14.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:07:14.063 [DEBUG] [Thread-71742] [transport.py] [_log()] starting thread (client mode): 0xf574df00
2025-12-12T15:07:14.063 [DEBUG] [Thread-71742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:07:14.078 [DEBUG] [Thread-71742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:07:14.078 [INFO] [Thread-71742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:07:14.085 [DEBUG] [Thread-71742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] client lang: <none>
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] server lang: <none>
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] kex follows: False
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] Compression: none
2025-12-12T15:07:14.086 [DEBUG] [Thread-71742] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:07:14.145 [DEBUG] [Thread-71742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:07:14.145 [DEBUG] [Thread-71742] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:07:14.146 [DEBUG] [Thread-71742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:07:14.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:07:14.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:07:14.201 [DEBUG] [Thread-71742] [transport.py] [_log()] userauth is OK
2025-12-12T15:07:14.201 [DEBUG] [Thread-71742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:07:14.201 [DEBUG] [Thread-71742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:07:14.201 [DEBUG] [Thread-71742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:07:14.201 [DEBUG] [Thread-71742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:07:14.220 [INFO] [Thread-71742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:07:14.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:07:14.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:07:14.783 [DEBUG] [Thread-71744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:15.080 [DEBUG] [Thread-71742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:07:15.080 [DEBUG] [Thread-71742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:07:15.128 [DEBUG] [Thread-71742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:07:15.128 [DEBUG] [Thread-71742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:07:15.137 [DEBUG] [Thread-71742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:07:15.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:07:15.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:07:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:07:15.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:07:15.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:07:15.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:07:15.175 [DEBUG] [Thread-71742] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:07:29.829 [DEBUG] [Thread-71745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:44.858 [DEBUG] [Thread-71746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:07:45.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:07:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:07:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 7, 32), 22.21, 22.02, 0.0, 66.52, 19.98, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:07:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:07:32
2025-12-12T15:07:46.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:07:46.177 [DEBUG] [Thread-71747] [transport.py] [_log()] starting thread (client mode): 0xf574d990
2025-12-12T15:07:46.177 [DEBUG] [Thread-71747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:07:46.198 [DEBUG] [Thread-71747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:07:46.198 [INFO] [Thread-71747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] client lang: <none>
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] server lang: <none>
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] kex follows: False
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] Compression: none
2025-12-12T15:07:46.201 [DEBUG] [Thread-71747] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:07:46.218 [DEBUG] [Thread-71747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:07:46.218 [DEBUG] [Thread-71747] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:07:46.219 [DEBUG] [Thread-71747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:07:46.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:07:46.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:07:46.219 [DEBUG] [Thread-71747] [transport.py] [_log()] userauth is OK
2025-12-12T15:07:46.219 [DEBUG] [Thread-71747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:07:46.220 [DEBUG] [Thread-71747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:07:46.220 [DEBUG] [Thread-71747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:07:46.220 [DEBUG] [Thread-71747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:07:46.246 [INFO] [Thread-71747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:07:46.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:07:47.025 [DEBUG] [Thread-71747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:07:47.025 [DEBUG] [Thread-71747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:07:47.025 [DEBUG] [Thread-71747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:07:47.066 [DEBUG] [Thread-71747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:07:47.066 [DEBUG] [Thread-71747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:07:47.068 [DEBUG] [Thread-71747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:07:47.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:07:47.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:07:47.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:07:47.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:07:47.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:07:47.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.546622 -999.00  +20.60  43.28     27   +1.30 1 1 2 1 1   888    0 21.38 74.86 ----- 49.1 43.3 324.2 66.1 24.4 -26.0 24.1 -25.3 24.7 -23.3 25.2 -23.7
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:07:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.546622
2025-12-12T15:07:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:07:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:07:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:07:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:07:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:07:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:07:32', tmtdew=22.21, humidity=22.02, cloud=0.0, wind=66.52, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:07:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:07:47.087 [DEBUG] [Thread-71747] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:07:47.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:07:47.173 [DEBUG] [Thread-71750] [transport.py] [_log()] starting thread (client mode): 0xf5743a60
2025-12-12T15:07:47.173 [DEBUG] [Thread-71750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:07:47.188 [DEBUG] [Thread-71750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:07:47.188 [INFO] [Thread-71750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] client lang: <none>
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] server lang: <none>
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] kex follows: False
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] Compression: none
2025-12-12T15:07:47.196 [DEBUG] [Thread-71750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:07:47.252 [DEBUG] [Thread-71750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:07:47.252 [DEBUG] [Thread-71750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:07:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:07:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:07:47.253 [DEBUG] [Thread-71750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:07:47.309 [DEBUG] [Thread-71750] [transport.py] [_log()] userauth is OK
2025-12-12T15:07:47.309 [DEBUG] [Thread-71750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:07:47.309 [DEBUG] [Thread-71750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:07:47.309 [DEBUG] [Thread-71750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:07:47.309 [DEBUG] [Thread-71750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:07:47.325 [INFO] [Thread-71750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:07:47.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:07:47.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:07:48.219 [DEBUG] [Thread-71750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:07:48.219 [DEBUG] [Thread-71750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:07:48.267 [DEBUG] [Thread-71750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:07:48.267 [DEBUG] [Thread-71750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:07:48.276 [DEBUG] [Thread-71750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:07:48.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:07:48.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:07:48.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:07:48.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:07:48.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:07:48.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:07:48.310 [DEBUG] [Thread-71750] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:07:49.562 [DEBUG] [Thread-71752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:58.204 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:58.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:07:59.886 [DEBUG] [Thread-71753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:08:14.930 [DEBUG] [Thread-71754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:08:18.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:08:18.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:08:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:08:19.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 8, 4), 22.24, 21.99, 0.0, 69.07, 20.0, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:08:19.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:08:04
2025-12-12T15:08:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:08:19.315 [DEBUG] [Thread-71755] [transport.py] [_log()] starting thread (client mode): 0xf574fa30
2025-12-12T15:08:19.315 [DEBUG] [Thread-71755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:08:19.336 [DEBUG] [Thread-71755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:08:19.336 [INFO] [Thread-71755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] client lang: <none>
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] server lang: <none>
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] kex follows: False
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] Compression: none
2025-12-12T15:08:19.339 [DEBUG] [Thread-71755] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:08:19.356 [DEBUG] [Thread-71755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:08:19.357 [DEBUG] [Thread-71755] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:08:19.357 [DEBUG] [Thread-71755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:08:19.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:08:19.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:08:19.359 [DEBUG] [Thread-71755] [transport.py] [_log()] userauth is OK
2025-12-12T15:08:19.359 [DEBUG] [Thread-71755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:08:19.360 [DEBUG] [Thread-71755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:08:19.360 [DEBUG] [Thread-71755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:08:19.360 [DEBUG] [Thread-71755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:08:19.384 [INFO] [Thread-71755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:08:19.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:08:19.982 [DEBUG] [Thread-71755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:08:19.982 [DEBUG] [Thread-71755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:08:19.983 [DEBUG] [Thread-71755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:08:20.023 [DEBUG] [Thread-71755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:08:20.023 [DEBUG] [Thread-71755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:08:20.026 [DEBUG] [Thread-71755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:08:20.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:08:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:08:20.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:08:20.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:08:20.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:08:20.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:08:20.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:08:20.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:08:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:08:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.546969 -999.00  +20.90  49.01     28   +1.70 1 1 2 1 1   888    0 22.15 88.01 ----- 53.0 49.0 316.4 62.1 24.5 -26.4 24.2 -26.2 24.7 -25.3 25.3 -24.2
2025-12-12T15:08:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:08:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:08:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.546969
2025-12-12T15:08:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:08:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:08:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:08:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:08:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:08:20.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:08:04', tmtdew=22.24, humidity=21.99, cloud=0.0, wind=69.07, temperature=20.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:07:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:08:20.052 [DEBUG] [Thread-71755] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:08:20.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:08:20.149 [DEBUG] [Thread-71758] [transport.py] [_log()] starting thread (client mode): 0xf574e290
2025-12-12T15:08:20.149 [DEBUG] [Thread-71758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:08:20.165 [DEBUG] [Thread-71758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:08:20.165 [INFO] [Thread-71758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:08:20.179 [DEBUG] [Thread-71758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:08:20.179 [DEBUG] [Thread-71758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:08:20.179 [DEBUG] [Thread-71758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:08:20.179 [DEBUG] [Thread-71758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] client lang: <none>
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] server lang: <none>
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] kex follows: False
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:08:20.180 [DEBUG] [Thread-71758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:08:20.181 [DEBUG] [Thread-71758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:08:20.181 [DEBUG] [Thread-71758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:08:20.181 [DEBUG] [Thread-71758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:08:20.181 [DEBUG] [Thread-71758] [transport.py] [_log()] Compression: none
2025-12-12T15:08:20.181 [DEBUG] [Thread-71758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:08:20.233 [DEBUG] [Thread-71758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:08:20.233 [DEBUG] [Thread-71758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:08:20.233 [DEBUG] [Thread-71758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:08:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:08:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:08:20.289 [DEBUG] [Thread-71758] [transport.py] [_log()] userauth is OK
2025-12-12T15:08:20.289 [DEBUG] [Thread-71758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:08:20.289 [DEBUG] [Thread-71758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:08:20.289 [DEBUG] [Thread-71758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:08:20.289 [DEBUG] [Thread-71758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:08:20.308 [INFO] [Thread-71758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:08:20.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:08:20.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:08:21.146 [DEBUG] [Thread-71758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:08:21.146 [DEBUG] [Thread-71758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:08:21.194 [DEBUG] [Thread-71758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:08:21.194 [DEBUG] [Thread-71758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:08:21.202 [DEBUG] [Thread-71758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:08:21.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:08:21.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:08:21.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:08:21.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:08:21.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:08:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:08:21.234 [DEBUG] [Thread-71758] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:08:29.961 [DEBUG] [Thread-71760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:08:45.004 [DEBUG] [Thread-71761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:08:49.614 [DEBUG] [Thread-71762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:08:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:08:51.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:08:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:08:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 8, 36), 21.31, 23.61, 0.0, 65.72, 19.63, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:08:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:08:36
2025-12-12T15:08:52.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:08:52.221 [DEBUG] [Thread-71763] [transport.py] [_log()] starting thread (client mode): 0xf574d000
2025-12-12T15:08:52.221 [DEBUG] [Thread-71763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:08:52.241 [DEBUG] [Thread-71763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:08:52.241 [INFO] [Thread-71763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] client lang: <none>
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] server lang: <none>
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] kex follows: False
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] Compression: none
2025-12-12T15:08:52.244 [DEBUG] [Thread-71763] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:08:52.260 [DEBUG] [Thread-71763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:08:52.260 [DEBUG] [Thread-71763] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:08:52.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:08:52.261 [DEBUG] [Thread-71763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:08:52.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:08:52.261 [DEBUG] [Thread-71763] [transport.py] [_log()] userauth is OK
2025-12-12T15:08:52.261 [DEBUG] [Thread-71763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:08:52.261 [DEBUG] [Thread-71763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:08:52.261 [DEBUG] [Thread-71763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:08:52.261 [DEBUG] [Thread-71763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:08:52.279 [INFO] [Thread-71763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:08:52.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:08:53.053 [DEBUG] [Thread-71763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:08:53.053 [DEBUG] [Thread-71763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:08:53.054 [DEBUG] [Thread-71763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:08:53.094 [DEBUG] [Thread-71763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:08:53.094 [DEBUG] [Thread-71763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:08:53.096 [DEBUG] [Thread-71763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:08:53.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:08:53.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:08:53.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:08:53.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:08:53.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:08:53.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:08:53.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:08:53.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:08:53.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:08:53.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.547316 -999.00  +20.70  56.88     28   +1.60 1 1 2 1 1   888    0 23.20 102.34 ----- 57.4 56.9 312.2 73.9 24.4 -27.9 24.0 -27.0 24.2 -28.1 25.2 -24.8
2025-12-12T15:08:53.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:08:53.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:08:53.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.547316
2025-12-12T15:08:53.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:08:53.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:08:53.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:08:53.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:08:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:08:53.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:08:36', tmtdew=21.31, humidity=23.61, cloud=0.0, wind=65.72, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:08:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:08:53.114 [DEBUG] [Thread-71763] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:08:53.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:08:53.218 [DEBUG] [Thread-71766] [transport.py] [_log()] starting thread (client mode): 0xf574c8e0
2025-12-12T15:08:53.218 [DEBUG] [Thread-71766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:08:53.236 [DEBUG] [Thread-71766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:08:53.236 [INFO] [Thread-71766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:08:53.243 [DEBUG] [Thread-71766] [transport.py] [_log()] client lang: <none>
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] server lang: <none>
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] kex follows: False
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] Compression: none
2025-12-12T15:08:53.244 [DEBUG] [Thread-71766] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:08:53.300 [DEBUG] [Thread-71766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:08:53.300 [DEBUG] [Thread-71766] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:08:53.300 [DEBUG] [Thread-71766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:08:53.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:08:53.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:08:53.357 [DEBUG] [Thread-71766] [transport.py] [_log()] userauth is OK
2025-12-12T15:08:53.357 [DEBUG] [Thread-71766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:08:53.357 [DEBUG] [Thread-71766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:08:53.357 [DEBUG] [Thread-71766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:08:53.357 [DEBUG] [Thread-71766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:08:53.374 [INFO] [Thread-71766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:08:53.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:08:53.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:08:54.270 [DEBUG] [Thread-71766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:08:54.270 [DEBUG] [Thread-71766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:08:54.319 [DEBUG] [Thread-71766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:08:54.319 [DEBUG] [Thread-71766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:08:54.328 [DEBUG] [Thread-71766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:08:54.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:08:54.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:08:54.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:08:54.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:08:54.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:08:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:08:54.366 [DEBUG] [Thread-71766] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:08:58.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:08:58.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:00.032 [DEBUG] [Thread-71768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:15.073 [DEBUG] [Thread-71769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:24.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:09:24.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:09:24.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:09:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 9, 8), 21.29, 23.7, 0.0, 59.65, 19.91, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:09:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:09:08
2025-12-12T15:09:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:09:25.330 [DEBUG] [Thread-71770] [transport.py] [_log()] starting thread (client mode): 0xf574d870
2025-12-12T15:09:25.330 [DEBUG] [Thread-71770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:09:25.351 [DEBUG] [Thread-71770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:09:25.351 [INFO] [Thread-71770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:09:25.354 [DEBUG] [Thread-71770] [transport.py] [_log()] client lang: <none>
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] server lang: <none>
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] kex follows: False
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] Compression: none
2025-12-12T15:09:25.355 [DEBUG] [Thread-71770] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:09:25.373 [DEBUG] [Thread-71770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:09:25.374 [DEBUG] [Thread-71770] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:09:25.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:09:25.375 [DEBUG] [Thread-71770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:09:25.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:09:25.377 [DEBUG] [Thread-71770] [transport.py] [_log()] userauth is OK
2025-12-12T15:09:25.377 [DEBUG] [Thread-71770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:09:25.377 [DEBUG] [Thread-71770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:09:25.378 [DEBUG] [Thread-71770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:09:25.378 [DEBUG] [Thread-71770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:09:25.417 [INFO] [Thread-71770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:09:25.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:09:26.074 [DEBUG] [Thread-71770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:09:26.074 [DEBUG] [Thread-71770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:09:26.075 [DEBUG] [Thread-71770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:09:26.115 [DEBUG] [Thread-71770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:09:26.115 [DEBUG] [Thread-71770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:09:26.118 [DEBUG] [Thread-71770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:09:26.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:09:26.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:09:26.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:09:26.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:09:26.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:09:26.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:09:26.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:09:26.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:09:26.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:09:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.548010 -999.00  +20.30  60.02     28   +1.50 1 1 3 1 1   888    0 21.74 88.17 ----- 49.6 60.0 314.0 68.0 24.3 -27.6 23.9 -26.5 24.4 -28.3 25.1 -24.1
2025-12-12T15:09:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:09:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:09:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.548010
2025-12-12T15:09:26.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:09:26.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:09:26.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:09:26.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:09:26.143 [DEBUG] [Thread-71770] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:09:26.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:09:26.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:09:08', tmtdew=21.29, humidity=23.7, cloud=0.0, wind=59.65, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:09:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:09:26.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:09:30.104 [DEBUG] [Thread-71773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:45.150 [DEBUG] [Thread-71774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:49.670 [DEBUG] [Thread-71775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:58.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:09:58.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:00.184 [DEBUG] [Thread-71776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:15.213 [DEBUG] [Thread-71777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:30.241 [DEBUG] [Thread-71778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:45.271 [DEBUG] [Thread-71779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:49.724 [DEBUG] [Thread-71780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:58.630 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:10:58.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:00.298 [DEBUG] [Thread-71781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:15.327 [DEBUG] [Thread-71782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:30.354 [DEBUG] [Thread-71783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:38.986 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T15:11:45.383 [DEBUG] [Thread-71784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:49.778 [DEBUG] [Thread-71785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:58.771 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:11:58.772 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:00.413 [DEBUG] [Thread-71786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:09.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:12:09.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:12:09.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:12:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 11, 48), 22.17, 22.65, 0.0, 59.48, 20.13, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:12:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:11:48
2025-12-12T15:12:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:12:09.985 [DEBUG] [Thread-71787] [transport.py] [_log()] starting thread (client mode): 0xf5743a60
2025-12-12T15:12:09.985 [DEBUG] [Thread-71787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:12:10.005 [DEBUG] [Thread-71787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:12:10.005 [INFO] [Thread-71787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] client lang: <none>
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] server lang: <none>
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] kex follows: False
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] Compression: none
2025-12-12T15:12:10.008 [DEBUG] [Thread-71787] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:12:10.031 [DEBUG] [Thread-71787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:12:10.032 [DEBUG] [Thread-71787] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:12:10.033 [DEBUG] [Thread-71787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:12:10.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:12:10.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:12:10.035 [DEBUG] [Thread-71787] [transport.py] [_log()] userauth is OK
2025-12-12T15:12:10.035 [DEBUG] [Thread-71787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:12:10.036 [DEBUG] [Thread-71787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:12:10.036 [DEBUG] [Thread-71787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:12:10.036 [DEBUG] [Thread-71787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:12:10.060 [INFO] [Thread-71787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:12:10.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:12:10.840 [DEBUG] [Thread-71787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:12:10.840 [DEBUG] [Thread-71787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:12:10.840 [DEBUG] [Thread-71787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:12:10.881 [DEBUG] [Thread-71787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:12:10.881 [DEBUG] [Thread-71787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:12:10.884 [DEBUG] [Thread-71787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:12:10.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:12:10.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:12:10.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:12:10.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:12:10.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:12:10.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:12:10.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.549747 -999.00  +20.30  53.01     28   +1.20 1 1 2 1 1   888    0 20.47 66.08 ----- 43.9 53.0 331.4 72.5 24.4 -25.4 24.0 -25.1 24.6 -23.0 25.1 -23.9
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.549747
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:12:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:11:48', tmtdew=22.17, humidity=22.65, cloud=0.0, wind=59.48, temperature=20.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:11:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:12:10.902 [DEBUG] [Thread-71787] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:12:10.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:12:10.987 [DEBUG] [Thread-71790] [transport.py] [_log()] starting thread (client mode): 0xf81e60b0
2025-12-12T15:12:10.987 [DEBUG] [Thread-71790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:12:11.003 [DEBUG] [Thread-71790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:12:11.003 [INFO] [Thread-71790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] client lang: <none>
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] server lang: <none>
2025-12-12T15:12:11.011 [DEBUG] [Thread-71790] [transport.py] [_log()] kex follows: False
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] Compression: none
2025-12-12T15:12:11.012 [DEBUG] [Thread-71790] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:12:11.073 [DEBUG] [Thread-71790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:12:11.073 [DEBUG] [Thread-71790] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:12:11.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:12:11.074 [DEBUG] [Thread-71790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:12:11.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:12:11.129 [DEBUG] [Thread-71790] [transport.py] [_log()] userauth is OK
2025-12-12T15:12:11.129 [DEBUG] [Thread-71790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:12:11.129 [DEBUG] [Thread-71790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:12:11.129 [DEBUG] [Thread-71790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:12:11.129 [DEBUG] [Thread-71790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:12:11.148 [INFO] [Thread-71790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:12:11.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:12:11.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:12:12.012 [DEBUG] [Thread-71790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:12:12.012 [DEBUG] [Thread-71790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:12:12.060 [DEBUG] [Thread-71790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:12:12.060 [DEBUG] [Thread-71790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:12:12.069 [DEBUG] [Thread-71790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:12:12.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:12:12.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:12:12.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:12:12.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:12:12.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:12:12.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:12:12.104 [DEBUG] [Thread-71790] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:12:15.441 [DEBUG] [Thread-71792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:30.472 [DEBUG] [Thread-71793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:12:42.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:12:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:12:42.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 12, 20), 22.07, 22.76, 0.0, 60.47, 20.01, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:12:42.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:12:20
2025-12-12T15:12:42.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:12:43.067 [DEBUG] [Thread-71794] [transport.py] [_log()] starting thread (client mode): 0xf81e4730
2025-12-12T15:12:43.067 [DEBUG] [Thread-71794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:12:43.086 [DEBUG] [Thread-71794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:12:43.086 [INFO] [Thread-71794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:12:43.089 [DEBUG] [Thread-71794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] client lang: <none>
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] server lang: <none>
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] kex follows: False
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] Compression: none
2025-12-12T15:12:43.090 [DEBUG] [Thread-71794] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:12:43.107 [DEBUG] [Thread-71794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:12:43.107 [DEBUG] [Thread-71794] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:12:43.108 [DEBUG] [Thread-71794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:12:43.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:12:43.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:12:43.109 [DEBUG] [Thread-71794] [transport.py] [_log()] userauth is OK
2025-12-12T15:12:43.110 [DEBUG] [Thread-71794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:12:43.110 [DEBUG] [Thread-71794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:12:43.110 [DEBUG] [Thread-71794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:12:43.110 [DEBUG] [Thread-71794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:12:43.130 [INFO] [Thread-71794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:12:43.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:12:43.770 [DEBUG] [Thread-71794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:12:43.770 [DEBUG] [Thread-71794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:12:43.770 [DEBUG] [Thread-71794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:12:43.811 [DEBUG] [Thread-71794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:12:43.811 [DEBUG] [Thread-71794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:12:43.814 [DEBUG] [Thread-71794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:12:43.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:12:43.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:12:43.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:12:43.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:12:43.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:12:43.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:12:43.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:12:43.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:12:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:12:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.550094 -999.00  +20.30  55.86     28   +1.40 1 1 2 1 1   888    0 21.78 73.18 ----- 47.9 55.9 301.5 61.0 24.4 -26.4 24.0 -26.3 24.6 -25.2 25.2 -23.9
2025-12-12T15:12:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:12:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:12:43.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.550094
2025-12-12T15:12:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:12:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:12:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:12:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:12:43.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:12:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:12:20', tmtdew=22.07, humidity=22.76, cloud=0.0, wind=60.47, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:12:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:12:43.838 [DEBUG] [Thread-71794] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:12:43.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:12:43.933 [DEBUG] [Thread-71797] [transport.py] [_log()] starting thread (client mode): 0xf570c340
2025-12-12T15:12:43.933 [DEBUG] [Thread-71797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:12:43.947 [DEBUG] [Thread-71797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:12:43.947 [INFO] [Thread-71797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] client lang: <none>
2025-12-12T15:12:43.955 [DEBUG] [Thread-71797] [transport.py] [_log()] server lang: <none>
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] kex follows: False
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] Compression: none
2025-12-12T15:12:43.956 [DEBUG] [Thread-71797] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:12:44.012 [DEBUG] [Thread-71797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:12:44.012 [DEBUG] [Thread-71797] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:12:44.013 [DEBUG] [Thread-71797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:12:44.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:12:44.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:12:44.069 [DEBUG] [Thread-71797] [transport.py] [_log()] userauth is OK
2025-12-12T15:12:44.069 [DEBUG] [Thread-71797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:12:44.069 [DEBUG] [Thread-71797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:12:44.069 [DEBUG] [Thread-71797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:12:44.070 [DEBUG] [Thread-71797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:12:44.088 [INFO] [Thread-71797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:12:44.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:12:44.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:12:44.931 [DEBUG] [Thread-71797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:12:44.931 [DEBUG] [Thread-71797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:12:44.982 [DEBUG] [Thread-71797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:12:44.982 [DEBUG] [Thread-71797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:12:44.994 [DEBUG] [Thread-71797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:12:45.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:12:45.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:12:45.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:12:45.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:12:45.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:12:45.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:12:45.029 [DEBUG] [Thread-71797] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:12:45.502 [DEBUG] [Thread-71799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:49.834 [DEBUG] [Thread-71800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:58.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:12:58.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:00.553 [DEBUG] [Thread-71801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:15.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:13:15.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:13:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:13:15.582 [DEBUG] [Thread-71802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:15.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 12, 52), 21.59, 23.13, 0.0, 56.21, 19.83, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:13:15.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:12:52
2025-12-12T15:13:15.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:13:15.988 [DEBUG] [Thread-71803] [transport.py] [_log()] starting thread (client mode): 0xf572e9e0
2025-12-12T15:13:15.989 [DEBUG] [Thread-71803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:13:16.010 [DEBUG] [Thread-71803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:13:16.010 [INFO] [Thread-71803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:13:16.014 [DEBUG] [Thread-71803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] client lang: <none>
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] server lang: <none>
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] kex follows: False
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] Compression: none
2025-12-12T15:13:16.015 [DEBUG] [Thread-71803] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:13:16.034 [DEBUG] [Thread-71803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:13:16.034 [DEBUG] [Thread-71803] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:13:16.035 [DEBUG] [Thread-71803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:13:16.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:13:16.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:13:16.036 [DEBUG] [Thread-71803] [transport.py] [_log()] userauth is OK
2025-12-12T15:13:16.037 [DEBUG] [Thread-71803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:13:16.037 [DEBUG] [Thread-71803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:13:16.037 [DEBUG] [Thread-71803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:13:16.037 [DEBUG] [Thread-71803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:13:16.060 [INFO] [Thread-71803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:13:16.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:13:16.848 [DEBUG] [Thread-71803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:13:16.848 [DEBUG] [Thread-71803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:13:16.849 [DEBUG] [Thread-71803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:13:16.889 [DEBUG] [Thread-71803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:13:16.889 [DEBUG] [Thread-71803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:13:16.893 [DEBUG] [Thread-71803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:13:16.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:13:16.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:13:16.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:13:16.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:13:16.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:13:16.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:13:16.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:13:16.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:13:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:13:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.550441 -999.00  +20.30  54.53     28   +1.20 1 1 2 1 1   888    0 21.56 61.43 ----- 52.2 54.5 311.0 65.0 24.4 -27.8 24.1 -26.8 24.4 -24.0 25.1 -23.2
2025-12-12T15:13:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:13:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:13:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.550441
2025-12-12T15:13:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:13:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:13:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:13:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:13:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:13:16.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:12:52', tmtdew=21.59, humidity=23.13, cloud=0.0, wind=56.21, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:12:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:13:16.920 [DEBUG] [Thread-71803] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:13:17.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:13:17.016 [DEBUG] [Thread-71806] [transport.py] [_log()] starting thread (client mode): 0xf574fb50
2025-12-12T15:13:17.016 [DEBUG] [Thread-71806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:13:17.031 [DEBUG] [Thread-71806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:13:17.032 [INFO] [Thread-71806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:13:17.039 [DEBUG] [Thread-71806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] client lang: <none>
2025-12-12T15:13:17.040 [DEBUG] [Thread-71806] [transport.py] [_log()] server lang: <none>
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] kex follows: False
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] Compression: none
2025-12-12T15:13:17.041 [DEBUG] [Thread-71806] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:13:17.097 [DEBUG] [Thread-71806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:13:17.097 [DEBUG] [Thread-71806] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:13:17.098 [DEBUG] [Thread-71806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:13:17.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:13:17.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:13:17.160 [DEBUG] [Thread-71806] [transport.py] [_log()] userauth is OK
2025-12-12T15:13:17.160 [DEBUG] [Thread-71806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:13:17.160 [DEBUG] [Thread-71806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:13:17.160 [DEBUG] [Thread-71806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:13:17.160 [DEBUG] [Thread-71806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:13:17.179 [INFO] [Thread-71806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:13:17.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:13:17.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:13:18.090 [DEBUG] [Thread-71806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:13:18.091 [DEBUG] [Thread-71806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:13:18.139 [DEBUG] [Thread-71806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:13:18.139 [DEBUG] [Thread-71806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:13:18.148 [DEBUG] [Thread-71806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:13:18.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:13:18.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:13:18.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:13:18.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:13:18.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:13:18.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:13:18.182 [DEBUG] [Thread-71806] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:13:30.608 [DEBUG] [Thread-71808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:45.658 [DEBUG] [Thread-71809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:13:48.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:13:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:13:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 13, 24), 21.73, 22.96, 0.0, 50.48, 20.03, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:13:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:13:24
2025-12-12T15:13:49.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:13:49.188 [DEBUG] [Thread-71810] [transport.py] [_log()] starting thread (client mode): 0xf813ed10
2025-12-12T15:13:49.189 [DEBUG] [Thread-71810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:13:49.202 [DEBUG] [Thread-71810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:13:49.203 [INFO] [Thread-71810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] client lang: <none>
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] server lang: <none>
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] kex follows: False
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] Compression: none
2025-12-12T15:13:49.206 [DEBUG] [Thread-71810] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:13:49.224 [DEBUG] [Thread-71810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:13:49.225 [DEBUG] [Thread-71810] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:13:49.225 [DEBUG] [Thread-71810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:13:49.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:13:49.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:13:49.227 [DEBUG] [Thread-71810] [transport.py] [_log()] userauth is OK
2025-12-12T15:13:49.227 [DEBUG] [Thread-71810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:13:49.227 [DEBUG] [Thread-71810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:13:49.227 [DEBUG] [Thread-71810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:13:49.227 [DEBUG] [Thread-71810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:13:49.251 [INFO] [Thread-71810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:13:49.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:13:49.883 [DEBUG] [Thread-71812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:49.920 [DEBUG] [Thread-71810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:13:49.921 [DEBUG] [Thread-71810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:13:49.921 [DEBUG] [Thread-71810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:13:49.963 [DEBUG] [Thread-71810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:13:49.963 [DEBUG] [Thread-71810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:13:49.965 [DEBUG] [Thread-71810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:13:49.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:13:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:13:49.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:13:49.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:13:49.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:13:49.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:13:49.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:13:49.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:13:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:13:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.550788 -999.00  +20.70  38.17     28   +1.70 1 1 2 1 1   888    0 20.93 53.59 ----- 53.5 38.2 314.1 56.2 24.2 -25.9 23.9 -25.5 24.5 -26.7 25.0 -23.5
2025-12-12T15:13:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:13:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:13:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.550788
2025-12-12T15:13:49.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:13:49.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:13:49.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:13:49.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:13:49.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:13:49.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:13:24', tmtdew=21.73, humidity=22.96, cloud=0.0, wind=50.48, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:13:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:13:49.989 [DEBUG] [Thread-71810] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:13:50.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:13:50.093 [DEBUG] [Thread-71814] [transport.py] [_log()] starting thread (client mode): 0xf81c26e0
2025-12-12T15:13:50.093 [DEBUG] [Thread-71814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:13:50.107 [DEBUG] [Thread-71814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:13:50.107 [INFO] [Thread-71814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:13:50.114 [DEBUG] [Thread-71814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:13:50.115 [DEBUG] [Thread-71814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] client lang: <none>
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] server lang: <none>
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] kex follows: False
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] Compression: none
2025-12-12T15:13:50.116 [DEBUG] [Thread-71814] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:13:50.172 [DEBUG] [Thread-71814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:13:50.173 [DEBUG] [Thread-71814] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:13:50.173 [DEBUG] [Thread-71814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:13:50.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:13:50.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:13:50.229 [DEBUG] [Thread-71814] [transport.py] [_log()] userauth is OK
2025-12-12T15:13:50.229 [DEBUG] [Thread-71814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:13:50.229 [DEBUG] [Thread-71814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:13:50.229 [DEBUG] [Thread-71814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:13:50.229 [DEBUG] [Thread-71814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:13:50.248 [INFO] [Thread-71814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:13:50.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:13:50.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:13:51.072 [DEBUG] [Thread-71814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:13:51.072 [DEBUG] [Thread-71814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:13:51.120 [DEBUG] [Thread-71814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:13:51.120 [DEBUG] [Thread-71814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:13:51.129 [DEBUG] [Thread-71814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:13:51.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:13:51.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:13:51.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:13:51.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:13:51.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:13:51.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:13:51.163 [DEBUG] [Thread-71814] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:13:59.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:13:59.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:00.687 [DEBUG] [Thread-71816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:15.740 [DEBUG] [Thread-71817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:14:21.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:14:21.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
2025-12-12T15:14:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 13, 56), 21.98, 22.66, 0.0, 46.08, 20.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:14:21.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:13:56
2025-12-12T15:14:22.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:14:22.150 [DEBUG] [Thread-71818] [transport.py] [_log()] starting thread (client mode): 0xf81e6530
2025-12-12T15:14:22.150 [DEBUG] [Thread-71818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:14:22.171 [DEBUG] [Thread-71818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:14:22.171 [INFO] [Thread-71818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] client lang: <none>
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] server lang: <none>
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] kex follows: False
2025-12-12T15:14:22.174 [DEBUG] [Thread-71818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:14:22.175 [DEBUG] [Thread-71818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:14:22.175 [DEBUG] [Thread-71818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:14:22.175 [DEBUG] [Thread-71818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:14:22.175 [DEBUG] [Thread-71818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:14:22.175 [DEBUG] [Thread-71818] [transport.py] [_log()] Compression: none
2025-12-12T15:14:22.175 [DEBUG] [Thread-71818] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:14:22.183 [DEBUG] [Thread-71818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:14:22.183 [DEBUG] [Thread-71818] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:14:22.184 [DEBUG] [Thread-71818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:14:22.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:14:22.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:14:22.186 [DEBUG] [Thread-71818] [transport.py] [_log()] userauth is OK
2025-12-12T15:14:22.186 [DEBUG] [Thread-71818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:14:22.186 [DEBUG] [Thread-71818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:14:22.186 [DEBUG] [Thread-71818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:14:22.186 [DEBUG] [Thread-71818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:14:22.203 [INFO] [Thread-71818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:14:22.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:14:22.981 [DEBUG] [Thread-71818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:14:22.981 [DEBUG] [Thread-71818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:14:22.982 [DEBUG] [Thread-71818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:14:23.024 [DEBUG] [Thread-71818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:14:23.024 [DEBUG] [Thread-71818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:14:23.027 [DEBUG] [Thread-71818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:14:23.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:14:23.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:14:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:14:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:14:23.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:14:23.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:14:23.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:14:23.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:14:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:14:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.551135 -999.00  +20.70  39.30     28   +1.80 1 1 2 1 1   888    0 20.89 50.81 ----- 49.4 39.3 314.4 64.6 24.2 -25.0 24.0 -24.5 24.6 -22.0 25.1 -23.9
2025-12-12T15:14:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:14:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:14:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.551135
2025-12-12T15:14:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:14:23.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:14:23.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:14:23.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:14:23.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:14:23.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:13:56', tmtdew=21.98, humidity=22.66, cloud=0.0, wind=46.08, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:13:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:14:23.050 [DEBUG] [Thread-71818] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:14:23.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:14:23.147 [DEBUG] [Thread-71821] [transport.py] [_log()] starting thread (client mode): 0xf81e4640
2025-12-12T15:14:23.147 [DEBUG] [Thread-71821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:14:23.161 [DEBUG] [Thread-71821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:14:23.161 [INFO] [Thread-71821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] client lang: <none>
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] server lang: <none>
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] kex follows: False
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:14:23.169 [DEBUG] [Thread-71821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:14:23.170 [DEBUG] [Thread-71821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:14:23.170 [DEBUG] [Thread-71821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:14:23.170 [DEBUG] [Thread-71821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:14:23.170 [DEBUG] [Thread-71821] [transport.py] [_log()] Compression: none
2025-12-12T15:14:23.170 [DEBUG] [Thread-71821] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:14:23.229 [DEBUG] [Thread-71821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:14:23.229 [DEBUG] [Thread-71821] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:14:23.229 [DEBUG] [Thread-71821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:14:23.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:14:23.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:14:23.285 [DEBUG] [Thread-71821] [transport.py] [_log()] userauth is OK
2025-12-12T15:14:23.285 [DEBUG] [Thread-71821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:14:23.285 [DEBUG] [Thread-71821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:14:23.285 [DEBUG] [Thread-71821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:14:23.285 [DEBUG] [Thread-71821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:14:23.303 [INFO] [Thread-71821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:14:23.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:14:23.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:14:24.134 [DEBUG] [Thread-71821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:14:24.135 [DEBUG] [Thread-71821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:14:24.183 [DEBUG] [Thread-71821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:14:24.183 [DEBUG] [Thread-71821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:14:24.192 [DEBUG] [Thread-71821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:14:24.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:14:24.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:14:24.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:14:24.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:14:24.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:14:24.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:14:24.227 [DEBUG] [Thread-71821] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:14:30.768 [DEBUG] [Thread-71823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:45.803 [DEBUG] [Thread-71824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:49.932 [DEBUG] [Thread-71825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:54.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:14:54.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:14:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:14:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 14, 28), 21.66, 23.19, 0.0, 50.11, 20.68, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:14:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:14:28
2025-12-12T15:14:55.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:14:55.210 [DEBUG] [Thread-71826] [transport.py] [_log()] starting thread (client mode): 0xf574c8e0
2025-12-12T15:14:55.210 [DEBUG] [Thread-71826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:14:55.232 [DEBUG] [Thread-71826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:14:55.232 [INFO] [Thread-71826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] client lang: <none>
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] server lang: <none>
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] kex follows: False
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:14:55.236 [DEBUG] [Thread-71826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:14:55.237 [DEBUG] [Thread-71826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:14:55.237 [DEBUG] [Thread-71826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:14:55.237 [DEBUG] [Thread-71826] [transport.py] [_log()] Compression: none
2025-12-12T15:14:55.237 [DEBUG] [Thread-71826] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:14:55.254 [DEBUG] [Thread-71826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:14:55.254 [DEBUG] [Thread-71826] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:14:55.255 [DEBUG] [Thread-71826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:14:55.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:14:55.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:14:55.256 [DEBUG] [Thread-71826] [transport.py] [_log()] userauth is OK
2025-12-12T15:14:55.257 [DEBUG] [Thread-71826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:14:55.257 [DEBUG] [Thread-71826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:14:55.257 [DEBUG] [Thread-71826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:14:55.257 [DEBUG] [Thread-71826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:14:55.294 [INFO] [Thread-71826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:14:55.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:14:55.933 [DEBUG] [Thread-71826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:14:55.933 [DEBUG] [Thread-71826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:14:55.933 [DEBUG] [Thread-71826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:14:55.974 [DEBUG] [Thread-71826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:14:55.974 [DEBUG] [Thread-71826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:14:55.977 [DEBUG] [Thread-71826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:14:55.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:14:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:14:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:14:55.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:14:55.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:14:56.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:14:56.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:14:56.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.551830 -999.00  +20.70  49.36     29   +2.30 1 1 2 1 1   888    0 20.63 40.26 ----- 44.5 49.4 308.8 67.9 24.4 -26.3 24.1 -25.7 24.6 -23.0 25.2 -23.1
2025-12-12T15:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:14:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.551830
2025-12-12T15:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:14:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:14:28', tmtdew=21.66, humidity=23.19, cloud=0.0, wind=50.11, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:14:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:14:56.003 [DEBUG] [Thread-71826] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:14:56.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:14:56.100 [DEBUG] [Thread-71829] [transport.py] [_log()] starting thread (client mode): 0xf574fa90
2025-12-12T15:14:56.100 [DEBUG] [Thread-71829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:14:56.116 [DEBUG] [Thread-71829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:14:56.116 [INFO] [Thread-71829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:14:56.123 [DEBUG] [Thread-71829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] client lang: <none>
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] server lang: <none>
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] kex follows: False
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] Compression: none
2025-12-12T15:14:56.124 [DEBUG] [Thread-71829] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:14:56.180 [DEBUG] [Thread-71829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:14:56.181 [DEBUG] [Thread-71829] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:14:56.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:14:56.182 [DEBUG] [Thread-71829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:14:56.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:14:56.237 [DEBUG] [Thread-71829] [transport.py] [_log()] userauth is OK
2025-12-12T15:14:56.237 [DEBUG] [Thread-71829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:14:56.237 [DEBUG] [Thread-71829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:14:56.237 [DEBUG] [Thread-71829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:14:56.237 [DEBUG] [Thread-71829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:14:56.256 [INFO] [Thread-71829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:14:56.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:14:56.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:14:57.163 [DEBUG] [Thread-71829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:14:57.164 [DEBUG] [Thread-71829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:14:57.212 [DEBUG] [Thread-71829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:14:57.212 [DEBUG] [Thread-71829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:14:57.221 [DEBUG] [Thread-71829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:14:57.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:14:57.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:14:57.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:14:57.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:14:57.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:14:57.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:14:57.255 [DEBUG] [Thread-71829] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:14:59.195 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:14:59.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:00.833 [DEBUG] [Thread-71831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:15.880 [DEBUG] [Thread-71832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:15:27.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:15:27.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:15:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 15), 21.26, 23.74, 0.0, 55.19, 20.61, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:15:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:15:00
2025-12-12T15:15:28.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:15:28.302 [DEBUG] [Thread-71833] [transport.py] [_log()] starting thread (client mode): 0xf81c2620
2025-12-12T15:15:28.302 [DEBUG] [Thread-71833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:15:28.322 [DEBUG] [Thread-71833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:15:28.322 [INFO] [Thread-71833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:15:28.325 [DEBUG] [Thread-71833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] client lang: <none>
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] server lang: <none>
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] kex follows: False
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] Compression: none
2025-12-12T15:15:28.326 [DEBUG] [Thread-71833] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:15:28.343 [DEBUG] [Thread-71833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:15:28.343 [DEBUG] [Thread-71833] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:15:28.343 [DEBUG] [Thread-71833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:15:28.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:15:28.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:15:28.344 [DEBUG] [Thread-71833] [transport.py] [_log()] userauth is OK
2025-12-12T15:15:28.344 [DEBUG] [Thread-71833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:15:28.344 [DEBUG] [Thread-71833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:15:28.344 [DEBUG] [Thread-71833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:15:28.344 [DEBUG] [Thread-71833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:15:28.353 [INFO] [Thread-71833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:15:28.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:15:29.207 [DEBUG] [Thread-71833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:15:29.207 [DEBUG] [Thread-71833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:15:29.207 [DEBUG] [Thread-71833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:15:29.249 [DEBUG] [Thread-71833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:15:29.249 [DEBUG] [Thread-71833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:15:29.251 [DEBUG] [Thread-71833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:15:29.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:15:29.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:15:29.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:15:29.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:15:29.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:15:29.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:15:29.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.552177 -999.00  +20.40  58.85     30   +2.30 1 1 2 1 1   888    0 20.15 34.03 ----- 57.1 58.9 311.2 68.0 24.3 -26.5 24.0 -25.6 24.4 -24.6 25.2 -23.9
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.552177
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:15:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:15:00', tmtdew=21.26, humidity=23.74, cloud=0.0, wind=55.19, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:15:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:15:29.270 [DEBUG] [Thread-71833] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:15:29.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:15:29.354 [DEBUG] [Thread-71836] [transport.py] [_log()] starting thread (client mode): 0xf81c3fd0
2025-12-12T15:15:29.355 [DEBUG] [Thread-71836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:15:29.369 [DEBUG] [Thread-71836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:15:29.369 [INFO] [Thread-71836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] client lang: <none>
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] server lang: <none>
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] kex follows: False
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] Compression: none
2025-12-12T15:15:29.377 [DEBUG] [Thread-71836] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:15:29.440 [DEBUG] [Thread-71836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:15:29.440 [DEBUG] [Thread-71836] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:15:29.440 [DEBUG] [Thread-71836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:15:29.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:15:29.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:15:29.501 [DEBUG] [Thread-71836] [transport.py] [_log()] userauth is OK
2025-12-12T15:15:29.501 [DEBUG] [Thread-71836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:15:29.501 [DEBUG] [Thread-71836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:15:29.501 [DEBUG] [Thread-71836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:15:29.501 [DEBUG] [Thread-71836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:15:29.515 [INFO] [Thread-71836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:15:29.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:15:29.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:15:30.392 [DEBUG] [Thread-71836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:15:30.392 [DEBUG] [Thread-71836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:15:30.442 [DEBUG] [Thread-71836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:15:30.442 [DEBUG] [Thread-71836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:15:30.453 [DEBUG] [Thread-71836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:15:30.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:15:30.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:15:30.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:15:30.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:15:30.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:15:30.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:15:30.495 [DEBUG] [Thread-71836] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:15:30.908 [DEBUG] [Thread-71838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:45.942 [DEBUG] [Thread-71839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:50.000 [DEBUG] [Thread-71840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:59.337 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:15:59.338 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:16:00.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:16:00.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:16:00.970 [DEBUG] [Thread-71841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:01.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 15, 32), 20.86, 24.38, 0.0, 61.73, 20.35, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:16:01.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:15:32
2025-12-12T15:16:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:16:01.479 [DEBUG] [Thread-71842] [transport.py] [_log()] starting thread (client mode): 0xf81c2020
2025-12-12T15:16:01.479 [DEBUG] [Thread-71842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:16:01.500 [DEBUG] [Thread-71842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:16:01.500 [INFO] [Thread-71842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:16:01.503 [DEBUG] [Thread-71842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:16:01.503 [DEBUG] [Thread-71842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:16:01.503 [DEBUG] [Thread-71842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] client lang: <none>
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] server lang: <none>
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] kex follows: False
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] Compression: none
2025-12-12T15:16:01.504 [DEBUG] [Thread-71842] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:16:01.512 [DEBUG] [Thread-71842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:16:01.513 [DEBUG] [Thread-71842] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:16:01.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:16:01.514 [DEBUG] [Thread-71842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:16:01.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:16:01.515 [DEBUG] [Thread-71842] [transport.py] [_log()] userauth is OK
2025-12-12T15:16:01.515 [DEBUG] [Thread-71842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:16:01.516 [DEBUG] [Thread-71842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:16:01.516 [DEBUG] [Thread-71842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:16:01.516 [DEBUG] [Thread-71842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:16:01.533 [INFO] [Thread-71842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:16:01.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:16:02.176 [DEBUG] [Thread-71842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:16:02.176 [DEBUG] [Thread-71842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:16:02.176 [DEBUG] [Thread-71842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:16:02.217 [DEBUG] [Thread-71842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:16:02.217 [DEBUG] [Thread-71842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:16:02.219 [DEBUG] [Thread-71842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:16:02.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:16:02.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:16:02.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:16:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:16:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:16:02.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:16:02.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:16:02.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:16:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:16:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.552524 -999.00  +20.40  54.38     30   +2.50 1 1 2 1 1   888    0 20.30 28.28 ----- 52.8 54.4 336.8 76.1 24.4 -25.0 24.1 -25.0 24.7 -22.1 25.1 -22.7
2025-12-12T15:16:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:16:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:16:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.552524
2025-12-12T15:16:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:16:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:16:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:16:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:16:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:16:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:15:32', tmtdew=20.86, humidity=24.38, cloud=0.0, wind=61.73, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:15:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:16:02.246 [DEBUG] [Thread-71842] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:16:02.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:16:02.342 [DEBUG] [Thread-71845] [transport.py] [_log()] starting thread (client mode): 0xf570d2d0
2025-12-12T15:16:02.342 [DEBUG] [Thread-71845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:16:02.357 [DEBUG] [Thread-71845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:16:02.357 [INFO] [Thread-71845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] client lang: <none>
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] server lang: <none>
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] kex follows: False
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] Compression: none
2025-12-12T15:16:02.365 [DEBUG] [Thread-71845] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:16:02.427 [DEBUG] [Thread-71845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:16:02.427 [DEBUG] [Thread-71845] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:16:02.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:16:02.428 [DEBUG] [Thread-71845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:16:02.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:16:02.484 [DEBUG] [Thread-71845] [transport.py] [_log()] userauth is OK
2025-12-12T15:16:02.485 [DEBUG] [Thread-71845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:16:02.485 [DEBUG] [Thread-71845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:16:02.485 [DEBUG] [Thread-71845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:16:02.485 [DEBUG] [Thread-71845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:16:02.507 [INFO] [Thread-71845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:16:02.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:16:02.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:16:03.341 [DEBUG] [Thread-71845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:16:03.341 [DEBUG] [Thread-71845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:16:03.389 [DEBUG] [Thread-71845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:16:03.389 [DEBUG] [Thread-71845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:16:03.398 [DEBUG] [Thread-71845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:16:03.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:16:03.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:16:03.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:16:03.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:16:03.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:16:03.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:16:03.432 [DEBUG] [Thread-71845] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:16:15.996 [DEBUG] [Thread-71847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:31.043 [DEBUG] [Thread-71848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:16:33.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:16:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:16:34.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 16, 4), 20.68, 24.72, 0.0, 60.62, 20.4, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:16:34.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:16:04
2025-12-12T15:16:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:16:34.409 [DEBUG] [Thread-71849] [transport.py] [_log()] starting thread (client mode): 0xf81e4e50
2025-12-12T15:16:34.409 [DEBUG] [Thread-71849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:16:34.430 [DEBUG] [Thread-71849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:16:34.430 [INFO] [Thread-71849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] client lang: <none>
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] server lang: <none>
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] kex follows: False
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:16:34.433 [DEBUG] [Thread-71849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:16:34.434 [DEBUG] [Thread-71849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:16:34.434 [DEBUG] [Thread-71849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:16:34.434 [DEBUG] [Thread-71849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:16:34.434 [DEBUG] [Thread-71849] [transport.py] [_log()] Compression: none
2025-12-12T15:16:34.434 [DEBUG] [Thread-71849] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:16:34.449 [DEBUG] [Thread-71849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:16:34.449 [DEBUG] [Thread-71849] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:16:34.450 [DEBUG] [Thread-71849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:16:34.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:16:34.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:16:34.452 [DEBUG] [Thread-71849] [transport.py] [_log()] userauth is OK
2025-12-12T15:16:34.452 [DEBUG] [Thread-71849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:16:34.452 [DEBUG] [Thread-71849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:16:34.452 [DEBUG] [Thread-71849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:16:34.452 [DEBUG] [Thread-71849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:16:34.475 [INFO] [Thread-71849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:16:34.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:16:35.271 [DEBUG] [Thread-71849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:16:35.271 [DEBUG] [Thread-71849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:16:35.271 [DEBUG] [Thread-71849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:16:35.313 [DEBUG] [Thread-71849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:16:35.313 [DEBUG] [Thread-71849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:16:35.316 [DEBUG] [Thread-71849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:16:35.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:16:35.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:16:35.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:16:35.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:16:35.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:16:35.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:16:35.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:16:35.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:16:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:16:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.552872 -999.00  +20.70  49.20     31   +3.10 1 1 2 1 1   888    0 19.76 18.98 ----- 48.8 49.2 310.8 68.2 24.4 -25.1 24.1 -25.2 24.6 -23.4 25.2 -22.9
2025-12-12T15:16:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:16:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:16:35.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.552872
2025-12-12T15:16:35.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:16:35.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:16:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:16:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:16:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:16:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:16:04', tmtdew=20.68, humidity=24.72, cloud=0.0, wind=60.62, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:16:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:16:35.344 [DEBUG] [Thread-71849] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:16:35.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:16:35.441 [DEBUG] [Thread-71852] [transport.py] [_log()] starting thread (client mode): 0xf575f460
2025-12-12T15:16:35.442 [DEBUG] [Thread-71852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:16:35.456 [DEBUG] [Thread-71852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:16:35.456 [INFO] [Thread-71852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] client lang: <none>
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] server lang: <none>
2025-12-12T15:16:35.464 [DEBUG] [Thread-71852] [transport.py] [_log()] kex follows: False
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] Compression: none
2025-12-12T15:16:35.465 [DEBUG] [Thread-71852] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:16:35.522 [DEBUG] [Thread-71852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:16:35.523 [DEBUG] [Thread-71852] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:16:35.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:16:35.523 [DEBUG] [Thread-71852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:16:35.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:16:35.581 [DEBUG] [Thread-71852] [transport.py] [_log()] userauth is OK
2025-12-12T15:16:35.581 [DEBUG] [Thread-71852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:16:35.581 [DEBUG] [Thread-71852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:16:35.581 [DEBUG] [Thread-71852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:16:35.581 [DEBUG] [Thread-71852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:16:35.601 [INFO] [Thread-71852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:16:35.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:16:35.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:16:36.445 [DEBUG] [Thread-71852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:16:36.445 [DEBUG] [Thread-71852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:16:36.493 [DEBUG] [Thread-71852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:16:36.493 [DEBUG] [Thread-71852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:16:36.502 [DEBUG] [Thread-71852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:16:36.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:16:36.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:16:36.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:16:36.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:16:36.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:16:36.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:16:36.536 [DEBUG] [Thread-71852] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:16:46.071 [DEBUG] [Thread-71854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:50.052 [DEBUG] [Thread-71855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:59.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:16:59.479 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:01.105 [DEBUG] [Thread-71856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:17:06.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:17:06.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:17:07.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 16, 36), 19.63, 27.1, 0.0, 60.18, 20.13, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:17:07.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:16:36
2025-12-12T15:17:07.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:17:07.523 [DEBUG] [Thread-71857] [transport.py] [_log()] starting thread (client mode): 0xf81e7f40
2025-12-12T15:17:07.523 [DEBUG] [Thread-71857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:17:07.543 [DEBUG] [Thread-71857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:17:07.543 [INFO] [Thread-71857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] client lang: <none>
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] server lang: <none>
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] kex follows: False
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:17:07.547 [DEBUG] [Thread-71857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:17:07.548 [DEBUG] [Thread-71857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:17:07.548 [DEBUG] [Thread-71857] [transport.py] [_log()] Compression: none
2025-12-12T15:17:07.548 [DEBUG] [Thread-71857] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:17:07.564 [DEBUG] [Thread-71857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:17:07.564 [DEBUG] [Thread-71857] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:17:07.565 [DEBUG] [Thread-71857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:17:07.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:17:07.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:17:07.608 [DEBUG] [Thread-71857] [transport.py] [_log()] userauth is OK
2025-12-12T15:17:07.609 [DEBUG] [Thread-71857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:17:07.609 [DEBUG] [Thread-71857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:17:07.609 [DEBUG] [Thread-71857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:17:07.609 [DEBUG] [Thread-71857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:17:07.629 [INFO] [Thread-71857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:17:07.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:17:08.249 [DEBUG] [Thread-71857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:17:08.249 [DEBUG] [Thread-71857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:17:08.249 [DEBUG] [Thread-71857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:17:08.290 [DEBUG] [Thread-71857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:17:08.290 [DEBUG] [Thread-71857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:17:08.293 [DEBUG] [Thread-71857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:17:08.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:17:08.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:17:08.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:17:08.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:17:08.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:17:08.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:17:08.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:17:08.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:17:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:17:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.553219 -999.00  +20.70  47.02     32   +3.40 1 1 2 1 1   888    0 19.53 7.87 ----- 42.0 47.0 302.5 63.6 24.3 -26.1 24.1 -26.8 24.6 -22.0 25.2 -24.0
2025-12-12T15:17:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:17:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:17:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.553219
2025-12-12T15:17:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:17:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:17:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:17:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:17:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:17:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:16:36', tmtdew=19.63, humidity=27.1, cloud=0.0, wind=60.18, temperature=20.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:16:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:17:08.315 [DEBUG] [Thread-71857] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:17:08.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:17:08.411 [DEBUG] [Thread-71860] [transport.py] [_log()] starting thread (client mode): 0xf81c0550
2025-12-12T15:17:08.411 [DEBUG] [Thread-71860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:17:08.427 [DEBUG] [Thread-71860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:17:08.427 [INFO] [Thread-71860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:17:08.434 [DEBUG] [Thread-71860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] client lang: <none>
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] server lang: <none>
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] kex follows: False
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] Compression: none
2025-12-12T15:17:08.435 [DEBUG] [Thread-71860] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:17:08.493 [DEBUG] [Thread-71860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:17:08.493 [DEBUG] [Thread-71860] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:17:08.494 [DEBUG] [Thread-71860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:17:08.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:17:08.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:17:08.549 [DEBUG] [Thread-71860] [transport.py] [_log()] userauth is OK
2025-12-12T15:17:08.549 [DEBUG] [Thread-71860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:17:08.549 [DEBUG] [Thread-71860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:17:08.549 [DEBUG] [Thread-71860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:17:08.549 [DEBUG] [Thread-71860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:17:08.569 [INFO] [Thread-71860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:17:08.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:17:08.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:17:09.458 [DEBUG] [Thread-71860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:17:09.458 [DEBUG] [Thread-71860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:17:09.505 [DEBUG] [Thread-71860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:17:09.505 [DEBUG] [Thread-71860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:17:09.513 [DEBUG] [Thread-71860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:17:09.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:17:09.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:17:09.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:17:09.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:17:09.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:17:09.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:17:09.544 [DEBUG] [Thread-71860] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:17:16.137 [DEBUG] [Thread-71862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:31.185 [DEBUG] [Thread-71863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:39.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:17:39.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:17:39.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:17:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 17, 9), 19.82, 26.8, 0.0, 59.9, 20.31, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:17:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:17:09
2025-12-12T15:17:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:17:40.538 [DEBUG] [Thread-71864] [transport.py] [_log()] starting thread (client mode): 0xfabc6470
2025-12-12T15:17:40.538 [DEBUG] [Thread-71864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:17:40.558 [DEBUG] [Thread-71864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:17:40.558 [INFO] [Thread-71864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:17:40.561 [DEBUG] [Thread-71864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:17:40.561 [DEBUG] [Thread-71864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:17:40.561 [DEBUG] [Thread-71864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:17:40.561 [DEBUG] [Thread-71864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:40.561 [DEBUG] [Thread-71864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:40.561 [DEBUG] [Thread-71864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] client lang: <none>
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] server lang: <none>
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] kex follows: False
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] Compression: none
2025-12-12T15:17:40.562 [DEBUG] [Thread-71864] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:17:40.581 [DEBUG] [Thread-71864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:17:40.581 [DEBUG] [Thread-71864] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:17:40.582 [DEBUG] [Thread-71864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:17:40.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:17:40.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:17:40.584 [DEBUG] [Thread-71864] [transport.py] [_log()] userauth is OK
2025-12-12T15:17:40.584 [DEBUG] [Thread-71864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:17:40.584 [DEBUG] [Thread-71864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:17:40.584 [DEBUG] [Thread-71864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:17:40.584 [DEBUG] [Thread-71864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:17:40.606 [INFO] [Thread-71864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:17:40.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:17:41.412 [DEBUG] [Thread-71864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:17:41.412 [DEBUG] [Thread-71864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:17:41.412 [DEBUG] [Thread-71864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:17:41.453 [DEBUG] [Thread-71864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:17:41.453 [DEBUG] [Thread-71864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:17:41.456 [DEBUG] [Thread-71864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:17:41.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:17:41.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:17:41.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:17:41.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:17:41.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:17:41.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:17:41.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:17:41.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.553566 -999.00  +21.20  48.69     31   +3.60 1 1 2 1 1   888    0 18.82 -0.39 ----- 43.0 48.7 310.8 57.1 24.5 -25.1 24.2 -24.8 24.8 -23.4 25.3 -22.5
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.553566
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:17:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:17:09', tmtdew=19.82, humidity=26.8, cloud=0.0, wind=59.9, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:17:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:17:41.475 [DEBUG] [Thread-71864] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:17:41.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:17:41.560 [DEBUG] [Thread-71867] [transport.py] [_log()] starting thread (client mode): 0xfabc7a30
2025-12-12T15:17:41.560 [DEBUG] [Thread-71867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:17:41.575 [DEBUG] [Thread-71867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:17:41.575 [INFO] [Thread-71867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] client lang: <none>
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] server lang: <none>
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] kex follows: False
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] Compression: none
2025-12-12T15:17:41.583 [DEBUG] [Thread-71867] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:17:41.639 [DEBUG] [Thread-71867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:17:41.639 [DEBUG] [Thread-71867] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:17:41.639 [DEBUG] [Thread-71867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:17:41.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:17:41.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:17:41.697 [DEBUG] [Thread-71867] [transport.py] [_log()] userauth is OK
2025-12-12T15:17:41.697 [DEBUG] [Thread-71867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:17:41.697 [DEBUG] [Thread-71867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:17:41.697 [DEBUG] [Thread-71867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:17:41.697 [DEBUG] [Thread-71867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:17:41.715 [INFO] [Thread-71867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:17:41.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:17:41.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:17:42.558 [DEBUG] [Thread-71867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:17:42.558 [DEBUG] [Thread-71867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:17:42.606 [DEBUG] [Thread-71867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:17:42.606 [DEBUG] [Thread-71867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:17:42.615 [DEBUG] [Thread-71867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:17:42.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:17:42.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:17: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
2025-12-12T15:17:42.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:17:42.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:17:42.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:17:42.646 [DEBUG] [Thread-71867] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:17:46.215 [DEBUG] [Thread-71869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:50.107 [DEBUG] [Thread-71870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:59.619 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:17:59.620 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:01.263 [DEBUG] [Thread-71871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:18:12.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:18:12.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:18:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 17, 41), 19.69, 27.05, 0.0, 51.03, 20.48, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:18:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:17:41
2025-12-12T15:18:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:18:13.663 [DEBUG] [Thread-71872] [transport.py] [_log()] starting thread (client mode): 0xf575e110
2025-12-12T15:18:13.664 [DEBUG] [Thread-71872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:18:13.682 [DEBUG] [Thread-71872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:18:13.682 [INFO] [Thread-71872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:18:13.685 [DEBUG] [Thread-71872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] client lang: <none>
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] server lang: <none>
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] kex follows: False
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] Compression: none
2025-12-12T15:18:13.686 [DEBUG] [Thread-71872] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:18:13.701 [DEBUG] [Thread-71872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:18:13.701 [DEBUG] [Thread-71872] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:18:13.701 [DEBUG] [Thread-71872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:18:13.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:18:13.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:18:13.702 [DEBUG] [Thread-71872] [transport.py] [_log()] userauth is OK
2025-12-12T15:18:13.702 [DEBUG] [Thread-71872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:18:13.702 [DEBUG] [Thread-71872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:18:13.702 [DEBUG] [Thread-71872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:18:13.702 [DEBUG] [Thread-71872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:18:13.711 [INFO] [Thread-71872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:18:13.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:18:14.320 [DEBUG] [Thread-71872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:18:14.320 [DEBUG] [Thread-71872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:18:14.320 [DEBUG] [Thread-71872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:18:14.361 [DEBUG] [Thread-71872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:18:14.362 [DEBUG] [Thread-71872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:18:14.364 [DEBUG] [Thread-71872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:18:14.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:18:14.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:18:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:18:14.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:18:14.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:18:14.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.553913 -999.00  +20.40  47.40     32   +3.20 1 1 2 1 1   888    0 18.78 -6.85 ----- 50.1 47.4 313.8 62.1 24.4 -26.1 24.1 -26.1 24.6 -27.5 25.2 -24.3
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.553913
2025-12-12T15:18:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:18:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:18:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:18:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:18:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:18:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:17:41', tmtdew=19.69, humidity=27.05, cloud=0.0, wind=51.03, temperature=20.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:17:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:18:14.382 [DEBUG] [Thread-71872] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:18:14.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:18:14.468 [DEBUG] [Thread-71875] [transport.py] [_log()] starting thread (client mode): 0xf81e7f40
2025-12-12T15:18:14.468 [DEBUG] [Thread-71875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:18:14.485 [DEBUG] [Thread-71875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:18:14.485 [INFO] [Thread-71875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] client lang: <none>
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] server lang: <none>
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] kex follows: False
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] Compression: none
2025-12-12T15:18:14.493 [DEBUG] [Thread-71875] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:18:14.551 [DEBUG] [Thread-71875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:18:14.551 [DEBUG] [Thread-71875] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:18:14.552 [DEBUG] [Thread-71875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:18:14.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:18:14.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:18:14.608 [DEBUG] [Thread-71875] [transport.py] [_log()] userauth is OK
2025-12-12T15:18:14.609 [DEBUG] [Thread-71875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:18:14.609 [DEBUG] [Thread-71875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:18:14.609 [DEBUG] [Thread-71875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:18:14.609 [DEBUG] [Thread-71875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:18:14.624 [INFO] [Thread-71875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:18:14.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:18:14.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:18:15.518 [DEBUG] [Thread-71875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:18:15.518 [DEBUG] [Thread-71875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:18:15.566 [DEBUG] [Thread-71875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:18:15.566 [DEBUG] [Thread-71875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:18:15.575 [DEBUG] [Thread-71875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:18:15.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:18:15.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:18:15.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:18:15.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:18:15.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:18:15.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:18:15.610 [DEBUG] [Thread-71875] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:18:16.290 [DEBUG] [Thread-71877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:31.336 [DEBUG] [Thread-71878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:45.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:18:45.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:18:45.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:18:46.364 [DEBUG] [Thread-71879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:46.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 18, 13), 19.87, 26.73, 0.0, 51.82, 20.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:18:46.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:18:13
2025-12-12T15:18:46.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:18:46.704 [DEBUG] [Thread-71880] [transport.py] [_log()] starting thread (client mode): 0xf570df30
2025-12-12T15:18:46.704 [DEBUG] [Thread-71880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:18:46.724 [DEBUG] [Thread-71880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:18:46.724 [INFO] [Thread-71880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:18:46.727 [DEBUG] [Thread-71880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] client lang: <none>
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] server lang: <none>
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] kex follows: False
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] Compression: none
2025-12-12T15:18:46.728 [DEBUG] [Thread-71880] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:18:46.744 [DEBUG] [Thread-71880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:18:46.744 [DEBUG] [Thread-71880] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:18:46.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:18:46.744 [DEBUG] [Thread-71880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:18:46.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:18:46.745 [DEBUG] [Thread-71880] [transport.py] [_log()] userauth is OK
2025-12-12T15:18:46.745 [DEBUG] [Thread-71880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:18:46.745 [DEBUG] [Thread-71880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:18:46.745 [DEBUG] [Thread-71880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:18:46.745 [DEBUG] [Thread-71880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:18:46.755 [INFO] [Thread-71880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:18:46.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:18:47.549 [DEBUG] [Thread-71880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:18:47.549 [DEBUG] [Thread-71880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:18:47.549 [DEBUG] [Thread-71880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:18:47.590 [DEBUG] [Thread-71880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:18:47.590 [DEBUG] [Thread-71880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:18:47.592 [DEBUG] [Thread-71880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:18:47.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:18:47.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:18:47.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:18:47.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:18:47.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:18:47.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:18:47.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.554261 -999.00  +20.40  38.80     32   +3.30 1 1 2 1 1   888    0 18.52 -18.74 ----- 41.4 38.8 298.4 53.6 24.3 -25.7 23.9 -25.6 24.6 -22.0 25.1 -23.7
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.554261
2025-12-12T15:18:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:18:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:18:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:18:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:18:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:18:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:18:13', tmtdew=19.87, humidity=26.73, cloud=0.0, wind=51.82, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:18:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:18:47.611 [DEBUG] [Thread-71880] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:18:47.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:18:47.698 [DEBUG] [Thread-71883] [transport.py] [_log()] starting thread (client mode): 0xf574ee60
2025-12-12T15:18:47.698 [DEBUG] [Thread-71883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:18:47.713 [DEBUG] [Thread-71883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:18:47.713 [INFO] [Thread-71883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:18:47.720 [DEBUG] [Thread-71883] [transport.py] [_log()] client lang: <none>
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] server lang: <none>
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] kex follows: False
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] Compression: none
2025-12-12T15:18:47.721 [DEBUG] [Thread-71883] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:18:47.776 [DEBUG] [Thread-71883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:18:47.776 [DEBUG] [Thread-71883] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:18:47.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:18:47.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:18:47.776 [DEBUG] [Thread-71883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:18:47.833 [DEBUG] [Thread-71883] [transport.py] [_log()] userauth is OK
2025-12-12T15:18:47.833 [DEBUG] [Thread-71883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:18:47.833 [DEBUG] [Thread-71883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:18:47.833 [DEBUG] [Thread-71883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:18:47.833 [DEBUG] [Thread-71883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:18:47.855 [INFO] [Thread-71883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:18:47.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:18:47.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:18:48.745 [DEBUG] [Thread-71883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:18:48.745 [DEBUG] [Thread-71883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:18:48.793 [DEBUG] [Thread-71883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:18:48.793 [DEBUG] [Thread-71883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:18:48.802 [DEBUG] [Thread-71883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:18:48.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:18:48.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:18:48.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:18:48.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:18:48.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:18:48.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:18:48.837 [DEBUG] [Thread-71883] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:18:50.156 [DEBUG] [Thread-71885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:59.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:18:59.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:01.392 [DEBUG] [Thread-71886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:16.435 [DEBUG] [Thread-71887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:18.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:19:18.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:19:18.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:19:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 18, 45), 19.74, 26.56, 0.0, 40.19, 20.03, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:19:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:18:45
2025-12-12T15:19:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:19:19.848 [DEBUG] [Thread-71888] [transport.py] [_log()] starting thread (client mode): 0xf574db70
2025-12-12T15:19:19.848 [DEBUG] [Thread-71888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:19:19.868 [DEBUG] [Thread-71888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:19:19.868 [INFO] [Thread-71888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] client lang: <none>
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] server lang: <none>
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] kex follows: False
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] Compression: none
2025-12-12T15:19:19.871 [DEBUG] [Thread-71888] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:19:19.887 [DEBUG] [Thread-71888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:19:19.888 [DEBUG] [Thread-71888] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:19:19.888 [DEBUG] [Thread-71888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:19:19.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:19:19.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:19:19.890 [DEBUG] [Thread-71888] [transport.py] [_log()] userauth is OK
2025-12-12T15:19:19.890 [DEBUG] [Thread-71888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:19:19.891 [DEBUG] [Thread-71888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:19:19.891 [DEBUG] [Thread-71888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:19:19.891 [DEBUG] [Thread-71888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:19:19.911 [INFO] [Thread-71888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:19:19.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:19:20.527 [DEBUG] [Thread-71888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:19:20.527 [DEBUG] [Thread-71888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:19:20.528 [DEBUG] [Thread-71888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:19:20.568 [DEBUG] [Thread-71888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:19:20.568 [DEBUG] [Thread-71888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:19:20.571 [DEBUG] [Thread-71888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:19:20.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:19:20.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:19:20.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:19:20.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:19:20.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:19:20.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:19:20.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:19:20.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:19:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:19:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.554608 -999.00  +20.50  38.72     31   +3.10 1 1 2 1 1   888    0 18.21 -29.57 ----- 36.6 38.7 308.0 51.1 24.4 -25.9 24.1 -26.5 24.6 -22.4 25.2 -23.9
2025-12-12T15:19:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:19:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:19:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.554608
2025-12-12T15:19:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:19:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:19:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:19:20.594 [DEBUG] [Thread-71888] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:19:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:19:20.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:19:20.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:18:45', tmtdew=19.74, humidity=26.56, cloud=0.0, wind=40.19, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:18:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:19:20.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:19:20.693 [DEBUG] [Thread-71891] [transport.py] [_log()] starting thread (client mode): 0xf81f0d90
2025-12-12T15:19:20.693 [DEBUG] [Thread-71891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:19:20.707 [DEBUG] [Thread-71891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:19:20.707 [INFO] [Thread-71891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] client lang: <none>
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] server lang: <none>
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] kex follows: False
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] Compression: none
2025-12-12T15:19:20.716 [DEBUG] [Thread-71891] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:19:20.776 [DEBUG] [Thread-71891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:19:20.776 [DEBUG] [Thread-71891] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:19:20.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:19:20.776 [DEBUG] [Thread-71891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:19:20.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:19:20.833 [DEBUG] [Thread-71891] [transport.py] [_log()] userauth is OK
2025-12-12T15:19:20.833 [DEBUG] [Thread-71891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:19:20.833 [DEBUG] [Thread-71891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:19:20.833 [DEBUG] [Thread-71891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:19:20.833 [DEBUG] [Thread-71891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:19:20.851 [INFO] [Thread-71891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:19:20.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:19:20.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:19:21.711 [DEBUG] [Thread-71891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:19:21.711 [DEBUG] [Thread-71891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:19:21.758 [DEBUG] [Thread-71891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:19:21.758 [DEBUG] [Thread-71891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:19:21.767 [DEBUG] [Thread-71891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:19:21.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:19:21.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')
2025-12-12T15:19: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
2025-12-12T15:19:21.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:19:21.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:19:21.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:19:21.798 [DEBUG] [Thread-71891] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:19:31.466 [DEBUG] [Thread-71893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:46.515 [DEBUG] [Thread-71894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:50.204 [DEBUG] [Thread-71895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:51.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:19:51.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:19:51.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:19:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 19, 49), 20.88, 24.47, 0.0, 61.03, 20.16, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:19:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:19:49
2025-12-12T15:19:52.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:19:52.772 [DEBUG] [Thread-71896] [transport.py] [_log()] starting thread (client mode): 0xf574e6e0
2025-12-12T15:19:52.772 [DEBUG] [Thread-71896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:19:52.793 [DEBUG] [Thread-71896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:19:52.793 [INFO] [Thread-71896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:19:52.796 [DEBUG] [Thread-71896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:19:52.796 [DEBUG] [Thread-71896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:19:52.796 [DEBUG] [Thread-71896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:19:52.796 [DEBUG] [Thread-71896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:52.796 [DEBUG] [Thread-71896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:52.796 [DEBUG] [Thread-71896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] client lang: <none>
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] server lang: <none>
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] kex follows: False
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] Compression: none
2025-12-12T15:19:52.797 [DEBUG] [Thread-71896] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:19:52.813 [DEBUG] [Thread-71896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:19:52.813 [DEBUG] [Thread-71896] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:19:52.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:19:52.814 [DEBUG] [Thread-71896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:19:52.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:19:52.815 [DEBUG] [Thread-71896] [transport.py] [_log()] userauth is OK
2025-12-12T15:19:52.816 [DEBUG] [Thread-71896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:19:52.816 [DEBUG] [Thread-71896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:19:52.816 [DEBUG] [Thread-71896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:19:52.816 [DEBUG] [Thread-71896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:19:52.836 [INFO] [Thread-71896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:19:52.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:19:53.603 [DEBUG] [Thread-71896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:19:53.603 [DEBUG] [Thread-71896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:19:53.603 [DEBUG] [Thread-71896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:19:53.644 [DEBUG] [Thread-71896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:19:53.644 [DEBUG] [Thread-71896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:19:53.646 [DEBUG] [Thread-71896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:19:53.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:19:53.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:19:53.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:19:53.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:19:53.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:19:53.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:19:53.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:19:53.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:19:53.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:19:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.555302 -999.00  +20.70  44.50     29   +2.10 1 1 2 1 1   888    0 17.77 -42.86 ----- 53.3 44.5 309.3 63.8 24.2 -26.6 24.0 -26.2 24.6 -23.1 25.1 -24.3
2025-12-12T15:19:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:19:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:19:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.555302
2025-12-12T15:19:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:19:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:19:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:19:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:19:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:19:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:19:49', tmtdew=20.88, humidity=24.47, cloud=0.0, wind=61.03, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:19:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:19:53.669 [DEBUG] [Thread-71896] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:19:53.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:19:53.766 [DEBUG] [Thread-71899] [transport.py] [_log()] starting thread (client mode): 0xf81c3ca0
2025-12-12T15:19:53.766 [DEBUG] [Thread-71899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:19:53.780 [DEBUG] [Thread-71899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:19:53.780 [INFO] [Thread-71899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:19:53.788 [DEBUG] [Thread-71899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] client lang: <none>
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] server lang: <none>
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] kex follows: False
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] Compression: none
2025-12-12T15:19:53.789 [DEBUG] [Thread-71899] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:19:53.844 [DEBUG] [Thread-71899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:19:53.845 [DEBUG] [Thread-71899] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:19:53.845 [DEBUG] [Thread-71899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:19:53.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:19:53.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:19:53.901 [DEBUG] [Thread-71899] [transport.py] [_log()] userauth is OK
2025-12-12T15:19:53.901 [DEBUG] [Thread-71899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:19:53.901 [DEBUG] [Thread-71899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:19:53.902 [DEBUG] [Thread-71899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:19:53.902 [DEBUG] [Thread-71899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:19:53.920 [INFO] [Thread-71899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:19:53.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:19:53.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:19:54.749 [DEBUG] [Thread-71899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:19:54.749 [DEBUG] [Thread-71899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:19:54.797 [DEBUG] [Thread-71899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:19:54.797 [DEBUG] [Thread-71899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:19:54.806 [DEBUG] [Thread-71899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:19:54.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:19:54.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')
2025-12-12T15:19: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') -> 00000000
2025-12-12T15:19:54.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:19:54.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:19:54.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:19:54.847 [DEBUG] [Thread-71899] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:19:59.904 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:19:59.905 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:20:01.547 [DEBUG] [Thread-71901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:20:16.580 [DEBUG] [Thread-71902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:20:24.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:20:24.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:20:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:20:25.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 20, 21), 20.72, 24.77, 0.0, 61.24, 20.2, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:20:25.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:20:21
2025-12-12T15:20:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:20:25.839 [DEBUG] [Thread-71903] [transport.py] [_log()] starting thread (client mode): 0xf81f1330
2025-12-12T15:20:25.839 [DEBUG] [Thread-71903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:20:25.859 [DEBUG] [Thread-71903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:20:25.859 [INFO] [Thread-71903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:20:25.862 [DEBUG] [Thread-71903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] client lang: <none>
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] server lang: <none>
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] kex follows: False
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] Compression: none
2025-12-12T15:20:25.863 [DEBUG] [Thread-71903] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:20:25.880 [DEBUG] [Thread-71903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:20:25.880 [DEBUG] [Thread-71903] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:20:25.881 [DEBUG] [Thread-71903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:20:25.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:20:25.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:20:25.883 [DEBUG] [Thread-71903] [transport.py] [_log()] userauth is OK
2025-12-12T15:20:25.883 [DEBUG] [Thread-71903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:20:25.883 [DEBUG] [Thread-71903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:20:25.883 [DEBUG] [Thread-71903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:20:25.883 [DEBUG] [Thread-71903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:20:25.906 [INFO] [Thread-71903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:20:25.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:20:26.517 [DEBUG] [Thread-71903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:20:26.517 [DEBUG] [Thread-71903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:20:26.517 [DEBUG] [Thread-71903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:20:26.558 [DEBUG] [Thread-71903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:20:26.559 [DEBUG] [Thread-71903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:20:26.562 [DEBUG] [Thread-71903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:20:26.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:20:26.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:20:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:20:26.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:20:26.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:20:26.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:20:26.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:20:26.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:20:26.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:20:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.555649 -999.00  +20.40  61.62     30   +2.40 1 1 3 1 1   888    0 17.51 -45.02 ----- 50.2 61.6 309.3 68.4 24.3 -26.4 24.0 -27.1 24.6 -23.0 25.1 -23.9
2025-12-12T15:20:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:20:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:20:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.555649
2025-12-12T15:20:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:20:26.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:20:26.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:20:26.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:20:26.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:20:26.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:20:21', tmtdew=20.72, humidity=24.77, cloud=0.0, wind=61.24, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:20:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:20:26.588 [DEBUG] [Thread-71903] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:20:26.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:20:26.684 [DEBUG] [Thread-71906] [transport.py] [_log()] starting thread (client mode): 0xf81f17b0
2025-12-12T15:20:26.684 [DEBUG] [Thread-71906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:20:26.699 [DEBUG] [Thread-71906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:20:26.699 [INFO] [Thread-71906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] client lang: <none>
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] server lang: <none>
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] kex follows: False
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:20:26.707 [DEBUG] [Thread-71906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:20:26.708 [DEBUG] [Thread-71906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:20:26.708 [DEBUG] [Thread-71906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:20:26.708 [DEBUG] [Thread-71906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:20:26.708 [DEBUG] [Thread-71906] [transport.py] [_log()] Compression: none
2025-12-12T15:20:26.708 [DEBUG] [Thread-71906] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:20:26.765 [DEBUG] [Thread-71906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:20:26.765 [DEBUG] [Thread-71906] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:20:26.766 [DEBUG] [Thread-71906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:20:26.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:20:26.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:20:26.820 [DEBUG] [Thread-71906] [transport.py] [_log()] userauth is OK
2025-12-12T15:20:26.821 [DEBUG] [Thread-71906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:20:26.821 [DEBUG] [Thread-71906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:20:26.821 [DEBUG] [Thread-71906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:20:26.821 [DEBUG] [Thread-71906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:20:26.840 [INFO] [Thread-71906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:20:26.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:20:26.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:20:27.706 [DEBUG] [Thread-71906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:20:27.707 [DEBUG] [Thread-71906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:20:27.754 [DEBUG] [Thread-71906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:20:27.754 [DEBUG] [Thread-71906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:20:27.763 [DEBUG] [Thread-71906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:20:27.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:20:27.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:20:27.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:20:27.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:20:27.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:20:27.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:20:27.797 [DEBUG] [Thread-71906] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:20:31.608 [DEBUG] [Thread-71908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:20:46.655 [DEBUG] [Thread-71909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:20:50.265 [DEBUG] [Thread-71910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:20:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:20:57.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:20:57.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:20:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 20, 53), 20.09, 25.76, 0.0, 57.98, 19.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:20:58.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:20:53
2025-12-12T15:20:58.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:20:58.757 [DEBUG] [Thread-71911] [transport.py] [_log()] starting thread (client mode): 0xf5703250
2025-12-12T15:20:58.757 [DEBUG] [Thread-71911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:20:58.778 [DEBUG] [Thread-71911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:20:58.778 [INFO] [Thread-71911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] client lang: <none>
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] server lang: <none>
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] kex follows: False
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:20:58.781 [DEBUG] [Thread-71911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:20:58.782 [DEBUG] [Thread-71911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:20:58.782 [DEBUG] [Thread-71911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:20:58.782 [DEBUG] [Thread-71911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:20:58.782 [DEBUG] [Thread-71911] [transport.py] [_log()] Compression: none
2025-12-12T15:20:58.782 [DEBUG] [Thread-71911] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:20:58.799 [DEBUG] [Thread-71911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:20:58.800 [DEBUG] [Thread-71911] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:20:58.800 [DEBUG] [Thread-71911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:20:58.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:20:58.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:20:58.803 [DEBUG] [Thread-71911] [transport.py] [_log()] userauth is OK
2025-12-12T15:20:58.803 [DEBUG] [Thread-71911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:20:58.804 [DEBUG] [Thread-71911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:20:58.804 [DEBUG] [Thread-71911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:20:58.804 [DEBUG] [Thread-71911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:20:58.819 [INFO] [Thread-71911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:20:58.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:20:59.415 [DEBUG] [Thread-71911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:20:59.416 [DEBUG] [Thread-71911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:20:59.416 [DEBUG] [Thread-71911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:20:59.457 [DEBUG] [Thread-71911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:20:59.457 [DEBUG] [Thread-71911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:20:59.460 [DEBUG] [Thread-71911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:20:59.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:20:59.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:20:59.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:20:59.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:20:59.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:20:59.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:20:59.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:20:59.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:20:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:20:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.555997 -999.00  +20.20  57.01     31   +2.70 1 1 2 1 1   888    0 17.46 -46.14 ----- 57.8 57.0 301.2 74.8 24.2 -28.5 23.9 -26.2 24.2 -25.7 25.1 -24.0
2025-12-12T15:20:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:20:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:20:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.555997
2025-12-12T15:20:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:20:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:20:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:20:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:20:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:20:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:20:53', tmtdew=20.09, humidity=25.76, cloud=0.0, wind=57.98, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:20:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:20:59.485 [DEBUG] [Thread-71911] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:20:59.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:20:59.582 [DEBUG] [Thread-71914] [transport.py] [_log()] starting thread (client mode): 0xfabc4be0
2025-12-12T15:20:59.582 [DEBUG] [Thread-71914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:20:59.596 [DEBUG] [Thread-71914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:20:59.596 [INFO] [Thread-71914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:20:59.604 [DEBUG] [Thread-71914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:20:59.604 [DEBUG] [Thread-71914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:20:59.604 [DEBUG] [Thread-71914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:20:59.604 [DEBUG] [Thread-71914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] client lang: <none>
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] server lang: <none>
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] kex follows: False
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:20:59.605 [DEBUG] [Thread-71914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:20:59.606 [DEBUG] [Thread-71914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:20:59.606 [DEBUG] [Thread-71914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:20:59.606 [DEBUG] [Thread-71914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:20:59.606 [DEBUG] [Thread-71914] [transport.py] [_log()] Compression: none
2025-12-12T15:20:59.606 [DEBUG] [Thread-71914] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:20:59.660 [DEBUG] [Thread-71914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:20:59.661 [DEBUG] [Thread-71914] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:20:59.661 [DEBUG] [Thread-71914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:20:59.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:20:59.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:20:59.717 [DEBUG] [Thread-71914] [transport.py] [_log()] userauth is OK
2025-12-12T15:20:59.717 [DEBUG] [Thread-71914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:20:59.717 [DEBUG] [Thread-71914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:20:59.717 [DEBUG] [Thread-71914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:20:59.717 [DEBUG] [Thread-71914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:20:59.735 [INFO] [Thread-71914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:20:59.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:20:59.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:21:00.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:21:00.046 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:21:00.609 [DEBUG] [Thread-71914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:21:00.609 [DEBUG] [Thread-71914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:21:00.658 [DEBUG] [Thread-71914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:21:00.658 [DEBUG] [Thread-71914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:21:00.667 [DEBUG] [Thread-71914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:21:00.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:21:00.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:21:00.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:21:00.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:21:00.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:21:00.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:21:00.702 [DEBUG] [Thread-71914] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:21:01.688 [DEBUG] [Thread-71916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:21:16.734 [DEBUG] [Thread-71917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:21:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:21:30.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:21:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:21:31.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 21, 25), 19.74, 26.36, 0.0, 57.08, 19.68, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:21:31.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:21:25
2025-12-12T15:21:31.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:21:31.697 [DEBUG] [Thread-71918] [transport.py] [_log()] starting thread (client mode): 0xf81f17b0
2025-12-12T15:21:31.697 [DEBUG] [Thread-71918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:21:31.715 [DEBUG] [Thread-71918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:21:31.716 [INFO] [Thread-71918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:21:31.718 [DEBUG] [Thread-71918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:21:31.718 [DEBUG] [Thread-71918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:21:31.718 [DEBUG] [Thread-71918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:21:31.718 [DEBUG] [Thread-71918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:21:31.718 [DEBUG] [Thread-71918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:21:31.718 [DEBUG] [Thread-71918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] client lang: <none>
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] server lang: <none>
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] kex follows: False
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] Compression: none
2025-12-12T15:21:31.719 [DEBUG] [Thread-71918] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:21:31.731 [DEBUG] [Thread-71918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:21:31.732 [DEBUG] [Thread-71918] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:21:31.732 [DEBUG] [Thread-71918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:21:31.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:21:31.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:21:31.734 [DEBUG] [Thread-71918] [transport.py] [_log()] userauth is OK
2025-12-12T15:21:31.734 [DEBUG] [Thread-71918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:21:31.734 [DEBUG] [Thread-71918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:21:31.734 [DEBUG] [Thread-71918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:21:31.734 [DEBUG] [Thread-71918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:21:31.747 [INFO] [Thread-71918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:21:31.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:21:31.764 [DEBUG] [Thread-71920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:21:32.385 [DEBUG] [Thread-71918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:21:32.385 [DEBUG] [Thread-71918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:21:32.386 [DEBUG] [Thread-71918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:21:32.426 [DEBUG] [Thread-71918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:21:32.426 [DEBUG] [Thread-71918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:21:32.429 [DEBUG] [Thread-71918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:21:32.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:21:32.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:21:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:21:32.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:21:32.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:21:32.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:21:32.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:21:32.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:21:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:21:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.556344 -999.00  +19.80  59.32     32   +2.70 1 1 2 1 1   888    0 16.88 -57.13 ----- 47.2 59.3 311.0 67.8 24.2 -26.5 23.9 -26.4 24.4 -23.1 24.9 -23.0
2025-12-12T15:21:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:21:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:21:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.556344
2025-12-12T15:21:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:21:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:21:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:21:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:21:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:21:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:21:25', tmtdew=19.74, humidity=26.36, cloud=0.0, wind=57.08, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:21:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:21:32.456 [DEBUG] [Thread-71918] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:21:32.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:21:32.554 [DEBUG] [Thread-71922] [transport.py] [_log()] starting thread (client mode): 0xf81f0ee0
2025-12-12T15:21:32.554 [DEBUG] [Thread-71922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:21:32.568 [DEBUG] [Thread-71922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:21:32.569 [INFO] [Thread-71922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:21:32.576 [DEBUG] [Thread-71922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] client lang: <none>
2025-12-12T15:21:32.577 [DEBUG] [Thread-71922] [transport.py] [_log()] server lang: <none>
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] kex follows: False
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] Compression: none
2025-12-12T15:21:32.578 [DEBUG] [Thread-71922] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:21:32.633 [DEBUG] [Thread-71922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:21:32.634 [DEBUG] [Thread-71922] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:21:32.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:21:32.635 [DEBUG] [Thread-71922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:21:32.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:21:32.690 [DEBUG] [Thread-71922] [transport.py] [_log()] userauth is OK
2025-12-12T15:21:32.691 [DEBUG] [Thread-71922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:21:32.691 [DEBUG] [Thread-71922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:21:32.691 [DEBUG] [Thread-71922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:21:32.691 [DEBUG] [Thread-71922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:21:32.714 [INFO] [Thread-71922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:21:32.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:21:32.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:21:33.554 [DEBUG] [Thread-71922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:21:33.554 [DEBUG] [Thread-71922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:21:33.602 [DEBUG] [Thread-71922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:21:33.602 [DEBUG] [Thread-71922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:21:33.611 [DEBUG] [Thread-71922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:21:33.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:21:33.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:21: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
2025-12-12T15:21:33.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:21:33.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:21:33.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:21:33.648 [DEBUG] [Thread-71922] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:21:46.791 [DEBUG] [Thread-71924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:21:50.335 [DEBUG] [Thread-71925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:00.186 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:00.186 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:01.836 [DEBUG] [Thread-71926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:03.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:22:03.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:22:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:22:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 21, 57), 19.73, 26.41, 0.0, 59.58, 19.96, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:22:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:21:57
2025-12-12T15:22:04.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:22:04.604 [DEBUG] [Thread-71927] [transport.py] [_log()] starting thread (client mode): 0xf575c7c0
2025-12-12T15:22:04.604 [DEBUG] [Thread-71927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:22:04.622 [DEBUG] [Thread-71927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:22:04.623 [INFO] [Thread-71927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:22:04.625 [DEBUG] [Thread-71927] [transport.py] [_log()] client lang: <none>
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] server lang: <none>
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] kex follows: False
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] Compression: none
2025-12-12T15:22:04.626 [DEBUG] [Thread-71927] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:22:04.642 [DEBUG] [Thread-71927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:22:04.643 [DEBUG] [Thread-71927] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:22:04.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:22:04.643 [DEBUG] [Thread-71927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:22:04.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:22:04.645 [DEBUG] [Thread-71927] [transport.py] [_log()] userauth is OK
2025-12-12T15:22:04.645 [DEBUG] [Thread-71927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:22:04.645 [DEBUG] [Thread-71927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:22:04.645 [DEBUG] [Thread-71927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:22:04.645 [DEBUG] [Thread-71927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:22:04.662 [INFO] [Thread-71927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:22:04.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:22:05.268 [DEBUG] [Thread-71927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:22:05.268 [DEBUG] [Thread-71927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:22:05.268 [DEBUG] [Thread-71927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:22:05.309 [DEBUG] [Thread-71927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:22:05.309 [DEBUG] [Thread-71927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:22:05.312 [DEBUG] [Thread-71927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:22:05.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:22:05.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:22:05.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:22:05.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:22:05.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:22:05.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:22:05.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:22:05.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:22:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:22:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.556691 -999.00  +20.40  45.74     31   +2.90 1 1 2 1 1   888    0 16.40 -69.90 ----- 53.2 45.7 307.6 58.6 24.2 -26.7 23.9 -25.9 24.6 -22.7 25.0 -23.8
2025-12-12T15:22:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:22:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:22:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.556691
2025-12-12T15:22:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:22:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:22:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:22:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:22:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:22:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:21:57', tmtdew=19.73, humidity=26.41, cloud=0.0, wind=59.58, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:21:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:22:05.339 [DEBUG] [Thread-71927] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:22:05.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:22:05.446 [DEBUG] [Thread-71930] [transport.py] [_log()] starting thread (client mode): 0xf81f3160
2025-12-12T15:22:05.446 [DEBUG] [Thread-71930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:22:05.460 [DEBUG] [Thread-71930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:22:05.460 [INFO] [Thread-71930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:22:05.468 [DEBUG] [Thread-71930] [transport.py] [_log()] client lang: <none>
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] server lang: <none>
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] kex follows: False
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] Compression: none
2025-12-12T15:22:05.469 [DEBUG] [Thread-71930] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:22:05.525 [DEBUG] [Thread-71930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:22:05.526 [DEBUG] [Thread-71930] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:22:05.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:22:05.527 [DEBUG] [Thread-71930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:22:05.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:22:05.581 [DEBUG] [Thread-71930] [transport.py] [_log()] userauth is OK
2025-12-12T15:22:05.581 [DEBUG] [Thread-71930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:22:05.581 [DEBUG] [Thread-71930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:22:05.581 [DEBUG] [Thread-71930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:22:05.582 [DEBUG] [Thread-71930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:22:05.603 [INFO] [Thread-71930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:22:05.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:22:05.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:22:06.475 [DEBUG] [Thread-71930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:22:06.475 [DEBUG] [Thread-71930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:22:06.523 [DEBUG] [Thread-71930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:22:06.523 [DEBUG] [Thread-71930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:22:06.532 [DEBUG] [Thread-71930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:22:06.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:22:06.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:22: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') -> 00000000
2025-12-12T15:22:06.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:22:06.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:22:06.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:22:06.566 [DEBUG] [Thread-71930] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:22:16.868 [DEBUG] [Thread-71932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:31.905 [DEBUG] [Thread-71933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:36.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:22:36.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:22:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:22:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 22, 29), 20.33, 25.4, 0.0, 59.02, 20.21, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:22:37.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:22:29
2025-12-12T15:22:37.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:22:37.594 [DEBUG] [Thread-71934] [transport.py] [_log()] starting thread (client mode): 0xf57014b0
2025-12-12T15:22:37.594 [DEBUG] [Thread-71934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:22:37.616 [DEBUG] [Thread-71934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:22:37.616 [INFO] [Thread-71934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:22:37.620 [DEBUG] [Thread-71934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:22:37.620 [DEBUG] [Thread-71934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:22:37.620 [DEBUG] [Thread-71934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] client lang: <none>
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] server lang: <none>
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] kex follows: False
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] Compression: none
2025-12-12T15:22:37.621 [DEBUG] [Thread-71934] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:22:37.636 [DEBUG] [Thread-71934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:22:37.636 [DEBUG] [Thread-71934] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:22:37.636 [DEBUG] [Thread-71934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:22:37.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:22:37.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:22:37.637 [DEBUG] [Thread-71934] [transport.py] [_log()] userauth is OK
2025-12-12T15:22:37.638 [DEBUG] [Thread-71934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:22:37.638 [DEBUG] [Thread-71934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:22:37.638 [DEBUG] [Thread-71934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:22:37.638 [DEBUG] [Thread-71934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:22:37.652 [INFO] [Thread-71934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:22:37.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:22:38.292 [DEBUG] [Thread-71934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:22:38.293 [DEBUG] [Thread-71934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:22:38.293 [DEBUG] [Thread-71934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:22:38.333 [DEBUG] [Thread-71934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:22:38.334 [DEBUG] [Thread-71934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:22:38.336 [DEBUG] [Thread-71934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:22:38.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:22:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:22:38.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:22:38.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:22:38.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:22:38.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:22:38.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.557038 -999.00  +19.90  57.39     31   +2.40 1 1 2 1 1   888    0 15.88 -77.76 ----- 48.5 57.4 313.2 80.2 24.0 -27.3 23.7 -27.4 24.1 -25.3 24.8 -24.9
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.557038
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:22:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:22:29', tmtdew=20.33, humidity=25.4, cloud=0.0, wind=59.02, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:22:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:22:38.354 [DEBUG] [Thread-71934] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:22:38.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:22:38.439 [DEBUG] [Thread-71937] [transport.py] [_log()] starting thread (client mode): 0xfabc5750
2025-12-12T15:22:38.439 [DEBUG] [Thread-71937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:22:38.454 [DEBUG] [Thread-71937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:22:38.454 [INFO] [Thread-71937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] client lang: <none>
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] server lang: <none>
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] kex follows: False
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:22:38.461 [DEBUG] [Thread-71937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:22:38.462 [DEBUG] [Thread-71937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:22:38.462 [DEBUG] [Thread-71937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:22:38.462 [DEBUG] [Thread-71937] [transport.py] [_log()] Compression: none
2025-12-12T15:22:38.462 [DEBUG] [Thread-71937] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:22:38.519 [DEBUG] [Thread-71937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:22:38.519 [DEBUG] [Thread-71937] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:22:38.520 [DEBUG] [Thread-71937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:22:38.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:22:38.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:22:38.576 [DEBUG] [Thread-71937] [transport.py] [_log()] userauth is OK
2025-12-12T15:22:38.576 [DEBUG] [Thread-71937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:22:38.576 [DEBUG] [Thread-71937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:22:38.576 [DEBUG] [Thread-71937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:22:38.577 [DEBUG] [Thread-71937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:22:38.590 [INFO] [Thread-71937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:22:38.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:22:38.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:22:39.419 [DEBUG] [Thread-71937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:22:39.419 [DEBUG] [Thread-71937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:22:39.467 [DEBUG] [Thread-71937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:22:39.467 [DEBUG] [Thread-71937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:22:39.476 [DEBUG] [Thread-71937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:22:39.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:22:39.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:22:39.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:22:39.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:22:39.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:22:39.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:22:39.508 [DEBUG] [Thread-71937] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:22:46.931 [DEBUG] [Thread-71939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:22:50.397 [DEBUG] [Thread-71940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:00.330 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:00.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:01.977 [DEBUG] [Thread-71941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:23:09.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:23:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:23:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 23, 1), 20.58, 24.99, 0.0, 59.76, 20.3, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:23:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:23:01
2025-12-12T15:23:10.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:23:10.470 [DEBUG] [Thread-71942] [transport.py] [_log()] starting thread (client mode): 0xfabc7e50
2025-12-12T15:23:10.470 [DEBUG] [Thread-71942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:23:10.490 [DEBUG] [Thread-71942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:23:10.490 [INFO] [Thread-71942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:23:10.493 [DEBUG] [Thread-71942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:23:10.493 [DEBUG] [Thread-71942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:23:10.493 [DEBUG] [Thread-71942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:23:10.493 [DEBUG] [Thread-71942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] client lang: <none>
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] server lang: <none>
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] kex follows: False
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] Compression: none
2025-12-12T15:23:10.494 [DEBUG] [Thread-71942] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:23:10.511 [DEBUG] [Thread-71942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:23:10.512 [DEBUG] [Thread-71942] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:23:10.512 [DEBUG] [Thread-71942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:23:10.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:23:10.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:23:10.514 [DEBUG] [Thread-71942] [transport.py] [_log()] userauth is OK
2025-12-12T15:23:10.514 [DEBUG] [Thread-71942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:23:10.514 [DEBUG] [Thread-71942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:23:10.514 [DEBUG] [Thread-71942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:23:10.515 [DEBUG] [Thread-71942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:23:10.538 [INFO] [Thread-71942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:23:10.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:23:11.132 [DEBUG] [Thread-71942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:23:11.132 [DEBUG] [Thread-71942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:23:11.132 [DEBUG] [Thread-71942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:23:11.173 [DEBUG] [Thread-71942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:23:11.173 [DEBUG] [Thread-71942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:23:11.176 [DEBUG] [Thread-71942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:23:11.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:23:11.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:23:11.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:23:11.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:23:11.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:23:11.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:23:11.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:23:11.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:23:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:23:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.557385 -999.00  +19.80  64.95     29   +1.30 1 1 3 1 1   888    0 16.22 -87.29 ----- 64.4 65.0 313.2 70.7 24.0 -26.8 23.6 -26.4 24.2 -26.7 24.8 -24.3
2025-12-12T15:23:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:23:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:23:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.557385
2025-12-12T15:23:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:23:11.198 [DEBUG] [Thread-71942] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:23:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:23:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:23:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:23:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:23:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:23:01', tmtdew=20.58, humidity=24.99, cloud=0.0, wind=59.76, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:22:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:23:11.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:23:11.293 [DEBUG] [Thread-71945] [transport.py] [_log()] starting thread (client mode): 0xfabc69e0
2025-12-12T15:23:11.293 [DEBUG] [Thread-71945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:23:11.308 [DEBUG] [Thread-71945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:23:11.308 [INFO] [Thread-71945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:23:11.315 [DEBUG] [Thread-71945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] client lang: <none>
2025-12-12T15:23:11.316 [DEBUG] [Thread-71945] [transport.py] [_log()] server lang: <none>
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] kex follows: False
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] Compression: none
2025-12-12T15:23:11.317 [DEBUG] [Thread-71945] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:23:11.373 [DEBUG] [Thread-71945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:23:11.373 [DEBUG] [Thread-71945] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:23:11.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:23:11.374 [DEBUG] [Thread-71945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:23:11.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:23:11.435 [DEBUG] [Thread-71945] [transport.py] [_log()] userauth is OK
2025-12-12T15:23:11.435 [DEBUG] [Thread-71945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:23:11.435 [DEBUG] [Thread-71945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:23:11.436 [DEBUG] [Thread-71945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:23:11.436 [DEBUG] [Thread-71945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:23:11.459 [INFO] [Thread-71945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:23:11.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:23:11.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:23:12.360 [DEBUG] [Thread-71945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:23:12.360 [DEBUG] [Thread-71945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:23:12.410 [DEBUG] [Thread-71945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:23:12.410 [DEBUG] [Thread-71945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:23:12.419 [DEBUG] [Thread-71945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:23:12.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:23:12.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:23:12.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:23:12.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:23:12.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:23:12.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:23:12.453 [DEBUG] [Thread-71945] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:23:17.002 [DEBUG] [Thread-71947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:32.035 [DEBUG] [Thread-71948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:42.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:23:42.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:23:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:23:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 23, 33), 21.91, 23.08, 0.0, 60.86, 21.32, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:23:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:23:33
2025-12-12T15:23:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:23:43.410 [DEBUG] [Thread-71949] [transport.py] [_log()] starting thread (client mode): 0xf5703eb0
2025-12-12T15:23:43.410 [DEBUG] [Thread-71949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:23:43.432 [DEBUG] [Thread-71949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:23:43.432 [INFO] [Thread-71949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] client lang: <none>
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] server lang: <none>
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] kex follows: False
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:23:43.436 [DEBUG] [Thread-71949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:23:43.437 [DEBUG] [Thread-71949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:23:43.437 [DEBUG] [Thread-71949] [transport.py] [_log()] Compression: none
2025-12-12T15:23:43.437 [DEBUG] [Thread-71949] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:23:43.456 [DEBUG] [Thread-71949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:23:43.456 [DEBUG] [Thread-71949] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:23:43.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:23:43.457 [DEBUG] [Thread-71949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:23:43.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:23:43.459 [DEBUG] [Thread-71949] [transport.py] [_log()] userauth is OK
2025-12-12T15:23:43.459 [DEBUG] [Thread-71949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:23:43.459 [DEBUG] [Thread-71949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:23:43.459 [DEBUG] [Thread-71949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:23:43.459 [DEBUG] [Thread-71949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:23:43.495 [INFO] [Thread-71949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:23:43.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:23:44.135 [DEBUG] [Thread-71949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:23:44.135 [DEBUG] [Thread-71949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:23:44.135 [DEBUG] [Thread-71949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:23:44.176 [DEBUG] [Thread-71949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:23:44.176 [DEBUG] [Thread-71949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:23:44.179 [DEBUG] [Thread-71949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:23:44.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:23:44.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:23:44.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:23:44.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:23:44.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:23:44.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:23:44.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:23:44.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:23:44.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:23:44.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.557733 -999.00  +19.60  54.00     30   +1.50 1 1 2 1 1   888    0 15.86 -87.52 ----- 61.9 54.0 318.4 69.3 23.8 -27.6 23.4 -26.4 24.1 -26.4 24.6 -24.6
2025-12-12T15:23:44.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:23:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:23:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.557733
2025-12-12T15:23:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:23:44.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:23:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:23:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:23:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:23:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:23:33', tmtdew=21.91, humidity=23.08, cloud=0.0, wind=60.86, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:23:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:23:44.203 [DEBUG] [Thread-71949] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:23:44.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:23:44.299 [DEBUG] [Thread-71952] [transport.py] [_log()] starting thread (client mode): 0xf570c820
2025-12-12T15:23:44.299 [DEBUG] [Thread-71952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:23:44.314 [DEBUG] [Thread-71952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:23:44.314 [INFO] [Thread-71952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:23:44.321 [DEBUG] [Thread-71952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] client lang: <none>
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] server lang: <none>
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] kex follows: False
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] Compression: none
2025-12-12T15:23:44.322 [DEBUG] [Thread-71952] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:23:44.380 [DEBUG] [Thread-71952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:23:44.380 [DEBUG] [Thread-71952] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:23:44.381 [DEBUG] [Thread-71952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:23:44.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:23:44.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:23:44.437 [DEBUG] [Thread-71952] [transport.py] [_log()] userauth is OK
2025-12-12T15:23:44.437 [DEBUG] [Thread-71952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:23:44.437 [DEBUG] [Thread-71952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:23:44.437 [DEBUG] [Thread-71952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:23:44.437 [DEBUG] [Thread-71952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:23:44.456 [INFO] [Thread-71952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:23:44.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:23:44.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:23:45.293 [DEBUG] [Thread-71952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:23:45.293 [DEBUG] [Thread-71952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:23:45.340 [DEBUG] [Thread-71952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:23:45.340 [DEBUG] [Thread-71952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:23:45.349 [DEBUG] [Thread-71952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:23:45.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:23:45.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:23:45.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:23:45.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:23:45.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:23:45.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:23:45.382 [DEBUG] [Thread-71952] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:23:47.061 [DEBUG] [Thread-71954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:23:50.450 [DEBUG] [Thread-71955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:00.473 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:00.474 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:02.114 [DEBUG] [Thread-71956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:15.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:24:15.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:24:15.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
2025-12-12T15:24:16.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 24, 5), 21.04, 24.09, 0.0, 47.2, 20.11, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:24:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:24:05
2025-12-12T15:24:16.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:24:16.332 [DEBUG] [Thread-71957] [transport.py] [_log()] starting thread (client mode): 0xf81f1660
2025-12-12T15:24:16.332 [DEBUG] [Thread-71957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:24:16.352 [DEBUG] [Thread-71957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:24:16.352 [INFO] [Thread-71957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] client lang: <none>
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] server lang: <none>
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] kex follows: False
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] Compression: none
2025-12-12T15:24:16.356 [DEBUG] [Thread-71957] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:24:16.374 [DEBUG] [Thread-71957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:24:16.375 [DEBUG] [Thread-71957] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:24:16.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:24:16.375 [DEBUG] [Thread-71957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:24:16.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:24:16.377 [DEBUG] [Thread-71957] [transport.py] [_log()] userauth is OK
2025-12-12T15:24:16.377 [DEBUG] [Thread-71957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:24:16.377 [DEBUG] [Thread-71957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:24:16.377 [DEBUG] [Thread-71957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:24:16.377 [DEBUG] [Thread-71957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:24:16.401 [INFO] [Thread-71957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:24:16.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:24:17.055 [DEBUG] [Thread-71957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:24:17.055 [DEBUG] [Thread-71957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:24:17.056 [DEBUG] [Thread-71957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:24:17.097 [DEBUG] [Thread-71957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:24:17.097 [DEBUG] [Thread-71957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:24:17.099 [DEBUG] [Thread-71957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:24:17.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:24:17.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:24:17.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:24:17.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:24:17.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:24:17.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:24:17.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:24:17.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:24:17.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:24:17.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.558080 -999.00  +19.80  50.70     29   +1.50 1 1 2 1 1   888    0 15.84 -91.75 ----- 55.2 50.7 312.8 69.4 23.7 -26.3 23.5 -26.5 23.9 -25.2 24.5 -23.8
2025-12-12T15:24:17.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:24:17.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:24:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.558080
2025-12-12T15:24:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:24:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:24:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:24:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:24:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:24:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:24:05', tmtdew=21.04, humidity=24.09, cloud=0.0, wind=47.2, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:23:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:24:17.122 [DEBUG] [Thread-71957] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:24:17.141 [DEBUG] [Thread-71960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:17.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:24:17.219 [DEBUG] [Thread-71961] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T15:24:17.219 [DEBUG] [Thread-71961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:24:17.234 [DEBUG] [Thread-71961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:24:17.234 [INFO] [Thread-71961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:24:17.241 [DEBUG] [Thread-71961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] client lang: <none>
2025-12-12T15:24:17.242 [DEBUG] [Thread-71961] [transport.py] [_log()] server lang: <none>
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] kex follows: False
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] Compression: none
2025-12-12T15:24:17.243 [DEBUG] [Thread-71961] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:24:17.300 [DEBUG] [Thread-71961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:24:17.301 [DEBUG] [Thread-71961] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:24:17.301 [DEBUG] [Thread-71961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:24:17.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:24:17.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:24:17.357 [DEBUG] [Thread-71961] [transport.py] [_log()] userauth is OK
2025-12-12T15:24:17.357 [DEBUG] [Thread-71961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:24:17.357 [DEBUG] [Thread-71961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:24:17.357 [DEBUG] [Thread-71961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:24:17.357 [DEBUG] [Thread-71961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:24:17.376 [INFO] [Thread-71961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:24:17.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:24:17.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:24:18.215 [DEBUG] [Thread-71961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:24:18.215 [DEBUG] [Thread-71961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:24:18.264 [DEBUG] [Thread-71961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:24:18.264 [DEBUG] [Thread-71961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:24:18.276 [DEBUG] [Thread-71961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:24:18.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:24:18.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:24: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
2025-12-12T15:24:18.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:24:18.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:24:18.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:24:18.311 [DEBUG] [Thread-71961] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:24:32.174 [DEBUG] [Thread-71963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:47.197 [DEBUG] [Thread-71964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:24:48.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:24:48.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:24:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 24, 37), 21.89, 22.86, 0.0, 57.69, 20.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:24:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:24:37
2025-12-12T15:24:49.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:24:49.292 [DEBUG] [Thread-71965] [transport.py] [_log()] starting thread (client mode): 0xf575db70
2025-12-12T15:24:49.292 [DEBUG] [Thread-71965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:24:49.312 [DEBUG] [Thread-71965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:24:49.313 [INFO] [Thread-71965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] client lang: <none>
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] server lang: <none>
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] kex follows: False
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:24:49.316 [DEBUG] [Thread-71965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:24:49.317 [DEBUG] [Thread-71965] [transport.py] [_log()] Compression: none
2025-12-12T15:24:49.317 [DEBUG] [Thread-71965] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:24:49.333 [DEBUG] [Thread-71965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:24:49.334 [DEBUG] [Thread-71965] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:24:49.334 [DEBUG] [Thread-71965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:24:49.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:24:49.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:24:49.336 [DEBUG] [Thread-71965] [transport.py] [_log()] userauth is OK
2025-12-12T15:24:49.336 [DEBUG] [Thread-71965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:24:49.336 [DEBUG] [Thread-71965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:24:49.336 [DEBUG] [Thread-71965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:24:49.336 [DEBUG] [Thread-71965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:24:49.354 [INFO] [Thread-71965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:24:49.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:24:50.003 [DEBUG] [Thread-71965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:24:50.003 [DEBUG] [Thread-71965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:24:50.004 [DEBUG] [Thread-71965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:24:50.044 [DEBUG] [Thread-71965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:24:50.044 [DEBUG] [Thread-71965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:24:50.047 [DEBUG] [Thread-71965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:24:50.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:24:50.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:24:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:24:50.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:24:50.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:24:50.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:24:50.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:24:50.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:24:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:24:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.558427 -999.00  +19.70  48.50     29   +1.30 1 1 2 1 1   888    0 15.50 -94.33 ----- 61.3 48.5 303.5 62.5 23.7 -26.9 23.4 -25.4 23.8 -26.2 24.5 -23.4
2025-12-12T15:24:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:24:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:24:50.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.558427
2025-12-12T15:24:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:24:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:24:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:24:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:24:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:24:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:24:37', tmtdew=21.89, humidity=22.86, cloud=0.0, wind=57.69, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:24:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:24:50.076 [DEBUG] [Thread-71965] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:24:50.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:24:50.172 [DEBUG] [Thread-71968] [transport.py] [_log()] starting thread (client mode): 0xf813ee00
2025-12-12T15:24:50.172 [DEBUG] [Thread-71968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:24:50.187 [DEBUG] [Thread-71968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:24:50.187 [INFO] [Thread-71968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] client lang: <none>
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] server lang: <none>
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] kex follows: False
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:24:50.195 [DEBUG] [Thread-71968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:24:50.196 [DEBUG] [Thread-71968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:24:50.196 [DEBUG] [Thread-71968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:24:50.196 [DEBUG] [Thread-71968] [transport.py] [_log()] Compression: none
2025-12-12T15:24:50.196 [DEBUG] [Thread-71968] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:24:50.252 [DEBUG] [Thread-71968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:24:50.253 [DEBUG] [Thread-71968] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:24:50.253 [DEBUG] [Thread-71968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:24:50.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:24:50.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:24:50.309 [DEBUG] [Thread-71968] [transport.py] [_log()] userauth is OK
2025-12-12T15:24:50.309 [DEBUG] [Thread-71968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:24:50.309 [DEBUG] [Thread-71968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:24:50.309 [DEBUG] [Thread-71968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:24:50.309 [DEBUG] [Thread-71968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:24:50.329 [INFO] [Thread-71968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:24:50.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:24:50.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:24:50.510 [DEBUG] [Thread-71970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:24:51.195 [DEBUG] [Thread-71968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:24:51.196 [DEBUG] [Thread-71968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:24:51.244 [DEBUG] [Thread-71968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:24:51.244 [DEBUG] [Thread-71968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:24:51.253 [DEBUG] [Thread-71968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:24:51.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:24:51.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:24:51.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:24:51.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:24:51.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:24:51.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:24:51.288 [DEBUG] [Thread-71968] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:25:00.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:00.615 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:02.231 [DEBUG] [Thread-71971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:17.276 [DEBUG] [Thread-71972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:21.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:25:21.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:25:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:25:21.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 25, 9), 22.05, 22.56, 0.0, 54.52, 20.36, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:25:21.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:25:09
2025-12-12T15:25:22.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:25:22.232 [DEBUG] [Thread-71973] [transport.py] [_log()] starting thread (client mode): 0xf813e0b0
2025-12-12T15:25:22.232 [DEBUG] [Thread-71973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:25:22.254 [DEBUG] [Thread-71973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:25:22.254 [INFO] [Thread-71973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] client lang: <none>
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] server lang: <none>
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] kex follows: False
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:25:22.257 [DEBUG] [Thread-71973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:25:22.258 [DEBUG] [Thread-71973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:25:22.258 [DEBUG] [Thread-71973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:25:22.258 [DEBUG] [Thread-71973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:25:22.258 [DEBUG] [Thread-71973] [transport.py] [_log()] Compression: none
2025-12-12T15:25:22.258 [DEBUG] [Thread-71973] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:25:22.266 [DEBUG] [Thread-71973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:25:22.266 [DEBUG] [Thread-71973] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:25:22.267 [DEBUG] [Thread-71973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:25:22.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:25:22.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:25:22.269 [DEBUG] [Thread-71973] [transport.py] [_log()] userauth is OK
2025-12-12T15:25:22.269 [DEBUG] [Thread-71973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:25:22.269 [DEBUG] [Thread-71973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:25:22.269 [DEBUG] [Thread-71973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:25:22.269 [DEBUG] [Thread-71973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:25:22.289 [INFO] [Thread-71973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:25:22.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:25:22.855 [DEBUG] [Thread-71973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:25:22.855 [DEBUG] [Thread-71973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:25:22.855 [DEBUG] [Thread-71973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:25:22.897 [DEBUG] [Thread-71973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:25:22.897 [DEBUG] [Thread-71973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:25:22.899 [DEBUG] [Thread-71973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:25:22.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:25:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:25:22.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:25:22.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:25:22.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:25:22.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:25:22.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:25:22.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:25:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:25:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.559121 -999.00  +20.70  37.75     27   +1.30 1 1 2 1 1   888    0 15.45 -107.51 ----- 48.3 37.8 313.2 54.4 23.7 -25.5 23.4 -25.8 23.8 -25.9 24.5 -23.2
2025-12-12T15:25:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:25:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:25:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.559121
2025-12-12T15:25:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:25:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:25:22.920 [DEBUG] [Thread-71973] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:25:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:25:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:25:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:25:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:25:09', tmtdew=22.05, humidity=22.56, cloud=0.0, wind=54.52, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:25:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:25:23.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:25:23.021 [DEBUG] [Thread-71976] [transport.py] [_log()] starting thread (client mode): 0xf575f1f0
2025-12-12T15:25:23.022 [DEBUG] [Thread-71976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:25:23.036 [DEBUG] [Thread-71976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:25:23.036 [INFO] [Thread-71976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:23.044 [DEBUG] [Thread-71976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] client lang: <none>
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] server lang: <none>
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] kex follows: False
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] Compression: none
2025-12-12T15:25:23.045 [DEBUG] [Thread-71976] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:25:23.100 [DEBUG] [Thread-71976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:25:23.101 [DEBUG] [Thread-71976] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:25:23.101 [DEBUG] [Thread-71976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:25:23.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:25:23.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:25:23.157 [DEBUG] [Thread-71976] [transport.py] [_log()] userauth is OK
2025-12-12T15:25:23.158 [DEBUG] [Thread-71976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:25:23.158 [DEBUG] [Thread-71976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:25:23.158 [DEBUG] [Thread-71976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:25:23.158 [DEBUG] [Thread-71976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:25:23.177 [INFO] [Thread-71976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:25:23.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:25:23.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:25:24.007 [DEBUG] [Thread-71976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:25:24.007 [DEBUG] [Thread-71976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:25:24.055 [DEBUG] [Thread-71976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:25:24.055 [DEBUG] [Thread-71976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:25:24.064 [DEBUG] [Thread-71976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:25:24.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:25: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')
2025-12-12T15:25:24.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:25:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:25:24.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:25:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:25:24.098 [DEBUG] [Thread-71976] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:25:32.305 [DEBUG] [Thread-71978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:47.346 [DEBUG] [Thread-71979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:50.547 [DEBUG] [Thread-71980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:25:54.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:25:54.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:25:54.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:25:54.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 25, 41), 22.38, 21.96, 0.0, 55.82, 20.05, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:25:54.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:25:41
2025-12-12T15:25:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:25:55.065 [DEBUG] [Thread-71981] [transport.py] [_log()] starting thread (client mode): 0xf81f18d0
2025-12-12T15:25:55.065 [DEBUG] [Thread-71981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:25:55.086 [DEBUG] [Thread-71981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:25:55.086 [INFO] [Thread-71981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:25:55.089 [DEBUG] [Thread-71981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] client lang: <none>
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] server lang: <none>
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] kex follows: False
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:25:55.090 [DEBUG] [Thread-71981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:25:55.091 [DEBUG] [Thread-71981] [transport.py] [_log()] Compression: none
2025-12-12T15:25:55.091 [DEBUG] [Thread-71981] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:25:55.099 [DEBUG] [Thread-71981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:25:55.099 [DEBUG] [Thread-71981] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:25:55.100 [DEBUG] [Thread-71981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:25:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:25:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:25:55.102 [DEBUG] [Thread-71981] [transport.py] [_log()] userauth is OK
2025-12-12T15:25:55.102 [DEBUG] [Thread-71981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:25:55.102 [DEBUG] [Thread-71981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:25:55.102 [DEBUG] [Thread-71981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:25:55.102 [DEBUG] [Thread-71981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:25:55.137 [INFO] [Thread-71981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:25:55.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:25:55.793 [DEBUG] [Thread-71981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:25:55.794 [DEBUG] [Thread-71981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:25:55.794 [DEBUG] [Thread-71981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:25:55.835 [DEBUG] [Thread-71981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:25:55.835 [DEBUG] [Thread-71981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:25:55.838 [DEBUG] [Thread-71981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:25:55.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:25:55.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:25:55.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:25:55.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:25:55.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:25:55.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:25:55.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:25:55.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:25:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:25:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.559469 -999.00  +20.70  55.98     26   +0.90 1 1 2 1 1   888    0 16.21 -95.89 ----- 54.3 56.0 313.6 67.2 23.7 -26.6 23.5 -26.5 24.0 -22.9 24.6 -24.0
2025-12-12T15:25:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:25:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:25:55.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.559469
2025-12-12T15:25:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:25:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:25:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:25:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:25:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:25:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:25:41', tmtdew=22.38, humidity=21.96, cloud=0.0, wind=55.82, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:25:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:25:55.865 [DEBUG] [Thread-71981] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:25:55.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:25:55.961 [DEBUG] [Thread-71984] [transport.py] [_log()] starting thread (client mode): 0xf81f2320
2025-12-12T15:25:55.961 [DEBUG] [Thread-71984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:25:55.975 [DEBUG] [Thread-71984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:25:55.976 [INFO] [Thread-71984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:25:55.983 [DEBUG] [Thread-71984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:25:55.984 [DEBUG] [Thread-71984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] client lang: <none>
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] server lang: <none>
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] kex follows: False
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:25:55.985 [DEBUG] [Thread-71984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:25:55.986 [DEBUG] [Thread-71984] [transport.py] [_log()] Compression: none
2025-12-12T15:25:55.986 [DEBUG] [Thread-71984] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:25:56.043 [DEBUG] [Thread-71984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:25:56.044 [DEBUG] [Thread-71984] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:25:56.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:25:56.045 [DEBUG] [Thread-71984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:25:56.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:25:56.100 [DEBUG] [Thread-71984] [transport.py] [_log()] userauth is OK
2025-12-12T15:25:56.101 [DEBUG] [Thread-71984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:25:56.101 [DEBUG] [Thread-71984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:25:56.101 [DEBUG] [Thread-71984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:25:56.101 [DEBUG] [Thread-71984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:25:56.120 [INFO] [Thread-71984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:25:56.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:25:56.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:25:56.926 [DEBUG] [Thread-71984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:25:56.926 [DEBUG] [Thread-71984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:25:56.974 [DEBUG] [Thread-71984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:25:56.974 [DEBUG] [Thread-71984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:25:56.983 [DEBUG] [Thread-71984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:25:56.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:25:56.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:25:57.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:25:57.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:25:57.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:25:57.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:25:57.019 [DEBUG] [Thread-71984] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:26:00.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:26:00.756 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:26:02.374 [DEBUG] [Thread-71986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:26:17.419 [DEBUG] [Thread-71987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:26:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:26:27.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:26:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:26:27.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 26, 13), 22.14, 22.34, 0.0, 54.4, 20.02, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:26:27.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:26:13
2025-12-12T15:26:27.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:26:28.036 [DEBUG] [Thread-71988] [transport.py] [_log()] starting thread (client mode): 0xf575fb50
2025-12-12T15:26:28.036 [DEBUG] [Thread-71988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:26:28.057 [DEBUG] [Thread-71988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:26:28.057 [INFO] [Thread-71988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:26:28.060 [DEBUG] [Thread-71988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:26:28.060 [DEBUG] [Thread-71988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] client lang: <none>
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] server lang: <none>
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] kex follows: False
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] Compression: none
2025-12-12T15:26:28.061 [DEBUG] [Thread-71988] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:26:28.081 [DEBUG] [Thread-71988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:26:28.081 [DEBUG] [Thread-71988] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:26:28.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:26:28.081 [DEBUG] [Thread-71988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:26:28.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:26:28.082 [DEBUG] [Thread-71988] [transport.py] [_log()] userauth is OK
2025-12-12T15:26:28.082 [DEBUG] [Thread-71988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:26:28.082 [DEBUG] [Thread-71988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:26:28.082 [DEBUG] [Thread-71988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:26:28.082 [DEBUG] [Thread-71988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:26:28.116 [INFO] [Thread-71988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:26:28.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:26:28.766 [DEBUG] [Thread-71988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:26:28.766 [DEBUG] [Thread-71988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:26:28.766 [DEBUG] [Thread-71988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:26:28.807 [DEBUG] [Thread-71988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:26:28.807 [DEBUG] [Thread-71988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:26:28.809 [DEBUG] [Thread-71988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:26:28.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:26:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:26:28.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:26:28.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:26:28.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:26:28.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:26:28.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.559816 -999.00  +20.20  55.16     28   +1.10 1 1 2 1 1   888    0 16.17 -88.81 ----- 54.4 55.2 322.8 73.9 23.8 -26.4 23.4 -25.5 24.1 -22.2 24.6 -23.6
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.559816
2025-12-12T15:26:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:26:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:26:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:26:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:26:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:26:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:26:13', tmtdew=22.14, humidity=22.34, cloud=0.0, wind=54.4, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:26:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:26:28.826 [DEBUG] [Thread-71988] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:26:28.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:26:28.912 [DEBUG] [Thread-71991] [transport.py] [_log()] starting thread (client mode): 0xfabc5ed0
2025-12-12T15:26:28.912 [DEBUG] [Thread-71991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:26:28.929 [DEBUG] [Thread-71991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:26:28.929 [INFO] [Thread-71991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:26:28.936 [DEBUG] [Thread-71991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] client lang: <none>
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] server lang: <none>
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] kex follows: False
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] Compression: none
2025-12-12T15:26:28.937 [DEBUG] [Thread-71991] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:26:28.991 [DEBUG] [Thread-71991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:26:28.991 [DEBUG] [Thread-71991] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:26:28.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:26:28.992 [DEBUG] [Thread-71991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:26:28.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:26:29.048 [DEBUG] [Thread-71991] [transport.py] [_log()] userauth is OK
2025-12-12T15:26:29.048 [DEBUG] [Thread-71991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:26:29.048 [DEBUG] [Thread-71991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:26:29.048 [DEBUG] [Thread-71991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:26:29.048 [DEBUG] [Thread-71991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:26:29.062 [INFO] [Thread-71991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:26:29.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:26:29.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:26:29.969 [DEBUG] [Thread-71991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:26:29.970 [DEBUG] [Thread-71991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:26:30.017 [DEBUG] [Thread-71991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:26:30.017 [DEBUG] [Thread-71991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:26:30.026 [DEBUG] [Thread-71991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:26:30.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:26: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')
2025-12-12T15:26:30.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:26:30.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:26:30.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:26:30.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:26:30.057 [DEBUG] [Thread-71991] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:26:32.446 [DEBUG] [Thread-71993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:26:47.481 [DEBUG] [Thread-71994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:26:50.602 [DEBUG] [Thread-71995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:27:00.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:27:00.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:27:00.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 26, 45), 21.52, 23.42, 0.0, 60.43, 19.9, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:27:00.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:26:45
2025-12-12T15:27:00.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:27:00.896 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:00.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:01.043 [DEBUG] [Thread-71996] [transport.py] [_log()] starting thread (client mode): 0xfabc7700
2025-12-12T15:27:01.043 [DEBUG] [Thread-71996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:27:01.062 [DEBUG] [Thread-71996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:27:01.062 [INFO] [Thread-71996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:27:01.064 [DEBUG] [Thread-71996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:27:01.064 [DEBUG] [Thread-71996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:27:01.064 [DEBUG] [Thread-71996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:27:01.064 [DEBUG] [Thread-71996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:01.064 [DEBUG] [Thread-71996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:01.064 [DEBUG] [Thread-71996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] client lang: <none>
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] server lang: <none>
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] kex follows: False
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] Compression: none
2025-12-12T15:27:01.065 [DEBUG] [Thread-71996] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:27:01.078 [DEBUG] [Thread-71996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:27:01.078 [DEBUG] [Thread-71996] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:27:01.078 [DEBUG] [Thread-71996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:27:01.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:27:01.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:27:01.080 [DEBUG] [Thread-71996] [transport.py] [_log()] userauth is OK
2025-12-12T15:27:01.080 [DEBUG] [Thread-71996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:27:01.080 [DEBUG] [Thread-71996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:27:01.080 [DEBUG] [Thread-71996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:27:01.080 [DEBUG] [Thread-71996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:27:01.103 [INFO] [Thread-71996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:27:01.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:27:01.745 [DEBUG] [Thread-71996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:27:01.746 [DEBUG] [Thread-71996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:27:01.746 [DEBUG] [Thread-71996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:27:01.787 [DEBUG] [Thread-71996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:27:01.787 [DEBUG] [Thread-71996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:27:01.790 [DEBUG] [Thread-71996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:27:01.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:27:01.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:27:01.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:27:01.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:27:01.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:27:01.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:27:01.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.560163 -999.00  +20.20  60.60     28   +1.50 1 1 3 1 1   888    0 15.98 -90.62 ----- 53.8 60.6 329.2 70.0 23.8 -26.2 23.5 -25.7 24.1 -23.3 24.6 -23.9
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.560163
2025-12-12T15:27:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:27:01.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:27:01.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:27:01.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:27:01.812 [DEBUG] [Thread-71996] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:27:01.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:27:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:26:45', tmtdew=21.52, humidity=23.42, cloud=0.0, wind=60.43, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:26:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:27:01.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:27:01.906 [DEBUG] [Thread-71999] [transport.py] [_log()] starting thread (client mode): 0xfabc7160
2025-12-12T15:27:01.906 [DEBUG] [Thread-71999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:27:01.921 [DEBUG] [Thread-71999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:27:01.922 [INFO] [Thread-71999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:27:01.929 [DEBUG] [Thread-71999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:27:01.929 [DEBUG] [Thread-71999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:27:01.929 [DEBUG] [Thread-71999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:27:01.929 [DEBUG] [Thread-71999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:01.929 [DEBUG] [Thread-71999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] client lang: <none>
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] server lang: <none>
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] kex follows: False
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] Compression: none
2025-12-12T15:27:01.930 [DEBUG] [Thread-71999] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:27:01.992 [DEBUG] [Thread-71999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:27:01.992 [DEBUG] [Thread-71999] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:27:01.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:27:01.993 [DEBUG] [Thread-71999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:27:01.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:27:02.049 [DEBUG] [Thread-71999] [transport.py] [_log()] userauth is OK
2025-12-12T15:27:02.049 [DEBUG] [Thread-71999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:27:02.049 [DEBUG] [Thread-71999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:27:02.049 [DEBUG] [Thread-71999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:27:02.049 [DEBUG] [Thread-71999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:27:02.067 [INFO] [Thread-71999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:27:02.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:27:02.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:27:02.510 [DEBUG] [Thread-72001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:02.961 [DEBUG] [Thread-71999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:27:02.962 [DEBUG] [Thread-71999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:27:03.009 [DEBUG] [Thread-71999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:27:03.009 [DEBUG] [Thread-71999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:27:03.018 [DEBUG] [Thread-71999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:27:03.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:27:03.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:27:03.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:27:03.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:27:03.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:27:03.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:27:03.057 [DEBUG] [Thread-71999] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:27:17.554 [DEBUG] [Thread-72002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:32.583 [DEBUG] [Thread-72003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:33.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:27:33.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:27:33.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:27:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 27, 17), 21.42, 23.57, 0.0, 60.91, 19.87, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:27:33.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:27:17
2025-12-12T15:27:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:27:34.020 [DEBUG] [Thread-72004] [transport.py] [_log()] starting thread (client mode): 0xfabc6140
2025-12-12T15:27:34.020 [DEBUG] [Thread-72004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:27:34.039 [DEBUG] [Thread-72004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:27:34.039 [INFO] [Thread-72004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] client lang: <none>
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] server lang: <none>
2025-12-12T15:27:34.042 [DEBUG] [Thread-72004] [transport.py] [_log()] kex follows: False
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] Compression: none
2025-12-12T15:27:34.043 [DEBUG] [Thread-72004] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:27:34.061 [DEBUG] [Thread-72004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:27:34.062 [DEBUG] [Thread-72004] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:27:34.062 [DEBUG] [Thread-72004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:27:34.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:27:34.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:27:34.066 [DEBUG] [Thread-72004] [transport.py] [_log()] userauth is OK
2025-12-12T15:27:34.066 [DEBUG] [Thread-72004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:27:34.066 [DEBUG] [Thread-72004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:27:34.066 [DEBUG] [Thread-72004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:27:34.066 [DEBUG] [Thread-72004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:27:34.080 [INFO] [Thread-72004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:27:34.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:27:34.671 [DEBUG] [Thread-72004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:27:34.671 [DEBUG] [Thread-72004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:27:34.672 [DEBUG] [Thread-72004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:27:34.713 [DEBUG] [Thread-72004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:27:34.713 [DEBUG] [Thread-72004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:27:34.716 [DEBUG] [Thread-72004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:27:34.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:27:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:27:34.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:27:34.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:27:34.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:27:34.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:27:34.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:27:34.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:27:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:27:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.560510 -999.00  +20.70  52.78     28   +1.60 1 1 2 1 1   888    0 16.64 -86.70 ----- 48.2 52.8 329.8 63.4 23.9 -25.8 23.7 -25.6 24.3 -21.5 24.8 -23.4
2025-12-12T15:27:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:27:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:27:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.560510
2025-12-12T15:27:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:27:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:27:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:27:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:27:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:27:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:27:17', tmtdew=21.42, humidity=23.57, cloud=0.0, wind=60.91, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:27:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:27:34.741 [DEBUG] [Thread-72004] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:27:34.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:27:34.828 [DEBUG] [Thread-72007] [transport.py] [_log()] starting thread (client mode): 0xf5742140
2025-12-12T15:27:34.828 [DEBUG] [Thread-72007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:27:34.843 [DEBUG] [Thread-72007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:27:34.843 [INFO] [Thread-72007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:27:34.851 [DEBUG] [Thread-72007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:27:34.851 [DEBUG] [Thread-72007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:27:34.851 [DEBUG] [Thread-72007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:27:34.851 [DEBUG] [Thread-72007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:34.851 [DEBUG] [Thread-72007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:27:34.851 [DEBUG] [Thread-72007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] client lang: <none>
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] server lang: <none>
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] kex follows: False
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] Compression: none
2025-12-12T15:27:34.852 [DEBUG] [Thread-72007] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:27:34.909 [DEBUG] [Thread-72007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:27:34.909 [DEBUG] [Thread-72007] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:27:34.909 [DEBUG] [Thread-72007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:27:34.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:27:34.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:27:34.968 [DEBUG] [Thread-72007] [transport.py] [_log()] userauth is OK
2025-12-12T15:27:34.968 [DEBUG] [Thread-72007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:27:34.968 [DEBUG] [Thread-72007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:27:34.968 [DEBUG] [Thread-72007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:27:34.968 [DEBUG] [Thread-72007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:27:34.988 [INFO] [Thread-72007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:27:34.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:27:34.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:27:35.835 [DEBUG] [Thread-72007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:27:35.835 [DEBUG] [Thread-72007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:27:35.883 [DEBUG] [Thread-72007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:27:35.883 [DEBUG] [Thread-72007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:27:35.892 [DEBUG] [Thread-72007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:27:35.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:27:35.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:27:35.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:27:35.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:27:35.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:27:35.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:27:35.927 [DEBUG] [Thread-72007] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:27:47.609 [DEBUG] [Thread-72009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:27:50.649 [DEBUG] [Thread-72010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:01.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:01.038 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:02.644 [DEBUG] [Thread-72011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:05.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:28:05.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:28:05.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:28:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 27, 50), 21.16, 23.74, 0.0, 61.61, 19.75, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:28:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:27:50
2025-12-12T15:28:06.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:28:06.903 [DEBUG] [Thread-72012] [transport.py] [_log()] starting thread (client mode): 0xf575faf0
2025-12-12T15:28:06.903 [DEBUG] [Thread-72012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:28:06.923 [DEBUG] [Thread-72012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:28:06.923 [INFO] [Thread-72012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] client lang: <none>
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] server lang: <none>
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] kex follows: False
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] Compression: none
2025-12-12T15:28:06.926 [DEBUG] [Thread-72012] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:28:06.945 [DEBUG] [Thread-72012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:28:06.945 [DEBUG] [Thread-72012] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:28:06.946 [DEBUG] [Thread-72012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:28:06.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:28:06.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:28:06.988 [DEBUG] [Thread-72012] [transport.py] [_log()] userauth is OK
2025-12-12T15:28:06.988 [DEBUG] [Thread-72012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:28:06.989 [DEBUG] [Thread-72012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:28:06.989 [DEBUG] [Thread-72012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:28:06.989 [DEBUG] [Thread-72012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:28:07.024 [INFO] [Thread-72012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:28:07.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:28:07.674 [DEBUG] [Thread-72012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:28:07.674 [DEBUG] [Thread-72012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:28:07.675 [DEBUG] [Thread-72012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:28:07.716 [DEBUG] [Thread-72012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:28:07.716 [DEBUG] [Thread-72012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:28:07.719 [DEBUG] [Thread-72012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:28:07.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:28:07.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:28:07.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:28:07.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:28:07.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:28:07.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:28:07.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:28:07.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:28:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:28:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.560858 -999.00  +20.30  45.42     29   +1.80 1 1 2 1 1   888    0 15.93 -97.39 ----- 51.2 45.4 317.8 65.1 23.8 -26.1 23.5 -26.5 24.3 -24.2 24.6 -24.3
2025-12-12T15:28:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:28:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:28:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.560858
2025-12-12T15:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:28:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:27:50', tmtdew=21.16, humidity=23.74, cloud=0.0, wind=61.61, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:27:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:28:07.744 [DEBUG] [Thread-72012] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:28:07.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:28:07.839 [DEBUG] [Thread-72015] [transport.py] [_log()] starting thread (client mode): 0xf813d540
2025-12-12T15:28:07.840 [DEBUG] [Thread-72015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:28:07.855 [DEBUG] [Thread-72015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:28:07.855 [INFO] [Thread-72015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:28:07.862 [DEBUG] [Thread-72015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:28:07.862 [DEBUG] [Thread-72015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:28:07.862 [DEBUG] [Thread-72015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] client lang: <none>
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] server lang: <none>
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] kex follows: False
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] Compression: none
2025-12-12T15:28:07.863 [DEBUG] [Thread-72015] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:28:07.920 [DEBUG] [Thread-72015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:28:07.920 [DEBUG] [Thread-72015] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:28:07.921 [DEBUG] [Thread-72015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:28:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:28:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:28:07.976 [DEBUG] [Thread-72015] [transport.py] [_log()] userauth is OK
2025-12-12T15:28:07.977 [DEBUG] [Thread-72015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:28:07.977 [DEBUG] [Thread-72015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:28:07.977 [DEBUG] [Thread-72015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:28:07.977 [DEBUG] [Thread-72015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:28:08.001 [INFO] [Thread-72015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:28:08.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:28:08.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:28:08.879 [DEBUG] [Thread-72015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:28:08.879 [DEBUG] [Thread-72015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:28:08.928 [DEBUG] [Thread-72015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:28:08.928 [DEBUG] [Thread-72015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:28:08.937 [DEBUG] [Thread-72015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:28:08.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:28:08.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:28:08.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:28:08.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:28:08.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:28:08.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:28:08.974 [DEBUG] [Thread-72015] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:28:17.676 [DEBUG] [Thread-72017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:32.719 [DEBUG] [Thread-72018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:28:38.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:28:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:28:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 28, 22), 20.89, 24.2, 0.0, 62.95, 19.75, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:28:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:28:22
2025-12-12T15:28:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:28:39.951 [DEBUG] [Thread-72019] [transport.py] [_log()] starting thread (client mode): 0xf81f1e70
2025-12-12T15:28:39.951 [DEBUG] [Thread-72019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:28:39.971 [DEBUG] [Thread-72019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:28:39.971 [INFO] [Thread-72019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:39.974 [DEBUG] [Thread-72019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] client lang: <none>
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] server lang: <none>
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] kex follows: False
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] Compression: none
2025-12-12T15:28:39.975 [DEBUG] [Thread-72019] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:28:39.992 [DEBUG] [Thread-72019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:28:39.993 [DEBUG] [Thread-72019] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:28:39.993 [DEBUG] [Thread-72019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:28:39.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:28:39.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:28:39.995 [DEBUG] [Thread-72019] [transport.py] [_log()] userauth is OK
2025-12-12T15:28:39.995 [DEBUG] [Thread-72019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:28:39.995 [DEBUG] [Thread-72019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:28:39.995 [DEBUG] [Thread-72019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:28:39.995 [DEBUG] [Thread-72019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:28:40.019 [INFO] [Thread-72019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:28:40.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:28:40.668 [DEBUG] [Thread-72019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:28:40.668 [DEBUG] [Thread-72019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:28:40.668 [DEBUG] [Thread-72019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:28:40.709 [DEBUG] [Thread-72019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:28:40.709 [DEBUG] [Thread-72019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:28:40.713 [DEBUG] [Thread-72019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:28:40.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:28:40.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:28:40.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:28:40.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:28:40.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:28:40.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:28:40.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:28:40.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.561205 -999.00  +20.60  49.81     29   +2.00 1 1 2 1 1   888    0 16.40 -92.58 ----- 52.3 49.8 308.0 71.0 23.9 -26.1 23.6 -25.6 24.1 -23.8 24.6 -22.8
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.561205
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:28:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:28:22', tmtdew=20.89, humidity=24.2, cloud=0.0, wind=62.95, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:28:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:28:40.742 [DEBUG] [Thread-72019] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:28:40.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:28:40.831 [DEBUG] [Thread-72022] [transport.py] [_log()] starting thread (client mode): 0xf57006a0
2025-12-12T15:28:40.831 [DEBUG] [Thread-72022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:28:40.846 [DEBUG] [Thread-72022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:28:40.846 [INFO] [Thread-72022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:28:40.854 [DEBUG] [Thread-72022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] client lang: <none>
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] server lang: <none>
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] kex follows: False
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] Compression: none
2025-12-12T15:28:40.855 [DEBUG] [Thread-72022] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:28:40.911 [DEBUG] [Thread-72022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:28:40.912 [DEBUG] [Thread-72022] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:28:40.912 [DEBUG] [Thread-72022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:28:40.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:28:40.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:28:40.968 [DEBUG] [Thread-72022] [transport.py] [_log()] userauth is OK
2025-12-12T15:28:40.968 [DEBUG] [Thread-72022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:28:40.968 [DEBUG] [Thread-72022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:28:40.968 [DEBUG] [Thread-72022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:28:40.968 [DEBUG] [Thread-72022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:28:40.986 [INFO] [Thread-72022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:28:40.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:28:40.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:28:41.857 [DEBUG] [Thread-72022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:28:41.857 [DEBUG] [Thread-72022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:28:41.904 [DEBUG] [Thread-72022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:28:41.905 [DEBUG] [Thread-72022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:28:41.914 [DEBUG] [Thread-72022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:28:41.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:28:41.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:28:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:28:41.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:28:41.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:28:41.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:28:41.948 [DEBUG] [Thread-72022] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:28:47.749 [DEBUG] [Thread-72024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:28:50.700 [DEBUG] [Thread-72025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:01.179 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:01.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:02.799 [DEBUG] [Thread-72026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:29:11.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:29:11.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:29:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 28, 54), 21.13, 24.32, 0.0, 60.82, 19.9, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:29:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:28:54
2025-12-12T15:29:12.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:29:12.932 [DEBUG] [Thread-72027] [transport.py] [_log()] starting thread (client mode): 0xf5742e00
2025-12-12T15:29:12.932 [DEBUG] [Thread-72027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:29:12.956 [DEBUG] [Thread-72027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:29:12.957 [INFO] [Thread-72027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:29:12.960 [DEBUG] [Thread-72027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] client lang: <none>
2025-12-12T15:29:12.961 [DEBUG] [Thread-72027] [transport.py] [_log()] server lang: <none>
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] kex follows: False
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] Compression: none
2025-12-12T15:29:12.962 [DEBUG] [Thread-72027] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:29:12.981 [DEBUG] [Thread-72027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:29:12.981 [DEBUG] [Thread-72027] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:29:12.982 [DEBUG] [Thread-72027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:29:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:29:12.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:29:12.984 [DEBUG] [Thread-72027] [transport.py] [_log()] userauth is OK
2025-12-12T15:29:12.984 [DEBUG] [Thread-72027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:29:12.984 [DEBUG] [Thread-72027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:29:12.984 [DEBUG] [Thread-72027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:29:12.984 [DEBUG] [Thread-72027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:29:13.007 [INFO] [Thread-72027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:29:13.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:29:13.678 [DEBUG] [Thread-72027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:29:13.678 [DEBUG] [Thread-72027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:29:13.678 [DEBUG] [Thread-72027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:29:13.719 [DEBUG] [Thread-72027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:29:13.719 [DEBUG] [Thread-72027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:29:13.722 [DEBUG] [Thread-72027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:29:13.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:29:13.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:29:13.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:29:13.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:29:13.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:29:13.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:29:13.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:29:13.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:29:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:29:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.561552 -999.00  +20.60  55.99     29   +1.90 1 1 2 1 1   888    0 16.75 -92.22 ----- 50.9 56.0 309.2 70.4 23.9 -25.3 23.6 -25.8 24.2 -24.9 24.7 -23.2
2025-12-12T15:29:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:29:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:29:13.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.561552
2025-12-12T15:29:13.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:29:13.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:29:13.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:29:13.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:29:13.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:29:13.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:28:54', tmtdew=21.13, humidity=24.32, cloud=0.0, wind=60.82, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:28:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:29:13.749 [DEBUG] [Thread-72027] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:29:13.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:29:13.836 [DEBUG] [Thread-72030] [transport.py] [_log()] starting thread (client mode): 0xf81e4220
2025-12-12T15:29:13.837 [DEBUG] [Thread-72030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:29:13.852 [DEBUG] [Thread-72030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:29:13.852 [INFO] [Thread-72030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:29:13.859 [DEBUG] [Thread-72030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:29:13.859 [DEBUG] [Thread-72030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:29:13.859 [DEBUG] [Thread-72030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:29:13.859 [DEBUG] [Thread-72030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:13.859 [DEBUG] [Thread-72030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] client lang: <none>
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] server lang: <none>
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] kex follows: False
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] Compression: none
2025-12-12T15:29:13.860 [DEBUG] [Thread-72030] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:29:13.920 [DEBUG] [Thread-72030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:29:13.921 [DEBUG] [Thread-72030] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:29:13.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:29:13.922 [DEBUG] [Thread-72030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:29:13.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:29:13.976 [DEBUG] [Thread-72030] [transport.py] [_log()] userauth is OK
2025-12-12T15:29:13.976 [DEBUG] [Thread-72030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:29:13.977 [DEBUG] [Thread-72030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:29:13.977 [DEBUG] [Thread-72030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:29:13.977 [DEBUG] [Thread-72030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:29:13.996 [INFO] [Thread-72030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:29:13.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:29:13.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:29:14.849 [DEBUG] [Thread-72030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:29:14.849 [DEBUG] [Thread-72030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:29:14.898 [DEBUG] [Thread-72030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:29:14.898 [DEBUG] [Thread-72030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:29:14.907 [DEBUG] [Thread-72030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:29:14.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:29:14.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:29:14.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:29:14.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:29:14.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:29:14.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:29:14.946 [DEBUG] [Thread-72030] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:29:17.822 [DEBUG] [Thread-72032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:32.858 [DEBUG] [Thread-72033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:44.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:29:44.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:29:44.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:29:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 29, 26), 21.4, 23.96, 0.0, 63.8, 20.25, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:29:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:29:26
2025-12-12T15:29:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:29:45.947 [DEBUG] [Thread-72034] [transport.py] [_log()] starting thread (client mode): 0xf575e560
2025-12-12T15:29:45.948 [DEBUG] [Thread-72034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:29:45.967 [DEBUG] [Thread-72034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:29:45.967 [INFO] [Thread-72034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] client lang: <none>
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] server lang: <none>
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] kex follows: False
2025-12-12T15:29:45.970 [DEBUG] [Thread-72034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:29:45.971 [DEBUG] [Thread-72034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:29:45.971 [DEBUG] [Thread-72034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:29:45.971 [DEBUG] [Thread-72034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:29:45.971 [DEBUG] [Thread-72034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:29:45.971 [DEBUG] [Thread-72034] [transport.py] [_log()] Compression: none
2025-12-12T15:29:45.971 [DEBUG] [Thread-72034] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:29:45.986 [DEBUG] [Thread-72034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:29:45.986 [DEBUG] [Thread-72034] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:29:45.986 [DEBUG] [Thread-72034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:29:45.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:29:45.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:29:45.988 [DEBUG] [Thread-72034] [transport.py] [_log()] userauth is OK
2025-12-12T15:29:45.988 [DEBUG] [Thread-72034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:29:45.988 [DEBUG] [Thread-72034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:29:45.988 [DEBUG] [Thread-72034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:29:45.988 [DEBUG] [Thread-72034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:29:45.999 [INFO] [Thread-72034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:29:45.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:29:46.643 [DEBUG] [Thread-72034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:29:46.643 [DEBUG] [Thread-72034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:29:46.643 [DEBUG] [Thread-72034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:29:46.683 [DEBUG] [Thread-72034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:29:46.683 [DEBUG] [Thread-72034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:29:46.686 [DEBUG] [Thread-72034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:29:46.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:29:46.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:29:46.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:29:46.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:29:46.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:29:46.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:29:46.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.561899 -999.00  +20.10  54.61     29   +1.90 1 1 2 1 1   888    0 16.27 -90.82 ----- 60.4 54.6 314.4 65.5 23.8 -25.4 23.5 -26.8 24.3 -22.2 24.7 -24.0
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.561899
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:29:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:29:26', tmtdew=21.4, humidity=23.96, cloud=0.0, wind=63.8, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:29:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:29:46.704 [DEBUG] [Thread-72034] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:29:46.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:29:46.790 [DEBUG] [Thread-72037] [transport.py] [_log()] starting thread (client mode): 0xf574df00
2025-12-12T15:29:46.790 [DEBUG] [Thread-72037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:29:46.805 [DEBUG] [Thread-72037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:29:46.805 [INFO] [Thread-72037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] client lang: <none>
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] server lang: <none>
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] kex follows: False
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:29:46.818 [DEBUG] [Thread-72037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:29:46.819 [DEBUG] [Thread-72037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:29:46.819 [DEBUG] [Thread-72037] [transport.py] [_log()] Compression: none
2025-12-12T15:29:46.819 [DEBUG] [Thread-72037] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:29:46.874 [DEBUG] [Thread-72037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:29:46.875 [DEBUG] [Thread-72037] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:29:46.875 [DEBUG] [Thread-72037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:29:46.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:29:46.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:29:46.932 [DEBUG] [Thread-72037] [transport.py] [_log()] userauth is OK
2025-12-12T15:29:46.932 [DEBUG] [Thread-72037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:29:46.932 [DEBUG] [Thread-72037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:29:46.932 [DEBUG] [Thread-72037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:29:46.932 [DEBUG] [Thread-72037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:29:46.948 [INFO] [Thread-72037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:29:46.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:29:46.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:29:47.801 [DEBUG] [Thread-72037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:29:47.801 [DEBUG] [Thread-72037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:29:47.849 [DEBUG] [Thread-72037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:29:47.849 [DEBUG] [Thread-72037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:29:47.858 [DEBUG] [Thread-72037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:29:47.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:29:47.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:29:47.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:29:47.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:29:47.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:29:47.886 [DEBUG] [Thread-72039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:29:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:29:47.893 [DEBUG] [Thread-72037] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:29:50.754 [DEBUG] [Thread-72040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:01.322 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:01.324 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:02.927 [DEBUG] [Thread-72041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:17.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:30:17.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:30: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
2025-12-12T15:30:17.953 [DEBUG] [Thread-72042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:18.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 29, 58), 20.48, 25.32, 0.0, 62.04, 20.01, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:30:18.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:29:58
2025-12-12T15:30:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:30:18.872 [DEBUG] [Thread-72043] [transport.py] [_log()] starting thread (client mode): 0xf575e470
2025-12-12T15:30:18.873 [DEBUG] [Thread-72043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:30:18.894 [DEBUG] [Thread-72043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:30:18.894 [INFO] [Thread-72043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] client lang: <none>
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] server lang: <none>
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] kex follows: False
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:30:18.897 [DEBUG] [Thread-72043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:30:18.898 [DEBUG] [Thread-72043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:30:18.898 [DEBUG] [Thread-72043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:30:18.898 [DEBUG] [Thread-72043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:30:18.898 [DEBUG] [Thread-72043] [transport.py] [_log()] Compression: none
2025-12-12T15:30:18.898 [DEBUG] [Thread-72043] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:30:18.915 [DEBUG] [Thread-72043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:30:18.916 [DEBUG] [Thread-72043] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:30:18.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:30:18.916 [DEBUG] [Thread-72043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:30:18.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:30:18.918 [DEBUG] [Thread-72043] [transport.py] [_log()] userauth is OK
2025-12-12T15:30:18.919 [DEBUG] [Thread-72043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:30:18.919 [DEBUG] [Thread-72043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:30:18.919 [DEBUG] [Thread-72043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:30:18.919 [DEBUG] [Thread-72043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:30:18.954 [INFO] [Thread-72043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:30:18.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:30:19.586 [DEBUG] [Thread-72043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:30:19.586 [DEBUG] [Thread-72043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:30:19.587 [DEBUG] [Thread-72043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:30:19.627 [DEBUG] [Thread-72043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:30:19.627 [DEBUG] [Thread-72043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:30:19.630 [DEBUG] [Thread-72043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:30:19.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:30:19.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:30:19.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:30:19.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:30:19.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:30:19.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:30:19.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:30:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.562593 -999.00  +20.60  47.35     31   +3.30 1 1 2 1 1   888    0 15.53 -95.88 ----- 58.2 47.4 316.8 64.0 23.8 -26.5 23.5 -24.6 24.1 -24.5 24.6 -22.4
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.562593
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:30:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:29:58', tmtdew=20.48, humidity=25.32, cloud=0.0, wind=62.04, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:30:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:30:19.655 [DEBUG] [Thread-72043] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:30:19.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:30:19.746 [DEBUG] [Thread-72046] [transport.py] [_log()] starting thread (client mode): 0xf57be410
2025-12-12T15:30:19.746 [DEBUG] [Thread-72046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:30:19.761 [DEBUG] [Thread-72046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:30:19.761 [INFO] [Thread-72046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] client lang: <none>
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] server lang: <none>
2025-12-12T15:30:19.769 [DEBUG] [Thread-72046] [transport.py] [_log()] kex follows: False
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] Compression: none
2025-12-12T15:30:19.770 [DEBUG] [Thread-72046] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:30:19.827 [DEBUG] [Thread-72046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:30:19.828 [DEBUG] [Thread-72046] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:30:19.828 [DEBUG] [Thread-72046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:30:19.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:30:19.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:30:19.884 [DEBUG] [Thread-72046] [transport.py] [_log()] userauth is OK
2025-12-12T15:30:19.884 [DEBUG] [Thread-72046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:30:19.884 [DEBUG] [Thread-72046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:30:19.884 [DEBUG] [Thread-72046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:30:19.884 [DEBUG] [Thread-72046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:30:19.898 [INFO] [Thread-72046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:30:19.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:30:19.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:30:20.763 [DEBUG] [Thread-72046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:30:20.763 [DEBUG] [Thread-72046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:30:20.810 [DEBUG] [Thread-72046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:30:20.810 [DEBUG] [Thread-72046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:30:20.820 [DEBUG] [Thread-72046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:30:20.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:30:20.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:30:20.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:30:20.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:30:20.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:30:20.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:30:20.851 [DEBUG] [Thread-72046] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:30:32.979 [DEBUG] [Thread-72048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:48.027 [DEBUG] [Thread-72049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:50.805 [DEBUG] [Thread-72050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:30:50.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:30:50.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:30:50.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:30:51.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 30, 30), 19.92, 26.26, 0.0, 58.3, 19.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:30:51.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:30:30
2025-12-12T15:30:51.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:30:51.843 [DEBUG] [Thread-72051] [transport.py] [_log()] starting thread (client mode): 0xf57bc2b0
2025-12-12T15:30:51.843 [DEBUG] [Thread-72051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:30:51.864 [DEBUG] [Thread-72051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:30:51.864 [INFO] [Thread-72051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] client lang: <none>
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] server lang: <none>
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] kex follows: False
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] Compression: none
2025-12-12T15:30:51.868 [DEBUG] [Thread-72051] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:30:51.884 [DEBUG] [Thread-72051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:30:51.884 [DEBUG] [Thread-72051] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:30:51.884 [DEBUG] [Thread-72051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:30:51.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:30:51.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:30:51.886 [DEBUG] [Thread-72051] [transport.py] [_log()] userauth is OK
2025-12-12T15:30:51.886 [DEBUG] [Thread-72051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:30:51.886 [DEBUG] [Thread-72051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:30:51.886 [DEBUG] [Thread-72051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:30:51.886 [DEBUG] [Thread-72051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:30:51.906 [INFO] [Thread-72051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:30:51.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:30:52.519 [DEBUG] [Thread-72051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:30:52.519 [DEBUG] [Thread-72051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:30:52.519 [DEBUG] [Thread-72051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:30:52.559 [DEBUG] [Thread-72051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:30:52.559 [DEBUG] [Thread-72051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:30:52.561 [DEBUG] [Thread-72051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:30:52.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:30:52.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:30:52.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:30:52.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:30:52.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:30:52.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:30:52.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.562941 -999.00  +19.50  58.73     33   +3.20 1 1 2 1 1   888    0 15.89 -102.18 ----- 53.1 58.7 308.8 66.6 23.5 -26.8 23.2 -26.5 23.9 -26.8 24.4 -24.0
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.562941
2025-12-12T15:30:52.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:30:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:30:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:30:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:30:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:30:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:30:30', tmtdew=19.92, humidity=26.26, cloud=0.0, wind=58.3, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:30:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:30:52.581 [DEBUG] [Thread-72051] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:30:52.670 [DEBUG] [Thread-72054] [transport.py] [_log()] starting thread (client mode): 0xf5740a30
2025-12-12T15:30:52.670 [DEBUG] [Thread-72054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:30:52.684 [DEBUG] [Thread-72054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:30:52.685 [INFO] [Thread-72054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:30:52.692 [DEBUG] [Thread-72054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:30:52.692 [DEBUG] [Thread-72054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:30:52.692 [DEBUG] [Thread-72054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:30:52.692 [DEBUG] [Thread-72054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:52.692 [DEBUG] [Thread-72054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] client lang: <none>
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] server lang: <none>
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] kex follows: False
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:30:52.693 [DEBUG] [Thread-72054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:30:52.694 [DEBUG] [Thread-72054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:30:52.694 [DEBUG] [Thread-72054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:30:52.694 [DEBUG] [Thread-72054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:30:52.694 [DEBUG] [Thread-72054] [transport.py] [_log()] Compression: none
2025-12-12T15:30:52.694 [DEBUG] [Thread-72054] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:30:52.751 [DEBUG] [Thread-72054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:30:52.751 [DEBUG] [Thread-72054] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:30:52.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:30:52.752 [DEBUG] [Thread-72054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:30:52.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:30:52.808 [DEBUG] [Thread-72054] [transport.py] [_log()] userauth is OK
2025-12-12T15:30:52.808 [DEBUG] [Thread-72054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:30:52.808 [DEBUG] [Thread-72054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:30:52.808 [DEBUG] [Thread-72054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:30:52.808 [DEBUG] [Thread-72054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:30:52.828 [INFO] [Thread-72054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:30:52.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:30:52.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:30:53.701 [DEBUG] [Thread-72054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:30:53.701 [DEBUG] [Thread-72054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:30:53.749 [DEBUG] [Thread-72054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:30:53.749 [DEBUG] [Thread-72054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:30:53.758 [DEBUG] [Thread-72054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:30:53.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:30:53.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:30:53.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:30:53.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:30:53.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:30:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:30:53.793 [DEBUG] [Thread-72054] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:31:01.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:01.466 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:03.051 [DEBUG] [Thread-72056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:18.087 [DEBUG] [Thread-72057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:31:23.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:31:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:31:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 31, 2), 19.6, 26.87, 0.0, 61.56, 19.6, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:31:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:31:02
2025-12-12T15:31:24.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:31:24.766 [DEBUG] [Thread-72058] [transport.py] [_log()] starting thread (client mode): 0xf57bfdc0
2025-12-12T15:31:24.766 [DEBUG] [Thread-72058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:31:24.786 [DEBUG] [Thread-72058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:31:24.786 [INFO] [Thread-72058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] client lang: <none>
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] server lang: <none>
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] kex follows: False
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:31:24.789 [DEBUG] [Thread-72058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:31:24.790 [DEBUG] [Thread-72058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:31:24.790 [DEBUG] [Thread-72058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:31:24.790 [DEBUG] [Thread-72058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:31:24.790 [DEBUG] [Thread-72058] [transport.py] [_log()] Compression: none
2025-12-12T15:31:24.790 [DEBUG] [Thread-72058] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:31:24.807 [DEBUG] [Thread-72058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:31:24.808 [DEBUG] [Thread-72058] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:31:24.808 [DEBUG] [Thread-72058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:31:24.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:31:24.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:31:24.810 [DEBUG] [Thread-72058] [transport.py] [_log()] userauth is OK
2025-12-12T15:31:24.810 [DEBUG] [Thread-72058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:31:24.811 [DEBUG] [Thread-72058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:31:24.811 [DEBUG] [Thread-72058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:31:24.811 [DEBUG] [Thread-72058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:31:24.835 [INFO] [Thread-72058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:31:24.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:31:25.480 [DEBUG] [Thread-72058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:31:25.480 [DEBUG] [Thread-72058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:31:25.481 [DEBUG] [Thread-72058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:31:25.521 [DEBUG] [Thread-72058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:31:25.521 [DEBUG] [Thread-72058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:31:25.524 [DEBUG] [Thread-72058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:31:25.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:31:25.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:31:25.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:31:25.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:31:25.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:31:25.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:31:25.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:31:25.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:31:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:31:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.563288 -999.00  +19.50  65.40     34   +3.20 1 1 3 1 1   888    0 15.29 -106.91 ----- 48.4 65.4 311.6 72.3 23.4 -26.9 23.2 -27.2 23.7 -23.6 24.3 -24.0
2025-12-12T15:31:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:31:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:31:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.563288
2025-12-12T15:31:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:31:25.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:31:25.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:31:25.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:31:25.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:31:25.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:31:02', tmtdew=19.6, humidity=26.87, cloud=0.0, wind=61.56, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:31:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:31:25.549 [DEBUG] [Thread-72058] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:31:25.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:31:25.642 [DEBUG] [Thread-72061] [transport.py] [_log()] starting thread (client mode): 0xf57bf0d0
2025-12-12T15:31:25.642 [DEBUG] [Thread-72061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:31:25.657 [DEBUG] [Thread-72061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:31:25.657 [INFO] [Thread-72061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:31:25.664 [DEBUG] [Thread-72061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:31:25.664 [DEBUG] [Thread-72061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] client lang: <none>
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] server lang: <none>
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] kex follows: False
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] Compression: none
2025-12-12T15:31:25.665 [DEBUG] [Thread-72061] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:31:25.724 [DEBUG] [Thread-72061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:31:25.724 [DEBUG] [Thread-72061] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:31:25.725 [DEBUG] [Thread-72061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:31:25.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:31:25.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:31:25.780 [DEBUG] [Thread-72061] [transport.py] [_log()] userauth is OK
2025-12-12T15:31:25.780 [DEBUG] [Thread-72061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:31:25.780 [DEBUG] [Thread-72061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:31:25.780 [DEBUG] [Thread-72061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:31:25.781 [DEBUG] [Thread-72061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:31:25.800 [INFO] [Thread-72061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:31:25.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:31:25.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:31:26.663 [DEBUG] [Thread-72061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:31:26.664 [DEBUG] [Thread-72061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:31:26.712 [DEBUG] [Thread-72061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:31:26.712 [DEBUG] [Thread-72061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:31:26.721 [DEBUG] [Thread-72061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:31:26.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:31:26.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:31: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
2025-12-12T15:31:26.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:31:26.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:31:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:31:26.758 [DEBUG] [Thread-72061] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:31:33.120 [DEBUG] [Thread-72063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:48.167 [DEBUG] [Thread-72064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:50.867 [DEBUG] [Thread-72065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:31:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:31:56.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:31:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:31:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 31, 34), 19.4, 27.43, 0.0, 60.16, 19.92, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:31:57.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:31:34
2025-12-12T15:31:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:31:57.711 [DEBUG] [Thread-72066] [transport.py] [_log()] starting thread (client mode): 0xf81e5ed0
2025-12-12T15:31:57.712 [DEBUG] [Thread-72066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:31:57.732 [DEBUG] [Thread-72066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:31:57.732 [INFO] [Thread-72066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] client lang: <none>
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] server lang: <none>
2025-12-12T15:31:57.736 [DEBUG] [Thread-72066] [transport.py] [_log()] kex follows: False
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] Compression: none
2025-12-12T15:31:57.737 [DEBUG] [Thread-72066] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:31:57.757 [DEBUG] [Thread-72066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:31:57.758 [DEBUG] [Thread-72066] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:31:57.758 [DEBUG] [Thread-72066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:31:57.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:31:57.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:31:57.760 [DEBUG] [Thread-72066] [transport.py] [_log()] userauth is OK
2025-12-12T15:31:57.761 [DEBUG] [Thread-72066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:31:57.761 [DEBUG] [Thread-72066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:31:57.761 [DEBUG] [Thread-72066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:31:57.761 [DEBUG] [Thread-72066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:31:57.795 [INFO] [Thread-72066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:31:57.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:31:58.441 [DEBUG] [Thread-72066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:31:58.441 [DEBUG] [Thread-72066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:31:58.441 [DEBUG] [Thread-72066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:31:58.482 [DEBUG] [Thread-72066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:31:58.482 [DEBUG] [Thread-72066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:31:58.485 [DEBUG] [Thread-72066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:31:58.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:31:58.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:31:58.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:31:58.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:31:58.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:31:58.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:31:58.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:31:58.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:31:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:31:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.563635 -999.00  +19.90  41.00     33   +3.10 1 1 2 1 1   888    0 15.07 -107.20 ----- 50.2 41.0 324.6 62.5 23.4 -25.6 23.1 -25.4 23.6 -25.3 24.2 -23.4
2025-12-12T15:31:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:31:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:31:58.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.563635
2025-12-12T15:31:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:31:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:31:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:31:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:31:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:31:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:31:34', tmtdew=19.4, humidity=27.43, cloud=0.0, wind=60.16, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:31:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:31:58.507 [DEBUG] [Thread-72066] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:31:58.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:31:58.601 [DEBUG] [Thread-72069] [transport.py] [_log()] starting thread (client mode): 0xf57417b0
2025-12-12T15:31:58.601 [DEBUG] [Thread-72069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:31:58.616 [DEBUG] [Thread-72069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:31:58.616 [INFO] [Thread-72069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] client lang: <none>
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] server lang: <none>
2025-12-12T15:31:58.624 [DEBUG] [Thread-72069] [transport.py] [_log()] kex follows: False
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] Compression: none
2025-12-12T15:31:58.625 [DEBUG] [Thread-72069] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:31:58.679 [DEBUG] [Thread-72069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:31:58.680 [DEBUG] [Thread-72069] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:31:58.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:31:58.681 [DEBUG] [Thread-72069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:31:58.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:31:58.736 [DEBUG] [Thread-72069] [transport.py] [_log()] userauth is OK
2025-12-12T15:31:58.736 [DEBUG] [Thread-72069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:31:58.736 [DEBUG] [Thread-72069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:31:58.737 [DEBUG] [Thread-72069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:31:58.737 [DEBUG] [Thread-72069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:31:58.755 [INFO] [Thread-72069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:31:58.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:31:58.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:31:59.612 [DEBUG] [Thread-72069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:31:59.612 [DEBUG] [Thread-72069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:31:59.660 [DEBUG] [Thread-72069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:31:59.660 [DEBUG] [Thread-72069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:31:59.669 [DEBUG] [Thread-72069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:31:59.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:31:59.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:31:59.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:31:59.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:31:59.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:31:59.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:31:59.704 [DEBUG] [Thread-72069] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:32:01.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:32:01.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:32:03.199 [DEBUG] [Thread-72071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:32:18.240 [DEBUG] [Thread-72072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:32:29.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:32:29.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:32:29.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:32:30.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 32, 6), 19.68, 26.91, 0.0, 56.14, 19.97, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:32:30.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:32:06
2025-12-12T15:32:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:32:30.650 [DEBUG] [Thread-72073] [transport.py] [_log()] starting thread (client mode): 0xf57bdc00
2025-12-12T15:32:30.651 [DEBUG] [Thread-72073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:32:30.672 [DEBUG] [Thread-72073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:32:30.672 [INFO] [Thread-72073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:32:30.675 [DEBUG] [Thread-72073] [transport.py] [_log()] client lang: <none>
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] server lang: <none>
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] kex follows: False
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] Compression: none
2025-12-12T15:32:30.676 [DEBUG] [Thread-72073] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:32:30.694 [DEBUG] [Thread-72073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:32:30.695 [DEBUG] [Thread-72073] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:32:30.695 [DEBUG] [Thread-72073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:32:30.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:32:30.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:32:30.698 [DEBUG] [Thread-72073] [transport.py] [_log()] userauth is OK
2025-12-12T15:32:30.698 [DEBUG] [Thread-72073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:32:30.698 [DEBUG] [Thread-72073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:32:30.698 [DEBUG] [Thread-72073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:32:30.698 [DEBUG] [Thread-72073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:32:30.722 [INFO] [Thread-72073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:32:30.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:32:31.374 [DEBUG] [Thread-72073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:32:31.374 [DEBUG] [Thread-72073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:32:31.374 [DEBUG] [Thread-72073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:32:31.416 [DEBUG] [Thread-72073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:32:31.416 [DEBUG] [Thread-72073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:32:31.418 [DEBUG] [Thread-72073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:32:31.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:32:31.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:32:31.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:32:31.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:32:31.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:32:31.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:32:31.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:32:31.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:32:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:32:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.563983 -999.00  +19.90  55.99     32   +2.70 1 1 2 1 1   888    0 15.48 -113.81 ----- 51.8 56.0 311.0 59.3 23.4 -25.5 23.2 -25.5 23.8 -21.1 24.4 -22.8
2025-12-12T15:32:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:32:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:32:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.563983
2025-12-12T15:32:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:32:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:32:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:32:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:32:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:32:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:32:06', tmtdew=19.68, humidity=26.91, cloud=0.0, wind=56.14, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:32:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:32:31.442 [DEBUG] [Thread-72073] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:32:31.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:32:31.536 [DEBUG] [Thread-72076] [transport.py] [_log()] starting thread (client mode): 0xf57bfdc0
2025-12-12T15:32:31.536 [DEBUG] [Thread-72076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:32:31.551 [DEBUG] [Thread-72076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:32:31.551 [INFO] [Thread-72076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:32:31.558 [DEBUG] [Thread-72076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] client lang: <none>
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] server lang: <none>
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] kex follows: False
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] Compression: none
2025-12-12T15:32:31.559 [DEBUG] [Thread-72076] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:32:31.615 [DEBUG] [Thread-72076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:32:31.616 [DEBUG] [Thread-72076] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:32:31.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:32:31.617 [DEBUG] [Thread-72076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:32:31.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:32:31.676 [DEBUG] [Thread-72076] [transport.py] [_log()] userauth is OK
2025-12-12T15:32:31.676 [DEBUG] [Thread-72076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:32:31.676 [DEBUG] [Thread-72076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:32:31.676 [DEBUG] [Thread-72076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:32:31.677 [DEBUG] [Thread-72076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:32:31.695 [INFO] [Thread-72076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:32:31.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:32:31.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:32:32.583 [DEBUG] [Thread-72076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:32:32.583 [DEBUG] [Thread-72076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:32:32.632 [DEBUG] [Thread-72076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:32:32.632 [DEBUG] [Thread-72076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:32:32.641 [DEBUG] [Thread-72076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:32:32.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:32:32.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')
2025-12-12T15:32:32.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:32:32.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:32:32.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:32:32.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:32:32.674 [DEBUG] [Thread-72076] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:32:33.268 [DEBUG] [Thread-72078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:32:48.307 [DEBUG] [Thread-72079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:32:50.922 [DEBUG] [Thread-72080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:01.747 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:01.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:33:02.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:33: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
2025-12-12T15:33:03.334 [DEBUG] [Thread-72081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 32, 38), 19.84, 26.73, 0.0, 49.31, 20.08, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:33:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:32:38
2025-12-12T15:33:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:33:03.651 [DEBUG] [Thread-72082] [transport.py] [_log()] starting thread (client mode): 0xf81e7b20
2025-12-12T15:33:03.651 [DEBUG] [Thread-72082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:33:03.671 [DEBUG] [Thread-72082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:33:03.671 [INFO] [Thread-72082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] client lang: <none>
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] server lang: <none>
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] kex follows: False
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:33:03.675 [DEBUG] [Thread-72082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:33:03.676 [DEBUG] [Thread-72082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:33:03.676 [DEBUG] [Thread-72082] [transport.py] [_log()] Compression: none
2025-12-12T15:33:03.676 [DEBUG] [Thread-72082] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:33:03.694 [DEBUG] [Thread-72082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:33:03.694 [DEBUG] [Thread-72082] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:33:03.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:33:03.695 [DEBUG] [Thread-72082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:33:03.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:33:03.697 [DEBUG] [Thread-72082] [transport.py] [_log()] userauth is OK
2025-12-12T15:33:03.697 [DEBUG] [Thread-72082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:33:03.697 [DEBUG] [Thread-72082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:33:03.698 [DEBUG] [Thread-72082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:33:03.698 [DEBUG] [Thread-72082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:33:03.722 [INFO] [Thread-72082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:33:03.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:33:04.360 [DEBUG] [Thread-72082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:33:04.360 [DEBUG] [Thread-72082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:33:04.360 [DEBUG] [Thread-72082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:33:04.401 [DEBUG] [Thread-72082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:33:04.401 [DEBUG] [Thread-72082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:33:04.404 [DEBUG] [Thread-72082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:33:04.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:33:04.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:33:04.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:33:04.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:33:04.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:33:04.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:33:04.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:33:04.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:33:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:33:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.564330 -999.00  +20.30  42.67     31   +2.90 1 1 2 1 1   888    0 15.14 -111.45 ----- 43.1 42.7 320.6 57.1 23.6 -25.3 23.2 -25.1 23.8 -22.6 24.4 -22.7
2025-12-12T15:33:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:33:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:33:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.564330
2025-12-12T15:33:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:33:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:33:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:33:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:33:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:33:04.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:32:38', tmtdew=19.84, humidity=26.73, cloud=0.0, wind=49.31, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:32:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:33:04.431 [DEBUG] [Thread-72082] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:33:04.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:33:04.537 [DEBUG] [Thread-72085] [transport.py] [_log()] starting thread (client mode): 0xf81e7d00
2025-12-12T15:33:04.537 [DEBUG] [Thread-72085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:33:04.551 [DEBUG] [Thread-72085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:33:04.551 [INFO] [Thread-72085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:33:04.558 [DEBUG] [Thread-72085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:33:04.558 [DEBUG] [Thread-72085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:33:04.558 [DEBUG] [Thread-72085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:33:04.558 [DEBUG] [Thread-72085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:04.558 [DEBUG] [Thread-72085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:04.558 [DEBUG] [Thread-72085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] client lang: <none>
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] server lang: <none>
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] kex follows: False
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] Compression: none
2025-12-12T15:33:04.559 [DEBUG] [Thread-72085] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:33:04.615 [DEBUG] [Thread-72085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:33:04.615 [DEBUG] [Thread-72085] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:33:04.616 [DEBUG] [Thread-72085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:33:04.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:33:04.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:33:04.675 [DEBUG] [Thread-72085] [transport.py] [_log()] userauth is OK
2025-12-12T15:33:04.676 [DEBUG] [Thread-72085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:33:04.676 [DEBUG] [Thread-72085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:33:04.676 [DEBUG] [Thread-72085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:33:04.676 [DEBUG] [Thread-72085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:33:04.695 [INFO] [Thread-72085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:33:04.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:33:04.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:33:05.532 [DEBUG] [Thread-72085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:33:05.532 [DEBUG] [Thread-72085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:33:05.580 [DEBUG] [Thread-72085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:33:05.580 [DEBUG] [Thread-72085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:33:05.588 [DEBUG] [Thread-72085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:33:05.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:33:05.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:33:05.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:33:05.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:33:05.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:33:05.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:33:05.620 [DEBUG] [Thread-72085] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:33:18.371 [DEBUG] [Thread-72087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:33.422 [DEBUG] [Thread-72088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:35.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:33:35.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:33:35.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:33:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 33, 10), 19.91, 26.55, 0.0, 53.62, 19.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:33:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:33:10
2025-12-12T15:33:36.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:33:36.639 [DEBUG] [Thread-72089] [transport.py] [_log()] starting thread (client mode): 0xf57bfa60
2025-12-12T15:33:36.639 [DEBUG] [Thread-72089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:33:36.658 [DEBUG] [Thread-72089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:33:36.658 [INFO] [Thread-72089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] client lang: <none>
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] server lang: <none>
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] kex follows: False
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] Compression: none
2025-12-12T15:33:36.662 [DEBUG] [Thread-72089] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:33:36.680 [DEBUG] [Thread-72089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:33:36.680 [DEBUG] [Thread-72089] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:33:36.680 [DEBUG] [Thread-72089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:33:36.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:33:36.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:33:36.681 [DEBUG] [Thread-72089] [transport.py] [_log()] userauth is OK
2025-12-12T15:33:36.681 [DEBUG] [Thread-72089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:33:36.681 [DEBUG] [Thread-72089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:33:36.681 [DEBUG] [Thread-72089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:33:36.681 [DEBUG] [Thread-72089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:33:36.694 [INFO] [Thread-72089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:33:36.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:33:37.352 [DEBUG] [Thread-72089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:33:37.352 [DEBUG] [Thread-72089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:33:37.352 [DEBUG] [Thread-72089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:33:37.393 [DEBUG] [Thread-72089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:33:37.393 [DEBUG] [Thread-72089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:33:37.395 [DEBUG] [Thread-72089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:33:37.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:33:37.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:33:37.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:33:37.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:33:37.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:33:37.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:33:37.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.564677 -999.00  +20.30  52.65     30   +2.40 1 2 2 1 1   888    0 15.05 -116.47 ----- 39.3 52.6 331.4 59.0 23.6 -25.3 23.3 -23.7 23.9 -21.2 24.4 -21.9
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.564677
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T15:33:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:33:10', tmtdew=19.91, humidity=26.55, cloud=0.0, wind=53.62, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:33:08.093', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:33:37.413 [DEBUG] [Thread-72089] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:33:37.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:33:37.499 [DEBUG] [Thread-72092] [transport.py] [_log()] starting thread (client mode): 0xf57be860
2025-12-12T15:33:37.499 [DEBUG] [Thread-72092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:33:37.514 [DEBUG] [Thread-72092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:33:37.514 [INFO] [Thread-72092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] client lang: <none>
2025-12-12T15:33:37.521 [DEBUG] [Thread-72092] [transport.py] [_log()] server lang: <none>
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] kex follows: False
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] Compression: none
2025-12-12T15:33:37.522 [DEBUG] [Thread-72092] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:33:37.578 [DEBUG] [Thread-72092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:33:37.578 [DEBUG] [Thread-72092] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:33:37.578 [DEBUG] [Thread-72092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:33:37.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:33:37.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:33:37.636 [DEBUG] [Thread-72092] [transport.py] [_log()] userauth is OK
2025-12-12T15:33:37.636 [DEBUG] [Thread-72092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:33:37.636 [DEBUG] [Thread-72092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:33:37.636 [DEBUG] [Thread-72092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:33:37.636 [DEBUG] [Thread-72092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:33:37.650 [INFO] [Thread-72092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:33:37.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:33:37.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:33:38.484 [DEBUG] [Thread-72092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:33:38.484 [DEBUG] [Thread-72092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:33:38.532 [DEBUG] [Thread-72092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:33:38.532 [DEBUG] [Thread-72092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:33:38.540 [DEBUG] [Thread-72092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:33:38.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:33:38.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:33:38.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:33:38.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:33:38.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:33:38.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:33:38.572 [DEBUG] [Thread-72092] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:33:48.450 [DEBUG] [Thread-72094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:33:50.971 [DEBUG] [Thread-72095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:01.919 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:01.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:03.498 [DEBUG] [Thread-72096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:34:08.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:34:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:34:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 33, 42), 20.23, 25.88, 0.0, 54.57, 20.27, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:34:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:33:42
2025-12-12T15:34:09.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:34:09.556 [DEBUG] [Thread-72097] [transport.py] [_log()] starting thread (client mode): 0xf57bf040
2025-12-12T15:34:09.557 [DEBUG] [Thread-72097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:34:09.576 [DEBUG] [Thread-72097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:34:09.576 [INFO] [Thread-72097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:34:09.579 [DEBUG] [Thread-72097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:34:09.579 [DEBUG] [Thread-72097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] client lang: <none>
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] server lang: <none>
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] kex follows: False
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] Compression: none
2025-12-12T15:34:09.580 [DEBUG] [Thread-72097] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:34:09.597 [DEBUG] [Thread-72097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:34:09.597 [DEBUG] [Thread-72097] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:34:09.598 [DEBUG] [Thread-72097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:34:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:34:09.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:34:09.600 [DEBUG] [Thread-72097] [transport.py] [_log()] userauth is OK
2025-12-12T15:34:09.600 [DEBUG] [Thread-72097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:34:09.600 [DEBUG] [Thread-72097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:34:09.600 [DEBUG] [Thread-72097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:34:09.600 [DEBUG] [Thread-72097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:34:09.619 [INFO] [Thread-72097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:34:09.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:34:10.219 [DEBUG] [Thread-72097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:34:10.219 [DEBUG] [Thread-72097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:34:10.219 [DEBUG] [Thread-72097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:34:10.260 [DEBUG] [Thread-72097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:34:10.260 [DEBUG] [Thread-72097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:34:10.263 [DEBUG] [Thread-72097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:34:10.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:34:10.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:34:10.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:34:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:34:10.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:34:10.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:34:10.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:34:10.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:34:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.565024 -999.00  +20.30  43.08     31   +2.80 1 2 2 1 1   888    0 15.07 -115.49 ----- 54.2 43.1 316.4 59.9 23.6 -24.6 23.3 -24.2 24.0 -21.3 24.4 -22.3
2025-12-12T15:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.565024
2025-12-12T15:34:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T15:34:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:33:42', tmtdew=20.23, humidity=25.88, cloud=0.0, wind=54.57, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:33:38.074', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:34:10.291 [DEBUG] [Thread-72097] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:34:10.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:34:10.389 [DEBUG] [Thread-72100] [transport.py] [_log()] starting thread (client mode): 0xf81e56c0
2025-12-12T15:34:10.389 [DEBUG] [Thread-72100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:34:10.406 [DEBUG] [Thread-72100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:34:10.406 [INFO] [Thread-72100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:34:10.413 [DEBUG] [Thread-72100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:10.414 [DEBUG] [Thread-72100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] client lang: <none>
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] server lang: <none>
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] kex follows: False
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:34:10.415 [DEBUG] [Thread-72100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:34:10.416 [DEBUG] [Thread-72100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:34:10.416 [DEBUG] [Thread-72100] [transport.py] [_log()] Compression: none
2025-12-12T15:34:10.416 [DEBUG] [Thread-72100] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:34:10.472 [DEBUG] [Thread-72100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:34:10.472 [DEBUG] [Thread-72100] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:34:10.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:34:10.473 [DEBUG] [Thread-72100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:34:10.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:34:10.528 [DEBUG] [Thread-72100] [transport.py] [_log()] userauth is OK
2025-12-12T15:34:10.528 [DEBUG] [Thread-72100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:34:10.529 [DEBUG] [Thread-72100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:34:10.529 [DEBUG] [Thread-72100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:34:10.529 [DEBUG] [Thread-72100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:34:10.549 [INFO] [Thread-72100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:34:10.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:34:10.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:34:11.422 [DEBUG] [Thread-72100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:34:11.422 [DEBUG] [Thread-72100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:34:11.470 [DEBUG] [Thread-72100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:34:11.470 [DEBUG] [Thread-72100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:34:11.482 [DEBUG] [Thread-72100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:34:11.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:34:11.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:34:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:34:11.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:34:11.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:34:11.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:34:11.518 [DEBUG] [Thread-72100] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:34:18.526 [DEBUG] [Thread-72102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:33.572 [DEBUG] [Thread-72103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:41.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:34:41.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:34:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:34:42.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 34, 14), 20.43, 25.57, 0.0, 53.46, 20.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:34:42.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:34:14
2025-12-12T15:34:42.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:34:42.479 [DEBUG] [Thread-72104] [transport.py] [_log()] starting thread (client mode): 0xf574c5b0
2025-12-12T15:34:42.479 [DEBUG] [Thread-72104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:34:42.500 [DEBUG] [Thread-72104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:34:42.500 [INFO] [Thread-72104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:34:42.503 [DEBUG] [Thread-72104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:34:42.503 [DEBUG] [Thread-72104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:34:42.503 [DEBUG] [Thread-72104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:34:42.503 [DEBUG] [Thread-72104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:42.503 [DEBUG] [Thread-72104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:42.503 [DEBUG] [Thread-72104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] client lang: <none>
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] server lang: <none>
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] kex follows: False
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] Compression: none
2025-12-12T15:34:42.504 [DEBUG] [Thread-72104] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:34:42.524 [DEBUG] [Thread-72104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:34:42.524 [DEBUG] [Thread-72104] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:34:42.525 [DEBUG] [Thread-72104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:34:42.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:34:42.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:34:42.527 [DEBUG] [Thread-72104] [transport.py] [_log()] userauth is OK
2025-12-12T15:34:42.527 [DEBUG] [Thread-72104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:34:42.527 [DEBUG] [Thread-72104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:34:42.527 [DEBUG] [Thread-72104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:34:42.527 [DEBUG] [Thread-72104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:34:42.560 [INFO] [Thread-72104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:34:42.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:34:43.204 [DEBUG] [Thread-72104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:34:43.204 [DEBUG] [Thread-72104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:34:43.204 [DEBUG] [Thread-72104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:34:43.245 [DEBUG] [Thread-72104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:34:43.245 [DEBUG] [Thread-72104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:34:43.248 [DEBUG] [Thread-72104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:34:43.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:34:43.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:34:43.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:34:43.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:34:43.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:34:43.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:34:43.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:34:43.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:34:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:34:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.565371 -999.00  +20.10  54.74     32   +2.90 1 1 2 1 1   888    0 15.32 -107.00 ----- 53.1 54.7 312.6 69.7 23.6 -25.5 23.3 -25.0 24.1 -22.3 24.4 -23.2
2025-12-12T15:34:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:34:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:34:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.565371
2025-12-12T15:34:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:34:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:34:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:34:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:34:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:34:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:34:14', tmtdew=20.43, humidity=25.57, cloud=0.0, wind=53.46, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:34:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:34:43.271 [DEBUG] [Thread-72104] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:34:43.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:34:43.367 [DEBUG] [Thread-72107] [transport.py] [_log()] starting thread (client mode): 0xf813e230
2025-12-12T15:34:43.367 [DEBUG] [Thread-72107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:34:43.382 [DEBUG] [Thread-72107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:34:43.382 [INFO] [Thread-72107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:43.390 [DEBUG] [Thread-72107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] client lang: <none>
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] server lang: <none>
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] kex follows: False
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] Compression: none
2025-12-12T15:34:43.391 [DEBUG] [Thread-72107] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:34:43.448 [DEBUG] [Thread-72107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:34:43.448 [DEBUG] [Thread-72107] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:34:43.449 [DEBUG] [Thread-72107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:34:43.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:34:43.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:34:43.504 [DEBUG] [Thread-72107] [transport.py] [_log()] userauth is OK
2025-12-12T15:34:43.505 [DEBUG] [Thread-72107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:34:43.505 [DEBUG] [Thread-72107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:34:43.505 [DEBUG] [Thread-72107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:34:43.505 [DEBUG] [Thread-72107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:34:43.524 [INFO] [Thread-72107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:34:43.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:34:43.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:34:44.367 [DEBUG] [Thread-72107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:34:44.367 [DEBUG] [Thread-72107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:34:44.415 [DEBUG] [Thread-72107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:34:44.415 [DEBUG] [Thread-72107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:34:44.424 [DEBUG] [Thread-72107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:34:44.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:34:44.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:34:44.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:34:44.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:34:44.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:34:44.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:34:44.457 [DEBUG] [Thread-72107] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:34:48.600 [DEBUG] [Thread-72109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:34:51.022 [DEBUG] [Thread-72110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:02.078 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:02.079 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:03.637 [DEBUG] [Thread-72111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:14.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:35:14.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:35:14.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:35:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 34, 46), 20.37, 25.87, 0.0, 46.0, 20.26, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:35:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:34:46
2025-12-12T15:35:15.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:35:15.434 [DEBUG] [Thread-72112] [transport.py] [_log()] starting thread (client mode): 0xf57bd0f0
2025-12-12T15:35:15.434 [DEBUG] [Thread-72112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:35:15.453 [DEBUG] [Thread-72112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:35:15.453 [INFO] [Thread-72112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] client lang: <none>
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] server lang: <none>
2025-12-12T15:35:15.457 [DEBUG] [Thread-72112] [transport.py] [_log()] kex follows: False
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] Compression: none
2025-12-12T15:35:15.458 [DEBUG] [Thread-72112] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:35:15.475 [DEBUG] [Thread-72112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:35:15.475 [DEBUG] [Thread-72112] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:35:15.476 [DEBUG] [Thread-72112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:35:15.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:35:15.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:35:15.478 [DEBUG] [Thread-72112] [transport.py] [_log()] userauth is OK
2025-12-12T15:35:15.479 [DEBUG] [Thread-72112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:35:15.479 [DEBUG] [Thread-72112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:35:15.479 [DEBUG] [Thread-72112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:35:15.479 [DEBUG] [Thread-72112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:35:15.497 [INFO] [Thread-72112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:35:15.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:35:16.168 [DEBUG] [Thread-72112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:35:16.168 [DEBUG] [Thread-72112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:35:16.168 [DEBUG] [Thread-72112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:35:16.209 [DEBUG] [Thread-72112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:35:16.209 [DEBUG] [Thread-72112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:35:16.212 [DEBUG] [Thread-72112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:35:16.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:35:16.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:35:16.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:35:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:35:16.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:35:16.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:35:16.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:35:16.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:35:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:35:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.565719 -999.00  +20.10  48.83     31   +2.50 1 1 2 1 1   888    0 15.10 -104.68 ----- 42.6 48.8 322.0 68.2 23.6 -25.4 23.3 -24.1 23.9 -24.3 24.4 -22.7
2025-12-12T15:35:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:35:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:35:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.565719
2025-12-12T15:35:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:35:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:35:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:35:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:35:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:35:16.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:34:46', tmtdew=20.37, humidity=25.87, cloud=0.0, wind=46.0, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:34:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:35:16.237 [DEBUG] [Thread-72112] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:35:16.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:35:16.336 [DEBUG] [Thread-72115] [transport.py] [_log()] starting thread (client mode): 0xf574e500
2025-12-12T15:35:16.336 [DEBUG] [Thread-72115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:35:16.351 [DEBUG] [Thread-72115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:35:16.351 [INFO] [Thread-72115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:35:16.358 [DEBUG] [Thread-72115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:35:16.358 [DEBUG] [Thread-72115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:35:16.358 [DEBUG] [Thread-72115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:35:16.358 [DEBUG] [Thread-72115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:16.358 [DEBUG] [Thread-72115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] client lang: <none>
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] server lang: <none>
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] kex follows: False
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] Compression: none
2025-12-12T15:35:16.359 [DEBUG] [Thread-72115] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:35:16.415 [DEBUG] [Thread-72115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:35:16.416 [DEBUG] [Thread-72115] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:35:16.416 [DEBUG] [Thread-72115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:35:16.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:35:16.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:35:16.472 [DEBUG] [Thread-72115] [transport.py] [_log()] userauth is OK
2025-12-12T15:35:16.472 [DEBUG] [Thread-72115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:35:16.472 [DEBUG] [Thread-72115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:35:16.472 [DEBUG] [Thread-72115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:35:16.472 [DEBUG] [Thread-72115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:35:16.492 [INFO] [Thread-72115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:35:16.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:35:16.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:35:17.411 [DEBUG] [Thread-72115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:35:17.411 [DEBUG] [Thread-72115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:35:17.460 [DEBUG] [Thread-72115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:35:17.460 [DEBUG] [Thread-72115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:35:17.469 [DEBUG] [Thread-72115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:35:17.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:35:17.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')
2025-12-12T15:35:17.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:35:17.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:35:17.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:35:17.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:35:17.503 [DEBUG] [Thread-72115] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:35:18.665 [DEBUG] [Thread-72117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:33.716 [DEBUG] [Thread-72118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:47.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:35:47.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:35:47.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:35:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 35, 19), 20.6, 25.49, 0.0, 43.93, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:35:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:35:19
2025-12-12T15:35:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:35:48.469 [DEBUG] [Thread-72119] [transport.py] [_log()] starting thread (client mode): 0xf574d3f0
2025-12-12T15:35:48.470 [DEBUG] [Thread-72119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:35:48.489 [DEBUG] [Thread-72119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:35:48.489 [INFO] [Thread-72119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:35:48.492 [DEBUG] [Thread-72119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:35:48.492 [DEBUG] [Thread-72119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] client lang: <none>
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] server lang: <none>
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] kex follows: False
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] Compression: none
2025-12-12T15:35:48.493 [DEBUG] [Thread-72119] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:35:48.503 [DEBUG] [Thread-72119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:35:48.504 [DEBUG] [Thread-72119] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:35:48.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:35:48.505 [DEBUG] [Thread-72119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:35:48.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:35:48.507 [DEBUG] [Thread-72119] [transport.py] [_log()] userauth is OK
2025-12-12T15:35:48.507 [DEBUG] [Thread-72119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:35:48.507 [DEBUG] [Thread-72119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:35:48.508 [DEBUG] [Thread-72119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:35:48.508 [DEBUG] [Thread-72119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:35:48.528 [INFO] [Thread-72119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:35:48.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:35:48.743 [DEBUG] [Thread-72121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:35:49.172 [DEBUG] [Thread-72119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:35:49.172 [DEBUG] [Thread-72119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:35:49.172 [DEBUG] [Thread-72119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:35:49.213 [DEBUG] [Thread-72119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:35:49.213 [DEBUG] [Thread-72119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:35:49.216 [DEBUG] [Thread-72119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:35:49.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:35:49.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:35:49.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:35:49.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:35:49.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:35:49.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:35:49.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:35:49.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:35:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:35:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.566413 -999.00  +19.90  58.33     30   +1.90 1 1 2 1 1   888    0 16.09 -72.88 ----- 56.7 58.3 313.2 70.3 23.5 -25.9 23.2 -26.4 23.9 -23.5 24.4 -24.2
2025-12-12T15:35:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:35:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:35:49.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.566413
2025-12-12T15:35:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:35:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:35:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:35:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:35:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:35:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:35:19', tmtdew=20.6, humidity=25.49, cloud=0.0, wind=43.93, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:35:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:35:49.243 [DEBUG] [Thread-72119] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:35:49.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:35:49.341 [DEBUG] [Thread-72123] [transport.py] [_log()] starting thread (client mode): 0xf81e7340
2025-12-12T15:35:49.342 [DEBUG] [Thread-72123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:35:49.356 [DEBUG] [Thread-72123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:35:49.356 [INFO] [Thread-72123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:49.364 [DEBUG] [Thread-72123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] client lang: <none>
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] server lang: <none>
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] kex follows: False
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] Compression: none
2025-12-12T15:35:49.365 [DEBUG] [Thread-72123] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:35:49.424 [DEBUG] [Thread-72123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:35:49.424 [DEBUG] [Thread-72123] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:35:49.425 [DEBUG] [Thread-72123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:35:49.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:35:49.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:35:49.480 [DEBUG] [Thread-72123] [transport.py] [_log()] userauth is OK
2025-12-12T15:35:49.480 [DEBUG] [Thread-72123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:35:49.480 [DEBUG] [Thread-72123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:35:49.480 [DEBUG] [Thread-72123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:35:49.480 [DEBUG] [Thread-72123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:35:49.502 [INFO] [Thread-72123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:35:49.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:35:49.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:35:50.333 [DEBUG] [Thread-72123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:35:50.333 [DEBUG] [Thread-72123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:35:50.383 [DEBUG] [Thread-72123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:35:50.383 [DEBUG] [Thread-72123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:35:50.394 [DEBUG] [Thread-72123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:35:50.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:35:50.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:35:50.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:35:50.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:35:50.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:35:50.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:35:50.436 [DEBUG] [Thread-72123] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:35:51.076 [DEBUG] [Thread-72125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:02.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:02.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:03.773 [DEBUG] [Thread-72126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:18.827 [DEBUG] [Thread-72127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:36:20.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:36:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:36:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 35, 51), 20.78, 24.79, 0.0, 58.42, 19.85, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:36:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:35:51
2025-12-12T15:36:21.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:36:21.426 [DEBUG] [Thread-72128] [transport.py] [_log()] starting thread (client mode): 0xf574eec0
2025-12-12T15:36:21.426 [DEBUG] [Thread-72128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:36:21.447 [DEBUG] [Thread-72128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:36:21.447 [INFO] [Thread-72128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] client lang: <none>
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] server lang: <none>
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] kex follows: False
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:36:21.450 [DEBUG] [Thread-72128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:36:21.451 [DEBUG] [Thread-72128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:36:21.451 [DEBUG] [Thread-72128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:36:21.451 [DEBUG] [Thread-72128] [transport.py] [_log()] Compression: none
2025-12-12T15:36:21.451 [DEBUG] [Thread-72128] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:36:21.468 [DEBUG] [Thread-72128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:36:21.468 [DEBUG] [Thread-72128] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:36:21.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:36:21.469 [DEBUG] [Thread-72128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:36:21.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:36:21.471 [DEBUG] [Thread-72128] [transport.py] [_log()] userauth is OK
2025-12-12T15:36:21.471 [DEBUG] [Thread-72128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:36:21.472 [DEBUG] [Thread-72128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:36:21.472 [DEBUG] [Thread-72128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:36:21.472 [DEBUG] [Thread-72128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:36:21.492 [INFO] [Thread-72128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:36:21.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:36:22.123 [DEBUG] [Thread-72128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:36:22.123 [DEBUG] [Thread-72128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:36:22.123 [DEBUG] [Thread-72128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:36:22.164 [DEBUG] [Thread-72128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:36:22.164 [DEBUG] [Thread-72128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:36:22.167 [DEBUG] [Thread-72128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:36:22.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:36:22.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:36:22.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:36:22.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:36:22.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:36:22.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:36:22.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:36:22.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:36:22.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:36:22.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.566760 -999.00  +19.70  55.54     30   +1.80 1 1 2 1 1   888    0 16.08 -65.20 ----- 54.4 55.5 316.6 68.7 23.4 -27.5 23.2 -26.0 23.9 -25.2 24.4 -24.2
2025-12-12T15:36:22.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:36:22.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:36:22.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.566760
2025-12-12T15:36:22.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:36:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:36:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:36:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:36:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:36:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:35:51', tmtdew=20.78, humidity=24.79, cloud=0.0, wind=58.42, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:36:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:36:22.203 [DEBUG] [Thread-72128] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:36:22.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:36:22.301 [DEBUG] [Thread-72131] [transport.py] [_log()] starting thread (client mode): 0xf57be0e0
2025-12-12T15:36:22.301 [DEBUG] [Thread-72131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:36:22.315 [DEBUG] [Thread-72131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:36:22.315 [INFO] [Thread-72131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:36:22.322 [DEBUG] [Thread-72131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] client lang: <none>
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] server lang: <none>
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] kex follows: False
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:36:22.323 [DEBUG] [Thread-72131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:36:22.324 [DEBUG] [Thread-72131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:36:22.324 [DEBUG] [Thread-72131] [transport.py] [_log()] Compression: none
2025-12-12T15:36:22.324 [DEBUG] [Thread-72131] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:36:22.381 [DEBUG] [Thread-72131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:36:22.382 [DEBUG] [Thread-72131] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:36:22.382 [DEBUG] [Thread-72131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:36:22.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:36:22.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:36:22.440 [DEBUG] [Thread-72131] [transport.py] [_log()] userauth is OK
2025-12-12T15:36:22.440 [DEBUG] [Thread-72131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:36:22.440 [DEBUG] [Thread-72131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:36:22.441 [DEBUG] [Thread-72131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:36:22.441 [DEBUG] [Thread-72131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:36:22.459 [INFO] [Thread-72131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:36:22.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:36:22.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:36:23.357 [DEBUG] [Thread-72131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:36:23.357 [DEBUG] [Thread-72131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:36:23.406 [DEBUG] [Thread-72131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:36:23.406 [DEBUG] [Thread-72131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:36:23.414 [DEBUG] [Thread-72131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:36:23.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:36:23.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:36:23.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:36:23.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:36:23.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:36:23.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:36:23.448 [DEBUG] [Thread-72131] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:36:33.860 [DEBUG] [Thread-72133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:48.911 [DEBUG] [Thread-72134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:51.125 [DEBUG] [Thread-72135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:36:53.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:36:53.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:36: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
2025-12-12T15:36:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 36, 23), 20.55, 25.12, 0.0, 58.59, 19.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:36:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:36:23
2025-12-12T15:36:54.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:36:54.440 [DEBUG] [Thread-72136] [transport.py] [_log()] starting thread (client mode): 0xf5741db0
2025-12-12T15:36:54.440 [DEBUG] [Thread-72136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:36:54.461 [DEBUG] [Thread-72136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:36:54.461 [INFO] [Thread-72136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] client lang: <none>
2025-12-12T15:36:54.464 [DEBUG] [Thread-72136] [transport.py] [_log()] server lang: <none>
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] kex follows: False
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] Compression: none
2025-12-12T15:36:54.465 [DEBUG] [Thread-72136] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:36:54.481 [DEBUG] [Thread-72136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:36:54.481 [DEBUG] [Thread-72136] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:36:54.481 [DEBUG] [Thread-72136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:36:54.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:36:54.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:36:54.483 [DEBUG] [Thread-72136] [transport.py] [_log()] userauth is OK
2025-12-12T15:36:54.484 [DEBUG] [Thread-72136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:36:54.484 [DEBUG] [Thread-72136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:36:54.484 [DEBUG] [Thread-72136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:36:54.484 [DEBUG] [Thread-72136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:36:54.516 [INFO] [Thread-72136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:36:54.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:36:55.146 [DEBUG] [Thread-72136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:36:55.146 [DEBUG] [Thread-72136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:36:55.146 [DEBUG] [Thread-72136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:36:55.187 [DEBUG] [Thread-72136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:36:55.187 [DEBUG] [Thread-72136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:36:55.189 [DEBUG] [Thread-72136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:36:55.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:36:55.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:36:55.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:36:55.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:36:55.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:36:55.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:36:55.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:36:55.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:36:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:36:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.567107 -999.00  +19.50  52.86     31   +1.90 1 1 2 1 1   888    0 16.44 -61.31 ----- 39.6 52.9 316.8 67.9 23.2 -26.4 23.0 -26.1 23.7 -26.3 24.2 -24.2
2025-12-12T15:36:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:36:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:36:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.567107
2025-12-12T15:36:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:36:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:36:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:36:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:36:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:36:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:36:23', tmtdew=20.55, humidity=25.12, cloud=0.0, wind=58.59, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:36:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:36:55.213 [DEBUG] [Thread-72136] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:36:55.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:36:55.309 [DEBUG] [Thread-72139] [transport.py] [_log()] starting thread (client mode): 0xf813c400
2025-12-12T15:36:55.310 [DEBUG] [Thread-72139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:36:55.324 [DEBUG] [Thread-72139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:36:55.324 [INFO] [Thread-72139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:36:55.331 [DEBUG] [Thread-72139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:36:55.331 [DEBUG] [Thread-72139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:36:55.331 [DEBUG] [Thread-72139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] client lang: <none>
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] server lang: <none>
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] kex follows: False
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] Compression: none
2025-12-12T15:36:55.332 [DEBUG] [Thread-72139] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:36:55.391 [DEBUG] [Thread-72139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:36:55.392 [DEBUG] [Thread-72139] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:36:55.393 [DEBUG] [Thread-72139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:36:55.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:36:55.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:36:55.447 [DEBUG] [Thread-72139] [transport.py] [_log()] userauth is OK
2025-12-12T15:36:55.448 [DEBUG] [Thread-72139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:36:55.448 [DEBUG] [Thread-72139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:36:55.448 [DEBUG] [Thread-72139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:36:55.448 [DEBUG] [Thread-72139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:36:55.471 [INFO] [Thread-72139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:36:55.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:36:55.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:36:56.307 [DEBUG] [Thread-72139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:36:56.307 [DEBUG] [Thread-72139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:36:56.354 [DEBUG] [Thread-72139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:36:56.354 [DEBUG] [Thread-72139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:36:56.364 [DEBUG] [Thread-72139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:36:56.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:36:56.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:36:56.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:36:56.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:36:56.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:36:56.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:36:56.404 [DEBUG] [Thread-72139] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:37:02.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:02.361 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:03.940 [DEBUG] [Thread-72141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:18.991 [DEBUG] [Thread-72142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:37:26.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:37:26.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:37:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 36, 55), 20.68, 24.82, 0.0, 60.8, 19.73, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:37:27.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:36:55
2025-12-12T15:37:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:37:27.422 [DEBUG] [Thread-72143] [transport.py] [_log()] starting thread (client mode): 0xf574cd30
2025-12-12T15:37:27.423 [DEBUG] [Thread-72143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:37:27.443 [DEBUG] [Thread-72143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:37:27.443 [INFO] [Thread-72143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:37:27.444 [DEBUG] [Thread-72143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:37:27.444 [DEBUG] [Thread-72143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:37:27.444 [DEBUG] [Thread-72143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:37:27.444 [DEBUG] [Thread-72143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:37:27.444 [DEBUG] [Thread-72143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] client lang: <none>
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] server lang: <none>
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] kex follows: False
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] Compression: none
2025-12-12T15:37:27.445 [DEBUG] [Thread-72143] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:37:27.452 [DEBUG] [Thread-72143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:37:27.452 [DEBUG] [Thread-72143] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:37:27.452 [DEBUG] [Thread-72143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:37:27.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:37:27.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:37:27.453 [DEBUG] [Thread-72143] [transport.py] [_log()] userauth is OK
2025-12-12T15:37:27.453 [DEBUG] [Thread-72143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:37:27.453 [DEBUG] [Thread-72143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:37:27.453 [DEBUG] [Thread-72143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:37:27.453 [DEBUG] [Thread-72143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:37:27.463 [INFO] [Thread-72143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:37:27.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:37:28.062 [DEBUG] [Thread-72143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:37:28.062 [DEBUG] [Thread-72143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:37:28.062 [DEBUG] [Thread-72143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:37:28.103 [DEBUG] [Thread-72143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:37:28.103 [DEBUG] [Thread-72143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:37:28.105 [DEBUG] [Thread-72143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:37:28.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:37:28.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:37:28.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:37:28.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:37:28.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:37:28.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:37:28.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.567455 -999.00  +19.50  50.13     31   +1.90 1 1 2 1 1   888    0 16.83 -59.78 ----- 36.3 50.1 310.8 65.5 23.2 -25.1 22.9 -26.8 23.7 -21.9 24.1 -24.3
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.567455
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:37:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:36:55', tmtdew=20.68, humidity=24.82, cloud=0.0, wind=60.8, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:37:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:37:28.123 [DEBUG] [Thread-72143] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:37:28.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:37:28.206 [DEBUG] [Thread-72146] [transport.py] [_log()] starting thread (client mode): 0xfabc7850
2025-12-12T15:37:28.206 [DEBUG] [Thread-72146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:37:28.220 [DEBUG] [Thread-72146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:37:28.221 [INFO] [Thread-72146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] client lang: <none>
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] server lang: <none>
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] kex follows: False
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] Compression: none
2025-12-12T15:37:28.228 [DEBUG] [Thread-72146] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:37:28.286 [DEBUG] [Thread-72146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:37:28.286 [DEBUG] [Thread-72146] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:37:28.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:37:28.287 [DEBUG] [Thread-72146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:37:28.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:37:28.344 [DEBUG] [Thread-72146] [transport.py] [_log()] userauth is OK
2025-12-12T15:37:28.344 [DEBUG] [Thread-72146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:37:28.344 [DEBUG] [Thread-72146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:37:28.344 [DEBUG] [Thread-72146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:37:28.344 [DEBUG] [Thread-72146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:37:28.357 [INFO] [Thread-72146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:37:28.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:37:28.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:37:29.210 [DEBUG] [Thread-72146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:37:29.210 [DEBUG] [Thread-72146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:37:29.257 [DEBUG] [Thread-72146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:37:29.257 [DEBUG] [Thread-72146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:37:29.265 [DEBUG] [Thread-72146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:37:29.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:37:29.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:37:29.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:37:29.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:37:29.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:37:29.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:37:29.296 [DEBUG] [Thread-72146] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:37:34.022 [DEBUG] [Thread-72148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:49.064 [DEBUG] [Thread-72149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:51.176 [DEBUG] [Thread-72150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:37:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:37:59.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:37:59.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:38:00.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 37, 27), 20.29, 25.45, 0.0, 58.16, 19.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:38:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:37:27
2025-12-12T15:38:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:38:00.319 [DEBUG] [Thread-72151] [transport.py] [_log()] starting thread (client mode): 0xf813ca90
2025-12-12T15:38:00.319 [DEBUG] [Thread-72151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:38:00.339 [DEBUG] [Thread-72151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:38:00.339 [INFO] [Thread-72151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:38:00.342 [DEBUG] [Thread-72151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] client lang: <none>
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] server lang: <none>
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] kex follows: False
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] Compression: none
2025-12-12T15:38:00.343 [DEBUG] [Thread-72151] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:38:00.360 [DEBUG] [Thread-72151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:38:00.361 [DEBUG] [Thread-72151] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:38:00.361 [DEBUG] [Thread-72151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:38:00.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:38:00.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:38:00.404 [DEBUG] [Thread-72151] [transport.py] [_log()] userauth is OK
2025-12-12T15:38:00.404 [DEBUG] [Thread-72151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:38:00.404 [DEBUG] [Thread-72151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:38:00.404 [DEBUG] [Thread-72151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:38:00.404 [DEBUG] [Thread-72151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:38:00.423 [INFO] [Thread-72151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:38:00.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:38:01.063 [DEBUG] [Thread-72151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:38:01.063 [DEBUG] [Thread-72151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:38:01.063 [DEBUG] [Thread-72151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:38:01.104 [DEBUG] [Thread-72151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:38:01.104 [DEBUG] [Thread-72151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:38:01.106 [DEBUG] [Thread-72151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:38:01.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:38:01.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:38:01.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:38:01.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:38:01.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:38:01.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:38:01.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.567802 -999.00  +19.80  42.64     31   +2.40 1 1 2 1 1   888    0 16.29 -57.26 ----- 40.5 42.6 316.4 55.4 23.3 -26.5 23.1 -24.7 23.7 -24.5 24.2 -22.6
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.567802
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:38:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:37:27', tmtdew=20.29, humidity=25.45, cloud=0.0, wind=58.16, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:37:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:38:01.126 [DEBUG] [Thread-72151] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:38:01.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:38:01.212 [DEBUG] [Thread-72154] [transport.py] [_log()] starting thread (client mode): 0xf5703d30
2025-12-12T15:38:01.212 [DEBUG] [Thread-72154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:38:01.226 [DEBUG] [Thread-72154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:38:01.226 [INFO] [Thread-72154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] client lang: <none>
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] server lang: <none>
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] kex follows: False
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] Compression: none
2025-12-12T15:38:01.234 [DEBUG] [Thread-72154] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:38:01.290 [DEBUG] [Thread-72154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:38:01.290 [DEBUG] [Thread-72154] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:38:01.290 [DEBUG] [Thread-72154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:38:01.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:38:01.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:38:01.347 [DEBUG] [Thread-72154] [transport.py] [_log()] userauth is OK
2025-12-12T15:38:01.347 [DEBUG] [Thread-72154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:38:01.347 [DEBUG] [Thread-72154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:38:01.347 [DEBUG] [Thread-72154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:38:01.347 [DEBUG] [Thread-72154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:38:01.361 [INFO] [Thread-72154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:38:01.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:38:01.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:38:02.237 [DEBUG] [Thread-72154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:38:02.237 [DEBUG] [Thread-72154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:38:02.284 [DEBUG] [Thread-72154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:38:02.284 [DEBUG] [Thread-72154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:38:02.293 [DEBUG] [Thread-72154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:38:02.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:38:02.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:38:02.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:38:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:38:02.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:38:02.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:38:02.324 [DEBUG] [Thread-72154] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:38:02.501 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:38:02.502 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:38:04.099 [DEBUG] [Thread-72156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:38:19.139 [DEBUG] [Thread-72157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:38:32.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:38:32.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:38: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
2025-12-12T15:38:33.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 37, 59), 19.79, 26.25, 0.0, 51.71, 19.27, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:38:33.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:37:59
2025-12-12T15:38:33.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:38:33.377 [DEBUG] [Thread-72158] [transport.py] [_log()] starting thread (client mode): 0xf5703fd0
2025-12-12T15:38:33.377 [DEBUG] [Thread-72158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:38:33.397 [DEBUG] [Thread-72158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:38:33.397 [INFO] [Thread-72158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:38:33.400 [DEBUG] [Thread-72158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] client lang: <none>
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] server lang: <none>
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] kex follows: False
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] Compression: none
2025-12-12T15:38:33.401 [DEBUG] [Thread-72158] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:38:33.422 [DEBUG] [Thread-72158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:38:33.422 [DEBUG] [Thread-72158] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:38:33.422 [DEBUG] [Thread-72158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:38:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:38:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:38:33.423 [DEBUG] [Thread-72158] [transport.py] [_log()] userauth is OK
2025-12-12T15:38:33.423 [DEBUG] [Thread-72158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:38:33.423 [DEBUG] [Thread-72158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:38:33.423 [DEBUG] [Thread-72158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:38:33.423 [DEBUG] [Thread-72158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:38:33.439 [INFO] [Thread-72158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:38:33.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:38:34.055 [DEBUG] [Thread-72158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:38:34.056 [DEBUG] [Thread-72158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:38:34.056 [DEBUG] [Thread-72158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:38:34.097 [DEBUG] [Thread-72158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:38:34.097 [DEBUG] [Thread-72158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:38:34.100 [DEBUG] [Thread-72158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:38:34.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:38:34.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:38:34.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:38:34.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:38:34.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:38:34.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:38:34.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:38:34.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:38:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:38:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.568149 -999.00  +20.20  51.83     31   +2.70 1 2 2 1 1   888    0 16.26 -57.46 ----- 43.7 51.8 333.8 70.8 23.5 -24.0 23.1 -24.5 23.8 -20.6 24.3 -22.4
2025-12-12T15:38:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:38:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:38:34.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.568149
2025-12-12T15:38:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:38:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:38:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:38:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:38:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T15:38:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:37:59', tmtdew=19.79, humidity=26.25, cloud=0.0, wind=51.71, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:38:08.074', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:38:34.126 [DEBUG] [Thread-72158] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:38:34.172 [DEBUG] [Thread-72161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:38:34.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:38:34.225 [DEBUG] [Thread-72162] [transport.py] [_log()] starting thread (client mode): 0xf81e7040
2025-12-12T15:38:34.225 [DEBUG] [Thread-72162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:38:34.239 [DEBUG] [Thread-72162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:38:34.239 [INFO] [Thread-72162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:38:34.247 [DEBUG] [Thread-72162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:38:34.247 [DEBUG] [Thread-72162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:38:34.247 [DEBUG] [Thread-72162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] client lang: <none>
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] server lang: <none>
2025-12-12T15:38:34.248 [DEBUG] [Thread-72162] [transport.py] [_log()] kex follows: False
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] Compression: none
2025-12-12T15:38:34.249 [DEBUG] [Thread-72162] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:38:34.304 [DEBUG] [Thread-72162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:38:34.305 [DEBUG] [Thread-72162] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:38:34.306 [DEBUG] [Thread-72162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:38:34.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:38:34.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:38:34.361 [DEBUG] [Thread-72162] [transport.py] [_log()] userauth is OK
2025-12-12T15:38:34.362 [DEBUG] [Thread-72162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:38:34.362 [DEBUG] [Thread-72162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:38:34.362 [DEBUG] [Thread-72162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:38:34.362 [DEBUG] [Thread-72162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:38:34.381 [INFO] [Thread-72162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:38:34.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:38:34.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:38:35.205 [DEBUG] [Thread-72162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:38:35.205 [DEBUG] [Thread-72162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:38:35.253 [DEBUG] [Thread-72162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:38:35.253 [DEBUG] [Thread-72162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:38:35.262 [DEBUG] [Thread-72162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:38:35.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:38:35.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:38:35.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:38:35.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:38:35.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:38:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:38:35.298 [DEBUG] [Thread-72162] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:38:49.203 [DEBUG] [Thread-72164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:38:51.228 [DEBUG] [Thread-72165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:02.642 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:02.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:04.228 [DEBUG] [Thread-72166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:39:05.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:39:05.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:39:06.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 38, 31), 19.88, 26.11, 0.0, 56.88, 19.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:39:06.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:38:31
2025-12-12T15:39:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:39:06.304 [DEBUG] [Thread-72167] [transport.py] [_log()] starting thread (client mode): 0xf5701cc0
2025-12-12T15:39:06.304 [DEBUG] [Thread-72167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:39:06.324 [DEBUG] [Thread-72167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:39:06.324 [INFO] [Thread-72167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:06.327 [DEBUG] [Thread-72167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] client lang: <none>
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] server lang: <none>
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] kex follows: False
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] Compression: none
2025-12-12T15:39:06.328 [DEBUG] [Thread-72167] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:39:06.348 [DEBUG] [Thread-72167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:39:06.348 [DEBUG] [Thread-72167] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:39:06.349 [DEBUG] [Thread-72167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:39:06.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:39:06.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:39:06.351 [DEBUG] [Thread-72167] [transport.py] [_log()] userauth is OK
2025-12-12T15:39:06.351 [DEBUG] [Thread-72167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:39:06.351 [DEBUG] [Thread-72167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:39:06.351 [DEBUG] [Thread-72167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:39:06.351 [DEBUG] [Thread-72167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:39:06.374 [INFO] [Thread-72167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:39:06.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:39:07.021 [DEBUG] [Thread-72167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:39:07.022 [DEBUG] [Thread-72167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:39:07.022 [DEBUG] [Thread-72167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:39:07.063 [DEBUG] [Thread-72167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:39:07.063 [DEBUG] [Thread-72167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:39:07.066 [DEBUG] [Thread-72167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:39:07.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:39:07.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:39:07.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:39:07.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:39:07.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:39:07.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:39:07.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:39:07.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:39:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:39:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.568496 -999.00  +19.70  54.60     32   +2.60 1 1 2 1 1   888    0 16.14 -56.05 ----- 62.2 54.6 333.4 76.4 23.4 -25.2 23.2 -24.7 23.9 -23.1 24.3 -22.6
2025-12-12T15:39:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:39:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:39:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.568496
2025-12-12T15:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:39:07.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:39:07.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:38:31', tmtdew=19.88, humidity=26.11, cloud=0.0, wind=56.88, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:38:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:39:07.093 [DEBUG] [Thread-72167] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:39:07.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:39:07.189 [DEBUG] [Thread-72170] [transport.py] [_log()] starting thread (client mode): 0xf57004c0
2025-12-12T15:39:07.189 [DEBUG] [Thread-72170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:39:07.210 [DEBUG] [Thread-72170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:39:07.210 [INFO] [Thread-72170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:39:07.221 [DEBUG] [Thread-72170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:39:07.221 [DEBUG] [Thread-72170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:39:07.221 [DEBUG] [Thread-72170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:39:07.221 [DEBUG] [Thread-72170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] client lang: <none>
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] server lang: <none>
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] kex follows: False
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:39:07.222 [DEBUG] [Thread-72170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:39:07.223 [DEBUG] [Thread-72170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:39:07.223 [DEBUG] [Thread-72170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:39:07.223 [DEBUG] [Thread-72170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:39:07.223 [DEBUG] [Thread-72170] [transport.py] [_log()] Compression: none
2025-12-12T15:39:07.223 [DEBUG] [Thread-72170] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:39:07.275 [DEBUG] [Thread-72170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:39:07.276 [DEBUG] [Thread-72170] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:39:07.276 [DEBUG] [Thread-72170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:39:07.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:39:07.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:39:07.332 [DEBUG] [Thread-72170] [transport.py] [_log()] userauth is OK
2025-12-12T15:39:07.332 [DEBUG] [Thread-72170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:39:07.332 [DEBUG] [Thread-72170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:39:07.332 [DEBUG] [Thread-72170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:39:07.332 [DEBUG] [Thread-72170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:39:07.351 [INFO] [Thread-72170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:39:07.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:39:07.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:39:08.228 [DEBUG] [Thread-72170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:39:08.228 [DEBUG] [Thread-72170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:39:08.276 [DEBUG] [Thread-72170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:39:08.276 [DEBUG] [Thread-72170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:39:08.285 [DEBUG] [Thread-72170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:39:08.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:39: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')
2025-12-12T15:39:08.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:39:08.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:39:08.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:39:08.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:39:08.319 [DEBUG] [Thread-72170] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:39:19.256 [DEBUG] [Thread-72172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:34.300 [DEBUG] [Thread-72173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:38.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:39:38.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:39:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:39:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 39, 35), 19.9, 26.13, 0.0, 51.91, 20.1, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:39:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:39:35
2025-12-12T15:39:39.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:39:39.299 [DEBUG] [Thread-72174] [transport.py] [_log()] starting thread (client mode): 0xf81f2560
2025-12-12T15:39:39.300 [DEBUG] [Thread-72174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:39:39.320 [DEBUG] [Thread-72174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:39:39.320 [INFO] [Thread-72174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] client lang: <none>
2025-12-12T15:39:39.324 [DEBUG] [Thread-72174] [transport.py] [_log()] server lang: <none>
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] kex follows: False
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] Compression: none
2025-12-12T15:39:39.325 [DEBUG] [Thread-72174] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:39:39.342 [DEBUG] [Thread-72174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:39:39.342 [DEBUG] [Thread-72174] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:39:39.343 [DEBUG] [Thread-72174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:39:39.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:39:39.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:39:39.345 [DEBUG] [Thread-72174] [transport.py] [_log()] userauth is OK
2025-12-12T15:39:39.345 [DEBUG] [Thread-72174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:39:39.345 [DEBUG] [Thread-72174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:39:39.345 [DEBUG] [Thread-72174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:39:39.345 [DEBUG] [Thread-72174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:39:39.370 [INFO] [Thread-72174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:39:39.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:39:39.980 [DEBUG] [Thread-72174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:39:39.980 [DEBUG] [Thread-72174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:39:39.980 [DEBUG] [Thread-72174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:39:40.021 [DEBUG] [Thread-72174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:39:40.021 [DEBUG] [Thread-72174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:39:40.025 [DEBUG] [Thread-72174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:39:40.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:39:40.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:39:40.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:39:40.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:39:40.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:39:40.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:39:40.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:39:40.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:39:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:39:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.568844 -999.00  +19.50  55.94     32   +2.70 1 1 2 1 1   888    0 16.29 -59.17 ----- 48.4 55.9 326.2 71.5 23.4 -24.4 23.1 -25.6 23.9 -22.8 24.3 -22.7
2025-12-12T15:39:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:39:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:39:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.568844
2025-12-12T15:39:40.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:39:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:39:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:39:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:39:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:39:40.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:39:35', tmtdew=19.9, humidity=26.13, cloud=0.0, wind=51.91, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:39:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:39:40.052 [DEBUG] [Thread-72174] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:39:40.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:39:40.148 [DEBUG] [Thread-72177] [transport.py] [_log()] starting thread (client mode): 0xfabc5d80
2025-12-12T15:39:40.148 [DEBUG] [Thread-72177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:39:40.163 [DEBUG] [Thread-72177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:39:40.163 [INFO] [Thread-72177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] client lang: <none>
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] server lang: <none>
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] kex follows: False
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:39:40.171 [DEBUG] [Thread-72177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:39:40.172 [DEBUG] [Thread-72177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:39:40.172 [DEBUG] [Thread-72177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:39:40.172 [DEBUG] [Thread-72177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:39:40.172 [DEBUG] [Thread-72177] [transport.py] [_log()] Compression: none
2025-12-12T15:39:40.172 [DEBUG] [Thread-72177] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:39:40.227 [DEBUG] [Thread-72177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:39:40.228 [DEBUG] [Thread-72177] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:39:40.228 [DEBUG] [Thread-72177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:39:40.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:39:40.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:39:40.284 [DEBUG] [Thread-72177] [transport.py] [_log()] userauth is OK
2025-12-12T15:39:40.284 [DEBUG] [Thread-72177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:39:40.284 [DEBUG] [Thread-72177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:39:40.284 [DEBUG] [Thread-72177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:39:40.285 [DEBUG] [Thread-72177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:39:40.309 [INFO] [Thread-72177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:39:40.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:39:40.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:39:41.145 [DEBUG] [Thread-72177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:39:41.145 [DEBUG] [Thread-72177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:39:41.193 [DEBUG] [Thread-72177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:39:41.193 [DEBUG] [Thread-72177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:39:41.202 [DEBUG] [Thread-72177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:39:41.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:39:41.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:39:41.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:39:41.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:39:41.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:39:41.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:39:41.235 [DEBUG] [Thread-72177] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:39:49.329 [DEBUG] [Thread-72179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:39:51.281 [DEBUG] [Thread-72180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:02.783 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:02.784 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:04.383 [DEBUG] [Thread-72181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:11.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:40:11.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:40:11.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:40:11.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 40, 7), 20.11, 25.71, 0.0, 54.22, 20.12, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:40:11.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:40:07
2025-12-12T15:40:12.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:40:12.230 [DEBUG] [Thread-72182] [transport.py] [_log()] starting thread (client mode): 0xf5701090
2025-12-12T15:40:12.230 [DEBUG] [Thread-72182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:40:12.249 [DEBUG] [Thread-72182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:40:12.249 [INFO] [Thread-72182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] client lang: <none>
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] server lang: <none>
2025-12-12T15:40:12.252 [DEBUG] [Thread-72182] [transport.py] [_log()] kex follows: False
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] Compression: none
2025-12-12T15:40:12.253 [DEBUG] [Thread-72182] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:40:12.262 [DEBUG] [Thread-72182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:40:12.263 [DEBUG] [Thread-72182] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:40:12.264 [DEBUG] [Thread-72182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:40:12.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:40:12.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:40:12.266 [DEBUG] [Thread-72182] [transport.py] [_log()] userauth is OK
2025-12-12T15:40:12.266 [DEBUG] [Thread-72182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:40:12.266 [DEBUG] [Thread-72182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:40:12.266 [DEBUG] [Thread-72182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:40:12.266 [DEBUG] [Thread-72182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:40:12.293 [INFO] [Thread-72182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:40:12.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:40:12.914 [DEBUG] [Thread-72182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:40:12.914 [DEBUG] [Thread-72182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:40:12.915 [DEBUG] [Thread-72182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:40:12.955 [DEBUG] [Thread-72182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:40:12.955 [DEBUG] [Thread-72182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:40:12.958 [DEBUG] [Thread-72182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:40:12.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:40:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:40:12.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:40:12.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:40:12.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:40:12.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:40:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:40:12.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:40:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:40:12.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.569191 -999.00  +19.70  60.11     32   +2.70 1 1 3 1 1   888    0 15.76 -64.29 ----- 52.2 60.1 322.2 65.8 23.4 -25.7 23.2 -25.3 23.9 -22.6 24.4 -23.4
2025-12-12T15:40:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:40:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:40:12.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.569191
2025-12-12T15:40:12.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:40:12.982 [DEBUG] [Thread-72182] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:40:12.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:40:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:40:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:40:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:40:12.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:40:07', tmtdew=20.11, humidity=25.71, cloud=0.0, wind=54.22, temperature=20.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:39:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:40:13.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:40:13.085 [DEBUG] [Thread-72185] [transport.py] [_log()] starting thread (client mode): 0xf57bcb80
2025-12-12T15:40:13.085 [DEBUG] [Thread-72185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:40:13.100 [DEBUG] [Thread-72185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:40:13.100 [INFO] [Thread-72185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:40:13.108 [DEBUG] [Thread-72185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:40:13.108 [DEBUG] [Thread-72185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:40:13.108 [DEBUG] [Thread-72185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:40:13.108 [DEBUG] [Thread-72185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:13.108 [DEBUG] [Thread-72185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:13.108 [DEBUG] [Thread-72185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] client lang: <none>
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] server lang: <none>
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] kex follows: False
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] Compression: none
2025-12-12T15:40:13.109 [DEBUG] [Thread-72185] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:40:13.169 [DEBUG] [Thread-72185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:40:13.170 [DEBUG] [Thread-72185] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:40:13.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:40:13.171 [DEBUG] [Thread-72185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:40:13.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:40:13.228 [DEBUG] [Thread-72185] [transport.py] [_log()] userauth is OK
2025-12-12T15:40:13.228 [DEBUG] [Thread-72185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:40:13.228 [DEBUG] [Thread-72185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:40:13.228 [DEBUG] [Thread-72185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:40:13.228 [DEBUG] [Thread-72185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:40:13.250 [INFO] [Thread-72185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:40:13.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:40:13.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:40:14.099 [DEBUG] [Thread-72185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:40:14.099 [DEBUG] [Thread-72185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:40:14.147 [DEBUG] [Thread-72185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:40:14.147 [DEBUG] [Thread-72185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:40:14.156 [DEBUG] [Thread-72185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:40:14.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:40:14.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')
2025-12-12T15:40:14.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:40:14.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:40:14.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:40:14.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:40:14.191 [DEBUG] [Thread-72185] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:40:19.411 [DEBUG] [Thread-72187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:34.455 [DEBUG] [Thread-72188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:44.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:40:44.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:40:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:40:44.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 40, 39), 20.05, 26.15, 0.0, 59.21, 19.8, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:40:44.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:40:39
2025-12-12T15:40:45.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:40:45.208 [DEBUG] [Thread-72189] [transport.py] [_log()] starting thread (client mode): 0xf574dc60
2025-12-12T15:40:45.208 [DEBUG] [Thread-72189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:40:45.229 [DEBUG] [Thread-72189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:40:45.229 [INFO] [Thread-72189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:40:45.232 [DEBUG] [Thread-72189] [transport.py] [_log()] client lang: <none>
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] server lang: <none>
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] kex follows: False
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] Compression: none
2025-12-12T15:40:45.233 [DEBUG] [Thread-72189] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:40:45.253 [DEBUG] [Thread-72189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:40:45.254 [DEBUG] [Thread-72189] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:40:45.254 [DEBUG] [Thread-72189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:40:45.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:40:45.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:40:45.255 [DEBUG] [Thread-72189] [transport.py] [_log()] userauth is OK
2025-12-12T15:40:45.255 [DEBUG] [Thread-72189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:40:45.255 [DEBUG] [Thread-72189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:40:45.255 [DEBUG] [Thread-72189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:40:45.255 [DEBUG] [Thread-72189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:40:45.275 [INFO] [Thread-72189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:40:45.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:40:45.945 [DEBUG] [Thread-72189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:40:45.945 [DEBUG] [Thread-72189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:40:45.945 [DEBUG] [Thread-72189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:40:45.986 [DEBUG] [Thread-72189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:40:45.986 [DEBUG] [Thread-72189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:40:45.989 [DEBUG] [Thread-72189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:40:46.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:40:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:40:46.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:40:46.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:40:46.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:40:46.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:40:46.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:40:46.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:40:46.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:40:46.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.569885 -999.00  +19.60  42.63     32   +2.50 1 1 2 1 1   888    0 15.86 -62.17 ----- 41.9 42.6 329.6 74.8 23.4 -24.9 23.1 -24.9 23.9 -22.9 24.3 -22.5
2025-12-12T15:40:46.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:40:46.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:40:46.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.569885
2025-12-12T15:40:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:40:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:40:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:40:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:40:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:40:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:40:39', tmtdew=20.05, humidity=26.15, cloud=0.0, wind=59.21, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:40:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:40:46.015 [DEBUG] [Thread-72189] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:40:46.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:40:46.111 [DEBUG] [Thread-72192] [transport.py] [_log()] starting thread (client mode): 0xf575cd90
2025-12-12T15:40:46.111 [DEBUG] [Thread-72192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:40:46.127 [DEBUG] [Thread-72192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:40:46.127 [INFO] [Thread-72192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:40:46.134 [DEBUG] [Thread-72192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] client lang: <none>
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] server lang: <none>
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] kex follows: False
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] Compression: none
2025-12-12T15:40:46.135 [DEBUG] [Thread-72192] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:40:46.191 [DEBUG] [Thread-72192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:40:46.192 [DEBUG] [Thread-72192] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:40:46.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:40:46.192 [DEBUG] [Thread-72192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:40:46.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:40:46.248 [DEBUG] [Thread-72192] [transport.py] [_log()] userauth is OK
2025-12-12T15:40:46.248 [DEBUG] [Thread-72192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:40:46.248 [DEBUG] [Thread-72192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:40:46.248 [DEBUG] [Thread-72192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:40:46.248 [DEBUG] [Thread-72192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:40:46.267 [INFO] [Thread-72192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:40:46.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:40:46.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:40:47.127 [DEBUG] [Thread-72192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:40:47.127 [DEBUG] [Thread-72192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:40:47.175 [DEBUG] [Thread-72192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:40:47.175 [DEBUG] [Thread-72192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:40:47.184 [DEBUG] [Thread-72192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:40:47.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:40:47.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:40:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:40:47.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:40:47.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:40:47.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:40:47.218 [DEBUG] [Thread-72192] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:40:49.485 [DEBUG] [Thread-72194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:40:51.330 [DEBUG] [Thread-72195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:02.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:02.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:04.534 [DEBUG] [Thread-72196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:17.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:41:17.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:41:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:41:17.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 41, 11), 19.94, 26.38, 0.0, 61.79, 19.9, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:41:17.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:41:11
2025-12-12T15:41:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:41:18.208 [DEBUG] [Thread-72197] [transport.py] [_log()] starting thread (client mode): 0xf575df00
2025-12-12T15:41:18.208 [DEBUG] [Thread-72197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:41:18.228 [DEBUG] [Thread-72197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:41:18.228 [INFO] [Thread-72197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] client lang: <none>
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] server lang: <none>
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] kex follows: False
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:41:18.231 [DEBUG] [Thread-72197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:41:18.232 [DEBUG] [Thread-72197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:41:18.232 [DEBUG] [Thread-72197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:41:18.232 [DEBUG] [Thread-72197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:41:18.232 [DEBUG] [Thread-72197] [transport.py] [_log()] Compression: none
2025-12-12T15:41:18.232 [DEBUG] [Thread-72197] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:41:18.248 [DEBUG] [Thread-72197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:41:18.249 [DEBUG] [Thread-72197] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:41:18.249 [DEBUG] [Thread-72197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:41:18.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:41:18.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:41:18.251 [DEBUG] [Thread-72197] [transport.py] [_log()] userauth is OK
2025-12-12T15:41:18.251 [DEBUG] [Thread-72197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:41:18.251 [DEBUG] [Thread-72197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:41:18.251 [DEBUG] [Thread-72197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:41:18.251 [DEBUG] [Thread-72197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:41:18.275 [INFO] [Thread-72197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:41:18.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:41:18.904 [DEBUG] [Thread-72197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:41:18.904 [DEBUG] [Thread-72197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:41:18.904 [DEBUG] [Thread-72197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:41:18.946 [DEBUG] [Thread-72197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:41:18.946 [DEBUG] [Thread-72197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:41:18.948 [DEBUG] [Thread-72197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:41:18.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:41:18.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:41:18.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:41:18.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:41:18.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:41:18.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:41:18.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.570233 -999.00  +19.70  54.69     32   +2.80 1 1 2 1 1   888    0 15.99 -62.31 ----- 62.0 54.7 325.4 68.2 23.4 -25.7 23.1 -24.5 24.0 -22.7 24.4 -23.0
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.570233
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:41:18.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:41:11', tmtdew=19.94, humidity=26.38, cloud=0.0, wind=61.79, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:41:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:41:18.968 [DEBUG] [Thread-72197] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:41:19.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:41:19.052 [DEBUG] [Thread-72200] [transport.py] [_log()] starting thread (client mode): 0xf5703220
2025-12-12T15:41:19.052 [DEBUG] [Thread-72200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:41:19.067 [DEBUG] [Thread-72200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:41:19.067 [INFO] [Thread-72200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] client lang: <none>
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] server lang: <none>
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] kex follows: False
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] Compression: none
2025-12-12T15:41:19.075 [DEBUG] [Thread-72200] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:41:19.130 [DEBUG] [Thread-72200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:41:19.130 [DEBUG] [Thread-72200] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:41:19.130 [DEBUG] [Thread-72200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:41:19.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:41:19.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:41:19.187 [DEBUG] [Thread-72200] [transport.py] [_log()] userauth is OK
2025-12-12T15:41:19.188 [DEBUG] [Thread-72200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:41:19.188 [DEBUG] [Thread-72200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:41:19.188 [DEBUG] [Thread-72200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:41:19.188 [DEBUG] [Thread-72200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:41:19.201 [INFO] [Thread-72200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:41:19.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:41:19.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:41:19.563 [DEBUG] [Thread-72202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:20.049 [DEBUG] [Thread-72200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:41:20.049 [DEBUG] [Thread-72200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:41:20.096 [DEBUG] [Thread-72200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:41:20.096 [DEBUG] [Thread-72200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:41:20.104 [DEBUG] [Thread-72200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:41:20.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:41:20.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:41:20.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:41:20.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:41:20.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:41:20.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:41:20.135 [DEBUG] [Thread-72200] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:41:34.607 [DEBUG] [Thread-72203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:49.638 [DEBUG] [Thread-72204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:50.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:41:50.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:41:50.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:41:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 41, 43), 19.57, 26.75, 0.0, 66.73, 19.42, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:41:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:41:43
2025-12-12T15:41:50.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:41:51.119 [DEBUG] [Thread-72205] [transport.py] [_log()] starting thread (client mode): 0xf575fd30
2025-12-12T15:41:51.120 [DEBUG] [Thread-72205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:41:51.139 [DEBUG] [Thread-72205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:41:51.139 [INFO] [Thread-72205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] client lang: <none>
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] server lang: <none>
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] kex follows: False
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:41:51.143 [DEBUG] [Thread-72205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:41:51.144 [DEBUG] [Thread-72205] [transport.py] [_log()] Compression: none
2025-12-12T15:41:51.144 [DEBUG] [Thread-72205] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:41:51.163 [DEBUG] [Thread-72205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:41:51.163 [DEBUG] [Thread-72205] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:41:51.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:41:51.164 [DEBUG] [Thread-72205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:41:51.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:41:51.166 [DEBUG] [Thread-72205] [transport.py] [_log()] userauth is OK
2025-12-12T15:41:51.166 [DEBUG] [Thread-72205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:41:51.166 [DEBUG] [Thread-72205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:41:51.167 [DEBUG] [Thread-72205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:41:51.167 [DEBUG] [Thread-72205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:41:51.181 [INFO] [Thread-72205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:41:51.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:41:51.380 [DEBUG] [Thread-72207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:41:51.811 [DEBUG] [Thread-72205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:41:51.811 [DEBUG] [Thread-72205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:41:51.811 [DEBUG] [Thread-72205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:41:51.852 [DEBUG] [Thread-72205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:41:51.852 [DEBUG] [Thread-72205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:41:51.855 [DEBUG] [Thread-72205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:41:51.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:41:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:41:51.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:41:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:41:51.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:41:51.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:41:51.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:41:51.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:41:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:41:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.570580 -999.00  +20.10  51.91     31   +2.70 1 1 2 1 1   888    0 15.99 -59.28 ----- 60.9 51.9 322.8 67.7 23.3 -25.7 23.1 -25.9 23.9 -24.3 24.3 -24.0
2025-12-12T15:41:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:41:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:41:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.570580
2025-12-12T15:41:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:41:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:41:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:41:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:41:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:41:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:41:43', tmtdew=19.57, humidity=26.75, cloud=0.0, wind=66.73, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:41:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:41:51.880 [DEBUG] [Thread-72205] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:41:51.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:41:51.976 [DEBUG] [Thread-72209] [transport.py] [_log()] starting thread (client mode): 0xfabc7d30
2025-12-12T15:41:51.976 [DEBUG] [Thread-72209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:41:51.992 [DEBUG] [Thread-72209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:41:51.992 [INFO] [Thread-72209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:41:51.999 [DEBUG] [Thread-72209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] client lang: <none>
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] server lang: <none>
2025-12-12T15:41:52.000 [DEBUG] [Thread-72209] [transport.py] [_log()] kex follows: False
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] Compression: none
2025-12-12T15:41:52.001 [DEBUG] [Thread-72209] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:41:52.059 [DEBUG] [Thread-72209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:41:52.059 [DEBUG] [Thread-72209] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:41:52.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:41:52.060 [DEBUG] [Thread-72209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:41:52.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:41:52.116 [DEBUG] [Thread-72209] [transport.py] [_log()] userauth is OK
2025-12-12T15:41:52.116 [DEBUG] [Thread-72209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:41:52.116 [DEBUG] [Thread-72209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:41:52.116 [DEBUG] [Thread-72209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:41:52.116 [DEBUG] [Thread-72209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:41:52.135 [INFO] [Thread-72209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:41:52.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:41:52.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:41:53.004 [DEBUG] [Thread-72209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:41:53.005 [DEBUG] [Thread-72209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:41:53.053 [DEBUG] [Thread-72209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:41:53.054 [DEBUG] [Thread-72209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:41:53.062 [DEBUG] [Thread-72209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:41:53.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:41:53.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:41:53.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:41:53.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:41:53.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:41:53.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:41:53.095 [DEBUG] [Thread-72209] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:42:03.065 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:03.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:04.666 [DEBUG] [Thread-72211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:19.711 [DEBUG] [Thread-72212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:23.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:42:23.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:42:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:42:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 42, 15), 19.63, 26.65, 0.0, 69.08, 19.53, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:42:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:42:15
2025-12-12T15:42:23.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:42:24.111 [DEBUG] [Thread-72213] [transport.py] [_log()] starting thread (client mode): 0xf572dd80
2025-12-12T15:42:24.111 [DEBUG] [Thread-72213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:42:24.130 [DEBUG] [Thread-72213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:42:24.130 [INFO] [Thread-72213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] client lang: <none>
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] server lang: <none>
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] kex follows: False
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:42:24.132 [DEBUG] [Thread-72213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:42:24.133 [DEBUG] [Thread-72213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:42:24.133 [DEBUG] [Thread-72213] [transport.py] [_log()] Compression: none
2025-12-12T15:42:24.133 [DEBUG] [Thread-72213] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:42:24.143 [DEBUG] [Thread-72213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:42:24.143 [DEBUG] [Thread-72213] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:42:24.144 [DEBUG] [Thread-72213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:42:24.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:42:24.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:42:24.145 [DEBUG] [Thread-72213] [transport.py] [_log()] userauth is OK
2025-12-12T15:42:24.146 [DEBUG] [Thread-72213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:42:24.146 [DEBUG] [Thread-72213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:42:24.146 [DEBUG] [Thread-72213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:42:24.146 [DEBUG] [Thread-72213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:42:24.169 [INFO] [Thread-72213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:42:24.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:42:24.802 [DEBUG] [Thread-72213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:42:24.802 [DEBUG] [Thread-72213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:42:24.803 [DEBUG] [Thread-72213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:42:24.843 [DEBUG] [Thread-72213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:42:24.843 [DEBUG] [Thread-72213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:42:24.846 [DEBUG] [Thread-72213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:42:24.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:42:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:42:24.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:42:24.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:42:24.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:42:24.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:42:24.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:42:24.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:42:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:42:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.570927 -999.00  +19.70  49.74     32   +2.80 1 1 2 1 1   888    0 15.65 -54.86 ----- 51.3 49.7 321.0 74.5 23.2 -26.0 23.0 -25.4 23.5 -28.5 24.1 -22.9
2025-12-12T15:42:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:42:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:42:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.570927
2025-12-12T15:42:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:42:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:42:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:42:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:42:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:42:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:42:15', tmtdew=19.63, humidity=26.65, cloud=0.0, wind=69.08, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:42:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:42:24.871 [DEBUG] [Thread-72213] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:42:24.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:42:24.967 [DEBUG] [Thread-72216] [transport.py] [_log()] starting thread (client mode): 0xf81c1f30
2025-12-12T15:42:24.967 [DEBUG] [Thread-72216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:42:24.981 [DEBUG] [Thread-72216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:42:24.981 [INFO] [Thread-72216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:42:24.989 [DEBUG] [Thread-72216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] client lang: <none>
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] server lang: <none>
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] kex follows: False
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] Compression: none
2025-12-12T15:42:24.990 [DEBUG] [Thread-72216] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:42:25.047 [DEBUG] [Thread-72216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:42:25.047 [DEBUG] [Thread-72216] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:42:25.047 [DEBUG] [Thread-72216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:42:25.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:42:25.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:42:25.104 [DEBUG] [Thread-72216] [transport.py] [_log()] userauth is OK
2025-12-12T15:42:25.104 [DEBUG] [Thread-72216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:42:25.104 [DEBUG] [Thread-72216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:42:25.104 [DEBUG] [Thread-72216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:42:25.104 [DEBUG] [Thread-72216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:42:25.123 [INFO] [Thread-72216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:42:25.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:42:25.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:42:25.990 [DEBUG] [Thread-72216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:42:25.990 [DEBUG] [Thread-72216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:42:26.042 [DEBUG] [Thread-72216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:42:26.042 [DEBUG] [Thread-72216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:42:26.051 [DEBUG] [Thread-72216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:42:26.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:42:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:42:26.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:42:26.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:42:26.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:42:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:42:26.086 [DEBUG] [Thread-72216] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:42:34.740 [DEBUG] [Thread-72218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:49.789 [DEBUG] [Thread-72219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:51.429 [DEBUG] [Thread-72220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:42:56.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:42:56.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:42:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:42:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 42, 47), 19.08, 27.63, 0.0, 54.96, 19.43, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:42:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:42:47
2025-12-12T15:42:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:42:57.062 [DEBUG] [Thread-72221] [transport.py] [_log()] starting thread (client mode): 0xf81c0be0
2025-12-12T15:42:57.063 [DEBUG] [Thread-72221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:42:57.083 [DEBUG] [Thread-72221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:42:57.083 [INFO] [Thread-72221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:42:57.086 [DEBUG] [Thread-72221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] client lang: <none>
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] server lang: <none>
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] kex follows: False
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:42:57.087 [DEBUG] [Thread-72221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:42:57.088 [DEBUG] [Thread-72221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:42:57.088 [DEBUG] [Thread-72221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:42:57.088 [DEBUG] [Thread-72221] [transport.py] [_log()] Compression: none
2025-12-12T15:42:57.088 [DEBUG] [Thread-72221] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:42:57.106 [DEBUG] [Thread-72221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:42:57.107 [DEBUG] [Thread-72221] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:42:57.108 [DEBUG] [Thread-72221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:42:57.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:42:57.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:42:57.110 [DEBUG] [Thread-72221] [transport.py] [_log()] userauth is OK
2025-12-12T15:42:57.110 [DEBUG] [Thread-72221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:42:57.110 [DEBUG] [Thread-72221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:42:57.110 [DEBUG] [Thread-72221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:42:57.110 [DEBUG] [Thread-72221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:42:57.145 [INFO] [Thread-72221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:42:57.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:42:57.783 [DEBUG] [Thread-72221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:42:57.784 [DEBUG] [Thread-72221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:42:57.784 [DEBUG] [Thread-72221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:42:57.825 [DEBUG] [Thread-72221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:42:57.825 [DEBUG] [Thread-72221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:42:57.828 [DEBUG] [Thread-72221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:42:57.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:42:57.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:42:57.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:42:57.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:42:57.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:42:57.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:42:57.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:42:57.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:42:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:42:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.571274 -999.00  +19.90  54.21     32   +2.90 1 1 2 1 1   888    0 15.74 -60.18 ----- 52.9 54.2 312.2 62.5 23.1 -26.3 23.0 -26.5 23.6 -24.8 24.1 -23.6
2025-12-12T15:42:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:42:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:42:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.571274
2025-12-12T15:42:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:42:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:42:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:42:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:42:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:42:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:42:47', tmtdew=19.08, humidity=27.63, cloud=0.0, wind=54.96, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:42:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:42:57.855 [DEBUG] [Thread-72221] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:42:57.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:42:57.952 [DEBUG] [Thread-72224] [transport.py] [_log()] starting thread (client mode): 0xf81f2560
2025-12-12T15:42:57.952 [DEBUG] [Thread-72224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:42:57.966 [DEBUG] [Thread-72224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:42:57.966 [INFO] [Thread-72224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:57.974 [DEBUG] [Thread-72224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] client lang: <none>
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] server lang: <none>
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] kex follows: False
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] Compression: none
2025-12-12T15:42:57.975 [DEBUG] [Thread-72224] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:42:58.031 [DEBUG] [Thread-72224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:42:58.032 [DEBUG] [Thread-72224] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:42:58.032 [DEBUG] [Thread-72224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:42:58.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:42:58.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:42:58.087 [DEBUG] [Thread-72224] [transport.py] [_log()] userauth is OK
2025-12-12T15:42:58.088 [DEBUG] [Thread-72224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:42:58.088 [DEBUG] [Thread-72224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:42:58.088 [DEBUG] [Thread-72224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:42:58.088 [DEBUG] [Thread-72224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:42:58.109 [INFO] [Thread-72224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:42:58.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:42:58.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:42:58.937 [DEBUG] [Thread-72224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:42:58.937 [DEBUG] [Thread-72224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:42:58.985 [DEBUG] [Thread-72224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:42:58.985 [DEBUG] [Thread-72224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:42:58.994 [DEBUG] [Thread-72224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:42:59.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:42:59.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:42:59.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:42:59.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:42:59.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:42:59.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:42:59.029 [DEBUG] [Thread-72224] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:43:03.206 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:43:03.207 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:43:04.817 [DEBUG] [Thread-72226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:43:19.858 [DEBUG] [Thread-72227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:43:29.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:43:29.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:43:29.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:43:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 43, 19), 19.08, 27.56, 0.0, 51.96, 19.19, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:43:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:43:19
2025-12-12T15:43:29.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:43:30.007 [DEBUG] [Thread-72228] [transport.py] [_log()] starting thread (client mode): 0xf575ff70
2025-12-12T15:43:30.007 [DEBUG] [Thread-72228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:43:30.027 [DEBUG] [Thread-72228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:43:30.027 [INFO] [Thread-72228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:43:30.030 [DEBUG] [Thread-72228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] client lang: <none>
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] server lang: <none>
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] kex follows: False
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] Compression: none
2025-12-12T15:43:30.031 [DEBUG] [Thread-72228] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:43:30.049 [DEBUG] [Thread-72228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:43:30.050 [DEBUG] [Thread-72228] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:43:30.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:43:30.051 [DEBUG] [Thread-72228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:43:30.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:43:30.053 [DEBUG] [Thread-72228] [transport.py] [_log()] userauth is OK
2025-12-12T15:43:30.053 [DEBUG] [Thread-72228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:43:30.053 [DEBUG] [Thread-72228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:43:30.054 [DEBUG] [Thread-72228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:43:30.054 [DEBUG] [Thread-72228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:43:30.071 [INFO] [Thread-72228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:43:30.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:43:30.699 [DEBUG] [Thread-72228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:43:30.699 [DEBUG] [Thread-72228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:43:30.700 [DEBUG] [Thread-72228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:43:30.740 [DEBUG] [Thread-72228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:43:30.740 [DEBUG] [Thread-72228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:43:30.742 [DEBUG] [Thread-72228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:43:30.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:43:30.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:43:30.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:43:30.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:43:30.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:43:30.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:43:30.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:43:30.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.571621 -999.00  +19.70  38.10     32   +2.90 1 1 2 1 1   888    0 15.78 -62.15 ----- 42.0 38.1 317.4 57.7 23.2 -26.0 23.0 -25.2 23.4 -22.4 24.1 -23.0
2025-12-12T15:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.571621
2025-12-12T15:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:43:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:43:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:43:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:43:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:43:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:43:19', tmtdew=19.08, humidity=27.56, cloud=0.0, wind=51.96, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:43:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:43:30.764 [DEBUG] [Thread-72228] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:43:30.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:43:30.860 [DEBUG] [Thread-72231] [transport.py] [_log()] starting thread (client mode): 0xf575ed10
2025-12-12T15:43:30.860 [DEBUG] [Thread-72231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:43:30.875 [DEBUG] [Thread-72231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:43:30.875 [INFO] [Thread-72231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:43:30.882 [DEBUG] [Thread-72231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:43:30.882 [DEBUG] [Thread-72231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:43:30.882 [DEBUG] [Thread-72231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] client lang: <none>
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] server lang: <none>
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] kex follows: False
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:43:30.883 [DEBUG] [Thread-72231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:43:30.884 [DEBUG] [Thread-72231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:43:30.884 [DEBUG] [Thread-72231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:43:30.884 [DEBUG] [Thread-72231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:43:30.884 [DEBUG] [Thread-72231] [transport.py] [_log()] Compression: none
2025-12-12T15:43:30.884 [DEBUG] [Thread-72231] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:43:30.939 [DEBUG] [Thread-72231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:43:30.939 [DEBUG] [Thread-72231] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:43:30.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:43:30.940 [DEBUG] [Thread-72231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:43:30.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:43:30.999 [DEBUG] [Thread-72231] [transport.py] [_log()] userauth is OK
2025-12-12T15:43:31.000 [DEBUG] [Thread-72231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:43:31.000 [DEBUG] [Thread-72231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:43:31.000 [DEBUG] [Thread-72231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:43:31.000 [DEBUG] [Thread-72231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:43:31.017 [INFO] [Thread-72231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:43:31.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:43:31.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:43:31.885 [DEBUG] [Thread-72231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:43:31.885 [DEBUG] [Thread-72231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:43:31.933 [DEBUG] [Thread-72231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:43:31.933 [DEBUG] [Thread-72231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:43:31.941 [DEBUG] [Thread-72231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:43:31.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:43:31.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:43:31.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
2025-12-12T15:43:31.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:43:31.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:43:31.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:43:31.973 [DEBUG] [Thread-72231] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:43:34.884 [DEBUG] [Thread-72233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:43:49.933 [DEBUG] [Thread-72234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:43:51.473 [DEBUG] [Thread-72235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:01.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:44:01.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:44:01.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:44:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 43, 51), 18.71, 28.56, 0.0, 43.19, 19.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:44:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:43:51
2025-12-12T15:44:02.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:44:02.955 [DEBUG] [Thread-72236] [transport.py] [_log()] starting thread (client mode): 0xf575f940
2025-12-12T15:44:02.955 [DEBUG] [Thread-72236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:44:02.975 [DEBUG] [Thread-72236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:44:02.975 [INFO] [Thread-72236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:44:02.978 [DEBUG] [Thread-72236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:44:02.978 [DEBUG] [Thread-72236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:44:02.978 [DEBUG] [Thread-72236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:44:02.978 [DEBUG] [Thread-72236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:02.978 [DEBUG] [Thread-72236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] client lang: <none>
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] server lang: <none>
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] kex follows: False
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] Compression: none
2025-12-12T15:44:02.979 [DEBUG] [Thread-72236] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:44:02.995 [DEBUG] [Thread-72236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:44:02.995 [DEBUG] [Thread-72236] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:44:02.995 [DEBUG] [Thread-72236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:44:02.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:44:02.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:44:03.037 [DEBUG] [Thread-72236] [transport.py] [_log()] userauth is OK
2025-12-12T15:44:03.037 [DEBUG] [Thread-72236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:44:03.037 [DEBUG] [Thread-72236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:44:03.037 [DEBUG] [Thread-72236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:44:03.037 [DEBUG] [Thread-72236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:44:03.056 [INFO] [Thread-72236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:44:03.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:44:03.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:03.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:03.691 [DEBUG] [Thread-72236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:44:03.691 [DEBUG] [Thread-72236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:44:03.692 [DEBUG] [Thread-72236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:44:03.732 [DEBUG] [Thread-72236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:44:03.732 [DEBUG] [Thread-72236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:44:03.735 [DEBUG] [Thread-72236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:44:03.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:44:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:44:03.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:44:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:44:03.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:44:03.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:44:03.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:44:03.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:44:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:44:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.571969 -999.00  +19.40  54.86     33   +2.90 1 1 2 1 1   888    0 16.03 -54.78 ----- 39.9 54.9 308.4 59.1 23.2 -24.7 23.0 -24.1 23.5 -23.8 24.1 -23.2
2025-12-12T15:44:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:44:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:44:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.571969
2025-12-12T15:44:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:44:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:44:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:44:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:44:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:44:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:43:51', tmtdew=18.71, humidity=28.56, cloud=0.0, wind=43.19, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:43:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:44:03.761 [DEBUG] [Thread-72236] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:44:03.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:44:03.858 [DEBUG] [Thread-72239] [transport.py] [_log()] starting thread (client mode): 0xf81c1ed0
2025-12-12T15:44:03.858 [DEBUG] [Thread-72239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:44:03.873 [DEBUG] [Thread-72239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:44:03.873 [INFO] [Thread-72239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:44:03.880 [DEBUG] [Thread-72239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:44:03.880 [DEBUG] [Thread-72239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] client lang: <none>
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] server lang: <none>
2025-12-12T15:44:03.881 [DEBUG] [Thread-72239] [transport.py] [_log()] kex follows: False
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] Compression: none
2025-12-12T15:44:03.882 [DEBUG] [Thread-72239] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:44:03.940 [DEBUG] [Thread-72239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:44:03.940 [DEBUG] [Thread-72239] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:44:03.941 [DEBUG] [Thread-72239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:44:03.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:44:03.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:44:03.996 [DEBUG] [Thread-72239] [transport.py] [_log()] userauth is OK
2025-12-12T15:44:03.996 [DEBUG] [Thread-72239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:44:03.996 [DEBUG] [Thread-72239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:44:03.996 [DEBUG] [Thread-72239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:44:03.996 [DEBUG] [Thread-72239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:44:04.015 [INFO] [Thread-72239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:44:04.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:44:04.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:44:04.867 [DEBUG] [Thread-72239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:44:04.867 [DEBUG] [Thread-72239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:44:04.916 [DEBUG] [Thread-72239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:44:04.916 [DEBUG] [Thread-72239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:44:04.925 [DEBUG] [Thread-72239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:44:04.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:44:04.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:44:04.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:44:04.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:44:04.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:44:04.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:44:04.959 [DEBUG] [Thread-72239] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:44:04.966 [DEBUG] [Thread-72241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:20.011 [DEBUG] [Thread-72242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:34.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:44:34.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:44:34.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:44:35.041 [DEBUG] [Thread-72243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 44, 23), 19.56, 27.1, 0.0, 54.89, 19.83, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:44:35.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:44:23
2025-12-12T15:44:35.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:44:35.992 [DEBUG] [Thread-72244] [transport.py] [_log()] starting thread (client mode): 0xf5742230
2025-12-12T15:44:35.992 [DEBUG] [Thread-72244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:44:36.012 [DEBUG] [Thread-72244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:44:36.012 [INFO] [Thread-72244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] client lang: <none>
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] server lang: <none>
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] kex follows: False
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:44:36.013 [DEBUG] [Thread-72244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:44:36.014 [DEBUG] [Thread-72244] [transport.py] [_log()] Compression: none
2025-12-12T15:44:36.014 [DEBUG] [Thread-72244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:44:36.021 [DEBUG] [Thread-72244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:44:36.021 [DEBUG] [Thread-72244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:44:36.021 [DEBUG] [Thread-72244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:44:36.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:44:36.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:44:36.022 [DEBUG] [Thread-72244] [transport.py] [_log()] userauth is OK
2025-12-12T15:44:36.022 [DEBUG] [Thread-72244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:44:36.022 [DEBUG] [Thread-72244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:44:36.022 [DEBUG] [Thread-72244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:44:36.022 [DEBUG] [Thread-72244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:44:36.031 [INFO] [Thread-72244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:44:36.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:44:36.651 [DEBUG] [Thread-72244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:44:36.651 [DEBUG] [Thread-72244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:44:36.651 [DEBUG] [Thread-72244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:44:36.693 [DEBUG] [Thread-72244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:44:36.693 [DEBUG] [Thread-72244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:44:36.696 [DEBUG] [Thread-72244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:44:36.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:44:36.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:44:36.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:44:36.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:44:36.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:44:36.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:44:36.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.572316 -999.00  +19.40  44.10     33   +2.80 1 1 2 1 1   888    0 15.84 -60.31 ----- 42.0 44.1 299.4 53.1 23.2 -25.2 23.0 -25.4 23.7 -23.1 24.1 -23.4
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.572316
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:44:36.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:44:23', tmtdew=19.56, humidity=27.1, cloud=0.0, wind=54.89, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:44:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:44:36.714 [DEBUG] [Thread-72244] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:44:36.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:44:36.799 [DEBUG] [Thread-72247] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T15:44:36.799 [DEBUG] [Thread-72247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:44:36.815 [DEBUG] [Thread-72247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:44:36.815 [INFO] [Thread-72247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] client lang: <none>
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] server lang: <none>
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] kex follows: False
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] Compression: none
2025-12-12T15:44:36.827 [DEBUG] [Thread-72247] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:44:36.878 [DEBUG] [Thread-72247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:44:36.878 [DEBUG] [Thread-72247] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:44:36.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:44:36.878 [DEBUG] [Thread-72247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:44:36.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:44:36.937 [DEBUG] [Thread-72247] [transport.py] [_log()] userauth is OK
2025-12-12T15:44:36.937 [DEBUG] [Thread-72247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:44:36.937 [DEBUG] [Thread-72247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:44:36.937 [DEBUG] [Thread-72247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:44:36.937 [DEBUG] [Thread-72247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:44:36.951 [INFO] [Thread-72247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:44:36.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:44:36.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:44:37.776 [DEBUG] [Thread-72247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:44:37.776 [DEBUG] [Thread-72247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:44:37.825 [DEBUG] [Thread-72247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:44:37.825 [DEBUG] [Thread-72247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:44:37.833 [DEBUG] [Thread-72247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:44:37.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:44:37.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:44:37.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:44:37.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:44:37.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:44:37.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:44:37.865 [DEBUG] [Thread-72247] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:44:50.069 [DEBUG] [Thread-72249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:44:51.530 [DEBUG] [Thread-72250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:03.491 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:03.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:05.120 [DEBUG] [Thread-72251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:07.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:45:07.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:45:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:45:08.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 44, 55), 20.1, 26.02, 0.0, 60.2, 19.91, 0, 0, 0, 2, 2, 0),)
2025-12-12T15:45:08.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:44:55
2025-12-12T15:45:08.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:45:08.858 [DEBUG] [Thread-72252] [transport.py] [_log()] starting thread (client mode): 0xf81f3160
2025-12-12T15:45:08.859 [DEBUG] [Thread-72252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:45:08.879 [DEBUG] [Thread-72252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:45:08.879 [INFO] [Thread-72252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:45:08.882 [DEBUG] [Thread-72252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:45:08.882 [DEBUG] [Thread-72252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] client lang: <none>
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] server lang: <none>
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] kex follows: False
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] Compression: none
2025-12-12T15:45:08.883 [DEBUG] [Thread-72252] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:45:08.901 [DEBUG] [Thread-72252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:45:08.901 [DEBUG] [Thread-72252] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:45:08.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:45:08.902 [DEBUG] [Thread-72252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:45:08.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:45:08.904 [DEBUG] [Thread-72252] [transport.py] [_log()] userauth is OK
2025-12-12T15:45:08.904 [DEBUG] [Thread-72252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:45:08.904 [DEBUG] [Thread-72252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:45:08.904 [DEBUG] [Thread-72252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:45:08.904 [DEBUG] [Thread-72252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:45:08.922 [INFO] [Thread-72252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:45:08.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:45:09.649 [DEBUG] [Thread-72252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:45:09.650 [DEBUG] [Thread-72252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:45:09.650 [DEBUG] [Thread-72252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:45:09.691 [DEBUG] [Thread-72252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:45:09.691 [DEBUG] [Thread-72252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:45:09.694 [DEBUG] [Thread-72252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:45:09.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:45:09.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:45:09.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:45:09.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:45:09.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:45:09.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:45:09.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:45:09.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:45:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:45:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.572664 -999.00  +19.70  49.72     32   +2.60 1 1 2 1 1   888    0 15.90 -59.43 ----- 43.6 49.7 318.8 66.9 23.3 -24.5 23.0 -24.7 23.7 -22.6 24.2 -22.3
2025-12-12T15:45:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:45:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:45:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.572664
2025-12-12T15:45:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:45:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:45:09.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:45:09.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:45:09.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:45:09.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:44:55', tmtdew=20.1, humidity=26.02, cloud=0.0, wind=60.2, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:44:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:45:09.768 [DEBUG] [Thread-72252] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:45:09.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:45:09.863 [DEBUG] [Thread-72255] [transport.py] [_log()] starting thread (client mode): 0xf575ecb0
2025-12-12T15:45:09.863 [DEBUG] [Thread-72255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:45:09.877 [DEBUG] [Thread-72255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:45:09.877 [INFO] [Thread-72255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] client lang: <none>
2025-12-12T15:45:09.885 [DEBUG] [Thread-72255] [transport.py] [_log()] server lang: <none>
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] kex follows: False
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] Compression: none
2025-12-12T15:45:09.886 [DEBUG] [Thread-72255] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:45:09.943 [DEBUG] [Thread-72255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:45:09.944 [DEBUG] [Thread-72255] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:45:09.944 [DEBUG] [Thread-72255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:45:09.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:45:09.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:45:10.000 [DEBUG] [Thread-72255] [transport.py] [_log()] userauth is OK
2025-12-12T15:45:10.000 [DEBUG] [Thread-72255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:45:10.000 [DEBUG] [Thread-72255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:45:10.000 [DEBUG] [Thread-72255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:45:10.000 [DEBUG] [Thread-72255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:45:10.019 [INFO] [Thread-72255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:45:10.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:45:10.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:45:10.823 [DEBUG] [Thread-72255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:45:10.823 [DEBUG] [Thread-72255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:45:10.873 [DEBUG] [Thread-72255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:45:10.873 [DEBUG] [Thread-72255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:45:10.882 [DEBUG] [Thread-72255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:45:10.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:45:10.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:45:10.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:45:10.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:45:10.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:45:10.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:45:10.917 [DEBUG] [Thread-72255] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:45:20.146 [DEBUG] [Thread-72257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:35.208 [DEBUG] [Thread-72258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:40.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:45:40.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:45:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:45:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 45, 27), 19.96, 26.2, 0.0, 58.03, 19.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:45:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:45:27
2025-12-12T15:45:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:45:41.920 [DEBUG] [Thread-72259] [transport.py] [_log()] starting thread (client mode): 0xf57038b0
2025-12-12T15:45:41.920 [DEBUG] [Thread-72259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:45:41.939 [DEBUG] [Thread-72259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:45:41.939 [INFO] [Thread-72259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] client lang: <none>
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] server lang: <none>
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] kex follows: False
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:45:41.942 [DEBUG] [Thread-72259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:45:41.943 [DEBUG] [Thread-72259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:45:41.943 [DEBUG] [Thread-72259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:45:41.943 [DEBUG] [Thread-72259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:45:41.943 [DEBUG] [Thread-72259] [transport.py] [_log()] Compression: none
2025-12-12T15:45:41.943 [DEBUG] [Thread-72259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:45:41.961 [DEBUG] [Thread-72259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:45:41.961 [DEBUG] [Thread-72259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:45:41.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:45:41.962 [DEBUG] [Thread-72259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:45:41.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:45:41.964 [DEBUG] [Thread-72259] [transport.py] [_log()] userauth is OK
2025-12-12T15:45:41.964 [DEBUG] [Thread-72259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:45:41.964 [DEBUG] [Thread-72259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:45:41.964 [DEBUG] [Thread-72259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:45:41.964 [DEBUG] [Thread-72259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:45:41.987 [INFO] [Thread-72259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:45:41.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:45:42.621 [DEBUG] [Thread-72259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:45:42.621 [DEBUG] [Thread-72259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:45:42.621 [DEBUG] [Thread-72259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:45:42.662 [DEBUG] [Thread-72259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:45:42.662 [DEBUG] [Thread-72259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:45:42.665 [DEBUG] [Thread-72259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:45:42.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:45:42.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:45:42.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:45:42.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:45:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:45:42.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:45:42.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:45:42.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:45:42.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.573010 -999.00  +20.10  60.45     30   +2.40 1 1 3 1 1   888    0 15.63 -55.86 ----- 51.8 60.5 324.8 76.3 23.4 -25.1 23.2 -24.8 23.9 -22.1 24.4 -22.7
2025-12-12T15:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:45:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.573010
2025-12-12T15:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:45:42.687 [DEBUG] [Thread-72259] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:45:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:45:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:45:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:45:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:45:42.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:45:27', tmtdew=19.96, humidity=26.2, cloud=0.0, wind=58.03, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:45:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:45:42.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:45:42.778 [DEBUG] [Thread-72262] [transport.py] [_log()] starting thread (client mode): 0xf570f970
2025-12-12T15:45:42.778 [DEBUG] [Thread-72262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:45:42.792 [DEBUG] [Thread-72262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:45:42.793 [INFO] [Thread-72262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:45:42.800 [DEBUG] [Thread-72262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:45:42.800 [DEBUG] [Thread-72262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:45:42.800 [DEBUG] [Thread-72262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:45:42.800 [DEBUG] [Thread-72262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] client lang: <none>
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] server lang: <none>
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] kex follows: False
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:45:42.801 [DEBUG] [Thread-72262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:45:42.802 [DEBUG] [Thread-72262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:45:42.802 [DEBUG] [Thread-72262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:45:42.802 [DEBUG] [Thread-72262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:45:42.802 [DEBUG] [Thread-72262] [transport.py] [_log()] Compression: none
2025-12-12T15:45:42.802 [DEBUG] [Thread-72262] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:45:42.859 [DEBUG] [Thread-72262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:45:42.860 [DEBUG] [Thread-72262] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:45:42.860 [DEBUG] [Thread-72262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:45:42.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:45:42.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:45:42.915 [DEBUG] [Thread-72262] [transport.py] [_log()] userauth is OK
2025-12-12T15:45:42.916 [DEBUG] [Thread-72262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:45:42.916 [DEBUG] [Thread-72262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:45:42.916 [DEBUG] [Thread-72262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:45:42.916 [DEBUG] [Thread-72262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:45:42.934 [INFO] [Thread-72262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:45:42.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:45:42.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:45:43.786 [DEBUG] [Thread-72262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:45:43.786 [DEBUG] [Thread-72262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:45:43.837 [DEBUG] [Thread-72262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:45:43.837 [DEBUG] [Thread-72262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:45:43.848 [DEBUG] [Thread-72262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:45:43.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:45:43.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:45:43.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:45:43.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:45:43.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:45:43.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:45:43.894 [DEBUG] [Thread-72262] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:45:50.238 [DEBUG] [Thread-72264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:45:51.579 [DEBUG] [Thread-72265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:03.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:03.633 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:05.289 [DEBUG] [Thread-72266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:13.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:46:13.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:46:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:46:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 45, 59), 19.96, 26.23, 0.0, 59.78, 19.88, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:46:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:45:59
2025-12-12T15:46:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:46:14.881 [DEBUG] [Thread-72267] [transport.py] [_log()] starting thread (client mode): 0xf81f3910
2025-12-12T15:46:14.881 [DEBUG] [Thread-72267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:46:14.903 [DEBUG] [Thread-72267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:46:14.903 [INFO] [Thread-72267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:46:14.906 [DEBUG] [Thread-72267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] client lang: <none>
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] server lang: <none>
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] kex follows: False
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:46:14.907 [DEBUG] [Thread-72267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:46:14.908 [DEBUG] [Thread-72267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:46:14.908 [DEBUG] [Thread-72267] [transport.py] [_log()] Compression: none
2025-12-12T15:46:14.908 [DEBUG] [Thread-72267] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:46:14.927 [DEBUG] [Thread-72267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:46:14.928 [DEBUG] [Thread-72267] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:46:14.928 [DEBUG] [Thread-72267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:46:14.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:46:14.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:46:14.930 [DEBUG] [Thread-72267] [transport.py] [_log()] userauth is OK
2025-12-12T15:46:14.930 [DEBUG] [Thread-72267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:46:14.930 [DEBUG] [Thread-72267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:46:14.931 [DEBUG] [Thread-72267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:46:14.931 [DEBUG] [Thread-72267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:46:14.963 [INFO] [Thread-72267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:46:14.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:46:15.647 [DEBUG] [Thread-72267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:46:15.647 [DEBUG] [Thread-72267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:46:15.648 [DEBUG] [Thread-72267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:46:15.689 [DEBUG] [Thread-72267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:46:15.689 [DEBUG] [Thread-72267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:46:15.691 [DEBUG] [Thread-72267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:46:15.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:46:15.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:46:15.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:46:15.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:46:15.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:46:15.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:46:15.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:46:15.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:46:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:46:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.573705 -999.00  +19.90  52.60     33   +3.40 1 1 2 1 1   888    0 15.51 -57.19 ----- 56.7 52.6 316.4 62.6 23.4 -26.1 23.1 -25.9 23.9 -21.1 24.3 -22.9
2025-12-12T15:46:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:46:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:46:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.573705
2025-12-12T15:46:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:46:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:46:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:46:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:46:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:46:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:45:59', tmtdew=19.96, humidity=26.23, cloud=0.0, wind=59.78, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:46:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:46:15.715 [DEBUG] [Thread-72267] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:46:15.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:46:15.810 [DEBUG] [Thread-72270] [transport.py] [_log()] starting thread (client mode): 0xf5702fb0
2025-12-12T15:46:15.810 [DEBUG] [Thread-72270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:46:15.825 [DEBUG] [Thread-72270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:46:15.825 [INFO] [Thread-72270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:15.833 [DEBUG] [Thread-72270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] client lang: <none>
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] server lang: <none>
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] kex follows: False
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:46:15.834 [DEBUG] [Thread-72270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:46:15.835 [DEBUG] [Thread-72270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:46:15.835 [DEBUG] [Thread-72270] [transport.py] [_log()] Compression: none
2025-12-12T15:46:15.835 [DEBUG] [Thread-72270] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:46:15.891 [DEBUG] [Thread-72270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:46:15.892 [DEBUG] [Thread-72270] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:46:15.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:46:15.893 [DEBUG] [Thread-72270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:46:15.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:46:15.948 [DEBUG] [Thread-72270] [transport.py] [_log()] userauth is OK
2025-12-12T15:46:15.948 [DEBUG] [Thread-72270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:46:15.948 [DEBUG] [Thread-72270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:46:15.948 [DEBUG] [Thread-72270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:46:15.948 [DEBUG] [Thread-72270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:46:15.967 [INFO] [Thread-72270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:46:15.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:46:15.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:46:16.811 [DEBUG] [Thread-72270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:46:16.811 [DEBUG] [Thread-72270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:46:16.859 [DEBUG] [Thread-72270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:46:16.859 [DEBUG] [Thread-72270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:46:16.868 [DEBUG] [Thread-72270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:46:16.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:46:16.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:46:16.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:46:16.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:46:16.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:46:16.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:46:16.902 [DEBUG] [Thread-72270] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:46:20.324 [DEBUG] [Thread-72272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:35.380 [DEBUG] [Thread-72273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:46.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:46:46.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:46:46.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:46:47.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 46, 31), 19.47, 27.13, 0.0, 52.58, 19.77, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:46:47.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:46:31
2025-12-12T15:46:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:46:47.891 [DEBUG] [Thread-72274] [transport.py] [_log()] starting thread (client mode): 0xf5700100
2025-12-12T15:46:47.891 [DEBUG] [Thread-72274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:46:47.911 [DEBUG] [Thread-72274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:46:47.911 [INFO] [Thread-72274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] client lang: <none>
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] server lang: <none>
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] kex follows: False
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] Compression: none
2025-12-12T15:46:47.914 [DEBUG] [Thread-72274] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:46:47.934 [DEBUG] [Thread-72274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:46:47.934 [DEBUG] [Thread-72274] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:46:47.935 [DEBUG] [Thread-72274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:46:47.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:46:47.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:46:47.976 [DEBUG] [Thread-72274] [transport.py] [_log()] userauth is OK
2025-12-12T15:46:47.977 [DEBUG] [Thread-72274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:46:47.977 [DEBUG] [Thread-72274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:46:47.977 [DEBUG] [Thread-72274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:46:47.977 [DEBUG] [Thread-72274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:46:47.997 [INFO] [Thread-72274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:46:47.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:46:48.583 [DEBUG] [Thread-72274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:46:48.583 [DEBUG] [Thread-72274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:46:48.583 [DEBUG] [Thread-72274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:46:48.624 [DEBUG] [Thread-72274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:46:48.624 [DEBUG] [Thread-72274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:46:48.627 [DEBUG] [Thread-72274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:46:48.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:46:48.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:46:48.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:46:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:46:48.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:46:48.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:46:48.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:46:48.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:46:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:46:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.574052 -999.00  +20.20  34.99     33   +3.70 1 1 2 1 1   888    0 15.90 -61.03 ----- 45.9 35.0 323.8 68.8 23.4 -24.6 23.1 -24.2 23.8 -26.5 24.3 -21.9
2025-12-12T15:46:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:46:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:46:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.574052
2025-12-12T15:46:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:46:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:46:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:46:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:46:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:46:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:46:31', tmtdew=19.47, humidity=27.13, cloud=0.0, wind=52.58, temperature=19.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:46:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:46:48.649 [DEBUG] [Thread-72274] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:46:48.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:46:48.747 [DEBUG] [Thread-72277] [transport.py] [_log()] starting thread (client mode): 0xf57bc190
2025-12-12T15:46:48.747 [DEBUG] [Thread-72277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:46:48.762 [DEBUG] [Thread-72277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:46:48.762 [INFO] [Thread-72277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:46:48.769 [DEBUG] [Thread-72277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:46:48.769 [DEBUG] [Thread-72277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:46:48.769 [DEBUG] [Thread-72277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:46:48.769 [DEBUG] [Thread-72277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:48.769 [DEBUG] [Thread-72277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:46:48.769 [DEBUG] [Thread-72277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] client lang: <none>
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] server lang: <none>
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] kex follows: False
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] Compression: none
2025-12-12T15:46:48.770 [DEBUG] [Thread-72277] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:46:48.831 [DEBUG] [Thread-72277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:46:48.832 [DEBUG] [Thread-72277] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:46:48.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:46:48.833 [DEBUG] [Thread-72277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:46:48.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:46:48.887 [DEBUG] [Thread-72277] [transport.py] [_log()] userauth is OK
2025-12-12T15:46:48.888 [DEBUG] [Thread-72277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:46:48.888 [DEBUG] [Thread-72277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:46:48.888 [DEBUG] [Thread-72277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:46:48.888 [DEBUG] [Thread-72277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:46:48.906 [INFO] [Thread-72277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:46:48.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:46:48.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:46:49.753 [DEBUG] [Thread-72277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:46:49.754 [DEBUG] [Thread-72277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:46:49.802 [DEBUG] [Thread-72277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:46:49.802 [DEBUG] [Thread-72277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:46:49.811 [DEBUG] [Thread-72277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:46:49.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:46:49.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:46:49.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:46:49.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:46:49.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:46:49.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:46:49.846 [DEBUG] [Thread-72277] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:46:50.407 [DEBUG] [Thread-72279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:46:51.631 [DEBUG] [Thread-72280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:03.773 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:03.775 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:05.452 [DEBUG] [Thread-72281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:47:19.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:47:19.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:47:20.476 [DEBUG] [Thread-72282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 47, 3), 19.17, 27.69, 0.0, 49.76, 19.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:47:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:47:03
2025-12-12T15:47:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:47:20.831 [DEBUG] [Thread-72283] [transport.py] [_log()] starting thread (client mode): 0xf57bcc40
2025-12-12T15:47:20.831 [DEBUG] [Thread-72283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:47:20.852 [DEBUG] [Thread-72283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:47:20.852 [INFO] [Thread-72283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:20.855 [DEBUG] [Thread-72283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] client lang: <none>
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] server lang: <none>
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] kex follows: False
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] Compression: none
2025-12-12T15:47:20.856 [DEBUG] [Thread-72283] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:47:20.875 [DEBUG] [Thread-72283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:47:20.876 [DEBUG] [Thread-72283] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:47:20.876 [DEBUG] [Thread-72283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:47:20.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:47:20.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:47:20.916 [DEBUG] [Thread-72283] [transport.py] [_log()] userauth is OK
2025-12-12T15:47:20.917 [DEBUG] [Thread-72283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:47:20.917 [DEBUG] [Thread-72283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:47:20.917 [DEBUG] [Thread-72283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:47:20.917 [DEBUG] [Thread-72283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:47:20.940 [INFO] [Thread-72283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:47:20.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:47:21.582 [DEBUG] [Thread-72283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:47:21.582 [DEBUG] [Thread-72283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:47:21.582 [DEBUG] [Thread-72283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:47:21.623 [DEBUG] [Thread-72283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:47:21.623 [DEBUG] [Thread-72283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:47:21.626 [DEBUG] [Thread-72283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:47:21.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:47:21.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:47:21.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:47:21.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:47:21.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:47:21.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:47:21.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:47:21.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:47:21.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:47:21.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.574399 -999.00  +19.90  48.36     33   +3.30 1 1 2 1 1   888    0 15.64 -62.55 ----- 51.4 48.4 314.8 58.0 23.3 -24.5 23.0 -25.4 23.8 -22.6 24.2 -23.1
2025-12-12T15:47:21.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:47:21.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:47:21.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.574399
2025-12-12T15:47:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:47:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:47:21.648 [DEBUG] [Thread-72283] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:47:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:47:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:47:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:47:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:47:03', tmtdew=19.17, humidity=27.69, cloud=0.0, wind=49.76, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:47:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:47:21.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:47:21.749 [DEBUG] [Thread-72286] [transport.py] [_log()] starting thread (client mode): 0xfabc6ec0
2025-12-12T15:47:21.749 [DEBUG] [Thread-72286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:47:21.764 [DEBUG] [Thread-72286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:47:21.764 [INFO] [Thread-72286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:47:21.772 [DEBUG] [Thread-72286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] client lang: <none>
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] server lang: <none>
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] kex follows: False
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:47:21.773 [DEBUG] [Thread-72286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:47:21.774 [DEBUG] [Thread-72286] [transport.py] [_log()] Compression: none
2025-12-12T15:47:21.774 [DEBUG] [Thread-72286] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:47:21.834 [DEBUG] [Thread-72286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:47:21.835 [DEBUG] [Thread-72286] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:47:21.835 [DEBUG] [Thread-72286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:47:21.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:47:21.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:47:21.894 [DEBUG] [Thread-72286] [transport.py] [_log()] userauth is OK
2025-12-12T15:47:21.894 [DEBUG] [Thread-72286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:47:21.894 [DEBUG] [Thread-72286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:47:21.895 [DEBUG] [Thread-72286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:47:21.895 [DEBUG] [Thread-72286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:47:21.914 [INFO] [Thread-72286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:47:21.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:47:21.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:47:22.749 [DEBUG] [Thread-72286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:47:22.749 [DEBUG] [Thread-72286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:47:22.798 [DEBUG] [Thread-72286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:47:22.798 [DEBUG] [Thread-72286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:47:22.807 [DEBUG] [Thread-72286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:47:22.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:47:22.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:47:22.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:47:22.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:47:22.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:47:22.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:47:22.846 [DEBUG] [Thread-72286] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:47:35.501 [DEBUG] [Thread-72288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:50.547 [DEBUG] [Thread-72289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:51.684 [DEBUG] [Thread-72290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:47:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:47:52.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:47:52.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:47:53.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 47, 35), 18.82, 28.49, 0.0, 54.2, 19.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:47:53.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:47:35
2025-12-12T15:47:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:47:53.824 [DEBUG] [Thread-72291] [transport.py] [_log()] starting thread (client mode): 0xf570fd90
2025-12-12T15:47:53.824 [DEBUG] [Thread-72291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:47:53.844 [DEBUG] [Thread-72291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:47:53.844 [INFO] [Thread-72291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:47:53.847 [DEBUG] [Thread-72291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:47:53.847 [DEBUG] [Thread-72291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] client lang: <none>
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] server lang: <none>
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] kex follows: False
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] Compression: none
2025-12-12T15:47:53.848 [DEBUG] [Thread-72291] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:47:53.866 [DEBUG] [Thread-72291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:47:53.866 [DEBUG] [Thread-72291] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:47:53.866 [DEBUG] [Thread-72291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:47:53.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:47:53.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:47:53.868 [DEBUG] [Thread-72291] [transport.py] [_log()] userauth is OK
2025-12-12T15:47:53.868 [DEBUG] [Thread-72291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:47:53.869 [DEBUG] [Thread-72291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:47:53.869 [DEBUG] [Thread-72291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:47:53.869 [DEBUG] [Thread-72291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:47:53.892 [INFO] [Thread-72291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:47:53.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:47:54.526 [DEBUG] [Thread-72291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:47:54.526 [DEBUG] [Thread-72291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:47:54.526 [DEBUG] [Thread-72291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:47:54.567 [DEBUG] [Thread-72291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:47:54.567 [DEBUG] [Thread-72291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:47:54.571 [DEBUG] [Thread-72291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:47:54.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:47:54.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:47:54.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:47:54.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:47:54.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:47:54.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:47:54.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:47:54.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:47:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:47:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.574746 -999.00  +19.40  62.78     32   +2.30 1 1 3 1 1   888    0 15.42 -66.73 ----- 53.2 62.8 326.4 75.6 23.2 -26.1 23.0 -25.3 23.9 -21.1 24.2 -23.4
2025-12-12T15:47:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:47:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:47:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.574746
2025-12-12T15:47:54.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:47:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:47:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:47:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:47:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:47:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:47:35', tmtdew=18.82, humidity=28.49, cloud=0.0, wind=54.2, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:47:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:47:54.596 [DEBUG] [Thread-72291] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:47:54.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:47:54.687 [DEBUG] [Thread-72294] [transport.py] [_log()] starting thread (client mode): 0xf81c18d0
2025-12-12T15:47:54.688 [DEBUG] [Thread-72294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:47:54.702 [DEBUG] [Thread-72294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:47:54.702 [INFO] [Thread-72294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] client lang: <none>
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] server lang: <none>
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] kex follows: False
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:47:54.710 [DEBUG] [Thread-72294] [transport.py] [_log()] Compression: none
2025-12-12T15:47:54.711 [DEBUG] [Thread-72294] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:47:54.772 [DEBUG] [Thread-72294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:47:54.773 [DEBUG] [Thread-72294] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:47:54.773 [DEBUG] [Thread-72294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:47:54.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:47:54.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:47:54.831 [DEBUG] [Thread-72294] [transport.py] [_log()] userauth is OK
2025-12-12T15:47:54.831 [DEBUG] [Thread-72294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:47:54.831 [DEBUG] [Thread-72294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:47:54.831 [DEBUG] [Thread-72294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:47:54.831 [DEBUG] [Thread-72294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:47:54.849 [INFO] [Thread-72294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:47:54.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:47:54.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:47:55.671 [DEBUG] [Thread-72294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:47:55.672 [DEBUG] [Thread-72294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:47:55.720 [DEBUG] [Thread-72294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:47:55.720 [DEBUG] [Thread-72294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:47:55.729 [DEBUG] [Thread-72294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:47:55.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:47:55.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:47:55.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:47:55.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:47:55.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:47:55.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:47:55.771 [DEBUG] [Thread-72294] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:48:03.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:03.917 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:05.572 [DEBUG] [Thread-72296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:20.616 [DEBUG] [Thread-72297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:25.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:48:25.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:48:25.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:48:26.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 48, 8), 19.47, 27.23, 0.0, 56.8, 19.57, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:48:26.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:48:08
2025-12-12T15:48:26.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:48:26.793 [DEBUG] [Thread-72298] [transport.py] [_log()] starting thread (client mode): 0xf81c3cd0
2025-12-12T15:48:26.793 [DEBUG] [Thread-72298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:48:26.814 [DEBUG] [Thread-72298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:48:26.814 [INFO] [Thread-72298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] client lang: <none>
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] server lang: <none>
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] kex follows: False
2025-12-12T15:48:26.815 [DEBUG] [Thread-72298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:48:26.816 [DEBUG] [Thread-72298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:48:26.816 [DEBUG] [Thread-72298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:48:26.816 [DEBUG] [Thread-72298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:48:26.816 [DEBUG] [Thread-72298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:48:26.816 [DEBUG] [Thread-72298] [transport.py] [_log()] Compression: none
2025-12-12T15:48:26.816 [DEBUG] [Thread-72298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:48:26.831 [DEBUG] [Thread-72298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:48:26.831 [DEBUG] [Thread-72298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:48:26.831 [DEBUG] [Thread-72298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:48:26.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:48:26.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:48:26.832 [DEBUG] [Thread-72298] [transport.py] [_log()] userauth is OK
2025-12-12T15:48:26.832 [DEBUG] [Thread-72298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:48:26.832 [DEBUG] [Thread-72298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:48:26.832 [DEBUG] [Thread-72298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:48:26.833 [DEBUG] [Thread-72298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:48:26.861 [INFO] [Thread-72298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:48:26.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:48:27.487 [DEBUG] [Thread-72298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:48:27.487 [DEBUG] [Thread-72298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:48:27.487 [DEBUG] [Thread-72298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:48:27.528 [DEBUG] [Thread-72298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:48:27.529 [DEBUG] [Thread-72298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:48:27.531 [DEBUG] [Thread-72298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:48:27.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:48:27.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:48:27.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:48:27.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:48:27.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:48:27.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:48:27.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.575094 -999.00  +19.70  47.44     30   +2.00 1 1 2 1 1   888    0 15.42 -72.85 ----- 43.5 47.4 327.1 65.1 23.3 -25.0 23.1 -24.6 23.9 -22.2 24.2 -23.0
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.575094
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:48:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:48:08', tmtdew=19.47, humidity=27.23, cloud=0.0, wind=56.8, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:48:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:48:27.548 [DEBUG] [Thread-72298] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:48:27.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:48:27.633 [DEBUG] [Thread-72301] [transport.py] [_log()] starting thread (client mode): 0xf81e6aa0
2025-12-12T15:48:27.633 [DEBUG] [Thread-72301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:48:27.647 [DEBUG] [Thread-72301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:48:27.647 [INFO] [Thread-72301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] client lang: <none>
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] server lang: <none>
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] kex follows: False
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] Compression: none
2025-12-12T15:48:27.655 [DEBUG] [Thread-72301] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:48:27.711 [DEBUG] [Thread-72301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:48:27.711 [DEBUG] [Thread-72301] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:48:27.711 [DEBUG] [Thread-72301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:48:27.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:48:27.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:48:27.767 [DEBUG] [Thread-72301] [transport.py] [_log()] userauth is OK
2025-12-12T15:48:27.768 [DEBUG] [Thread-72301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:48:27.768 [DEBUG] [Thread-72301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:48:27.768 [DEBUG] [Thread-72301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:48:27.768 [DEBUG] [Thread-72301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:48:27.782 [INFO] [Thread-72301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:48:27.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:48:27.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:48:28.618 [DEBUG] [Thread-72301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:48:28.618 [DEBUG] [Thread-72301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:48:28.666 [DEBUG] [Thread-72301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:48:28.666 [DEBUG] [Thread-72301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:48:28.675 [DEBUG] [Thread-72301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:48:28.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:48:28.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:48:28.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:48:28.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:48:28.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:48:28.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:48:28.706 [DEBUG] [Thread-72301] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:48:35.642 [DEBUG] [Thread-72303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:50.682 [DEBUG] [Thread-72304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:51.738 [DEBUG] [Thread-72305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:48:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:48:58.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:48:58.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:48:59.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 48, 40), 20.07, 25.7, 0.0, 55.88, 19.42, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:48:59.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:48:40
2025-12-12T15:48:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:48:59.676 [DEBUG] [Thread-72306] [transport.py] [_log()] starting thread (client mode): 0xf81e6ec0
2025-12-12T15:48:59.676 [DEBUG] [Thread-72306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:48:59.700 [DEBUG] [Thread-72306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:48:59.700 [INFO] [Thread-72306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:48:59.701 [DEBUG] [Thread-72306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] client lang: <none>
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] server lang: <none>
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] kex follows: False
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:48:59.702 [DEBUG] [Thread-72306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:48:59.703 [DEBUG] [Thread-72306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:48:59.703 [DEBUG] [Thread-72306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:48:59.703 [DEBUG] [Thread-72306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:48:59.703 [DEBUG] [Thread-72306] [transport.py] [_log()] Compression: none
2025-12-12T15:48:59.703 [DEBUG] [Thread-72306] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:48:59.714 [DEBUG] [Thread-72306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:48:59.715 [DEBUG] [Thread-72306] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:48:59.716 [DEBUG] [Thread-72306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:48:59.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:48:59.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:48:59.718 [DEBUG] [Thread-72306] [transport.py] [_log()] userauth is OK
2025-12-12T15:48:59.719 [DEBUG] [Thread-72306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:48:59.719 [DEBUG] [Thread-72306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:48:59.719 [DEBUG] [Thread-72306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:48:59.719 [DEBUG] [Thread-72306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:48:59.743 [INFO] [Thread-72306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:48:59.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:49:00.394 [DEBUG] [Thread-72306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:49:00.394 [DEBUG] [Thread-72306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:49:00.395 [DEBUG] [Thread-72306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:49:00.435 [DEBUG] [Thread-72306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:49:00.435 [DEBUG] [Thread-72306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:49:00.438 [DEBUG] [Thread-72306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:49:00.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:49:00.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:49:00.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:49:00.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:49:00.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:49:00.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:49:00.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:49:00.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:49:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:49:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.575441 -999.00  +20.50  44.05     29   +2.20 1 1 2 1 1   888    0 15.02 -69.30 ----- 44.4 44.0 332.9 54.3 23.5 -25.9 23.2 -24.0 23.9 -23.6 24.4 -22.5
2025-12-12T15:49:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:49:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:49:00.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.575441
2025-12-12T15:49:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:49:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:49:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:49:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:49:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:49:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:48:40', tmtdew=20.07, humidity=25.7, cloud=0.0, wind=55.88, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:48:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:49:00.465 [DEBUG] [Thread-72306] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:49:00.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:49:00.554 [DEBUG] [Thread-72309] [transport.py] [_log()] starting thread (client mode): 0xf570d7b0
2025-12-12T15:49:00.554 [DEBUG] [Thread-72309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:49:00.569 [DEBUG] [Thread-72309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:49:00.569 [INFO] [Thread-72309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:49:00.577 [DEBUG] [Thread-72309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] client lang: <none>
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] server lang: <none>
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] kex follows: False
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] Compression: none
2025-12-12T15:49:00.578 [DEBUG] [Thread-72309] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:49:00.635 [DEBUG] [Thread-72309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:49:00.636 [DEBUG] [Thread-72309] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:49:00.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:49:00.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:49:00.638 [DEBUG] [Thread-72309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:49:00.692 [DEBUG] [Thread-72309] [transport.py] [_log()] userauth is OK
2025-12-12T15:49:00.692 [DEBUG] [Thread-72309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:49:00.692 [DEBUG] [Thread-72309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:49:00.692 [DEBUG] [Thread-72309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:49:00.692 [DEBUG] [Thread-72309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:49:00.712 [INFO] [Thread-72309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:49:00.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:49:00.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:49:01.545 [DEBUG] [Thread-72309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:49:01.545 [DEBUG] [Thread-72309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:49:01.593 [DEBUG] [Thread-72309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:49:01.593 [DEBUG] [Thread-72309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:49:01.601 [DEBUG] [Thread-72309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:49:01.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:49:01.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:49:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:49:01.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:49:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:49:01.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:49:01.635 [DEBUG] [Thread-72309] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:49:04.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:49:04.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:49:05.711 [DEBUG] [Thread-72311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:49:20.746 [DEBUG] [Thread-72312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:49:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:49:31.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:49:31.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:49:32.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 49, 12), 20.09, 25.65, 0.0, 51.22, 19.4, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:49:32.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:49:12
2025-12-12T15:49:32.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:49:32.606 [DEBUG] [Thread-72313] [transport.py] [_log()] starting thread (client mode): 0xf570ebc0
2025-12-12T15:49:32.606 [DEBUG] [Thread-72313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:49:32.625 [DEBUG] [Thread-72313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:49:32.625 [INFO] [Thread-72313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:49:32.628 [DEBUG] [Thread-72313] [transport.py] [_log()] client lang: <none>
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] server lang: <none>
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] kex follows: False
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] Compression: none
2025-12-12T15:49:32.629 [DEBUG] [Thread-72313] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:49:32.646 [DEBUG] [Thread-72313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:49:32.646 [DEBUG] [Thread-72313] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:49:32.646 [DEBUG] [Thread-72313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:49:32.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:49:32.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:49:32.647 [DEBUG] [Thread-72313] [transport.py] [_log()] userauth is OK
2025-12-12T15:49:32.647 [DEBUG] [Thread-72313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:49:32.647 [DEBUG] [Thread-72313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:49:32.647 [DEBUG] [Thread-72313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:49:32.647 [DEBUG] [Thread-72313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:49:32.657 [INFO] [Thread-72313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:49:32.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:49:33.275 [DEBUG] [Thread-72313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:49:33.275 [DEBUG] [Thread-72313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:49:33.276 [DEBUG] [Thread-72313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:49:33.316 [DEBUG] [Thread-72313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:49:33.316 [DEBUG] [Thread-72313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:49:33.319 [DEBUG] [Thread-72313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:49:33.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:49:33.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:49:33.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:49:33.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:49:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:49:33.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:49:33.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:49:33.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:49:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:49:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.575788 -999.00  +20.40  45.32     28   +1.40 1 1 2 1 1   888    0 15.43 -69.21 ----- 49.2 45.3 318.0 63.7 23.4 -25.2 23.2 -26.1 24.0 -21.8 24.4 -23.7
2025-12-12T15:49:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:49:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:49:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.575788
2025-12-12T15:49:33.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:49:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:49:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:49:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:49:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:49:33.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:49:12', tmtdew=20.09, humidity=25.65, cloud=0.0, wind=51.22, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:49:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:49:33.344 [DEBUG] [Thread-72313] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:49:33.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:49:33.442 [DEBUG] [Thread-72316] [transport.py] [_log()] starting thread (client mode): 0xf570d750
2025-12-12T15:49:33.442 [DEBUG] [Thread-72316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:49:33.458 [DEBUG] [Thread-72316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:49:33.458 [INFO] [Thread-72316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:49:33.466 [DEBUG] [Thread-72316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] client lang: <none>
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] server lang: <none>
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] kex follows: False
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:49:33.467 [DEBUG] [Thread-72316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:49:33.468 [DEBUG] [Thread-72316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:49:33.468 [DEBUG] [Thread-72316] [transport.py] [_log()] Compression: none
2025-12-12T15:49:33.468 [DEBUG] [Thread-72316] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:49:33.524 [DEBUG] [Thread-72316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:49:33.525 [DEBUG] [Thread-72316] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:49:33.525 [DEBUG] [Thread-72316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:49:33.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:49:33.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:49:33.580 [DEBUG] [Thread-72316] [transport.py] [_log()] userauth is OK
2025-12-12T15:49:33.580 [DEBUG] [Thread-72316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:49:33.580 [DEBUG] [Thread-72316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:49:33.580 [DEBUG] [Thread-72316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:49:33.580 [DEBUG] [Thread-72316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:49:33.600 [INFO] [Thread-72316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:49:33.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:49:33.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:49:34.424 [DEBUG] [Thread-72316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:49:34.424 [DEBUG] [Thread-72316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:49:34.472 [DEBUG] [Thread-72316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:49:34.472 [DEBUG] [Thread-72316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:49:34.481 [DEBUG] [Thread-72316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:49:34.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:49:34.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:49:34.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:49:34.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:49:34.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:49:34.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:49:34.515 [DEBUG] [Thread-72316] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:49:35.776 [DEBUG] [Thread-72318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:49:50.825 [DEBUG] [Thread-72319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:49:51.795 [DEBUG] [Thread-72320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:04.208 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:04.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:50:04.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:50:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:50:05.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 49, 44), 20.48, 25.07, 0.0, 53.43, 19.23, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:50:05.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:49:44
2025-12-12T15:50:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:50:05.484 [DEBUG] [Thread-72321] [transport.py] [_log()] starting thread (client mode): 0xf57bda20
2025-12-12T15:50:05.484 [DEBUG] [Thread-72321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:50:05.495 [DEBUG] [Thread-72321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:50:05.495 [INFO] [Thread-72321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] client lang: <none>
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] server lang: <none>
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] kex follows: False
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] Compression: none
2025-12-12T15:50:05.498 [DEBUG] [Thread-72321] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:50:05.513 [DEBUG] [Thread-72321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:50:05.513 [DEBUG] [Thread-72321] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:50:05.514 [DEBUG] [Thread-72321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:50:05.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:50:05.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:50:05.515 [DEBUG] [Thread-72321] [transport.py] [_log()] userauth is OK
2025-12-12T15:50:05.516 [DEBUG] [Thread-72321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:50:05.516 [DEBUG] [Thread-72321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:50:05.516 [DEBUG] [Thread-72321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:50:05.516 [DEBUG] [Thread-72321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:50:05.534 [INFO] [Thread-72321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:50:05.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:50:05.855 [DEBUG] [Thread-72323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:06.177 [DEBUG] [Thread-72321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:50:06.177 [DEBUG] [Thread-72321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:50:06.178 [DEBUG] [Thread-72321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:50:06.218 [DEBUG] [Thread-72321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:50:06.218 [DEBUG] [Thread-72321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:50:06.220 [DEBUG] [Thread-72321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:50:06.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:50:06.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:50:06.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:50:06.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:50:06.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:50:06.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:50:06.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:50:06.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:50:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:50:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.576135 -999.00  +20.20  38.98     29   +1.70 1 1 2 1 1   888    0 15.50 -57.13 ----- 43.8 39.0 326.2 57.1 23.4 -25.4 23.2 -25.1 24.0 -23.9 24.4 -23.6
2025-12-12T15:50:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:50:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:50:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.576135
2025-12-12T15:50:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:50:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:50:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:50:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:50:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:50:06.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:49:44', tmtdew=20.48, humidity=25.07, cloud=0.0, wind=53.43, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:49:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:50:06.380 [DEBUG] [Thread-72321] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:50:06.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:50:06.464 [DEBUG] [Thread-72325] [transport.py] [_log()] starting thread (client mode): 0xf5700dc0
2025-12-12T15:50:06.464 [DEBUG] [Thread-72325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:50:06.479 [DEBUG] [Thread-72325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:50:06.479 [INFO] [Thread-72325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:50:06.487 [DEBUG] [Thread-72325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:50:06.487 [DEBUG] [Thread-72325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:50:06.487 [DEBUG] [Thread-72325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:50:06.487 [DEBUG] [Thread-72325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:06.487 [DEBUG] [Thread-72325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] client lang: <none>
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] server lang: <none>
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] kex follows: False
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:50:06.488 [DEBUG] [Thread-72325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:50:06.489 [DEBUG] [Thread-72325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:50:06.489 [DEBUG] [Thread-72325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:50:06.489 [DEBUG] [Thread-72325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:50:06.489 [DEBUG] [Thread-72325] [transport.py] [_log()] Compression: none
2025-12-12T15:50:06.489 [DEBUG] [Thread-72325] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:50:06.547 [DEBUG] [Thread-72325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:50:06.548 [DEBUG] [Thread-72325] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:50:06.548 [DEBUG] [Thread-72325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:50:06.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:50:06.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:50:06.607 [DEBUG] [Thread-72325] [transport.py] [_log()] userauth is OK
2025-12-12T15:50:06.607 [DEBUG] [Thread-72325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:50:06.607 [DEBUG] [Thread-72325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:50:06.607 [DEBUG] [Thread-72325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:50:06.607 [DEBUG] [Thread-72325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:50:06.621 [INFO] [Thread-72325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:50:06.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:50:06.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:50:07.473 [DEBUG] [Thread-72325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:50:07.473 [DEBUG] [Thread-72325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:50:07.521 [DEBUG] [Thread-72325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:50:07.521 [DEBUG] [Thread-72325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:50:07.530 [DEBUG] [Thread-72325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:50:07.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:50:07.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:50:07.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:50:07.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:50:07.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:50:07.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:50:07.564 [DEBUG] [Thread-72325] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:50:20.880 [DEBUG] [Thread-72327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:35.921 [DEBUG] [Thread-72328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:50:37.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:50:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:50:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 50, 16), 20.4, 25.18, 0.0, 52.63, 19.09, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:50:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:50:16
2025-12-12T15:50:38.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:50:38.538 [DEBUG] [Thread-72329] [transport.py] [_log()] starting thread (client mode): 0xf81e45e0
2025-12-12T15:50:38.538 [DEBUG] [Thread-72329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:50:38.549 [DEBUG] [Thread-72329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:50:38.549 [INFO] [Thread-72329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] client lang: <none>
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] server lang: <none>
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] kex follows: False
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:50:38.550 [DEBUG] [Thread-72329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:50:38.551 [DEBUG] [Thread-72329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:50:38.551 [DEBUG] [Thread-72329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:50:38.551 [DEBUG] [Thread-72329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:50:38.551 [DEBUG] [Thread-72329] [transport.py] [_log()] Compression: none
2025-12-12T15:50:38.551 [DEBUG] [Thread-72329] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:50:38.559 [DEBUG] [Thread-72329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:50:38.560 [DEBUG] [Thread-72329] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:50:38.560 [DEBUG] [Thread-72329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:50:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:50:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:50:38.561 [DEBUG] [Thread-72329] [transport.py] [_log()] userauth is OK
2025-12-12T15:50:38.561 [DEBUG] [Thread-72329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:50:38.561 [DEBUG] [Thread-72329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:50:38.561 [DEBUG] [Thread-72329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:50:38.561 [DEBUG] [Thread-72329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:50:38.588 [INFO] [Thread-72329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:50:38.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:50:39.191 [DEBUG] [Thread-72329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:50:39.192 [DEBUG] [Thread-72329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:50:39.192 [DEBUG] [Thread-72329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:50:39.233 [DEBUG] [Thread-72329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:50:39.233 [DEBUG] [Thread-72329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:50:39.236 [DEBUG] [Thread-72329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:50:39.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:50:39.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:50:39.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:50:39.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:50:39.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:50:39.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:50:39.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:50:39.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:50:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:50:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.576482 -999.00  +20.00  38.62     30   +2.00 1 1 2 1 1   888    0 15.95 -51.44 ----- 37.0 38.6 351.9 55.7 23.5 -25.9 23.2 -25.9 24.0 -23.6 24.4 -24.7
2025-12-12T15:50:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:50:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:50:39.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.576482
2025-12-12T15:50:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:50:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:50:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:50:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:50:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:50:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:50:16', tmtdew=20.4, humidity=25.18, cloud=0.0, wind=52.63, temperature=19.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:50:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:50:39.261 [DEBUG] [Thread-72329] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:50:39.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:50:39.357 [DEBUG] [Thread-72332] [transport.py] [_log()] starting thread (client mode): 0xf81e4700
2025-12-12T15:50:39.357 [DEBUG] [Thread-72332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:50:39.372 [DEBUG] [Thread-72332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:50:39.372 [INFO] [Thread-72332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:50:39.379 [DEBUG] [Thread-72332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] client lang: <none>
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] server lang: <none>
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] kex follows: False
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] Compression: none
2025-12-12T15:50:39.380 [DEBUG] [Thread-72332] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:50:39.439 [DEBUG] [Thread-72332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:50:39.440 [DEBUG] [Thread-72332] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:50:39.440 [DEBUG] [Thread-72332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:50:39.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:50:39.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:50:39.496 [DEBUG] [Thread-72332] [transport.py] [_log()] userauth is OK
2025-12-12T15:50:39.496 [DEBUG] [Thread-72332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:50:39.496 [DEBUG] [Thread-72332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:50:39.496 [DEBUG] [Thread-72332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:50:39.496 [DEBUG] [Thread-72332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:50:39.510 [INFO] [Thread-72332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:50:39.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:50:39.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:50:40.338 [DEBUG] [Thread-72332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:50:40.338 [DEBUG] [Thread-72332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:50:40.386 [DEBUG] [Thread-72332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:50:40.386 [DEBUG] [Thread-72332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:50:40.394 [DEBUG] [Thread-72332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:50:40.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:50:40.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:50:40.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:50:40.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:50:40.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:50:40.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:50:40.428 [DEBUG] [Thread-72332] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:50:50.951 [DEBUG] [Thread-72334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:50:51.847 [DEBUG] [Thread-72335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:04.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:04.350 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:06.003 [DEBUG] [Thread-72336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:10.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:51:10.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:51:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:51:11.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 50, 48), 20.09, 25.8, 0.0, 50.0, 19.5, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:51:11.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:50:48
2025-12-12T15:51:11.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:51:11.404 [DEBUG] [Thread-72337] [transport.py] [_log()] starting thread (client mode): 0xf57be2f0
2025-12-12T15:51:11.404 [DEBUG] [Thread-72337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:51:11.423 [DEBUG] [Thread-72337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:51:11.423 [INFO] [Thread-72337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:51:11.425 [DEBUG] [Thread-72337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:51:11.425 [DEBUG] [Thread-72337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] client lang: <none>
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] server lang: <none>
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] kex follows: False
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] Compression: none
2025-12-12T15:51:11.426 [DEBUG] [Thread-72337] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:51:11.441 [DEBUG] [Thread-72337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:51:11.441 [DEBUG] [Thread-72337] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:51:11.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:51:11.442 [DEBUG] [Thread-72337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:51:11.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:51:11.444 [DEBUG] [Thread-72337] [transport.py] [_log()] userauth is OK
2025-12-12T15:51:11.444 [DEBUG] [Thread-72337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:51:11.444 [DEBUG] [Thread-72337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:51:11.444 [DEBUG] [Thread-72337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:51:11.445 [DEBUG] [Thread-72337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:51:11.468 [INFO] [Thread-72337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:51:11.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:51:12.112 [DEBUG] [Thread-72337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:51:12.112 [DEBUG] [Thread-72337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:51:12.112 [DEBUG] [Thread-72337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:51:12.153 [DEBUG] [Thread-72337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:51:12.153 [DEBUG] [Thread-72337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:51:12.157 [DEBUG] [Thread-72337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:51:12.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:51:12.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:51:12.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:51:12.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:51:12.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:51:12.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:51:12.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:51:12.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:51:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:51:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.577177 -999.00  +20.00  42.39     31   +2.70 1 1 2 1 1   888    0 16.12 -52.88 ----- 55.1 42.4 331.0 61.6 23.5 -25.9 23.2 -25.1 24.1 -23.6 24.5 -23.3
2025-12-12T15:51:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:51:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:51:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.577177
2025-12-12T15:51:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:51:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:51:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:51:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:51:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:51:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:50:48', tmtdew=20.09, humidity=25.8, cloud=0.0, wind=50.0, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:51:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:51:12.187 [DEBUG] [Thread-72337] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:51:12.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:51:12.284 [DEBUG] [Thread-72340] [transport.py] [_log()] starting thread (client mode): 0xf81f35e0
2025-12-12T15:51:12.284 [DEBUG] [Thread-72340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:51:12.299 [DEBUG] [Thread-72340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:51:12.299 [INFO] [Thread-72340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:51:12.306 [DEBUG] [Thread-72340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:51:12.306 [DEBUG] [Thread-72340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] client lang: <none>
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] server lang: <none>
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] kex follows: False
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] Compression: none
2025-12-12T15:51:12.307 [DEBUG] [Thread-72340] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:51:12.363 [DEBUG] [Thread-72340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:51:12.364 [DEBUG] [Thread-72340] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:51:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:51:12.365 [DEBUG] [Thread-72340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:51:12.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:51:12.420 [DEBUG] [Thread-72340] [transport.py] [_log()] userauth is OK
2025-12-12T15:51:12.420 [DEBUG] [Thread-72340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:51:12.420 [DEBUG] [Thread-72340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:51:12.420 [DEBUG] [Thread-72340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:51:12.420 [DEBUG] [Thread-72340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:51:12.439 [INFO] [Thread-72340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:51:12.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:51:12.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:51:13.285 [DEBUG] [Thread-72340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:51:13.285 [DEBUG] [Thread-72340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:51:13.333 [DEBUG] [Thread-72340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:51:13.333 [DEBUG] [Thread-72340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:51:13.341 [DEBUG] [Thread-72340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:51:13.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:51:13.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:51:13.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:51:13.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:51:13.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:51:13.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:51:13.375 [DEBUG] [Thread-72340] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:51:21.033 [DEBUG] [Thread-72342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:36.072 [DEBUG] [Thread-72343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:51:43.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:51:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:51:44.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 51, 20), 19.96, 26.06, 0.0, 56.74, 19.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:51:44.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:51:20
2025-12-12T15:51:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:51:44.402 [DEBUG] [Thread-72344] [transport.py] [_log()] starting thread (client mode): 0xf575cfa0
2025-12-12T15:51:44.402 [DEBUG] [Thread-72344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:51:44.421 [DEBUG] [Thread-72344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:51:44.421 [INFO] [Thread-72344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] client lang: <none>
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] server lang: <none>
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] kex follows: False
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] Compression: none
2025-12-12T15:51:44.423 [DEBUG] [Thread-72344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:51:44.430 [DEBUG] [Thread-72344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:51:44.430 [DEBUG] [Thread-72344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:51:44.430 [DEBUG] [Thread-72344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:51:44.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:51:44.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:51:44.431 [DEBUG] [Thread-72344] [transport.py] [_log()] userauth is OK
2025-12-12T15:51:44.431 [DEBUG] [Thread-72344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:51:44.431 [DEBUG] [Thread-72344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:51:44.431 [DEBUG] [Thread-72344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:51:44.431 [DEBUG] [Thread-72344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:51:44.440 [INFO] [Thread-72344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:51:44.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:51:45.031 [DEBUG] [Thread-72344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:51:45.031 [DEBUG] [Thread-72344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:51:45.031 [DEBUG] [Thread-72344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:51:45.072 [DEBUG] [Thread-72344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:51:45.072 [DEBUG] [Thread-72344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:51:45.074 [DEBUG] [Thread-72344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:51:45.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:51:45.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:51:45.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:51:45.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:51:45.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:51:45.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:51:45.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.577524 -999.00  +19.80  42.44     32   +2.80 1 1 2 1 1   888    0 15.88 -57.52 ----- 56.0 42.4 339.4 68.0 23.5 -25.9 23.2 -25.7 24.1 -23.6 24.5 -24.0
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.577524
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:51:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:51:20', tmtdew=19.96, humidity=26.06, cloud=0.0, wind=56.74, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:51:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:51:45.093 [DEBUG] [Thread-72344] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:51:45.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:51:45.183 [DEBUG] [Thread-72347] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-12T15:51:45.183 [DEBUG] [Thread-72347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:51:45.199 [DEBUG] [Thread-72347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:51:45.199 [INFO] [Thread-72347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:51:45.206 [DEBUG] [Thread-72347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] client lang: <none>
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] server lang: <none>
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] kex follows: False
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] Compression: none
2025-12-12T15:51:45.207 [DEBUG] [Thread-72347] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:51:45.262 [DEBUG] [Thread-72347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:51:45.263 [DEBUG] [Thread-72347] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:51:45.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:51:45.263 [DEBUG] [Thread-72347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:51:45.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:51:45.319 [DEBUG] [Thread-72347] [transport.py] [_log()] userauth is OK
2025-12-12T15:51:45.319 [DEBUG] [Thread-72347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:51:45.319 [DEBUG] [Thread-72347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:51:45.319 [DEBUG] [Thread-72347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:51:45.320 [DEBUG] [Thread-72347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:51:45.333 [INFO] [Thread-72347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:51:45.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:51:45.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:51:46.194 [DEBUG] [Thread-72347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:51:46.194 [DEBUG] [Thread-72347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:51:46.243 [DEBUG] [Thread-72347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:51:46.243 [DEBUG] [Thread-72347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:51:46.254 [DEBUG] [Thread-72347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:51:46.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:51:46.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:51:46.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:51:46.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:51:46.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:51:46.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:51:46.286 [DEBUG] [Thread-72347] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:51:51.104 [DEBUG] [Thread-72349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:51:51.904 [DEBUG] [Thread-72350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:04.502 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:04.503 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:06.147 [DEBUG] [Thread-72351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:52:16.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:52:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:52:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 51, 52), 19.28, 27.46, 0.0, 49.35, 19.39, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:52:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:51:52
2025-12-12T15:52:17.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:52:17.288 [DEBUG] [Thread-72352] [transport.py] [_log()] starting thread (client mode): 0xf574c3d0
2025-12-12T15:52:17.288 [DEBUG] [Thread-72352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:52:17.301 [DEBUG] [Thread-72352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:52:17.301 [INFO] [Thread-72352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] client lang: <none>
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] server lang: <none>
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] kex follows: False
2025-12-12T15:52:17.303 [DEBUG] [Thread-72352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:52:17.304 [DEBUG] [Thread-72352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:52:17.304 [DEBUG] [Thread-72352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:52:17.304 [DEBUG] [Thread-72352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:52:17.304 [DEBUG] [Thread-72352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:52:17.304 [DEBUG] [Thread-72352] [transport.py] [_log()] Compression: none
2025-12-12T15:52:17.304 [DEBUG] [Thread-72352] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:52:17.316 [DEBUG] [Thread-72352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:52:17.317 [DEBUG] [Thread-72352] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:52:17.317 [DEBUG] [Thread-72352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:52:17.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:52:17.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:52:17.318 [DEBUG] [Thread-72352] [transport.py] [_log()] userauth is OK
2025-12-12T15:52:17.318 [DEBUG] [Thread-72352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:52:17.319 [DEBUG] [Thread-72352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:52:17.319 [DEBUG] [Thread-72352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:52:17.319 [DEBUG] [Thread-72352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:52:17.335 [INFO] [Thread-72352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:52:17.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:52:17.923 [DEBUG] [Thread-72352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:52:17.923 [DEBUG] [Thread-72352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:52:17.923 [DEBUG] [Thread-72352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:52:17.964 [DEBUG] [Thread-72352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:52:17.964 [DEBUG] [Thread-72352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:52:17.966 [DEBUG] [Thread-72352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:52:17.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:52:17.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:52:17.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:52:17.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:52:17.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:52:17.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:52:17.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:52:17.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:52:17.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:52:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.577871 -999.00  +19.90  42.79     32   +2.90 1 1 2 1 1   888    0 15.23 -65.71 ----- 52.9 42.8 320.6 61.3 23.5 -26.3 23.4 -25.3 24.1 -21.9 24.5 -24.6
2025-12-12T15:52:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:52:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:52:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.577871
2025-12-12T15:52:17.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:52:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:52:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:52:17.988 [DEBUG] [Thread-72352] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:52:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:52:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:52:17.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:51:52', tmtdew=19.28, humidity=27.46, cloud=0.0, wind=49.35, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:52:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:52:18.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:52:18.085 [DEBUG] [Thread-72355] [transport.py] [_log()] starting thread (client mode): 0xf81e78b0
2025-12-12T15:52:18.085 [DEBUG] [Thread-72355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:52:18.101 [DEBUG] [Thread-72355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:52:18.101 [INFO] [Thread-72355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:18.108 [DEBUG] [Thread-72355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] client lang: <none>
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] server lang: <none>
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] kex follows: False
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] Compression: none
2025-12-12T15:52:18.109 [DEBUG] [Thread-72355] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:52:18.168 [DEBUG] [Thread-72355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:52:18.168 [DEBUG] [Thread-72355] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:52:18.169 [DEBUG] [Thread-72355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:52:18.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:52:18.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:52:18.224 [DEBUG] [Thread-72355] [transport.py] [_log()] userauth is OK
2025-12-12T15:52:18.224 [DEBUG] [Thread-72355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:52:18.224 [DEBUG] [Thread-72355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:52:18.224 [DEBUG] [Thread-72355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:52:18.224 [DEBUG] [Thread-72355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:52:18.246 [INFO] [Thread-72355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:52:18.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:52:18.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:52:19.142 [DEBUG] [Thread-72355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:52:19.143 [DEBUG] [Thread-72355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:52:19.191 [DEBUG] [Thread-72355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:52:19.191 [DEBUG] [Thread-72355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:52:19.200 [DEBUG] [Thread-72355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:52:19.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:52:19.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')
2025-12-12T15:52:19.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:52:19.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:52:19.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:52:19.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:52:19.234 [DEBUG] [Thread-72355] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:52:21.176 [DEBUG] [Thread-72357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:36.216 [DEBUG] [Thread-72358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:49.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:52:49.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:52:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:52:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 52, 24), 19.14, 27.74, 0.0, 47.48, 19.39, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:52:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:52:24
2025-12-12T15:52:50.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:52:50.229 [DEBUG] [Thread-72359] [transport.py] [_log()] starting thread (client mode): 0xf574d4e0
2025-12-12T15:52:50.229 [DEBUG] [Thread-72359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:52:50.248 [DEBUG] [Thread-72359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:52:50.248 [INFO] [Thread-72359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] client lang: <none>
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] server lang: <none>
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] kex follows: False
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] Compression: none
2025-12-12T15:52:50.249 [DEBUG] [Thread-72359] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:52:50.264 [DEBUG] [Thread-72359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:52:50.264 [DEBUG] [Thread-72359] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:52:50.264 [DEBUG] [Thread-72359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:52:50.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:52:50.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:52:50.266 [DEBUG] [Thread-72359] [transport.py] [_log()] userauth is OK
2025-12-12T15:52:50.266 [DEBUG] [Thread-72359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:52:50.266 [DEBUG] [Thread-72359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:52:50.266 [DEBUG] [Thread-72359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:52:50.266 [DEBUG] [Thread-72359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:52:50.285 [INFO] [Thread-72359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:52:50.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:52:50.828 [DEBUG] [Thread-72359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:52:50.829 [DEBUG] [Thread-72359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:52:50.829 [DEBUG] [Thread-72359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:52:50.870 [DEBUG] [Thread-72359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:52:50.870 [DEBUG] [Thread-72359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:52:50.873 [DEBUG] [Thread-72359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:52:50.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:52:50.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:52:50.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:52:50.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:52:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:52:50.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:52:50.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:52:50.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:52:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:52:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.578219 -999.00  +19.40  45.74     33   +2.90 1 1 2 1 1   888    0 15.97 -64.73 ----- 52.1 45.7 317.2 63.2 23.3 -26.8 23.1 -26.8 23.9 -26.5 24.3 -23.7
2025-12-12T15:52:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:52:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:52:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.578219
2025-12-12T15:52:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:52:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:52:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:52:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:52:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:52:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:52:24', tmtdew=19.14, humidity=27.74, cloud=0.0, wind=47.48, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:52:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:52:50.900 [DEBUG] [Thread-72359] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:52:50.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:52:50.998 [DEBUG] [Thread-72362] [transport.py] [_log()] starting thread (client mode): 0xf570f970
2025-12-12T15:52:50.998 [DEBUG] [Thread-72362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:52:51.013 [DEBUG] [Thread-72362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:52:51.013 [INFO] [Thread-72362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:51.021 [DEBUG] [Thread-72362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] client lang: <none>
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] server lang: <none>
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] kex follows: False
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] Compression: none
2025-12-12T15:52:51.022 [DEBUG] [Thread-72362] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:52:51.080 [DEBUG] [Thread-72362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:52:51.080 [DEBUG] [Thread-72362] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:52:51.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:52:51.081 [DEBUG] [Thread-72362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:52:51.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:52:51.136 [DEBUG] [Thread-72362] [transport.py] [_log()] userauth is OK
2025-12-12T15:52:51.136 [DEBUG] [Thread-72362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:52:51.136 [DEBUG] [Thread-72362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:52:51.136 [DEBUG] [Thread-72362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:52:51.136 [DEBUG] [Thread-72362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:52:51.155 [INFO] [Thread-72362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:52:51.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:52:51.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:52:51.248 [DEBUG] [Thread-72364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:51.959 [DEBUG] [Thread-72365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:52:51.993 [DEBUG] [Thread-72362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:52:51.994 [DEBUG] [Thread-72362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:52:52.042 [DEBUG] [Thread-72362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:52:52.042 [DEBUG] [Thread-72362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:52:52.051 [DEBUG] [Thread-72362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:52:52.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:52:52.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:52:52.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:52:52.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:52:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:52:52.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:52:52.086 [DEBUG] [Thread-72362] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:53:04.644 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:04.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:06.292 [DEBUG] [Thread-72366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:21.325 [DEBUG] [Thread-72367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:53:22.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:53:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:53:22.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 52, 56), 19.26, 27.31, 0.0, 56.58, 19.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:53:22.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:52:56
2025-12-12T15:53:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:53:23.062 [DEBUG] [Thread-72368] [transport.py] [_log()] starting thread (client mode): 0xf57bfdf0
2025-12-12T15:53:23.063 [DEBUG] [Thread-72368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:53:23.081 [DEBUG] [Thread-72368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:53:23.082 [INFO] [Thread-72368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:53:23.083 [DEBUG] [Thread-72368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:53:23.083 [DEBUG] [Thread-72368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:53:23.083 [DEBUG] [Thread-72368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:53:23.083 [DEBUG] [Thread-72368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] client lang: <none>
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] server lang: <none>
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] kex follows: False
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] Compression: none
2025-12-12T15:53:23.084 [DEBUG] [Thread-72368] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:53:23.099 [DEBUG] [Thread-72368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:53:23.099 [DEBUG] [Thread-72368] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:53:23.100 [DEBUG] [Thread-72368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:53:23.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:53:23.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:53:23.104 [DEBUG] [Thread-72368] [transport.py] [_log()] userauth is OK
2025-12-12T15:53:23.104 [DEBUG] [Thread-72368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:53:23.105 [DEBUG] [Thread-72368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:53:23.105 [DEBUG] [Thread-72368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:53:23.105 [DEBUG] [Thread-72368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:53:23.130 [INFO] [Thread-72368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:53:23.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:53:23.735 [DEBUG] [Thread-72368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:53:23.735 [DEBUG] [Thread-72368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:53:23.736 [DEBUG] [Thread-72368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:53:23.776 [DEBUG] [Thread-72368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:53:23.776 [DEBUG] [Thread-72368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:53:23.778 [DEBUG] [Thread-72368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:53:23.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:53:23.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:53:23.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:53:23.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:53:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:53:23.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:53:23.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:53:23.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:53:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:53:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.578566 -999.00  +20.20  32.46     32   +3.30 1 2 2 1 1   888    0 15.15 -73.08 ----- 46.2 32.5 321.8 57.6 23.4 -25.3 23.2 -24.5 23.8 -21.5 24.4 -22.7
2025-12-12T15:53:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:53:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:53:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.578566
2025-12-12T15:53:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:53:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:53:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:53:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:53:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T15:53:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:52:56', tmtdew=19.26, humidity=27.31, cloud=0.0, wind=56.58, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:53:08.102', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:53:23.798 [DEBUG] [Thread-72368] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:53:23.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:53:23.894 [DEBUG] [Thread-72371] [transport.py] [_log()] starting thread (client mode): 0xf570f160
2025-12-12T15:53:23.894 [DEBUG] [Thread-72371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:53:23.909 [DEBUG] [Thread-72371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:53:23.909 [INFO] [Thread-72371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:53:23.916 [DEBUG] [Thread-72371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] client lang: <none>
2025-12-12T15:53:23.917 [DEBUG] [Thread-72371] [transport.py] [_log()] server lang: <none>
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] kex follows: False
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] Compression: none
2025-12-12T15:53:23.918 [DEBUG] [Thread-72371] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:53:23.976 [DEBUG] [Thread-72371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:53:23.976 [DEBUG] [Thread-72371] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:53:23.977 [DEBUG] [Thread-72371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:53:23.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:53:23.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:53:24.032 [DEBUG] [Thread-72371] [transport.py] [_log()] userauth is OK
2025-12-12T15:53:24.032 [DEBUG] [Thread-72371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:53:24.032 [DEBUG] [Thread-72371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:53:24.032 [DEBUG] [Thread-72371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:53:24.032 [DEBUG] [Thread-72371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:53:24.051 [INFO] [Thread-72371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:53:24.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:53:24.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:53:24.871 [DEBUG] [Thread-72371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:53:24.872 [DEBUG] [Thread-72371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:53:24.920 [DEBUG] [Thread-72371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:53:24.920 [DEBUG] [Thread-72371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:53:24.929 [DEBUG] [Thread-72371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:53:24.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:53:24.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:53:24.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:53:24.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:53:24.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:53:24.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:53:24.967 [DEBUG] [Thread-72371] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:53:36.354 [DEBUG] [Thread-72373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:51.407 [DEBUG] [Thread-72374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:52.007 [DEBUG] [Thread-72375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:53:54.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:53:54.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:53:54.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:53:55.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 53, 28), 19.35, 27.14, 0.0, 56.28, 19.55, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:53:55.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:53:28
2025-12-12T15:53:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:53:55.960 [DEBUG] [Thread-72376] [transport.py] [_log()] starting thread (client mode): 0xf570d120
2025-12-12T15:53:55.960 [DEBUG] [Thread-72376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:53:55.983 [DEBUG] [Thread-72376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:53:55.983 [INFO] [Thread-72376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:53:55.985 [DEBUG] [Thread-72376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:53:55.985 [DEBUG] [Thread-72376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:53:55.985 [DEBUG] [Thread-72376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:53:55.985 [DEBUG] [Thread-72376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] client lang: <none>
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] server lang: <none>
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] kex follows: False
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] Compression: none
2025-12-12T15:53:55.986 [DEBUG] [Thread-72376] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:53:56.004 [DEBUG] [Thread-72376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:53:56.005 [DEBUG] [Thread-72376] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:53:56.005 [DEBUG] [Thread-72376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:53:56.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:53:56.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:53:56.007 [DEBUG] [Thread-72376] [transport.py] [_log()] userauth is OK
2025-12-12T15:53:56.007 [DEBUG] [Thread-72376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:53:56.007 [DEBUG] [Thread-72376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:53:56.007 [DEBUG] [Thread-72376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:53:56.007 [DEBUG] [Thread-72376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:53:56.021 [INFO] [Thread-72376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:53:56.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:53:56.671 [DEBUG] [Thread-72376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:53:56.672 [DEBUG] [Thread-72376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:53:56.672 [DEBUG] [Thread-72376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:53:56.713 [DEBUG] [Thread-72376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:53:56.713 [DEBUG] [Thread-72376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:53:56.715 [DEBUG] [Thread-72376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:53:56.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:53:56.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:53:56.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:53:56.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:53:56.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:53:56.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:53:56.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:53:56.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:53:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:53:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.578913 -999.00  +19.90  43.80     32   +2.90 1 1 2 1 1   888    0 15.27 -79.94 ----- 53.9 43.8 331.6 55.6 23.5 -25.6 23.3 -25.2 24.1 -22.4 24.5 -23.1
2025-12-12T15:53:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:53:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:53:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.578913
2025-12-12T15:53:56.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:53:56.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:53:56.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:53:56.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:53:56.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:53:56.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:53:28', tmtdew=19.35, humidity=27.14, cloud=0.0, wind=56.28, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:53:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:53:56.737 [DEBUG] [Thread-72376] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:53:56.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:53:56.833 [DEBUG] [Thread-72379] [transport.py] [_log()] starting thread (client mode): 0xf57be0e0
2025-12-12T15:53:56.833 [DEBUG] [Thread-72379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:53:56.848 [DEBUG] [Thread-72379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:53:56.848 [INFO] [Thread-72379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:53:56.861 [DEBUG] [Thread-72379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:53:56.861 [DEBUG] [Thread-72379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:53:56.861 [DEBUG] [Thread-72379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:53:56.861 [DEBUG] [Thread-72379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] client lang: <none>
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] server lang: <none>
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] kex follows: False
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:53:56.862 [DEBUG] [Thread-72379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:53:56.863 [DEBUG] [Thread-72379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:53:56.863 [DEBUG] [Thread-72379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:53:56.863 [DEBUG] [Thread-72379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:53:56.863 [DEBUG] [Thread-72379] [transport.py] [_log()] Compression: none
2025-12-12T15:53:56.863 [DEBUG] [Thread-72379] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:53:56.920 [DEBUG] [Thread-72379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:53:56.920 [DEBUG] [Thread-72379] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:53:56.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:53:56.921 [DEBUG] [Thread-72379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:53:56.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:53:56.981 [DEBUG] [Thread-72379] [transport.py] [_log()] userauth is OK
2025-12-12T15:53:56.982 [DEBUG] [Thread-72379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:53:56.982 [DEBUG] [Thread-72379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:53:56.982 [DEBUG] [Thread-72379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:53:56.982 [DEBUG] [Thread-72379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:53:57.004 [INFO] [Thread-72379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:53:57.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:53:57.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:53:57.833 [DEBUG] [Thread-72379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:53:57.833 [DEBUG] [Thread-72379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:53:57.882 [DEBUG] [Thread-72379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:53:57.882 [DEBUG] [Thread-72379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:53:57.891 [DEBUG] [Thread-72379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:53:57.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:53:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:53:57.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:53:57.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:53:57.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:53:57.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:53:57.926 [DEBUG] [Thread-72379] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:54:04.784 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:54:04.785 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:54:06.436 [DEBUG] [Thread-72381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:54:21.475 [DEBUG] [Thread-72382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:54:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:54:27.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:54:27.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:54:28.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 53, 28), 19.2, 27.64, 0.0, 49.08, 19.7, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:54:28.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:53:28
2025-12-12T15:54:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:54:28.907 [DEBUG] [Thread-72383] [transport.py] [_log()] starting thread (client mode): 0xf57be890
2025-12-12T15:54:28.907 [DEBUG] [Thread-72383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:54:28.928 [DEBUG] [Thread-72383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:54:28.928 [INFO] [Thread-72383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:54:28.932 [DEBUG] [Thread-72383] [transport.py] [_log()] client lang: <none>
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] server lang: <none>
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] kex follows: False
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] Compression: none
2025-12-12T15:54:28.933 [DEBUG] [Thread-72383] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:54:28.952 [DEBUG] [Thread-72383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:54:28.953 [DEBUG] [Thread-72383] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:54:28.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:54:28.953 [DEBUG] [Thread-72383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:54:28.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:54:28.955 [DEBUG] [Thread-72383] [transport.py] [_log()] userauth is OK
2025-12-12T15:54:28.955 [DEBUG] [Thread-72383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:54:28.955 [DEBUG] [Thread-72383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:54:28.955 [DEBUG] [Thread-72383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:54:28.956 [DEBUG] [Thread-72383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:54:28.972 [INFO] [Thread-72383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:54:28.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:54:29.606 [DEBUG] [Thread-72383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:54:29.606 [DEBUG] [Thread-72383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:54:29.607 [DEBUG] [Thread-72383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:54:29.647 [DEBUG] [Thread-72383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:54:29.647 [DEBUG] [Thread-72383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:54:29.650 [DEBUG] [Thread-72383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:54:29.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:54:29.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:54:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:54:29.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:54:29.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:54:29.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:54:29.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:54:29.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:54:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:54:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.579260 -999.00  +19.50  50.01     33   +2.80 1 1 2 1 1   888    0 14.93 -83.50 ----- 54.8 50.0 323.4 67.1 23.4 -26.2 23.2 -25.4 24.1 -26.9 24.5 -23.9
2025-12-12T15:54:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:54:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:54:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.579260
2025-12-12T15:54:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:54:29.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:54:29.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:54:29.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:54:29.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:54:29.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:53:28', tmtdew=19.2, humidity=27.64, cloud=0.0, wind=49.08, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:54:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:54:29.675 [DEBUG] [Thread-72383] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:54:29.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:54:29.771 [DEBUG] [Thread-72386] [transport.py] [_log()] starting thread (client mode): 0xf574d600
2025-12-12T15:54:29.771 [DEBUG] [Thread-72386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:54:29.785 [DEBUG] [Thread-72386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:54:29.785 [INFO] [Thread-72386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:54:29.795 [DEBUG] [Thread-72386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:54:29.795 [DEBUG] [Thread-72386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:54:29.795 [DEBUG] [Thread-72386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:54:29.795 [DEBUG] [Thread-72386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] client lang: <none>
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] server lang: <none>
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] kex follows: False
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:54:29.796 [DEBUG] [Thread-72386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:54:29.797 [DEBUG] [Thread-72386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:54:29.797 [DEBUG] [Thread-72386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:54:29.797 [DEBUG] [Thread-72386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:54:29.797 [DEBUG] [Thread-72386] [transport.py] [_log()] Compression: none
2025-12-12T15:54:29.797 [DEBUG] [Thread-72386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:54:29.856 [DEBUG] [Thread-72386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:54:29.857 [DEBUG] [Thread-72386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:54:29.857 [DEBUG] [Thread-72386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:54:29.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:54:29.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:54:29.912 [DEBUG] [Thread-72386] [transport.py] [_log()] userauth is OK
2025-12-12T15:54:29.912 [DEBUG] [Thread-72386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:54:29.912 [DEBUG] [Thread-72386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:54:29.912 [DEBUG] [Thread-72386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:54:29.912 [DEBUG] [Thread-72386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:54:29.931 [INFO] [Thread-72386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:54:29.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:54:29.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:54:30.841 [DEBUG] [Thread-72386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:54:30.842 [DEBUG] [Thread-72386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:54:30.890 [DEBUG] [Thread-72386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:54:30.890 [DEBUG] [Thread-72386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:54:30.899 [DEBUG] [Thread-72386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:54:30.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:54:30.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:54:30.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:54:30.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:54:30.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:54:30.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:54:30.934 [DEBUG] [Thread-72386] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:54:36.506 [DEBUG] [Thread-72388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:54:51.550 [DEBUG] [Thread-72389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:54:52.065 [DEBUG] [Thread-72390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:55:00.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:55:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:55:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 54, 32), 19.46, 27.2, 0.0, 44.52, 19.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:55:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:54:32
2025-12-12T15:55:01.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:55:01.918 [DEBUG] [Thread-72391] [transport.py] [_log()] starting thread (client mode): 0xf574c820
2025-12-12T15:55:01.918 [DEBUG] [Thread-72391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:55:01.937 [DEBUG] [Thread-72391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:55:01.937 [INFO] [Thread-72391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:55:01.938 [DEBUG] [Thread-72391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] client lang: <none>
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] server lang: <none>
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] kex follows: False
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] Compression: none
2025-12-12T15:55:01.939 [DEBUG] [Thread-72391] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:55:01.948 [DEBUG] [Thread-72391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:55:01.948 [DEBUG] [Thread-72391] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:55:01.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:55:01.949 [DEBUG] [Thread-72391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:55:01.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:55:01.951 [DEBUG] [Thread-72391] [transport.py] [_log()] userauth is OK
2025-12-12T15:55:01.951 [DEBUG] [Thread-72391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:55:01.951 [DEBUG] [Thread-72391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:55:01.951 [DEBUG] [Thread-72391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:55:01.951 [DEBUG] [Thread-72391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:55:01.979 [INFO] [Thread-72391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:55:01.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:55:02.561 [DEBUG] [Thread-72391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:55:02.561 [DEBUG] [Thread-72391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:55:02.561 [DEBUG] [Thread-72391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:55:02.602 [DEBUG] [Thread-72391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:55:02.602 [DEBUG] [Thread-72391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:55:02.604 [DEBUG] [Thread-72391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:55:02.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:55:02.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:55:02.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:55:02.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:55:02.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:55:02.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:55:02.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:55:02.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:55:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:55:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.579607 -999.00  +19.20  42.12     33   +2.80 1 1 2 1 1   888    0 14.75 -90.77 ----- 50.4 42.1 312.6 62.5 23.4 -25.7 23.1 -26.1 23.9 -22.6 24.4 -23.2
2025-12-12T15:55:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:55:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:55:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.579607
2025-12-12T15:55:02.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:55:02.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:55:02.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:55:02.631 [DEBUG] [Thread-72391] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:55:02.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:55:02.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:55:02.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:54:32', tmtdew=19.46, humidity=27.2, cloud=0.0, wind=44.52, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:54:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:55:02.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:55:02.730 [DEBUG] [Thread-72394] [transport.py] [_log()] starting thread (client mode): 0xf81e5b40
2025-12-12T15:55:02.730 [DEBUG] [Thread-72394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:55:02.744 [DEBUG] [Thread-72394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:55:02.745 [INFO] [Thread-72394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:55:02.752 [DEBUG] [Thread-72394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:55:02.752 [DEBUG] [Thread-72394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:55:02.752 [DEBUG] [Thread-72394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:55:02.752 [DEBUG] [Thread-72394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:02.752 [DEBUG] [Thread-72394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:02.752 [DEBUG] [Thread-72394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:02.753 [DEBUG] [Thread-72394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:02.753 [DEBUG] [Thread-72394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:55:02.753 [DEBUG] [Thread-72394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] client lang: <none>
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] server lang: <none>
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] kex follows: False
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:55:02.761 [DEBUG] [Thread-72394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:55:02.762 [DEBUG] [Thread-72394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:55:02.762 [DEBUG] [Thread-72394] [transport.py] [_log()] Compression: none
2025-12-12T15:55:02.762 [DEBUG] [Thread-72394] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:55:02.811 [DEBUG] [Thread-72394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:55:02.812 [DEBUG] [Thread-72394] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:55:02.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:55:02.813 [DEBUG] [Thread-72394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:55:02.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:55:02.868 [DEBUG] [Thread-72394] [transport.py] [_log()] userauth is OK
2025-12-12T15:55:02.868 [DEBUG] [Thread-72394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:55:02.868 [DEBUG] [Thread-72394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:55:02.868 [DEBUG] [Thread-72394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:55:02.868 [DEBUG] [Thread-72394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:55:02.890 [INFO] [Thread-72394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:55:02.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:55:02.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:55:03.749 [DEBUG] [Thread-72394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:55:03.749 [DEBUG] [Thread-72394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:55:03.797 [DEBUG] [Thread-72394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:55:03.797 [DEBUG] [Thread-72394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:55:03.806 [DEBUG] [Thread-72394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:55:03.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:55: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')
2025-12-12T15:55:03.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:55:03.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:55:03.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:55:03.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:55:03.840 [DEBUG] [Thread-72394] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:55:04.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:04.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:06.580 [DEBUG] [Thread-72396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:21.618 [DEBUG] [Thread-72397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:33.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:55:33.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:55:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:55:34.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 55, 4), 19.69, 26.82, 0.0, 50.21, 20.1, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:55:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:55:04
2025-12-12T15:55:34.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:55:34.877 [DEBUG] [Thread-72398] [transport.py] [_log()] starting thread (client mode): 0xf574cd60
2025-12-12T15:55:34.877 [DEBUG] [Thread-72398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:55:34.897 [DEBUG] [Thread-72398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:55:34.898 [INFO] [Thread-72398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] client lang: <none>
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] server lang: <none>
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] kex follows: False
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] Compression: none
2025-12-12T15:55:34.901 [DEBUG] [Thread-72398] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:55:34.916 [DEBUG] [Thread-72398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:55:34.916 [DEBUG] [Thread-72398] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:55:34.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:55:34.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:55:34.917 [DEBUG] [Thread-72398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:55:34.917 [DEBUG] [Thread-72398] [transport.py] [_log()] userauth is OK
2025-12-12T15:55:34.917 [DEBUG] [Thread-72398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:55:34.917 [DEBUG] [Thread-72398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:55:34.917 [DEBUG] [Thread-72398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:55:34.917 [DEBUG] [Thread-72398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:55:34.927 [INFO] [Thread-72398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:55:34.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:55:35.516 [DEBUG] [Thread-72398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:55:35.516 [DEBUG] [Thread-72398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:55:35.516 [DEBUG] [Thread-72398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:55:35.556 [DEBUG] [Thread-72398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:55:35.557 [DEBUG] [Thread-72398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:55:35.559 [DEBUG] [Thread-72398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:55:35.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:55:35.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:55:35.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:55:35.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:55:35.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:55:35.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:55:35.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:55:35.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:55:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:55:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.579954 -999.00  +19.90  60.89     32   +3.00 1 1 3 1 1   888    0 15.31 -84.24 ----- 42.5 60.9 313.6 66.7 23.3 -25.5 23.1 -26.5 23.9 -22.8 24.3 -23.3
2025-12-12T15:55:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:55:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:55:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.579954
2025-12-12T15:55:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:55:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:55:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:55:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:55:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:55:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:55:04', tmtdew=19.69, humidity=26.82, cloud=0.0, wind=50.21, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:55:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:55:35.579 [DEBUG] [Thread-72398] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:55:35.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:55:35.666 [DEBUG] [Thread-72401] [transport.py] [_log()] starting thread (client mode): 0xf574ebc0
2025-12-12T15:55:35.666 [DEBUG] [Thread-72401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:55:35.680 [DEBUG] [Thread-72401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:55:35.680 [INFO] [Thread-72401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:55:35.687 [DEBUG] [Thread-72401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:55:35.687 [DEBUG] [Thread-72401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:55:35.687 [DEBUG] [Thread-72401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:55:35.687 [DEBUG] [Thread-72401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] client lang: <none>
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] server lang: <none>
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] kex follows: False
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] Compression: none
2025-12-12T15:55:35.688 [DEBUG] [Thread-72401] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:55:35.742 [DEBUG] [Thread-72401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:55:35.743 [DEBUG] [Thread-72401] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:55:35.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:55:35.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:55:35.743 [DEBUG] [Thread-72401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:55:35.800 [DEBUG] [Thread-72401] [transport.py] [_log()] userauth is OK
2025-12-12T15:55:35.800 [DEBUG] [Thread-72401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:55:35.800 [DEBUG] [Thread-72401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:55:35.800 [DEBUG] [Thread-72401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:55:35.800 [DEBUG] [Thread-72401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:55:35.816 [INFO] [Thread-72401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:55:35.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:55:35.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:55:36.650 [DEBUG] [Thread-72403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:36.654 [DEBUG] [Thread-72401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:55:36.654 [DEBUG] [Thread-72401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:55:36.702 [DEBUG] [Thread-72401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:55:36.702 [DEBUG] [Thread-72401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:55:36.711 [DEBUG] [Thread-72401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:55:36.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:55:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:55:36.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:55:36.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:55:36.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:55:36.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:55:36.743 [DEBUG] [Thread-72401] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:55:51.684 [DEBUG] [Thread-72404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:55:52.117 [DEBUG] [Thread-72405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:05.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:05.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:06.714 [DEBUG] [Thread-72406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:56:06.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:56:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:56:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 55, 36), 19.27, 27.48, 0.0, 55.75, 19.33, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:56:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:55:36
2025-12-12T15:56:07.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:56:07.748 [DEBUG] [Thread-72407] [transport.py] [_log()] starting thread (client mode): 0xf570f550
2025-12-12T15:56:07.748 [DEBUG] [Thread-72407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:56:07.767 [DEBUG] [Thread-72407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:56:07.767 [INFO] [Thread-72407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:56:07.770 [DEBUG] [Thread-72407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] client lang: <none>
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] server lang: <none>
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] kex follows: False
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] Compression: none
2025-12-12T15:56:07.771 [DEBUG] [Thread-72407] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:56:07.787 [DEBUG] [Thread-72407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:56:07.787 [DEBUG] [Thread-72407] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:56:07.788 [DEBUG] [Thread-72407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:56:07.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:56:07.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:56:07.790 [DEBUG] [Thread-72407] [transport.py] [_log()] userauth is OK
2025-12-12T15:56:07.790 [DEBUG] [Thread-72407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:56:07.790 [DEBUG] [Thread-72407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:56:07.790 [DEBUG] [Thread-72407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:56:07.790 [DEBUG] [Thread-72407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:56:07.809 [INFO] [Thread-72407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:56:07.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:56:08.425 [DEBUG] [Thread-72407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:56:08.425 [DEBUG] [Thread-72407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:56:08.425 [DEBUG] [Thread-72407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:56:08.466 [DEBUG] [Thread-72407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:56:08.466 [DEBUG] [Thread-72407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:56:08.470 [DEBUG] [Thread-72407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:56:08.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:56:08.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:56:08.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:56:08.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:56:08.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:56:08.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:56:08.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:56:08.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:56:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:56:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.580302 -999.00  +19.50  53.86     31   +2.20 1 1 2 1 1   888    0 15.40 -62.73 ----- 36.3 53.9 329.2 70.7 23.3 -26.2 23.2 -25.8 23.9 -22.2 24.4 -24.0
2025-12-12T15:56:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:56:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:56:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.580302
2025-12-12T15:56:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:56:08.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:56:08.489 [DEBUG] [Thread-72407] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:56:08.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:56:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:56:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:56:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:55:36', tmtdew=19.27, humidity=27.48, cloud=0.0, wind=55.75, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:55:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:56:08.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:56:08.595 [DEBUG] [Thread-72410] [transport.py] [_log()] starting thread (client mode): 0xf57be5f0
2025-12-12T15:56:08.595 [DEBUG] [Thread-72410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:56:08.610 [DEBUG] [Thread-72410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:56:08.610 [INFO] [Thread-72410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] client lang: <none>
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] server lang: <none>
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] kex follows: False
2025-12-12T15:56:08.617 [DEBUG] [Thread-72410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:56:08.618 [DEBUG] [Thread-72410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:56:08.618 [DEBUG] [Thread-72410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:56:08.618 [DEBUG] [Thread-72410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:56:08.618 [DEBUG] [Thread-72410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:56:08.618 [DEBUG] [Thread-72410] [transport.py] [_log()] Compression: none
2025-12-12T15:56:08.618 [DEBUG] [Thread-72410] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:56:08.676 [DEBUG] [Thread-72410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:56:08.677 [DEBUG] [Thread-72410] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:56:08.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:56:08.678 [DEBUG] [Thread-72410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:56:08.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:56:08.732 [DEBUG] [Thread-72410] [transport.py] [_log()] userauth is OK
2025-12-12T15:56:08.732 [DEBUG] [Thread-72410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:56:08.732 [DEBUG] [Thread-72410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:56:08.732 [DEBUG] [Thread-72410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:56:08.732 [DEBUG] [Thread-72410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:56:08.751 [INFO] [Thread-72410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:56:08.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:56:08.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:56:09.657 [DEBUG] [Thread-72410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:56:09.657 [DEBUG] [Thread-72410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:56:09.705 [DEBUG] [Thread-72410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:56:09.706 [DEBUG] [Thread-72410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:56:09.714 [DEBUG] [Thread-72410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:56:09.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:56:09.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:56:09.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:56:09.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:56:09.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:56:09.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:56:09.746 [DEBUG] [Thread-72410] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:56:21.741 [DEBUG] [Thread-72412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:36.789 [DEBUG] [Thread-72413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:39.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:56:39.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:56:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:56:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 56, 8), 19.26, 27.43, 0.0, 54.66, 19.09, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:56:40.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:56:08
2025-12-12T15:56:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:56:40.741 [DEBUG] [Thread-72414] [transport.py] [_log()] starting thread (client mode): 0xf570d750
2025-12-12T15:56:40.741 [DEBUG] [Thread-72414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:56:40.760 [DEBUG] [Thread-72414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:56:40.760 [INFO] [Thread-72414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] client lang: <none>
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] server lang: <none>
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] kex follows: False
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:56:40.762 [DEBUG] [Thread-72414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:56:40.763 [DEBUG] [Thread-72414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:56:40.763 [DEBUG] [Thread-72414] [transport.py] [_log()] Compression: none
2025-12-12T15:56:40.763 [DEBUG] [Thread-72414] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:56:40.779 [DEBUG] [Thread-72414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:56:40.779 [DEBUG] [Thread-72414] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:56:40.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:56:40.779 [DEBUG] [Thread-72414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:56:40.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:56:40.780 [DEBUG] [Thread-72414] [transport.py] [_log()] userauth is OK
2025-12-12T15:56:40.780 [DEBUG] [Thread-72414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:56:40.780 [DEBUG] [Thread-72414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:56:40.781 [DEBUG] [Thread-72414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:56:40.781 [DEBUG] [Thread-72414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:56:40.794 [INFO] [Thread-72414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:56:40.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:56:41.395 [DEBUG] [Thread-72414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:56:41.396 [DEBUG] [Thread-72414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:56:41.396 [DEBUG] [Thread-72414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:56:41.436 [DEBUG] [Thread-72414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:56:41.437 [DEBUG] [Thread-72414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:56:41.439 [DEBUG] [Thread-72414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:56:41.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:56:41.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:56:41.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:56:41.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:56:41.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:56:41.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.580996 -999.00  +19.40  42.47     33   +2.70 1 1 2 1 1   888    0 15.99 -46.20 ----- 33.3 42.5 331.8 53.8 23.3 -25.2 23.0 -26.8 23.9 -22.1 24.2 -23.6
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.580996
2025-12-12T15:56:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:56:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:56:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:56:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:56:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:56:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:56:08', tmtdew=19.26, humidity=27.43, cloud=0.0, wind=54.66, temperature=19.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:56:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:56:41.450 [DEBUG] [Thread-72414] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:56:41.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:56:41.536 [DEBUG] [Thread-72417] [transport.py] [_log()] starting thread (client mode): 0xf5741fc0
2025-12-12T15:56:41.536 [DEBUG] [Thread-72417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:56:41.551 [DEBUG] [Thread-72417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:56:41.551 [INFO] [Thread-72417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] client lang: <none>
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] server lang: <none>
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] kex follows: False
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:56:41.559 [DEBUG] [Thread-72417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:56:41.560 [DEBUG] [Thread-72417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:56:41.560 [DEBUG] [Thread-72417] [transport.py] [_log()] Compression: none
2025-12-12T15:56:41.560 [DEBUG] [Thread-72417] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:56:41.614 [DEBUG] [Thread-72417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:56:41.614 [DEBUG] [Thread-72417] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:56:41.614 [DEBUG] [Thread-72417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:56:41.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:56:41.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:56:41.671 [DEBUG] [Thread-72417] [transport.py] [_log()] userauth is OK
2025-12-12T15:56:41.671 [DEBUG] [Thread-72417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:56:41.671 [DEBUG] [Thread-72417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:56:41.672 [DEBUG] [Thread-72417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:56:41.672 [DEBUG] [Thread-72417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:56:41.687 [INFO] [Thread-72417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:56:41.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:56:41.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:56:42.525 [DEBUG] [Thread-72417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:56:42.525 [DEBUG] [Thread-72417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:56:42.573 [DEBUG] [Thread-72417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:56:42.574 [DEBUG] [Thread-72417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:56:42.582 [DEBUG] [Thread-72417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:56:42.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:56:42.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:56:42.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
2025-12-12T15:56:42.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:56:42.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:56:42.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:56:42.614 [DEBUG] [Thread-72417] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:56:51.816 [DEBUG] [Thread-72419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:56:52.165 [DEBUG] [Thread-72420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:05.208 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:05.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:06.854 [DEBUG] [Thread-72421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:12.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:57:12.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:57:12.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:57:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 56, 40), 19.44, 27.23, 0.0, 42.56, 19.39, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:57:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:56:40
2025-12-12T15:57:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:57:13.676 [DEBUG] [Thread-72422] [transport.py] [_log()] starting thread (client mode): 0xf57be0e0
2025-12-12T15:57:13.676 [DEBUG] [Thread-72422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:57:13.687 [DEBUG] [Thread-72422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:57:13.688 [INFO] [Thread-72422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] client lang: <none>
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] server lang: <none>
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] kex follows: False
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:57:13.690 [DEBUG] [Thread-72422] [transport.py] [_log()] Compression: none
2025-12-12T15:57:13.691 [DEBUG] [Thread-72422] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:57:13.698 [DEBUG] [Thread-72422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:57:13.698 [DEBUG] [Thread-72422] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:57:13.698 [DEBUG] [Thread-72422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:57:13.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:57:13.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:57:13.699 [DEBUG] [Thread-72422] [transport.py] [_log()] userauth is OK
2025-12-12T15:57:13.699 [DEBUG] [Thread-72422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:57:13.699 [DEBUG] [Thread-72422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:57:13.699 [DEBUG] [Thread-72422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:57:13.699 [DEBUG] [Thread-72422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:57:13.708 [INFO] [Thread-72422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:57:13.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:57:14.327 [DEBUG] [Thread-72422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:57:14.327 [DEBUG] [Thread-72422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:57:14.327 [DEBUG] [Thread-72422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:57:14.368 [DEBUG] [Thread-72422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:57:14.368 [DEBUG] [Thread-72422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:57:14.370 [DEBUG] [Thread-72422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:57:14.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:57:14.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:57:14.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:57:14.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:57:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:57:14.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:57:14.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.581343 -999.00  +19.40  44.81     33   +2.80 1 1 2 1 1   888    0 16.06 -44.53 ----- 44.5 44.8 325.4 50.0 23.3 -25.8 23.0 -25.9 24.0 -22.2 24.4 -23.7
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.581343
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:57:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:57:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:57:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:57:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:57:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:56:40', tmtdew=19.44, humidity=27.23, cloud=0.0, wind=42.56, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:57:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:57:14.387 [DEBUG] [Thread-72422] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:57:14.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:57:14.471 [DEBUG] [Thread-72425] [transport.py] [_log()] starting thread (client mode): 0xf81e59f0
2025-12-12T15:57:14.471 [DEBUG] [Thread-72425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:57:14.486 [DEBUG] [Thread-72425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:57:14.486 [INFO] [Thread-72425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] client lang: <none>
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] server lang: <none>
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] kex follows: False
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] Compression: none
2025-12-12T15:57:14.494 [DEBUG] [Thread-72425] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:57:14.550 [DEBUG] [Thread-72425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:57:14.551 [DEBUG] [Thread-72425] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:57:14.551 [DEBUG] [Thread-72425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:57:14.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:57:14.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:57:14.607 [DEBUG] [Thread-72425] [transport.py] [_log()] userauth is OK
2025-12-12T15:57:14.608 [DEBUG] [Thread-72425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:57:14.608 [DEBUG] [Thread-72425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:57:14.608 [DEBUG] [Thread-72425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:57:14.608 [DEBUG] [Thread-72425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:57:14.625 [INFO] [Thread-72425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:57:14.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:57:14.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:57:15.541 [DEBUG] [Thread-72425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:57:15.541 [DEBUG] [Thread-72425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:57:15.589 [DEBUG] [Thread-72425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:57:15.589 [DEBUG] [Thread-72425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:57:15.598 [DEBUG] [Thread-72425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:57:15.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:57:15.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:57:15.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:57:15.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:57:15.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:57:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:57:15.633 [DEBUG] [Thread-72425] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:57:21.886 [DEBUG] [Thread-72427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:36.935 [DEBUG] [Thread-72428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:45.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:57:45.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:57:45.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:57:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 57, 12), 19.03, 27.99, 0.0, 41.22, 19.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:57:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:57:12
2025-12-12T15:57:46.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:57:46.669 [DEBUG] [Thread-72429] [transport.py] [_log()] starting thread (client mode): 0xf57be860
2025-12-12T15:57:46.669 [DEBUG] [Thread-72429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:57:46.689 [DEBUG] [Thread-72429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:57:46.689 [INFO] [Thread-72429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:57:46.692 [DEBUG] [Thread-72429] [transport.py] [_log()] client lang: <none>
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] server lang: <none>
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] kex follows: False
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] Compression: none
2025-12-12T15:57:46.693 [DEBUG] [Thread-72429] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:57:46.700 [DEBUG] [Thread-72429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:57:46.700 [DEBUG] [Thread-72429] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:57:46.700 [DEBUG] [Thread-72429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:57:46.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:57:46.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:57:46.701 [DEBUG] [Thread-72429] [transport.py] [_log()] userauth is OK
2025-12-12T15:57:46.701 [DEBUG] [Thread-72429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:57:46.701 [DEBUG] [Thread-72429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:57:46.701 [DEBUG] [Thread-72429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:57:46.701 [DEBUG] [Thread-72429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:57:46.710 [INFO] [Thread-72429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:57:46.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:57:47.274 [DEBUG] [Thread-72429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:57:47.274 [DEBUG] [Thread-72429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:57:47.275 [DEBUG] [Thread-72429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:57:47.315 [DEBUG] [Thread-72429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:57:47.315 [DEBUG] [Thread-72429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:57:47.319 [DEBUG] [Thread-72429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:57:47.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:57:47.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:57:47.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:57:47.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:57:47.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:57:47.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:57:47.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:57:47.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:57:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:57:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.581691 -999.00  +19.70  51.29     33   +3.20 1 1 2 1 1   888    0 15.79 -42.38 ----- 43.2 51.3 313.0 58.0 23.3 -25.7 23.1 -25.9 23.9 -23.5 24.3 -23.3
2025-12-12T15:57:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:57:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:57:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.581691
2025-12-12T15:57:47.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:57:47.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:57:47.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:57:47.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:57:47.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:57:47.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:57:12', tmtdew=19.03, humidity=27.99, cloud=0.0, wind=41.22, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:57:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:57:47.347 [DEBUG] [Thread-72429] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:57:47.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:57:47.455 [DEBUG] [Thread-72432] [transport.py] [_log()] starting thread (client mode): 0xf575f460
2025-12-12T15:57:47.455 [DEBUG] [Thread-72432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:57:47.470 [DEBUG] [Thread-72432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:57:47.470 [INFO] [Thread-72432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:57:47.477 [DEBUG] [Thread-72432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] client lang: <none>
2025-12-12T15:57:47.478 [DEBUG] [Thread-72432] [transport.py] [_log()] server lang: <none>
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] kex follows: False
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] Compression: none
2025-12-12T15:57:47.479 [DEBUG] [Thread-72432] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:57:47.535 [DEBUG] [Thread-72432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:57:47.536 [DEBUG] [Thread-72432] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:57:47.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:57:47.537 [DEBUG] [Thread-72432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:57:47.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:57:47.591 [DEBUG] [Thread-72432] [transport.py] [_log()] userauth is OK
2025-12-12T15:57:47.592 [DEBUG] [Thread-72432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:57:47.592 [DEBUG] [Thread-72432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:57:47.592 [DEBUG] [Thread-72432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:57:47.592 [DEBUG] [Thread-72432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:57:47.615 [INFO] [Thread-72432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:57:47.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:57:47.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:57:48.477 [DEBUG] [Thread-72432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:57:48.477 [DEBUG] [Thread-72432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:57:48.525 [DEBUG] [Thread-72432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:57:48.525 [DEBUG] [Thread-72432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:57:48.534 [DEBUG] [Thread-72432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:57:48.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:57:48.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:57:48.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:57:48.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:57:48.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:57:48.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:57:48.568 [DEBUG] [Thread-72432] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:57:51.967 [DEBUG] [Thread-72434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:57:52.224 [DEBUG] [Thread-72435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:05.349 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:05.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:07.011 [DEBUG] [Thread-72436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:18.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:58:18.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:58:18.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:58:19.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 57, 44), 18.77, 28.07, 0.0, 44.53, 19.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T15:58:19.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:57:44
2025-12-12T15:58:19.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:58:19.581 [DEBUG] [Thread-72437] [transport.py] [_log()] starting thread (client mode): 0xf81e4a90
2025-12-12T15:58:19.581 [DEBUG] [Thread-72437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:58:19.592 [DEBUG] [Thread-72437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:58:19.592 [INFO] [Thread-72437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] client lang: <none>
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] server lang: <none>
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] kex follows: False
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] Compression: none
2025-12-12T15:58:19.594 [DEBUG] [Thread-72437] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:58:19.602 [DEBUG] [Thread-72437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:58:19.602 [DEBUG] [Thread-72437] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:58:19.602 [DEBUG] [Thread-72437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:58:19.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:58:19.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:58:19.603 [DEBUG] [Thread-72437] [transport.py] [_log()] userauth is OK
2025-12-12T15:58:19.603 [DEBUG] [Thread-72437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:58:19.603 [DEBUG] [Thread-72437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:58:19.603 [DEBUG] [Thread-72437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:58:19.603 [DEBUG] [Thread-72437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:58:19.615 [INFO] [Thread-72437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:58:19.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:58:20.224 [DEBUG] [Thread-72437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:58:20.224 [DEBUG] [Thread-72437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:58:20.225 [DEBUG] [Thread-72437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:58:20.265 [DEBUG] [Thread-72437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:58:20.265 [DEBUG] [Thread-72437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:58:20.267 [DEBUG] [Thread-72437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:58:20.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:58:20.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:58:20.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:58:20.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:58:20.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:58:20.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:58:20.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:58:20.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:58:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:58:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.582038 -999.00  +20.10  43.73     33   +3.40 1 1 2 1 1   888    0 15.99 -37.71 ----- 46.2 43.7 318.2 52.8 23.2 -26.2 23.1 -25.6 23.8 -22.4 24.3 -24.4
2025-12-12T15:58:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:58:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:58:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.582038
2025-12-12T15:58:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:58:20.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:58:20.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:58:20.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:58:20.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:58:20.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:57:44', tmtdew=18.77, humidity=28.07, cloud=0.0, wind=44.53, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:58:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:58:20.290 [DEBUG] [Thread-72437] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:58:20.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:58:20.387 [DEBUG] [Thread-72440] [transport.py] [_log()] starting thread (client mode): 0xf81e7fd0
2025-12-12T15:58:20.388 [DEBUG] [Thread-72440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:58:20.402 [DEBUG] [Thread-72440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:58:20.403 [INFO] [Thread-72440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:58:20.410 [DEBUG] [Thread-72440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:58:20.410 [DEBUG] [Thread-72440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:58:20.410 [DEBUG] [Thread-72440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] client lang: <none>
2025-12-12T15:58:20.411 [DEBUG] [Thread-72440] [transport.py] [_log()] server lang: <none>
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] kex follows: False
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] Compression: none
2025-12-12T15:58:20.412 [DEBUG] [Thread-72440] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:58:20.469 [DEBUG] [Thread-72440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:58:20.470 [DEBUG] [Thread-72440] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:58:20.470 [DEBUG] [Thread-72440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:58:20.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:58:20.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:58:20.525 [DEBUG] [Thread-72440] [transport.py] [_log()] userauth is OK
2025-12-12T15:58:20.525 [DEBUG] [Thread-72440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:58:20.526 [DEBUG] [Thread-72440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:58:20.526 [DEBUG] [Thread-72440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:58:20.526 [DEBUG] [Thread-72440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:58:20.551 [INFO] [Thread-72440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:58:20.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:58:20.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:58:21.388 [DEBUG] [Thread-72440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:58:21.388 [DEBUG] [Thread-72440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:58:21.436 [DEBUG] [Thread-72440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:58:21.436 [DEBUG] [Thread-72440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:58:21.444 [DEBUG] [Thread-72440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:58:21.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:58:21.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:58:21.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:58:21.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:58:21.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:58:21.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:58:21.478 [DEBUG] [Thread-72440] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:58:22.046 [DEBUG] [Thread-72442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:37.090 [DEBUG] [Thread-72443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:51.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:58:51.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:58:51.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:58:52.120 [DEBUG] [Thread-72444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:52.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 58, 48), 19.03, 28.16, 0.0, 51.98, 19.87, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:58:52.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:58:48
2025-12-12T15:58:52.273 [DEBUG] [Thread-72445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:58:52.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:58:52.470 [DEBUG] [Thread-72446] [transport.py] [_log()] starting thread (client mode): 0xf570e320
2025-12-12T15:58:52.471 [DEBUG] [Thread-72446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:58:52.490 [DEBUG] [Thread-72446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:58:52.490 [INFO] [Thread-72446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] client lang: <none>
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] server lang: <none>
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] kex follows: False
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] Compression: none
2025-12-12T15:58:52.493 [DEBUG] [Thread-72446] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:58:52.507 [DEBUG] [Thread-72446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:58:52.507 [DEBUG] [Thread-72446] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:58:52.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:58:52.507 [DEBUG] [Thread-72446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:58:52.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:58:52.509 [DEBUG] [Thread-72446] [transport.py] [_log()] userauth is OK
2025-12-12T15:58:52.509 [DEBUG] [Thread-72446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:58:52.509 [DEBUG] [Thread-72446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:58:52.509 [DEBUG] [Thread-72446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:58:52.509 [DEBUG] [Thread-72446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:58:52.521 [INFO] [Thread-72446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:58:52.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:58:53.141 [DEBUG] [Thread-72446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:58:53.141 [DEBUG] [Thread-72446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:58:53.141 [DEBUG] [Thread-72446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:58:53.181 [DEBUG] [Thread-72446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:58:53.181 [DEBUG] [Thread-72446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:58:53.183 [DEBUG] [Thread-72446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:58:53.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:58:53.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:58:53.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:58:53.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:58:53.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:58:53.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:58:53.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.582385 -999.00  +19.80  44.40     33   +3.40 1 1 2 1 1   888    0 16.25 -30.36 ----- 48.2 44.4 314.8 54.6 23.1 -25.6 23.0 -25.8 23.6 -25.8 24.1 -24.1
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.582385
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:58:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:58:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:58:48', tmtdew=19.03, humidity=28.16, cloud=0.0, wind=51.98, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:58:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:58:53.203 [DEBUG] [Thread-72446] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:58:53.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:58:53.289 [DEBUG] [Thread-72449] [transport.py] [_log()] starting thread (client mode): 0xf570c5b0
2025-12-12T15:58:53.289 [DEBUG] [Thread-72449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:58:53.304 [DEBUG] [Thread-72449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:58:53.304 [INFO] [Thread-72449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] client lang: <none>
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] server lang: <none>
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] kex follows: False
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] Compression: none
2025-12-12T15:58:53.312 [DEBUG] [Thread-72449] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:58:53.370 [DEBUG] [Thread-72449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:58:53.370 [DEBUG] [Thread-72449] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:58:53.371 [DEBUG] [Thread-72449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:58:53.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:58:53.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:58:53.428 [DEBUG] [Thread-72449] [transport.py] [_log()] userauth is OK
2025-12-12T15:58:53.428 [DEBUG] [Thread-72449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:58:53.428 [DEBUG] [Thread-72449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:58:53.428 [DEBUG] [Thread-72449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:58:53.428 [DEBUG] [Thread-72449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:58:53.450 [INFO] [Thread-72449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:58:53.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:58:53.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:58:54.304 [DEBUG] [Thread-72449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:58:54.305 [DEBUG] [Thread-72449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:58:54.352 [DEBUG] [Thread-72449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:58:54.352 [DEBUG] [Thread-72449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:58:54.361 [DEBUG] [Thread-72449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:58:54.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:58:54.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:58:54.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:58:54.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:58:54.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:58:54.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:58:54.395 [DEBUG] [Thread-72449] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:59:05.492 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:05.493 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:07.147 [DEBUG] [Thread-72451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:22.191 [DEBUG] [Thread-72452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:59:24.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:59:24.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:59:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 59, 20), 19.1, 28.03, 0.0, 47.75, 19.85, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:59:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:59:20
2025-12-12T15:59:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:59:25.384 [DEBUG] [Thread-72453] [transport.py] [_log()] starting thread (client mode): 0xf575fe20
2025-12-12T15:59:25.384 [DEBUG] [Thread-72453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:59:25.408 [DEBUG] [Thread-72453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:59:25.408 [INFO] [Thread-72453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] client lang: <none>
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] server lang: <none>
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] kex follows: False
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:59:25.410 [DEBUG] [Thread-72453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:59:25.411 [DEBUG] [Thread-72453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:59:25.411 [DEBUG] [Thread-72453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:59:25.411 [DEBUG] [Thread-72453] [transport.py] [_log()] Compression: none
2025-12-12T15:59:25.411 [DEBUG] [Thread-72453] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:59:25.419 [DEBUG] [Thread-72453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:59:25.420 [DEBUG] [Thread-72453] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:59:25.420 [DEBUG] [Thread-72453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:59:25.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:59:25.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:59:25.422 [DEBUG] [Thread-72453] [transport.py] [_log()] userauth is OK
2025-12-12T15:59:25.422 [DEBUG] [Thread-72453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:59:25.422 [DEBUG] [Thread-72453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:59:25.422 [DEBUG] [Thread-72453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:59:25.423 [DEBUG] [Thread-72453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:59:25.440 [INFO] [Thread-72453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:59:25.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:59:26.106 [DEBUG] [Thread-72453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:59:26.106 [DEBUG] [Thread-72453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:59:26.106 [DEBUG] [Thread-72453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:59:26.148 [DEBUG] [Thread-72453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:59:26.148 [DEBUG] [Thread-72453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:59:26.150 [DEBUG] [Thread-72453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:59:26.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:59:26.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:59:26.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:59:26.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:59:26.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:59:26.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:59:26.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:59:26.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:59:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:59:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.582385 -999.00  +19.80  44.40     33   +3.40 1 1 2 1 1   888    0 16.25 -30.36 ----- 48.2 44.4 314.8 54.6 23.1 -25.6 23.0 -25.8 23.6 -25.8 24.1 -24.1
2025-12-12T15:59:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:59:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:59:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.582385
2025-12-12T15:59:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:59:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:59:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:59:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:59:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:59:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:59:20', tmtdew=19.1, humidity=28.03, cloud=0.0, wind=47.75, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:58:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:59:26.162 [DEBUG] [Thread-72453] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:59:26.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:59:26.249 [DEBUG] [Thread-72456] [transport.py] [_log()] starting thread (client mode): 0xf81c0490
2025-12-12T15:59:26.249 [DEBUG] [Thread-72456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:59:26.264 [DEBUG] [Thread-72456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:59:26.264 [INFO] [Thread-72456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:59:26.271 [DEBUG] [Thread-72456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:59:26.271 [DEBUG] [Thread-72456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:59:26.271 [DEBUG] [Thread-72456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:59:26.271 [DEBUG] [Thread-72456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] client lang: <none>
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] server lang: <none>
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] kex follows: False
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] Compression: none
2025-12-12T15:59:26.272 [DEBUG] [Thread-72456] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:59:26.328 [DEBUG] [Thread-72456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:59:26.328 [DEBUG] [Thread-72456] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:59:26.328 [DEBUG] [Thread-72456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:59:26.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:59:26.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:59:26.385 [DEBUG] [Thread-72456] [transport.py] [_log()] userauth is OK
2025-12-12T15:59:26.385 [DEBUG] [Thread-72456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:59:26.385 [DEBUG] [Thread-72456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:59:26.385 [DEBUG] [Thread-72456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:59:26.385 [DEBUG] [Thread-72456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:59:26.403 [INFO] [Thread-72456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:59:26.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:59:26.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:59:27.248 [DEBUG] [Thread-72456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:59:27.248 [DEBUG] [Thread-72456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:59:27.298 [DEBUG] [Thread-72456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:59:27.298 [DEBUG] [Thread-72456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:59:27.307 [DEBUG] [Thread-72456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:59:27.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:59:27.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T15:59:27.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T15:59:27.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:59:27.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:59:27.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:59:27.339 [DEBUG] [Thread-72456] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:59:37.219 [DEBUG] [Thread-72458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:52.270 [DEBUG] [Thread-72459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:52.327 [DEBUG] [Thread-72460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T15:59:57.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T15:59:57.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T15:59:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T15:59:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 15, 59, 52), 19.22, 27.7, 0.0, 48.43, 20.11, 0, 0, 0, 2, 1, 0),)
2025-12-12T15:59:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 15:59:52
2025-12-12T15:59:58.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T15:59:58.330 [DEBUG] [Thread-72461] [transport.py] [_log()] starting thread (client mode): 0xf813ed10
2025-12-12T15:59:58.330 [DEBUG] [Thread-72461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:59:58.351 [DEBUG] [Thread-72461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T15:59:58.352 [INFO] [Thread-72461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] client lang: <none>
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] server lang: <none>
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] kex follows: False
2025-12-12T15:59:58.356 [DEBUG] [Thread-72461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:59:58.357 [DEBUG] [Thread-72461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:59:58.357 [DEBUG] [Thread-72461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:59:58.357 [DEBUG] [Thread-72461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:59:58.357 [DEBUG] [Thread-72461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:59:58.357 [DEBUG] [Thread-72461] [transport.py] [_log()] Compression: none
2025-12-12T15:59:58.357 [DEBUG] [Thread-72461] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:59:58.365 [DEBUG] [Thread-72461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:59:58.366 [DEBUG] [Thread-72461] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:59:58.366 [DEBUG] [Thread-72461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T15:59:58.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T15:59:58.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:59:58.368 [DEBUG] [Thread-72461] [transport.py] [_log()] userauth is OK
2025-12-12T15:59:58.368 [DEBUG] [Thread-72461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:59:58.368 [DEBUG] [Thread-72461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:59:58.369 [DEBUG] [Thread-72461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T15:59:58.369 [DEBUG] [Thread-72461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:59:58.392 [INFO] [Thread-72461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:59:58.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T15:59:59.013 [DEBUG] [Thread-72461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T15:59:59.013 [DEBUG] [Thread-72461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T15:59:59.014 [DEBUG] [Thread-72461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T15:59:59.054 [DEBUG] [Thread-72461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T15:59:59.054 [DEBUG] [Thread-72461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T15:59:59.056 [DEBUG] [Thread-72461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T15:59:59.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T15:59:59.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T15:59:59.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T15:59:59.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T15:59:59.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T15:59:59.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T15:59:59.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T15:59:59.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T15:59:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T15:59:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.582732 -999.00  +19.70  49.78     33   +3.30 1 1 2 1 1   888    0 16.38 -25.52 ----- 52.0 49.8 313.4 57.2 23.1 -26.2 22.9 -25.8 23.7 -23.9 24.1 -23.7
2025-12-12T15:59:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T15:59:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T15:59:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.582732
2025-12-12T15:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T15:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T15:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T15:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T15:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T15:59:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T15:59:52', tmtdew=19.22, humidity=27.7, cloud=0.0, wind=48.43, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:59:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T15:59:59.080 [DEBUG] [Thread-72461] [transport.py] [_log()] EOF in transport thread
2025-12-12T15:59:59.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T15:59:59.190 [DEBUG] [Thread-72464] [transport.py] [_log()] starting thread (client mode): 0xf5742230
2025-12-12T15:59:59.190 [DEBUG] [Thread-72464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T15:59:59.205 [DEBUG] [Thread-72464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T15:59:59.205 [INFO] [Thread-72464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T15:59:59.212 [DEBUG] [Thread-72464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T15:59:59.212 [DEBUG] [Thread-72464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T15:59:59.212 [DEBUG] [Thread-72464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] client lang: <none>
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] server lang: <none>
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] kex follows: False
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] Compression: none
2025-12-12T15:59:59.213 [DEBUG] [Thread-72464] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T15:59:59.271 [DEBUG] [Thread-72464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T15:59:59.272 [DEBUG] [Thread-72464] [transport.py] [_log()] Switch to new keys ...
2025-12-12T15:59:59.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T15:59:59.273 [DEBUG] [Thread-72464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T15:59:59.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T15:59:59.328 [DEBUG] [Thread-72464] [transport.py] [_log()] userauth is OK
2025-12-12T15:59:59.328 [DEBUG] [Thread-72464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T15:59:59.328 [DEBUG] [Thread-72464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T15:59:59.328 [DEBUG] [Thread-72464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T15:59:59.328 [DEBUG] [Thread-72464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T15:59:59.347 [INFO] [Thread-72464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T15:59:59.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T15:59:59.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:00:00.203 [DEBUG] [Thread-72464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:00:00.203 [DEBUG] [Thread-72464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:00:00.251 [DEBUG] [Thread-72464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:00:00.251 [DEBUG] [Thread-72464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:00:00.260 [DEBUG] [Thread-72464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:00:00.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:00:00.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:00:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:00:00.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:00:00.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:00:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:00:00.294 [DEBUG] [Thread-72464] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:00:05.635 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:00:05.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:00:07.296 [DEBUG] [Thread-72466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:00:22.332 [DEBUG] [Thread-72467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:00:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:00:30.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:00:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:00:31.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 0, 24), 19.58, 27.1, 0.0, 47.16, 20.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:00:31.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:00:24
2025-12-12T16:00:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:00:31.289 [DEBUG] [Thread-72468] [transport.py] [_log()] starting thread (client mode): 0xf813f280
2025-12-12T16:00:31.289 [DEBUG] [Thread-72468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:00:31.309 [DEBUG] [Thread-72468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:00:31.309 [INFO] [Thread-72468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:00:31.313 [DEBUG] [Thread-72468] [transport.py] [_log()] client lang: <none>
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] server lang: <none>
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] kex follows: False
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] Compression: none
2025-12-12T16:00:31.314 [DEBUG] [Thread-72468] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:00:31.331 [DEBUG] [Thread-72468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:00:31.331 [DEBUG] [Thread-72468] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:00:31.332 [DEBUG] [Thread-72468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:00:31.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:00:31.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:00:31.334 [DEBUG] [Thread-72468] [transport.py] [_log()] userauth is OK
2025-12-12T16:00:31.334 [DEBUG] [Thread-72468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:00:31.334 [DEBUG] [Thread-72468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:00:31.334 [DEBUG] [Thread-72468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:00:31.334 [DEBUG] [Thread-72468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:00:31.370 [INFO] [Thread-72468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:00:31.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:00:31.992 [DEBUG] [Thread-72468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:00:31.992 [DEBUG] [Thread-72468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:00:31.992 [DEBUG] [Thread-72468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:00:32.032 [DEBUG] [Thread-72468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:00:32.032 [DEBUG] [Thread-72468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:00:32.034 [DEBUG] [Thread-72468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:00:32.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:00:32.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:00:32.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:00:32.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:00:32.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:00:32.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:00:32.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.583079 -999.00  +19.50  41.67     34   +3.20 1 1 2 1 1   888    0 16.20 -25.88 ----- 53.5 41.7 314.2 58.8 23.1 -25.5 22.9 -25.3 23.6 -24.2 24.1 -23.5
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.583079
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:00:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:00:24', tmtdew=19.58, humidity=27.1, cloud=0.0, wind=47.16, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T13:59:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:00:32.051 [DEBUG] [Thread-72468] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:00:32.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:00:32.135 [DEBUG] [Thread-72471] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T16:00:32.135 [DEBUG] [Thread-72471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:00:32.150 [DEBUG] [Thread-72471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:00:32.150 [INFO] [Thread-72471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:00:32.157 [DEBUG] [Thread-72471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:00:32.157 [DEBUG] [Thread-72471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:00:32.157 [DEBUG] [Thread-72471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:00:32.157 [DEBUG] [Thread-72471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:00:32.157 [DEBUG] [Thread-72471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:00:32.157 [DEBUG] [Thread-72471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] client lang: <none>
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] server lang: <none>
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] kex follows: False
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] Compression: none
2025-12-12T16:00:32.158 [DEBUG] [Thread-72471] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:00:32.214 [DEBUG] [Thread-72471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:00:32.214 [DEBUG] [Thread-72471] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:00:32.215 [DEBUG] [Thread-72471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:00:32.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:00:32.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:00:32.270 [DEBUG] [Thread-72471] [transport.py] [_log()] userauth is OK
2025-12-12T16:00:32.270 [DEBUG] [Thread-72471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:00:32.270 [DEBUG] [Thread-72471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:00:32.270 [DEBUG] [Thread-72471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:00:32.270 [DEBUG] [Thread-72471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:00:32.289 [INFO] [Thread-72471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:00:32.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:00:32.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:00:33.207 [DEBUG] [Thread-72471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:00:33.207 [DEBUG] [Thread-72471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:00:33.255 [DEBUG] [Thread-72471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:00:33.255 [DEBUG] [Thread-72471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:00:33.264 [DEBUG] [Thread-72471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:00:33.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:00:33.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:00:33.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:00:33.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:00:33.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:00:33.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:00:33.297 [DEBUG] [Thread-72471] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:00:37.360 [DEBUG] [Thread-72473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:00:52.381 [DEBUG] [Thread-72474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:00:52.393 [DEBUG] [Thread-72475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:01:03.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:01:03.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:01:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 0, 56), 19.37, 27.72, 0.0, 41.66, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:01:04.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:00:56
2025-12-12T16:01:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:01:04.295 [DEBUG] [Thread-72476] [transport.py] [_log()] starting thread (client mode): 0xf57bfee0
2025-12-12T16:01:04.295 [DEBUG] [Thread-72476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:01:04.315 [DEBUG] [Thread-72476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:01:04.315 [INFO] [Thread-72476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:01:04.316 [DEBUG] [Thread-72476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:01:04.316 [DEBUG] [Thread-72476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] client lang: <none>
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] server lang: <none>
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] kex follows: False
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] Compression: none
2025-12-12T16:01:04.317 [DEBUG] [Thread-72476] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:01:04.326 [DEBUG] [Thread-72476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:01:04.326 [DEBUG] [Thread-72476] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:01:04.327 [DEBUG] [Thread-72476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:01:04.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:01:04.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:01:04.329 [DEBUG] [Thread-72476] [transport.py] [_log()] userauth is OK
2025-12-12T16:01:04.329 [DEBUG] [Thread-72476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:01:04.329 [DEBUG] [Thread-72476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:01:04.329 [DEBUG] [Thread-72476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:01:04.329 [DEBUG] [Thread-72476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:01:04.346 [INFO] [Thread-72476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:01:04.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:01:05.130 [DEBUG] [Thread-72476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:01:05.130 [DEBUG] [Thread-72476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:01:05.130 [DEBUG] [Thread-72476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:01:05.171 [DEBUG] [Thread-72476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:01:05.171 [DEBUG] [Thread-72476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:01:05.173 [DEBUG] [Thread-72476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:01:05.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:01:05.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:01:05.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:01:05.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:01:05.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:01:05.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:01:05.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:01:05.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:01:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:01:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.583426 -999.00  +19.30  39.02     34   +3.10 1 1 2 1 1   888    0 16.27 -27.04 ----- 36.0 39.0 312.6 59.8 23.1 -25.4 22.9 -25.3 23.6 -26.5 24.1 -22.9
2025-12-12T16:01:05.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.583426
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:01:05.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:00:56', tmtdew=19.37, humidity=27.72, cloud=0.0, wind=41.66, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:00:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:01:05.197 [DEBUG] [Thread-72476] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:01:05.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:01:05.293 [DEBUG] [Thread-72479] [transport.py] [_log()] starting thread (client mode): 0xf575e890
2025-12-12T16:01:05.293 [DEBUG] [Thread-72479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:01:05.310 [DEBUG] [Thread-72479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:01:05.310 [INFO] [Thread-72479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:01:05.320 [DEBUG] [Thread-72479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] client lang: <none>
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] server lang: <none>
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] kex follows: False
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:01:05.321 [DEBUG] [Thread-72479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:01:05.322 [DEBUG] [Thread-72479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:01:05.322 [DEBUG] [Thread-72479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:01:05.322 [DEBUG] [Thread-72479] [transport.py] [_log()] Compression: none
2025-12-12T16:01:05.322 [DEBUG] [Thread-72479] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:01:05.384 [DEBUG] [Thread-72479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:01:05.384 [DEBUG] [Thread-72479] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:01:05.385 [DEBUG] [Thread-72479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:01:05.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:01:05.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:01:05.441 [DEBUG] [Thread-72479] [transport.py] [_log()] userauth is OK
2025-12-12T16:01:05.441 [DEBUG] [Thread-72479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:01:05.441 [DEBUG] [Thread-72479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:01:05.441 [DEBUG] [Thread-72479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:01:05.441 [DEBUG] [Thread-72479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:01:05.460 [INFO] [Thread-72479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:01:05.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:01:05.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:01:05.786 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:05.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:06.346 [DEBUG] [Thread-72479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:01:06.347 [DEBUG] [Thread-72479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:01:06.395 [DEBUG] [Thread-72479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:01:06.395 [DEBUG] [Thread-72479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:01:06.404 [DEBUG] [Thread-72479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:01:06.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:01:06.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:01:06.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:01:06.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:01:06.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:01:06.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:01:06.439 [DEBUG] [Thread-72479] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:01:07.421 [DEBUG] [Thread-72481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:22.466 [DEBUG] [Thread-72482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:36.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:01:36.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:01:36.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:01:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 1, 28), 19.12, 28.08, 0.0, 40.51, 19.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:01:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:01:28
2025-12-12T16:01:37.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:01:37.413 [DEBUG] [Thread-72483] [transport.py] [_log()] starting thread (client mode): 0xf57bda20
2025-12-12T16:01:37.413 [DEBUG] [Thread-72483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:01:37.432 [DEBUG] [Thread-72483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:01:37.432 [INFO] [Thread-72483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] client lang: <none>
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] server lang: <none>
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] kex follows: False
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:01:37.436 [DEBUG] [Thread-72483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:01:37.437 [DEBUG] [Thread-72483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:01:37.437 [DEBUG] [Thread-72483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:01:37.437 [DEBUG] [Thread-72483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:01:37.437 [DEBUG] [Thread-72483] [transport.py] [_log()] Compression: none
2025-12-12T16:01:37.437 [DEBUG] [Thread-72483] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:01:37.454 [DEBUG] [Thread-72483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:01:37.455 [DEBUG] [Thread-72483] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:01:37.455 [DEBUG] [Thread-72483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:01:37.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:01:37.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:01:37.458 [DEBUG] [Thread-72483] [transport.py] [_log()] userauth is OK
2025-12-12T16:01:37.458 [DEBUG] [Thread-72483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:01:37.458 [DEBUG] [Thread-72483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:01:37.458 [DEBUG] [Thread-72483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:01:37.458 [DEBUG] [Thread-72483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:01:37.482 [INFO] [Thread-72483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:01:37.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:01:37.495 [DEBUG] [Thread-72485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:38.136 [DEBUG] [Thread-72483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:01:38.136 [DEBUG] [Thread-72483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:01:38.137 [DEBUG] [Thread-72483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:01:38.177 [DEBUG] [Thread-72483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:01:38.177 [DEBUG] [Thread-72483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:01:38.180 [DEBUG] [Thread-72483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:01:38.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:01:38.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:01:38.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:01:38.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:01:38.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:01:38.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:01:38.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:01:38.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:01:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:01:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.583774 -999.00  +19.60  42.14     34   +3.50 1 1 2 1 1   888    0 16.32 -30.36 ----- 51.6 42.1 315.2 50.4 23.2 -25.0 23.0 -24.5 23.8 -23.4 24.2 -22.4
2025-12-12T16:01:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:01:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:01:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.583774
2025-12-12T16:01:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:01:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:01:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:01:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:01:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:01:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:01:28', tmtdew=19.12, humidity=28.08, cloud=0.0, wind=40.51, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:00:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:01:38.203 [DEBUG] [Thread-72483] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:01:38.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:01:38.298 [DEBUG] [Thread-72487] [transport.py] [_log()] starting thread (client mode): 0xf57000d0
2025-12-12T16:01:38.298 [DEBUG] [Thread-72487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:01:38.313 [DEBUG] [Thread-72487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:01:38.313 [INFO] [Thread-72487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:01:38.321 [DEBUG] [Thread-72487] [transport.py] [_log()] client lang: <none>
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] server lang: <none>
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] kex follows: False
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] Compression: none
2025-12-12T16:01:38.322 [DEBUG] [Thread-72487] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:01:38.386 [DEBUG] [Thread-72487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:01:38.386 [DEBUG] [Thread-72487] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:01:38.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:01:38.387 [DEBUG] [Thread-72487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:01:38.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:01:38.443 [DEBUG] [Thread-72487] [transport.py] [_log()] userauth is OK
2025-12-12T16:01:38.443 [DEBUG] [Thread-72487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:01:38.443 [DEBUG] [Thread-72487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:01:38.443 [DEBUG] [Thread-72487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:01:38.443 [DEBUG] [Thread-72487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:01:38.463 [INFO] [Thread-72487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:01:38.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:01:38.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:01:39.311 [DEBUG] [Thread-72487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:01:39.311 [DEBUG] [Thread-72487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:01:39.359 [DEBUG] [Thread-72487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:01:39.359 [DEBUG] [Thread-72487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:01:39.368 [DEBUG] [Thread-72487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:01:39.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:01:39.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:01:39.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:01:39.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:01:39.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:01:39.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:01:39.403 [DEBUG] [Thread-72487] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:01:52.429 [DEBUG] [Thread-72489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:01:52.529 [DEBUG] [Thread-72490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:05.927 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:05.928 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:07.581 [DEBUG] [Thread-72491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:02:09.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:02:09.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:02:10.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 2), 18.65, 28.61, 0.0, 44.02, 19.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:02:10.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:02:00
2025-12-12T16:02:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:02:10.377 [DEBUG] [Thread-72492] [transport.py] [_log()] starting thread (client mode): 0xf575f5b0
2025-12-12T16:02:10.377 [DEBUG] [Thread-72492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:02:10.397 [DEBUG] [Thread-72492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:02:10.397 [INFO] [Thread-72492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:02:10.400 [DEBUG] [Thread-72492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:02:10.400 [DEBUG] [Thread-72492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:02:10.400 [DEBUG] [Thread-72492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] client lang: <none>
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] server lang: <none>
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] kex follows: False
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:02:10.401 [DEBUG] [Thread-72492] [transport.py] [_log()] Compression: none
2025-12-12T16:02:10.402 [DEBUG] [Thread-72492] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:02:10.420 [DEBUG] [Thread-72492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:02:10.421 [DEBUG] [Thread-72492] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:02:10.421 [DEBUG] [Thread-72492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:02:10.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:02:10.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:02:10.424 [DEBUG] [Thread-72492] [transport.py] [_log()] userauth is OK
2025-12-12T16:02:10.424 [DEBUG] [Thread-72492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:02:10.424 [DEBUG] [Thread-72492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:02:10.424 [DEBUG] [Thread-72492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:02:10.424 [DEBUG] [Thread-72492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:02:10.443 [INFO] [Thread-72492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:02:10.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:02:11.263 [DEBUG] [Thread-72492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:02:11.263 [DEBUG] [Thread-72492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:02:11.263 [DEBUG] [Thread-72492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:02:11.304 [DEBUG] [Thread-72492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:02:11.304 [DEBUG] [Thread-72492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:02:11.307 [DEBUG] [Thread-72492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:02:11.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:02:11.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:02:11.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:02:11.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:02:11.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:02:11.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:02:11.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:02:11.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:02:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:02:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.584468 -999.00  +19.70  42.49     34   +3.60 1 1 2 1 1   888    0 15.68 -45.40 ----- 40.5 42.5 312.4 52.5 23.2 -25.8 23.0 -25.3 23.7 -21.2 24.2 -22.4
2025-12-12T16:02:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:02:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:02:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.584468
2025-12-12T16:02:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:02:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:02:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:02:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:02:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:02:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:02:00', tmtdew=18.65, humidity=28.61, cloud=0.0, wind=44.02, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:01:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:02:11.334 [DEBUG] [Thread-72492] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:02:11.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:02:11.432 [DEBUG] [Thread-72495] [transport.py] [_log()] starting thread (client mode): 0xf575eb00
2025-12-12T16:02:11.432 [DEBUG] [Thread-72495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:02:11.449 [DEBUG] [Thread-72495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:02:11.449 [INFO] [Thread-72495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] client lang: <none>
2025-12-12T16:02:11.457 [DEBUG] [Thread-72495] [transport.py] [_log()] server lang: <none>
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] kex follows: False
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] Compression: none
2025-12-12T16:02:11.458 [DEBUG] [Thread-72495] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:02:11.513 [DEBUG] [Thread-72495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:02:11.514 [DEBUG] [Thread-72495] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:02:11.514 [DEBUG] [Thread-72495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:02:11.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:02:11.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:02:11.569 [DEBUG] [Thread-72495] [transport.py] [_log()] userauth is OK
2025-12-12T16:02:11.570 [DEBUG] [Thread-72495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:02:11.570 [DEBUG] [Thread-72495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:02:11.570 [DEBUG] [Thread-72495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:02:11.570 [DEBUG] [Thread-72495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:02:11.589 [INFO] [Thread-72495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:02:11.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:02:11.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:02:12.477 [DEBUG] [Thread-72495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:02:12.477 [DEBUG] [Thread-72495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:02:12.525 [DEBUG] [Thread-72495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:02:12.525 [DEBUG] [Thread-72495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:02:12.534 [DEBUG] [Thread-72495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:02:12.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:02:12.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:02:12.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:02:12.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:02:12.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:02:12.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:02:12.568 [DEBUG] [Thread-72495] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:02:22.611 [DEBUG] [Thread-72497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:37.667 [DEBUG] [Thread-72498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:02:42.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:02:42.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:02:43.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 2, 33), 18.59, 28.69, 0.0, 41.25, 19.52, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:02:43.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:02:33
2025-12-12T16:02:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:02:43.560 [DEBUG] [Thread-72499] [transport.py] [_log()] starting thread (client mode): 0xf5740850
2025-12-12T16:02:43.560 [DEBUG] [Thread-72499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:02:43.580 [DEBUG] [Thread-72499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:02:43.581 [INFO] [Thread-72499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] client lang: <none>
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] server lang: <none>
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] kex follows: False
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] Compression: none
2025-12-12T16:02:43.584 [DEBUG] [Thread-72499] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:02:43.600 [DEBUG] [Thread-72499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:02:43.600 [DEBUG] [Thread-72499] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:02:43.600 [DEBUG] [Thread-72499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:02:43.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:02:43.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:02:43.601 [DEBUG] [Thread-72499] [transport.py] [_log()] userauth is OK
2025-12-12T16:02:43.601 [DEBUG] [Thread-72499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:02:43.601 [DEBUG] [Thread-72499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:02:43.601 [DEBUG] [Thread-72499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:02:43.601 [DEBUG] [Thread-72499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:02:43.628 [INFO] [Thread-72499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:02:43.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:02:44.266 [DEBUG] [Thread-72499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:02:44.266 [DEBUG] [Thread-72499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:02:44.266 [DEBUG] [Thread-72499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:02:44.307 [DEBUG] [Thread-72499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:02:44.307 [DEBUG] [Thread-72499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:02:44.310 [DEBUG] [Thread-72499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:02:44.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:02:44.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:02:44.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:02:44.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:02:44.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:02:44.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:02:44.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:02:44.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:02:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:02:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.584816 -999.00  +20.00  40.36     33   +3.40 1 1 2 1 1   888    0 15.84 -45.14 ----- 35.3 40.4 319.4 51.4 23.2 -24.6 23.0 -24.6 23.7 -23.6 24.3 -23.2
2025-12-12T16:02:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:02:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:02:44.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.584816
2025-12-12T16:02:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:02:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:02:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:02:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:02:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:02:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:02:33', tmtdew=18.59, humidity=28.69, cloud=0.0, wind=41.25, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:02:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:02:44.332 [DEBUG] [Thread-72499] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:02:44.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:02:44.417 [DEBUG] [Thread-72502] [transport.py] [_log()] starting thread (client mode): 0xf81c3310
2025-12-12T16:02:44.417 [DEBUG] [Thread-72502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:02:44.434 [DEBUG] [Thread-72502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:02:44.434 [INFO] [Thread-72502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] client lang: <none>
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] server lang: <none>
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] kex follows: False
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] Compression: none
2025-12-12T16:02:44.442 [DEBUG] [Thread-72502] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:02:44.499 [DEBUG] [Thread-72502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:02:44.499 [DEBUG] [Thread-72502] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:02:44.499 [DEBUG] [Thread-72502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:02:44.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:02:44.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:02:44.558 [DEBUG] [Thread-72502] [transport.py] [_log()] userauth is OK
2025-12-12T16:02:44.558 [DEBUG] [Thread-72502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:02:44.558 [DEBUG] [Thread-72502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:02:44.558 [DEBUG] [Thread-72502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:02:44.558 [DEBUG] [Thread-72502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:02:44.576 [INFO] [Thread-72502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:02:44.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:02:44.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:02:45.399 [DEBUG] [Thread-72502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:02:45.399 [DEBUG] [Thread-72502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:02:45.447 [DEBUG] [Thread-72502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:02:45.447 [DEBUG] [Thread-72502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:02:45.456 [DEBUG] [Thread-72502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:02:45.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:02:45.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:02:45.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:02:45.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:02:45.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:02:45.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:02:45.492 [DEBUG] [Thread-72502] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:02:52.480 [DEBUG] [Thread-72504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:02:52.694 [DEBUG] [Thread-72505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:06.069 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:06.070 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:07.737 [DEBUG] [Thread-72506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:03:15.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:03:15.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:03:16.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 3, 5), 18.89, 28.16, 0.0, 44.18, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:03:16.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:03:05
2025-12-12T16:03:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:03:16.465 [DEBUG] [Thread-72507] [transport.py] [_log()] starting thread (client mode): 0xf5741fc0
2025-12-12T16:03:16.465 [DEBUG] [Thread-72507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:03:16.486 [DEBUG] [Thread-72507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:03:16.487 [INFO] [Thread-72507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] client lang: <none>
2025-12-12T16:03:16.490 [DEBUG] [Thread-72507] [transport.py] [_log()] server lang: <none>
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] kex follows: False
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] Compression: none
2025-12-12T16:03:16.491 [DEBUG] [Thread-72507] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:03:16.510 [DEBUG] [Thread-72507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:03:16.510 [DEBUG] [Thread-72507] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:03:16.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:03:16.511 [DEBUG] [Thread-72507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:03:16.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:03:16.513 [DEBUG] [Thread-72507] [transport.py] [_log()] userauth is OK
2025-12-12T16:03:16.513 [DEBUG] [Thread-72507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:03:16.514 [DEBUG] [Thread-72507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:03:16.514 [DEBUG] [Thread-72507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:03:16.514 [DEBUG] [Thread-72507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:03:16.530 [INFO] [Thread-72507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:03:16.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:03:17.336 [DEBUG] [Thread-72507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:03:17.336 [DEBUG] [Thread-72507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:03:17.337 [DEBUG] [Thread-72507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:03:17.377 [DEBUG] [Thread-72507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:03:17.377 [DEBUG] [Thread-72507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:03:17.380 [DEBUG] [Thread-72507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:03:17.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:03:17.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:03:17.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:03:17.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:03:17.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:03:17.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:03:17.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:03:17.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:03:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:03:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.585163 -999.00  +20.20  36.48     32   +3.30 1 1 2 1 1   888    0 15.66 -46.97 ----- 30.7 36.5 312.6 45.2 23.2 -25.7 23.1 -24.6 23.8 -24.5 24.3 -22.8
2025-12-12T16:03:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:03:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:03:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.585163
2025-12-12T16:03:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:03:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:03:17.407 [DEBUG] [Thread-72507] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:03:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:03:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:03:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:03:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:03:05', tmtdew=18.89, humidity=28.16, cloud=0.0, wind=44.18, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:02:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:03:17.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:03:17.515 [DEBUG] [Thread-72510] [transport.py] [_log()] starting thread (client mode): 0xf81c3c40
2025-12-12T16:03:17.515 [DEBUG] [Thread-72510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:03:17.531 [DEBUG] [Thread-72510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:03:17.531 [INFO] [Thread-72510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:03:17.539 [DEBUG] [Thread-72510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] client lang: <none>
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] server lang: <none>
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] kex follows: False
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] Compression: none
2025-12-12T16:03:17.540 [DEBUG] [Thread-72510] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:03:17.598 [DEBUG] [Thread-72510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:03:17.599 [DEBUG] [Thread-72510] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:03:17.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:03:17.600 [DEBUG] [Thread-72510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:03:17.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:03:17.655 [DEBUG] [Thread-72510] [transport.py] [_log()] userauth is OK
2025-12-12T16:03:17.655 [DEBUG] [Thread-72510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:03:17.655 [DEBUG] [Thread-72510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:03:17.655 [DEBUG] [Thread-72510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:03:17.656 [DEBUG] [Thread-72510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:03:17.674 [INFO] [Thread-72510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:03:17.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:03:17.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:03:18.535 [DEBUG] [Thread-72510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:03:18.535 [DEBUG] [Thread-72510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:03:18.583 [DEBUG] [Thread-72510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:03:18.583 [DEBUG] [Thread-72510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:03:18.592 [DEBUG] [Thread-72510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:03:18.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:03:18.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:03:18.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:03:18.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:03:18.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:03:18.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:03:18.623 [DEBUG] [Thread-72510] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:03:22.762 [DEBUG] [Thread-72512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:37.804 [DEBUG] [Thread-72513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:48.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:03:48.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:03:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:03:49.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 3, 37), 19.54, 27.0, 0.0, 45.93, 19.93, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:03:49.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:03:37
2025-12-12T16:03:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:03:49.614 [DEBUG] [Thread-72514] [transport.py] [_log()] starting thread (client mode): 0xf81f0b20
2025-12-12T16:03:49.614 [DEBUG] [Thread-72514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:03:49.634 [DEBUG] [Thread-72514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:03:49.634 [INFO] [Thread-72514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:03:49.637 [DEBUG] [Thread-72514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] client lang: <none>
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] server lang: <none>
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] kex follows: False
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] Compression: none
2025-12-12T16:03:49.638 [DEBUG] [Thread-72514] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:03:49.657 [DEBUG] [Thread-72514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:03:49.657 [DEBUG] [Thread-72514] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:03:49.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:03:49.658 [DEBUG] [Thread-72514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:03:49.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:03:49.660 [DEBUG] [Thread-72514] [transport.py] [_log()] userauth is OK
2025-12-12T16:03:49.660 [DEBUG] [Thread-72514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:03:49.660 [DEBUG] [Thread-72514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:03:49.660 [DEBUG] [Thread-72514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:03:49.660 [DEBUG] [Thread-72514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:03:49.684 [INFO] [Thread-72514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:03:49.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:03:50.285 [DEBUG] [Thread-72514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:03:50.285 [DEBUG] [Thread-72514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:03:50.286 [DEBUG] [Thread-72514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:03:50.326 [DEBUG] [Thread-72514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:03:50.327 [DEBUG] [Thread-72514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:03:50.329 [DEBUG] [Thread-72514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:03:50.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:03:50.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:03:50.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:03:50.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:03:50.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:03:50.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:03:50.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:03:50.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:03:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:03:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.585510 -999.00  +20.20  37.32     32   +3.10 1 1 2 1 1   888    0 15.50 -49.40 ----- 44.0 37.3 332.8 47.9 23.3 -25.1 23.1 -24.8 23.9 -22.8 24.4 -22.9
2025-12-12T16:03:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:03:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:03:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.585510
2025-12-12T16:03:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:03:50.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:03:50.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:03:50.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:03:50.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:03:50.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:03:37', tmtdew=19.54, humidity=27.0, cloud=0.0, wind=45.93, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:03:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:03:50.352 [DEBUG] [Thread-72514] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:03:50.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:03:50.449 [DEBUG] [Thread-72517] [transport.py] [_log()] starting thread (client mode): 0xf81f35e0
2025-12-12T16:03:50.449 [DEBUG] [Thread-72517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:03:50.464 [DEBUG] [Thread-72517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:03:50.464 [INFO] [Thread-72517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:03:50.471 [DEBUG] [Thread-72517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:03:50.472 [DEBUG] [Thread-72517] [transport.py] [_log()] client lang: <none>
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] server lang: <none>
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] kex follows: False
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] Compression: none
2025-12-12T16:03:50.473 [DEBUG] [Thread-72517] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:03:50.529 [DEBUG] [Thread-72517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:03:50.529 [DEBUG] [Thread-72517] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:03:50.530 [DEBUG] [Thread-72517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:03:50.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:03:50.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:03:50.586 [DEBUG] [Thread-72517] [transport.py] [_log()] userauth is OK
2025-12-12T16:03:50.586 [DEBUG] [Thread-72517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:03:50.586 [DEBUG] [Thread-72517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:03:50.586 [DEBUG] [Thread-72517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:03:50.586 [DEBUG] [Thread-72517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:03:50.605 [INFO] [Thread-72517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:03:50.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:03:50.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:03:51.478 [DEBUG] [Thread-72517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:03:51.478 [DEBUG] [Thread-72517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:03:51.525 [DEBUG] [Thread-72517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:03:51.526 [DEBUG] [Thread-72517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:03:51.535 [DEBUG] [Thread-72517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:03:51.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:03:51.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:03:51.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:03:51.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:03:51.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:03:51.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:03:51.567 [DEBUG] [Thread-72517] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:03:52.531 [DEBUG] [Thread-72519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:03:52.830 [DEBUG] [Thread-72520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:06.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:06.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:07.879 [DEBUG] [Thread-72521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:04:21.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:04:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:04:22.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 4, 9), 19.29, 27.41, 0.0, 45.75, 19.77, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:04:22.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:04:09
2025-12-12T16:04:22.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:04:22.548 [DEBUG] [Thread-72522] [transport.py] [_log()] starting thread (client mode): 0xfabc72e0
2025-12-12T16:04:22.548 [DEBUG] [Thread-72522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:04:22.568 [DEBUG] [Thread-72522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:04:22.568 [INFO] [Thread-72522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] client lang: <none>
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] server lang: <none>
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] kex follows: False
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:04:22.570 [DEBUG] [Thread-72522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:04:22.571 [DEBUG] [Thread-72522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:04:22.571 [DEBUG] [Thread-72522] [transport.py] [_log()] Compression: none
2025-12-12T16:04:22.571 [DEBUG] [Thread-72522] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:04:22.583 [DEBUG] [Thread-72522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:04:22.583 [DEBUG] [Thread-72522] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:04:22.583 [DEBUG] [Thread-72522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:04:22.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:04:22.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:04:22.585 [DEBUG] [Thread-72522] [transport.py] [_log()] userauth is OK
2025-12-12T16:04:22.585 [DEBUG] [Thread-72522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:04:22.585 [DEBUG] [Thread-72522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:04:22.585 [DEBUG] [Thread-72522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:04:22.585 [DEBUG] [Thread-72522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:04:22.597 [INFO] [Thread-72522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:04:22.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:04:22.913 [DEBUG] [Thread-72524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:23.371 [DEBUG] [Thread-72522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:04:23.371 [DEBUG] [Thread-72522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:04:23.372 [DEBUG] [Thread-72522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:04:23.412 [DEBUG] [Thread-72522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:04:23.412 [DEBUG] [Thread-72522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:04:23.416 [DEBUG] [Thread-72522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:04:23.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:04:23.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:04:23.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:04:23.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:04:23.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:04:23.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:04:23.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:04:23.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:04:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:04:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.585857 -999.00  +19.60  39.25     32   +2.80 1 1 2 1 1   888    0 15.53 -49.12 ----- 30.0 39.2 335.0 64.4 23.4 -25.4 23.1 -26.2 24.0 -22.1 24.4 -23.1
2025-12-12T16:04:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:04:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:04:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.585857
2025-12-12T16:04:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:04:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:04:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:04:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:04:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:04:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:04:09', tmtdew=19.29, humidity=27.41, cloud=0.0, wind=45.75, temperature=19.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:03:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:04:23.443 [DEBUG] [Thread-72522] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:04:23.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:04:23.540 [DEBUG] [Thread-72526] [transport.py] [_log()] starting thread (client mode): 0xf81f2bc0
2025-12-12T16:04:23.540 [DEBUG] [Thread-72526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:04:23.555 [DEBUG] [Thread-72526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:04:23.555 [INFO] [Thread-72526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:04:23.563 [DEBUG] [Thread-72526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] client lang: <none>
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] server lang: <none>
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] kex follows: False
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] Compression: none
2025-12-12T16:04:23.564 [DEBUG] [Thread-72526] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:04:23.620 [DEBUG] [Thread-72526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:04:23.621 [DEBUG] [Thread-72526] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:04:23.621 [DEBUG] [Thread-72526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:04:23.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:04:23.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:04:23.676 [DEBUG] [Thread-72526] [transport.py] [_log()] userauth is OK
2025-12-12T16:04:23.677 [DEBUG] [Thread-72526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:04:23.677 [DEBUG] [Thread-72526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:04:23.677 [DEBUG] [Thread-72526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:04:23.677 [DEBUG] [Thread-72526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:04:23.696 [INFO] [Thread-72526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:04:23.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:04:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:04:24.573 [DEBUG] [Thread-72526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:04:24.573 [DEBUG] [Thread-72526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:04:24.621 [DEBUG] [Thread-72526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:04:24.621 [DEBUG] [Thread-72526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:04:24.630 [DEBUG] [Thread-72526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:04:24.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:04:24.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:04:24.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:04:24.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:04:24.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:04:24.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:04:24.664 [DEBUG] [Thread-72526] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:04:37.944 [DEBUG] [Thread-72528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:52.584 [DEBUG] [Thread-72529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:52.990 [DEBUG] [Thread-72530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:04:54.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:04:54.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:04:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:04:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 4, 41), 18.99, 27.99, 0.0, 55.68, 19.82, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:04:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:04:41
2025-12-12T16:04:55.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:04:55.640 [DEBUG] [Thread-72531] [transport.py] [_log()] starting thread (client mode): 0xf81c2140
2025-12-12T16:04:55.641 [DEBUG] [Thread-72531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:04:55.661 [DEBUG] [Thread-72531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:04:55.661 [INFO] [Thread-72531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] client lang: <none>
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] server lang: <none>
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] kex follows: False
2025-12-12T16:04:55.665 [DEBUG] [Thread-72531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:04:55.666 [DEBUG] [Thread-72531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:04:55.666 [DEBUG] [Thread-72531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:04:55.666 [DEBUG] [Thread-72531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:04:55.666 [DEBUG] [Thread-72531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:04:55.666 [DEBUG] [Thread-72531] [transport.py] [_log()] Compression: none
2025-12-12T16:04:55.666 [DEBUG] [Thread-72531] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:04:55.684 [DEBUG] [Thread-72531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:04:55.684 [DEBUG] [Thread-72531] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:04:55.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:04:55.685 [DEBUG] [Thread-72531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:04:55.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:04:55.687 [DEBUG] [Thread-72531] [transport.py] [_log()] userauth is OK
2025-12-12T16:04:55.687 [DEBUG] [Thread-72531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:04:55.687 [DEBUG] [Thread-72531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:04:55.687 [DEBUG] [Thread-72531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:04:55.687 [DEBUG] [Thread-72531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:04:55.710 [INFO] [Thread-72531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:04:55.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:04:56.362 [DEBUG] [Thread-72531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:04:56.362 [DEBUG] [Thread-72531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:04:56.363 [DEBUG] [Thread-72531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:04:56.403 [DEBUG] [Thread-72531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:04:56.403 [DEBUG] [Thread-72531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:04:56.406 [DEBUG] [Thread-72531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:04:56.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:04:56.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:04:56.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:04:56.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:04:56.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:04:56.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:04:56.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:04:56.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:04:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:04:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.586204 -999.00  +20.10  39.88     33   +3.30 1 2 2 1 1   888    0 15.61 -45.51 ----- 38.8 39.9 325.4 45.8 23.2 -25.3 23.2 -24.5 24.1 -20.9 24.4 -22.9
2025-12-12T16:04:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:04:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:04:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.586204
2025-12-12T16:04:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:04:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:04:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:04:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:04:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T16:04:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:04:41', tmtdew=18.99, humidity=27.99, cloud=0.0, wind=55.68, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:04:08.026', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:04:56.431 [DEBUG] [Thread-72531] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:04:56.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:04:56.529 [DEBUG] [Thread-72534] [transport.py] [_log()] starting thread (client mode): 0xf81c1f30
2025-12-12T16:04:56.529 [DEBUG] [Thread-72534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:04:56.544 [DEBUG] [Thread-72534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:04:56.544 [INFO] [Thread-72534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] client lang: <none>
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] server lang: <none>
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] kex follows: False
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] Compression: none
2025-12-12T16:04:56.552 [DEBUG] [Thread-72534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:04:56.612 [DEBUG] [Thread-72534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:04:56.612 [DEBUG] [Thread-72534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:04:56.613 [DEBUG] [Thread-72534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:04:56.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:04:56.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:04:56.668 [DEBUG] [Thread-72534] [transport.py] [_log()] userauth is OK
2025-12-12T16:04:56.668 [DEBUG] [Thread-72534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:04:56.668 [DEBUG] [Thread-72534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:04:56.668 [DEBUG] [Thread-72534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:04:56.668 [DEBUG] [Thread-72534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:04:56.687 [INFO] [Thread-72534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:04:56.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:04:56.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:04:57.600 [DEBUG] [Thread-72534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:04:57.600 [DEBUG] [Thread-72534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:04:57.649 [DEBUG] [Thread-72534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:04:57.649 [DEBUG] [Thread-72534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:04:57.658 [DEBUG] [Thread-72534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:04:57.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:04:57.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:04:57.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:04:57.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:04:57.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:04:57.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:04:57.693 [DEBUG] [Thread-72534] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:05:06.347 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:05:06.348 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:05:08.020 [DEBUG] [Thread-72536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:05:23.063 [DEBUG] [Thread-72537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:05:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:05:27.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:05:27.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:05:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 5, 13), 18.82, 28.31, 0.0, 51.87, 19.7, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:05:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:05:13
2025-12-12T16:05:28.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:05:28.659 [DEBUG] [Thread-72538] [transport.py] [_log()] starting thread (client mode): 0xfabc64d0
2025-12-12T16:05:28.659 [DEBUG] [Thread-72538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:05:28.678 [DEBUG] [Thread-72538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:05:28.678 [INFO] [Thread-72538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:05:28.681 [DEBUG] [Thread-72538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] client lang: <none>
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] server lang: <none>
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] kex follows: False
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] Compression: none
2025-12-12T16:05:28.682 [DEBUG] [Thread-72538] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:05:28.698 [DEBUG] [Thread-72538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:05:28.698 [DEBUG] [Thread-72538] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:05:28.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:05:28.699 [DEBUG] [Thread-72538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:05:28.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:05:28.701 [DEBUG] [Thread-72538] [transport.py] [_log()] userauth is OK
2025-12-12T16:05:28.701 [DEBUG] [Thread-72538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:05:28.701 [DEBUG] [Thread-72538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:05:28.701 [DEBUG] [Thread-72538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:05:28.702 [DEBUG] [Thread-72538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:05:28.725 [INFO] [Thread-72538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:05:28.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:05:29.352 [DEBUG] [Thread-72538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:05:29.352 [DEBUG] [Thread-72538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:05:29.353 [DEBUG] [Thread-72538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:05:29.394 [DEBUG] [Thread-72538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:05:29.394 [DEBUG] [Thread-72538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:05:29.397 [DEBUG] [Thread-72538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:05:29.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:05:29.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:05:29.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:05:29.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:05:29.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:05:29.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:05:29.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:05:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:05:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:05:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.586552 -999.00  +20.50  42.28     32   +3.50 1 1 2 1 1   888    0 15.58 -45.20 ----- 44.7 42.3 314.4 57.7 23.4 -25.0 23.2 -24.4 24.1 -23.0 24.5 -23.0
2025-12-12T16:05:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:05:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:05:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.586552
2025-12-12T16:05:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:05:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:05:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:05:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:05:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:05:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:05:13', tmtdew=18.82, humidity=28.31, cloud=0.0, wind=51.87, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:04:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:05:29.424 [DEBUG] [Thread-72538] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:05:29.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:05:29.522 [DEBUG] [Thread-72541] [transport.py] [_log()] starting thread (client mode): 0xf81f30a0
2025-12-12T16:05:29.522 [DEBUG] [Thread-72541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:05:29.538 [DEBUG] [Thread-72541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:05:29.538 [INFO] [Thread-72541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:05:29.545 [DEBUG] [Thread-72541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:05:29.546 [DEBUG] [Thread-72541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] client lang: <none>
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] server lang: <none>
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] kex follows: False
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] Compression: none
2025-12-12T16:05:29.547 [DEBUG] [Thread-72541] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:05:29.603 [DEBUG] [Thread-72541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:05:29.603 [DEBUG] [Thread-72541] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:05:29.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:05:29.604 [DEBUG] [Thread-72541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:05:29.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:05:29.658 [DEBUG] [Thread-72541] [transport.py] [_log()] userauth is OK
2025-12-12T16:05:29.658 [DEBUG] [Thread-72541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:05:29.659 [DEBUG] [Thread-72541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:05:29.659 [DEBUG] [Thread-72541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:05:29.659 [DEBUG] [Thread-72541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:05:29.677 [INFO] [Thread-72541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:05:29.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:05:29.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:05:30.539 [DEBUG] [Thread-72541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:05:30.539 [DEBUG] [Thread-72541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:05:30.588 [DEBUG] [Thread-72541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:05:30.588 [DEBUG] [Thread-72541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:05:30.597 [DEBUG] [Thread-72541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:05:30.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:05:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:05:30.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:05:30.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:05:30.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:05:30.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:05:30.632 [DEBUG] [Thread-72541] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:05:38.093 [DEBUG] [Thread-72543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:05:52.629 [DEBUG] [Thread-72544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:05:53.134 [DEBUG] [Thread-72545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:06:00.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:06:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:06:01.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 5, 45), 18.2, 29.44, 0.0, 56.76, 19.32, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:06:01.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:05:45
2025-12-12T16:06:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:06:01.625 [DEBUG] [Thread-72546] [transport.py] [_log()] starting thread (client mode): 0xf5700c40
2025-12-12T16:06:01.625 [DEBUG] [Thread-72546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:06:01.644 [DEBUG] [Thread-72546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:06:01.644 [INFO] [Thread-72546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] client lang: <none>
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] server lang: <none>
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] kex follows: False
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:06:01.647 [DEBUG] [Thread-72546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:06:01.648 [DEBUG] [Thread-72546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:06:01.648 [DEBUG] [Thread-72546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:06:01.648 [DEBUG] [Thread-72546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:06:01.648 [DEBUG] [Thread-72546] [transport.py] [_log()] Compression: none
2025-12-12T16:06:01.648 [DEBUG] [Thread-72546] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:06:01.666 [DEBUG] [Thread-72546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:06:01.667 [DEBUG] [Thread-72546] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:06:01.668 [DEBUG] [Thread-72546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:06:01.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:06:01.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:06:01.670 [DEBUG] [Thread-72546] [transport.py] [_log()] userauth is OK
2025-12-12T16:06:01.670 [DEBUG] [Thread-72546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:06:01.670 [DEBUG] [Thread-72546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:06:01.671 [DEBUG] [Thread-72546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:06:01.671 [DEBUG] [Thread-72546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:06:01.692 [INFO] [Thread-72546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:06:01.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:06:02.333 [DEBUG] [Thread-72546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:06:02.333 [DEBUG] [Thread-72546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:06:02.334 [DEBUG] [Thread-72546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:06:02.375 [DEBUG] [Thread-72546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:06:02.375 [DEBUG] [Thread-72546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:06:02.378 [DEBUG] [Thread-72546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:06:02.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:06:02.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:06:02.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:06:02.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:06:02.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:06:02.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:06:02.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:06:02.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:06:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:06:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.586899 -999.00  +19.90  50.13     33   +3.60 1 1 2 1 1   888    0 15.87 -45.48 ----- 54.3 50.1 314.2 61.7 23.4 -25.4 23.2 -25.4 23.9 -22.4 24.4 -24.0
2025-12-12T16:06:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:06:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:06:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.586899
2025-12-12T16:06:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:06:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:06:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:06:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:06:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:06:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:05:45', tmtdew=18.2, humidity=29.44, cloud=0.0, wind=56.76, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:05:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:06:02.405 [DEBUG] [Thread-72546] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:06:02.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:06:02.503 [DEBUG] [Thread-72549] [transport.py] [_log()] starting thread (client mode): 0xf575f280
2025-12-12T16:06:02.503 [DEBUG] [Thread-72549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:06:02.518 [DEBUG] [Thread-72549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:06:02.518 [INFO] [Thread-72549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:06:02.526 [DEBUG] [Thread-72549] [transport.py] [_log()] client lang: <none>
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] server lang: <none>
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] kex follows: False
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] Compression: none
2025-12-12T16:06:02.527 [DEBUG] [Thread-72549] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:06:02.585 [DEBUG] [Thread-72549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:06:02.585 [DEBUG] [Thread-72549] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:06:02.586 [DEBUG] [Thread-72549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:06:02.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:06:02.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:06:02.641 [DEBUG] [Thread-72549] [transport.py] [_log()] userauth is OK
2025-12-12T16:06:02.641 [DEBUG] [Thread-72549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:06:02.641 [DEBUG] [Thread-72549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:06:02.641 [DEBUG] [Thread-72549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:06:02.642 [DEBUG] [Thread-72549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:06:02.660 [INFO] [Thread-72549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:06:02.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:06:02.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:06:03.540 [DEBUG] [Thread-72549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:06:03.540 [DEBUG] [Thread-72549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:06:03.588 [DEBUG] [Thread-72549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:06:03.588 [DEBUG] [Thread-72549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:06:03.597 [DEBUG] [Thread-72549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:06:03.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:06:03.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:06:03.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:06:03.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:06:03.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:06:03.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:06:03.632 [DEBUG] [Thread-72549] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:06:06.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:06.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:08.163 [DEBUG] [Thread-72551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:23.207 [DEBUG] [Thread-72552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:33.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:06:33.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:06:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:06:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 6, 17), 18.19, 29.45, 0.0, 52.14, 19.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:06:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:06:17
2025-12-12T16:06:34.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:06:34.631 [DEBUG] [Thread-72553] [transport.py] [_log()] starting thread (client mode): 0xf5703970
2025-12-12T16:06:34.631 [DEBUG] [Thread-72553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:06:34.651 [DEBUG] [Thread-72553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:06:34.651 [INFO] [Thread-72553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:34.654 [DEBUG] [Thread-72553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] client lang: <none>
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] server lang: <none>
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] kex follows: False
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] Compression: none
2025-12-12T16:06:34.655 [DEBUG] [Thread-72553] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:06:34.672 [DEBUG] [Thread-72553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:06:34.672 [DEBUG] [Thread-72553] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:06:34.672 [DEBUG] [Thread-72553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:06:34.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:06:34.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:06:34.673 [DEBUG] [Thread-72553] [transport.py] [_log()] userauth is OK
2025-12-12T16:06:34.673 [DEBUG] [Thread-72553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:06:34.673 [DEBUG] [Thread-72553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:06:34.673 [DEBUG] [Thread-72553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:06:34.673 [DEBUG] [Thread-72553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:06:34.682 [INFO] [Thread-72553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:06:34.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:06:35.330 [DEBUG] [Thread-72553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:06:35.330 [DEBUG] [Thread-72553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:06:35.330 [DEBUG] [Thread-72553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:06:35.371 [DEBUG] [Thread-72553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:06:35.371 [DEBUG] [Thread-72553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:06:35.373 [DEBUG] [Thread-72553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:06:35.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:06:35.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:06:35.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:06:35.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:06:35.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:06:35.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:06:35.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:06:35.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:06:35.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:06:35.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.587246 -999.00  +19.00  60.07     35   +3.30 1 1 3 1 1   888    0 15.65 -45.79 ----- 47.2 60.1 309.0 70.5 23.2 -26.1 23.0 -26.3 23.9 -23.7 24.1 -24.1
2025-12-12T16:06:35.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:06:35.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:06:35.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.587246
2025-12-12T16:06:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:06:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:06:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:06:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:06:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:06:35.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:06:17', tmtdew=18.19, humidity=29.45, cloud=0.0, wind=52.14, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:05:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:06:35.393 [DEBUG] [Thread-72553] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:06:35.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:06:35.478 [DEBUG] [Thread-72556] [transport.py] [_log()] starting thread (client mode): 0xf57038b0
2025-12-12T16:06:35.478 [DEBUG] [Thread-72556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:06:35.493 [DEBUG] [Thread-72556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:06:35.493 [INFO] [Thread-72556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] client lang: <none>
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] server lang: <none>
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] kex follows: False
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] Compression: none
2025-12-12T16:06:35.501 [DEBUG] [Thread-72556] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:06:35.559 [DEBUG] [Thread-72556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:06:35.559 [DEBUG] [Thread-72556] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:06:35.559 [DEBUG] [Thread-72556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:06:35.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:06:35.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:06:35.616 [DEBUG] [Thread-72556] [transport.py] [_log()] userauth is OK
2025-12-12T16:06:35.616 [DEBUG] [Thread-72556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:06:35.616 [DEBUG] [Thread-72556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:06:35.616 [DEBUG] [Thread-72556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:06:35.616 [DEBUG] [Thread-72556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:06:35.630 [INFO] [Thread-72556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:06:35.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:06:35.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:06:36.461 [DEBUG] [Thread-72556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:06:36.462 [DEBUG] [Thread-72556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:06:36.509 [DEBUG] [Thread-72556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:06:36.510 [DEBUG] [Thread-72556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:06:36.518 [DEBUG] [Thread-72556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:06:36.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:06:36.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:06:36.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:06:36.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:06:36.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:06:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:06:36.551 [DEBUG] [Thread-72556] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:06:38.235 [DEBUG] [Thread-72558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:52.695 [DEBUG] [Thread-72559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:06:53.280 [DEBUG] [Thread-72560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:07:06.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:07:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:07:06.626 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:06.627 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 6, 49), 18.57, 28.94, 0.0, 43.48, 19.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:07:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:06:49
2025-12-12T16:07:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:07:07.522 [DEBUG] [Thread-72561] [transport.py] [_log()] starting thread (client mode): 0xf5740880
2025-12-12T16:07:07.522 [DEBUG] [Thread-72561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:07:07.543 [DEBUG] [Thread-72561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:07:07.543 [INFO] [Thread-72561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] client lang: <none>
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] server lang: <none>
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] kex follows: False
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] Compression: none
2025-12-12T16:07:07.545 [DEBUG] [Thread-72561] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:07:07.561 [DEBUG] [Thread-72561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:07:07.562 [DEBUG] [Thread-72561] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:07:07.562 [DEBUG] [Thread-72561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:07:07.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:07:07.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:07:07.565 [DEBUG] [Thread-72561] [transport.py] [_log()] userauth is OK
2025-12-12T16:07:07.565 [DEBUG] [Thread-72561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:07:07.565 [DEBUG] [Thread-72561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:07:07.565 [DEBUG] [Thread-72561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:07:07.565 [DEBUG] [Thread-72561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:07:07.584 [INFO] [Thread-72561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:07:07.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:07:08.248 [DEBUG] [Thread-72561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:07:08.248 [DEBUG] [Thread-72561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:07:08.248 [DEBUG] [Thread-72561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:07:08.290 [DEBUG] [Thread-72561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:07:08.290 [DEBUG] [Thread-72561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:07:08.293 [DEBUG] [Thread-72561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:07:08.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:07:08.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:07:08.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:07:08.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:07:08.310 [DEBUG] [Thread-72564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:08.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:07:08.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:07:08.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:07:08.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:07:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:07:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.587593 -999.00  +19.20  44.92     35   +3.50 1 1 2 1 1   888    0 15.45 -46.27 ----- 49.1 44.9 312.6 59.6 23.1 -26.9 22.8 -24.8 23.5 -24.2 24.0 -23.5
2025-12-12T16:07:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:07:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:07:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.587593
2025-12-12T16:07:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:07:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:07:08.314 [DEBUG] [Thread-72561] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:07:08.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:07:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:07:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:07:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:06:49', tmtdew=18.57, humidity=28.94, cloud=0.0, wind=43.48, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:06:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:07:08.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:07:08.413 [DEBUG] [Thread-72565] [transport.py] [_log()] starting thread (client mode): 0xf81c3310
2025-12-12T16:07:08.414 [DEBUG] [Thread-72565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:07:08.432 [DEBUG] [Thread-72565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:07:08.433 [INFO] [Thread-72565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:07:08.440 [DEBUG] [Thread-72565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:07:08.440 [DEBUG] [Thread-72565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:07:08.440 [DEBUG] [Thread-72565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:07:08.440 [DEBUG] [Thread-72565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] client lang: <none>
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] server lang: <none>
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] kex follows: False
2025-12-12T16:07:08.441 [DEBUG] [Thread-72565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:07:08.442 [DEBUG] [Thread-72565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:07:08.442 [DEBUG] [Thread-72565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:07:08.442 [DEBUG] [Thread-72565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:07:08.442 [DEBUG] [Thread-72565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:07:08.442 [DEBUG] [Thread-72565] [transport.py] [_log()] Compression: none
2025-12-12T16:07:08.442 [DEBUG] [Thread-72565] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:07:08.499 [DEBUG] [Thread-72565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:07:08.500 [DEBUG] [Thread-72565] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:07:08.500 [DEBUG] [Thread-72565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:07:08.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:07:08.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:07:08.555 [DEBUG] [Thread-72565] [transport.py] [_log()] userauth is OK
2025-12-12T16:07:08.555 [DEBUG] [Thread-72565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:07:08.555 [DEBUG] [Thread-72565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:07:08.555 [DEBUG] [Thread-72565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:07:08.556 [DEBUG] [Thread-72565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:07:08.574 [INFO] [Thread-72565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:07:08.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:07:08.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:07:09.439 [DEBUG] [Thread-72565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:07:09.439 [DEBUG] [Thread-72565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:07:09.487 [DEBUG] [Thread-72565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:07:09.487 [DEBUG] [Thread-72565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:07:09.495 [DEBUG] [Thread-72565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:07:09.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:07:09.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:07:09.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:07:09.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:07:09.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:07:09.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:07:09.527 [DEBUG] [Thread-72565] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:07:23.336 [DEBUG] [Thread-72567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:38.374 [DEBUG] [Thread-72568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:39.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:07:39.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:07:39.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:07:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 7, 21), 18.67, 28.76, 0.0, 43.63, 19.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:07:40.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:07:21
2025-12-12T16:07:40.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:07:40.500 [DEBUG] [Thread-72569] [transport.py] [_log()] starting thread (client mode): 0xf575e140
2025-12-12T16:07:40.500 [DEBUG] [Thread-72569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:07:40.521 [DEBUG] [Thread-72569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:07:40.521 [INFO] [Thread-72569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] client lang: <none>
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] server lang: <none>
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] kex follows: False
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] Compression: none
2025-12-12T16:07:40.525 [DEBUG] [Thread-72569] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:07:40.542 [DEBUG] [Thread-72569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:07:40.543 [DEBUG] [Thread-72569] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:07:40.543 [DEBUG] [Thread-72569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:07:40.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:07:40.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:07:40.545 [DEBUG] [Thread-72569] [transport.py] [_log()] userauth is OK
2025-12-12T16:07:40.545 [DEBUG] [Thread-72569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:07:40.546 [DEBUG] [Thread-72569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:07:40.546 [DEBUG] [Thread-72569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:07:40.546 [DEBUG] [Thread-72569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:07:40.578 [INFO] [Thread-72569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:07:40.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:07:41.252 [DEBUG] [Thread-72569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:07:41.252 [DEBUG] [Thread-72569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:07:41.252 [DEBUG] [Thread-72569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:07:41.293 [DEBUG] [Thread-72569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:07:41.293 [DEBUG] [Thread-72569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:07:41.297 [DEBUG] [Thread-72569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:07:41.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:07:41.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:07:41.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:07:41.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:07:41.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:07:41.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:07:41.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:07:41.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:07:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:07:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.588288 -999.00  +19.50  32.03     34   +3.60 1 1 2 1 1   888    0 15.41 -48.49 ----- 35.5 32.0 307.8 49.0 22.9 -26.6 22.8 -25.0 23.5 -22.5 24.0 -23.3
2025-12-12T16:07:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:07:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:07:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.588288
2025-12-12T16:07:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:07:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:07:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:07:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:07:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:07:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:07:21', tmtdew=18.67, humidity=28.76, cloud=0.0, wind=43.63, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:07:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:07:41.323 [DEBUG] [Thread-72569] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:07:41.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:07:41.420 [DEBUG] [Thread-72572] [transport.py] [_log()] starting thread (client mode): 0xf57bcaf0
2025-12-12T16:07:41.420 [DEBUG] [Thread-72572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:07:41.441 [DEBUG] [Thread-72572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:07:41.442 [INFO] [Thread-72572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:07:41.449 [DEBUG] [Thread-72572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:07:41.449 [DEBUG] [Thread-72572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:07:41.449 [DEBUG] [Thread-72572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] client lang: <none>
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] server lang: <none>
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] kex follows: False
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] Compression: none
2025-12-12T16:07:41.450 [DEBUG] [Thread-72572] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:07:41.509 [DEBUG] [Thread-72572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:07:41.510 [DEBUG] [Thread-72572] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:07:41.510 [DEBUG] [Thread-72572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:07:41.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:07:41.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:07:41.566 [DEBUG] [Thread-72572] [transport.py] [_log()] userauth is OK
2025-12-12T16:07:41.566 [DEBUG] [Thread-72572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:07:41.567 [DEBUG] [Thread-72572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:07:41.567 [DEBUG] [Thread-72572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:07:41.567 [DEBUG] [Thread-72572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:07:41.587 [INFO] [Thread-72572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:07:41.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:07:41.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:07:42.439 [DEBUG] [Thread-72572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:07:42.439 [DEBUG] [Thread-72572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:07:42.487 [DEBUG] [Thread-72572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:07:42.487 [DEBUG] [Thread-72572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:07:42.496 [DEBUG] [Thread-72572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:07:42.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:07:42.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:07:42.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:07:42.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:07:42.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:07:42.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:07:42.530 [DEBUG] [Thread-72572] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:07:52.743 [DEBUG] [Thread-72574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:07:53.401 [DEBUG] [Thread-72575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:06.767 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:06.768 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:08.436 [DEBUG] [Thread-72576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:12.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:08:12.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:08:12.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:08:13.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 7, 53), 18.47, 29.02, 0.0, 32.57, 19.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:08:13.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:07:53
2025-12-12T16:08:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:08:13.525 [DEBUG] [Thread-72577] [transport.py] [_log()] starting thread (client mode): 0xf5741ed0
2025-12-12T16:08:13.526 [DEBUG] [Thread-72577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:08:13.548 [DEBUG] [Thread-72577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:08:13.548 [INFO] [Thread-72577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] client lang: <none>
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] server lang: <none>
2025-12-12T16:08:13.551 [DEBUG] [Thread-72577] [transport.py] [_log()] kex follows: False
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] Compression: none
2025-12-12T16:08:13.552 [DEBUG] [Thread-72577] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:08:13.568 [DEBUG] [Thread-72577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:08:13.568 [DEBUG] [Thread-72577] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:08:13.569 [DEBUG] [Thread-72577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:08:13.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:08:13.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:08:13.571 [DEBUG] [Thread-72577] [transport.py] [_log()] userauth is OK
2025-12-12T16:08:13.571 [DEBUG] [Thread-72577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:08:13.571 [DEBUG] [Thread-72577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:08:13.571 [DEBUG] [Thread-72577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:08:13.571 [DEBUG] [Thread-72577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:08:13.595 [INFO] [Thread-72577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:08:13.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:08:14.221 [DEBUG] [Thread-72577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:08:14.221 [DEBUG] [Thread-72577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:08:14.222 [DEBUG] [Thread-72577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:08:14.262 [DEBUG] [Thread-72577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:08:14.262 [DEBUG] [Thread-72577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:08:14.265 [DEBUG] [Thread-72577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:08:14.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:08:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:08:14.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:08:14.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:08:14.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:08:14.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:08:14.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:08:14.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:08:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:08:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.588635 -999.00  +19.50  39.33     34   +3.40 1 1 2 1 1   888    0 15.36 -45.76 ----- 38.2 39.3 317.4 45.6 23.0 -24.8 22.9 -25.2 23.6 -24.0 24.1 -23.4
2025-12-12T16:08:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:08:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:08:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.588635
2025-12-12T16:08:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:08:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:08:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:08:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:08:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:08:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:07:53', tmtdew=18.47, humidity=29.02, cloud=0.0, wind=32.57, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:07:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:08:14.289 [DEBUG] [Thread-72577] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:08:14.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:08:14.387 [DEBUG] [Thread-72580] [transport.py] [_log()] starting thread (client mode): 0xf5703e20
2025-12-12T16:08:14.387 [DEBUG] [Thread-72580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:08:14.402 [DEBUG] [Thread-72580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:08:14.402 [INFO] [Thread-72580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:08:14.409 [DEBUG] [Thread-72580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:08:14.410 [DEBUG] [Thread-72580] [transport.py] [_log()] client lang: <none>
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] server lang: <none>
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] kex follows: False
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:08:14.411 [DEBUG] [Thread-72580] [transport.py] [_log()] Compression: none
2025-12-12T16:08:14.412 [DEBUG] [Thread-72580] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:08:14.470 [DEBUG] [Thread-72580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:08:14.470 [DEBUG] [Thread-72580] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:08:14.471 [DEBUG] [Thread-72580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:08:14.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:08:14.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:08:14.525 [DEBUG] [Thread-72580] [transport.py] [_log()] userauth is OK
2025-12-12T16:08:14.526 [DEBUG] [Thread-72580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:08:14.526 [DEBUG] [Thread-72580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:08:14.526 [DEBUG] [Thread-72580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:08:14.526 [DEBUG] [Thread-72580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:08:14.546 [INFO] [Thread-72580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:08:14.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:08:14.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:08:15.381 [DEBUG] [Thread-72580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:08:15.381 [DEBUG] [Thread-72580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:08:15.429 [DEBUG] [Thread-72580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:08:15.429 [DEBUG] [Thread-72580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:08:15.438 [DEBUG] [Thread-72580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:08:15.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:08:15.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:08:15.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:08:15.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:08:15.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:08:15.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:08:15.475 [DEBUG] [Thread-72580] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:08:23.462 [DEBUG] [Thread-72582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:38.513 [DEBUG] [Thread-72583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:45.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:08:45.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:08:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:08:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 8, 25), 18.33, 29.26, 0.0, 32.09, 19.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:08:46.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:08:25
2025-12-12T16:08:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:08:46.456 [DEBUG] [Thread-72584] [transport.py] [_log()] starting thread (client mode): 0xf570db10
2025-12-12T16:08:46.456 [DEBUG] [Thread-72584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:08:46.476 [DEBUG] [Thread-72584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:08:46.476 [INFO] [Thread-72584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] client lang: <none>
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] server lang: <none>
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] kex follows: False
2025-12-12T16:08:46.479 [DEBUG] [Thread-72584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:08:46.480 [DEBUG] [Thread-72584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:08:46.480 [DEBUG] [Thread-72584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:08:46.480 [DEBUG] [Thread-72584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:08:46.480 [DEBUG] [Thread-72584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:08:46.480 [DEBUG] [Thread-72584] [transport.py] [_log()] Compression: none
2025-12-12T16:08:46.480 [DEBUG] [Thread-72584] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:08:46.497 [DEBUG] [Thread-72584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:08:46.498 [DEBUG] [Thread-72584] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:08:46.498 [DEBUG] [Thread-72584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:08:46.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:08:46.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:08:46.500 [DEBUG] [Thread-72584] [transport.py] [_log()] userauth is OK
2025-12-12T16:08:46.500 [DEBUG] [Thread-72584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:08:46.500 [DEBUG] [Thread-72584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:08:46.500 [DEBUG] [Thread-72584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:08:46.500 [DEBUG] [Thread-72584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:08:46.535 [INFO] [Thread-72584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:08:46.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:08:47.185 [DEBUG] [Thread-72584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:08:47.186 [DEBUG] [Thread-72584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:08:47.186 [DEBUG] [Thread-72584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:08:47.227 [DEBUG] [Thread-72584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:08:47.227 [DEBUG] [Thread-72584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:08:47.230 [DEBUG] [Thread-72584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:08:47.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:08:47.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:08:47.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:08:47.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:08:47.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:08:47.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:08:47.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:08:47.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:08:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:08:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.588982 -999.00  +19.40  28.94     35   +3.60 1 1 1 1 1   888    0 15.13 -51.06 ----- 28.8 28.9 313.2 41.6 23.0 -26.5 22.9 -24.1 23.6 -23.8 24.2 -22.5
2025-12-12T16:08:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:08:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:08:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.588982
2025-12-12T16:08:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:08:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:08:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:08:47.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:08:47.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:08:47.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:08:25', tmtdew=18.33, humidity=29.26, cloud=0.0, wind=32.09, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:08:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:08:47.257 [DEBUG] [Thread-72584] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:08:47.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:08:47.352 [DEBUG] [Thread-72587] [transport.py] [_log()] starting thread (client mode): 0xf570c5b0
2025-12-12T16:08:47.353 [DEBUG] [Thread-72587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:08:47.371 [DEBUG] [Thread-72587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:08:47.371 [INFO] [Thread-72587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:08:47.380 [DEBUG] [Thread-72587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:08:47.381 [DEBUG] [Thread-72587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] client lang: <none>
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] server lang: <none>
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] kex follows: False
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:08:47.382 [DEBUG] [Thread-72587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:08:47.383 [DEBUG] [Thread-72587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:08:47.383 [DEBUG] [Thread-72587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:08:47.383 [DEBUG] [Thread-72587] [transport.py] [_log()] Compression: none
2025-12-12T16:08:47.383 [DEBUG] [Thread-72587] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:08:47.437 [DEBUG] [Thread-72587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:08:47.438 [DEBUG] [Thread-72587] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:08:47.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:08:47.440 [DEBUG] [Thread-72587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:08:47.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:08:47.493 [DEBUG] [Thread-72587] [transport.py] [_log()] userauth is OK
2025-12-12T16:08:47.493 [DEBUG] [Thread-72587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:08:47.493 [DEBUG] [Thread-72587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:08:47.493 [DEBUG] [Thread-72587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:08:47.494 [DEBUG] [Thread-72587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:08:47.516 [INFO] [Thread-72587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:08:47.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:08:47.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:08:48.421 [DEBUG] [Thread-72587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:08:48.421 [DEBUG] [Thread-72587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:08:48.469 [DEBUG] [Thread-72587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:08:48.469 [DEBUG] [Thread-72587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:08:48.478 [DEBUG] [Thread-72587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:08:48.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:08:48.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:08:48.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:08:48.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:08:48.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:08:48.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:08:48.512 [DEBUG] [Thread-72587] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:08:52.807 [DEBUG] [Thread-72589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:08:53.546 [DEBUG] [Thread-72590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:06.920 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:06.921 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:08.589 [DEBUG] [Thread-72591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:18.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:09:18.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:09:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:09:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 8, 57), 18.49, 29.06, 0.0, 31.64, 19.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:09:19.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:08:57
2025-12-12T16:09:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:09:19.479 [DEBUG] [Thread-72592] [transport.py] [_log()] starting thread (client mode): 0xf57020b0
2025-12-12T16:09:19.479 [DEBUG] [Thread-72592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:09:19.499 [DEBUG] [Thread-72592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:09:19.499 [INFO] [Thread-72592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:09:19.502 [DEBUG] [Thread-72592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:09:19.502 [DEBUG] [Thread-72592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:09:19.502 [DEBUG] [Thread-72592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:09:19.502 [DEBUG] [Thread-72592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] client lang: <none>
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] server lang: <none>
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] kex follows: False
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] Compression: none
2025-12-12T16:09:19.503 [DEBUG] [Thread-72592] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:09:19.520 [DEBUG] [Thread-72592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:09:19.520 [DEBUG] [Thread-72592] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:09:19.521 [DEBUG] [Thread-72592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:09:19.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:09:19.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:09:19.565 [DEBUG] [Thread-72592] [transport.py] [_log()] userauth is OK
2025-12-12T16:09:19.565 [DEBUG] [Thread-72592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:09:19.565 [DEBUG] [Thread-72592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:09:19.565 [DEBUG] [Thread-72592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:09:19.565 [DEBUG] [Thread-72592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:09:19.598 [INFO] [Thread-72592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:09:19.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:09:20.230 [DEBUG] [Thread-72592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:09:20.230 [DEBUG] [Thread-72592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:09:20.230 [DEBUG] [Thread-72592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:09:20.271 [DEBUG] [Thread-72592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:09:20.271 [DEBUG] [Thread-72592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:09:20.274 [DEBUG] [Thread-72592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:09:20.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:09:20.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:09:20.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:09:20.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:09:20.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:09:20.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:09:20.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:09:20.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:09:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:09:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.589329 -999.00  +19.70  33.34     34   +3.40 1 1 2 1 1   888    0 15.31 -48.64 ----- 30.6 33.3 314.4 40.5 23.2 -25.1 23.1 -25.7 23.9 -22.3 24.2 -23.3
2025-12-12T16:09:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:09:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:09:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.589329
2025-12-12T16:09:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:09:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:09:20.298 [DEBUG] [Thread-72592] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:09:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:09:20.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:09:20.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:09:20.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:08:57', tmtdew=18.49, humidity=29.06, cloud=0.0, wind=31.64, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:08:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:09:20.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:09:20.394 [DEBUG] [Thread-72595] [transport.py] [_log()] starting thread (client mode): 0xf81c0fa0
2025-12-12T16:09:20.394 [DEBUG] [Thread-72595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:09:20.409 [DEBUG] [Thread-72595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:09:20.409 [INFO] [Thread-72595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:09:20.417 [DEBUG] [Thread-72595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:09:20.417 [DEBUG] [Thread-72595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] client lang: <none>
2025-12-12T16:09:20.418 [DEBUG] [Thread-72595] [transport.py] [_log()] server lang: <none>
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] kex follows: False
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] Compression: none
2025-12-12T16:09:20.419 [DEBUG] [Thread-72595] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:09:20.475 [DEBUG] [Thread-72595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:09:20.476 [DEBUG] [Thread-72595] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:09:20.476 [DEBUG] [Thread-72595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:09:20.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:09:20.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:09:20.536 [DEBUG] [Thread-72595] [transport.py] [_log()] userauth is OK
2025-12-12T16:09:20.536 [DEBUG] [Thread-72595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:09:20.536 [DEBUG] [Thread-72595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:09:20.536 [DEBUG] [Thread-72595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:09:20.537 [DEBUG] [Thread-72595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:09:20.554 [INFO] [Thread-72595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:09:20.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:09:20.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:09:21.471 [DEBUG] [Thread-72595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:09:21.471 [DEBUG] [Thread-72595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:09:21.519 [DEBUG] [Thread-72595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:09:21.519 [DEBUG] [Thread-72595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:09:21.528 [DEBUG] [Thread-72595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:09:21.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:09:21.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:09:21.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:09:21.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:09:21.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:09:21.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:09:21.563 [DEBUG] [Thread-72595] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:09:23.615 [DEBUG] [Thread-72597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:38.669 [DEBUG] [Thread-72598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:51.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:09:51.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:09:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:09:52.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 9, 29), 18.7, 28.71, 0.0, 34.56, 19.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:09:52.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:09:29
2025-12-12T16:09:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:09:52.529 [DEBUG] [Thread-72599] [transport.py] [_log()] starting thread (client mode): 0xf81c0310
2025-12-12T16:09:52.529 [DEBUG] [Thread-72599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:09:52.552 [DEBUG] [Thread-72599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:09:52.552 [INFO] [Thread-72599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:09:52.555 [DEBUG] [Thread-72599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:09:52.555 [DEBUG] [Thread-72599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] client lang: <none>
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] server lang: <none>
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] kex follows: False
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:09:52.556 [DEBUG] [Thread-72599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:09:52.557 [DEBUG] [Thread-72599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:09:52.557 [DEBUG] [Thread-72599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:09:52.557 [DEBUG] [Thread-72599] [transport.py] [_log()] Compression: none
2025-12-12T16:09:52.557 [DEBUG] [Thread-72599] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:09:52.576 [DEBUG] [Thread-72599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:09:52.577 [DEBUG] [Thread-72599] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:09:52.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:09:52.578 [DEBUG] [Thread-72599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:09:52.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:09:52.580 [DEBUG] [Thread-72599] [transport.py] [_log()] userauth is OK
2025-12-12T16:09:52.580 [DEBUG] [Thread-72599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:09:52.580 [DEBUG] [Thread-72599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:09:52.580 [DEBUG] [Thread-72599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:09:52.581 [DEBUG] [Thread-72599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:09:52.605 [INFO] [Thread-72599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:09:52.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:09:52.859 [DEBUG] [Thread-72601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:53.238 [DEBUG] [Thread-72599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:09:53.238 [DEBUG] [Thread-72599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:09:53.239 [DEBUG] [Thread-72599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:09:53.279 [DEBUG] [Thread-72599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:09:53.279 [DEBUG] [Thread-72599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:09:53.282 [DEBUG] [Thread-72599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:09:53.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:09:53.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:09:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:09:53.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:09:53.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:09:53.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:09:53.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:09:53.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:09:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:09:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.589677 -999.00  +19.90  35.93     34   +3.60 1 2 2 1 1   888    0 15.37 -48.34 ----- 38.3 35.9 311.6 43.0 23.1 -25.8 23.1 -24.2 23.8 -21.3 24.4 -22.1
2025-12-12T16:09:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:09:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:09:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.589677
2025-12-12T16:09:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:09:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:09:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:09:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:09:53.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T16:09:53.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:09:29', tmtdew=18.7, humidity=28.71, cloud=0.0, wind=34.56, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:09:08.093', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:09:53.309 [DEBUG] [Thread-72599] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:09:53.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:09:53.407 [DEBUG] [Thread-72603] [transport.py] [_log()] starting thread (client mode): 0xf57beda0
2025-12-12T16:09:53.407 [DEBUG] [Thread-72603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:09:53.422 [DEBUG] [Thread-72603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:09:53.422 [INFO] [Thread-72603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:09:53.429 [DEBUG] [Thread-72603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:09:53.429 [DEBUG] [Thread-72603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] client lang: <none>
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] server lang: <none>
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] kex follows: False
2025-12-12T16:09:53.430 [DEBUG] [Thread-72603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:09:53.431 [DEBUG] [Thread-72603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:09:53.431 [DEBUG] [Thread-72603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:09:53.431 [DEBUG] [Thread-72603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:09:53.431 [DEBUG] [Thread-72603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:09:53.431 [DEBUG] [Thread-72603] [transport.py] [_log()] Compression: none
2025-12-12T16:09:53.431 [DEBUG] [Thread-72603] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:09:53.487 [DEBUG] [Thread-72603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:09:53.487 [DEBUG] [Thread-72603] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:09:53.488 [DEBUG] [Thread-72603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:09:53.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:09:53.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:09:53.543 [DEBUG] [Thread-72603] [transport.py] [_log()] userauth is OK
2025-12-12T16:09:53.543 [DEBUG] [Thread-72603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:09:53.543 [DEBUG] [Thread-72603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:09:53.543 [DEBUG] [Thread-72603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:09:53.543 [DEBUG] [Thread-72603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:09:53.565 [INFO] [Thread-72603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:09:53.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:09:53.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:09:53.698 [DEBUG] [Thread-72605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:09:54.437 [DEBUG] [Thread-72603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:09:54.437 [DEBUG] [Thread-72603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:09:54.486 [DEBUG] [Thread-72603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:09:54.486 [DEBUG] [Thread-72603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:09:54.495 [DEBUG] [Thread-72603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:09:54.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:09:54.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:09:54.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:09:54.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:09:54.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:09:54.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:09:54.529 [DEBUG] [Thread-72603] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:10:07.060 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:07.061 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:08.753 [DEBUG] [Thread-72606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:23.781 [DEBUG] [Thread-72607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:24.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:10:24.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:10:24.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:10:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 10, 1), 18.81, 28.56, 0.0, 41.32, 19.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:10:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:10:01
2025-12-12T16:10:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:10:25.525 [DEBUG] [Thread-72608] [transport.py] [_log()] starting thread (client mode): 0xf570e140
2025-12-12T16:10:25.525 [DEBUG] [Thread-72608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:10:25.545 [DEBUG] [Thread-72608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:10:25.545 [INFO] [Thread-72608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] client lang: <none>
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] server lang: <none>
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] kex follows: False
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] Compression: none
2025-12-12T16:10:25.548 [DEBUG] [Thread-72608] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:10:25.566 [DEBUG] [Thread-72608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:10:25.566 [DEBUG] [Thread-72608] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:10:25.566 [DEBUG] [Thread-72608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:10:25.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:10:25.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:10:25.567 [DEBUG] [Thread-72608] [transport.py] [_log()] userauth is OK
2025-12-12T16:10:25.567 [DEBUG] [Thread-72608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:10:25.567 [DEBUG] [Thread-72608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:10:25.567 [DEBUG] [Thread-72608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:10:25.567 [DEBUG] [Thread-72608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:10:25.584 [INFO] [Thread-72608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:10:25.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:10:26.376 [DEBUG] [Thread-72608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:10:26.376 [DEBUG] [Thread-72608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:10:26.376 [DEBUG] [Thread-72608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:10:26.418 [DEBUG] [Thread-72608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:10:26.418 [DEBUG] [Thread-72608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:10:26.420 [DEBUG] [Thread-72608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:10:26.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:10:26.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:10:26.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:10:26.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:10:26.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:10:26.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:10:26.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.590024 -999.00  +20.10  47.14     33   +3.60 1 1 2 1 1   888    0 15.35 -49.06 ----- 41.6 47.1 304.8 55.9 23.3 -24.1 23.1 -25.1 23.9 -22.0 24.4 -22.8
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.590024
2025-12-12T16:10:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:10:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:10:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:10:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:10:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:10:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:10:01', tmtdew=18.81, humidity=28.56, cloud=0.0, wind=41.32, temperature=19.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:09:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:10:26.437 [DEBUG] [Thread-72608] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:10:26.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:10:26.526 [DEBUG] [Thread-72611] [transport.py] [_log()] starting thread (client mode): 0xf813cfa0
2025-12-12T16:10:26.526 [DEBUG] [Thread-72611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:10:26.541 [DEBUG] [Thread-72611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:10:26.541 [INFO] [Thread-72611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] client lang: <none>
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] server lang: <none>
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] kex follows: False
2025-12-12T16:10:26.548 [DEBUG] [Thread-72611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:10:26.549 [DEBUG] [Thread-72611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:10:26.549 [DEBUG] [Thread-72611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:10:26.549 [DEBUG] [Thread-72611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:10:26.549 [DEBUG] [Thread-72611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:10:26.549 [DEBUG] [Thread-72611] [transport.py] [_log()] Compression: none
2025-12-12T16:10:26.549 [DEBUG] [Thread-72611] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:10:26.605 [DEBUG] [Thread-72611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:10:26.605 [DEBUG] [Thread-72611] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:10:26.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:10:26.605 [DEBUG] [Thread-72611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:10:26.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:10:26.662 [DEBUG] [Thread-72611] [transport.py] [_log()] userauth is OK
2025-12-12T16:10:26.662 [DEBUG] [Thread-72611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:10:26.662 [DEBUG] [Thread-72611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:10:26.662 [DEBUG] [Thread-72611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:10:26.662 [DEBUG] [Thread-72611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:10:26.675 [INFO] [Thread-72611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:10:26.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:10:26.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:10:27.500 [DEBUG] [Thread-72611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:10:27.500 [DEBUG] [Thread-72611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:10:27.548 [DEBUG] [Thread-72611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:10:27.548 [DEBUG] [Thread-72611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:10:27.556 [DEBUG] [Thread-72611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:10:27.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:10:27.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:10:27.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:10:27.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:10:27.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:10:27.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:10:27.588 [DEBUG] [Thread-72611] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:10:38.808 [DEBUG] [Thread-72613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:52.913 [DEBUG] [Thread-72614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:53.854 [DEBUG] [Thread-72615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:10:57.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:10:57.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:10:57.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:10:58.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 10, 33), 19.66, 27.02, 0.0, 52.57, 20.83, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:10:58.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:10:33
2025-12-12T16:10:58.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:10:58.569 [DEBUG] [Thread-72616] [transport.py] [_log()] starting thread (client mode): 0xf5740880
2025-12-12T16:10:58.569 [DEBUG] [Thread-72616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:10:58.590 [DEBUG] [Thread-72616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:10:58.590 [INFO] [Thread-72616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:10:58.593 [DEBUG] [Thread-72616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] client lang: <none>
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] server lang: <none>
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] kex follows: False
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:10:58.594 [DEBUG] [Thread-72616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:10:58.595 [DEBUG] [Thread-72616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:10:58.595 [DEBUG] [Thread-72616] [transport.py] [_log()] Compression: none
2025-12-12T16:10:58.595 [DEBUG] [Thread-72616] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:10:58.611 [DEBUG] [Thread-72616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:10:58.612 [DEBUG] [Thread-72616] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:10:58.612 [DEBUG] [Thread-72616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:10:58.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:10:58.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:10:58.614 [DEBUG] [Thread-72616] [transport.py] [_log()] userauth is OK
2025-12-12T16:10:58.614 [DEBUG] [Thread-72616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:10:58.614 [DEBUG] [Thread-72616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:10:58.615 [DEBUG] [Thread-72616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:10:58.615 [DEBUG] [Thread-72616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:10:58.638 [INFO] [Thread-72616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:10:58.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:10:59.270 [DEBUG] [Thread-72616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:10:59.270 [DEBUG] [Thread-72616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:10:59.270 [DEBUG] [Thread-72616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:10:59.311 [DEBUG] [Thread-72616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:10:59.311 [DEBUG] [Thread-72616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:10:59.314 [DEBUG] [Thread-72616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:10:59.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:10:59.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:10:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:10:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:10:59.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:10:59.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:10:59.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:10:59.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:10:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:10:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.590371 -999.00  +20.00  45.23     33   +3.50 1 1 2 1 1   888    0 15.42 -48.99 ----- 41.8 45.2 294.6 61.3 23.3 -25.5 23.1 -25.9 23.9 -23.0 24.2 -24.5
2025-12-12T16:10:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:10:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:10:59.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.590371
2025-12-12T16:10:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:10:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:10:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:10:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:10:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:10:59.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:10:33', tmtdew=19.66, humidity=27.02, cloud=0.0, wind=52.57, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:10:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:10:59.339 [DEBUG] [Thread-72616] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:10:59.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:10:59.446 [DEBUG] [Thread-72619] [transport.py] [_log()] starting thread (client mode): 0xf574cf10
2025-12-12T16:10:59.446 [DEBUG] [Thread-72619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:10:59.464 [DEBUG] [Thread-72619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:10:59.464 [INFO] [Thread-72619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] client lang: <none>
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] server lang: <none>
2025-12-12T16:10:59.472 [DEBUG] [Thread-72619] [transport.py] [_log()] kex follows: False
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] Compression: none
2025-12-12T16:10:59.473 [DEBUG] [Thread-72619] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:10:59.532 [DEBUG] [Thread-72619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:10:59.533 [DEBUG] [Thread-72619] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:10:59.533 [DEBUG] [Thread-72619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:10:59.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:10:59.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:10:59.589 [DEBUG] [Thread-72619] [transport.py] [_log()] userauth is OK
2025-12-12T16:10:59.590 [DEBUG] [Thread-72619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:10:59.590 [DEBUG] [Thread-72619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:10:59.590 [DEBUG] [Thread-72619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:10:59.590 [DEBUG] [Thread-72619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:10:59.612 [INFO] [Thread-72619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:10:59.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:10:59.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:11:00.451 [DEBUG] [Thread-72619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:11:00.451 [DEBUG] [Thread-72619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:11:00.499 [DEBUG] [Thread-72619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:11:00.499 [DEBUG] [Thread-72619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:11:00.508 [DEBUG] [Thread-72619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:11:00.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:11:00.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:11:00.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:11:00.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:11:00.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:11:00.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:11:00.542 [DEBUG] [Thread-72619] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:11:07.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:11:07.202 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:11:08.884 [DEBUG] [Thread-72621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:11:23.931 [DEBUG] [Thread-72622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:11:30.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:11:30.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:11:30.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:11:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 11, 5), 18.43, 28.97, 0.0, 43.62, 19.63, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:11:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:11:05
2025-12-12T16:11:31.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:11:31.520 [DEBUG] [Thread-72623] [transport.py] [_log()] starting thread (client mode): 0xf574e800
2025-12-12T16:11:31.520 [DEBUG] [Thread-72623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:11:31.540 [DEBUG] [Thread-72623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:11:31.541 [INFO] [Thread-72623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] client lang: <none>
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] server lang: <none>
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] kex follows: False
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] Compression: none
2025-12-12T16:11:31.544 [DEBUG] [Thread-72623] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:11:31.561 [DEBUG] [Thread-72623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:11:31.562 [DEBUG] [Thread-72623] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:11:31.562 [DEBUG] [Thread-72623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:11:31.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:11:31.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:11:31.564 [DEBUG] [Thread-72623] [transport.py] [_log()] userauth is OK
2025-12-12T16:11:31.564 [DEBUG] [Thread-72623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:11:31.564 [DEBUG] [Thread-72623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:11:31.564 [DEBUG] [Thread-72623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:11:31.565 [DEBUG] [Thread-72623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:11:31.599 [INFO] [Thread-72623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:11:31.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:11:32.257 [DEBUG] [Thread-72623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:11:32.257 [DEBUG] [Thread-72623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:11:32.257 [DEBUG] [Thread-72623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:11:32.298 [DEBUG] [Thread-72623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:11:32.298 [DEBUG] [Thread-72623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:11:32.301 [DEBUG] [Thread-72623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:11:32.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:11:32.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:11:32.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:11:32.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:11:32.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:11:32.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:11:32.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:11:32.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:11:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:11:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.590718 -999.00  +19.20  46.58     35   +3.40 1 1 2 1 1   888    0 15.21 -49.93 ----- 34.5 46.6 293.8 54.6 23.2 -26.1 23.0 -26.2 23.6 -27.4 24.1 -23.7
2025-12-12T16:11:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:11:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:11:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.590718
2025-12-12T16:11:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:11:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:11:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:11:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:11:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:11:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:11:05', tmtdew=18.43, humidity=28.97, cloud=0.0, wind=43.62, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:10:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:11:32.327 [DEBUG] [Thread-72623] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:11:32.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:11:32.422 [DEBUG] [Thread-72626] [transport.py] [_log()] starting thread (client mode): 0xf81e52d0
2025-12-12T16:11:32.422 [DEBUG] [Thread-72626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:11:32.437 [DEBUG] [Thread-72626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:11:32.437 [INFO] [Thread-72626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:11:32.444 [DEBUG] [Thread-72626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] client lang: <none>
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] server lang: <none>
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] kex follows: False
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] Compression: none
2025-12-12T16:11:32.445 [DEBUG] [Thread-72626] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:11:32.501 [DEBUG] [Thread-72626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:11:32.501 [DEBUG] [Thread-72626] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:11:32.502 [DEBUG] [Thread-72626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:11:32.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:11:32.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:11:32.564 [DEBUG] [Thread-72626] [transport.py] [_log()] userauth is OK
2025-12-12T16:11:32.565 [DEBUG] [Thread-72626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:11:32.565 [DEBUG] [Thread-72626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:11:32.565 [DEBUG] [Thread-72626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:11:32.565 [DEBUG] [Thread-72626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:11:32.591 [INFO] [Thread-72626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:11:32.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:11:32.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:11:33.450 [DEBUG] [Thread-72626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:11:33.450 [DEBUG] [Thread-72626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:11:33.500 [DEBUG] [Thread-72626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:11:33.500 [DEBUG] [Thread-72626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:11:33.512 [DEBUG] [Thread-72626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:11:33.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:11:33.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:11:33.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:11:33.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:11:33.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:11:33.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:11:33.545 [DEBUG] [Thread-72626] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:11:38.961 [DEBUG] [Thread-72628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:11:52.977 [DEBUG] [Thread-72629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:11:53.996 [DEBUG] [Thread-72630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:12:03.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:12:03.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
2025-12-12T16:12:04.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 11, 37), 18.42, 29.41, 0.0, 40.12, 19.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:12:04.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:11:37
2025-12-12T16:12:04.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:12:04.525 [DEBUG] [Thread-72631] [transport.py] [_log()] starting thread (client mode): 0xf574d930
2025-12-12T16:12:04.525 [DEBUG] [Thread-72631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:12:04.547 [DEBUG] [Thread-72631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:12:04.547 [INFO] [Thread-72631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:12:04.550 [DEBUG] [Thread-72631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] client lang: <none>
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] server lang: <none>
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] kex follows: False
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] Compression: none
2025-12-12T16:12:04.551 [DEBUG] [Thread-72631] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:12:04.567 [DEBUG] [Thread-72631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:12:04.567 [DEBUG] [Thread-72631] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:12:04.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:12:04.568 [DEBUG] [Thread-72631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:12:04.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:12:04.569 [DEBUG] [Thread-72631] [transport.py] [_log()] userauth is OK
2025-12-12T16:12:04.569 [DEBUG] [Thread-72631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:12:04.569 [DEBUG] [Thread-72631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:12:04.569 [DEBUG] [Thread-72631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:12:04.569 [DEBUG] [Thread-72631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:12:04.604 [INFO] [Thread-72631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:12:04.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:12:05.278 [DEBUG] [Thread-72631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:12:05.278 [DEBUG] [Thread-72631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:12:05.279 [DEBUG] [Thread-72631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:12:05.319 [DEBUG] [Thread-72631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:12:05.319 [DEBUG] [Thread-72631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:12:05.322 [DEBUG] [Thread-72631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:12:05.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:12:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:12:05.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:12:05.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:12:05.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:12:05.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:12:05.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:12:05.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:12:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:12:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.591065 -999.00  +19.00  34.03     35   +3.30 1 1 2 1 1   888    0 15.25 -52.34 ----- 30.9 34.0 297.0 46.4 23.1 -25.2 23.0 -25.4 23.7 -23.4 24.2 -23.2
2025-12-12T16:12:05.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:12:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:12:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.591065
2025-12-12T16:12:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:12:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:12:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:12:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:12:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:12:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:11:37', tmtdew=18.42, humidity=29.41, cloud=0.0, wind=40.12, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:11:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:12:05.347 [DEBUG] [Thread-72631] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:12:05.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:12:05.443 [DEBUG] [Thread-72634] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T16:12:05.443 [DEBUG] [Thread-72634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:12:05.457 [DEBUG] [Thread-72634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:12:05.457 [INFO] [Thread-72634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:12:05.465 [DEBUG] [Thread-72634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] client lang: <none>
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] server lang: <none>
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] kex follows: False
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] Compression: none
2025-12-12T16:12:05.466 [DEBUG] [Thread-72634] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:12:05.523 [DEBUG] [Thread-72634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:12:05.523 [DEBUG] [Thread-72634] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:12:05.523 [DEBUG] [Thread-72634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:12:05.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:12:05.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:12:05.580 [DEBUG] [Thread-72634] [transport.py] [_log()] userauth is OK
2025-12-12T16:12:05.580 [DEBUG] [Thread-72634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:12:05.580 [DEBUG] [Thread-72634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:12:05.580 [DEBUG] [Thread-72634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:12:05.580 [DEBUG] [Thread-72634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:12:05.599 [INFO] [Thread-72634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:12:05.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:12:05.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:12:06.424 [DEBUG] [Thread-72634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:12:06.425 [DEBUG] [Thread-72634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:12:06.473 [DEBUG] [Thread-72634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:12:06.473 [DEBUG] [Thread-72634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:12:06.482 [DEBUG] [Thread-72634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:12:06.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:12:06.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:12:06.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:12:06.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:12:06.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:12:06.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:12:06.520 [DEBUG] [Thread-72634] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:12:07.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:07.344 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:09.026 [DEBUG] [Thread-72636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:24.078 [DEBUG] [Thread-72637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:36.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:12:36.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:12:36.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:12:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 12, 9), 18.63, 29.04, 0.0, 43.35, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:12:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:12:09
2025-12-12T16:12:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:12:37.488 [DEBUG] [Thread-72638] [transport.py] [_log()] starting thread (client mode): 0xf5700580
2025-12-12T16:12:37.488 [DEBUG] [Thread-72638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:12:37.508 [DEBUG] [Thread-72638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:12:37.508 [INFO] [Thread-72638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:12:37.509 [DEBUG] [Thread-72638] [transport.py] [_log()] client lang: <none>
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] server lang: <none>
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] kex follows: False
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] Compression: none
2025-12-12T16:12:37.510 [DEBUG] [Thread-72638] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:12:37.518 [DEBUG] [Thread-72638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:12:37.518 [DEBUG] [Thread-72638] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:12:37.519 [DEBUG] [Thread-72638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:12:37.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:12:37.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:12:37.520 [DEBUG] [Thread-72638] [transport.py] [_log()] userauth is OK
2025-12-12T16:12:37.521 [DEBUG] [Thread-72638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:12:37.521 [DEBUG] [Thread-72638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:12:37.521 [DEBUG] [Thread-72638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:12:37.521 [DEBUG] [Thread-72638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:12:37.544 [INFO] [Thread-72638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:12:37.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:12:38.169 [DEBUG] [Thread-72638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:12:38.169 [DEBUG] [Thread-72638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:12:38.170 [DEBUG] [Thread-72638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:12:38.210 [DEBUG] [Thread-72638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:12:38.210 [DEBUG] [Thread-72638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:12:38.213 [DEBUG] [Thread-72638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:12:38.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:12:38.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:12:38.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:12:38.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:12:38.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:12:38.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:12:38.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:12:38.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:12:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:12:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.591413 -999.00  +19.20  39.92     35   +3.50 1 1 2 1 1   888    0 15.06 -53.78 ----- 41.3 39.9 307.8 54.2 23.1 -26.5 22.9 -25.4 23.6 -24.8 24.1 -24.1
2025-12-12T16:12:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:12:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:12:38.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.591413
2025-12-12T16:12:38.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:12:38.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:12:38.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:12:38.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:12:38.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:12:38.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:12:09', tmtdew=18.63, humidity=29.04, cloud=0.0, wind=43.35, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:11:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:12:38.238 [DEBUG] [Thread-72638] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:12:38.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:12:38.337 [DEBUG] [Thread-72641] [transport.py] [_log()] starting thread (client mode): 0xf574c6a0
2025-12-12T16:12:38.337 [DEBUG] [Thread-72641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:12:38.352 [DEBUG] [Thread-72641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:12:38.352 [INFO] [Thread-72641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:12:38.359 [DEBUG] [Thread-72641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:12:38.360 [DEBUG] [Thread-72641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] client lang: <none>
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] server lang: <none>
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] kex follows: False
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:12:38.361 [DEBUG] [Thread-72641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:12:38.362 [DEBUG] [Thread-72641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:12:38.362 [DEBUG] [Thread-72641] [transport.py] [_log()] Compression: none
2025-12-12T16:12:38.362 [DEBUG] [Thread-72641] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:12:38.420 [DEBUG] [Thread-72641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:12:38.421 [DEBUG] [Thread-72641] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:12:38.422 [DEBUG] [Thread-72641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:12:38.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:12:38.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:12:38.475 [DEBUG] [Thread-72641] [transport.py] [_log()] userauth is OK
2025-12-12T16:12:38.476 [DEBUG] [Thread-72641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:12:38.476 [DEBUG] [Thread-72641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:12:38.476 [DEBUG] [Thread-72641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:12:38.476 [DEBUG] [Thread-72641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:12:38.496 [INFO] [Thread-72641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:12:38.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:12:38.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:12:39.105 [DEBUG] [Thread-72643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:39.371 [DEBUG] [Thread-72641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:12:39.371 [DEBUG] [Thread-72641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:12:39.419 [DEBUG] [Thread-72641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:12:39.419 [DEBUG] [Thread-72641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:12:39.428 [DEBUG] [Thread-72641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:12:39.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:12:39.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:12:39.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:12:39.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:12:39.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:12:39.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:12:39.470 [DEBUG] [Thread-72641] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:12:53.042 [DEBUG] [Thread-72644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:12:54.151 [DEBUG] [Thread-72645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:07.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:07.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:09.181 [DEBUG] [Thread-72646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:09.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:13:09.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:13:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:13:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 12, 41), 18.79, 28.63, 0.0, 40.67, 19.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:13:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:12:41
2025-12-12T16:13:10.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:13:10.434 [DEBUG] [Thread-72647] [transport.py] [_log()] starting thread (client mode): 0xf81e7d00
2025-12-12T16:13:10.434 [DEBUG] [Thread-72647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:13:10.450 [DEBUG] [Thread-72647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:13:10.450 [INFO] [Thread-72647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] client lang: <none>
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] server lang: <none>
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] kex follows: False
2025-12-12T16:13:10.451 [DEBUG] [Thread-72647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:13:10.452 [DEBUG] [Thread-72647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:13:10.452 [DEBUG] [Thread-72647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:13:10.452 [DEBUG] [Thread-72647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:13:10.452 [DEBUG] [Thread-72647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:13:10.452 [DEBUG] [Thread-72647] [transport.py] [_log()] Compression: none
2025-12-12T16:13:10.452 [DEBUG] [Thread-72647] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:13:10.461 [DEBUG] [Thread-72647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:13:10.461 [DEBUG] [Thread-72647] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:13:10.462 [DEBUG] [Thread-72647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:13:10.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:13:10.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:13:10.463 [DEBUG] [Thread-72647] [transport.py] [_log()] userauth is OK
2025-12-12T16:13:10.463 [DEBUG] [Thread-72647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:13:10.463 [DEBUG] [Thread-72647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:13:10.463 [DEBUG] [Thread-72647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:13:10.463 [DEBUG] [Thread-72647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:13:10.473 [INFO] [Thread-72647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:13:10.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:13:11.103 [DEBUG] [Thread-72647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:13:11.103 [DEBUG] [Thread-72647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:13:11.103 [DEBUG] [Thread-72647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:13:11.144 [DEBUG] [Thread-72647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:13:11.144 [DEBUG] [Thread-72647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:13:11.147 [DEBUG] [Thread-72647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:13:11.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:13:11.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:13:11.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:13:11.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:13:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:13:11.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:13:11.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:13:11.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:13:11.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:13:11.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.592107 -999.00  +19.80  33.89     34   +3.70 1 2 2 1 1   888    0 14.87 -60.04 ----- 34.0 33.9 316.0 45.4 23.1 -24.6 23.1 -24.4 23.7 -21.2 24.2 -22.9
2025-12-12T16:13:11.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:13:11.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:13:11.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.592107
2025-12-12T16:13:11.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:13:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:13:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:13:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:13:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T16:13:11.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:12:41', tmtdew=18.79, humidity=28.63, cloud=0.0, wind=40.67, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:12:38.045', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:13:11.175 [DEBUG] [Thread-72647] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:13:11.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:13:11.272 [DEBUG] [Thread-72650] [transport.py] [_log()] starting thread (client mode): 0xf81c0310
2025-12-12T16:13:11.272 [DEBUG] [Thread-72650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:13:11.287 [DEBUG] [Thread-72650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:13:11.287 [INFO] [Thread-72650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] client lang: <none>
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] server lang: <none>
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] kex follows: False
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:13:11.295 [DEBUG] [Thread-72650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:13:11.296 [DEBUG] [Thread-72650] [transport.py] [_log()] Compression: none
2025-12-12T16:13:11.296 [DEBUG] [Thread-72650] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:13:11.355 [DEBUG] [Thread-72650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:13:11.356 [DEBUG] [Thread-72650] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:13:11.356 [DEBUG] [Thread-72650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:13:11.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:13:11.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:13:11.411 [DEBUG] [Thread-72650] [transport.py] [_log()] userauth is OK
2025-12-12T16:13:11.411 [DEBUG] [Thread-72650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:13:11.411 [DEBUG] [Thread-72650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:13:11.411 [DEBUG] [Thread-72650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:13:11.411 [DEBUG] [Thread-72650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:13:11.430 [INFO] [Thread-72650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:13:11.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:13:11.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:13:12.295 [DEBUG] [Thread-72650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:13:12.295 [DEBUG] [Thread-72650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:13:12.343 [DEBUG] [Thread-72650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:13:12.343 [DEBUG] [Thread-72650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:13:12.352 [DEBUG] [Thread-72650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:13:12.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:13:12.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:13:12.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:13:12.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:13:12.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:13:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:13:12.385 [DEBUG] [Thread-72650] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:13:24.215 [DEBUG] [Thread-72652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:39.272 [DEBUG] [Thread-72653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:13:42.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:13:42.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:13:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 13, 13), 18.72, 28.75, 0.0, 39.47, 19.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:13:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:13:13
2025-12-12T16:13:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:13:43.366 [DEBUG] [Thread-72654] [transport.py] [_log()] starting thread (client mode): 0xf574c6a0
2025-12-12T16:13:43.366 [DEBUG] [Thread-72654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:13:43.387 [DEBUG] [Thread-72654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:13:43.387 [INFO] [Thread-72654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] client lang: <none>
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] server lang: <none>
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] kex follows: False
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:13:43.390 [DEBUG] [Thread-72654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:13:43.391 [DEBUG] [Thread-72654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:13:43.391 [DEBUG] [Thread-72654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:13:43.391 [DEBUG] [Thread-72654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:13:43.391 [DEBUG] [Thread-72654] [transport.py] [_log()] Compression: none
2025-12-12T16:13:43.391 [DEBUG] [Thread-72654] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:13:43.407 [DEBUG] [Thread-72654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:13:43.408 [DEBUG] [Thread-72654] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:13:43.408 [DEBUG] [Thread-72654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:13:43.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:13:43.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:13:43.410 [DEBUG] [Thread-72654] [transport.py] [_log()] userauth is OK
2025-12-12T16:13:43.410 [DEBUG] [Thread-72654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:13:43.411 [DEBUG] [Thread-72654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:13:43.411 [DEBUG] [Thread-72654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:13:43.411 [DEBUG] [Thread-72654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:13:43.435 [INFO] [Thread-72654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:13:43.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:13:44.060 [DEBUG] [Thread-72654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:13:44.060 [DEBUG] [Thread-72654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:13:44.061 [DEBUG] [Thread-72654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:13:44.101 [DEBUG] [Thread-72654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:13:44.101 [DEBUG] [Thread-72654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:13:44.104 [DEBUG] [Thread-72654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:13:44.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:13:44.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:13:44.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:13:44.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:13:44.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:13:44.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:13:44.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:13:44.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:13:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:13:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.592454 -999.00  +19.70  37.81     34   +3.50 1 1 2 1 1   888    0 14.76 -59.72 ----- 33.3 37.8 312.0 47.2 23.2 -25.1 23.0 -24.7 23.8 -22.8 24.3 -22.9
2025-12-12T16:13:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:13:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:13:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.592454
2025-12-12T16:13:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:13:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:13:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:13:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:13:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:13:44.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:13:13', tmtdew=18.72, humidity=28.75, cloud=0.0, wind=39.47, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:13:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:13:44.128 [DEBUG] [Thread-72654] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:13:44.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:13:44.225 [DEBUG] [Thread-72657] [transport.py] [_log()] starting thread (client mode): 0xf813fdf0
2025-12-12T16:13:44.225 [DEBUG] [Thread-72657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:13:44.240 [DEBUG] [Thread-72657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:13:44.240 [INFO] [Thread-72657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] client lang: <none>
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] server lang: <none>
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] kex follows: False
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:13:44.248 [DEBUG] [Thread-72657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:13:44.249 [DEBUG] [Thread-72657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:13:44.249 [DEBUG] [Thread-72657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:13:44.249 [DEBUG] [Thread-72657] [transport.py] [_log()] Compression: none
2025-12-12T16:13:44.249 [DEBUG] [Thread-72657] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:13:44.306 [DEBUG] [Thread-72657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:13:44.306 [DEBUG] [Thread-72657] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:13:44.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:13:44.307 [DEBUG] [Thread-72657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:13:44.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:13:44.362 [DEBUG] [Thread-72657] [transport.py] [_log()] userauth is OK
2025-12-12T16:13:44.362 [DEBUG] [Thread-72657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:13:44.362 [DEBUG] [Thread-72657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:13:44.363 [DEBUG] [Thread-72657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:13:44.363 [DEBUG] [Thread-72657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:13:44.382 [INFO] [Thread-72657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:13:44.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:13:44.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:13:45.244 [DEBUG] [Thread-72657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:13:45.244 [DEBUG] [Thread-72657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:13:45.293 [DEBUG] [Thread-72657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:13:45.293 [DEBUG] [Thread-72657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:13:45.302 [DEBUG] [Thread-72657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:13:45.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:13:45.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:13:45.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:13:45.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:13:45.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:13:45.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:13:45.337 [DEBUG] [Thread-72657] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:13:53.095 [DEBUG] [Thread-72659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:13:54.300 [DEBUG] [Thread-72660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:07.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:07.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:09.344 [DEBUG] [Thread-72661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:15.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:14:15.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:14:15.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:14:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 13, 45), 19.27, 27.8, 0.0, 37.02, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:14:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:13:45
2025-12-12T16:14:16.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:14:16.367 [DEBUG] [Thread-72662] [transport.py] [_log()] starting thread (client mode): 0xf5740fa0
2025-12-12T16:14:16.367 [DEBUG] [Thread-72662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:14:16.379 [DEBUG] [Thread-72662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:14:16.379 [INFO] [Thread-72662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:14:16.382 [DEBUG] [Thread-72662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:14:16.382 [DEBUG] [Thread-72662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:14:16.382 [DEBUG] [Thread-72662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] client lang: <none>
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] server lang: <none>
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] kex follows: False
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] Compression: none
2025-12-12T16:14:16.383 [DEBUG] [Thread-72662] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:14:16.399 [DEBUG] [Thread-72662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:14:16.399 [DEBUG] [Thread-72662] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:14:16.399 [DEBUG] [Thread-72662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:14:16.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:14:16.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:14:16.440 [DEBUG] [Thread-72662] [transport.py] [_log()] userauth is OK
2025-12-12T16:14:16.440 [DEBUG] [Thread-72662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:14:16.441 [DEBUG] [Thread-72662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:14:16.441 [DEBUG] [Thread-72662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:14:16.441 [DEBUG] [Thread-72662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:14:16.469 [INFO] [Thread-72662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:14:16.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:14:17.076 [DEBUG] [Thread-72662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:14:17.076 [DEBUG] [Thread-72662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:14:17.076 [DEBUG] [Thread-72662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:14:17.117 [DEBUG] [Thread-72662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:14:17.117 [DEBUG] [Thread-72662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:14:17.119 [DEBUG] [Thread-72662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:14:17.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:14:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:14:17.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:14:17.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:14:17.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:14:17.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:14:17.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.592801 -999.00  +19.70  34.94     33   +3.30 1 1 2 1 1   888    0 14.89 -60.72 ----- 36.5 34.9 316.8 50.6 23.2 -24.9 23.0 -25.5 23.7 -26.3 24.1 -22.8
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.592801
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:14:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:13:45', tmtdew=19.27, humidity=27.8, cloud=0.0, wind=37.02, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:13:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:14:17.139 [DEBUG] [Thread-72662] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:14:17.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:14:17.225 [DEBUG] [Thread-72665] [transport.py] [_log()] starting thread (client mode): 0xf570cb50
2025-12-12T16:14:17.226 [DEBUG] [Thread-72665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:14:17.246 [DEBUG] [Thread-72665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:14:17.246 [INFO] [Thread-72665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] client lang: <none>
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] server lang: <none>
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] kex follows: False
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] Compression: none
2025-12-12T16:14:17.253 [DEBUG] [Thread-72665] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:14:17.308 [DEBUG] [Thread-72665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:14:17.308 [DEBUG] [Thread-72665] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:14:17.308 [DEBUG] [Thread-72665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:14:17.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:14:17.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:14:17.365 [DEBUG] [Thread-72665] [transport.py] [_log()] userauth is OK
2025-12-12T16:14:17.365 [DEBUG] [Thread-72665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:14:17.365 [DEBUG] [Thread-72665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:14:17.365 [DEBUG] [Thread-72665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:14:17.365 [DEBUG] [Thread-72665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:14:17.380 [INFO] [Thread-72665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:14:17.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:14:17.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:14:18.220 [DEBUG] [Thread-72665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:14:18.220 [DEBUG] [Thread-72665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:14:18.267 [DEBUG] [Thread-72665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:14:18.268 [DEBUG] [Thread-72665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:14:18.276 [DEBUG] [Thread-72665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:14:18.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:14:18.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:14:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:14:18.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:14:18.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:14:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:14:18.306 [DEBUG] [Thread-72665] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:14:24.372 [DEBUG] [Thread-72667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:39.428 [DEBUG] [Thread-72668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:48.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:14:48.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:14:48.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:14:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 14, 17), 19.24, 27.83, 0.0, 31.53, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:14:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:14:17
2025-12-12T16:14:49.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:14:49.297 [DEBUG] [Thread-72669] [transport.py] [_log()] starting thread (client mode): 0xf57bccd0
2025-12-12T16:14:49.297 [DEBUG] [Thread-72669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:14:49.317 [DEBUG] [Thread-72669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:14:49.318 [INFO] [Thread-72669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] client lang: <none>
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] server lang: <none>
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] kex follows: False
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] Compression: none
2025-12-12T16:14:49.321 [DEBUG] [Thread-72669] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:14:49.338 [DEBUG] [Thread-72669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:14:49.338 [DEBUG] [Thread-72669] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:14:49.339 [DEBUG] [Thread-72669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:14:49.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:14:49.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:14:49.341 [DEBUG] [Thread-72669] [transport.py] [_log()] userauth is OK
2025-12-12T16:14:49.341 [DEBUG] [Thread-72669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:14:49.341 [DEBUG] [Thread-72669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:14:49.341 [DEBUG] [Thread-72669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:14:49.341 [DEBUG] [Thread-72669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:14:49.358 [INFO] [Thread-72669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:14:49.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:14:49.993 [DEBUG] [Thread-72669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:14:49.993 [DEBUG] [Thread-72669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:14:49.994 [DEBUG] [Thread-72669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:14:50.035 [DEBUG] [Thread-72669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:14:50.035 [DEBUG] [Thread-72669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:14:50.038 [DEBUG] [Thread-72669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:14:50.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:14:50.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:14:50.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:14:50.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:14:50.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:14:50.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:14:50.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:14:50.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:14:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:14:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.593149 -999.00  +19.30  50.73     33   +2.70 1 1 2 1 1   888    0 14.87 -60.87 ----- 47.7 50.7 314.2 55.3 23.1 -25.8 23.0 -26.1 23.8 -22.3 24.1 -24.1
2025-12-12T16:14:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:14:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:14:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.593149
2025-12-12T16:14:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:14:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:14:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:14:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:14:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:14:50.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:14:17', tmtdew=19.24, humidity=27.83, cloud=0.0, wind=31.53, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:14:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:14:50.063 [DEBUG] [Thread-72669] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:14:50.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:14:50.160 [DEBUG] [Thread-72672] [transport.py] [_log()] starting thread (client mode): 0xf5743df0
2025-12-12T16:14:50.160 [DEBUG] [Thread-72672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:14:50.175 [DEBUG] [Thread-72672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:14:50.175 [INFO] [Thread-72672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:14:50.182 [DEBUG] [Thread-72672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:14:50.182 [DEBUG] [Thread-72672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] client lang: <none>
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] server lang: <none>
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] kex follows: False
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] Compression: none
2025-12-12T16:14:50.183 [DEBUG] [Thread-72672] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:14:50.241 [DEBUG] [Thread-72672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:14:50.242 [DEBUG] [Thread-72672] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:14:50.242 [DEBUG] [Thread-72672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:14:50.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:14:50.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:14:50.297 [DEBUG] [Thread-72672] [transport.py] [_log()] userauth is OK
2025-12-12T16:14:50.297 [DEBUG] [Thread-72672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:14:50.297 [DEBUG] [Thread-72672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:14:50.297 [DEBUG] [Thread-72672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:14:50.297 [DEBUG] [Thread-72672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:14:50.319 [INFO] [Thread-72672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:14:50.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:14:50.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:14:51.168 [DEBUG] [Thread-72672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:14:51.168 [DEBUG] [Thread-72672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:14:51.216 [DEBUG] [Thread-72672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:14:51.217 [DEBUG] [Thread-72672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:14:51.225 [DEBUG] [Thread-72672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:14:51.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:14:51.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:14:51.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:14:51.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:14:51.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:14:51.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:14:51.258 [DEBUG] [Thread-72672] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:14:53.164 [DEBUG] [Thread-72674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:14:54.457 [DEBUG] [Thread-72675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:07.768 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:07.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:09.495 [DEBUG] [Thread-72676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:15:21.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:15:21.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:15:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 14, 50), 19.32, 27.21, 0.0, 44.13, 19.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:15:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:14:50
2025-12-12T16:15:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:15:22.258 [DEBUG] [Thread-72677] [transport.py] [_log()] starting thread (client mode): 0xf570e6b0
2025-12-12T16:15:22.258 [DEBUG] [Thread-72677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:15:22.279 [DEBUG] [Thread-72677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:15:22.279 [INFO] [Thread-72677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] client lang: <none>
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] server lang: <none>
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] kex follows: False
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] Compression: none
2025-12-12T16:15:22.283 [DEBUG] [Thread-72677] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:15:22.300 [DEBUG] [Thread-72677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:15:22.300 [DEBUG] [Thread-72677] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:15:22.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:15:22.301 [DEBUG] [Thread-72677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:15:22.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:15:22.303 [DEBUG] [Thread-72677] [transport.py] [_log()] userauth is OK
2025-12-12T16:15:22.303 [DEBUG] [Thread-72677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:15:22.303 [DEBUG] [Thread-72677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:15:22.303 [DEBUG] [Thread-72677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:15:22.303 [DEBUG] [Thread-72677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:15:22.338 [INFO] [Thread-72677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:15:22.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:15:23.025 [DEBUG] [Thread-72677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:15:23.025 [DEBUG] [Thread-72677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:15:23.025 [DEBUG] [Thread-72677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:15:23.065 [DEBUG] [Thread-72677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:15:23.066 [DEBUG] [Thread-72677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:15:23.068 [DEBUG] [Thread-72677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:15:23.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:15:23.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:15:23.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:15:23.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:15:23.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:15:23.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:15:23.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:15:23.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.593496 -999.00  +19.50  30.36     33   +3.10 1 1 2 1 1   888    0 14.65 -68.84 ----- 28.6 30.4 326.4 50.4 23.1 -25.8 23.0 -24.1 23.8 -22.4 24.3 -22.9
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.593496
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:15:23.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:14:50', tmtdew=19.32, humidity=27.21, cloud=0.0, wind=44.13, temperature=19.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:14:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:15:23.088 [DEBUG] [Thread-72677] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:15:23.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:15:23.178 [DEBUG] [Thread-72680] [transport.py] [_log()] starting thread (client mode): 0xf5741810
2025-12-12T16:15:23.178 [DEBUG] [Thread-72680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:15:23.193 [DEBUG] [Thread-72680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:15:23.193 [INFO] [Thread-72680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] client lang: <none>
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] server lang: <none>
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] kex follows: False
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] Compression: none
2025-12-12T16:15:23.200 [DEBUG] [Thread-72680] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:15:23.255 [DEBUG] [Thread-72680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:15:23.255 [DEBUG] [Thread-72680] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:15:23.255 [DEBUG] [Thread-72680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:15:23.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:15:23.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:15:23.312 [DEBUG] [Thread-72680] [transport.py] [_log()] userauth is OK
2025-12-12T16:15:23.312 [DEBUG] [Thread-72680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:15:23.312 [DEBUG] [Thread-72680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:15:23.312 [DEBUG] [Thread-72680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:15:23.312 [DEBUG] [Thread-72680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:15:23.327 [INFO] [Thread-72680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:15:23.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:15:23.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:15:24.159 [DEBUG] [Thread-72680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:15:24.159 [DEBUG] [Thread-72680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:15:24.207 [DEBUG] [Thread-72680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:15:24.207 [DEBUG] [Thread-72680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:15:24.215 [DEBUG] [Thread-72680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:15:24.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:15:24.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:15:24.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:15:24.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:15:24.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:15:24.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:15:24.246 [DEBUG] [Thread-72680] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:15:24.528 [DEBUG] [Thread-72682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:39.570 [DEBUG] [Thread-72683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:53.216 [DEBUG] [Thread-72684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:15:54.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:15: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
2025-12-12T16:15:54.600 [DEBUG] [Thread-72685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:15:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 15, 22), 19.69, 26.55, 0.0, 44.18, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:15:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:15:22
2025-12-12T16:15:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:15:55.300 [DEBUG] [Thread-72686] [transport.py] [_log()] starting thread (client mode): 0xf570fd90
2025-12-12T16:15:55.300 [DEBUG] [Thread-72686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:15:55.320 [DEBUG] [Thread-72686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:15:55.321 [INFO] [Thread-72686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] client lang: <none>
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] server lang: <none>
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] kex follows: False
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:15:55.324 [DEBUG] [Thread-72686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:15:55.325 [DEBUG] [Thread-72686] [transport.py] [_log()] Compression: none
2025-12-12T16:15:55.325 [DEBUG] [Thread-72686] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:15:55.340 [DEBUG] [Thread-72686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:15:55.341 [DEBUG] [Thread-72686] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:15:55.341 [DEBUG] [Thread-72686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:15:55.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:15:55.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:15:55.341 [DEBUG] [Thread-72686] [transport.py] [_log()] userauth is OK
2025-12-12T16:15:55.341 [DEBUG] [Thread-72686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:15:55.342 [DEBUG] [Thread-72686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:15:55.342 [DEBUG] [Thread-72686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:15:55.342 [DEBUG] [Thread-72686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:15:55.353 [INFO] [Thread-72686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:15:55.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:15:55.963 [DEBUG] [Thread-72686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:15:55.963 [DEBUG] [Thread-72686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:15:55.963 [DEBUG] [Thread-72686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:15:56.004 [DEBUG] [Thread-72686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:15:56.004 [DEBUG] [Thread-72686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:15:56.006 [DEBUG] [Thread-72686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:15:56.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:15:56.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:15:56.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:15:56.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:15:56.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:15:56.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:15:56.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:15:56.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:15:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:15:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.593843 -999.00  +19.90  38.16     33   +3.10 1 1 2 1 1   888    0 14.63 -62.32 ----- 39.8 38.2 307.6 42.8 23.3 -25.4 23.1 -25.5 23.8 -22.4 24.3 -23.9
2025-12-12T16:15:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:15:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:15:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.593843
2025-12-12T16:15:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:15:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:15:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:15:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:15:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:15:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:15:22', tmtdew=19.69, humidity=26.55, cloud=0.0, wind=44.18, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:15:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:15:56.024 [DEBUG] [Thread-72686] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:15:56.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:15:56.113 [DEBUG] [Thread-72689] [transport.py] [_log()] starting thread (client mode): 0xf570cb50
2025-12-12T16:15:56.113 [DEBUG] [Thread-72689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:15:56.128 [DEBUG] [Thread-72689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:15:56.128 [INFO] [Thread-72689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] client lang: <none>
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] server lang: <none>
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] kex follows: False
2025-12-12T16:15:56.135 [DEBUG] [Thread-72689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:15:56.136 [DEBUG] [Thread-72689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:15:56.136 [DEBUG] [Thread-72689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:15:56.136 [DEBUG] [Thread-72689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:15:56.136 [DEBUG] [Thread-72689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:15:56.136 [DEBUG] [Thread-72689] [transport.py] [_log()] Compression: none
2025-12-12T16:15:56.136 [DEBUG] [Thread-72689] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:15:56.190 [DEBUG] [Thread-72689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:15:56.190 [DEBUG] [Thread-72689] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:15:56.191 [DEBUG] [Thread-72689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:15:56.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:15:56.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:15:56.251 [DEBUG] [Thread-72689] [transport.py] [_log()] userauth is OK
2025-12-12T16:15:56.251 [DEBUG] [Thread-72689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:15:56.251 [DEBUG] [Thread-72689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:15:56.251 [DEBUG] [Thread-72689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:15:56.252 [DEBUG] [Thread-72689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:15:56.269 [INFO] [Thread-72689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:15:56.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:15:56.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:15:57.137 [DEBUG] [Thread-72689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:15:57.137 [DEBUG] [Thread-72689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:15:57.185 [DEBUG] [Thread-72689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:15:57.185 [DEBUG] [Thread-72689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:15:57.194 [DEBUG] [Thread-72689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:15:57.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:15:57.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:15:57.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:15:57.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:15:57.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:15:57.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:15:57.228 [DEBUG] [Thread-72689] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:16:07.910 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:16:07.911 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:16:09.624 [DEBUG] [Thread-72691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:16:24.672 [DEBUG] [Thread-72692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:16:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:16:27.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:16:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:16:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 15, 54), 19.45, 27.22, 0.0, 48.63, 19.77, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:16:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:15:54
2025-12-12T16:16:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:16:28.278 [DEBUG] [Thread-72693] [transport.py] [_log()] starting thread (client mode): 0xf5741fc0
2025-12-12T16:16:28.278 [DEBUG] [Thread-72693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:16:28.297 [DEBUG] [Thread-72693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:16:28.297 [INFO] [Thread-72693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] client lang: <none>
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] server lang: <none>
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] kex follows: False
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:16:28.301 [DEBUG] [Thread-72693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:16:28.302 [DEBUG] [Thread-72693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:16:28.302 [DEBUG] [Thread-72693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:16:28.302 [DEBUG] [Thread-72693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:16:28.302 [DEBUG] [Thread-72693] [transport.py] [_log()] Compression: none
2025-12-12T16:16:28.302 [DEBUG] [Thread-72693] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:16:28.317 [DEBUG] [Thread-72693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:16:28.317 [DEBUG] [Thread-72693] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:16:28.318 [DEBUG] [Thread-72693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:16:28.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:16:28.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:16:28.318 [DEBUG] [Thread-72693] [transport.py] [_log()] userauth is OK
2025-12-12T16:16:28.318 [DEBUG] [Thread-72693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:16:28.318 [DEBUG] [Thread-72693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:16:28.318 [DEBUG] [Thread-72693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:16:28.318 [DEBUG] [Thread-72693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:16:28.335 [INFO] [Thread-72693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:16:28.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:16:28.976 [DEBUG] [Thread-72693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:16:28.976 [DEBUG] [Thread-72693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:16:28.977 [DEBUG] [Thread-72693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:16:29.017 [DEBUG] [Thread-72693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:16:29.017 [DEBUG] [Thread-72693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:16:29.020 [DEBUG] [Thread-72693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:16:29.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:16:29.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:16:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:16:29.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:16:29.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:16:29.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:16:29.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:16:29.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:16:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:16:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.594190 -999.00  +19.60  40.65     33   +3.10 1 1 2 1 1   888    0 14.93 -57.46 ----- 34.9 40.6 314.2 54.6 23.2 -26.6 23.1 -24.7 23.8 -22.3 24.3 -23.1
2025-12-12T16:16:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:16:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:16:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.594190
2025-12-12T16:16:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:16:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:16:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:16:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:16:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:16:29.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:15:54', tmtdew=19.45, humidity=27.22, cloud=0.0, wind=48.63, temperature=19.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:15:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:16:29.047 [DEBUG] [Thread-72693] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:16:29.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:16:29.141 [DEBUG] [Thread-72696] [transport.py] [_log()] starting thread (client mode): 0xf578bd90
2025-12-12T16:16:29.141 [DEBUG] [Thread-72696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:16:29.156 [DEBUG] [Thread-72696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:16:29.156 [INFO] [Thread-72696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:16:29.163 [DEBUG] [Thread-72696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:16:29.163 [DEBUG] [Thread-72696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] client lang: <none>
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] server lang: <none>
2025-12-12T16:16:29.164 [DEBUG] [Thread-72696] [transport.py] [_log()] kex follows: False
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] Compression: none
2025-12-12T16:16:29.165 [DEBUG] [Thread-72696] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:16:29.223 [DEBUG] [Thread-72696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:16:29.224 [DEBUG] [Thread-72696] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:16:29.225 [DEBUG] [Thread-72696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:16:29.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:16:29.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:16:29.279 [DEBUG] [Thread-72696] [transport.py] [_log()] userauth is OK
2025-12-12T16:16:29.279 [DEBUG] [Thread-72696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:16:29.279 [DEBUG] [Thread-72696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:16:29.279 [DEBUG] [Thread-72696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:16:29.279 [DEBUG] [Thread-72696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:16:29.298 [INFO] [Thread-72696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:16:29.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:16:29.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:16:30.141 [DEBUG] [Thread-72696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:16:30.142 [DEBUG] [Thread-72696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:16:30.190 [DEBUG] [Thread-72696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:16:30.190 [DEBUG] [Thread-72696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:16:30.198 [DEBUG] [Thread-72696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:16:30.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:16:30.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:16:30.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:16:30.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:16:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:16:30.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:16:30.233 [DEBUG] [Thread-72696] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:16:39.702 [DEBUG] [Thread-72698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:16:53.262 [DEBUG] [Thread-72699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:16:54.746 [DEBUG] [Thread-72700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:17:00.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:17:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:17:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 16, 26), 19.04, 27.89, 0.0, 47.71, 19.42, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:17:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:16:26
2025-12-12T16:17:01.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:17:01.233 [DEBUG] [Thread-72701] [transport.py] [_log()] starting thread (client mode): 0xf57893f0
2025-12-12T16:17:01.233 [DEBUG] [Thread-72701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:17:01.253 [DEBUG] [Thread-72701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:17:01.253 [INFO] [Thread-72701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:17:01.256 [DEBUG] [Thread-72701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] client lang: <none>
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] server lang: <none>
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] kex follows: False
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] Compression: none
2025-12-12T16:17:01.257 [DEBUG] [Thread-72701] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:17:01.276 [DEBUG] [Thread-72701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:17:01.276 [DEBUG] [Thread-72701] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:17:01.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:17:01.277 [DEBUG] [Thread-72701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:17:01.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:17:01.279 [DEBUG] [Thread-72701] [transport.py] [_log()] userauth is OK
2025-12-12T16:17:01.279 [DEBUG] [Thread-72701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:17:01.279 [DEBUG] [Thread-72701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:17:01.279 [DEBUG] [Thread-72701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:17:01.279 [DEBUG] [Thread-72701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:17:01.302 [INFO] [Thread-72701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:17:01.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:17:01.968 [DEBUG] [Thread-72701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:17:01.968 [DEBUG] [Thread-72701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:17:01.969 [DEBUG] [Thread-72701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:17:02.009 [DEBUG] [Thread-72701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:17:02.009 [DEBUG] [Thread-72701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:17:02.012 [DEBUG] [Thread-72701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:17:02.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:17:02.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:17:02.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:17:02.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:17:02.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:17:02.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:17:02.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:17:02.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.594538 -999.00  +19.80  44.14     33   +3.10 1 1 2 1 1   888    0 14.88 -55.22 ----- 34.5 44.1 308.0 59.4 23.2 -26.7 23.1 -26.5 23.9 -22.1 24.2 -24.1
2025-12-12T16:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.594538
2025-12-12T16:17:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:17:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:17:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:17:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:17:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:17:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:16:26', tmtdew=19.04, humidity=27.89, cloud=0.0, wind=47.71, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:16:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:17:02.039 [DEBUG] [Thread-72701] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:17:02.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:17:02.139 [DEBUG] [Thread-72704] [transport.py] [_log()] starting thread (client mode): 0xf81e43a0
2025-12-12T16:17:02.139 [DEBUG] [Thread-72704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:17:02.161 [DEBUG] [Thread-72704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:17:02.161 [INFO] [Thread-72704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] client lang: <none>
2025-12-12T16:17:02.173 [DEBUG] [Thread-72704] [transport.py] [_log()] server lang: <none>
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] kex follows: False
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] Compression: none
2025-12-12T16:17:02.174 [DEBUG] [Thread-72704] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:17:02.242 [DEBUG] [Thread-72704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:17:02.242 [DEBUG] [Thread-72704] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:17:02.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:17:02.243 [DEBUG] [Thread-72704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:17:02.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:17:02.303 [DEBUG] [Thread-72704] [transport.py] [_log()] userauth is OK
2025-12-12T16:17:02.304 [DEBUG] [Thread-72704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:17:02.304 [DEBUG] [Thread-72704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:17:02.304 [DEBUG] [Thread-72704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:17:02.304 [DEBUG] [Thread-72704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:17:02.322 [INFO] [Thread-72704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:17:02.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:17:02.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:17:03.171 [DEBUG] [Thread-72704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:17:03.171 [DEBUG] [Thread-72704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:17:03.219 [DEBUG] [Thread-72704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:17:03.219 [DEBUG] [Thread-72704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:17:03.228 [DEBUG] [Thread-72704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:17:03.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:17:03.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:17:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:17:03.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:17:03.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:17:03.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:17:03.262 [DEBUG] [Thread-72704] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:17:08.051 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:08.052 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:09.776 [DEBUG] [Thread-72706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:24.820 [DEBUG] [Thread-72707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:17:33.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:17:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:17:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 17, 30), 18.82, 28.28, 0.0, 48.86, 19.07, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:17:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:17:30
2025-12-12T16:17:34.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:17:34.309 [DEBUG] [Thread-72708] [transport.py] [_log()] starting thread (client mode): 0xf578a7d0
2025-12-12T16:17:34.309 [DEBUG] [Thread-72708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:17:34.329 [DEBUG] [Thread-72708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:17:34.329 [INFO] [Thread-72708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:17:34.332 [DEBUG] [Thread-72708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:17:34.332 [DEBUG] [Thread-72708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:17:34.332 [DEBUG] [Thread-72708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] client lang: <none>
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] server lang: <none>
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] kex follows: False
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] Compression: none
2025-12-12T16:17:34.333 [DEBUG] [Thread-72708] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:17:34.348 [DEBUG] [Thread-72708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:17:34.348 [DEBUG] [Thread-72708] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:17:34.348 [DEBUG] [Thread-72708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:17:34.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:17:34.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:17:34.349 [DEBUG] [Thread-72708] [transport.py] [_log()] userauth is OK
2025-12-12T16:17:34.349 [DEBUG] [Thread-72708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:17:34.349 [DEBUG] [Thread-72708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:17:34.349 [DEBUG] [Thread-72708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:17:34.349 [DEBUG] [Thread-72708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:17:34.358 [INFO] [Thread-72708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:17:34.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:17:34.982 [DEBUG] [Thread-72708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:17:34.982 [DEBUG] [Thread-72708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:17:34.982 [DEBUG] [Thread-72708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:17:35.023 [DEBUG] [Thread-72708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:17:35.023 [DEBUG] [Thread-72708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:17:35.025 [DEBUG] [Thread-72708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:17:35.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:17:35.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:17:35.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:17:35.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:17:35.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:17:35.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:17:35.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:17:35.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:17:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:17:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.594885 -999.00  +19.70  38.00     33   +3.00 1 1 2 1 1   888    0 14.96 -56.36 ----- 40.8 38.0 313.2 47.5 23.1 -25.9 23.0 -25.3 23.6 -25.0 24.2 -22.8
2025-12-12T16:17:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:17:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:17:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.594885
2025-12-12T16:17:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:17:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:17:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:17:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:17:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:17:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:17:30', tmtdew=18.82, humidity=28.28, cloud=0.0, wind=48.86, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:16:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:17:35.046 [DEBUG] [Thread-72708] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:17:35.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:17:35.144 [DEBUG] [Thread-72711] [transport.py] [_log()] starting thread (client mode): 0xf578b520
2025-12-12T16:17:35.144 [DEBUG] [Thread-72711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:17:35.161 [DEBUG] [Thread-72711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:17:35.162 [INFO] [Thread-72711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] client lang: <none>
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] server lang: <none>
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] kex follows: False
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:17:35.169 [DEBUG] [Thread-72711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:17:35.170 [DEBUG] [Thread-72711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:17:35.170 [DEBUG] [Thread-72711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:17:35.170 [DEBUG] [Thread-72711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:17:35.170 [DEBUG] [Thread-72711] [transport.py] [_log()] Compression: none
2025-12-12T16:17:35.170 [DEBUG] [Thread-72711] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:17:35.225 [DEBUG] [Thread-72711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:17:35.226 [DEBUG] [Thread-72711] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:17:35.226 [DEBUG] [Thread-72711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:17:35.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:17:35.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:17:35.282 [DEBUG] [Thread-72711] [transport.py] [_log()] userauth is OK
2025-12-12T16:17:35.282 [DEBUG] [Thread-72711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:17:35.282 [DEBUG] [Thread-72711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:17:35.282 [DEBUG] [Thread-72711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:17:35.282 [DEBUG] [Thread-72711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:17:35.304 [INFO] [Thread-72711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:17:35.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:17:35.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:17:36.192 [DEBUG] [Thread-72711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:17:36.192 [DEBUG] [Thread-72711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:17:36.240 [DEBUG] [Thread-72711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:17:36.240 [DEBUG] [Thread-72711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:17:36.249 [DEBUG] [Thread-72711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:17:36.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:17:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:17:36.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:17:36.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:17:36.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:17:36.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:17:36.284 [DEBUG] [Thread-72711] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:17:39.849 [DEBUG] [Thread-72713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:53.312 [DEBUG] [Thread-72714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:17:54.893 [DEBUG] [Thread-72715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:06.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:18:06.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:18:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:18:06.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 18, 2), 18.7, 28.49, 0.0, 50.29, 19.02, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:18:06.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:18:02
2025-12-12T16:18:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:18:07.256 [DEBUG] [Thread-72716] [transport.py] [_log()] starting thread (client mode): 0xf570fd30
2025-12-12T16:18:07.256 [DEBUG] [Thread-72716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:18:07.276 [DEBUG] [Thread-72716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:18:07.276 [INFO] [Thread-72716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] client lang: <none>
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] server lang: <none>
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] kex follows: False
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] Compression: none
2025-12-12T16:18:07.279 [DEBUG] [Thread-72716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:18:07.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:18:07.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] userauth is OK
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:18:07.296 [DEBUG] [Thread-72716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:18:07.311 [INFO] [Thread-72716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:18:07.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:18:07.961 [DEBUG] [Thread-72716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:18:07.961 [DEBUG] [Thread-72716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:18:07.961 [DEBUG] [Thread-72716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:18:08.001 [DEBUG] [Thread-72716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:18:08.002 [DEBUG] [Thread-72716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:18:08.004 [DEBUG] [Thread-72716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:18:08.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:18:08.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:18:08.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:18:08.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:18:08.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:18:08.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:18:08.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:18:08.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.595579 -999.00  +19.70  44.69     33   +2.90 1 1 2 1 1   888    0 15.07 -57.12 ----- 30.6 44.7 347.5 57.9 23.2 -25.0 23.0 -26.2 23.9 -25.8 24.2 -23.1
2025-12-12T16:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.595579
2025-12-12T16:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:18:02', tmtdew=18.7, humidity=28.49, cloud=0.0, wind=50.29, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:17:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:18:08.023 [DEBUG] [Thread-72716] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:18:08.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:18:08.109 [DEBUG] [Thread-72719] [transport.py] [_log()] starting thread (client mode): 0xf570df30
2025-12-12T16:18:08.109 [DEBUG] [Thread-72719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:18:08.123 [DEBUG] [Thread-72719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:18:08.124 [INFO] [Thread-72719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] client lang: <none>
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] server lang: <none>
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] kex follows: False
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] Compression: none
2025-12-12T16:18:08.131 [DEBUG] [Thread-72719] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:18:08.189 [DEBUG] [Thread-72719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:18:08.189 [DEBUG] [Thread-72719] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:18:08.189 [DEBUG] [Thread-72719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:18:08.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:18:08.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:18:08.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:08.191 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:08.245 [DEBUG] [Thread-72719] [transport.py] [_log()] userauth is OK
2025-12-12T16:18:08.245 [DEBUG] [Thread-72719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:18:08.245 [DEBUG] [Thread-72719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:18:08.245 [DEBUG] [Thread-72719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:18:08.245 [DEBUG] [Thread-72719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:18:08.259 [INFO] [Thread-72719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:18:08.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:18:08.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:18:09.119 [DEBUG] [Thread-72719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:18:09.119 [DEBUG] [Thread-72719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:18:09.167 [DEBUG] [Thread-72719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:18:09.167 [DEBUG] [Thread-72719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:18:09.175 [DEBUG] [Thread-72719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:18:09.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:18:09.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:18:09.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:18:09.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:18:09.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:18:09.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:18:09.207 [DEBUG] [Thread-72719] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:18:09.918 [DEBUG] [Thread-72721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:24.960 [DEBUG] [Thread-72722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:39.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:18:39.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:18:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:18:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 18, 34), 19.06, 27.68, 0.0, 49.39, 19.24, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:18:39.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:18:34
2025-12-12T16:18:39.988 [DEBUG] [Thread-72723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:40.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:18:40.193 [DEBUG] [Thread-72724] [transport.py] [_log()] starting thread (client mode): 0xf5743430
2025-12-12T16:18:40.193 [DEBUG] [Thread-72724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:18:40.214 [DEBUG] [Thread-72724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:18:40.215 [INFO] [Thread-72724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] client lang: <none>
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] server lang: <none>
2025-12-12T16:18:40.218 [DEBUG] [Thread-72724] [transport.py] [_log()] kex follows: False
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] Compression: none
2025-12-12T16:18:40.219 [DEBUG] [Thread-72724] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:18:40.236 [DEBUG] [Thread-72724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:18:40.236 [DEBUG] [Thread-72724] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:18:40.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:18:40.237 [DEBUG] [Thread-72724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:18:40.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:18:40.239 [DEBUG] [Thread-72724] [transport.py] [_log()] userauth is OK
2025-12-12T16:18:40.239 [DEBUG] [Thread-72724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:18:40.239 [DEBUG] [Thread-72724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:18:40.239 [DEBUG] [Thread-72724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:18:40.240 [DEBUG] [Thread-72724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:18:40.263 [INFO] [Thread-72724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:18:40.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:18:40.919 [DEBUG] [Thread-72724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:18:40.920 [DEBUG] [Thread-72724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:18:40.920 [DEBUG] [Thread-72724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:18:40.963 [DEBUG] [Thread-72724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:18:40.963 [DEBUG] [Thread-72724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:18:40.966 [DEBUG] [Thread-72724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:18:40.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:18:40.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:18:40.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:18:40.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:18:40.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:18:40.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:18:40.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:18:40.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:18:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:18:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.595926 -999.00  +19.80  53.16     32   +3.00 1 1 2 1 1   888    0 14.79 -57.86 ----- 37.5 53.2 311.4 58.1 23.2 -27.7 22.8 -28.8 23.6 -29.7 23.7 -27.3
2025-12-12T16:18:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:18:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:18:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.595926
2025-12-12T16:18:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:18:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:18:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:18:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:18:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:18:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:18:34', tmtdew=19.06, humidity=27.68, cloud=0.0, wind=49.39, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:18:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:18:40.993 [DEBUG] [Thread-72724] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:18:41.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:18:41.088 [DEBUG] [Thread-72727] [transport.py] [_log()] starting thread (client mode): 0xf813e200
2025-12-12T16:18:41.088 [DEBUG] [Thread-72727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:18:41.104 [DEBUG] [Thread-72727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:18:41.104 [INFO] [Thread-72727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:18:41.111 [DEBUG] [Thread-72727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:18:41.111 [DEBUG] [Thread-72727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] client lang: <none>
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] server lang: <none>
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] kex follows: False
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] Compression: none
2025-12-12T16:18:41.112 [DEBUG] [Thread-72727] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:18:41.169 [DEBUG] [Thread-72727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:18:41.170 [DEBUG] [Thread-72727] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:18:41.170 [DEBUG] [Thread-72727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:18:41.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:18:41.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:18:41.226 [DEBUG] [Thread-72727] [transport.py] [_log()] userauth is OK
2025-12-12T16:18:41.226 [DEBUG] [Thread-72727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:18:41.226 [DEBUG] [Thread-72727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:18:41.226 [DEBUG] [Thread-72727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:18:41.227 [DEBUG] [Thread-72727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:18:41.245 [INFO] [Thread-72727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:18:41.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:18:41.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:18:42.117 [DEBUG] [Thread-72727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:18:42.118 [DEBUG] [Thread-72727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:18:42.166 [DEBUG] [Thread-72727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:18:42.166 [DEBUG] [Thread-72727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:18:42.176 [DEBUG] [Thread-72727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:18:42.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:18: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')
2025-12-12T16:18:42.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:18:42.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:18:42.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:18:42.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:18:42.221 [DEBUG] [Thread-72727] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:18:53.362 [DEBUG] [Thread-72729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:18:55.014 [DEBUG] [Thread-72730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:08.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:08.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:10.057 [DEBUG] [Thread-72731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:19:12.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:19:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:19:12.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 19, 6), 18.98, 27.79, 0.0, 51.49, 19.09, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:19:12.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:19:06
2025-12-12T16:19:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:19:13.206 [DEBUG] [Thread-72732] [transport.py] [_log()] starting thread (client mode): 0xf570f160
2025-12-12T16:19:13.206 [DEBUG] [Thread-72732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:19:13.227 [DEBUG] [Thread-72732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:19:13.227 [INFO] [Thread-72732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:13.230 [DEBUG] [Thread-72732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] client lang: <none>
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] server lang: <none>
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] kex follows: False
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] Compression: none
2025-12-12T16:19:13.231 [DEBUG] [Thread-72732] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:19:13.247 [DEBUG] [Thread-72732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:19:13.247 [DEBUG] [Thread-72732] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:19:13.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:19:13.248 [DEBUG] [Thread-72732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:19:13.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:19:13.251 [DEBUG] [Thread-72732] [transport.py] [_log()] userauth is OK
2025-12-12T16:19:13.251 [DEBUG] [Thread-72732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:19:13.251 [DEBUG] [Thread-72732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:19:13.251 [DEBUG] [Thread-72732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:19:13.251 [DEBUG] [Thread-72732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:19:13.275 [INFO] [Thread-72732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:19:13.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:19:13.926 [DEBUG] [Thread-72732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:19:13.926 [DEBUG] [Thread-72732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:19:13.927 [DEBUG] [Thread-72732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:19:13.968 [DEBUG] [Thread-72732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:19:13.968 [DEBUG] [Thread-72732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:19:13.971 [DEBUG] [Thread-72732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:19:13.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:19:13.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:19:13.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:19:13.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:19:13.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:19:13.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:19:13.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:19:13.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:19:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:19:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.596274 -999.00  +19.60  36.86     32   +2.70 1 1 2 1 1   888    0 15.19 -47.55 ----- 35.5 36.9 310.2 53.5 22.7 -28.9 22.4 -28.9 23.1 -28.7 23.4 -23.6
2025-12-12T16:19:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:19:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:19:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.596274
2025-12-12T16:19:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:19:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:19:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:19:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:19:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:19:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:19:06', tmtdew=18.98, humidity=27.79, cloud=0.0, wind=51.49, temperature=19.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:18:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:19:13.999 [DEBUG] [Thread-72732] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:19:14.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:19:14.095 [DEBUG] [Thread-72735] [transport.py] [_log()] starting thread (client mode): 0xf81e7490
2025-12-12T16:19:14.095 [DEBUG] [Thread-72735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:19:14.110 [DEBUG] [Thread-72735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:19:14.110 [INFO] [Thread-72735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:14.118 [DEBUG] [Thread-72735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] client lang: <none>
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] server lang: <none>
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] kex follows: False
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] Compression: none
2025-12-12T16:19:14.119 [DEBUG] [Thread-72735] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:19:14.177 [DEBUG] [Thread-72735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:19:14.177 [DEBUG] [Thread-72735] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:19:14.178 [DEBUG] [Thread-72735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:19:14.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:19:14.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:19:14.232 [DEBUG] [Thread-72735] [transport.py] [_log()] userauth is OK
2025-12-12T16:19:14.233 [DEBUG] [Thread-72735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:19:14.233 [DEBUG] [Thread-72735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:19:14.233 [DEBUG] [Thread-72735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:19:14.233 [DEBUG] [Thread-72735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:19:14.251 [INFO] [Thread-72735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:19:14.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:19:14.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:19:15.091 [DEBUG] [Thread-72735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:19:15.091 [DEBUG] [Thread-72735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:19:15.139 [DEBUG] [Thread-72735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:19:15.139 [DEBUG] [Thread-72735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:19:15.148 [DEBUG] [Thread-72735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:19:15.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:19:15.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:19:15.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:19:15.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:19:15.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:19:15.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:19:15.183 [DEBUG] [Thread-72735] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:19:25.086 [DEBUG] [Thread-72737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:40.126 [DEBUG] [Thread-72738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:45.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:19:45.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:19:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:19:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 19, 38), 18.7, 28.26, 0.0, 47.57, 18.94, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:19:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:19:38
2025-12-12T16:19:46.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:19:46.161 [DEBUG] [Thread-72739] [transport.py] [_log()] starting thread (client mode): 0xf81e4670
2025-12-12T16:19:46.162 [DEBUG] [Thread-72739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:19:46.183 [DEBUG] [Thread-72739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:19:46.183 [INFO] [Thread-72739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] client lang: <none>
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] server lang: <none>
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] kex follows: False
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:19:46.187 [DEBUG] [Thread-72739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:19:46.188 [DEBUG] [Thread-72739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:19:46.188 [DEBUG] [Thread-72739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:19:46.188 [DEBUG] [Thread-72739] [transport.py] [_log()] Compression: none
2025-12-12T16:19:46.188 [DEBUG] [Thread-72739] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:19:46.205 [DEBUG] [Thread-72739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:19:46.205 [DEBUG] [Thread-72739] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:19:46.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:19:46.206 [DEBUG] [Thread-72739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:19:46.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:19:46.208 [DEBUG] [Thread-72739] [transport.py] [_log()] userauth is OK
2025-12-12T16:19:46.208 [DEBUG] [Thread-72739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:19:46.208 [DEBUG] [Thread-72739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:19:46.208 [DEBUG] [Thread-72739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:19:46.208 [DEBUG] [Thread-72739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:19:46.230 [INFO] [Thread-72739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:19:46.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:19:46.828 [DEBUG] [Thread-72739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:19:46.829 [DEBUG] [Thread-72739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:19:46.829 [DEBUG] [Thread-72739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:19:46.870 [DEBUG] [Thread-72739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:19:46.870 [DEBUG] [Thread-72739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:19:46.873 [DEBUG] [Thread-72739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:19:46.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:19:46.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:19:46.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:19:46.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:19:46.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:19:46.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:19:46.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:19:46.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:19:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:19:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.596621 -999.00  +19.50  39.58     33   +2.80 1 1 2 1 1   888    0 15.42 -38.75 ----- 45.1 39.6 308.6 44.5 22.7 -25.9 22.7 -24.4 23.0 -21.7 23.6 -23.2
2025-12-12T16:19:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:19:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:19:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.596621
2025-12-12T16:19:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:19:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:19:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:19:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:19:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:19:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:19:38', tmtdew=18.7, humidity=28.26, cloud=0.0, wind=47.57, temperature=18.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:19:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:19:46.897 [DEBUG] [Thread-72739] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:19:46.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:19:46.993 [DEBUG] [Thread-72742] [transport.py] [_log()] starting thread (client mode): 0xf81e6380
2025-12-12T16:19:46.993 [DEBUG] [Thread-72742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:19:47.009 [DEBUG] [Thread-72742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:19:47.009 [INFO] [Thread-72742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:47.017 [DEBUG] [Thread-72742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] client lang: <none>
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] server lang: <none>
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] kex follows: False
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] Compression: none
2025-12-12T16:19:47.018 [DEBUG] [Thread-72742] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:19:47.076 [DEBUG] [Thread-72742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:19:47.076 [DEBUG] [Thread-72742] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:19:47.077 [DEBUG] [Thread-72742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:19:47.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:19:47.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:19:47.132 [DEBUG] [Thread-72742] [transport.py] [_log()] userauth is OK
2025-12-12T16:19:47.132 [DEBUG] [Thread-72742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:19:47.132 [DEBUG] [Thread-72742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:19:47.133 [DEBUG] [Thread-72742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:19:47.133 [DEBUG] [Thread-72742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:19:47.152 [INFO] [Thread-72742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:19:47.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:19:47.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:19:47.990 [DEBUG] [Thread-72742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:19:47.990 [DEBUG] [Thread-72742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:19:48.038 [DEBUG] [Thread-72742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:19:48.038 [DEBUG] [Thread-72742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:19:48.047 [DEBUG] [Thread-72742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:19:48.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:19:48.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:19:48.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:19:48.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:19:48.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:19:48.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:19:48.080 [DEBUG] [Thread-72742] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:19:53.414 [DEBUG] [Thread-72744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:19:55.154 [DEBUG] [Thread-72745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:08.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:08.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:10.201 [DEBUG] [Thread-72746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:18.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:20:18.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:20:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:20:18.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 20, 10), 18.56, 28.51, 0.0, 44.53, 18.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:20:18.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:20:10
2025-12-12T16:20:18.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:20:19.082 [DEBUG] [Thread-72747] [transport.py] [_log()] starting thread (client mode): 0xf81c0c10
2025-12-12T16:20:19.082 [DEBUG] [Thread-72747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:20:19.102 [DEBUG] [Thread-72747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:20:19.102 [INFO] [Thread-72747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:20:19.105 [DEBUG] [Thread-72747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] client lang: <none>
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] server lang: <none>
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] kex follows: False
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:20:19.106 [DEBUG] [Thread-72747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:20:19.107 [DEBUG] [Thread-72747] [transport.py] [_log()] Compression: none
2025-12-12T16:20:19.107 [DEBUG] [Thread-72747] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:20:19.124 [DEBUG] [Thread-72747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:20:19.125 [DEBUG] [Thread-72747] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:20:19.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:20:19.125 [DEBUG] [Thread-72747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:20:19.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:20:19.127 [DEBUG] [Thread-72747] [transport.py] [_log()] userauth is OK
2025-12-12T16:20:19.127 [DEBUG] [Thread-72747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:20:19.127 [DEBUG] [Thread-72747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:20:19.128 [DEBUG] [Thread-72747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:20:19.128 [DEBUG] [Thread-72747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:20:19.163 [INFO] [Thread-72747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:20:19.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:20:19.801 [DEBUG] [Thread-72747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:20:19.801 [DEBUG] [Thread-72747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:20:19.802 [DEBUG] [Thread-72747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:20:19.843 [DEBUG] [Thread-72747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:20:19.843 [DEBUG] [Thread-72747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:20:19.846 [DEBUG] [Thread-72747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:20:19.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:20:19.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:20:19.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:20:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:20:19.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:20:19.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:20:19.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:20:19.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:20:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:20:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.596968 -999.00  +19.20  39.28     33   +2.80 1 1 2 1 1   888    0 15.47 -30.11 ----- 47.2 39.3 318.4 56.6 22.7 -26.3 22.6 -25.1 23.1 -21.9 23.6 -22.7
2025-12-12T16:20:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:20:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:20:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.596968
2025-12-12T16:20:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:20:19.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:20:19.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:20:19.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:20:19.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:20:19.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:20:10', tmtdew=18.56, humidity=28.51, cloud=0.0, wind=44.53, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:19:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:20:19.870 [DEBUG] [Thread-72747] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:20:19.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:20:19.966 [DEBUG] [Thread-72750] [transport.py] [_log()] starting thread (client mode): 0xf81c2ce0
2025-12-12T16:20:19.966 [DEBUG] [Thread-72750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:20:19.981 [DEBUG] [Thread-72750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:20:19.981 [INFO] [Thread-72750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:20:19.988 [DEBUG] [Thread-72750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:20:19.988 [DEBUG] [Thread-72750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] client lang: <none>
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] server lang: <none>
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] kex follows: False
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] Compression: none
2025-12-12T16:20:19.989 [DEBUG] [Thread-72750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:20:20.047 [DEBUG] [Thread-72750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:20:20.048 [DEBUG] [Thread-72750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:20:20.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:20:20.049 [DEBUG] [Thread-72750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:20:20.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:20:20.103 [DEBUG] [Thread-72750] [transport.py] [_log()] userauth is OK
2025-12-12T16:20:20.104 [DEBUG] [Thread-72750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:20:20.104 [DEBUG] [Thread-72750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:20:20.104 [DEBUG] [Thread-72750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:20:20.104 [DEBUG] [Thread-72750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:20:20.122 [INFO] [Thread-72750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:20:20.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:20:20.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:20:20.966 [DEBUG] [Thread-72750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:20:20.966 [DEBUG] [Thread-72750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:20:21.014 [DEBUG] [Thread-72750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:20:21.014 [DEBUG] [Thread-72750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:20:21.023 [DEBUG] [Thread-72750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:20:21.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:20:21.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:20:21.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:20:21.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:20:21.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:20:21.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:20:21.057 [DEBUG] [Thread-72750] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:20:25.231 [DEBUG] [Thread-72752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:40.277 [DEBUG] [Thread-72753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:20:51.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:20:51.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:20:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 20, 42), 19.36, 27.01, 0.0, 48.1, 19.42, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:20:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:20:42
2025-12-12T16:20:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:20:52.035 [DEBUG] [Thread-72754] [transport.py] [_log()] starting thread (client mode): 0xf81c18d0
2025-12-12T16:20:52.035 [DEBUG] [Thread-72754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:20:52.055 [DEBUG] [Thread-72754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:20:52.055 [INFO] [Thread-72754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] client lang: <none>
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] server lang: <none>
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] kex follows: False
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:20:52.059 [DEBUG] [Thread-72754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:20:52.060 [DEBUG] [Thread-72754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:20:52.060 [DEBUG] [Thread-72754] [transport.py] [_log()] Compression: none
2025-12-12T16:20:52.060 [DEBUG] [Thread-72754] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:20:52.077 [DEBUG] [Thread-72754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:20:52.078 [DEBUG] [Thread-72754] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:20:52.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:20:52.079 [DEBUG] [Thread-72754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:20:52.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:20:52.121 [DEBUG] [Thread-72754] [transport.py] [_log()] userauth is OK
2025-12-12T16:20:52.121 [DEBUG] [Thread-72754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:20:52.121 [DEBUG] [Thread-72754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:20:52.122 [DEBUG] [Thread-72754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:20:52.122 [DEBUG] [Thread-72754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:20:52.153 [INFO] [Thread-72754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:20:52.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:20:52.792 [DEBUG] [Thread-72754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:20:52.792 [DEBUG] [Thread-72754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:20:52.793 [DEBUG] [Thread-72754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:20:52.833 [DEBUG] [Thread-72754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:20:52.833 [DEBUG] [Thread-72754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:20:52.835 [DEBUG] [Thread-72754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:20:52.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:20:52.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:20:52.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:20:52.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:20:52.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:20:52.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:20:52.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:20:52.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:20:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:20:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.597326 -999.00  +19.50  39.11     33   +3.00 1 2 2 1 1   888    0 15.77 -25.16 ----- 37.2 39.1 313.6 45.4 22.7 -24.9 22.7 -24.3 23.3 -21.3 23.7 -22.0
2025-12-12T16:20:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:20:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:20:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.597326
2025-12-12T16:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T16:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:20:42', tmtdew=19.36, humidity=27.01, cloud=0.0, wind=48.1, temperature=19.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:20:08.966', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:20:52.854 [DEBUG] [Thread-72754] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:20:52.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:20:52.950 [DEBUG] [Thread-72757] [transport.py] [_log()] starting thread (client mode): 0xf81c0c40
2025-12-12T16:20:52.950 [DEBUG] [Thread-72757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:20:52.965 [DEBUG] [Thread-72757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:20:52.965 [INFO] [Thread-72757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:20:52.972 [DEBUG] [Thread-72757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] client lang: <none>
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] server lang: <none>
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] kex follows: False
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] Compression: none
2025-12-12T16:20:52.973 [DEBUG] [Thread-72757] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:20:53.031 [DEBUG] [Thread-72757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:20:53.032 [DEBUG] [Thread-72757] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:20:53.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:20:53.032 [DEBUG] [Thread-72757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:20:53.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:20:53.088 [DEBUG] [Thread-72757] [transport.py] [_log()] userauth is OK
2025-12-12T16:20:53.088 [DEBUG] [Thread-72757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:20:53.089 [DEBUG] [Thread-72757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:20:53.089 [DEBUG] [Thread-72757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:20:53.089 [DEBUG] [Thread-72757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:20:53.109 [INFO] [Thread-72757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:20:53.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:20:53.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:20:53.466 [DEBUG] [Thread-72759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:20:54.023 [DEBUG] [Thread-72757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:20:54.023 [DEBUG] [Thread-72757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:20:54.072 [DEBUG] [Thread-72757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:20:54.072 [DEBUG] [Thread-72757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:20:54.081 [DEBUG] [Thread-72757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:20:54.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:20:54.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:20:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:20:54.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:20:54.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:20:54.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:20:54.116 [DEBUG] [Thread-72757] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:20:55.305 [DEBUG] [Thread-72760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:08.616 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:08.616 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:10.351 [DEBUG] [Thread-72761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:24.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:21:24.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:21:24.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:21:24.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 21, 14), 19.46, 26.83, 0.0, 46.28, 19.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:21:24.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:21:14
2025-12-12T16:21:24.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:21:25.108 [DEBUG] [Thread-72762] [transport.py] [_log()] starting thread (client mode): 0xfabc5b10
2025-12-12T16:21:25.108 [DEBUG] [Thread-72762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:21:25.129 [DEBUG] [Thread-72762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:21:25.129 [INFO] [Thread-72762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] client lang: <none>
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] server lang: <none>
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] kex follows: False
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:21:25.132 [DEBUG] [Thread-72762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:21:25.133 [DEBUG] [Thread-72762] [transport.py] [_log()] Compression: none
2025-12-12T16:21:25.133 [DEBUG] [Thread-72762] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:21:25.148 [DEBUG] [Thread-72762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:21:25.148 [DEBUG] [Thread-72762] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:21:25.148 [DEBUG] [Thread-72762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:21:25.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:21:25.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:21:25.149 [DEBUG] [Thread-72762] [transport.py] [_log()] userauth is OK
2025-12-12T16:21:25.149 [DEBUG] [Thread-72762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:21:25.149 [DEBUG] [Thread-72762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:21:25.149 [DEBUG] [Thread-72762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:21:25.149 [DEBUG] [Thread-72762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:21:25.158 [INFO] [Thread-72762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:21:25.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:21:25.377 [DEBUG] [Thread-72764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:25.799 [DEBUG] [Thread-72762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:21:25.799 [DEBUG] [Thread-72762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:21:25.799 [DEBUG] [Thread-72762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:21:25.840 [DEBUG] [Thread-72762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:21:25.841 [DEBUG] [Thread-72762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:21:25.843 [DEBUG] [Thread-72762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:21:25.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:21:25.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:21:25.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:21:25.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:21:25.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:21:25.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:21:25.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:21:25.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.597662 -999.00  +19.40  41.43     32   +2.60 1 1 2 1 1   888    0 15.63 -19.05 ----- 36.9 41.4 298.8 51.4 22.8 -25.4 22.7 -25.1 23.4 -22.5 23.7 -23.1
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.597662
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:21:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:21:14', tmtdew=19.46, humidity=26.83, cloud=0.0, wind=46.28, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:20:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:21:25.863 [DEBUG] [Thread-72762] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:21:25.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:21:25.947 [DEBUG] [Thread-72766] [transport.py] [_log()] starting thread (client mode): 0xfabc6dd0
2025-12-12T16:21:25.947 [DEBUG] [Thread-72766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:21:25.962 [DEBUG] [Thread-72766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:21:25.962 [INFO] [Thread-72766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] client lang: <none>
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] server lang: <none>
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] kex follows: False
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] Compression: none
2025-12-12T16:21:25.969 [DEBUG] [Thread-72766] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:21:26.029 [DEBUG] [Thread-72766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:21:26.029 [DEBUG] [Thread-72766] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:21:26.029 [DEBUG] [Thread-72766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:21:26.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:21:26.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:21:26.086 [DEBUG] [Thread-72766] [transport.py] [_log()] userauth is OK
2025-12-12T16:21:26.086 [DEBUG] [Thread-72766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:21:26.086 [DEBUG] [Thread-72766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:21:26.086 [DEBUG] [Thread-72766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:21:26.086 [DEBUG] [Thread-72766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:21:26.100 [INFO] [Thread-72766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:21:26.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:21:26.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:21:26.963 [DEBUG] [Thread-72766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:21:26.963 [DEBUG] [Thread-72766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:21:27.010 [DEBUG] [Thread-72766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:21:27.010 [DEBUG] [Thread-72766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:21:27.018 [DEBUG] [Thread-72766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:21:27.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:21:27.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:21:27.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:21:27.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:21:27.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:21:27.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:21:27.052 [DEBUG] [Thread-72766] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:21:40.408 [DEBUG] [Thread-72768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:53.516 [DEBUG] [Thread-72769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:55.454 [DEBUG] [Thread-72770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:21:57.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:21:57.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:21:57.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:21:57.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 21, 46), 19.01, 27.68, 0.0, 41.6, 19.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:21:57.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:21:46
2025-12-12T16:21:57.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:21:58.051 [DEBUG] [Thread-72771] [transport.py] [_log()] starting thread (client mode): 0xf81e5990
2025-12-12T16:21:58.051 [DEBUG] [Thread-72771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:21:58.075 [DEBUG] [Thread-72771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:21:58.075 [INFO] [Thread-72771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] client lang: <none>
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] server lang: <none>
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] kex follows: False
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:21:58.079 [DEBUG] [Thread-72771] [transport.py] [_log()] Compression: none
2025-12-12T16:21:58.080 [DEBUG] [Thread-72771] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:21:58.095 [DEBUG] [Thread-72771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:21:58.096 [DEBUG] [Thread-72771] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:21:58.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:21:58.097 [DEBUG] [Thread-72771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:21:58.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:21:58.098 [DEBUG] [Thread-72771] [transport.py] [_log()] userauth is OK
2025-12-12T16:21:58.099 [DEBUG] [Thread-72771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:21:58.099 [DEBUG] [Thread-72771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:21:58.099 [DEBUG] [Thread-72771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:21:58.099 [DEBUG] [Thread-72771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:21:58.123 [INFO] [Thread-72771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:21:58.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:21:58.761 [DEBUG] [Thread-72771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:21:58.761 [DEBUG] [Thread-72771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:21:58.761 [DEBUG] [Thread-72771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:21:58.802 [DEBUG] [Thread-72771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:21:58.802 [DEBUG] [Thread-72771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:21:58.805 [DEBUG] [Thread-72771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:21:58.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:21:58.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:21:58.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:21:58.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:21:58.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:21:58.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:21:58.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:21:58.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.598010 -999.00  +19.50  42.00     33   +2.80 1 1 2 1 1   888    0 16.12 -13.63 ----- 38.3 42.0 309.2 52.2 22.8 -25.0 22.7 -24.4 23.3 -25.3 23.8 -23.1
2025-12-12T16:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.598010
2025-12-12T16:21:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:21:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:21:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:21:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:21:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:21:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:21:46', tmtdew=19.01, humidity=27.68, cloud=0.0, wind=41.6, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:21:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:21:58.830 [DEBUG] [Thread-72771] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:21:58.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:21:58.929 [DEBUG] [Thread-72774] [transport.py] [_log()] starting thread (client mode): 0xf574ef80
2025-12-12T16:21:58.929 [DEBUG] [Thread-72774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:21:58.945 [DEBUG] [Thread-72774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:21:58.945 [INFO] [Thread-72774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:21:58.953 [DEBUG] [Thread-72774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:21:58.953 [DEBUG] [Thread-72774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:21:58.953 [DEBUG] [Thread-72774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:21:58.953 [DEBUG] [Thread-72774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:58.954 [DEBUG] [Thread-72774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:21:58.954 [DEBUG] [Thread-72774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:58.954 [DEBUG] [Thread-72774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:21:58.954 [DEBUG] [Thread-72774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:21:58.954 [DEBUG] [Thread-72774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:21:58.954 [DEBUG] [Thread-72774] [transport.py] [_log()] client lang: <none>
2025-12-12T16:21:58.955 [DEBUG] [Thread-72774] [transport.py] [_log()] server lang: <none>
2025-12-12T16:21:58.955 [DEBUG] [Thread-72774] [transport.py] [_log()] kex follows: False
2025-12-12T16:21:58.955 [DEBUG] [Thread-72774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:21:58.955 [DEBUG] [Thread-72774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:21:58.955 [DEBUG] [Thread-72774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:21:58.956 [DEBUG] [Thread-72774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:21:58.956 [DEBUG] [Thread-72774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:21:58.956 [DEBUG] [Thread-72774] [transport.py] [_log()] Compression: none
2025-12-12T16:21:58.956 [DEBUG] [Thread-72774] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:21:59.010 [DEBUG] [Thread-72774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:21:59.011 [DEBUG] [Thread-72774] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:21:59.011 [DEBUG] [Thread-72774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:21:59.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:21:59.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:21:59.066 [DEBUG] [Thread-72774] [transport.py] [_log()] userauth is OK
2025-12-12T16:21:59.066 [DEBUG] [Thread-72774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:21:59.067 [DEBUG] [Thread-72774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:21:59.067 [DEBUG] [Thread-72774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:21:59.067 [DEBUG] [Thread-72774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:21:59.085 [INFO] [Thread-72774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:21:59.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:21:59.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:21:59.934 [DEBUG] [Thread-72774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:21:59.934 [DEBUG] [Thread-72774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:21:59.982 [DEBUG] [Thread-72774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:21:59.982 [DEBUG] [Thread-72774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:21:59.990 [DEBUG] [Thread-72774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:21:59.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:21:59.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:22:00.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:22:00.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:22:00.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:22:00.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:22:00.022 [DEBUG] [Thread-72774] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:22:08.757 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:22:08.758 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:22:10.484 [DEBUG] [Thread-72776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:22:25.523 [DEBUG] [Thread-72777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:22:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:22:30.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:22:30.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:22:30.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 22, 18), 18.86, 27.97, 0.0, 42.45, 19.39, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:22:30.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:22:18
2025-12-12T16:22:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:22:31.019 [DEBUG] [Thread-72778] [transport.py] [_log()] starting thread (client mode): 0xf574e170
2025-12-12T16:22:31.019 [DEBUG] [Thread-72778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:22:31.039 [DEBUG] [Thread-72778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:22:31.039 [INFO] [Thread-72778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:22:31.042 [DEBUG] [Thread-72778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:22:31.042 [DEBUG] [Thread-72778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:22:31.042 [DEBUG] [Thread-72778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:22:31.042 [DEBUG] [Thread-72778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:22:31.042 [DEBUG] [Thread-72778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:22:31.042 [DEBUG] [Thread-72778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] client lang: <none>
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] server lang: <none>
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] kex follows: False
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] Compression: none
2025-12-12T16:22:31.043 [DEBUG] [Thread-72778] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:22:31.062 [DEBUG] [Thread-72778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:22:31.063 [DEBUG] [Thread-72778] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:22:31.063 [DEBUG] [Thread-72778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:22:31.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:22:31.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:22:31.105 [DEBUG] [Thread-72778] [transport.py] [_log()] userauth is OK
2025-12-12T16:22:31.105 [DEBUG] [Thread-72778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:22:31.105 [DEBUG] [Thread-72778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:22:31.105 [DEBUG] [Thread-72778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:22:31.105 [DEBUG] [Thread-72778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:22:31.136 [INFO] [Thread-72778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:22:31.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:22:31.795 [DEBUG] [Thread-72778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:22:31.796 [DEBUG] [Thread-72778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:22:31.796 [DEBUG] [Thread-72778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:22:31.837 [DEBUG] [Thread-72778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:22:31.838 [DEBUG] [Thread-72778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:22:31.841 [DEBUG] [Thread-72778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:22:31.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:22:31.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:22:31.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:22:31.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:22:31.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:22:31.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:22:31.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:22:31.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:22:31.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:22:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.598357 -999.00  +19.20  53.62     33   +2.60 1 1 2 1 1   888    0 16.19 -9.05 ----- 49.2 53.6 294.4 63.1 22.9 -25.0 22.7 -26.8 23.4 -24.4 23.8 -23.1
2025-12-12T16:22:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:22:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:22:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.598357
2025-12-12T16:22:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:22:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:22:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:22:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:22:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:22:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:22:18', tmtdew=18.86, humidity=27.97, cloud=0.0, wind=42.45, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:21:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:22:31.864 [DEBUG] [Thread-72778] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:22:31.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:22:31.959 [DEBUG] [Thread-72781] [transport.py] [_log()] starting thread (client mode): 0xf81f06a0
2025-12-12T16:22:31.959 [DEBUG] [Thread-72781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:22:31.975 [DEBUG] [Thread-72781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:22:31.975 [INFO] [Thread-72781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] client lang: <none>
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] server lang: <none>
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] kex follows: False
2025-12-12T16:22:31.982 [DEBUG] [Thread-72781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:22:31.983 [DEBUG] [Thread-72781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:22:31.983 [DEBUG] [Thread-72781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:22:31.983 [DEBUG] [Thread-72781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:22:31.983 [DEBUG] [Thread-72781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:22:31.983 [DEBUG] [Thread-72781] [transport.py] [_log()] Compression: none
2025-12-12T16:22:31.983 [DEBUG] [Thread-72781] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:22:32.040 [DEBUG] [Thread-72781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:22:32.040 [DEBUG] [Thread-72781] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:22:32.041 [DEBUG] [Thread-72781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:22:32.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:22:32.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:22:32.098 [DEBUG] [Thread-72781] [transport.py] [_log()] userauth is OK
2025-12-12T16:22:32.098 [DEBUG] [Thread-72781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:22:32.098 [DEBUG] [Thread-72781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:22:32.098 [DEBUG] [Thread-72781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:22:32.098 [DEBUG] [Thread-72781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:22:32.112 [INFO] [Thread-72781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:22:32.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:22:32.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:22:32.962 [DEBUG] [Thread-72781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:22:32.962 [DEBUG] [Thread-72781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:22:33.010 [DEBUG] [Thread-72781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:22:33.010 [DEBUG] [Thread-72781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:22:33.019 [DEBUG] [Thread-72781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:22:33.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:22: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')
2025-12-12T16:22:33.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:22:33.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:22:33.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:22:33.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:22:33.053 [DEBUG] [Thread-72781] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:22:40.551 [DEBUG] [Thread-72783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:22:53.574 [DEBUG] [Thread-72784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:22:55.585 [DEBUG] [Thread-72785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:23:03.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:23: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
2025-12-12T16:23:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 22, 50), 19.19, 27.48, 0.0, 39.28, 19.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:23:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:22:50
2025-12-12T16:23:03.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:23:04.044 [DEBUG] [Thread-72786] [transport.py] [_log()] starting thread (client mode): 0xf578a890
2025-12-12T16:23:04.044 [DEBUG] [Thread-72786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:23:04.063 [DEBUG] [Thread-72786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:23:04.064 [INFO] [Thread-72786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:23:04.067 [DEBUG] [Thread-72786] [transport.py] [_log()] client lang: <none>
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] server lang: <none>
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] kex follows: False
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] Compression: none
2025-12-12T16:23:04.068 [DEBUG] [Thread-72786] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:23:04.088 [DEBUG] [Thread-72786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:23:04.089 [DEBUG] [Thread-72786] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:23:04.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:23:04.089 [DEBUG] [Thread-72786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:23:04.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:23:04.133 [DEBUG] [Thread-72786] [transport.py] [_log()] userauth is OK
2025-12-12T16:23:04.133 [DEBUG] [Thread-72786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:23:04.133 [DEBUG] [Thread-72786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:23:04.133 [DEBUG] [Thread-72786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:23:04.133 [DEBUG] [Thread-72786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:23:04.155 [INFO] [Thread-72786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:23:04.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:23:04.817 [DEBUG] [Thread-72786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:23:04.818 [DEBUG] [Thread-72786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:23:04.818 [DEBUG] [Thread-72786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:23:04.858 [DEBUG] [Thread-72786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:23:04.858 [DEBUG] [Thread-72786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:23:04.861 [DEBUG] [Thread-72786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:23:04.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:23:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:23:04.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:23:04.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:23:04.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:23:04.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:23:04.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:23:04.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:23:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:23:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.598704 -999.00  +19.10  52.77     33   +2.70 1 1 2 1 1   888    0 16.26 -7.53 ----- 47.7 52.8 306.6 59.0 22.7 -25.7 22.7 -25.6 23.3 -23.9 23.7 -24.3
2025-12-12T16:23:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:23:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:23:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.598704
2025-12-12T16:23:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:23:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:23:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:23:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:23:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:23:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:22:50', tmtdew=19.19, humidity=27.48, cloud=0.0, wind=39.28, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:22:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:23:04.885 [DEBUG] [Thread-72786] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:23:04.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:23:04.981 [DEBUG] [Thread-72789] [transport.py] [_log()] starting thread (client mode): 0xf813dc90
2025-12-12T16:23:04.981 [DEBUG] [Thread-72789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:23:04.996 [DEBUG] [Thread-72789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:23:04.996 [INFO] [Thread-72789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:23:05.003 [DEBUG] [Thread-72789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:23:05.003 [DEBUG] [Thread-72789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] client lang: <none>
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] server lang: <none>
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] kex follows: False
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] Compression: none
2025-12-12T16:23:05.004 [DEBUG] [Thread-72789] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:23:05.061 [DEBUG] [Thread-72789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:23:05.062 [DEBUG] [Thread-72789] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:23:05.062 [DEBUG] [Thread-72789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:23:05.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:23:05.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:23:05.118 [DEBUG] [Thread-72789] [transport.py] [_log()] userauth is OK
2025-12-12T16:23:05.118 [DEBUG] [Thread-72789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:23:05.118 [DEBUG] [Thread-72789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:23:05.118 [DEBUG] [Thread-72789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:23:05.118 [DEBUG] [Thread-72789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:23:05.137 [INFO] [Thread-72789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:23:05.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:23:05.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:23:05.990 [DEBUG] [Thread-72789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:23:05.990 [DEBUG] [Thread-72789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:23:06.038 [DEBUG] [Thread-72789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:23:06.038 [DEBUG] [Thread-72789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:23:06.050 [DEBUG] [Thread-72789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:23:06.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:23:06.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:23:06.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:23:06.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:23:06.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:23:06.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:23:06.086 [DEBUG] [Thread-72789] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:23:08.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:08.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:10.613 [DEBUG] [Thread-72791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:25.654 [DEBUG] [Thread-72792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:36.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:23:36.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:23:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:23:36.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 23, 22), 19.71, 26.6, 0.0, 40.07, 19.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:23:36.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:23:22
2025-12-12T16:23:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:23:37.042 [DEBUG] [Thread-72793] [transport.py] [_log()] starting thread (client mode): 0xf578b880
2025-12-12T16:23:37.042 [DEBUG] [Thread-72793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:23:37.062 [DEBUG] [Thread-72793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:23:37.062 [INFO] [Thread-72793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:23:37.065 [DEBUG] [Thread-72793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:23:37.065 [DEBUG] [Thread-72793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:23:37.065 [DEBUG] [Thread-72793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] client lang: <none>
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] server lang: <none>
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] kex follows: False
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:23:37.066 [DEBUG] [Thread-72793] [transport.py] [_log()] Compression: none
2025-12-12T16:23:37.067 [DEBUG] [Thread-72793] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:23:37.076 [DEBUG] [Thread-72793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:23:37.076 [DEBUG] [Thread-72793] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:23:37.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:23:37.077 [DEBUG] [Thread-72793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:23:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:23:37.079 [DEBUG] [Thread-72793] [transport.py] [_log()] userauth is OK
2025-12-12T16:23:37.079 [DEBUG] [Thread-72793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:23:37.079 [DEBUG] [Thread-72793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:23:37.079 [DEBUG] [Thread-72793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:23:37.079 [DEBUG] [Thread-72793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:23:37.103 [INFO] [Thread-72793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:23:37.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:23:37.761 [DEBUG] [Thread-72793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:23:37.762 [DEBUG] [Thread-72793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:23:37.762 [DEBUG] [Thread-72793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:23:37.803 [DEBUG] [Thread-72793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:23:37.803 [DEBUG] [Thread-72793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:23:37.806 [DEBUG] [Thread-72793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:23:37.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:23:37.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:23:37.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:23:37.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:23:37.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:23:37.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:23:37.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:23:37.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:23:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:23:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.599399 -999.00  +19.20  40.22     33   +2.60 1 1 2 1 1   888    0 16.43 -7.40 ----- 46.3 40.2 296.4 53.4 22.8 -25.7 22.6 -25.7 23.3 -24.6 23.7 -23.3
2025-12-12T16:23:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:23:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:23:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.599399
2025-12-12T16:23:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:23:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:23:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:23:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:23:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:23:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:23:22', tmtdew=19.71, humidity=26.6, cloud=0.0, wind=40.07, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:23:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:23:37.830 [DEBUG] [Thread-72793] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:23:37.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:23:37.929 [DEBUG] [Thread-72796] [transport.py] [_log()] starting thread (client mode): 0xfabc72e0
2025-12-12T16:23:37.929 [DEBUG] [Thread-72796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:23:37.943 [DEBUG] [Thread-72796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:23:37.943 [INFO] [Thread-72796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:23:37.950 [DEBUG] [Thread-72796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:23:37.950 [DEBUG] [Thread-72796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:23:37.950 [DEBUG] [Thread-72796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:23:37.950 [DEBUG] [Thread-72796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:37.950 [DEBUG] [Thread-72796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:23:37.950 [DEBUG] [Thread-72796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] client lang: <none>
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] server lang: <none>
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] kex follows: False
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] Compression: none
2025-12-12T16:23:37.951 [DEBUG] [Thread-72796] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:23:38.008 [DEBUG] [Thread-72796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:23:38.009 [DEBUG] [Thread-72796] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:23:38.009 [DEBUG] [Thread-72796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:23:38.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:23:38.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:23:38.065 [DEBUG] [Thread-72796] [transport.py] [_log()] userauth is OK
2025-12-12T16:23:38.065 [DEBUG] [Thread-72796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:23:38.065 [DEBUG] [Thread-72796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:23:38.066 [DEBUG] [Thread-72796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:23:38.066 [DEBUG] [Thread-72796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:23:38.089 [INFO] [Thread-72796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:23:38.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:23:38.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:23:38.933 [DEBUG] [Thread-72796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:23:38.933 [DEBUG] [Thread-72796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:23:38.981 [DEBUG] [Thread-72796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:23:38.981 [DEBUG] [Thread-72796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:23:38.990 [DEBUG] [Thread-72796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:23:38.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:23:38.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:23:39.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:23:39.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:23:39.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:23:39.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:23:39.024 [DEBUG] [Thread-72796] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:23:40.684 [DEBUG] [Thread-72798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:53.631 [DEBUG] [Thread-72799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:23:55.725 [DEBUG] [Thread-72800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:24:09.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:24:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:24:09.040 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:09.041 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 23, 54), 20.01, 26.05, 0.0, 35.02, 20.0, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:24:09.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:23:54
2025-12-12T16:24:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:24:09.986 [DEBUG] [Thread-72801] [transport.py] [_log()] starting thread (client mode): 0xf57bcca0
2025-12-12T16:24:09.986 [DEBUG] [Thread-72801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:24:10.006 [DEBUG] [Thread-72801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:24:10.006 [INFO] [Thread-72801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] client lang: <none>
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] server lang: <none>
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] kex follows: False
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] Compression: none
2025-12-12T16:24:10.009 [DEBUG] [Thread-72801] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:24:10.028 [DEBUG] [Thread-72801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:24:10.028 [DEBUG] [Thread-72801] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:24:10.029 [DEBUG] [Thread-72801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:24:10.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:24:10.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:24:10.030 [DEBUG] [Thread-72801] [transport.py] [_log()] userauth is OK
2025-12-12T16:24:10.031 [DEBUG] [Thread-72801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:24:10.031 [DEBUG] [Thread-72801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:24:10.031 [DEBUG] [Thread-72801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:24:10.031 [DEBUG] [Thread-72801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:24:10.048 [INFO] [Thread-72801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:24:10.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:24:10.709 [DEBUG] [Thread-72801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:24:10.710 [DEBUG] [Thread-72801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:24:10.710 [DEBUG] [Thread-72801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:24:10.751 [DEBUG] [Thread-72801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:24:10.751 [DEBUG] [Thread-72801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:24:10.754 [DEBUG] [Thread-72801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:24:10.755 [DEBUG] [Thread-72803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:10.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:24:10.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:24:10.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:24:10.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:24:10.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:24:10.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:24:10.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:24:10.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:24:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:24:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.599746 -999.00  +19.30  42.77     32   +2.50 1 1 2 1 1   888    0 16.12 -2.92 ----- 42.4 42.8 313.4 47.3 22.6 -25.9 22.6 -24.4 23.1 -24.0 23.6 -23.9
2025-12-12T16:24:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:24:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:24:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.599746
2025-12-12T16:24:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:24:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:24:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:24:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:24:10.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:24:10.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:23:54', tmtdew=20.01, humidity=26.05, cloud=0.0, wind=35.02, temperature=20.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:23:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:24:10.779 [DEBUG] [Thread-72801] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:24:10.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:24:10.875 [DEBUG] [Thread-72805] [transport.py] [_log()] starting thread (client mode): 0xf570cc70
2025-12-12T16:24:10.875 [DEBUG] [Thread-72805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:24:10.890 [DEBUG] [Thread-72805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:24:10.890 [INFO] [Thread-72805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:10.898 [DEBUG] [Thread-72805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] client lang: <none>
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] server lang: <none>
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] kex follows: False
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] Compression: none
2025-12-12T16:24:10.899 [DEBUG] [Thread-72805] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:24:10.956 [DEBUG] [Thread-72805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:24:10.957 [DEBUG] [Thread-72805] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:24:10.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:24:10.958 [DEBUG] [Thread-72805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:24:10.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:24:11.012 [DEBUG] [Thread-72805] [transport.py] [_log()] userauth is OK
2025-12-12T16:24:11.013 [DEBUG] [Thread-72805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:24:11.013 [DEBUG] [Thread-72805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:24:11.013 [DEBUG] [Thread-72805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:24:11.013 [DEBUG] [Thread-72805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:24:11.031 [INFO] [Thread-72805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:24:11.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:24:11.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:24:11.861 [DEBUG] [Thread-72805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:24:11.861 [DEBUG] [Thread-72805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:24:11.909 [DEBUG] [Thread-72805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:24:11.909 [DEBUG] [Thread-72805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:24:11.919 [DEBUG] [Thread-72805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:24:11.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:24:11.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:24:11.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:24:11.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:24:11.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:24:11.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:24:11.958 [DEBUG] [Thread-72805] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:24:25.786 [DEBUG] [Thread-72807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:40.829 [DEBUG] [Thread-72808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:41.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:24:41.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:24:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:24:42.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 24, 26), 20.17, 25.77, 0.0, 34.44, 20.0, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:24:42.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:24:26
2025-12-12T16:24:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:24:42.947 [DEBUG] [Thread-72809] [transport.py] [_log()] starting thread (client mode): 0xf578a380
2025-12-12T16:24:42.947 [DEBUG] [Thread-72809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:24:42.967 [DEBUG] [Thread-72809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:24:42.967 [INFO] [Thread-72809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:42.970 [DEBUG] [Thread-72809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] client lang: <none>
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] server lang: <none>
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] kex follows: False
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] Compression: none
2025-12-12T16:24:42.971 [DEBUG] [Thread-72809] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:24:42.989 [DEBUG] [Thread-72809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:24:42.990 [DEBUG] [Thread-72809] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:24:42.990 [DEBUG] [Thread-72809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:24:42.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:24:42.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:24:42.993 [DEBUG] [Thread-72809] [transport.py] [_log()] userauth is OK
2025-12-12T16:24:42.993 [DEBUG] [Thread-72809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:24:42.993 [DEBUG] [Thread-72809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:24:42.993 [DEBUG] [Thread-72809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:24:42.993 [DEBUG] [Thread-72809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:24:43.017 [INFO] [Thread-72809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:24:43.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:24:43.632 [DEBUG] [Thread-72809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:24:43.632 [DEBUG] [Thread-72809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:24:43.632 [DEBUG] [Thread-72809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:24:43.673 [DEBUG] [Thread-72809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:24:43.673 [DEBUG] [Thread-72809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:24:43.677 [DEBUG] [Thread-72809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:24:43.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:24:43.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:24:43.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:24:43.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:24:43.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:24:43.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:24:43.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:24:43.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:24:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:24:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.600093 -999.00  +19.10  47.24     33   +2.70 1 1 2 1 1   888    0 16.65 -0.23 ----- 40.7 47.2 311.2 55.2 22.7 -26.2 22.6 -25.3 23.3 -26.0 23.8 -23.0
2025-12-12T16:24:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:24:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:24:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.600093
2025-12-12T16:24:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:24:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:24:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:24:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:24:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:24:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:24:26', tmtdew=20.17, humidity=25.77, cloud=0.0, wind=34.44, temperature=20.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:24:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:24:43.702 [DEBUG] [Thread-72809] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:24:43.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:24:43.799 [DEBUG] [Thread-72812] [transport.py] [_log()] starting thread (client mode): 0xfabc6230
2025-12-12T16:24:43.799 [DEBUG] [Thread-72812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:24:43.815 [DEBUG] [Thread-72812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:24:43.815 [INFO] [Thread-72812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:24:43.822 [DEBUG] [Thread-72812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:24:43.822 [DEBUG] [Thread-72812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:24:43.822 [DEBUG] [Thread-72812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:24:43.822 [DEBUG] [Thread-72812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] client lang: <none>
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] server lang: <none>
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] kex follows: False
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] Compression: none
2025-12-12T16:24:43.823 [DEBUG] [Thread-72812] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:24:43.880 [DEBUG] [Thread-72812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:24:43.880 [DEBUG] [Thread-72812] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:24:43.881 [DEBUG] [Thread-72812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:24:43.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:24:43.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:24:43.936 [DEBUG] [Thread-72812] [transport.py] [_log()] userauth is OK
2025-12-12T16:24:43.936 [DEBUG] [Thread-72812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:24:43.936 [DEBUG] [Thread-72812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:24:43.937 [DEBUG] [Thread-72812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:24:43.937 [DEBUG] [Thread-72812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:24:43.959 [INFO] [Thread-72812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:24:43.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:24:43.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:24:44.818 [DEBUG] [Thread-72812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:24:44.818 [DEBUG] [Thread-72812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:24:44.866 [DEBUG] [Thread-72812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:24:44.866 [DEBUG] [Thread-72812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:24:44.875 [DEBUG] [Thread-72812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:24:44.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:24:44.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:24:44.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:24:44.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:24:44.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:24:44.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:24:44.908 [DEBUG] [Thread-72812] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:24:53.678 [DEBUG] [Thread-72814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:24:55.859 [DEBUG] [Thread-72815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:09.179 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:09.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:10.904 [DEBUG] [Thread-72816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:25:14.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:25:14.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:25:15.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 24, 58), 20.12, 26.27, 0.0, 36.07, 20.11, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:25:15.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:24:58
2025-12-12T16:25:15.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:25:15.931 [DEBUG] [Thread-72817] [transport.py] [_log()] starting thread (client mode): 0xf57bd9c0
2025-12-12T16:25:15.931 [DEBUG] [Thread-72817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:25:15.954 [DEBUG] [Thread-72817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:25:15.954 [INFO] [Thread-72817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] client lang: <none>
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] server lang: <none>
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] kex follows: False
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] Compression: none
2025-12-12T16:25:15.958 [DEBUG] [Thread-72817] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:25:15.973 [DEBUG] [Thread-72817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:25:15.973 [DEBUG] [Thread-72817] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:25:15.974 [DEBUG] [Thread-72817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:25:15.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:25:15.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:25:15.974 [DEBUG] [Thread-72817] [transport.py] [_log()] userauth is OK
2025-12-12T16:25:15.974 [DEBUG] [Thread-72817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:25:15.975 [DEBUG] [Thread-72817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:25:15.975 [DEBUG] [Thread-72817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:25:15.975 [DEBUG] [Thread-72817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:25:15.991 [INFO] [Thread-72817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:25:15.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:25:16.693 [DEBUG] [Thread-72817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:25:16.693 [DEBUG] [Thread-72817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:25:16.693 [DEBUG] [Thread-72817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:25:16.734 [DEBUG] [Thread-72817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:25:16.734 [DEBUG] [Thread-72817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:25:16.736 [DEBUG] [Thread-72817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:25:16.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:25:16.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:25:16.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:25:16.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:25:16.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:25:16.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:25:16.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.600440 -999.00  +19.30  40.54     33   +2.80 1 1 2 1 1   888    0 16.63 0.11 ----- 48.6 40.5 306.6 51.1 22.7 -25.3 22.7 -25.5 23.3 -23.2 23.7 -23.6
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.600440
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:25:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:24:58', tmtdew=20.12, humidity=26.27, cloud=0.0, wind=36.07, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:24:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:25:16.755 [DEBUG] [Thread-72817] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:25:16.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:25:16.840 [DEBUG] [Thread-72820] [transport.py] [_log()] starting thread (client mode): 0xf57897e0
2025-12-12T16:25:16.840 [DEBUG] [Thread-72820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:25:16.855 [DEBUG] [Thread-72820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:25:16.855 [INFO] [Thread-72820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] client lang: <none>
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] server lang: <none>
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] kex follows: False
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:25:16.862 [DEBUG] [Thread-72820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:25:16.863 [DEBUG] [Thread-72820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:25:16.863 [DEBUG] [Thread-72820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:25:16.863 [DEBUG] [Thread-72820] [transport.py] [_log()] Compression: none
2025-12-12T16:25:16.863 [DEBUG] [Thread-72820] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:25:16.918 [DEBUG] [Thread-72820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:25:16.918 [DEBUG] [Thread-72820] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:25:16.918 [DEBUG] [Thread-72820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:25:16.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:25:16.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:25:16.975 [DEBUG] [Thread-72820] [transport.py] [_log()] userauth is OK
2025-12-12T16:25:16.975 [DEBUG] [Thread-72820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:25:16.975 [DEBUG] [Thread-72820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:25:16.975 [DEBUG] [Thread-72820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:25:16.975 [DEBUG] [Thread-72820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:25:16.989 [INFO] [Thread-72820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:25:16.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:25:16.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:25:17.843 [DEBUG] [Thread-72820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:25:17.843 [DEBUG] [Thread-72820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:25:17.890 [DEBUG] [Thread-72820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:25:17.890 [DEBUG] [Thread-72820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:25:17.898 [DEBUG] [Thread-72820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:25:17.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:25:17.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:25:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:25:17.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:25:17.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:25:17.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:25:17.930 [DEBUG] [Thread-72820] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:25:25.936 [DEBUG] [Thread-72822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:40.982 [DEBUG] [Thread-72823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:25:47.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:25:47.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:25:48.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 25, 30), 19.97, 26.53, 0.0, 44.16, 20.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:25:48.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:25:30
2025-12-12T16:25:48.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:25:48.899 [DEBUG] [Thread-72824] [transport.py] [_log()] starting thread (client mode): 0xf57bccd0
2025-12-12T16:25:48.899 [DEBUG] [Thread-72824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:25:48.918 [DEBUG] [Thread-72824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:25:48.918 [INFO] [Thread-72824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] client lang: <none>
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] server lang: <none>
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] kex follows: False
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] Compression: none
2025-12-12T16:25:48.922 [DEBUG] [Thread-72824] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:25:48.941 [DEBUG] [Thread-72824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:25:48.942 [DEBUG] [Thread-72824] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:25:48.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:25:48.942 [DEBUG] [Thread-72824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:25:48.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:25:48.944 [DEBUG] [Thread-72824] [transport.py] [_log()] userauth is OK
2025-12-12T16:25:48.944 [DEBUG] [Thread-72824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:25:48.944 [DEBUG] [Thread-72824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:25:48.945 [DEBUG] [Thread-72824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:25:48.945 [DEBUG] [Thread-72824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:25:48.968 [INFO] [Thread-72824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:25:48.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:25:49.576 [DEBUG] [Thread-72824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:25:49.577 [DEBUG] [Thread-72824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:25:49.577 [DEBUG] [Thread-72824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:25:49.618 [DEBUG] [Thread-72824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:25:49.618 [DEBUG] [Thread-72824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:25:49.621 [DEBUG] [Thread-72824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:25:49.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:25:49.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:25:49.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:25:49.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:25:49.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:25:49.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:25:49.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:25:49.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:25:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:25:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.600799 -999.00  +19.30  41.14     33   +2.90 1 1 2 1 1   888    0 16.69 0.97 ----- 38.7 41.1 305.8 58.6 22.7 -25.8 22.6 -25.4 23.4 -24.6 23.7 -24.1
2025-12-12T16:25:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:25:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:25:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.600799
2025-12-12T16:25:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:25:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:25:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:25:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:25:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:25:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:25:30', tmtdew=19.97, humidity=26.53, cloud=0.0, wind=44.16, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:25:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:25:49.646 [DEBUG] [Thread-72824] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:25:49.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:25:49.743 [DEBUG] [Thread-72827] [transport.py] [_log()] starting thread (client mode): 0xf574cd90
2025-12-12T16:25:49.743 [DEBUG] [Thread-72827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:25:49.758 [DEBUG] [Thread-72827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:25:49.758 [INFO] [Thread-72827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:25:49.766 [DEBUG] [Thread-72827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] client lang: <none>
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] server lang: <none>
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] kex follows: False
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] Compression: none
2025-12-12T16:25:49.767 [DEBUG] [Thread-72827] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:25:49.824 [DEBUG] [Thread-72827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:25:49.824 [DEBUG] [Thread-72827] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:25:49.825 [DEBUG] [Thread-72827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:25:49.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:25:49.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:25:49.879 [DEBUG] [Thread-72827] [transport.py] [_log()] userauth is OK
2025-12-12T16:25:49.880 [DEBUG] [Thread-72827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:25:49.880 [DEBUG] [Thread-72827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:25:49.880 [DEBUG] [Thread-72827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:25:49.880 [DEBUG] [Thread-72827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:25:49.899 [INFO] [Thread-72827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:25:49.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:25:49.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:25:50.803 [DEBUG] [Thread-72827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:25:50.803 [DEBUG] [Thread-72827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:25:50.851 [DEBUG] [Thread-72827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:25:50.851 [DEBUG] [Thread-72827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:25:50.860 [DEBUG] [Thread-72827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:25:50.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:25:50.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:25:50.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:25:50.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:25:50.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:25:50.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:25:50.896 [DEBUG] [Thread-72827] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:25:53.728 [DEBUG] [Thread-72829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:25:56.010 [DEBUG] [Thread-72830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:09.321 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:09.322 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:11.052 [DEBUG] [Thread-72831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:20.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:26:20.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:26:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:26:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 26, 2), 19.44, 27.39, 0.0, 42.87, 19.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:26:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:26:02
2025-12-12T16:26:21.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:26:21.865 [DEBUG] [Thread-72832] [transport.py] [_log()] starting thread (client mode): 0xf570d120
2025-12-12T16:26:21.865 [DEBUG] [Thread-72832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:26:21.885 [DEBUG] [Thread-72832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:26:21.886 [INFO] [Thread-72832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:26:21.888 [DEBUG] [Thread-72832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:26:21.888 [DEBUG] [Thread-72832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] client lang: <none>
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] server lang: <none>
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] kex follows: False
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] Compression: none
2025-12-12T16:26:21.889 [DEBUG] [Thread-72832] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:26:21.907 [DEBUG] [Thread-72832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:26:21.908 [DEBUG] [Thread-72832] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:26:21.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:26:21.909 [DEBUG] [Thread-72832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:26:21.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:26:21.911 [DEBUG] [Thread-72832] [transport.py] [_log()] userauth is OK
2025-12-12T16:26:21.911 [DEBUG] [Thread-72832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:26:21.911 [DEBUG] [Thread-72832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:26:21.912 [DEBUG] [Thread-72832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:26:21.912 [DEBUG] [Thread-72832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:26:21.947 [INFO] [Thread-72832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:26:21.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:26:22.560 [DEBUG] [Thread-72832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:26:22.561 [DEBUG] [Thread-72832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:26:22.561 [DEBUG] [Thread-72832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:26:22.602 [DEBUG] [Thread-72832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:26:22.602 [DEBUG] [Thread-72832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:26:22.605 [DEBUG] [Thread-72832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:26:22.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:26:22.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:26:22.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:26:22.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:26:22.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:26:22.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:26:22.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:26:22.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:26:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:26:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.601135 -999.00  +19.50  43.32     33   +2.90 1 1 2 1 1   888    0 16.22 5.71 ----- 43.1 43.3 302.8 55.8 22.7 -25.6 22.7 -25.4 23.3 -23.4 23.7 -23.5
2025-12-12T16:26:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:26:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:26:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.601135
2025-12-12T16:26:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:26:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:26:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:26:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:26:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:26:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:26:02', tmtdew=19.44, humidity=27.39, cloud=0.0, wind=42.87, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:25:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:26:22.630 [DEBUG] [Thread-72832] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:26:22.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:26:22.728 [DEBUG] [Thread-72835] [transport.py] [_log()] starting thread (client mode): 0xf81f06a0
2025-12-12T16:26:22.728 [DEBUG] [Thread-72835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:26:22.743 [DEBUG] [Thread-72835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:26:22.743 [INFO] [Thread-72835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] client lang: <none>
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] server lang: <none>
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] kex follows: False
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:26:22.750 [DEBUG] [Thread-72835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:26:22.751 [DEBUG] [Thread-72835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:26:22.751 [DEBUG] [Thread-72835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:26:22.751 [DEBUG] [Thread-72835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:26:22.751 [DEBUG] [Thread-72835] [transport.py] [_log()] Compression: none
2025-12-12T16:26:22.751 [DEBUG] [Thread-72835] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:26:22.806 [DEBUG] [Thread-72835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:26:22.806 [DEBUG] [Thread-72835] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:26:22.807 [DEBUG] [Thread-72835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:26:22.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:26:22.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:26:22.863 [DEBUG] [Thread-72835] [transport.py] [_log()] userauth is OK
2025-12-12T16:26:22.863 [DEBUG] [Thread-72835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:26:22.863 [DEBUG] [Thread-72835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:26:22.863 [DEBUG] [Thread-72835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:26:22.863 [DEBUG] [Thread-72835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:26:22.888 [INFO] [Thread-72835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:26:22.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:26:22.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:26:23.744 [DEBUG] [Thread-72835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:26:23.744 [DEBUG] [Thread-72835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:26:23.792 [DEBUG] [Thread-72835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:26:23.792 [DEBUG] [Thread-72835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:26:23.801 [DEBUG] [Thread-72835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:26:23.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:26:23.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:26:23.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:26:23.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:26:23.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:26:23.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:26:23.835 [DEBUG] [Thread-72835] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:26:26.081 [DEBUG] [Thread-72837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:41.124 [DEBUG] [Thread-72838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:53.780 [DEBUG] [Thread-72839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:53.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:26:53.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:26:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:26:54.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 26, 35), 19.07, 27.94, 0.0, 38.25, 19.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:26:54.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:26:35
2025-12-12T16:26:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:26:54.822 [DEBUG] [Thread-72840] [transport.py] [_log()] starting thread (client mode): 0xf575c760
2025-12-12T16:26:54.823 [DEBUG] [Thread-72840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:26:54.843 [DEBUG] [Thread-72840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:26:54.843 [INFO] [Thread-72840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:26:54.846 [DEBUG] [Thread-72840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:26:54.846 [DEBUG] [Thread-72840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] client lang: <none>
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] server lang: <none>
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] kex follows: False
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:26:54.847 [DEBUG] [Thread-72840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:26:54.848 [DEBUG] [Thread-72840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:26:54.848 [DEBUG] [Thread-72840] [transport.py] [_log()] Compression: none
2025-12-12T16:26:54.848 [DEBUG] [Thread-72840] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:26:54.866 [DEBUG] [Thread-72840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:26:54.867 [DEBUG] [Thread-72840] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:26:54.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:26:54.867 [DEBUG] [Thread-72840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:26:54.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:26:54.870 [DEBUG] [Thread-72840] [transport.py] [_log()] userauth is OK
2025-12-12T16:26:54.870 [DEBUG] [Thread-72840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:26:54.870 [DEBUG] [Thread-72840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:26:54.870 [DEBUG] [Thread-72840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:26:54.870 [DEBUG] [Thread-72840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:26:54.894 [INFO] [Thread-72840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:26:54.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:26:55.520 [DEBUG] [Thread-72840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:26:55.520 [DEBUG] [Thread-72840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:26:55.520 [DEBUG] [Thread-72840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:26:55.561 [DEBUG] [Thread-72840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:26:55.561 [DEBUG] [Thread-72840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:26:55.564 [DEBUG] [Thread-72840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:26:55.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:26:55.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:26:55.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:26:55.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:26:55.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:26:55.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:26:55.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:26:55.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:26:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:26:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.601493 -999.00  +19.10  51.15     33   +2.60 1 1 2 1 1   888    0 16.80 12.08 ----- 45.6 51.1 310.2 56.2 22.7 -25.5 22.6 -26.3 23.3 -23.6 23.7 -24.1
2025-12-12T16:26:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:26:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:26:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.601493
2025-12-12T16:26:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:26:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:26:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:26:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:26:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:26:55.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:26:35', tmtdew=19.07, humidity=27.94, cloud=0.0, wind=38.25, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:26:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:26:55.585 [DEBUG] [Thread-72840] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:26:55.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:26:55.682 [DEBUG] [Thread-72843] [transport.py] [_log()] starting thread (client mode): 0xf57bfb80
2025-12-12T16:26:55.682 [DEBUG] [Thread-72843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:26:55.696 [DEBUG] [Thread-72843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:26:55.696 [INFO] [Thread-72843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:26:55.704 [DEBUG] [Thread-72843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] client lang: <none>
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] server lang: <none>
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] kex follows: False
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] Compression: none
2025-12-12T16:26:55.705 [DEBUG] [Thread-72843] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:26:55.762 [DEBUG] [Thread-72843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:26:55.762 [DEBUG] [Thread-72843] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:26:55.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:26:55.763 [DEBUG] [Thread-72843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:26:55.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:26:55.818 [DEBUG] [Thread-72843] [transport.py] [_log()] userauth is OK
2025-12-12T16:26:55.819 [DEBUG] [Thread-72843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:26:55.819 [DEBUG] [Thread-72843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:26:55.819 [DEBUG] [Thread-72843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:26:55.819 [DEBUG] [Thread-72843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:26:55.837 [INFO] [Thread-72843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:26:55.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:26:55.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:26:56.156 [DEBUG] [Thread-72845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:26:56.636 [DEBUG] [Thread-72843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:26:56.637 [DEBUG] [Thread-72843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:26:56.687 [DEBUG] [Thread-72843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:26:56.687 [DEBUG] [Thread-72843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:26:56.698 [DEBUG] [Thread-72843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:26:56.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:26:56.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:26:56.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:26:56.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:26:56.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:26:56.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:26:56.741 [DEBUG] [Thread-72843] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:27:09.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:09.462 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:11.211 [DEBUG] [Thread-72846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:26.238 [DEBUG] [Thread-72847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:26.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:27:26.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:27:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:27:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 27, 7), 19.3, 27.5, 0.0, 42.43, 19.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:27:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:27:07
2025-12-12T16:27:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:27:27.726 [DEBUG] [Thread-72848] [transport.py] [_log()] starting thread (client mode): 0xf81f3940
2025-12-12T16:27:27.726 [DEBUG] [Thread-72848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:27:27.748 [DEBUG] [Thread-72848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:27:27.748 [INFO] [Thread-72848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] client lang: <none>
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] server lang: <none>
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] kex follows: False
2025-12-12T16:27:27.752 [DEBUG] [Thread-72848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:27:27.753 [DEBUG] [Thread-72848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:27:27.753 [DEBUG] [Thread-72848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:27:27.753 [DEBUG] [Thread-72848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:27:27.753 [DEBUG] [Thread-72848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:27:27.753 [DEBUG] [Thread-72848] [transport.py] [_log()] Compression: none
2025-12-12T16:27:27.753 [DEBUG] [Thread-72848] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:27:27.771 [DEBUG] [Thread-72848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:27:27.771 [DEBUG] [Thread-72848] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:27:27.772 [DEBUG] [Thread-72848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:27:27.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:27:27.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:27:27.774 [DEBUG] [Thread-72848] [transport.py] [_log()] userauth is OK
2025-12-12T16:27:27.774 [DEBUG] [Thread-72848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:27:27.774 [DEBUG] [Thread-72848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:27:27.774 [DEBUG] [Thread-72848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:27:27.774 [DEBUG] [Thread-72848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:27:27.791 [INFO] [Thread-72848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:27:27.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:27:28.463 [DEBUG] [Thread-72848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:27:28.463 [DEBUG] [Thread-72848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:27:28.463 [DEBUG] [Thread-72848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:27:28.504 [DEBUG] [Thread-72848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:27:28.504 [DEBUG] [Thread-72848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:27:28.507 [DEBUG] [Thread-72848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:27:28.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:27:28.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:27:28.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:27:28.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:27:28.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:27:28.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:27:28.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:27:28.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:27:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:27:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.601829 -999.00  +19.10  38.83     33   +2.80 1 1 2 1 1   888    0 16.63 13.98 ----- 43.1 38.8 310.0 48.2 22.6 -26.3 22.6 -26.1 23.2 -24.4 23.6 -24.9
2025-12-12T16:27:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:27:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:27:28.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.601829
2025-12-12T16:27:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:27:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:27:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:27:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:27:28.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:27:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:27:07', tmtdew=19.3, humidity=27.5, cloud=0.0, wind=42.43, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:26:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:27:28.532 [DEBUG] [Thread-72848] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:27:28.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:27:28.626 [DEBUG] [Thread-72851] [transport.py] [_log()] starting thread (client mode): 0xf57be3e0
2025-12-12T16:27:28.627 [DEBUG] [Thread-72851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:27:28.641 [DEBUG] [Thread-72851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:27:28.641 [INFO] [Thread-72851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:27:28.649 [DEBUG] [Thread-72851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] client lang: <none>
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] server lang: <none>
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] kex follows: False
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] Compression: none
2025-12-12T16:27:28.650 [DEBUG] [Thread-72851] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:27:28.706 [DEBUG] [Thread-72851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:27:28.706 [DEBUG] [Thread-72851] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:27:28.707 [DEBUG] [Thread-72851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:27:28.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:27:28.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:27:28.762 [DEBUG] [Thread-72851] [transport.py] [_log()] userauth is OK
2025-12-12T16:27:28.762 [DEBUG] [Thread-72851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:27:28.762 [DEBUG] [Thread-72851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:27:28.762 [DEBUG] [Thread-72851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:27:28.762 [DEBUG] [Thread-72851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:27:28.785 [INFO] [Thread-72851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:27:28.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:27:28.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:27:29.611 [DEBUG] [Thread-72851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:27:29.611 [DEBUG] [Thread-72851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:27:29.659 [DEBUG] [Thread-72851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:27:29.659 [DEBUG] [Thread-72851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:27:29.668 [DEBUG] [Thread-72851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:27:29.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:27:29.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:27:29.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:27:29.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:27:29.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:27:29.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:27:29.703 [DEBUG] [Thread-72851] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:27:41.268 [DEBUG] [Thread-72853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:53.854 [DEBUG] [Thread-72854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:56.313 [DEBUG] [Thread-72855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:27:59.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:27:59.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:27:59.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:28:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 27, 39), 18.99, 27.75, 0.0, 40.32, 19.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:28:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:27:39
2025-12-12T16:28:00.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:28:00.670 [DEBUG] [Thread-72856] [transport.py] [_log()] starting thread (client mode): 0xf5740880
2025-12-12T16:28:00.671 [DEBUG] [Thread-72856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:28:00.690 [DEBUG] [Thread-72856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:28:00.690 [INFO] [Thread-72856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:28:00.693 [DEBUG] [Thread-72856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:28:00.693 [DEBUG] [Thread-72856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:28:00.693 [DEBUG] [Thread-72856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:28:00.693 [DEBUG] [Thread-72856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:00.693 [DEBUG] [Thread-72856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:00.693 [DEBUG] [Thread-72856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] client lang: <none>
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] server lang: <none>
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] kex follows: False
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] Compression: none
2025-12-12T16:28:00.694 [DEBUG] [Thread-72856] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:28:00.711 [DEBUG] [Thread-72856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:28:00.712 [DEBUG] [Thread-72856] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:28:00.712 [DEBUG] [Thread-72856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:28:00.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:28:00.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:28:00.714 [DEBUG] [Thread-72856] [transport.py] [_log()] userauth is OK
2025-12-12T16:28:00.714 [DEBUG] [Thread-72856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:28:00.714 [DEBUG] [Thread-72856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:28:00.714 [DEBUG] [Thread-72856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:28:00.714 [DEBUG] [Thread-72856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:28:00.732 [INFO] [Thread-72856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:28:00.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:28:01.357 [DEBUG] [Thread-72856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:28:01.357 [DEBUG] [Thread-72856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:28:01.357 [DEBUG] [Thread-72856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:28:01.398 [DEBUG] [Thread-72856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:28:01.398 [DEBUG] [Thread-72856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:28:01.401 [DEBUG] [Thread-72856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:28:01.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:28:01.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:28:01.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:28:01.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:28:01.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:28:01.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:28:01.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:28:01.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:28:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:28:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.602176 -999.00  +19.10  43.15     33   +2.70 1 1 2 1 1   888    0 16.51 15.08 ----- 41.7 43.1 313.4 46.6 22.6 -25.9 22.6 -25.4 23.4 -22.6 23.7 -23.6
2025-12-12T16:28:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:28:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:28:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.602176
2025-12-12T16:28:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:28:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:28:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:28:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:28:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:28:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:27:39', tmtdew=18.99, humidity=27.75, cloud=0.0, wind=40.32, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:27:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:28:01.426 [DEBUG] [Thread-72856] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:28:01.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:28:01.523 [DEBUG] [Thread-72859] [transport.py] [_log()] starting thread (client mode): 0xf5741810
2025-12-12T16:28:01.523 [DEBUG] [Thread-72859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:28:01.537 [DEBUG] [Thread-72859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:28:01.538 [INFO] [Thread-72859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:28:01.545 [DEBUG] [Thread-72859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:28:01.545 [DEBUG] [Thread-72859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:28:01.545 [DEBUG] [Thread-72859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] client lang: <none>
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] server lang: <none>
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] kex follows: False
2025-12-12T16:28:01.546 [DEBUG] [Thread-72859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:28:01.547 [DEBUG] [Thread-72859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:28:01.547 [DEBUG] [Thread-72859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:28:01.547 [DEBUG] [Thread-72859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:28:01.547 [DEBUG] [Thread-72859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:28:01.547 [DEBUG] [Thread-72859] [transport.py] [_log()] Compression: none
2025-12-12T16:28:01.547 [DEBUG] [Thread-72859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:28:01.602 [DEBUG] [Thread-72859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:28:01.603 [DEBUG] [Thread-72859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:28:01.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:28:01.604 [DEBUG] [Thread-72859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:28:01.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:28:01.658 [DEBUG] [Thread-72859] [transport.py] [_log()] userauth is OK
2025-12-12T16:28:01.658 [DEBUG] [Thread-72859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:28:01.658 [DEBUG] [Thread-72859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:28:01.658 [DEBUG] [Thread-72859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:28:01.658 [DEBUG] [Thread-72859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:28:01.680 [INFO] [Thread-72859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:28:01.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:28:01.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:28:02.539 [DEBUG] [Thread-72859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:28:02.539 [DEBUG] [Thread-72859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:28:02.588 [DEBUG] [Thread-72859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:28:02.588 [DEBUG] [Thread-72859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:28:02.597 [DEBUG] [Thread-72859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:28:02.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:28:02.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:28:02.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:28:02.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:28:02.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:28:02.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:28:02.631 [DEBUG] [Thread-72859] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:28:09.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:28:09.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:28:11.343 [DEBUG] [Thread-72861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:28:26.387 [DEBUG] [Thread-72862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:28:32.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:28:32.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:28:32.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:28:33.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 28, 11), 18.85, 27.99, 0.0, 43.44, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:28:33.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:28:11
2025-12-12T16:28:33.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:28:33.640 [DEBUG] [Thread-72863] [transport.py] [_log()] starting thread (client mode): 0xf575e410
2025-12-12T16:28:33.640 [DEBUG] [Thread-72863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:28:33.660 [DEBUG] [Thread-72863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:28:33.660 [INFO] [Thread-72863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:28:33.663 [DEBUG] [Thread-72863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:28:33.663 [DEBUG] [Thread-72863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:28:33.663 [DEBUG] [Thread-72863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:28:33.663 [DEBUG] [Thread-72863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] client lang: <none>
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] server lang: <none>
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] kex follows: False
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:28:33.664 [DEBUG] [Thread-72863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:28:33.665 [DEBUG] [Thread-72863] [transport.py] [_log()] Compression: none
2025-12-12T16:28:33.665 [DEBUG] [Thread-72863] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:28:33.682 [DEBUG] [Thread-72863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:28:33.683 [DEBUG] [Thread-72863] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:28:33.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:28:33.683 [DEBUG] [Thread-72863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:28:33.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:28:33.724 [DEBUG] [Thread-72863] [transport.py] [_log()] userauth is OK
2025-12-12T16:28:33.725 [DEBUG] [Thread-72863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:28:33.725 [DEBUG] [Thread-72863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:28:33.725 [DEBUG] [Thread-72863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:28:33.725 [DEBUG] [Thread-72863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:28:33.744 [INFO] [Thread-72863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:28:33.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:28:34.394 [DEBUG] [Thread-72863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:28:34.394 [DEBUG] [Thread-72863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:28:34.394 [DEBUG] [Thread-72863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:28:34.435 [DEBUG] [Thread-72863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:28:34.435 [DEBUG] [Thread-72863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:28:34.438 [DEBUG] [Thread-72863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:28:34.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:28:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:28:34.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:28:34.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:28:34.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:28:34.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:28:34.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:28:34.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.602523 -999.00  +18.90  38.76     34   +2.70 1 1 2 1 1   888    0 16.99 15.55 ----- 36.0 38.8 312.2 48.3 22.6 -26.7 22.5 -25.6 23.2 -23.5 23.7 -23.9
2025-12-12T16:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.602523
2025-12-12T16:28:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:28:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:28:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:28:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:28:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:28:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:28:11', tmtdew=18.85, humidity=27.99, cloud=0.0, wind=43.44, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:27:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:28:34.465 [DEBUG] [Thread-72863] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:28:34.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:28:34.562 [DEBUG] [Thread-72866] [transport.py] [_log()] starting thread (client mode): 0xf575ead0
2025-12-12T16:28:34.562 [DEBUG] [Thread-72866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:28:34.577 [DEBUG] [Thread-72866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:28:34.577 [INFO] [Thread-72866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:28:34.585 [DEBUG] [Thread-72866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:28:34.585 [DEBUG] [Thread-72866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:28:34.585 [DEBUG] [Thread-72866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:28:34.585 [DEBUG] [Thread-72866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:34.585 [DEBUG] [Thread-72866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] client lang: <none>
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] server lang: <none>
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] kex follows: False
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] Compression: none
2025-12-12T16:28:34.586 [DEBUG] [Thread-72866] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:28:34.640 [DEBUG] [Thread-72866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:28:34.640 [DEBUG] [Thread-72866] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:28:34.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:28:34.640 [DEBUG] [Thread-72866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:28:34.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:28:34.697 [DEBUG] [Thread-72866] [transport.py] [_log()] userauth is OK
2025-12-12T16:28:34.697 [DEBUG] [Thread-72866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:28:34.697 [DEBUG] [Thread-72866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:28:34.698 [DEBUG] [Thread-72866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:28:34.698 [DEBUG] [Thread-72866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:28:34.717 [INFO] [Thread-72866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:28:34.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:28:34.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:28:35.560 [DEBUG] [Thread-72866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:28:35.560 [DEBUG] [Thread-72866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:28:35.609 [DEBUG] [Thread-72866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:28:35.609 [DEBUG] [Thread-72866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:28:35.618 [DEBUG] [Thread-72866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:28:35.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:28:35.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:28:35.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:28:35.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:28:35.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:28:35.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:28:35.653 [DEBUG] [Thread-72866] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:28:41.413 [DEBUG] [Thread-72868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:28:53.908 [DEBUG] [Thread-72869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:28:56.456 [DEBUG] [Thread-72870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:05.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:29:05.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:29:05.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:29:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 28, 43), 19.23, 27.61, 0.0, 45.98, 19.32, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:29:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:28:43
2025-12-12T16:29:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:29:06.670 [DEBUG] [Thread-72871] [transport.py] [_log()] starting thread (client mode): 0xf570c820
2025-12-12T16:29:06.670 [DEBUG] [Thread-72871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:29:06.690 [DEBUG] [Thread-72871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:29:06.690 [INFO] [Thread-72871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:29:06.691 [DEBUG] [Thread-72871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:29:06.691 [DEBUG] [Thread-72871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:29:06.691 [DEBUG] [Thread-72871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:29:06.691 [DEBUG] [Thread-72871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:06.691 [DEBUG] [Thread-72871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] client lang: <none>
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] server lang: <none>
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] kex follows: False
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] Compression: none
2025-12-12T16:29:06.692 [DEBUG] [Thread-72871] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:29:06.708 [DEBUG] [Thread-72871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:29:06.708 [DEBUG] [Thread-72871] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:29:06.708 [DEBUG] [Thread-72871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:29:06.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:29:06.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:29:06.709 [DEBUG] [Thread-72871] [transport.py] [_log()] userauth is OK
2025-12-12T16:29:06.709 [DEBUG] [Thread-72871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:29:06.709 [DEBUG] [Thread-72871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:29:06.709 [DEBUG] [Thread-72871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:29:06.709 [DEBUG] [Thread-72871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:29:06.720 [INFO] [Thread-72871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:29:06.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:29:07.351 [DEBUG] [Thread-72871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:29:07.351 [DEBUG] [Thread-72871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:29:07.351 [DEBUG] [Thread-72871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:29:07.392 [DEBUG] [Thread-72871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:29:07.392 [DEBUG] [Thread-72871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:29:07.395 [DEBUG] [Thread-72871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:29:07.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:29:07.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:29:07.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:29:07.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:29:07.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:29:07.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:29:07.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:29:07.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.603218 -999.00  +19.30  40.49     32   +2.40 1 1 2 1 1   888    0 17.01 18.61 ----- 43.0 40.5 322.0 52.5 22.7 -25.3 22.6 -25.3 23.4 -22.5 23.8 -23.6
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.603218
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:29:07.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:28:43', tmtdew=19.23, humidity=27.61, cloud=0.0, wind=45.98, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:28:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:29:07.416 [DEBUG] [Thread-72871] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:29:07.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:29:07.502 [DEBUG] [Thread-72874] [transport.py] [_log()] starting thread (client mode): 0xf57bf5e0
2025-12-12T16:29:07.502 [DEBUG] [Thread-72874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:29:07.517 [DEBUG] [Thread-72874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:29:07.517 [INFO] [Thread-72874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:07.524 [DEBUG] [Thread-72874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] client lang: <none>
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] server lang: <none>
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] kex follows: False
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] Compression: none
2025-12-12T16:29:07.525 [DEBUG] [Thread-72874] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:29:07.580 [DEBUG] [Thread-72874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:29:07.580 [DEBUG] [Thread-72874] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:29:07.580 [DEBUG] [Thread-72874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:29:07.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:29:07.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:29:07.641 [DEBUG] [Thread-72874] [transport.py] [_log()] userauth is OK
2025-12-12T16:29:07.641 [DEBUG] [Thread-72874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:29:07.641 [DEBUG] [Thread-72874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:29:07.641 [DEBUG] [Thread-72874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:29:07.641 [DEBUG] [Thread-72874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:29:07.654 [INFO] [Thread-72874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:29:07.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:29:07.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:29:08.501 [DEBUG] [Thread-72874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:29:08.501 [DEBUG] [Thread-72874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:29:08.550 [DEBUG] [Thread-72874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:29:08.550 [DEBUG] [Thread-72874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:29:08.563 [DEBUG] [Thread-72874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:29:08.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:29:08.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:29:08.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:29:08.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:29:08.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:29:08.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:29:08.600 [DEBUG] [Thread-72874] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:29:09.741 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:09.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:11.483 [DEBUG] [Thread-72876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:26.538 [DEBUG] [Thread-72877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:38.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:29:38.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:29:38.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:29:39.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 29, 15), 19.33, 27.46, 0.0, 43.07, 19.47, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:29:39.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:29:15
2025-12-12T16:29:39.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:29:39.579 [DEBUG] [Thread-72878] [transport.py] [_log()] starting thread (client mode): 0xfabc4fa0
2025-12-12T16:29:39.579 [DEBUG] [Thread-72878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:29:39.600 [DEBUG] [Thread-72878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:29:39.600 [INFO] [Thread-72878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:29:39.603 [DEBUG] [Thread-72878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] client lang: <none>
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] server lang: <none>
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] kex follows: False
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] Compression: none
2025-12-12T16:29:39.604 [DEBUG] [Thread-72878] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:29:39.621 [DEBUG] [Thread-72878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:29:39.621 [DEBUG] [Thread-72878] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:29:39.622 [DEBUG] [Thread-72878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:29:39.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:29:39.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:29:39.624 [DEBUG] [Thread-72878] [transport.py] [_log()] userauth is OK
2025-12-12T16:29:39.624 [DEBUG] [Thread-72878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:29:39.624 [DEBUG] [Thread-72878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:29:39.624 [DEBUG] [Thread-72878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:29:39.624 [DEBUG] [Thread-72878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:29:39.656 [INFO] [Thread-72878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:29:39.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:29:40.286 [DEBUG] [Thread-72878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:29:40.286 [DEBUG] [Thread-72878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:29:40.287 [DEBUG] [Thread-72878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:29:40.327 [DEBUG] [Thread-72878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:29:40.327 [DEBUG] [Thread-72878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:29:40.330 [DEBUG] [Thread-72878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:29:40.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:29:40.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:29:40.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:29:40.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:29:40.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:29:40.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:29:40.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:29:40.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:29:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:29:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.603565 -999.00  +19.70  40.22     32   +2.70 1 1 2 1 1   888    0 16.95 20.34 ----- 36.4 40.2 304.2 48.6 22.8 -24.7 22.8 -24.4 23.6 -22.9 23.8 -22.9
2025-12-12T16:29:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:29:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:29:40.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.603565
2025-12-12T16:29:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:29:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:29:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:29:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:29:40.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:29:40.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:29:15', tmtdew=19.33, humidity=27.46, cloud=0.0, wind=43.07, temperature=19.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:29:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:29:40.356 [DEBUG] [Thread-72878] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:29:40.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:29:40.453 [DEBUG] [Thread-72881] [transport.py] [_log()] starting thread (client mode): 0xfabc6b00
2025-12-12T16:29:40.453 [DEBUG] [Thread-72881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:29:40.467 [DEBUG] [Thread-72881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:29:40.467 [INFO] [Thread-72881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] client lang: <none>
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] server lang: <none>
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] kex follows: False
2025-12-12T16:29:40.475 [DEBUG] [Thread-72881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:29:40.476 [DEBUG] [Thread-72881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:29:40.476 [DEBUG] [Thread-72881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:29:40.476 [DEBUG] [Thread-72881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:29:40.476 [DEBUG] [Thread-72881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:29:40.476 [DEBUG] [Thread-72881] [transport.py] [_log()] Compression: none
2025-12-12T16:29:40.476 [DEBUG] [Thread-72881] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:29:40.531 [DEBUG] [Thread-72881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:29:40.531 [DEBUG] [Thread-72881] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:29:40.531 [DEBUG] [Thread-72881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:29:40.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:29:40.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:29:40.588 [DEBUG] [Thread-72881] [transport.py] [_log()] userauth is OK
2025-12-12T16:29:40.588 [DEBUG] [Thread-72881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:29:40.589 [DEBUG] [Thread-72881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:29:40.589 [DEBUG] [Thread-72881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:29:40.589 [DEBUG] [Thread-72881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:29:40.607 [INFO] [Thread-72881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:29:40.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:29:40.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:29:41.453 [DEBUG] [Thread-72881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:29:41.453 [DEBUG] [Thread-72881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:29:41.501 [DEBUG] [Thread-72881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:29:41.501 [DEBUG] [Thread-72881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:29:41.510 [DEBUG] [Thread-72881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:29:41.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:29:41.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:29:41.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:29:41.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:29:41.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:29:41.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:29:41.549 [DEBUG] [Thread-72881] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:29:41.571 [DEBUG] [Thread-72883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:53.962 [DEBUG] [Thread-72884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:29:56.613 [DEBUG] [Thread-72885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:09.884 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:09.885 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:30:11.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:30:11.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:30:11.643 [DEBUG] [Thread-72886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 29, 47), 20.49, 25.53, 0.0, 46.19, 20.38, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:30:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:29:47
2025-12-12T16:30:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:30:12.525 [DEBUG] [Thread-72887] [transport.py] [_log()] starting thread (client mode): 0xfabc71f0
2025-12-12T16:30:12.525 [DEBUG] [Thread-72887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:30:12.544 [DEBUG] [Thread-72887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:30:12.545 [INFO] [Thread-72887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] client lang: <none>
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] server lang: <none>
2025-12-12T16:30:12.548 [DEBUG] [Thread-72887] [transport.py] [_log()] kex follows: False
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] Compression: none
2025-12-12T16:30:12.549 [DEBUG] [Thread-72887] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:30:12.566 [DEBUG] [Thread-72887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:30:12.567 [DEBUG] [Thread-72887] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:30:12.567 [DEBUG] [Thread-72887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:30:12.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:30:12.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:30:12.569 [DEBUG] [Thread-72887] [transport.py] [_log()] userauth is OK
2025-12-12T16:30:12.569 [DEBUG] [Thread-72887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:30:12.569 [DEBUG] [Thread-72887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:30:12.570 [DEBUG] [Thread-72887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:30:12.570 [DEBUG] [Thread-72887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:30:12.587 [INFO] [Thread-72887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:30:12.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:30:13.198 [DEBUG] [Thread-72887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:30:13.198 [DEBUG] [Thread-72887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:30:13.199 [DEBUG] [Thread-72887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:30:13.239 [DEBUG] [Thread-72887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:30:13.239 [DEBUG] [Thread-72887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:30:13.241 [DEBUG] [Thread-72887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:30:13.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:30:13.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:30:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:30:13.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:30:13.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:30:13.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:30:13.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:30:13.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:30:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:30:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.603912 -999.00  +20.20  28.16     31   +2.70 1 1 1 1 1   888    0 17.03 23.31 ----- 30.9 28.2 306.1 47.0 22.9 -25.0 23.0 -24.2 23.6 -22.7 23.9 -22.9
2025-12-12T16:30:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:30:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:30:13.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.603912
2025-12-12T16:30:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:30:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:30:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:30:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:30:13.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:30:13.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:29:47', tmtdew=20.49, humidity=25.53, cloud=0.0, wind=46.19, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:29:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:30:13.265 [DEBUG] [Thread-72887] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:30:13.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:30:13.369 [DEBUG] [Thread-72890] [transport.py] [_log()] starting thread (client mode): 0xf574cc70
2025-12-12T16:30:13.369 [DEBUG] [Thread-72890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:30:13.383 [DEBUG] [Thread-72890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:30:13.383 [INFO] [Thread-72890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] client lang: <none>
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] server lang: <none>
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] kex follows: False
2025-12-12T16:30:13.391 [DEBUG] [Thread-72890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:30:13.392 [DEBUG] [Thread-72890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:30:13.392 [DEBUG] [Thread-72890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:30:13.392 [DEBUG] [Thread-72890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:30:13.392 [DEBUG] [Thread-72890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:30:13.392 [DEBUG] [Thread-72890] [transport.py] [_log()] Compression: none
2025-12-12T16:30:13.392 [DEBUG] [Thread-72890] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:30:13.447 [DEBUG] [Thread-72890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:30:13.448 [DEBUG] [Thread-72890] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:30:13.448 [DEBUG] [Thread-72890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:30:13.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:30:13.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:30:13.504 [DEBUG] [Thread-72890] [transport.py] [_log()] userauth is OK
2025-12-12T16:30:13.504 [DEBUG] [Thread-72890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:30:13.504 [DEBUG] [Thread-72890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:30:13.504 [DEBUG] [Thread-72890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:30:13.504 [DEBUG] [Thread-72890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:30:13.523 [INFO] [Thread-72890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:30:13.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:30:13.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:30:14.354 [DEBUG] [Thread-72890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:30:14.355 [DEBUG] [Thread-72890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:30:14.403 [DEBUG] [Thread-72890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:30:14.403 [DEBUG] [Thread-72890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:30:14.412 [DEBUG] [Thread-72890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:30:14.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:30:14.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:30:14.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:30:14.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:30:14.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:30:14.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:30:14.446 [DEBUG] [Thread-72890] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:30:26.666 [DEBUG] [Thread-72892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:41.701 [DEBUG] [Thread-72893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:30:44.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:30:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:30:45.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 30, 19), 20.71, 25.17, 0.0, 43.63, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:30:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:30:19
2025-12-12T16:30:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:30:45.407 [DEBUG] [Thread-72894] [transport.py] [_log()] starting thread (client mode): 0xf574d7b0
2025-12-12T16:30:45.407 [DEBUG] [Thread-72894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:30:45.427 [DEBUG] [Thread-72894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:30:45.427 [INFO] [Thread-72894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] client lang: <none>
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] server lang: <none>
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] kex follows: False
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:30:45.430 [DEBUG] [Thread-72894] [transport.py] [_log()] Compression: none
2025-12-12T16:30:45.431 [DEBUG] [Thread-72894] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:30:45.446 [DEBUG] [Thread-72894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:30:45.447 [DEBUG] [Thread-72894] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:30:45.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:30:45.448 [DEBUG] [Thread-72894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:30:45.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:30:45.450 [DEBUG] [Thread-72894] [transport.py] [_log()] userauth is OK
2025-12-12T16:30:45.450 [DEBUG] [Thread-72894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:30:45.450 [DEBUG] [Thread-72894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:30:45.450 [DEBUG] [Thread-72894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:30:45.451 [DEBUG] [Thread-72894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:30:45.469 [INFO] [Thread-72894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:30:45.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:30:46.070 [DEBUG] [Thread-72894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:30:46.070 [DEBUG] [Thread-72894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:30:46.071 [DEBUG] [Thread-72894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:30:46.111 [DEBUG] [Thread-72894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:30:46.111 [DEBUG] [Thread-72894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:30:46.114 [DEBUG] [Thread-72894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:30:46.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:30:46.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:30:46.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:30:46.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:30:46.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:30:46.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:30:46.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:30:46.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:30:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:30:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.604271 -999.00  +20.20  48.15     30   +2.40 1 1 2 1 1   888    0 17.37 28.91 ----- 47.4 48.1 303.2 61.8 23.1 -25.6 22.9 -25.7 23.7 -28.6 24.2 -22.8
2025-12-12T16:30:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:30:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:30:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.604271
2025-12-12T16:30:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:30:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:30:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:30:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:30:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:30:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:30:19', tmtdew=20.71, humidity=25.17, cloud=0.0, wind=43.63, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:30:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:30:46.137 [DEBUG] [Thread-72894] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:30:46.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:30:46.235 [DEBUG] [Thread-72897] [transport.py] [_log()] starting thread (client mode): 0xf81c0c10
2025-12-12T16:30:46.235 [DEBUG] [Thread-72897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:30:46.250 [DEBUG] [Thread-72897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:30:46.250 [INFO] [Thread-72897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:30:46.257 [DEBUG] [Thread-72897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] client lang: <none>
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] server lang: <none>
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] kex follows: False
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] Compression: none
2025-12-12T16:30:46.258 [DEBUG] [Thread-72897] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:30:46.316 [DEBUG] [Thread-72897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:30:46.316 [DEBUG] [Thread-72897] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:30:46.317 [DEBUG] [Thread-72897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:30:46.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:30:46.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:30:46.372 [DEBUG] [Thread-72897] [transport.py] [_log()] userauth is OK
2025-12-12T16:30:46.372 [DEBUG] [Thread-72897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:30:46.372 [DEBUG] [Thread-72897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:30:46.372 [DEBUG] [Thread-72897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:30:46.372 [DEBUG] [Thread-72897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:30:46.391 [INFO] [Thread-72897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:30:46.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:30:46.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:30:47.283 [DEBUG] [Thread-72897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:30:47.283 [DEBUG] [Thread-72897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:30:47.330 [DEBUG] [Thread-72897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:30:47.330 [DEBUG] [Thread-72897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:30:47.339 [DEBUG] [Thread-72897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:30:47.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:30:47.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:30:47.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:30:47.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:30:47.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:30:47.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:30:47.373 [DEBUG] [Thread-72897] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:30:54.012 [DEBUG] [Thread-72899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:30:56.732 [DEBUG] [Thread-72900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:10.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:10.026 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:11.779 [DEBUG] [Thread-72901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:31:17.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:31:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:31:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 30, 51), 20.67, 25.1, 0.0, 48.63, 20.2, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:31:18.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:30:51
2025-12-12T16:31:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:31:18.352 [DEBUG] [Thread-72902] [transport.py] [_log()] starting thread (client mode): 0xf57bd690
2025-12-12T16:31:18.352 [DEBUG] [Thread-72902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:31:18.367 [DEBUG] [Thread-72902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:31:18.367 [INFO] [Thread-72902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:31:18.368 [DEBUG] [Thread-72902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:31:18.368 [DEBUG] [Thread-72902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] client lang: <none>
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] server lang: <none>
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] kex follows: False
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] Compression: none
2025-12-12T16:31:18.369 [DEBUG] [Thread-72902] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:31:18.377 [DEBUG] [Thread-72902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:31:18.377 [DEBUG] [Thread-72902] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:31:18.378 [DEBUG] [Thread-72902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:31:18.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:31:18.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:31:18.379 [DEBUG] [Thread-72902] [transport.py] [_log()] userauth is OK
2025-12-12T16:31:18.379 [DEBUG] [Thread-72902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:31:18.379 [DEBUG] [Thread-72902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:31:18.379 [DEBUG] [Thread-72902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:31:18.379 [DEBUG] [Thread-72902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:31:18.403 [INFO] [Thread-72902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:31:18.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:31:19.064 [DEBUG] [Thread-72902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:31:19.064 [DEBUG] [Thread-72902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:31:19.065 [DEBUG] [Thread-72902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:31:19.105 [DEBUG] [Thread-72902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:31:19.105 [DEBUG] [Thread-72902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:31:19.108 [DEBUG] [Thread-72902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:31:19.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:31:19.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:31:19.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:31:19.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:31:19.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:31:19.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:31:19.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:31:19.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:31:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:31:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.604607 -999.00  +19.70  48.29     31   +2.10 1 1 2 1 1   888    0 17.47 30.95 ----- 39.6 48.3 300.8 60.8 22.9 -26.6 22.8 -26.7 23.5 -26.0 24.0 -24.5
2025-12-12T16:31:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:31:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:31:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.604607
2025-12-12T16:31:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:31:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:31:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:31:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:31:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:31:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:30:51', tmtdew=20.67, humidity=25.1, cloud=0.0, wind=48.63, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:30:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:31:19.133 [DEBUG] [Thread-72902] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:31:19.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:31:19.229 [DEBUG] [Thread-72905] [transport.py] [_log()] starting thread (client mode): 0xf57beb00
2025-12-12T16:31:19.229 [DEBUG] [Thread-72905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:31:19.245 [DEBUG] [Thread-72905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:31:19.245 [INFO] [Thread-72905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:31:19.253 [DEBUG] [Thread-72905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] client lang: <none>
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] server lang: <none>
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] kex follows: False
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] Compression: none
2025-12-12T16:31:19.254 [DEBUG] [Thread-72905] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:31:19.311 [DEBUG] [Thread-72905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:31:19.311 [DEBUG] [Thread-72905] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:31:19.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:31:19.312 [DEBUG] [Thread-72905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:31:19.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:31:19.367 [DEBUG] [Thread-72905] [transport.py] [_log()] userauth is OK
2025-12-12T16:31:19.368 [DEBUG] [Thread-72905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:31:19.368 [DEBUG] [Thread-72905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:31:19.368 [DEBUG] [Thread-72905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:31:19.368 [DEBUG] [Thread-72905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:31:19.386 [INFO] [Thread-72905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:31:19.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:31:19.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:31:20.245 [DEBUG] [Thread-72905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:31:20.246 [DEBUG] [Thread-72905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:31:20.294 [DEBUG] [Thread-72905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:31:20.294 [DEBUG] [Thread-72905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:31:20.303 [DEBUG] [Thread-72905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:31:20.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:31:20.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')
2025-12-12T16:31:20.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:31:20.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:31:20.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:31:20.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:31:20.341 [DEBUG] [Thread-72905] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:31:26.809 [DEBUG] [Thread-72907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:41.847 [DEBUG] [Thread-72908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:31:50.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:31:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:31:51.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 31, 23), 20.74, 24.94, 0.0, 52.05, 20.07, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:31:51.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:31:23
2025-12-12T16:31:51.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:31:51.309 [DEBUG] [Thread-72909] [transport.py] [_log()] starting thread (client mode): 0xf5702b90
2025-12-12T16:31:51.309 [DEBUG] [Thread-72909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:31:51.328 [DEBUG] [Thread-72909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:31:51.328 [INFO] [Thread-72909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] client lang: <none>
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] server lang: <none>
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] kex follows: False
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:31:51.332 [DEBUG] [Thread-72909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:31:51.333 [DEBUG] [Thread-72909] [transport.py] [_log()] Compression: none
2025-12-12T16:31:51.333 [DEBUG] [Thread-72909] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:31:51.350 [DEBUG] [Thread-72909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:31:51.350 [DEBUG] [Thread-72909] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:31:51.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:31:51.351 [DEBUG] [Thread-72909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:31:51.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:31:51.353 [DEBUG] [Thread-72909] [transport.py] [_log()] userauth is OK
2025-12-12T16:31:51.354 [DEBUG] [Thread-72909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:31:51.354 [DEBUG] [Thread-72909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:31:51.354 [DEBUG] [Thread-72909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:31:51.354 [DEBUG] [Thread-72909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:31:51.372 [INFO] [Thread-72909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:31:51.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:31:51.996 [DEBUG] [Thread-72909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:31:51.996 [DEBUG] [Thread-72909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:31:51.996 [DEBUG] [Thread-72909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:31:52.037 [DEBUG] [Thread-72909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:31:52.037 [DEBUG] [Thread-72909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:31:52.040 [DEBUG] [Thread-72909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:31:52.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:31:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:31:52.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:31:52.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:31:52.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:31:52.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:31:52.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:31:52.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:31:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:31:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.604954 -999.00  +19.50  40.97     31   +2.10 1 1 2 1 1   888    0 17.66 34.31 ----- 44.0 41.0 303.4 50.6 22.9 -25.9 22.8 -26.7 23.5 -26.6 24.0 -23.6
2025-12-12T16:31:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:31:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:31:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.604954
2025-12-12T16:31:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:31:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:31:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:31:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:31:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:31:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:31:23', tmtdew=20.74, humidity=24.94, cloud=0.0, wind=52.05, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:31:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:31:52.065 [DEBUG] [Thread-72909] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:31:52.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:31:52.162 [DEBUG] [Thread-72912] [transport.py] [_log()] starting thread (client mode): 0xf5701420
2025-12-12T16:31:52.162 [DEBUG] [Thread-72912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:31:52.176 [DEBUG] [Thread-72912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:31:52.176 [INFO] [Thread-72912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:31:52.184 [DEBUG] [Thread-72912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:31:52.184 [DEBUG] [Thread-72912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:31:52.184 [DEBUG] [Thread-72912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] client lang: <none>
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] server lang: <none>
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] kex follows: False
2025-12-12T16:31:52.185 [DEBUG] [Thread-72912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:31:52.186 [DEBUG] [Thread-72912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:31:52.186 [DEBUG] [Thread-72912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:31:52.186 [DEBUG] [Thread-72912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:31:52.186 [DEBUG] [Thread-72912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:31:52.186 [DEBUG] [Thread-72912] [transport.py] [_log()] Compression: none
2025-12-12T16:31:52.186 [DEBUG] [Thread-72912] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:31:52.243 [DEBUG] [Thread-72912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:31:52.243 [DEBUG] [Thread-72912] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:31:52.244 [DEBUG] [Thread-72912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:31:52.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:31:52.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:31:52.299 [DEBUG] [Thread-72912] [transport.py] [_log()] userauth is OK
2025-12-12T16:31:52.299 [DEBUG] [Thread-72912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:31:52.299 [DEBUG] [Thread-72912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:31:52.300 [DEBUG] [Thread-72912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:31:52.300 [DEBUG] [Thread-72912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:31:52.318 [INFO] [Thread-72912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:31:52.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:31:52.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:31:53.215 [DEBUG] [Thread-72912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:31:53.216 [DEBUG] [Thread-72912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:31:53.265 [DEBUG] [Thread-72912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:31:53.265 [DEBUG] [Thread-72912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:31:53.274 [DEBUG] [Thread-72912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:31:53.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:31:53.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:31:53.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
2025-12-12T16:31:53.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:31:53.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:31:53.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:31:53.309 [DEBUG] [Thread-72912] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:31:54.061 [DEBUG] [Thread-72914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:31:56.873 [DEBUG] [Thread-72915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:10.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:10.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:11.909 [DEBUG] [Thread-72916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:23.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:32:23.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:32:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:32:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 31, 55), 20.07, 25.7, 0.0, 48.17, 19.48, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:32:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:31:55
2025-12-12T16:32:24.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:32:24.290 [DEBUG] [Thread-72917] [transport.py] [_log()] starting thread (client mode): 0xfabc6f20
2025-12-12T16:32:24.290 [DEBUG] [Thread-72917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:32:24.310 [DEBUG] [Thread-72917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:32:24.310 [INFO] [Thread-72917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] client lang: <none>
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] server lang: <none>
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] kex follows: False
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] Compression: none
2025-12-12T16:32:24.312 [DEBUG] [Thread-72917] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:32:24.329 [DEBUG] [Thread-72917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:32:24.329 [DEBUG] [Thread-72917] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:32:24.330 [DEBUG] [Thread-72917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:32:24.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:32:24.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:32:24.331 [DEBUG] [Thread-72917] [transport.py] [_log()] userauth is OK
2025-12-12T16:32:24.332 [DEBUG] [Thread-72917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:32:24.332 [DEBUG] [Thread-72917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:32:24.332 [DEBUG] [Thread-72917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:32:24.332 [DEBUG] [Thread-72917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:32:24.351 [INFO] [Thread-72917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:32:24.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:32:25.035 [DEBUG] [Thread-72917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:32:25.035 [DEBUG] [Thread-72917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:32:25.036 [DEBUG] [Thread-72917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:32:25.076 [DEBUG] [Thread-72917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:32:25.076 [DEBUG] [Thread-72917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:32:25.078 [DEBUG] [Thread-72917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:32:25.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:32:25.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:32:25.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:32:25.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:32:25.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:32:25.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:32:25.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:32:25.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:32:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:32:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.605301 -999.00  +19.10  47.80     32   +2.20 1 1 2 1 1   888    0 17.41 32.59 ----- 44.5 47.8 309.8 63.6 22.8 -28.2 22.8 -26.2 23.4 -23.0 23.9 -24.1
2025-12-12T16:32:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:32:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:32:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.605301
2025-12-12T16:32:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:32:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:32:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:32:25.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:32:25.104 [DEBUG] [Thread-72917] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:32:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:32:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:31:55', tmtdew=20.07, humidity=25.7, cloud=0.0, wind=48.17, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:31:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:32:25.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:32:25.207 [DEBUG] [Thread-72920] [transport.py] [_log()] starting thread (client mode): 0xf81e7490
2025-12-12T16:32:25.207 [DEBUG] [Thread-72920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:32:25.221 [DEBUG] [Thread-72920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:32:25.221 [INFO] [Thread-72920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:32:25.229 [DEBUG] [Thread-72920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:32:25.229 [DEBUG] [Thread-72920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:32:25.229 [DEBUG] [Thread-72920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:32:25.229 [DEBUG] [Thread-72920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] client lang: <none>
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] server lang: <none>
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] kex follows: False
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:32:25.230 [DEBUG] [Thread-72920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:32:25.231 [DEBUG] [Thread-72920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:32:25.231 [DEBUG] [Thread-72920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:32:25.231 [DEBUG] [Thread-72920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:32:25.231 [DEBUG] [Thread-72920] [transport.py] [_log()] Compression: none
2025-12-12T16:32:25.231 [DEBUG] [Thread-72920] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:32:25.287 [DEBUG] [Thread-72920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:32:25.288 [DEBUG] [Thread-72920] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:32:25.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:32:25.289 [DEBUG] [Thread-72920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:32:25.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:32:25.343 [DEBUG] [Thread-72920] [transport.py] [_log()] userauth is OK
2025-12-12T16:32:25.343 [DEBUG] [Thread-72920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:32:25.343 [DEBUG] [Thread-72920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:32:25.343 [DEBUG] [Thread-72920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:32:25.343 [DEBUG] [Thread-72920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:32:25.364 [INFO] [Thread-72920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:32:25.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:32:25.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:32:26.236 [DEBUG] [Thread-72920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:32:26.236 [DEBUG] [Thread-72920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:32:26.283 [DEBUG] [Thread-72920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:32:26.284 [DEBUG] [Thread-72920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:32:26.292 [DEBUG] [Thread-72920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:32:26.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:32:26.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:32:26.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:32:26.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:32:26.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:32:26.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:32:26.326 [DEBUG] [Thread-72920] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:32:26.935 [DEBUG] [Thread-72922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:41.982 [DEBUG] [Thread-72923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:54.114 [DEBUG] [Thread-72924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:32:56.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:32:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:32:57.009 [DEBUG] [Thread-72925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:32:57.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 32, 27), 19.98, 25.85, 0.0, 46.17, 19.47, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:32:57.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:32:27
2025-12-12T16:32:57.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:32:57.352 [DEBUG] [Thread-72926] [transport.py] [_log()] starting thread (client mode): 0xf81e7f70
2025-12-12T16:32:57.352 [DEBUG] [Thread-72926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:32:57.372 [DEBUG] [Thread-72926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:32:57.373 [INFO] [Thread-72926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] client lang: <none>
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] server lang: <none>
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] kex follows: False
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] Compression: none
2025-12-12T16:32:57.376 [DEBUG] [Thread-72926] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:32:57.391 [DEBUG] [Thread-72926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:32:57.391 [DEBUG] [Thread-72926] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:32:57.392 [DEBUG] [Thread-72926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:32:57.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:32:57.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:32:57.393 [DEBUG] [Thread-72926] [transport.py] [_log()] userauth is OK
2025-12-12T16:32:57.393 [DEBUG] [Thread-72926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:32:57.393 [DEBUG] [Thread-72926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:32:57.393 [DEBUG] [Thread-72926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:32:57.393 [DEBUG] [Thread-72926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:32:57.411 [INFO] [Thread-72926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:32:57.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:32:58.057 [DEBUG] [Thread-72926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:32:58.057 [DEBUG] [Thread-72926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:32:58.057 [DEBUG] [Thread-72926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:32:58.098 [DEBUG] [Thread-72926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:32:58.098 [DEBUG] [Thread-72926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:32:58.100 [DEBUG] [Thread-72926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:32:58.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:32:58.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:32:58.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:32:58.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:32:58.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:32:58.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:32:58.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.605648 -999.00  +19.40  51.62     32   +2.30 1 1 2 1 1   888    0 17.42 33.42 ----- 51.7 51.6 314.2 55.7 22.9 -26.1 22.8 -26.3 23.5 -23.1 23.9 -24.2
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.605648
2025-12-12T16:32:58.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:32:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:32:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:32:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:32:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:32:58.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:32:27', tmtdew=19.98, humidity=25.85, cloud=0.0, wind=46.17, temperature=19.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:32:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:32:58.117 [DEBUG] [Thread-72926] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:32:58.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:32:58.203 [DEBUG] [Thread-72929] [transport.py] [_log()] starting thread (client mode): 0xf57bc400
2025-12-12T16:32:58.204 [DEBUG] [Thread-72929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:32:58.219 [DEBUG] [Thread-72929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:32:58.219 [INFO] [Thread-72929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:32:58.226 [DEBUG] [Thread-72929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:32:58.226 [DEBUG] [Thread-72929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:32:58.226 [DEBUG] [Thread-72929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:32:58.226 [DEBUG] [Thread-72929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] client lang: <none>
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] server lang: <none>
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] kex follows: False
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] Compression: none
2025-12-12T16:32:58.227 [DEBUG] [Thread-72929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:32:58.285 [DEBUG] [Thread-72929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:32:58.285 [DEBUG] [Thread-72929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:32:58.285 [DEBUG] [Thread-72929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:32:58.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:32:58.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:32:58.342 [DEBUG] [Thread-72929] [transport.py] [_log()] userauth is OK
2025-12-12T16:32:58.342 [DEBUG] [Thread-72929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:32:58.342 [DEBUG] [Thread-72929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:32:58.342 [DEBUG] [Thread-72929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:32:58.342 [DEBUG] [Thread-72929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:32:58.358 [INFO] [Thread-72929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:32:58.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:32:58.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:32:59.177 [DEBUG] [Thread-72929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:32:59.177 [DEBUG] [Thread-72929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:32:59.228 [DEBUG] [Thread-72929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:32:59.228 [DEBUG] [Thread-72929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:32:59.239 [DEBUG] [Thread-72929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:32:59.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:32:59.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:32:59.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:32:59.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:32:59.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:32:59.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:32:59.274 [DEBUG] [Thread-72929] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:33:10.317 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:33:10.318 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:33:12.037 [DEBUG] [Thread-72931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:33:27.080 [DEBUG] [Thread-72932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:33:29.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:33:29.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:33:29.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:33:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 32, 59), 19.98, 26.2, 0.0, 46.23, 19.78, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:33:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:32:59
2025-12-12T16:33:30.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:33:30.252 [DEBUG] [Thread-72933] [transport.py] [_log()] starting thread (client mode): 0xf81c1ed0
2025-12-12T16:33:30.252 [DEBUG] [Thread-72933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:33:30.271 [DEBUG] [Thread-72933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:33:30.271 [INFO] [Thread-72933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] client lang: <none>
2025-12-12T16:33:30.276 [DEBUG] [Thread-72933] [transport.py] [_log()] server lang: <none>
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] kex follows: False
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] Compression: none
2025-12-12T16:33:30.277 [DEBUG] [Thread-72933] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:33:30.287 [DEBUG] [Thread-72933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:33:30.287 [DEBUG] [Thread-72933] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:33:30.288 [DEBUG] [Thread-72933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:33:30.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:33:30.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:33:30.290 [DEBUG] [Thread-72933] [transport.py] [_log()] userauth is OK
2025-12-12T16:33:30.290 [DEBUG] [Thread-72933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:33:30.290 [DEBUG] [Thread-72933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:33:30.290 [DEBUG] [Thread-72933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:33:30.290 [DEBUG] [Thread-72933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:33:30.318 [INFO] [Thread-72933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:33:30.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:33:30.995 [DEBUG] [Thread-72933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:33:30.996 [DEBUG] [Thread-72933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:33:30.996 [DEBUG] [Thread-72933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:33:31.037 [DEBUG] [Thread-72933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:33:31.037 [DEBUG] [Thread-72933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:33:31.039 [DEBUG] [Thread-72933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:33:31.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:33:31.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:33:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:33:31.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:33:31.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:33:31.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:33:31.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:33:31.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:33:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:33:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.605996 -999.00  +19.80  44.03     31   +2.60 1 1 2 1 1   888    0 18.04 39.07 ----- 45.7 44.0 316.8 55.8 22.9 -25.9 22.9 -25.0 23.6 -22.2 23.9 -23.6
2025-12-12T16:33:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:33:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:33:31.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.605996
2025-12-12T16:33:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:33:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:33:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:33:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:33:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:33:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:32:59', tmtdew=19.98, humidity=26.2, cloud=0.0, wind=46.23, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:32:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:33:31.065 [DEBUG] [Thread-72933] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:33:31.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:33:31.162 [DEBUG] [Thread-72936] [transport.py] [_log()] starting thread (client mode): 0xfabc72e0
2025-12-12T16:33:31.162 [DEBUG] [Thread-72936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:33:31.176 [DEBUG] [Thread-72936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:33:31.176 [INFO] [Thread-72936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] client lang: <none>
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] server lang: <none>
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] kex follows: False
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:33:31.184 [DEBUG] [Thread-72936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:33:31.185 [DEBUG] [Thread-72936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:33:31.185 [DEBUG] [Thread-72936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:33:31.185 [DEBUG] [Thread-72936] [transport.py] [_log()] Compression: none
2025-12-12T16:33:31.185 [DEBUG] [Thread-72936] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:33:31.246 [DEBUG] [Thread-72936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:33:31.246 [DEBUG] [Thread-72936] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:33:31.247 [DEBUG] [Thread-72936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:33:31.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:33:31.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:33:31.302 [DEBUG] [Thread-72936] [transport.py] [_log()] userauth is OK
2025-12-12T16:33:31.302 [DEBUG] [Thread-72936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:33:31.302 [DEBUG] [Thread-72936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:33:31.302 [DEBUG] [Thread-72936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:33:31.302 [DEBUG] [Thread-72936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:33:31.321 [INFO] [Thread-72936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:33:31.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:33:31.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:33:32.179 [DEBUG] [Thread-72936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:33:32.179 [DEBUG] [Thread-72936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:33:32.226 [DEBUG] [Thread-72936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:33:32.226 [DEBUG] [Thread-72936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:33:32.235 [DEBUG] [Thread-72936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:33:32.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:33:32.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:33:32.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:33:32.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:33:32.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:33:32.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:33:32.265 [DEBUG] [Thread-72936] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:33:42.110 [DEBUG] [Thread-72938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:33:54.179 [DEBUG] [Thread-72939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:33:57.161 [DEBUG] [Thread-72940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:34:02.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:34:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:34:02.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 33, 31), 19.78, 26.52, 0.0, 49.63, 19.63, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:34:02.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:33:31
2025-12-12T16:34:03.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:34:03.252 [DEBUG] [Thread-72941] [transport.py] [_log()] starting thread (client mode): 0xf575e5c0
2025-12-12T16:34:03.252 [DEBUG] [Thread-72941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:34:03.270 [DEBUG] [Thread-72941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:34:03.270 [INFO] [Thread-72941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:34:03.273 [DEBUG] [Thread-72941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] client lang: <none>
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] server lang: <none>
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] kex follows: False
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] Compression: none
2025-12-12T16:34:03.274 [DEBUG] [Thread-72941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:34:03.290 [DEBUG] [Thread-72941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:34:03.291 [DEBUG] [Thread-72941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:34:03.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:34:03.292 [DEBUG] [Thread-72941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:34:03.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:34:03.294 [DEBUG] [Thread-72941] [transport.py] [_log()] userauth is OK
2025-12-12T16:34:03.295 [DEBUG] [Thread-72941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:34:03.295 [DEBUG] [Thread-72941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:34:03.295 [DEBUG] [Thread-72941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:34:03.295 [DEBUG] [Thread-72941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:34:03.316 [INFO] [Thread-72941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:34:03.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:34:03.963 [DEBUG] [Thread-72941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:34:03.963 [DEBUG] [Thread-72941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:34:03.963 [DEBUG] [Thread-72941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:34:04.003 [DEBUG] [Thread-72941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:34:04.003 [DEBUG] [Thread-72941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:34:04.005 [DEBUG] [Thread-72941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:34:04.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:34:04.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:34:04.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:34:04.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:34:04.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:34:04.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:34:04.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.606690 -999.00  +19.30  58.25     32   +2.30 1 1 2 1 1   888    0 17.83 50.24 ----- 51.6 58.2 310.2 71.0 22.9 -27.0 22.8 -27.6 23.5 -23.1 24.0 -25.0
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.606690
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:34:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:33:31', tmtdew=19.78, humidity=26.52, cloud=0.0, wind=49.63, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:33:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:34:04.024 [DEBUG] [Thread-72941] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:34:04.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:34:04.110 [DEBUG] [Thread-72944] [transport.py] [_log()] starting thread (client mode): 0xfabc5b40
2025-12-12T16:34:04.110 [DEBUG] [Thread-72944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:34:04.125 [DEBUG] [Thread-72944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:34:04.125 [INFO] [Thread-72944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] client lang: <none>
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] server lang: <none>
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] kex follows: False
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] Compression: none
2025-12-12T16:34:04.133 [DEBUG] [Thread-72944] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:34:04.188 [DEBUG] [Thread-72944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:34:04.189 [DEBUG] [Thread-72944] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:34:04.189 [DEBUG] [Thread-72944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:34:04.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:34:04.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:34:04.246 [DEBUG] [Thread-72944] [transport.py] [_log()] userauth is OK
2025-12-12T16:34:04.246 [DEBUG] [Thread-72944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:34:04.246 [DEBUG] [Thread-72944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:34:04.246 [DEBUG] [Thread-72944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:34:04.246 [DEBUG] [Thread-72944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:34:04.261 [INFO] [Thread-72944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:34:04.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:34:04.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:34:05.116 [DEBUG] [Thread-72944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:34:05.116 [DEBUG] [Thread-72944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:34:05.164 [DEBUG] [Thread-72944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:34:05.164 [DEBUG] [Thread-72944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:34:05.173 [DEBUG] [Thread-72944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:34:05.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:34:05.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:34:05.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:34:05.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:34:05.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:34:05.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:34:05.204 [DEBUG] [Thread-72944] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:34:10.459 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:10.460 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:12.191 [DEBUG] [Thread-72946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:27.235 [DEBUG] [Thread-72947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:35.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:34:35.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:34:35.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:34:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 34, 3), 19.89, 26.35, 0.0, 51.22, 19.73, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:34:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:34:03
2025-12-12T16:34:36.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:34:36.204 [DEBUG] [Thread-72948] [transport.py] [_log()] starting thread (client mode): 0xf81e4cd0
2025-12-12T16:34:36.204 [DEBUG] [Thread-72948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:34:36.224 [DEBUG] [Thread-72948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:34:36.224 [INFO] [Thread-72948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] client lang: <none>
2025-12-12T16:34:36.227 [DEBUG] [Thread-72948] [transport.py] [_log()] server lang: <none>
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] kex follows: False
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] Compression: none
2025-12-12T16:34:36.228 [DEBUG] [Thread-72948] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:34:36.243 [DEBUG] [Thread-72948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:34:36.243 [DEBUG] [Thread-72948] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:34:36.243 [DEBUG] [Thread-72948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:34:36.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:34:36.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:34:36.244 [DEBUG] [Thread-72948] [transport.py] [_log()] userauth is OK
2025-12-12T16:34:36.244 [DEBUG] [Thread-72948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:34:36.244 [DEBUG] [Thread-72948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:34:36.244 [DEBUG] [Thread-72948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:34:36.244 [DEBUG] [Thread-72948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:34:36.259 [INFO] [Thread-72948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:34:36.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:34:36.991 [DEBUG] [Thread-72948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:34:36.991 [DEBUG] [Thread-72948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:34:36.991 [DEBUG] [Thread-72948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:34:37.033 [DEBUG] [Thread-72948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:34:37.033 [DEBUG] [Thread-72948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:34:37.035 [DEBUG] [Thread-72948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:34:37.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:34:37.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:34:37.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:34:37.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:34:37.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:34:37.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:34:37.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.607037 -999.00  +19.40  58.93     32   +2.40 1 1 2 1 1   888    0 18.42 55.74 ----- 48.4 58.9 308.8 68.8 22.9 -26.2 22.9 -26.2 23.7 -25.5 23.9 -24.7
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.607037
2025-12-12T16:34:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:34:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:34:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:34:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:34:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:34:37.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:34:03', tmtdew=19.89, humidity=26.35, cloud=0.0, wind=51.22, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:34:07.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:34:37.056 [DEBUG] [Thread-72948] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:34:37.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:34:37.141 [DEBUG] [Thread-72951] [transport.py] [_log()] starting thread (client mode): 0xf575c0a0
2025-12-12T16:34:37.141 [DEBUG] [Thread-72951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:34:37.156 [DEBUG] [Thread-72951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:34:37.156 [INFO] [Thread-72951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] client lang: <none>
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] server lang: <none>
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] kex follows: False
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] Compression: none
2025-12-12T16:34:37.164 [DEBUG] [Thread-72951] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:34:37.219 [DEBUG] [Thread-72951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:34:37.220 [DEBUG] [Thread-72951] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:34:37.220 [DEBUG] [Thread-72951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:34:37.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:34:37.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:34:37.277 [DEBUG] [Thread-72951] [transport.py] [_log()] userauth is OK
2025-12-12T16:34:37.277 [DEBUG] [Thread-72951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:34:37.277 [DEBUG] [Thread-72951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:34:37.277 [DEBUG] [Thread-72951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:34:37.277 [DEBUG] [Thread-72951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:34:37.291 [INFO] [Thread-72951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:34:37.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:34:37.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:34:38.133 [DEBUG] [Thread-72951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:34:38.134 [DEBUG] [Thread-72951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:34:38.182 [DEBUG] [Thread-72951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:34:38.182 [DEBUG] [Thread-72951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:34:38.190 [DEBUG] [Thread-72951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:34:38.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:34:38.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:34:38.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:34:38.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:34:38.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:34:38.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:34:38.225 [DEBUG] [Thread-72951] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:34:42.266 [DEBUG] [Thread-72953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:54.226 [DEBUG] [Thread-72954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:34:57.314 [DEBUG] [Thread-72955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:08.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:35:08.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:35:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:35:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 34, 35), 19.81, 26.55, 0.0, 42.75, 19.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:35:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:34:35
2025-12-12T16:35:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:35:09.274 [DEBUG] [Thread-72956] [transport.py] [_log()] starting thread (client mode): 0xfabc5e10
2025-12-12T16:35:09.275 [DEBUG] [Thread-72956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:35:09.298 [DEBUG] [Thread-72956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:35:09.298 [INFO] [Thread-72956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] client lang: <none>
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] server lang: <none>
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] kex follows: False
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] Compression: none
2025-12-12T16:35:09.302 [DEBUG] [Thread-72956] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:35:09.316 [DEBUG] [Thread-72956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:35:09.316 [DEBUG] [Thread-72956] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:35:09.316 [DEBUG] [Thread-72956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:35:09.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:35:09.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:35:09.317 [DEBUG] [Thread-72956] [transport.py] [_log()] userauth is OK
2025-12-12T16:35:09.317 [DEBUG] [Thread-72956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:35:09.317 [DEBUG] [Thread-72956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:35:09.317 [DEBUG] [Thread-72956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:35:09.317 [DEBUG] [Thread-72956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:35:09.326 [INFO] [Thread-72956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:35:09.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:35:10.250 [DEBUG] [Thread-72956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:35:10.250 [DEBUG] [Thread-72956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:35:10.251 [DEBUG] [Thread-72956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:35:10.291 [DEBUG] [Thread-72956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:35:10.291 [DEBUG] [Thread-72956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:35:10.294 [DEBUG] [Thread-72956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:35:10.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:35:10.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:35:10.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:35:10.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:35:10.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:35:10.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:35:10.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:35:10.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:35:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:35:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.607384 -999.00  +19.00  37.52     32   +2.30 1 1 2 1 1   888    0 18.22 56.90 ----- 36.1 37.5 303.9 58.8 22.8 -27.9 22.8 -26.5 23.5 -23.8 23.9 -24.9
2025-12-12T16:35:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:35:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:35:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.607384
2025-12-12T16:35:10.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:35:10.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:35:10.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:35:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:35:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:35:10.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:34:35', tmtdew=19.81, humidity=26.55, cloud=0.0, wind=42.75, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:34:37.978', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:35:10.319 [DEBUG] [Thread-72956] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:35:10.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:35:10.415 [DEBUG] [Thread-72959] [transport.py] [_log()] starting thread (client mode): 0xfabc6110
2025-12-12T16:35:10.416 [DEBUG] [Thread-72959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:35:10.430 [DEBUG] [Thread-72959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:35:10.430 [INFO] [Thread-72959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:35:10.441 [DEBUG] [Thread-72959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:35:10.441 [DEBUG] [Thread-72959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:35:10.441 [DEBUG] [Thread-72959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:35:10.441 [DEBUG] [Thread-72959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:10.441 [DEBUG] [Thread-72959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:10.441 [DEBUG] [Thread-72959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] client lang: <none>
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] server lang: <none>
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] kex follows: False
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] Compression: none
2025-12-12T16:35:10.442 [DEBUG] [Thread-72959] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:35:10.497 [DEBUG] [Thread-72959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:35:10.497 [DEBUG] [Thread-72959] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:35:10.498 [DEBUG] [Thread-72959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:35:10.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:35:10.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:35:10.557 [DEBUG] [Thread-72959] [transport.py] [_log()] userauth is OK
2025-12-12T16:35:10.557 [DEBUG] [Thread-72959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:35:10.557 [DEBUG] [Thread-72959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:35:10.557 [DEBUG] [Thread-72959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:35:10.557 [DEBUG] [Thread-72959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:35:10.576 [INFO] [Thread-72959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:35:10.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:35:10.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:35:10.600 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:10.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:11.404 [DEBUG] [Thread-72959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:35:11.405 [DEBUG] [Thread-72959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:35:11.456 [DEBUG] [Thread-72959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:35:11.456 [DEBUG] [Thread-72959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:35:11.465 [DEBUG] [Thread-72959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:35:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:35:11.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:35:11.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:35:11.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:35:11.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:35:11.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:35:11.505 [DEBUG] [Thread-72959] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:35:12.342 [DEBUG] [Thread-72961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:27.383 [DEBUG] [Thread-72962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:41.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:35:41.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:35:41.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:35:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 35, 7), 20.04, 26.2, 0.0, 38.41, 19.92, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:35:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:35:07
2025-12-12T16:35:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:35:42.407 [DEBUG] [Thread-72963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:42.509 [DEBUG] [Thread-72964] [transport.py] [_log()] starting thread (client mode): 0xf5789180
2025-12-12T16:35:42.509 [DEBUG] [Thread-72964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:35:42.528 [DEBUG] [Thread-72964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:35:42.528 [INFO] [Thread-72964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] client lang: <none>
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] server lang: <none>
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] kex follows: False
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] Compression: none
2025-12-12T16:35:42.531 [DEBUG] [Thread-72964] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:35:42.547 [DEBUG] [Thread-72964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:35:42.548 [DEBUG] [Thread-72964] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:35:42.548 [DEBUG] [Thread-72964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:35:42.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:35:42.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:35:42.550 [DEBUG] [Thread-72964] [transport.py] [_log()] userauth is OK
2025-12-12T16:35:42.550 [DEBUG] [Thread-72964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:35:42.550 [DEBUG] [Thread-72964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:35:42.550 [DEBUG] [Thread-72964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:35:42.551 [DEBUG] [Thread-72964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:35:42.568 [INFO] [Thread-72964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:35:42.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:35:43.151 [DEBUG] [Thread-72964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:35:43.151 [DEBUG] [Thread-72964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:35:43.152 [DEBUG] [Thread-72964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:35:43.193 [DEBUG] [Thread-72964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:35:43.193 [DEBUG] [Thread-72964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:35:43.196 [DEBUG] [Thread-72964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:35:43.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:35:43.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:35:43.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:35:43.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:35:43.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:35:43.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:35:43.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:35:43.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:35:43.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:35:43.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.607743 -999.00  +18.60  45.52     33   +2.10 1 1 2 1 1   888    0 18.30 57.49 ----- 44.4 45.5 316.8 52.0 22.7 -28.1 22.6 -28.0 23.3 -24.0 23.9 -25.5
2025-12-12T16:35:43.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:35:43.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:35:43.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.607743
2025-12-12T16:35:43.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:35:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:35:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:35:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:35:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:35:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:35:07', tmtdew=20.04, humidity=26.2, cloud=0.0, wind=38.41, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:35:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:35:43.221 [DEBUG] [Thread-72964] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:35:43.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:35:43.325 [DEBUG] [Thread-72967] [transport.py] [_log()] starting thread (client mode): 0xf5788730
2025-12-12T16:35:43.325 [DEBUG] [Thread-72967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:35:43.340 [DEBUG] [Thread-72967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:35:43.340 [INFO] [Thread-72967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:35:43.347 [DEBUG] [Thread-72967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:35:43.348 [DEBUG] [Thread-72967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] client lang: <none>
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] server lang: <none>
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] kex follows: False
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] Compression: none
2025-12-12T16:35:43.349 [DEBUG] [Thread-72967] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:35:43.404 [DEBUG] [Thread-72967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:35:43.404 [DEBUG] [Thread-72967] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:35:43.405 [DEBUG] [Thread-72967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:35:43.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:35:43.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:35:43.460 [DEBUG] [Thread-72967] [transport.py] [_log()] userauth is OK
2025-12-12T16:35:43.461 [DEBUG] [Thread-72967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:35:43.461 [DEBUG] [Thread-72967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:35:43.461 [DEBUG] [Thread-72967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:35:43.461 [DEBUG] [Thread-72967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:35:43.479 [INFO] [Thread-72967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:35:43.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:35:43.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:35:44.320 [DEBUG] [Thread-72967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:35:44.320 [DEBUG] [Thread-72967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:35:44.367 [DEBUG] [Thread-72967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:35:44.368 [DEBUG] [Thread-72967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:35:44.376 [DEBUG] [Thread-72967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:35:44.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:35:44.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:35:44.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:35:44.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:35:44.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:35:44.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:35:44.411 [DEBUG] [Thread-72967] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:35:54.277 [DEBUG] [Thread-72969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:35:57.438 [DEBUG] [Thread-72970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:10.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:10.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:12.481 [DEBUG] [Thread-72971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:36:14.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:36:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:36:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 36, 11), 19.62, 26.52, 0.0, 37.37, 19.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:36:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:36:11
2025-12-12T16:36:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:36:15.402 [DEBUG] [Thread-72972] [transport.py] [_log()] starting thread (client mode): 0xf5789600
2025-12-12T16:36:15.403 [DEBUG] [Thread-72972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:36:15.422 [DEBUG] [Thread-72972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:36:15.422 [INFO] [Thread-72972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] client lang: <none>
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] server lang: <none>
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] kex follows: False
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:36:15.425 [DEBUG] [Thread-72972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:36:15.426 [DEBUG] [Thread-72972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:36:15.426 [DEBUG] [Thread-72972] [transport.py] [_log()] Compression: none
2025-12-12T16:36:15.426 [DEBUG] [Thread-72972] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:36:15.444 [DEBUG] [Thread-72972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:36:15.444 [DEBUG] [Thread-72972] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:36:15.444 [DEBUG] [Thread-72972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:36:15.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:36:15.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:36:15.445 [DEBUG] [Thread-72972] [transport.py] [_log()] userauth is OK
2025-12-12T16:36:15.445 [DEBUG] [Thread-72972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:36:15.445 [DEBUG] [Thread-72972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:36:15.445 [DEBUG] [Thread-72972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:36:15.445 [DEBUG] [Thread-72972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:36:15.460 [INFO] [Thread-72972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:36:15.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:36:16.077 [DEBUG] [Thread-72972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:36:16.077 [DEBUG] [Thread-72972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:36:16.077 [DEBUG] [Thread-72972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:36:16.118 [DEBUG] [Thread-72972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:36:16.118 [DEBUG] [Thread-72972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:36:16.122 [DEBUG] [Thread-72972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:36:16.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:36:16.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:36:16.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:36:16.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:36:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:36:16.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:36:16.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:36:16.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:36:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:36:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.608079 -999.00  +18.60  36.53     33   +2.20 1 1 2 1 1   888    0 18.23 57.11 ----- 34.9 36.5 305.2 51.3 22.6 -27.0 22.5 -26.5 23.2 -25.6 23.7 -24.8
2025-12-12T16:36:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:36:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:36:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.608079
2025-12-12T16:36:16.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:36:16.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:36:16.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:36:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:36:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:36:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:36:11', tmtdew=19.62, humidity=26.52, cloud=0.0, wind=37.37, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:35:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:36:16.145 [DEBUG] [Thread-72972] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:36:16.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:36:16.231 [DEBUG] [Thread-72975] [transport.py] [_log()] starting thread (client mode): 0xf81c12a0
2025-12-12T16:36:16.231 [DEBUG] [Thread-72975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:36:16.246 [DEBUG] [Thread-72975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:36:16.246 [INFO] [Thread-72975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:36:16.254 [DEBUG] [Thread-72975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:36:16.254 [DEBUG] [Thread-72975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:36:16.254 [DEBUG] [Thread-72975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:36:16.254 [DEBUG] [Thread-72975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:16.254 [DEBUG] [Thread-72975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] client lang: <none>
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] server lang: <none>
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] kex follows: False
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:36:16.255 [DEBUG] [Thread-72975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:36:16.256 [DEBUG] [Thread-72975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:36:16.256 [DEBUG] [Thread-72975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:36:16.256 [DEBUG] [Thread-72975] [transport.py] [_log()] Compression: none
2025-12-12T16:36:16.256 [DEBUG] [Thread-72975] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:36:16.313 [DEBUG] [Thread-72975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:36:16.313 [DEBUG] [Thread-72975] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:36:16.314 [DEBUG] [Thread-72975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:36:16.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:36:16.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:36:16.368 [DEBUG] [Thread-72975] [transport.py] [_log()] userauth is OK
2025-12-12T16:36:16.369 [DEBUG] [Thread-72975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:36:16.369 [DEBUG] [Thread-72975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:36:16.369 [DEBUG] [Thread-72975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:36:16.369 [DEBUG] [Thread-72975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:36:16.391 [INFO] [Thread-72975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:36:16.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:36:16.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:36:17.245 [DEBUG] [Thread-72975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:36:17.245 [DEBUG] [Thread-72975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:36:17.293 [DEBUG] [Thread-72975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:36:17.293 [DEBUG] [Thread-72975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:36:17.302 [DEBUG] [Thread-72975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:36:17.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:36:17.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:36:17.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:36:17.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:36:17.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:36:17.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:36:17.336 [DEBUG] [Thread-72975] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:36:27.508 [DEBUG] [Thread-72977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:42.556 [DEBUG] [Thread-72978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:36:47.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:36:47.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
2025-12-12T16:36:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 36, 43), 19.57, 26.55, 0.0, 38.75, 19.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:36:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:36:43
2025-12-12T16:36:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:36:48.357 [DEBUG] [Thread-72979] [transport.py] [_log()] starting thread (client mode): 0xf578bb80
2025-12-12T16:36:48.357 [DEBUG] [Thread-72979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:36:48.378 [DEBUG] [Thread-72979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:36:48.378 [INFO] [Thread-72979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] client lang: <none>
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] server lang: <none>
2025-12-12T16:36:48.381 [DEBUG] [Thread-72979] [transport.py] [_log()] kex follows: False
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] Compression: none
2025-12-12T16:36:48.382 [DEBUG] [Thread-72979] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:36:48.404 [DEBUG] [Thread-72979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:36:48.404 [DEBUG] [Thread-72979] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:36:48.405 [DEBUG] [Thread-72979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:36:48.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:36:48.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:36:48.405 [DEBUG] [Thread-72979] [transport.py] [_log()] userauth is OK
2025-12-12T16:36:48.406 [DEBUG] [Thread-72979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:36:48.406 [DEBUG] [Thread-72979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:36:48.406 [DEBUG] [Thread-72979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:36:48.406 [DEBUG] [Thread-72979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:36:48.421 [INFO] [Thread-72979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:36:48.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:36:49.158 [DEBUG] [Thread-72979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:36:49.158 [DEBUG] [Thread-72979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:36:49.158 [DEBUG] [Thread-72979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:36:49.200 [DEBUG] [Thread-72979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:36:49.200 [DEBUG] [Thread-72979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:36:49.202 [DEBUG] [Thread-72979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:36:49.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:36:49.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:36:49.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:36:49.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:36:49.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:36:49.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:36:49.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:36:49.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.608426 -999.00  +19.00  28.85     33   +2.60 1 1 1 1 1   888    0 18.10 51.42 ----- 29.4 28.9 308.2 46.0 22.7 -26.5 22.6 -25.2 23.3 -23.9 23.7 -23.7
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.608426
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:36:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:36:43', tmtdew=19.57, humidity=26.55, cloud=0.0, wind=38.75, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:36:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:36:49.222 [DEBUG] [Thread-72979] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:36:49.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:36:49.308 [DEBUG] [Thread-72982] [transport.py] [_log()] starting thread (client mode): 0xf81e44f0
2025-12-12T16:36:49.308 [DEBUG] [Thread-72982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:36:49.325 [DEBUG] [Thread-72982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:36:49.325 [INFO] [Thread-72982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] client lang: <none>
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] server lang: <none>
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] kex follows: False
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] Compression: none
2025-12-12T16:36:49.333 [DEBUG] [Thread-72982] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:36:49.390 [DEBUG] [Thread-72982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:36:49.390 [DEBUG] [Thread-72982] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:36:49.390 [DEBUG] [Thread-72982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:36:49.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:36:49.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:36:49.447 [DEBUG] [Thread-72982] [transport.py] [_log()] userauth is OK
2025-12-12T16:36:49.448 [DEBUG] [Thread-72982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:36:49.448 [DEBUG] [Thread-72982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:36:49.448 [DEBUG] [Thread-72982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:36:49.448 [DEBUG] [Thread-72982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:36:49.461 [INFO] [Thread-72982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:36:49.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:36:49.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:36:50.345 [DEBUG] [Thread-72982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:36:50.345 [DEBUG] [Thread-72982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:36:50.392 [DEBUG] [Thread-72982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:36:50.392 [DEBUG] [Thread-72982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:36:50.401 [DEBUG] [Thread-72982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:36:50.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:36:50.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:36:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:36:50.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:36:50.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:36:50.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:36:50.433 [DEBUG] [Thread-72982] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:36:54.328 [DEBUG] [Thread-72984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:36:57.589 [DEBUG] [Thread-72985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:10.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:10.883 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:12.637 [DEBUG] [Thread-72986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:20.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:37:20.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:37:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:37:21.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 37, 15), 19.79, 26.19, 0.0, 46.31, 19.43, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:37:21.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:37:15
2025-12-12T16:37:21.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:37:21.426 [DEBUG] [Thread-72987] [transport.py] [_log()] starting thread (client mode): 0xf5740820
2025-12-12T16:37:21.426 [DEBUG] [Thread-72987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:37:21.447 [DEBUG] [Thread-72987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:37:21.447 [INFO] [Thread-72987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:37:21.451 [DEBUG] [Thread-72987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:37:21.451 [DEBUG] [Thread-72987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] client lang: <none>
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] server lang: <none>
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] kex follows: False
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] Compression: none
2025-12-12T16:37:21.452 [DEBUG] [Thread-72987] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:37:21.461 [DEBUG] [Thread-72987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:37:21.461 [DEBUG] [Thread-72987] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:37:21.462 [DEBUG] [Thread-72987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:37:21.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:37:21.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:37:21.464 [DEBUG] [Thread-72987] [transport.py] [_log()] userauth is OK
2025-12-12T16:37:21.464 [DEBUG] [Thread-72987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:37:21.464 [DEBUG] [Thread-72987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:37:21.464 [DEBUG] [Thread-72987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:37:21.464 [DEBUG] [Thread-72987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:37:21.480 [INFO] [Thread-72987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:37:21.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:37:22.096 [DEBUG] [Thread-72987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:37:22.096 [DEBUG] [Thread-72987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:37:22.096 [DEBUG] [Thread-72987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:37:22.137 [DEBUG] [Thread-72987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:37:22.137 [DEBUG] [Thread-72987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:37:22.140 [DEBUG] [Thread-72987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:37:22.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:37:22.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:37:22.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:37:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:37:22.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:37:22.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:37:22.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:37:22.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:37:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:37:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.608773 -999.00  +19.20  36.49     32   +2.40 1 1 2 1 1   888    0 18.18 50.01 ----- 38.7 36.5 312.6 45.9 22.6 -26.1 22.6 -25.7 23.2 -26.0 23.8 -24.2
2025-12-12T16:37:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:37:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:37:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.608773
2025-12-12T16:37:22.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:37:22.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:37:22.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:37:22.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:37:22.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:37:22.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:37:15', tmtdew=19.79, humidity=26.19, cloud=0.0, wind=46.31, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:36:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:37:22.167 [DEBUG] [Thread-72987] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:37:22.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:37:22.262 [DEBUG] [Thread-72990] [transport.py] [_log()] starting thread (client mode): 0xf81c3490
2025-12-12T16:37:22.262 [DEBUG] [Thread-72990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:37:22.277 [DEBUG] [Thread-72990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:37:22.277 [INFO] [Thread-72990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:37:22.284 [DEBUG] [Thread-72990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:37:22.285 [DEBUG] [Thread-72990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] client lang: <none>
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] server lang: <none>
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] kex follows: False
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:37:22.286 [DEBUG] [Thread-72990] [transport.py] [_log()] Compression: none
2025-12-12T16:37:22.287 [DEBUG] [Thread-72990] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:37:22.344 [DEBUG] [Thread-72990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:37:22.345 [DEBUG] [Thread-72990] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:37:22.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:37:22.346 [DEBUG] [Thread-72990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:37:22.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:37:22.400 [DEBUG] [Thread-72990] [transport.py] [_log()] userauth is OK
2025-12-12T16:37:22.401 [DEBUG] [Thread-72990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:37:22.401 [DEBUG] [Thread-72990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:37:22.401 [DEBUG] [Thread-72990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:37:22.401 [DEBUG] [Thread-72990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:37:22.422 [INFO] [Thread-72990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:37:22.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:37:22.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:37:23.274 [DEBUG] [Thread-72990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:37:23.274 [DEBUG] [Thread-72990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:37:23.322 [DEBUG] [Thread-72990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:37:23.322 [DEBUG] [Thread-72990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:37:23.332 [DEBUG] [Thread-72990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:37:23.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:37:23.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:37:23.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:37:23.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:37:23.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:37:23.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:37:23.368 [DEBUG] [Thread-72990] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:37:27.665 [DEBUG] [Thread-72992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:42.700 [DEBUG] [Thread-72993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:37:53.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:37:53.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
2025-12-12T16:37:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 37, 47), 20.41, 25.37, 0.0, 49.81, 19.82, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:37:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:37:47
2025-12-12T16:37:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:37:54.359 [DEBUG] [Thread-72994] [transport.py] [_log()] starting thread (client mode): 0xf81c0d60
2025-12-12T16:37:54.359 [DEBUG] [Thread-72994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:37:54.377 [DEBUG] [Thread-72995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:37:54.379 [DEBUG] [Thread-72994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:37:54.379 [INFO] [Thread-72994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:37:54.382 [DEBUG] [Thread-72994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] client lang: <none>
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] server lang: <none>
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] kex follows: False
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] Compression: none
2025-12-12T16:37:54.383 [DEBUG] [Thread-72994] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:37:54.405 [DEBUG] [Thread-72994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:37:54.405 [DEBUG] [Thread-72994] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:37:54.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:37:54.405 [DEBUG] [Thread-72994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:37:54.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:37:54.407 [DEBUG] [Thread-72994] [transport.py] [_log()] userauth is OK
2025-12-12T16:37:54.407 [DEBUG] [Thread-72994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:37:54.407 [DEBUG] [Thread-72994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:37:54.407 [DEBUG] [Thread-72994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:37:54.407 [DEBUG] [Thread-72994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:37:54.438 [INFO] [Thread-72994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:37:54.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:37:55.142 [DEBUG] [Thread-72994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:37:55.142 [DEBUG] [Thread-72994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:37:55.143 [DEBUG] [Thread-72994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:37:55.184 [DEBUG] [Thread-72994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:37:55.184 [DEBUG] [Thread-72994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:37:55.187 [DEBUG] [Thread-72994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:37:55.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:37:55.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:37:55.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:37:55.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:37:55.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:37:55.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:37:55.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:37:55.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:37:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:37:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.609121 -999.00  +19.80  44.54     31   +2.50 1 1 2 1 1   888    0 18.17 49.05 ----- 55.8 44.5 317.2 52.3 22.7 -25.6 22.7 -24.9 23.4 -24.2 23.8 -24.0
2025-12-12T16:37:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:37:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:37:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.609121
2025-12-12T16:37:55.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:37:55.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:37:55.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:37:55.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:37:55.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:37:55.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:37:47', tmtdew=20.41, humidity=25.37, cloud=0.0, wind=49.81, temperature=19.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:37:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:37:55.217 [DEBUG] [Thread-72994] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:37:55.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:37:55.314 [DEBUG] [Thread-72998] [transport.py] [_log()] starting thread (client mode): 0xf5741510
2025-12-12T16:37:55.314 [DEBUG] [Thread-72998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:37:55.329 [DEBUG] [Thread-72998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:37:55.329 [INFO] [Thread-72998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:37:55.336 [DEBUG] [Thread-72998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:37:55.336 [DEBUG] [Thread-72998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:37:55.336 [DEBUG] [Thread-72998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:37:55.336 [DEBUG] [Thread-72998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] client lang: <none>
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] server lang: <none>
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] kex follows: False
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] Compression: none
2025-12-12T16:37:55.337 [DEBUG] [Thread-72998] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:37:55.395 [DEBUG] [Thread-72998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:37:55.396 [DEBUG] [Thread-72998] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:37:55.396 [DEBUG] [Thread-72998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:37:55.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:37:55.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:37:55.451 [DEBUG] [Thread-72998] [transport.py] [_log()] userauth is OK
2025-12-12T16:37:55.451 [DEBUG] [Thread-72998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:37:55.451 [DEBUG] [Thread-72998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:37:55.452 [DEBUG] [Thread-72998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:37:55.452 [DEBUG] [Thread-72998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:37:55.470 [INFO] [Thread-72998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:37:55.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:37:55.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:37:56.319 [DEBUG] [Thread-72998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:37:56.319 [DEBUG] [Thread-72998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:37:56.367 [DEBUG] [Thread-72998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:37:56.367 [DEBUG] [Thread-72998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:37:56.376 [DEBUG] [Thread-72998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:37:56.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:37:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:37:56.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:37:56.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:37:56.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:37:56.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:37:56.411 [DEBUG] [Thread-72998] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:37:57.731 [DEBUG] [Thread-73000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:11.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:11.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:12.772 [DEBUG] [Thread-73001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:26.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:38:26.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:38:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:38:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 38, 19), 20.43, 25.35, 0.0, 48.73, 19.83, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:38:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:38:19
2025-12-12T16:38:27.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:38:27.404 [DEBUG] [Thread-73002] [transport.py] [_log()] starting thread (client mode): 0xf81c3c70
2025-12-12T16:38:27.404 [DEBUG] [Thread-73002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:38:27.421 [DEBUG] [Thread-73002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:38:27.422 [INFO] [Thread-73002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:38:27.424 [DEBUG] [Thread-73002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:38:27.424 [DEBUG] [Thread-73002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:38:27.424 [DEBUG] [Thread-73002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:38:27.424 [DEBUG] [Thread-73002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] client lang: <none>
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] server lang: <none>
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] kex follows: False
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] Compression: none
2025-12-12T16:38:27.425 [DEBUG] [Thread-73002] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:38:27.442 [DEBUG] [Thread-73002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:38:27.443 [DEBUG] [Thread-73002] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:38:27.443 [DEBUG] [Thread-73002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:38:27.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:38:27.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:38:27.445 [DEBUG] [Thread-73002] [transport.py] [_log()] userauth is OK
2025-12-12T16:38:27.445 [DEBUG] [Thread-73002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:38:27.445 [DEBUG] [Thread-73002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:38:27.445 [DEBUG] [Thread-73002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:38:27.445 [DEBUG] [Thread-73002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:38:27.460 [INFO] [Thread-73002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:38:27.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:38:27.804 [DEBUG] [Thread-73004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:28.117 [DEBUG] [Thread-73002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:38:28.117 [DEBUG] [Thread-73002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:38:28.117 [DEBUG] [Thread-73002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:38:28.158 [DEBUG] [Thread-73002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:38:28.158 [DEBUG] [Thread-73002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:38:28.161 [DEBUG] [Thread-73002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:38:28.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:38:28.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:38:28.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:38:28.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:38:28.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:38:28.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:38:28.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:38:28.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:38:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:38:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.609468 -999.00  +18.90  46.89     32   +1.90 1 1 2 1 1   888    0 18.23 50.21 ----- 40.6 46.9 314.2 70.3 22.6 -27.7 22.4 -26.5 23.2 -25.0 23.8 -24.9
2025-12-12T16:38:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:38:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:38:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.609468
2025-12-12T16:38:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:38:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:38:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:38:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:38:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:38:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:38:19', tmtdew=20.43, humidity=25.35, cloud=0.0, wind=48.73, temperature=19.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:37:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:38:28.185 [DEBUG] [Thread-73002] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:38:28.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:38:28.279 [DEBUG] [Thread-73006] [transport.py] [_log()] starting thread (client mode): 0xf5788f40
2025-12-12T16:38:28.279 [DEBUG] [Thread-73006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:38:28.294 [DEBUG] [Thread-73006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:38:28.294 [INFO] [Thread-73006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:38:28.301 [DEBUG] [Thread-73006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] client lang: <none>
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] server lang: <none>
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] kex follows: False
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] Compression: none
2025-12-12T16:38:28.302 [DEBUG] [Thread-73006] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:38:28.359 [DEBUG] [Thread-73006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:38:28.359 [DEBUG] [Thread-73006] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:38:28.360 [DEBUG] [Thread-73006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:38:28.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:38:28.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:38:28.415 [DEBUG] [Thread-73006] [transport.py] [_log()] userauth is OK
2025-12-12T16:38:28.415 [DEBUG] [Thread-73006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:38:28.415 [DEBUG] [Thread-73006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:38:28.415 [DEBUG] [Thread-73006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:38:28.415 [DEBUG] [Thread-73006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:38:28.434 [INFO] [Thread-73006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:38:28.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:38:28.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:38:29.333 [DEBUG] [Thread-73006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:38:29.333 [DEBUG] [Thread-73006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:38:29.381 [DEBUG] [Thread-73006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:38:29.381 [DEBUG] [Thread-73006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:38:29.398 [DEBUG] [Thread-73006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:38:29.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:38:29.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:38:29.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:38:29.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:38:29.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:38:29.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:38:29.433 [DEBUG] [Thread-73006] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:38:42.837 [DEBUG] [Thread-73008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:54.428 [DEBUG] [Thread-73009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:57.881 [DEBUG] [Thread-73010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:38:59.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:38:59.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:38:59.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 38, 51), 20.36, 25.14, 0.0, 44.36, 19.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:39:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:38:51
2025-12-12T16:39:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:39:00.401 [DEBUG] [Thread-73011] [transport.py] [_log()] starting thread (client mode): 0xf81e4a30
2025-12-12T16:39:00.401 [DEBUG] [Thread-73011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:39:00.419 [DEBUG] [Thread-73011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:39:00.419 [INFO] [Thread-73011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:39:00.423 [DEBUG] [Thread-73011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:39:00.423 [DEBUG] [Thread-73011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] client lang: <none>
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] server lang: <none>
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] kex follows: False
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] Compression: none
2025-12-12T16:39:00.424 [DEBUG] [Thread-73011] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:39:00.441 [DEBUG] [Thread-73011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:39:00.442 [DEBUG] [Thread-73011] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:39:00.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:39:00.443 [DEBUG] [Thread-73011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:39:00.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:39:00.445 [DEBUG] [Thread-73011] [transport.py] [_log()] userauth is OK
2025-12-12T16:39:00.445 [DEBUG] [Thread-73011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:39:00.445 [DEBUG] [Thread-73011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:39:00.445 [DEBUG] [Thread-73011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:39:00.445 [DEBUG] [Thread-73011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:39:00.482 [INFO] [Thread-73011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:39:00.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:39:01.221 [DEBUG] [Thread-73011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:39:01.221 [DEBUG] [Thread-73011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:39:01.222 [DEBUG] [Thread-73011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:39:01.262 [DEBUG] [Thread-73011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:39:01.262 [DEBUG] [Thread-73011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:39:01.265 [DEBUG] [Thread-73011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:39:01.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:39:01.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:39:01.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:39:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:39:01.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:39:01.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:39:01.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:39:01.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:39:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:39:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.609815 -999.00  +19.50  43.55     31   +2.00 1 1 2 1 1   888    0 18.08 47.57 ----- 37.2 43.5 312.6 49.1 22.7 -25.8 22.6 -25.8 23.4 -23.4 23.7 -24.1
2025-12-12T16:39:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:39:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:39:01.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.609815
2025-12-12T16:39:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:39:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:39:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:39:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:39:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:39:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:38:51', tmtdew=20.36, humidity=25.14, cloud=0.0, wind=44.36, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:38:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:39:01.291 [DEBUG] [Thread-73011] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:39:01.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:39:01.388 [DEBUG] [Thread-73014] [transport.py] [_log()] starting thread (client mode): 0xf81e45e0
2025-12-12T16:39:01.388 [DEBUG] [Thread-73014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:39:01.402 [DEBUG] [Thread-73014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:39:01.402 [INFO] [Thread-73014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] client lang: <none>
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] server lang: <none>
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] kex follows: False
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] Compression: none
2025-12-12T16:39:01.410 [DEBUG] [Thread-73014] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:39:01.467 [DEBUG] [Thread-73014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:39:01.468 [DEBUG] [Thread-73014] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:39:01.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:39:01.469 [DEBUG] [Thread-73014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:39:01.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:39:01.523 [DEBUG] [Thread-73014] [transport.py] [_log()] userauth is OK
2025-12-12T16:39:01.523 [DEBUG] [Thread-73014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:39:01.523 [DEBUG] [Thread-73014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:39:01.523 [DEBUG] [Thread-73014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:39:01.523 [DEBUG] [Thread-73014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:39:01.544 [INFO] [Thread-73014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:39:01.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:39:01.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:39:02.379 [DEBUG] [Thread-73014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:39:02.379 [DEBUG] [Thread-73014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:39:02.427 [DEBUG] [Thread-73014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:39:02.427 [DEBUG] [Thread-73014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:39:02.436 [DEBUG] [Thread-73014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:39:02.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:39:02.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:39:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:39:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:39:02.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:39:02.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:39:02.471 [DEBUG] [Thread-73014] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:39:11.170 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:39:11.171 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:39:12.912 [DEBUG] [Thread-73016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:39:27.953 [DEBUG] [Thread-73017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:39:32.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:39:32.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:39:32.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:39:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 39, 23), 20.47, 24.94, 0.0, 46.47, 19.25, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:39:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:39:23
2025-12-12T16:39:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:39:33.460 [DEBUG] [Thread-73018] [transport.py] [_log()] starting thread (client mode): 0xf578b760
2025-12-12T16:39:33.460 [DEBUG] [Thread-73018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:39:33.480 [DEBUG] [Thread-73018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:39:33.480 [INFO] [Thread-73018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] client lang: <none>
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] server lang: <none>
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] kex follows: False
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:39:33.484 [DEBUG] [Thread-73018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:39:33.485 [DEBUG] [Thread-73018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:39:33.485 [DEBUG] [Thread-73018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:39:33.485 [DEBUG] [Thread-73018] [transport.py] [_log()] Compression: none
2025-12-12T16:39:33.485 [DEBUG] [Thread-73018] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:39:33.502 [DEBUG] [Thread-73018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:39:33.503 [DEBUG] [Thread-73018] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:39:33.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:39:33.503 [DEBUG] [Thread-73018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:39:33.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:39:33.505 [DEBUG] [Thread-73018] [transport.py] [_log()] userauth is OK
2025-12-12T16:39:33.506 [DEBUG] [Thread-73018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:39:33.506 [DEBUG] [Thread-73018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:39:33.506 [DEBUG] [Thread-73018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:39:33.506 [DEBUG] [Thread-73018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:39:33.539 [INFO] [Thread-73018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:39:33.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:39:34.182 [DEBUG] [Thread-73018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:39:34.183 [DEBUG] [Thread-73018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:39:34.183 [DEBUG] [Thread-73018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:39:34.224 [DEBUG] [Thread-73018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:39:34.224 [DEBUG] [Thread-73018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:39:34.227 [DEBUG] [Thread-73018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:39:34.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:39:34.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:39:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:39:34.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:39:34.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:39:34.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:39:34.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:39:34.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:39:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:39:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.610509 -999.00  +19.10  33.71     31   +1.50 1 1 2 1 1   888    0 18.34 53.37 ----- 42.8 33.7 300.7 51.1 22.6 -26.5 22.5 -26.3 23.1 -25.4 23.6 -25.0
2025-12-12T16:39:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:39:34.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:39:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.610509
2025-12-12T16:39:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:39:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:39:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:39:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:39:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:39:34.252 [DEBUG] [Thread-73018] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:39:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:39:23', tmtdew=20.47, humidity=24.94, cloud=0.0, wind=46.47, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:39:07.978', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:39:34.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:39:34.349 [DEBUG] [Thread-73021] [transport.py] [_log()] starting thread (client mode): 0xf5789d20
2025-12-12T16:39:34.349 [DEBUG] [Thread-73021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:39:34.365 [DEBUG] [Thread-73021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:39:34.365 [INFO] [Thread-73021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:39:34.372 [DEBUG] [Thread-73021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:39:34.372 [DEBUG] [Thread-73021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] client lang: <none>
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] server lang: <none>
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] kex follows: False
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] Compression: none
2025-12-12T16:39:34.373 [DEBUG] [Thread-73021] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:39:34.430 [DEBUG] [Thread-73021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:39:34.430 [DEBUG] [Thread-73021] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:39:34.430 [DEBUG] [Thread-73021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:39:34.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:39:34.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:39:34.486 [DEBUG] [Thread-73021] [transport.py] [_log()] userauth is OK
2025-12-12T16:39:34.486 [DEBUG] [Thread-73021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:39:34.486 [DEBUG] [Thread-73021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:39:34.486 [DEBUG] [Thread-73021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:39:34.487 [DEBUG] [Thread-73021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:39:34.510 [INFO] [Thread-73021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:39:34.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:39:34.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:39:35.336 [DEBUG] [Thread-73021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:39:35.337 [DEBUG] [Thread-73021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:39:35.385 [DEBUG] [Thread-73021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:39:35.385 [DEBUG] [Thread-73021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:39:35.394 [DEBUG] [Thread-73021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:39:35.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:39:35.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:39:35.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:39:35.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:39:35.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:39:35.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:39:35.428 [DEBUG] [Thread-73021] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:39:42.978 [DEBUG] [Thread-73023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:39:54.482 [DEBUG] [Thread-73024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:39:58.028 [DEBUG] [Thread-73025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:05.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:40:05.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:40:05.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:40:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 39, 55), 20.41, 25.14, 0.0, 46.83, 19.22, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:40:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:39:55
2025-12-12T16:40:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:40:06.443 [DEBUG] [Thread-73026] [transport.py] [_log()] starting thread (client mode): 0xf81c1c90
2025-12-12T16:40:06.444 [DEBUG] [Thread-73026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:40:06.462 [DEBUG] [Thread-73026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:40:06.462 [INFO] [Thread-73026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:40:06.465 [DEBUG] [Thread-73026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:40:06.465 [DEBUG] [Thread-73026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:40:06.465 [DEBUG] [Thread-73026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:40:06.465 [DEBUG] [Thread-73026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] client lang: <none>
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] server lang: <none>
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] kex follows: False
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] Compression: none
2025-12-12T16:40:06.466 [DEBUG] [Thread-73026] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:40:06.480 [DEBUG] [Thread-73026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:40:06.480 [DEBUG] [Thread-73026] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:40:06.480 [DEBUG] [Thread-73026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:40:06.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:40:06.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:40:06.481 [DEBUG] [Thread-73026] [transport.py] [_log()] userauth is OK
2025-12-12T16:40:06.481 [DEBUG] [Thread-73026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:40:06.481 [DEBUG] [Thread-73026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:40:06.481 [DEBUG] [Thread-73026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:40:06.481 [DEBUG] [Thread-73026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:40:06.490 [INFO] [Thread-73026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:40:06.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:40:07.432 [DEBUG] [Thread-73026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:40:07.432 [DEBUG] [Thread-73026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:40:07.432 [DEBUG] [Thread-73026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:40:07.473 [DEBUG] [Thread-73026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:40:07.473 [DEBUG] [Thread-73026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:40:07.475 [DEBUG] [Thread-73026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:40:07.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:40:07.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:40:07.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:40:07.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:40:07.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:40:07.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:40:07.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:40:07.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:40:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:40:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.610857 -999.00  +18.70  39.75     31   +1.30 1 1 2 1 1   888    0 18.21 50.04 ----- 35.5 39.8 294.8 53.4 22.4 -27.9 22.4 -27.1 23.0 -28.5 23.5 -25.0
2025-12-12T16:40:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:40:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:40:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.610857
2025-12-12T16:40:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:40:07.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:40:07.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:40:07.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:40:07.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:40:07.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:39:55', tmtdew=20.41, humidity=25.14, cloud=0.0, wind=46.83, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:39:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:40:07.518 [DEBUG] [Thread-73026] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:40:07.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:40:07.614 [DEBUG] [Thread-73029] [transport.py] [_log()] starting thread (client mode): 0xf81c0310
2025-12-12T16:40:07.614 [DEBUG] [Thread-73029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:40:07.629 [DEBUG] [Thread-73029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:40:07.630 [INFO] [Thread-73029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:40:07.637 [DEBUG] [Thread-73029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:40:07.637 [DEBUG] [Thread-73029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] client lang: <none>
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] server lang: <none>
2025-12-12T16:40:07.638 [DEBUG] [Thread-73029] [transport.py] [_log()] kex follows: False
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] Compression: none
2025-12-12T16:40:07.639 [DEBUG] [Thread-73029] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:40:07.694 [DEBUG] [Thread-73029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:40:07.695 [DEBUG] [Thread-73029] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:40:07.696 [DEBUG] [Thread-73029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:40:07.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:40:07.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:40:07.749 [DEBUG] [Thread-73029] [transport.py] [_log()] userauth is OK
2025-12-12T16:40:07.750 [DEBUG] [Thread-73029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:40:07.750 [DEBUG] [Thread-73029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:40:07.750 [DEBUG] [Thread-73029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:40:07.750 [DEBUG] [Thread-73029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:40:07.773 [INFO] [Thread-73029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:40:07.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:40:07.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:40:08.637 [DEBUG] [Thread-73029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:40:08.638 [DEBUG] [Thread-73029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:40:08.686 [DEBUG] [Thread-73029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:40:08.686 [DEBUG] [Thread-73029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:40:08.695 [DEBUG] [Thread-73029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:40:08.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:40:08.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:40:08.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:40:08.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:40:08.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:40:08.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:40:08.729 [DEBUG] [Thread-73029] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:40:11.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:11.313 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:13.053 [DEBUG] [Thread-73031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:28.094 [DEBUG] [Thread-73032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:40:38.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:40:38.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:40:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 40, 28), 20.43, 25.09, 0.0, 47.5, 19.2, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:40:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:40:28
2025-12-12T16:40:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:40:39.765 [DEBUG] [Thread-73033] [transport.py] [_log()] starting thread (client mode): 0xf81c1000
2025-12-12T16:40:39.765 [DEBUG] [Thread-73033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:40:39.785 [DEBUG] [Thread-73033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:40:39.786 [INFO] [Thread-73033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] client lang: <none>
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] server lang: <none>
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] kex follows: False
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] Compression: none
2025-12-12T16:40:39.789 [DEBUG] [Thread-73033] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:40:39.805 [DEBUG] [Thread-73033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:40:39.805 [DEBUG] [Thread-73033] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:40:39.805 [DEBUG] [Thread-73033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:40:39.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:40:39.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:40:39.806 [DEBUG] [Thread-73033] [transport.py] [_log()] userauth is OK
2025-12-12T16:40:39.806 [DEBUG] [Thread-73033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:40:39.806 [DEBUG] [Thread-73033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:40:39.806 [DEBUG] [Thread-73033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:40:39.806 [DEBUG] [Thread-73033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:40:39.821 [INFO] [Thread-73033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:40:39.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:40:40.416 [DEBUG] [Thread-73033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:40:40.416 [DEBUG] [Thread-73033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:40:40.416 [DEBUG] [Thread-73033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:40:40.457 [DEBUG] [Thread-73033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:40:40.457 [DEBUG] [Thread-73033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:40:40.460 [DEBUG] [Thread-73033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:40:40.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:40:40.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:40:40.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:40:40.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:40:40.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:40:40.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:40:40.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:40:40.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.611215 -999.00  +18.90  42.06     31   +1.60 1 1 2 1 1   888    0 18.43 51.76 ----- 52.6 42.1 299.0 51.2 22.3 -26.1 22.4 -26.1 23.0 -24.5 23.4 -25.3
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.611215
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:40:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:40:28', tmtdew=20.43, humidity=25.09, cloud=0.0, wind=47.5, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:40:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:40:40.479 [DEBUG] [Thread-73033] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:40:40.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:40:40.565 [DEBUG] [Thread-73036] [transport.py] [_log()] starting thread (client mode): 0xfabc6ef0
2025-12-12T16:40:40.565 [DEBUG] [Thread-73036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:40:40.579 [DEBUG] [Thread-73036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:40:40.579 [INFO] [Thread-73036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] client lang: <none>
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] server lang: <none>
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] kex follows: False
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] Compression: none
2025-12-12T16:40:40.587 [DEBUG] [Thread-73036] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:40:40.647 [DEBUG] [Thread-73036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:40:40.647 [DEBUG] [Thread-73036] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:40:40.647 [DEBUG] [Thread-73036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:40:40.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:40:40.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:40:40.709 [DEBUG] [Thread-73036] [transport.py] [_log()] userauth is OK
2025-12-12T16:40:40.709 [DEBUG] [Thread-73036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:40:40.709 [DEBUG] [Thread-73036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:40:40.709 [DEBUG] [Thread-73036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:40:40.709 [DEBUG] [Thread-73036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:40:40.723 [INFO] [Thread-73036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:40:40.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:40:40.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:40:41.563 [DEBUG] [Thread-73036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:40:41.563 [DEBUG] [Thread-73036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:40:41.610 [DEBUG] [Thread-73036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:40:41.610 [DEBUG] [Thread-73036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:40:41.619 [DEBUG] [Thread-73036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:40:41.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:40:41.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:40:41.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:40:41.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:40:41.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:40:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:40:41.650 [DEBUG] [Thread-73036] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:40:43.124 [DEBUG] [Thread-73038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:54.543 [DEBUG] [Thread-73039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:40:58.170 [DEBUG] [Thread-73040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:11.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:11.454 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:11.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:41:11.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:41:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:41:12.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 40, 28), 20.43, 25.09, 0.0, 47.5, 19.2, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:41:12.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:40:28
2025-12-12T16:41:12.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:41:12.641 [DEBUG] [Thread-73041] [transport.py] [_log()] starting thread (client mode): 0xf813ee90
2025-12-12T16:41:12.641 [DEBUG] [Thread-73041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:41:12.661 [DEBUG] [Thread-73041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:41:12.661 [INFO] [Thread-73041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] client lang: <none>
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] server lang: <none>
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] kex follows: False
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] Compression: none
2025-12-12T16:41:12.665 [DEBUG] [Thread-73041] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:41:12.682 [DEBUG] [Thread-73041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:41:12.683 [DEBUG] [Thread-73041] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:41:12.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:41:12.684 [DEBUG] [Thread-73041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:41:12.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:41:12.685 [DEBUG] [Thread-73041] [transport.py] [_log()] userauth is OK
2025-12-12T16:41:12.685 [DEBUG] [Thread-73041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:41:12.686 [DEBUG] [Thread-73041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:41:12.686 [DEBUG] [Thread-73041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:41:12.686 [DEBUG] [Thread-73041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:41:12.703 [INFO] [Thread-73041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:41:12.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:41:13.200 [DEBUG] [Thread-73043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:13.459 [DEBUG] [Thread-73041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:41:13.460 [DEBUG] [Thread-73041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:41:13.460 [DEBUG] [Thread-73041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:41:13.501 [DEBUG] [Thread-73041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:41:13.501 [DEBUG] [Thread-73041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:41:13.504 [DEBUG] [Thread-73041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:41:13.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:41:13.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:41:13.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:41:13.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:41:13.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:41:13.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:41:13.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:41:13.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:41:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:41:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.611551 -999.00  +18.70  43.09     31   +1.50 1 1 2 1 1   888    0 18.53 52.87 ----- 48.2 43.1 297.4 64.2 22.3 -26.8 22.3 -25.7 22.9 -25.8 23.4 -25.1
2025-12-12T16:41:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:41:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:41:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.611551
2025-12-12T16:41:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:41:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:41:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:41:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:41:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:41:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:40:28', tmtdew=20.43, humidity=25.09, cloud=0.0, wind=47.5, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:40:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:41:13.526 [DEBUG] [Thread-73041] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:41:13.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:41:13.624 [DEBUG] [Thread-73045] [transport.py] [_log()] starting thread (client mode): 0xf81c0c10
2025-12-12T16:41:13.625 [DEBUG] [Thread-73045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:41:13.639 [DEBUG] [Thread-73045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:41:13.640 [INFO] [Thread-73045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:41:13.647 [DEBUG] [Thread-73045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:41:13.647 [DEBUG] [Thread-73045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] client lang: <none>
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] server lang: <none>
2025-12-12T16:41:13.648 [DEBUG] [Thread-73045] [transport.py] [_log()] kex follows: False
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] Compression: none
2025-12-12T16:41:13.649 [DEBUG] [Thread-73045] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:41:13.705 [DEBUG] [Thread-73045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:41:13.706 [DEBUG] [Thread-73045] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:41:13.706 [DEBUG] [Thread-73045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:41:13.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:41:13.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:41:13.761 [DEBUG] [Thread-73045] [transport.py] [_log()] userauth is OK
2025-12-12T16:41:13.761 [DEBUG] [Thread-73045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:41:13.761 [DEBUG] [Thread-73045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:41:13.761 [DEBUG] [Thread-73045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:41:13.762 [DEBUG] [Thread-73045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:41:13.781 [INFO] [Thread-73045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:41:13.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:41:13.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:41:14.615 [DEBUG] [Thread-73045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:41:14.616 [DEBUG] [Thread-73045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:41:14.664 [DEBUG] [Thread-73045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:41:14.664 [DEBUG] [Thread-73045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:41:14.673 [DEBUG] [Thread-73045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:41:14.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:41:14.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:41:14.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:41:14.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:41:14.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:41:14.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:41:14.707 [DEBUG] [Thread-73045] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:41:28.232 [DEBUG] [Thread-73047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:43.285 [DEBUG] [Thread-73048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:41:44.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:41:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:41:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 41, 32), 20.48, 25.02, 0.0, 52.9, 19.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:41:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:41:32
2025-12-12T16:41:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:41:45.699 [DEBUG] [Thread-73049] [transport.py] [_log()] starting thread (client mode): 0xf575f3a0
2025-12-12T16:41:45.699 [DEBUG] [Thread-73049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:41:45.719 [DEBUG] [Thread-73049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:41:45.719 [INFO] [Thread-73049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:41:45.721 [DEBUG] [Thread-73049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] client lang: <none>
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] server lang: <none>
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] kex follows: False
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:41:45.722 [DEBUG] [Thread-73049] [transport.py] [_log()] Compression: none
2025-12-12T16:41:45.723 [DEBUG] [Thread-73049] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:41:45.731 [DEBUG] [Thread-73049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:41:45.731 [DEBUG] [Thread-73049] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:41:45.732 [DEBUG] [Thread-73049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:41:45.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:41:45.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:41:45.734 [DEBUG] [Thread-73049] [transport.py] [_log()] userauth is OK
2025-12-12T16:41:45.734 [DEBUG] [Thread-73049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:41:45.734 [DEBUG] [Thread-73049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:41:45.734 [DEBUG] [Thread-73049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:41:45.734 [DEBUG] [Thread-73049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:41:45.754 [INFO] [Thread-73049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:41:45.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:41:46.307 [DEBUG] [Thread-73049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:41:46.307 [DEBUG] [Thread-73049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:41:46.308 [DEBUG] [Thread-73049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:41:46.348 [DEBUG] [Thread-73049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:41:46.349 [DEBUG] [Thread-73049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:41:46.352 [DEBUG] [Thread-73049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:41:46.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:41:46.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:41:46.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:41:46.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:41:46.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:41:46.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:41:46.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:41:46.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:41:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:41:46.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.611898 -999.00  +18.80  48.18     31   +1.50 1 1 2 1 1   888    0 18.31 51.20 ----- 43.9 48.2 302.8 62.8 22.3 -26.6 22.2 -27.1 22.9 -25.1 23.4 -23.9
2025-12-12T16:41:46.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:41:46.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:41:46.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.611898
2025-12-12T16:41:46.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:41:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:41:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:41:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:41:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:41:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:41:32', tmtdew=20.48, humidity=25.02, cloud=0.0, wind=52.9, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:41:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:41:46.379 [DEBUG] [Thread-73049] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:41:46.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:41:46.477 [DEBUG] [Thread-73052] [transport.py] [_log()] starting thread (client mode): 0xf575d4b0
2025-12-12T16:41:46.477 [DEBUG] [Thread-73052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:41:46.491 [DEBUG] [Thread-73052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:41:46.491 [INFO] [Thread-73052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:41:46.499 [DEBUG] [Thread-73052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] client lang: <none>
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] server lang: <none>
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] kex follows: False
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] Compression: none
2025-12-12T16:41:46.500 [DEBUG] [Thread-73052] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:41:46.560 [DEBUG] [Thread-73052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:41:46.561 [DEBUG] [Thread-73052] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:41:46.561 [DEBUG] [Thread-73052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:41:46.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:41:46.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:41:46.617 [DEBUG] [Thread-73052] [transport.py] [_log()] userauth is OK
2025-12-12T16:41:46.617 [DEBUG] [Thread-73052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:41:46.617 [DEBUG] [Thread-73052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:41:46.617 [DEBUG] [Thread-73052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:41:46.617 [DEBUG] [Thread-73052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:41:46.636 [INFO] [Thread-73052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:41:46.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:41:46.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:41:47.535 [DEBUG] [Thread-73052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:41:47.535 [DEBUG] [Thread-73052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:41:47.583 [DEBUG] [Thread-73052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:41:47.583 [DEBUG] [Thread-73052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:41:47.592 [DEBUG] [Thread-73052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:41:47.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:41:47.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:41:47.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:41:47.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:41:47.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:41:47.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:41:47.626 [DEBUG] [Thread-73052] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:41:54.593 [DEBUG] [Thread-73054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:41:58.313 [DEBUG] [Thread-73055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:11.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:11.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:13.356 [DEBUG] [Thread-73056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:42:17.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:42:17.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:42:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 42, 4), 20.59, 24.87, 0.0, 54.82, 19.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:42:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:42:04
2025-12-12T16:42:18.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:42:18.580 [DEBUG] [Thread-73057] [transport.py] [_log()] starting thread (client mode): 0xf575ca90
2025-12-12T16:42:18.580 [DEBUG] [Thread-73057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:42:18.593 [DEBUG] [Thread-73057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:42:18.593 [INFO] [Thread-73057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] client lang: <none>
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] server lang: <none>
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] kex follows: False
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] Compression: none
2025-12-12T16:42:18.595 [DEBUG] [Thread-73057] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:42:18.608 [DEBUG] [Thread-73057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:42:18.609 [DEBUG] [Thread-73057] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:42:18.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:42:18.610 [DEBUG] [Thread-73057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:42:18.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:42:18.611 [DEBUG] [Thread-73057] [transport.py] [_log()] userauth is OK
2025-12-12T16:42:18.612 [DEBUG] [Thread-73057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:42:18.612 [DEBUG] [Thread-73057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:42:18.612 [DEBUG] [Thread-73057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:42:18.612 [DEBUG] [Thread-73057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:42:18.637 [INFO] [Thread-73057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:42:18.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:42:19.333 [DEBUG] [Thread-73057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:42:19.333 [DEBUG] [Thread-73057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:42:19.334 [DEBUG] [Thread-73057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:42:19.374 [DEBUG] [Thread-73057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:42:19.374 [DEBUG] [Thread-73057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:42:19.377 [DEBUG] [Thread-73057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:42:19.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:42:19.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:42:19.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:42:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:42:19.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:42:19.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:42:19.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:42:19.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:42:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:42:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.612246 -999.00  +18.90  54.78     31   +1.50 1 1 2 1 1   888    0 18.52 49.47 ----- 53.5 54.8 297.6 65.6 22.2 -27.3 22.2 -27.1 22.8 -23.9 23.3 -25.3
2025-12-12T16:42:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:42:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:42:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.612246
2025-12-12T16:42:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:42:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:42:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:42:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:42:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:42:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:42:04', tmtdew=20.59, humidity=24.87, cloud=0.0, wind=54.82, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:41:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:42:19.403 [DEBUG] [Thread-73057] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:42:19.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:42:19.498 [DEBUG] [Thread-73060] [transport.py] [_log()] starting thread (client mode): 0xf5788eb0
2025-12-12T16:42:19.498 [DEBUG] [Thread-73060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:42:19.512 [DEBUG] [Thread-73060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:42:19.512 [INFO] [Thread-73060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:42:19.519 [DEBUG] [Thread-73060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:42:19.519 [DEBUG] [Thread-73060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] client lang: <none>
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] server lang: <none>
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] kex follows: False
2025-12-12T16:42:19.520 [DEBUG] [Thread-73060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:42:19.521 [DEBUG] [Thread-73060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:42:19.521 [DEBUG] [Thread-73060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:42:19.521 [DEBUG] [Thread-73060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:42:19.521 [DEBUG] [Thread-73060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:42:19.521 [DEBUG] [Thread-73060] [transport.py] [_log()] Compression: none
2025-12-12T16:42:19.521 [DEBUG] [Thread-73060] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:42:19.576 [DEBUG] [Thread-73060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:42:19.577 [DEBUG] [Thread-73060] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:42:19.577 [DEBUG] [Thread-73060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:42:19.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:42:19.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:42:19.632 [DEBUG] [Thread-73060] [transport.py] [_log()] userauth is OK
2025-12-12T16:42:19.633 [DEBUG] [Thread-73060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:42:19.633 [DEBUG] [Thread-73060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:42:19.633 [DEBUG] [Thread-73060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:42:19.633 [DEBUG] [Thread-73060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:42:19.651 [INFO] [Thread-73060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:42:19.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:42:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:42:20.500 [DEBUG] [Thread-73060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:42:20.501 [DEBUG] [Thread-73060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:42:20.549 [DEBUG] [Thread-73060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:42:20.549 [DEBUG] [Thread-73060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:42:20.557 [DEBUG] [Thread-73060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:42:20.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:42:20.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:42:20.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:42:20.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:42:20.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:42:20.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:42:20.592 [DEBUG] [Thread-73060] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:42:28.390 [DEBUG] [Thread-73062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:43.437 [DEBUG] [Thread-73063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:42:50.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:42:50.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:42:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 42, 36), 20.65, 24.61, 0.0, 64.1, 19.32, 0, 0, 0, 2, 2, 0),)
2025-12-12T16:42:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:42:36
2025-12-12T16:42:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:42:51.571 [DEBUG] [Thread-73064] [transport.py] [_log()] starting thread (client mode): 0xf813f010
2025-12-12T16:42:51.572 [DEBUG] [Thread-73064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:42:51.591 [DEBUG] [Thread-73064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:42:51.591 [INFO] [Thread-73064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:51.594 [DEBUG] [Thread-73064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] client lang: <none>
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] server lang: <none>
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] kex follows: False
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] Compression: none
2025-12-12T16:42:51.595 [DEBUG] [Thread-73064] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:42:51.615 [DEBUG] [Thread-73064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:42:51.616 [DEBUG] [Thread-73064] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:42:51.616 [DEBUG] [Thread-73064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:42:51.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:42:51.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:42:51.618 [DEBUG] [Thread-73064] [transport.py] [_log()] userauth is OK
2025-12-12T16:42:51.618 [DEBUG] [Thread-73064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:42:51.618 [DEBUG] [Thread-73064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:42:51.619 [DEBUG] [Thread-73064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:42:51.619 [DEBUG] [Thread-73064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:42:51.636 [INFO] [Thread-73064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:42:51.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:42:52.280 [DEBUG] [Thread-73064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:42:52.280 [DEBUG] [Thread-73064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:42:52.281 [DEBUG] [Thread-73064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:42:52.321 [DEBUG] [Thread-73064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:42:52.321 [DEBUG] [Thread-73064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:42:52.324 [DEBUG] [Thread-73064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:42:52.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:42:52.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:42:52.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:42:52.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:42:52.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:42:52.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:42:52.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:42:52.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:42:52.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:42:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.612593 -999.00  +18.50  57.13     31   +1.40 1 1 2 1 1   888    0 18.39 44.00 ----- 59.8 57.1 299.8 70.9 22.1 -27.6 22.1 -27.0 22.7 -24.7 -999.0 -999.0
2025-12-12T16:42:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:42:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:42:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.612593
2025-12-12T16:42:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:42:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:42:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:42:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:42:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:42:52.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:42:36', tmtdew=20.65, humidity=24.61, cloud=0.0, wind=64.1, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:42:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:42:52.350 [DEBUG] [Thread-73064] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:42:52.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:42:52.446 [DEBUG] [Thread-73067] [transport.py] [_log()] starting thread (client mode): 0xf813cd30
2025-12-12T16:42:52.446 [DEBUG] [Thread-73067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:42:52.460 [DEBUG] [Thread-73067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:42:52.461 [INFO] [Thread-73067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:42:52.468 [DEBUG] [Thread-73067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:42:52.468 [DEBUG] [Thread-73067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:42:52.468 [DEBUG] [Thread-73067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] client lang: <none>
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] server lang: <none>
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] kex follows: False
2025-12-12T16:42:52.469 [DEBUG] [Thread-73067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:42:52.470 [DEBUG] [Thread-73067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:42:52.470 [DEBUG] [Thread-73067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:42:52.470 [DEBUG] [Thread-73067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:42:52.470 [DEBUG] [Thread-73067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:42:52.470 [DEBUG] [Thread-73067] [transport.py] [_log()] Compression: none
2025-12-12T16:42:52.470 [DEBUG] [Thread-73067] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:42:52.528 [DEBUG] [Thread-73067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:42:52.529 [DEBUG] [Thread-73067] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:42:52.529 [DEBUG] [Thread-73067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:42:52.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:42:52.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:42:52.584 [DEBUG] [Thread-73067] [transport.py] [_log()] userauth is OK
2025-12-12T16:42:52.584 [DEBUG] [Thread-73067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:42:52.584 [DEBUG] [Thread-73067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:42:52.584 [DEBUG] [Thread-73067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:42:52.584 [DEBUG] [Thread-73067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:42:52.603 [INFO] [Thread-73067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:42:52.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:42:52.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:42:53.432 [DEBUG] [Thread-73067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:42:53.432 [DEBUG] [Thread-73067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:42:53.480 [DEBUG] [Thread-73067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:42:53.480 [DEBUG] [Thread-73067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:42:53.489 [DEBUG] [Thread-73067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:42:53.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:42:53.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:42:53.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:42:53.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:42:53.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:42:53.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:42:53.529 [DEBUG] [Thread-73067] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:42:54.648 [DEBUG] [Thread-73069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:42:58.466 [DEBUG] [Thread-73070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:11.736 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:11.737 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:13.512 [DEBUG] [Thread-73071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:43:23.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:43:23.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:43:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 43, 8), 20.45, 24.89, 0.0, 60.68, 19.08, 0, 0, 0, 2, 2, 0),)
2025-12-12T16:43:24.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:43:08
2025-12-12T16:43:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:43:24.513 [DEBUG] [Thread-73072] [transport.py] [_log()] starting thread (client mode): 0xfabc5c30
2025-12-12T16:43:24.513 [DEBUG] [Thread-73072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:43:24.533 [DEBUG] [Thread-73072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:43:24.533 [INFO] [Thread-73072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] client lang: <none>
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] server lang: <none>
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] kex follows: False
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:43:24.537 [DEBUG] [Thread-73072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:43:24.538 [DEBUG] [Thread-73072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:43:24.538 [DEBUG] [Thread-73072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:43:24.538 [DEBUG] [Thread-73072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:43:24.538 [DEBUG] [Thread-73072] [transport.py] [_log()] Compression: none
2025-12-12T16:43:24.538 [DEBUG] [Thread-73072] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:43:24.557 [DEBUG] [Thread-73072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:43:24.557 [DEBUG] [Thread-73072] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:43:24.558 [DEBUG] [Thread-73072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:43:24.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:43:24.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:43:24.560 [DEBUG] [Thread-73072] [transport.py] [_log()] userauth is OK
2025-12-12T16:43:24.561 [DEBUG] [Thread-73072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:43:24.561 [DEBUG] [Thread-73072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:43:24.561 [DEBUG] [Thread-73072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:43:24.561 [DEBUG] [Thread-73072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:43:24.575 [INFO] [Thread-73072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:43:24.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:43:25.300 [DEBUG] [Thread-73072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:43:25.301 [DEBUG] [Thread-73072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:43:25.301 [DEBUG] [Thread-73072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:43:25.342 [DEBUG] [Thread-73072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:43:25.342 [DEBUG] [Thread-73072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:43:25.345 [DEBUG] [Thread-73072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:43:25.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:43:25.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:43:25.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:43:25.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:43:25.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:43:25.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:43:25.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:43:25.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:43:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:43:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.612940 -999.00  +18.50  45.83     31   +1.30 1 1 2 1 1   888    0 18.19 41.44 ----- 43.5 45.8 293.4 63.5 22.0 -26.6 22.0 -26.6 22.6 -26.9 22.9 -24.6
2025-12-12T16:43:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:43:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:43:25.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.612940
2025-12-12T16:43:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:43:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:43:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:43:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:43:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:43:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:43:08', tmtdew=20.45, humidity=24.89, cloud=0.0, wind=60.68, temperature=19.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=2, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:42:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:43:25.373 [DEBUG] [Thread-73072] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:43:25.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:43:25.462 [DEBUG] [Thread-73075] [transport.py] [_log()] starting thread (client mode): 0xfabc5b40
2025-12-12T16:43:25.462 [DEBUG] [Thread-73075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:43:25.477 [DEBUG] [Thread-73075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:43:25.477 [INFO] [Thread-73075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:43:25.484 [DEBUG] [Thread-73075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:43:25.484 [DEBUG] [Thread-73075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:43:25.484 [DEBUG] [Thread-73075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:43:25.484 [DEBUG] [Thread-73075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:25.484 [DEBUG] [Thread-73075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:25.484 [DEBUG] [Thread-73075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] client lang: <none>
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] server lang: <none>
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] kex follows: False
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] Compression: none
2025-12-12T16:43:25.485 [DEBUG] [Thread-73075] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:43:25.542 [DEBUG] [Thread-73075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:43:25.542 [DEBUG] [Thread-73075] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:43:25.542 [DEBUG] [Thread-73075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:43:25.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:43:25.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:43:25.604 [DEBUG] [Thread-73075] [transport.py] [_log()] userauth is OK
2025-12-12T16:43:25.604 [DEBUG] [Thread-73075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:43:25.604 [DEBUG] [Thread-73075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:43:25.605 [DEBUG] [Thread-73075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:43:25.605 [DEBUG] [Thread-73075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:43:25.627 [INFO] [Thread-73075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:43:25.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:43:25.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:43:26.499 [DEBUG] [Thread-73075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:43:26.499 [DEBUG] [Thread-73075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:43:26.550 [DEBUG] [Thread-73075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:43:26.551 [DEBUG] [Thread-73075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:43:26.559 [DEBUG] [Thread-73075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:43:26.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:43:26.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:43:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:43:26.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:43:26.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:43:26.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:43:26.593 [DEBUG] [Thread-73075] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:43:28.540 [DEBUG] [Thread-73077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:43.584 [DEBUG] [Thread-73078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:54.699 [DEBUG] [Thread-73079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:43:56.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:43:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:43:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 43, 40), 20.45, 25.32, 0.0, 50.87, 19.18, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:43:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:43:40
2025-12-12T16:43:57.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:43:57.613 [DEBUG] [Thread-73080] [transport.py] [_log()] starting thread (client mode): 0xf813cc40
2025-12-12T16:43:57.613 [DEBUG] [Thread-73080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:43:57.633 [DEBUG] [Thread-73080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:43:57.633 [INFO] [Thread-73080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] client lang: <none>
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] server lang: <none>
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] kex follows: False
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] Compression: none
2025-12-12T16:43:57.636 [DEBUG] [Thread-73080] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:43:57.651 [DEBUG] [Thread-73080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:43:57.651 [DEBUG] [Thread-73080] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:43:57.652 [DEBUG] [Thread-73080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:43:57.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:43:57.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:43:57.653 [DEBUG] [Thread-73080] [transport.py] [_log()] userauth is OK
2025-12-12T16:43:57.653 [DEBUG] [Thread-73080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:43:57.653 [DEBUG] [Thread-73080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:43:57.653 [DEBUG] [Thread-73080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:43:57.653 [DEBUG] [Thread-73080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:43:57.665 [INFO] [Thread-73080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:43:57.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:43:58.299 [DEBUG] [Thread-73080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:43:58.300 [DEBUG] [Thread-73080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:43:58.300 [DEBUG] [Thread-73080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:43:58.341 [DEBUG] [Thread-73080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:43:58.341 [DEBUG] [Thread-73080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:43:58.343 [DEBUG] [Thread-73080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:43:58.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:43:58.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:43:58.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:43:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:43:58.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:43:58.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:43:58.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:43:58.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:43:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:43:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.613287 -999.00  +18.80  40.33     31   +1.40 1 1 2 1 1   888    0 18.15 41.34 ----- 37.0 40.3 307.4 52.5 22.0 -26.8 22.0 -26.6 22.6 -23.6 22.9 -24.8
2025-12-12T16:43:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:43:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:43:58.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.613287
2025-12-12T16:43:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:43:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:43:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:43:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:43:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:43:58.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:43:40', tmtdew=20.45, humidity=25.32, cloud=0.0, wind=50.87, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:43:07.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:43:58.360 [DEBUG] [Thread-73080] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:43:58.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:43:58.457 [DEBUG] [Thread-73083] [transport.py] [_log()] starting thread (client mode): 0xf575dc90
2025-12-12T16:43:58.457 [DEBUG] [Thread-73083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:43:58.472 [DEBUG] [Thread-73083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:43:58.472 [INFO] [Thread-73083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:43:58.479 [DEBUG] [Thread-73083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] client lang: <none>
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] server lang: <none>
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] kex follows: False
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] Compression: none
2025-12-12T16:43:58.480 [DEBUG] [Thread-73083] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:43:58.539 [DEBUG] [Thread-73083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:43:58.540 [DEBUG] [Thread-73083] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:43:58.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:43:58.541 [DEBUG] [Thread-73083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:43:58.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:43:58.596 [DEBUG] [Thread-73083] [transport.py] [_log()] userauth is OK
2025-12-12T16:43:58.596 [DEBUG] [Thread-73083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:43:58.596 [DEBUG] [Thread-73083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:43:58.596 [DEBUG] [Thread-73083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:43:58.597 [DEBUG] [Thread-73083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:43:58.616 [INFO] [Thread-73083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:43:58.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:43:58.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:43:58.619 [DEBUG] [Thread-73085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:43:59.475 [DEBUG] [Thread-73083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:43:59.476 [DEBUG] [Thread-73083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:43:59.524 [DEBUG] [Thread-73083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:43:59.524 [DEBUG] [Thread-73083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:43:59.533 [DEBUG] [Thread-73083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:43:59.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:43:59.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:43:59.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:43:59.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:43:59.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:43:59.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:43:59.567 [DEBUG] [Thread-73083] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:44:11.877 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:44:11.878 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:44:13.661 [DEBUG] [Thread-73086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:44:28.686 [DEBUG] [Thread-73087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:44:29.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:44:29.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:44:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:44:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 44, 12), 20.01, 25.95, 0.0, 42.1, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:44:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:44:12
2025-12-12T16:44:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:44:30.565 [DEBUG] [Thread-73088] [transport.py] [_log()] starting thread (client mode): 0xf575dd80
2025-12-12T16:44:30.565 [DEBUG] [Thread-73088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:44:30.584 [DEBUG] [Thread-73088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:44:30.584 [INFO] [Thread-73088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:44:30.587 [DEBUG] [Thread-73088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:44:30.587 [DEBUG] [Thread-73088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:44:30.587 [DEBUG] [Thread-73088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:44:30.587 [DEBUG] [Thread-73088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:44:30.587 [DEBUG] [Thread-73088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:44:30.587 [DEBUG] [Thread-73088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] client lang: <none>
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] server lang: <none>
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] kex follows: False
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] Compression: none
2025-12-12T16:44:30.588 [DEBUG] [Thread-73088] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:44:30.608 [DEBUG] [Thread-73088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:44:30.609 [DEBUG] [Thread-73088] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:44:30.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:44:30.610 [DEBUG] [Thread-73088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:44:30.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:44:30.611 [DEBUG] [Thread-73088] [transport.py] [_log()] userauth is OK
2025-12-12T16:44:30.611 [DEBUG] [Thread-73088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:44:30.611 [DEBUG] [Thread-73088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:44:30.612 [DEBUG] [Thread-73088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:44:30.612 [DEBUG] [Thread-73088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:44:30.646 [INFO] [Thread-73088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:44:30.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:44:31.342 [DEBUG] [Thread-73088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:44:31.342 [DEBUG] [Thread-73088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:44:31.342 [DEBUG] [Thread-73088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:44:31.382 [DEBUG] [Thread-73088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:44:31.382 [DEBUG] [Thread-73088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:44:31.385 [DEBUG] [Thread-73088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:44:31.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:44:31.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:44:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:44:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:44:31.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:44:31.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:44:31.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.613634 -999.00  +18.70  43.57     31   +1.40 1 1 2 1 1   888    0 18.03 40.42 ----- 33.7 43.6 311.4 51.5 22.1 -26.5 22.0 -26.4 22.6 -24.1 23.0 -23.9
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.613634
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:44:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:44:12', tmtdew=20.01, humidity=25.95, cloud=0.0, wind=42.1, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:43:37.978', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:44:31.405 [DEBUG] [Thread-73088] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:44:31.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:44:31.488 [DEBUG] [Thread-73091] [transport.py] [_log()] starting thread (client mode): 0xf813fac0
2025-12-12T16:44:31.488 [DEBUG] [Thread-73091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:44:31.503 [DEBUG] [Thread-73091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:44:31.503 [INFO] [Thread-73091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] client lang: <none>
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] server lang: <none>
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] kex follows: False
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] Compression: none
2025-12-12T16:44:31.511 [DEBUG] [Thread-73091] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:44:31.566 [DEBUG] [Thread-73091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:44:31.566 [DEBUG] [Thread-73091] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:44:31.566 [DEBUG] [Thread-73091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:44:31.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:44:31.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:44:31.623 [DEBUG] [Thread-73091] [transport.py] [_log()] userauth is OK
2025-12-12T16:44:31.623 [DEBUG] [Thread-73091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:44:31.623 [DEBUG] [Thread-73091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:44:31.623 [DEBUG] [Thread-73091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:44:31.623 [DEBUG] [Thread-73091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:44:31.637 [INFO] [Thread-73091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:44:31.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:44:31.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:44:32.506 [DEBUG] [Thread-73091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:44:32.506 [DEBUG] [Thread-73091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:44:32.554 [DEBUG] [Thread-73091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:44:32.554 [DEBUG] [Thread-73091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:44:32.563 [DEBUG] [Thread-73091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:44:32.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:44:32.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:44:32.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:44:32.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:44:32.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:44:32.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:44:32.594 [DEBUG] [Thread-73091] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:44:43.720 [DEBUG] [Thread-73093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:44:54.752 [DEBUG] [Thread-73094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:44:58.765 [DEBUG] [Thread-73095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:02.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:45:02.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:45:02.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:45:03.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 44, 44), 20.08, 25.8, 0.0, 42.1, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:45:03.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:44:44
2025-12-12T16:45:03.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:45:03.598 [DEBUG] [Thread-73096] [transport.py] [_log()] starting thread (client mode): 0xf575c700
2025-12-12T16:45:03.599 [DEBUG] [Thread-73096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:45:03.619 [DEBUG] [Thread-73096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:45:03.619 [INFO] [Thread-73096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] client lang: <none>
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] server lang: <none>
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] kex follows: False
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:45:03.623 [DEBUG] [Thread-73096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:45:03.624 [DEBUG] [Thread-73096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:45:03.624 [DEBUG] [Thread-73096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:45:03.624 [DEBUG] [Thread-73096] [transport.py] [_log()] Compression: none
2025-12-12T16:45:03.624 [DEBUG] [Thread-73096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:45:03.632 [DEBUG] [Thread-73096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:45:03.632 [DEBUG] [Thread-73096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:45:03.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:45:03.633 [DEBUG] [Thread-73096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:45:03.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:45:03.635 [DEBUG] [Thread-73096] [transport.py] [_log()] userauth is OK
2025-12-12T16:45:03.635 [DEBUG] [Thread-73096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:45:03.635 [DEBUG] [Thread-73096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:45:03.635 [DEBUG] [Thread-73096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:45:03.635 [DEBUG] [Thread-73096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:45:03.653 [INFO] [Thread-73096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:45:03.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:45:04.393 [DEBUG] [Thread-73096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:45:04.393 [DEBUG] [Thread-73096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:45:04.394 [DEBUG] [Thread-73096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:45:04.435 [DEBUG] [Thread-73096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:45:04.435 [DEBUG] [Thread-73096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:45:04.438 [DEBUG] [Thread-73096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:45:04.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:45:04.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:45:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:45:04.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:45:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:45:04.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:45:04.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:45:04.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:45:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:45:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.614329 -999.00  +19.00  39.71     30   +1.30 1 1 2 1 1   888    0 18.24 40.38 ----- 36.9 39.7 299.8 56.8 22.1 -26.7 22.1 -26.4 22.8 -23.5 23.2 -24.2
2025-12-12T16:45:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:45:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:45:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.614329
2025-12-12T16:45:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:45:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:45:04.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:45:04.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:45:04.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:45:04.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:44:44', tmtdew=20.08, humidity=25.8, cloud=0.0, wind=42.1, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:44:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:45:04.499 [DEBUG] [Thread-73096] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:45:04.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:45:04.597 [DEBUG] [Thread-73099] [transport.py] [_log()] starting thread (client mode): 0xf578bc40
2025-12-12T16:45:04.597 [DEBUG] [Thread-73099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:45:04.612 [DEBUG] [Thread-73099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:45:04.612 [INFO] [Thread-73099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:04.619 [DEBUG] [Thread-73099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] client lang: <none>
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] server lang: <none>
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] kex follows: False
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] Compression: none
2025-12-12T16:45:04.620 [DEBUG] [Thread-73099] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:45:04.678 [DEBUG] [Thread-73099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:45:04.679 [DEBUG] [Thread-73099] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:45:04.679 [DEBUG] [Thread-73099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:45:04.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:45:04.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:45:04.739 [DEBUG] [Thread-73099] [transport.py] [_log()] userauth is OK
2025-12-12T16:45:04.739 [DEBUG] [Thread-73099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:45:04.739 [DEBUG] [Thread-73099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:45:04.739 [DEBUG] [Thread-73099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:45:04.739 [DEBUG] [Thread-73099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:45:04.758 [INFO] [Thread-73099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:45:04.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:45:04.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:45:05.612 [DEBUG] [Thread-73099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:45:05.612 [DEBUG] [Thread-73099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:45:05.659 [DEBUG] [Thread-73099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:45:05.659 [DEBUG] [Thread-73099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:45:05.668 [DEBUG] [Thread-73099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:45:05.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:45: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')
2025-12-12T16:45:05.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:45:05.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:45:05.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:45:05.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:45:05.700 [DEBUG] [Thread-73099] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:45:12.018 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:12.018 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:13.792 [DEBUG] [Thread-73101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:28.827 [DEBUG] [Thread-73102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:45:35.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:45:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:45:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 45, 16), 20.2, 25.6, 0.0, 42.2, 18.92, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:45:36.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:45:16
2025-12-12T16:45:36.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:45:36.700 [DEBUG] [Thread-73103] [transport.py] [_log()] starting thread (client mode): 0xfabc53c0
2025-12-12T16:45:36.700 [DEBUG] [Thread-73103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:45:36.720 [DEBUG] [Thread-73103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:45:36.721 [INFO] [Thread-73103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:45:36.724 [DEBUG] [Thread-73103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] client lang: <none>
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] server lang: <none>
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] kex follows: False
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] Compression: none
2025-12-12T16:45:36.725 [DEBUG] [Thread-73103] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:45:36.744 [DEBUG] [Thread-73103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:45:36.745 [DEBUG] [Thread-73103] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:45:36.746 [DEBUG] [Thread-73103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:45:36.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:45:36.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:45:36.748 [DEBUG] [Thread-73103] [transport.py] [_log()] userauth is OK
2025-12-12T16:45:36.748 [DEBUG] [Thread-73103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:45:36.748 [DEBUG] [Thread-73103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:45:36.748 [DEBUG] [Thread-73103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:45:36.748 [DEBUG] [Thread-73103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:45:36.774 [INFO] [Thread-73103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:45:36.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:45:37.555 [DEBUG] [Thread-73103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:45:37.555 [DEBUG] [Thread-73103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:45:37.556 [DEBUG] [Thread-73103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:45:37.596 [DEBUG] [Thread-73103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:45:37.596 [DEBUG] [Thread-73103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:45:37.599 [DEBUG] [Thread-73103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:45:37.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:45:37.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:45:37.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:45:37.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:45:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:45:37.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:45:37.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:45:37.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:45:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:45:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.614687 -999.00  +19.00  45.48     29   +1.00 1 1 2 1 1   888    0 18.15 42.10 ----- 38.3 45.5 304.8 51.4 22.2 -26.7 22.1 -27.8 22.8 -28.7 23.2 -24.5
2025-12-12T16:45:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:45:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:45:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.614687
2025-12-12T16:45:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:45:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:45:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:45:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:45:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:45:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:45:16', tmtdew=20.2, humidity=25.6, cloud=0.0, wind=42.2, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:45:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:45:37.622 [DEBUG] [Thread-73103] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:45:37.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:45:37.717 [DEBUG] [Thread-73106] [transport.py] [_log()] starting thread (client mode): 0xf81c18d0
2025-12-12T16:45:37.718 [DEBUG] [Thread-73106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:45:37.732 [DEBUG] [Thread-73106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:45:37.732 [INFO] [Thread-73106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:45:37.739 [DEBUG] [Thread-73106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:45:37.739 [DEBUG] [Thread-73106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] client lang: <none>
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] server lang: <none>
2025-12-12T16:45:37.740 [DEBUG] [Thread-73106] [transport.py] [_log()] kex follows: False
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] Compression: none
2025-12-12T16:45:37.741 [DEBUG] [Thread-73106] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:45:37.799 [DEBUG] [Thread-73106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:45:37.799 [DEBUG] [Thread-73106] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:45:37.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:45:37.800 [DEBUG] [Thread-73106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:45:37.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:45:37.859 [DEBUG] [Thread-73106] [transport.py] [_log()] userauth is OK
2025-12-12T16:45:37.860 [DEBUG] [Thread-73106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:45:37.860 [DEBUG] [Thread-73106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:45:37.860 [DEBUG] [Thread-73106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:45:37.860 [DEBUG] [Thread-73106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:45:37.882 [INFO] [Thread-73106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:45:37.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:45:37.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:45:38.758 [DEBUG] [Thread-73106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:45:38.759 [DEBUG] [Thread-73106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:45:38.806 [DEBUG] [Thread-73106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:45:38.806 [DEBUG] [Thread-73106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:45:38.815 [DEBUG] [Thread-73106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:45:38.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:45:38.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:45:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:45:38.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:45:38.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:45:38.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:45:38.849 [DEBUG] [Thread-73106] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:45:43.857 [DEBUG] [Thread-73108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:54.806 [DEBUG] [Thread-73109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:45:58.906 [DEBUG] [Thread-73110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:46:08.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:46:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:46:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 45, 48), 20.72, 24.31, 0.0, 37.92, 18.74, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:46:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:45:48
2025-12-12T16:46:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:46:09.835 [DEBUG] [Thread-73111] [transport.py] [_log()] starting thread (client mode): 0xf81e6440
2025-12-12T16:46:09.835 [DEBUG] [Thread-73111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:46:09.854 [DEBUG] [Thread-73111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:46:09.854 [INFO] [Thread-73111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:46:09.857 [DEBUG] [Thread-73111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:46:09.857 [DEBUG] [Thread-73111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:46:09.857 [DEBUG] [Thread-73111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] client lang: <none>
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] server lang: <none>
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] kex follows: False
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] Compression: none
2025-12-12T16:46:09.858 [DEBUG] [Thread-73111] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:46:09.875 [DEBUG] [Thread-73111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:46:09.876 [DEBUG] [Thread-73111] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:46:09.876 [DEBUG] [Thread-73111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:46:09.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:46:09.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:46:09.878 [DEBUG] [Thread-73111] [transport.py] [_log()] userauth is OK
2025-12-12T16:46:09.878 [DEBUG] [Thread-73111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:46:09.878 [DEBUG] [Thread-73111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:46:09.878 [DEBUG] [Thread-73111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:46:09.878 [DEBUG] [Thread-73111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:46:09.893 [INFO] [Thread-73111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:46:09.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:46:10.492 [DEBUG] [Thread-73111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:46:10.492 [DEBUG] [Thread-73111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:46:10.493 [DEBUG] [Thread-73111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:46:10.534 [DEBUG] [Thread-73111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:46:10.534 [DEBUG] [Thread-73111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:46:10.536 [DEBUG] [Thread-73111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:46:10.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:46:10.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:46:10.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:46:10.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:46:10.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:46:10.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:46:10.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:46:10.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:46:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:46:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.615023 -999.00  +19.00  31.43     29   +0.80 1 1 2 1 1   888    0 18.35 44.59 ----- 33.8 31.4 295.0 43.5 22.1 -27.4 22.1 -27.0 22.8 -25.8 23.1 -24.6
2025-12-12T16:46:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:46:10.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:46:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.615023
2025-12-12T16:46:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:46:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:46:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:46:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:46:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:46:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:45:48', tmtdew=20.72, humidity=24.31, cloud=0.0, wind=37.92, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:45:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:46:10.561 [DEBUG] [Thread-73111] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:46:10.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:46:10.659 [DEBUG] [Thread-73114] [transport.py] [_log()] starting thread (client mode): 0xf81f0910
2025-12-12T16:46:10.659 [DEBUG] [Thread-73114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:46:10.677 [DEBUG] [Thread-73114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:46:10.678 [INFO] [Thread-73114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:46:10.686 [DEBUG] [Thread-73114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:46:10.686 [DEBUG] [Thread-73114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:46:10.686 [DEBUG] [Thread-73114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:46:10.686 [DEBUG] [Thread-73114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:10.686 [DEBUG] [Thread-73114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] client lang: <none>
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] server lang: <none>
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] kex follows: False
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:46:10.687 [DEBUG] [Thread-73114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:46:10.688 [DEBUG] [Thread-73114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:46:10.688 [DEBUG] [Thread-73114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:46:10.688 [DEBUG] [Thread-73114] [transport.py] [_log()] Compression: none
2025-12-12T16:46:10.688 [DEBUG] [Thread-73114] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:46:10.746 [DEBUG] [Thread-73114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:46:10.747 [DEBUG] [Thread-73114] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:46:10.747 [DEBUG] [Thread-73114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:46:10.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:46:10.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:46:10.802 [DEBUG] [Thread-73114] [transport.py] [_log()] userauth is OK
2025-12-12T16:46:10.802 [DEBUG] [Thread-73114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:46:10.802 [DEBUG] [Thread-73114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:46:10.802 [DEBUG] [Thread-73114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:46:10.802 [DEBUG] [Thread-73114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:46:10.821 [INFO] [Thread-73114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:46:10.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:46:10.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:46:11.642 [DEBUG] [Thread-73114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:46:11.642 [DEBUG] [Thread-73114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:46:11.690 [DEBUG] [Thread-73114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:46:11.690 [DEBUG] [Thread-73114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:46:11.699 [DEBUG] [Thread-73114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:46:11.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:46:11.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:46:11.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:46:11.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:46:11.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:46:11.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:46:11.733 [DEBUG] [Thread-73114] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:46:12.158 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:12.159 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:13.936 [DEBUG] [Thread-73116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:28.979 [DEBUG] [Thread-73117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:41.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:46:41.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:46:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:46:42.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 46, 20), 20.76, 24.24, 0.0, 39.63, 18.72, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:46:42.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:46:20
2025-12-12T16:46:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:46:42.701 [DEBUG] [Thread-73118] [transport.py] [_log()] starting thread (client mode): 0xf81e5d80
2025-12-12T16:46:42.701 [DEBUG] [Thread-73118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:46:42.722 [DEBUG] [Thread-73118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:46:42.722 [INFO] [Thread-73118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:46:42.725 [DEBUG] [Thread-73118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:46:42.725 [DEBUG] [Thread-73118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:46:42.725 [DEBUG] [Thread-73118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:46:42.725 [DEBUG] [Thread-73118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:42.725 [DEBUG] [Thread-73118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:42.725 [DEBUG] [Thread-73118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] client lang: <none>
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] server lang: <none>
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] kex follows: False
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] Compression: none
2025-12-12T16:46:42.726 [DEBUG] [Thread-73118] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:46:42.749 [DEBUG] [Thread-73118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:46:42.750 [DEBUG] [Thread-73118] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:46:42.750 [DEBUG] [Thread-73118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:46:42.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:46:42.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:46:42.752 [DEBUG] [Thread-73118] [transport.py] [_log()] userauth is OK
2025-12-12T16:46:42.752 [DEBUG] [Thread-73118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:46:42.752 [DEBUG] [Thread-73118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:46:42.752 [DEBUG] [Thread-73118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:46:42.752 [DEBUG] [Thread-73118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:46:42.765 [INFO] [Thread-73118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:46:42.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:46:43.468 [DEBUG] [Thread-73118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:46:43.469 [DEBUG] [Thread-73118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:46:43.469 [DEBUG] [Thread-73118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:46:43.510 [DEBUG] [Thread-73118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:46:43.510 [DEBUG] [Thread-73118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:46:43.513 [DEBUG] [Thread-73118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:46:43.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:46:43.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:46:43.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:46:43.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:46:43.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:46:43.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:46:43.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:46:43.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:46:43.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:46:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.615370 -999.00  +18.90  36.22     29   +0.70 1 1 2 1 1   888    0 18.63 45.38 ----- 48.7 36.2 314.5 41.1 22.1 -26.9 22.1 -26.6 22.8 -23.1 23.1 -25.3
2025-12-12T16:46:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:46:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:46:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.615370
2025-12-12T16:46:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:46:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:46:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:46:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:46:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:46:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:46:20', tmtdew=20.76, humidity=24.24, cloud=0.0, wind=39.63, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:46:07.968', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:46:43.539 [DEBUG] [Thread-73118] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:46:43.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:46:43.626 [DEBUG] [Thread-73121] [transport.py] [_log()] starting thread (client mode): 0xf57024d0
2025-12-12T16:46:43.627 [DEBUG] [Thread-73121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:46:43.641 [DEBUG] [Thread-73121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:46:43.641 [INFO] [Thread-73121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:46:43.649 [DEBUG] [Thread-73121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] client lang: <none>
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] server lang: <none>
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] kex follows: False
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] Compression: none
2025-12-12T16:46:43.650 [DEBUG] [Thread-73121] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:46:43.709 [DEBUG] [Thread-73121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:46:43.709 [DEBUG] [Thread-73121] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:46:43.710 [DEBUG] [Thread-73121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:46:43.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:46:43.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:46:43.766 [DEBUG] [Thread-73121] [transport.py] [_log()] userauth is OK
2025-12-12T16:46:43.766 [DEBUG] [Thread-73121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:46:43.766 [DEBUG] [Thread-73121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:46:43.766 [DEBUG] [Thread-73121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:46:43.766 [DEBUG] [Thread-73121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:46:43.785 [INFO] [Thread-73121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:46:43.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:46:43.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:46:44.005 [DEBUG] [Thread-73123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:44.644 [DEBUG] [Thread-73121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:46:44.644 [DEBUG] [Thread-73121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:46:44.692 [DEBUG] [Thread-73121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:46:44.692 [DEBUG] [Thread-73121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:46:44.701 [DEBUG] [Thread-73121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:46:44.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:46:44.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:46:44.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:46:44.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:46:44.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:46:44.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:46:44.734 [DEBUG] [Thread-73121] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:46:54.857 [DEBUG] [Thread-73124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:46:59.050 [DEBUG] [Thread-73125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:12.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:12.301 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:14.076 [DEBUG] [Thread-73126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:47:14.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:47:14.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:47:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 46, 52), 21.21, 23.46, 0.0, 47.57, 18.84, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:47:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:46:52
2025-12-12T16:47:15.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:47:15.720 [DEBUG] [Thread-73127] [transport.py] [_log()] starting thread (client mode): 0xf5789bd0
2025-12-12T16:47:15.720 [DEBUG] [Thread-73127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:47:15.747 [DEBUG] [Thread-73127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:47:15.747 [INFO] [Thread-73127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:47:15.751 [DEBUG] [Thread-73127] [transport.py] [_log()] client lang: <none>
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] server lang: <none>
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] kex follows: False
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] Compression: none
2025-12-12T16:47:15.752 [DEBUG] [Thread-73127] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:47:15.768 [DEBUG] [Thread-73127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:47:15.768 [DEBUG] [Thread-73127] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:47:15.769 [DEBUG] [Thread-73127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:47:15.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:47:15.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:47:15.770 [DEBUG] [Thread-73127] [transport.py] [_log()] userauth is OK
2025-12-12T16:47:15.770 [DEBUG] [Thread-73127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:47:15.770 [DEBUG] [Thread-73127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:47:15.771 [DEBUG] [Thread-73127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:47:15.771 [DEBUG] [Thread-73127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:47:15.793 [INFO] [Thread-73127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:47:15.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:47:16.438 [DEBUG] [Thread-73127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:47:16.438 [DEBUG] [Thread-73127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:47:16.439 [DEBUG] [Thread-73127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:47:16.479 [DEBUG] [Thread-73127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:47:16.479 [DEBUG] [Thread-73127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:47:16.481 [DEBUG] [Thread-73127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:47:16.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:47:16.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:47:16.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:47:16.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:47:16.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:47:16.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:47:16.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:47:16.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:47:16.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:47:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.615718 -999.00  +18.50  40.59     29   +0.50 1 1 2 1 1   888    0 18.53 46.41 ----- 52.7 40.6 303.8 62.9 22.0 -27.3 22.0 -27.0 22.6 -24.8 23.1 -25.5
2025-12-12T16:47:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:47:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:47:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.615718
2025-12-12T16:47:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:47:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:47:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:47:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:47:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:47:16.506 [DEBUG] [Thread-73127] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:47:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:46:52', tmtdew=21.21, humidity=23.46, cloud=0.0, wind=47.57, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:46:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:47:16.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:47:16.603 [DEBUG] [Thread-73130] [transport.py] [_log()] starting thread (client mode): 0xf574c910
2025-12-12T16:47:16.604 [DEBUG] [Thread-73130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:47:16.623 [DEBUG] [Thread-73130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:47:16.623 [INFO] [Thread-73130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:47:16.634 [DEBUG] [Thread-73130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:47:16.635 [DEBUG] [Thread-73130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] client lang: <none>
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] server lang: <none>
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] kex follows: False
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:47:16.636 [DEBUG] [Thread-73130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:47:16.637 [DEBUG] [Thread-73130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:47:16.637 [DEBUG] [Thread-73130] [transport.py] [_log()] Compression: none
2025-12-12T16:47:16.637 [DEBUG] [Thread-73130] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:47:16.693 [DEBUG] [Thread-73130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:47:16.694 [DEBUG] [Thread-73130] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:47:16.694 [DEBUG] [Thread-73130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:47:16.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:47:16.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:47:16.749 [DEBUG] [Thread-73130] [transport.py] [_log()] userauth is OK
2025-12-12T16:47:16.749 [DEBUG] [Thread-73130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:47:16.749 [DEBUG] [Thread-73130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:47:16.749 [DEBUG] [Thread-73130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:47:16.749 [DEBUG] [Thread-73130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:47:16.768 [INFO] [Thread-73130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:47:16.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:47:16.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:47:17.647 [DEBUG] [Thread-73130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:47:17.647 [DEBUG] [Thread-73130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:47:17.696 [DEBUG] [Thread-73130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:47:17.697 [DEBUG] [Thread-73130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:47:17.705 [DEBUG] [Thread-73130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:47:17.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:47:17.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:47:17.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:47:17.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:47:17.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:47:17.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:47:17.739 [DEBUG] [Thread-73130] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:47:29.103 [DEBUG] [Thread-73132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:44.154 [DEBUG] [Thread-73133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:47:47.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:47:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:47:48.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 47, 24), 21.46, 23.14, 0.0, 49.3, 19.22, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:47:48.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:47:24
2025-12-12T16:47:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:47:48.759 [DEBUG] [Thread-73134] [transport.py] [_log()] starting thread (client mode): 0xf5703fd0
2025-12-12T16:47:48.759 [DEBUG] [Thread-73134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:47:48.780 [DEBUG] [Thread-73134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:47:48.780 [INFO] [Thread-73134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] client lang: <none>
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] server lang: <none>
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] kex follows: False
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:47:48.783 [DEBUG] [Thread-73134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:47:48.784 [DEBUG] [Thread-73134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:47:48.784 [DEBUG] [Thread-73134] [transport.py] [_log()] Compression: none
2025-12-12T16:47:48.784 [DEBUG] [Thread-73134] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:47:48.793 [DEBUG] [Thread-73134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:47:48.793 [DEBUG] [Thread-73134] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:47:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:47:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:47:48.794 [DEBUG] [Thread-73134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:47:48.794 [DEBUG] [Thread-73134] [transport.py] [_log()] userauth is OK
2025-12-12T16:47:48.795 [DEBUG] [Thread-73134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:47:48.795 [DEBUG] [Thread-73134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:47:48.795 [DEBUG] [Thread-73134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:47:48.795 [DEBUG] [Thread-73134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:47:48.814 [INFO] [Thread-73134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:47:48.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:47:49.482 [DEBUG] [Thread-73134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:47:49.482 [DEBUG] [Thread-73134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:47:49.482 [DEBUG] [Thread-73134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:47:49.523 [DEBUG] [Thread-73134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:47:49.523 [DEBUG] [Thread-73134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:47:49.525 [DEBUG] [Thread-73134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:47:49.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:47:49.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:47:49.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:47:49.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:47:49.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:47:49.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:47:49.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.616065 -999.00  +19.10  38.35     29   +0.70 1 1 2 1 1   888    0 18.72 51.84 ----- 34.6 38.4 310.2 61.2 22.0 -26.5 22.0 -26.2 22.6 -23.5 23.0 -24.6
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.616065
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:47:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:47:24', tmtdew=21.46, humidity=23.14, cloud=0.0, wind=49.3, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:47:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:47:49.544 [DEBUG] [Thread-73134] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:47:49.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:47:49.630 [DEBUG] [Thread-73137] [transport.py] [_log()] starting thread (client mode): 0xf575cac0
2025-12-12T16:47:49.630 [DEBUG] [Thread-73137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:47:49.645 [DEBUG] [Thread-73137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:47:49.645 [INFO] [Thread-73137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] client lang: <none>
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] server lang: <none>
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] kex follows: False
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] Compression: none
2025-12-12T16:47:49.653 [DEBUG] [Thread-73137] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:47:49.707 [DEBUG] [Thread-73137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:47:49.708 [DEBUG] [Thread-73137] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:47:49.708 [DEBUG] [Thread-73137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:47:49.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:47:49.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:47:49.765 [DEBUG] [Thread-73137] [transport.py] [_log()] userauth is OK
2025-12-12T16:47:49.765 [DEBUG] [Thread-73137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:47:49.765 [DEBUG] [Thread-73137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:47:49.765 [DEBUG] [Thread-73137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:47:49.765 [DEBUG] [Thread-73137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:47:49.782 [INFO] [Thread-73137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:47:49.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:47:49.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:47:50.651 [DEBUG] [Thread-73137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:47:50.651 [DEBUG] [Thread-73137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:47:50.699 [DEBUG] [Thread-73137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:47:50.699 [DEBUG] [Thread-73137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:47:50.708 [DEBUG] [Thread-73137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:47:50.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:47:50.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:47:50.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:47:50.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:47:50.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:47:50.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:47:50.744 [DEBUG] [Thread-73137] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:47:54.925 [DEBUG] [Thread-73139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:47:59.178 [DEBUG] [Thread-73140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:12.444 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:12.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:14.223 [DEBUG] [Thread-73141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:20.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:48:20.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:48:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:48:21.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 47, 56), 21.81, 23.03, 0.0, 37.48, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:48:21.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:47:56
2025-12-12T16:48:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:48:21.725 [DEBUG] [Thread-73142] [transport.py] [_log()] starting thread (client mode): 0xf57037c0
2025-12-12T16:48:21.725 [DEBUG] [Thread-73142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:48:21.744 [DEBUG] [Thread-73142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:48:21.744 [INFO] [Thread-73142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:48:21.747 [DEBUG] [Thread-73142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:48:21.747 [DEBUG] [Thread-73142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:48:21.747 [DEBUG] [Thread-73142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] client lang: <none>
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] server lang: <none>
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] kex follows: False
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] Compression: none
2025-12-12T16:48:21.748 [DEBUG] [Thread-73142] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:48:21.765 [DEBUG] [Thread-73142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:48:21.765 [DEBUG] [Thread-73142] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:48:21.766 [DEBUG] [Thread-73142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:48:21.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:48:21.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:48:21.768 [DEBUG] [Thread-73142] [transport.py] [_log()] userauth is OK
2025-12-12T16:48:21.768 [DEBUG] [Thread-73142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:48:21.768 [DEBUG] [Thread-73142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:48:21.768 [DEBUG] [Thread-73142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:48:21.768 [DEBUG] [Thread-73142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:48:21.792 [INFO] [Thread-73142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:48:21.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:48:22.439 [DEBUG] [Thread-73142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:48:22.439 [DEBUG] [Thread-73142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:48:22.440 [DEBUG] [Thread-73142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:48:22.480 [DEBUG] [Thread-73142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:48:22.480 [DEBUG] [Thread-73142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:48:22.483 [DEBUG] [Thread-73142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:48:22.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:48:22.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:48:22.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:48:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:48:22.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:48:22.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:48:22.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.616412 -999.00  +19.20  42.39     28   +0.60 1 1 2 1 1   888    0 18.63 58.25 ----- 34.8 42.4 292.0 58.9 22.0 -26.2 22.1 -26.9 22.8 -23.5 23.1 -24.6
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.616412
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:48:22.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:47:56', tmtdew=21.81, humidity=23.03, cloud=0.0, wind=37.48, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:47:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:48:22.504 [DEBUG] [Thread-73142] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:48:22.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:48:22.593 [DEBUG] [Thread-73145] [transport.py] [_log()] starting thread (client mode): 0xf57017b0
2025-12-12T16:48:22.593 [DEBUG] [Thread-73145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:48:22.607 [DEBUG] [Thread-73145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:48:22.608 [INFO] [Thread-73145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:48:22.615 [DEBUG] [Thread-73145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] client lang: <none>
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] server lang: <none>
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] kex follows: False
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] Compression: none
2025-12-12T16:48:22.616 [DEBUG] [Thread-73145] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:48:22.671 [DEBUG] [Thread-73145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:48:22.672 [DEBUG] [Thread-73145] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:48:22.672 [DEBUG] [Thread-73145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:48:22.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:48:22.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:48:22.729 [DEBUG] [Thread-73145] [transport.py] [_log()] userauth is OK
2025-12-12T16:48:22.729 [DEBUG] [Thread-73145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:48:22.729 [DEBUG] [Thread-73145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:48:22.729 [DEBUG] [Thread-73145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:48:22.730 [DEBUG] [Thread-73145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:48:22.751 [INFO] [Thread-73145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:48:22.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:48:22.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:48:23.580 [DEBUG] [Thread-73145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:48:23.580 [DEBUG] [Thread-73145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:48:23.627 [DEBUG] [Thread-73145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:48:23.628 [DEBUG] [Thread-73145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:48:23.636 [DEBUG] [Thread-73145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:48:23.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:48:23.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:48:23.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:48:23.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:48:23.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:48:23.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:48:23.668 [DEBUG] [Thread-73145] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:48:29.251 [DEBUG] [Thread-73147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:44.298 [DEBUG] [Thread-73148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:48:53.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:48:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:48:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 48, 28), 22.31, 22.27, 0.0, 46.88, 19.92, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:48:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:48:28
2025-12-12T16:48:54.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:48:54.637 [DEBUG] [Thread-73149] [transport.py] [_log()] starting thread (client mode): 0xf5742230
2025-12-12T16:48:54.637 [DEBUG] [Thread-73149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:48:54.658 [DEBUG] [Thread-73149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:48:54.659 [INFO] [Thread-73149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:48:54.662 [DEBUG] [Thread-73149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] client lang: <none>
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] server lang: <none>
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] kex follows: False
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] Compression: none
2025-12-12T16:48:54.663 [DEBUG] [Thread-73149] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:48:54.680 [DEBUG] [Thread-73149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:48:54.680 [DEBUG] [Thread-73149] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:48:54.681 [DEBUG] [Thread-73149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:48:54.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:48:54.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:48:54.683 [DEBUG] [Thread-73149] [transport.py] [_log()] userauth is OK
2025-12-12T16:48:54.683 [DEBUG] [Thread-73149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:48:54.683 [DEBUG] [Thread-73149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:48:54.683 [DEBUG] [Thread-73149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:48:54.683 [DEBUG] [Thread-73149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:48:54.701 [INFO] [Thread-73149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:48:54.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:48:54.960 [DEBUG] [Thread-73151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:48:55.434 [DEBUG] [Thread-73149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:48:55.434 [DEBUG] [Thread-73149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:48:55.434 [DEBUG] [Thread-73149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:48:55.475 [DEBUG] [Thread-73149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:48:55.475 [DEBUG] [Thread-73149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:48:55.478 [DEBUG] [Thread-73149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:48:55.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:48:55.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:48:55.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:48:55.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:48:55.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:48:55.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:48:55.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:48:55.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:48:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:48:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.616759 -999.00  +19.80  34.17     28   +0.80 1 1 2 1 1   888    0 19.01 64.76 ----- 47.5 34.2 299.6 48.0 22.1 -26.4 22.2 -26.0 22.9 -23.2 23.2 -24.2
2025-12-12T16:48:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:48:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:48:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.616759
2025-12-12T16:48:55.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:48:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:48:55.502 [DEBUG] [Thread-73149] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:48:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:48:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:48:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:48:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:48:28', tmtdew=22.31, humidity=22.27, cloud=0.0, wind=46.88, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:48:07.978', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:48:55.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:48:55.600 [DEBUG] [Thread-73153] [transport.py] [_log()] starting thread (client mode): 0xfabc74c0
2025-12-12T16:48:55.600 [DEBUG] [Thread-73153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:48:55.614 [DEBUG] [Thread-73153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:48:55.614 [INFO] [Thread-73153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:48:55.622 [DEBUG] [Thread-73153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:48:55.622 [DEBUG] [Thread-73153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:48:55.622 [DEBUG] [Thread-73153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:48:55.622 [DEBUG] [Thread-73153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:55.622 [DEBUG] [Thread-73153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] client lang: <none>
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] server lang: <none>
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] kex follows: False
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:48:55.623 [DEBUG] [Thread-73153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:48:55.624 [DEBUG] [Thread-73153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:48:55.624 [DEBUG] [Thread-73153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:48:55.624 [DEBUG] [Thread-73153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:48:55.624 [DEBUG] [Thread-73153] [transport.py] [_log()] Compression: none
2025-12-12T16:48:55.624 [DEBUG] [Thread-73153] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:48:55.680 [DEBUG] [Thread-73153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:48:55.681 [DEBUG] [Thread-73153] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:48:55.681 [DEBUG] [Thread-73153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:48:55.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:48:55.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:48:55.736 [DEBUG] [Thread-73153] [transport.py] [_log()] userauth is OK
2025-12-12T16:48:55.737 [DEBUG] [Thread-73153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:48:55.737 [DEBUG] [Thread-73153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:48:55.737 [DEBUG] [Thread-73153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:48:55.737 [DEBUG] [Thread-73153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:48:55.756 [INFO] [Thread-73153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:48:55.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:48:55.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:48:56.595 [DEBUG] [Thread-73153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:48:56.596 [DEBUG] [Thread-73153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:48:56.644 [DEBUG] [Thread-73153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:48:56.644 [DEBUG] [Thread-73153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:48:56.652 [DEBUG] [Thread-73153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:48:56.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:48:56.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:48:56.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:48:56.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:48:56.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:48:56.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:48:56.685 [DEBUG] [Thread-73153] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:48:59.330 [DEBUG] [Thread-73155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:12.586 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:12.587 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:14.375 [DEBUG] [Thread-73156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:26.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:49:26.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:49:26.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:49:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 49), 22.22, 21.85, 0.0, 47.16, 19.32, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:49:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:49:00
2025-12-12T16:49:27.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:49:27.652 [DEBUG] [Thread-73157] [transport.py] [_log()] starting thread (client mode): 0xf574f790
2025-12-12T16:49:27.652 [DEBUG] [Thread-73157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:49:27.674 [DEBUG] [Thread-73157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:49:27.674 [INFO] [Thread-73157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:49:27.677 [DEBUG] [Thread-73157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:49:27.677 [DEBUG] [Thread-73157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] client lang: <none>
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] server lang: <none>
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] kex follows: False
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] Compression: none
2025-12-12T16:49:27.678 [DEBUG] [Thread-73157] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:49:27.694 [DEBUG] [Thread-73157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:49:27.695 [DEBUG] [Thread-73157] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:49:27.695 [DEBUG] [Thread-73157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:49:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:49:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:49:27.696 [DEBUG] [Thread-73157] [transport.py] [_log()] userauth is OK
2025-12-12T16:49:27.697 [DEBUG] [Thread-73157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:49:27.697 [DEBUG] [Thread-73157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:49:27.697 [DEBUG] [Thread-73157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:49:27.697 [DEBUG] [Thread-73157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:49:27.716 [INFO] [Thread-73157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:49:27.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:49:28.400 [DEBUG] [Thread-73157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:49:28.400 [DEBUG] [Thread-73157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:49:28.401 [DEBUG] [Thread-73157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:49:28.441 [DEBUG] [Thread-73157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:49:28.441 [DEBUG] [Thread-73157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:49:28.444 [DEBUG] [Thread-73157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:49:28.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:49:28.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:49:28.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:49:28.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:49:28.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:49:28.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:49:28.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:49:28.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:49:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:49:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.617118 -999.00  +19.20  36.09     28   +0.20 1 1 2 1 1   888    0 19.54 72.48 ----- 39.6 36.1 297.8 54.4 22.1 -27.9 22.1 -27.6 22.8 -24.3 23.1 -25.8
2025-12-12T16:49:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:49:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:49:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.617118
2025-12-12T16:49:28.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:49:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:49:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:49:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:49:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:49:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:49:00', tmtdew=22.22, humidity=21.85, cloud=0.0, wind=47.16, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:48:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:49:28.470 [DEBUG] [Thread-73157] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:49:28.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:49:28.568 [DEBUG] [Thread-73160] [transport.py] [_log()] starting thread (client mode): 0xf574c250
2025-12-12T16:49:28.568 [DEBUG] [Thread-73160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:49:28.583 [DEBUG] [Thread-73160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:49:28.583 [INFO] [Thread-73160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:49:28.591 [DEBUG] [Thread-73160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:49:28.591 [DEBUG] [Thread-73160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:49:28.591 [DEBUG] [Thread-73160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:49:28.591 [DEBUG] [Thread-73160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:49:28.591 [DEBUG] [Thread-73160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:49:28.591 [DEBUG] [Thread-73160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] client lang: <none>
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] server lang: <none>
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] kex follows: False
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] Compression: none
2025-12-12T16:49:28.592 [DEBUG] [Thread-73160] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:49:28.646 [DEBUG] [Thread-73160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:49:28.647 [DEBUG] [Thread-73160] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:49:28.647 [DEBUG] [Thread-73160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:49:28.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:49:28.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:49:28.704 [DEBUG] [Thread-73160] [transport.py] [_log()] userauth is OK
2025-12-12T16:49:28.704 [DEBUG] [Thread-73160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:49:28.704 [DEBUG] [Thread-73160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:49:28.705 [DEBUG] [Thread-73160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:49:28.705 [DEBUG] [Thread-73160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:49:28.724 [INFO] [Thread-73160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:49:28.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:49:28.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:49:29.404 [DEBUG] [Thread-73162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:29.571 [DEBUG] [Thread-73160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:49:29.571 [DEBUG] [Thread-73160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:49:29.619 [DEBUG] [Thread-73160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:49:29.619 [DEBUG] [Thread-73160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:49:29.628 [DEBUG] [Thread-73160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:49:29.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:49:29.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:49:29.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:49:29.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:49:29.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:49:29.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:49:29.661 [DEBUG] [Thread-73160] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:49:44.446 [DEBUG] [Thread-73163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:54.996 [DEBUG] [Thread-73164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:59.474 [DEBUG] [Thread-73165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:49:59.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:49:59.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:49:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:50:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 49, 32), 22.09, 22.03, 0.0, 45.82, 19.25, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:50:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:49:32
2025-12-12T16:50:00.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:50:00.619 [DEBUG] [Thread-73166] [transport.py] [_log()] starting thread (client mode): 0xf574e2c0
2025-12-12T16:50:00.619 [DEBUG] [Thread-73166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:50:00.640 [DEBUG] [Thread-73166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:50:00.641 [INFO] [Thread-73166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:50:00.644 [DEBUG] [Thread-73166] [transport.py] [_log()] client lang: <none>
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] server lang: <none>
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] kex follows: False
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] Compression: none
2025-12-12T16:50:00.645 [DEBUG] [Thread-73166] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:50:00.663 [DEBUG] [Thread-73166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:50:00.663 [DEBUG] [Thread-73166] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:50:00.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:50:00.664 [DEBUG] [Thread-73166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:50:00.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:50:00.666 [DEBUG] [Thread-73166] [transport.py] [_log()] userauth is OK
2025-12-12T16:50:00.666 [DEBUG] [Thread-73166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:50:00.666 [DEBUG] [Thread-73166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:50:00.666 [DEBUG] [Thread-73166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:50:00.667 [DEBUG] [Thread-73166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:50:00.701 [INFO] [Thread-73166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:50:00.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:50:01.430 [DEBUG] [Thread-73166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:50:01.430 [DEBUG] [Thread-73166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:50:01.430 [DEBUG] [Thread-73166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:50:01.471 [DEBUG] [Thread-73166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:50:01.472 [DEBUG] [Thread-73166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:50:01.474 [DEBUG] [Thread-73166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:50:01.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:50:01.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:50:01.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:50:01.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:50:01.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:50:01.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:50:01.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:50:01.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:50:01.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:50:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.617812 -999.00  +18.70  44.21     29   +0.30 1 1 2 1 1   888    0 19.86 80.81 ----- 48.9 44.2 297.4 57.0 21.9 -28.3 22.0 -27.2 22.6 -24.5 23.1 -24.6
2025-12-12T16:50:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:50:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:50:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.617812
2025-12-12T16:50:01.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:50:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:50:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:50:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:50:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:50:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:49:32', tmtdew=22.09, humidity=22.03, cloud=0.0, wind=45.82, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:49:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:50:01.502 [DEBUG] [Thread-73166] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:50:01.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:50:01.598 [DEBUG] [Thread-73169] [transport.py] [_log()] starting thread (client mode): 0xf575f3a0
2025-12-12T16:50:01.598 [DEBUG] [Thread-73169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:50:01.613 [DEBUG] [Thread-73169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:50:01.613 [INFO] [Thread-73169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:50:01.620 [DEBUG] [Thread-73169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] client lang: <none>
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] server lang: <none>
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] kex follows: False
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] Compression: none
2025-12-12T16:50:01.621 [DEBUG] [Thread-73169] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:50:01.678 [DEBUG] [Thread-73169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:50:01.678 [DEBUG] [Thread-73169] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:50:01.678 [DEBUG] [Thread-73169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:50:01.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:50:01.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:50:01.736 [DEBUG] [Thread-73169] [transport.py] [_log()] userauth is OK
2025-12-12T16:50:01.736 [DEBUG] [Thread-73169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:50:01.736 [DEBUG] [Thread-73169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:50:01.736 [DEBUG] [Thread-73169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:50:01.737 [DEBUG] [Thread-73169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:50:01.760 [INFO] [Thread-73169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:50:01.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:50:01.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:50:02.607 [DEBUG] [Thread-73169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:50:02.608 [DEBUG] [Thread-73169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:50:02.657 [DEBUG] [Thread-73169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:50:02.657 [DEBUG] [Thread-73169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:50:02.666 [DEBUG] [Thread-73169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:50:02.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:50: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')
2025-12-12T16:50:02.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
2025-12-12T16:50:02.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:50:02.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:50:02.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:50:02.700 [DEBUG] [Thread-73169] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:50:12.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:50:12.728 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:50:14.504 [DEBUG] [Thread-73171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:50:29.552 [DEBUG] [Thread-73172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:50:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:50:32.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:50:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:50:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 50, 4), 22.08, 22.08, 0.0, 46.77, 19.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T16:50:33.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:50:04
2025-12-12T16:50:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:50:33.686 [DEBUG] [Thread-73173] [transport.py] [_log()] starting thread (client mode): 0xf5701ae0
2025-12-12T16:50:33.686 [DEBUG] [Thread-73173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:50:33.705 [DEBUG] [Thread-73173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:50:33.705 [INFO] [Thread-73173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] client lang: <none>
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] server lang: <none>
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] kex follows: False
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] Compression: none
2025-12-12T16:50:33.709 [DEBUG] [Thread-73173] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:50:33.725 [DEBUG] [Thread-73173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:50:33.725 [DEBUG] [Thread-73173] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:50:33.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:50:33.726 [DEBUG] [Thread-73173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:50:33.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:50:33.729 [DEBUG] [Thread-73173] [transport.py] [_log()] userauth is OK
2025-12-12T16:50:33.729 [DEBUG] [Thread-73173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:50:33.729 [DEBUG] [Thread-73173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:50:33.729 [DEBUG] [Thread-73173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:50:33.729 [DEBUG] [Thread-73173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:50:33.748 [INFO] [Thread-73173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:50:33.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:50:34.402 [DEBUG] [Thread-73173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:50:34.402 [DEBUG] [Thread-73173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:50:34.403 [DEBUG] [Thread-73173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:50:34.443 [DEBUG] [Thread-73173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:50:34.443 [DEBUG] [Thread-73173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:50:34.446 [DEBUG] [Thread-73173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:50:34.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:50:34.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:50:34.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:50:34.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:50:34.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:50:34.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:50:34.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:50:34.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:50:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:50:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.618159 -999.00  +19.00  48.25     29   +0.60 1 1 2 1 1   888    0 19.86 80.96 ----- 44.5 48.2 307.2 55.2 22.0 -26.6 22.0 -27.1 22.7 -27.7 22.9 -24.9
2025-12-12T16:50:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:50:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:50:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.618159
2025-12-12T16:50:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:50:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:50:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:50:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:50:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:50:34.473 [DEBUG] [Thread-73173] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:50:34.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:50:04', tmtdew=22.08, humidity=22.08, cloud=0.0, wind=46.77, temperature=19.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:50:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:50:34.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:50:34.570 [DEBUG] [Thread-73176] [transport.py] [_log()] starting thread (client mode): 0xf5703190
2025-12-12T16:50:34.571 [DEBUG] [Thread-73176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:50:34.592 [DEBUG] [Thread-73176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:50:34.592 [INFO] [Thread-73176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:50:34.602 [DEBUG] [Thread-73176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:50:34.602 [DEBUG] [Thread-73176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] client lang: <none>
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] server lang: <none>
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] kex follows: False
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:50:34.603 [DEBUG] [Thread-73176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:50:34.604 [DEBUG] [Thread-73176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:50:34.604 [DEBUG] [Thread-73176] [transport.py] [_log()] Compression: none
2025-12-12T16:50:34.604 [DEBUG] [Thread-73176] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:50:34.659 [DEBUG] [Thread-73176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:50:34.660 [DEBUG] [Thread-73176] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:50:34.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:50:34.661 [DEBUG] [Thread-73176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:50:34.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:50:34.715 [DEBUG] [Thread-73176] [transport.py] [_log()] userauth is OK
2025-12-12T16:50:34.716 [DEBUG] [Thread-73176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:50:34.716 [DEBUG] [Thread-73176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:50:34.716 [DEBUG] [Thread-73176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:50:34.716 [DEBUG] [Thread-73176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:50:34.734 [INFO] [Thread-73176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:50:34.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:50:34.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:50:35.563 [DEBUG] [Thread-73176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:50:35.564 [DEBUG] [Thread-73176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:50:35.612 [DEBUG] [Thread-73176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:50:35.612 [DEBUG] [Thread-73176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:50:35.624 [DEBUG] [Thread-73176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:50:35.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:50:35.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:50:35.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:50:35.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:50:35.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:50:35.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:50:35.665 [DEBUG] [Thread-73176] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:50:44.579 [DEBUG] [Thread-73178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:50:55.031 [DEBUG] [Thread-73179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:50:59.618 [DEBUG] [Thread-73180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:05.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:51:05.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:51:05.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:51:06.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 50, 36), 21.78, 22.84, 0.0, 38.89, 19.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:51:06.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:50:36
2025-12-12T16:51:06.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:51:06.630 [DEBUG] [Thread-73181] [transport.py] [_log()] starting thread (client mode): 0xf574f4c0
2025-12-12T16:51:06.630 [DEBUG] [Thread-73181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:51:06.649 [DEBUG] [Thread-73181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:51:06.649 [INFO] [Thread-73181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] client lang: <none>
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] server lang: <none>
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] kex follows: False
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:51:06.652 [DEBUG] [Thread-73181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:51:06.653 [DEBUG] [Thread-73181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:51:06.653 [DEBUG] [Thread-73181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:51:06.653 [DEBUG] [Thread-73181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:51:06.653 [DEBUG] [Thread-73181] [transport.py] [_log()] Compression: none
2025-12-12T16:51:06.653 [DEBUG] [Thread-73181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:51:06.670 [DEBUG] [Thread-73181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:51:06.670 [DEBUG] [Thread-73181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:51:06.671 [DEBUG] [Thread-73181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:51:06.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:51:06.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:51:06.673 [DEBUG] [Thread-73181] [transport.py] [_log()] userauth is OK
2025-12-12T16:51:06.673 [DEBUG] [Thread-73181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:51:06.673 [DEBUG] [Thread-73181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:51:06.673 [DEBUG] [Thread-73181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:51:06.673 [DEBUG] [Thread-73181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:51:06.697 [INFO] [Thread-73181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:51:06.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:51:07.407 [DEBUG] [Thread-73181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:51:07.407 [DEBUG] [Thread-73181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:51:07.408 [DEBUG] [Thread-73181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:51:07.448 [DEBUG] [Thread-73181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:51:07.448 [DEBUG] [Thread-73181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:51:07.451 [DEBUG] [Thread-73181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:51:07.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:51:07.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:51:07.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:51:07.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:51:07.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:51:07.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:51:07.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:51:07.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:51:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:51:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.618507 -999.00  +18.70  35.29     29   +0.50 1 1 2 1 1   888    0 20.07 85.49 ----- 41.8 35.3 308.6 63.3 21.9 -27.1 22.0 -26.7 22.6 -24.5 23.0 -25.4
2025-12-12T16:51:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:51:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:51:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.618507
2025-12-12T16:51:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:51:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:51:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:51:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:51:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:51:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:50:36', tmtdew=21.78, humidity=22.84, cloud=0.0, wind=38.89, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:50:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:51:07.477 [DEBUG] [Thread-73181] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:51:07.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:51:07.575 [DEBUG] [Thread-73184] [transport.py] [_log()] starting thread (client mode): 0xf574dcf0
2025-12-12T16:51:07.575 [DEBUG] [Thread-73184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:51:07.592 [DEBUG] [Thread-73184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:51:07.593 [INFO] [Thread-73184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:51:07.600 [DEBUG] [Thread-73184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:51:07.600 [DEBUG] [Thread-73184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:51:07.600 [DEBUG] [Thread-73184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:51:07.600 [DEBUG] [Thread-73184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] client lang: <none>
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] server lang: <none>
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] kex follows: False
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:51:07.601 [DEBUG] [Thread-73184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:51:07.602 [DEBUG] [Thread-73184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:51:07.602 [DEBUG] [Thread-73184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:51:07.602 [DEBUG] [Thread-73184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:51:07.602 [DEBUG] [Thread-73184] [transport.py] [_log()] Compression: none
2025-12-12T16:51:07.602 [DEBUG] [Thread-73184] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:51:07.663 [DEBUG] [Thread-73184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:51:07.664 [DEBUG] [Thread-73184] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:51:07.664 [DEBUG] [Thread-73184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:51:07.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:51:07.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:51:07.719 [DEBUG] [Thread-73184] [transport.py] [_log()] userauth is OK
2025-12-12T16:51:07.719 [DEBUG] [Thread-73184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:51:07.719 [DEBUG] [Thread-73184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:51:07.719 [DEBUG] [Thread-73184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:51:07.720 [DEBUG] [Thread-73184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:51:07.738 [INFO] [Thread-73184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:51:07.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:51:07.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:51:08.624 [DEBUG] [Thread-73184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:51:08.624 [DEBUG] [Thread-73184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:51:08.673 [DEBUG] [Thread-73184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:51:08.673 [DEBUG] [Thread-73184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:51:08.682 [DEBUG] [Thread-73184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:51:08.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:51:08.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:51:08.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:51:08.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:51:08.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:51:08.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:51:08.716 [DEBUG] [Thread-73184] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:51:12.867 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:12.868 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:14.644 [DEBUG] [Thread-73186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:29.689 [DEBUG] [Thread-73187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:38.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:51:38.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:51:38.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 51, 8), 21.74, 22.93, 0.0, 36.59, 19.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:51:39.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:51:08
2025-12-12T16:51:39.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:51:39.746 [DEBUG] [Thread-73188] [transport.py] [_log()] starting thread (client mode): 0xf81c0cd0
2025-12-12T16:51:39.747 [DEBUG] [Thread-73188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:51:39.767 [DEBUG] [Thread-73188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:51:39.767 [INFO] [Thread-73188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:51:39.770 [DEBUG] [Thread-73188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:51:39.770 [DEBUG] [Thread-73188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:51:39.770 [DEBUG] [Thread-73188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:51:39.770 [DEBUG] [Thread-73188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:39.770 [DEBUG] [Thread-73188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] client lang: <none>
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] server lang: <none>
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] kex follows: False
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] Compression: none
2025-12-12T16:51:39.771 [DEBUG] [Thread-73188] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:51:39.784 [DEBUG] [Thread-73188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:51:39.785 [DEBUG] [Thread-73188] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:51:39.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:51:39.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:51:39.785 [DEBUG] [Thread-73188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:51:39.786 [DEBUG] [Thread-73188] [transport.py] [_log()] userauth is OK
2025-12-12T16:51:39.786 [DEBUG] [Thread-73188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:51:39.786 [DEBUG] [Thread-73188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:51:39.786 [DEBUG] [Thread-73188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:51:39.786 [DEBUG] [Thread-73188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:51:39.816 [INFO] [Thread-73188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:51:39.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:51:40.396 [DEBUG] [Thread-73188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:51:40.396 [DEBUG] [Thread-73188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:51:40.396 [DEBUG] [Thread-73188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:51:40.437 [DEBUG] [Thread-73188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:51:40.437 [DEBUG] [Thread-73188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:51:40.440 [DEBUG] [Thread-73188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:51:40.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:51:40.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:51:40.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:51:40.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:51:40.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:51:40.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:51:40.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.618843 -999.00  +18.60  31.53     29   +0.50 1 1 2 1 1   888    0 19.88 87.19 ----- 27.4 31.5 307.1 42.8 22.0 -28.0 22.0 -26.4 22.7 -26.1 23.0 -24.5
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.618843
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:51:40.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:51:08', tmtdew=21.74, humidity=22.93, cloud=0.0, wind=36.59, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:51:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:51:40.460 [DEBUG] [Thread-73188] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:51:40.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:51:40.544 [DEBUG] [Thread-73191] [transport.py] [_log()] starting thread (client mode): 0xf81c0f40
2025-12-12T16:51:40.544 [DEBUG] [Thread-73191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:51:40.559 [DEBUG] [Thread-73191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:51:40.559 [INFO] [Thread-73191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] client lang: <none>
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] server lang: <none>
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] kex follows: False
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] Compression: none
2025-12-12T16:51:40.566 [DEBUG] [Thread-73191] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:51:40.621 [DEBUG] [Thread-73191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:51:40.621 [DEBUG] [Thread-73191] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:51:40.621 [DEBUG] [Thread-73191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:51:40.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:51:40.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:51:40.678 [DEBUG] [Thread-73191] [transport.py] [_log()] userauth is OK
2025-12-12T16:51:40.678 [DEBUG] [Thread-73191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:51:40.678 [DEBUG] [Thread-73191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:51:40.678 [DEBUG] [Thread-73191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:51:40.678 [DEBUG] [Thread-73191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:51:40.692 [INFO] [Thread-73191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:51:40.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:51:40.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:51:41.619 [DEBUG] [Thread-73191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:51:41.619 [DEBUG] [Thread-73191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:51:41.667 [DEBUG] [Thread-73191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:51:41.668 [DEBUG] [Thread-73191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:51:41.676 [DEBUG] [Thread-73191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:51:41.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:51:41.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:51:41.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:51:41.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:51:41.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:51:41.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:51:41.708 [DEBUG] [Thread-73191] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:51:44.715 [DEBUG] [Thread-73193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:55.064 [DEBUG] [Thread-73194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:51:59.758 [DEBUG] [Thread-73195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:52:11.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:52:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:52:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 51, 40), 21.61, 23.34, 0.0, 37.07, 19.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:52:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:51:40
2025-12-12T16:52:12.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:52:12.695 [DEBUG] [Thread-73197] [transport.py] [_log()] starting thread (client mode): 0xf575fd30
2025-12-12T16:52:12.695 [DEBUG] [Thread-73197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:52:12.712 [DEBUG] [Thread-73197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:52:12.712 [INFO] [Thread-73197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] client lang: <none>
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] server lang: <none>
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] kex follows: False
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] Compression: none
2025-12-12T16:52:12.713 [DEBUG] [Thread-73197] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:52:12.720 [DEBUG] [Thread-73197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:52:12.721 [DEBUG] [Thread-73197] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:52:12.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:52:12.721 [DEBUG] [Thread-73197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:52:12.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:52:12.722 [DEBUG] [Thread-73197] [transport.py] [_log()] userauth is OK
2025-12-12T16:52:12.722 [DEBUG] [Thread-73197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:52:12.722 [DEBUG] [Thread-73197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:52:12.722 [DEBUG] [Thread-73197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:52:12.722 [DEBUG] [Thread-73197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:52:12.735 [INFO] [Thread-73197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:52:12.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:52:13.009 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:13.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:13.390 [DEBUG] [Thread-73197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:52:13.390 [DEBUG] [Thread-73197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:52:13.390 [DEBUG] [Thread-73197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:52:13.431 [DEBUG] [Thread-73197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:52:13.431 [DEBUG] [Thread-73197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:52:13.433 [DEBUG] [Thread-73197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:52:13.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:52:13.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:52:13.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:52:13.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:52:13.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:52:13.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:52:13.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.619201 -999.00  +18.80  37.95     29   +0.60 1 1 2 1 1   888    0 20.25 89.14 ----- 38.1 38.0 306.6 43.7 22.1 -26.1 22.1 -26.4 22.9 -23.0 23.1 -24.3
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.619201
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:52:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:51:40', tmtdew=21.61, humidity=23.34, cloud=0.0, wind=37.07, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:51:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:52:13.456 [DEBUG] [Thread-73197] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:52:13.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:52:13.539 [DEBUG] [Thread-73200] [transport.py] [_log()] starting thread (client mode): 0xf5703430
2025-12-12T16:52:13.539 [DEBUG] [Thread-73200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:52:13.556 [DEBUG] [Thread-73200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:52:13.556 [INFO] [Thread-73200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] client lang: <none>
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] server lang: <none>
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] kex follows: False
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] Compression: none
2025-12-12T16:52:13.564 [DEBUG] [Thread-73200] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:52:13.621 [DEBUG] [Thread-73200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:52:13.621 [DEBUG] [Thread-73200] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:52:13.621 [DEBUG] [Thread-73200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:52:13.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:52:13.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:52:13.679 [DEBUG] [Thread-73200] [transport.py] [_log()] userauth is OK
2025-12-12T16:52:13.679 [DEBUG] [Thread-73200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:52:13.679 [DEBUG] [Thread-73200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:52:13.679 [DEBUG] [Thread-73200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:52:13.679 [DEBUG] [Thread-73200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:52:13.692 [INFO] [Thread-73200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:52:13.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:52:13.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:52:14.542 [DEBUG] [Thread-73200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:52:14.542 [DEBUG] [Thread-73200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:52:14.589 [DEBUG] [Thread-73200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:52:14.589 [DEBUG] [Thread-73200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:52:14.597 [DEBUG] [Thread-73200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:52:14.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:52:14.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:52:14.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:52:14.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:52:14.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:52:14.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:52:14.629 [DEBUG] [Thread-73200] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:52:14.788 [DEBUG] [Thread-73202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:25.357 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:29.823 [DEBUG] [Thread-73203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:44.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:52:44.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:52:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:52:44.852 [DEBUG] [Thread-73204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:45.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 52, 12), 21.65, 23.28, 0.0, 43.7, 19.22, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:52:45.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:52:12
2025-12-12T16:52:45.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:52:45.597 [DEBUG] [Thread-73205] [transport.py] [_log()] starting thread (client mode): 0xf570c820
2025-12-12T16:52:45.597 [DEBUG] [Thread-73205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:52:45.617 [DEBUG] [Thread-73205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:52:45.617 [INFO] [Thread-73205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] client lang: <none>
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] server lang: <none>
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] kex follows: False
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] Compression: none
2025-12-12T16:52:45.620 [DEBUG] [Thread-73205] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:52:45.634 [DEBUG] [Thread-73205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:52:45.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:52:45.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] userauth is OK
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:52:45.635 [DEBUG] [Thread-73205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:52:45.645 [INFO] [Thread-73205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:52:45.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:52:46.279 [DEBUG] [Thread-73205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:52:46.279 [DEBUG] [Thread-73205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:52:46.279 [DEBUG] [Thread-73205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:52:46.320 [DEBUG] [Thread-73205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:52:46.320 [DEBUG] [Thread-73205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:52:46.322 [DEBUG] [Thread-73205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:52:46.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:52:46.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:52:46.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:52:46.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:52:46.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:52:46.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:52:46.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:52:46.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:52:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:52:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.619549 -999.00  +19.00  38.96     29   +0.70 1 1 2 1 1   888    0 20.50 99.78 ----- 45.5 39.0 310.4 51.7 22.1 -27.5 22.1 -26.6 22.8 -26.7 23.2 -24.6
2025-12-12T16:52:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:52:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:52:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.619549
2025-12-12T16:52:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:52:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:52:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:52:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:52:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:52:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:52:12', tmtdew=21.65, humidity=23.28, cloud=0.0, wind=43.7, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:52:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:52:46.343 [DEBUG] [Thread-73205] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:52:46.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:52:46.429 [DEBUG] [Thread-73208] [transport.py] [_log()] starting thread (client mode): 0xf570db10
2025-12-12T16:52:46.429 [DEBUG] [Thread-73208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:52:46.444 [DEBUG] [Thread-73208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:52:46.444 [INFO] [Thread-73208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] client lang: <none>
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] server lang: <none>
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] kex follows: False
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:52:46.451 [DEBUG] [Thread-73208] [transport.py] [_log()] Compression: none
2025-12-12T16:52:46.452 [DEBUG] [Thread-73208] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:52:46.509 [DEBUG] [Thread-73208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:52:46.509 [DEBUG] [Thread-73208] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:52:46.509 [DEBUG] [Thread-73208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:52:46.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:52:46.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:52:46.566 [DEBUG] [Thread-73208] [transport.py] [_log()] userauth is OK
2025-12-12T16:52:46.566 [DEBUG] [Thread-73208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:52:46.566 [DEBUG] [Thread-73208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:52:46.566 [DEBUG] [Thread-73208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:52:46.566 [DEBUG] [Thread-73208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:52:46.580 [INFO] [Thread-73208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:52:46.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:52:46.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:52:47.456 [DEBUG] [Thread-73208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:52:47.456 [DEBUG] [Thread-73208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:52:47.504 [DEBUG] [Thread-73208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:52:47.504 [DEBUG] [Thread-73208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:52:47.513 [DEBUG] [Thread-73208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:52:47.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:52:47.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:52:47.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:52:47.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:52:47.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:52:47.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:52:47.556 [DEBUG] [Thread-73208] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:52:55.093 [DEBUG] [Thread-73210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:52:59.879 [DEBUG] [Thread-73211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:05.857 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:13.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:13.152 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:14.927 [DEBUG] [Thread-73212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:17.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:53:17.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:53:17.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:53:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 52, 45), 21.45, 23.3, 0.0, 37.69, 18.98, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:53:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:52:45
2025-12-12T16:53:18.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:53:18.599 [DEBUG] [Thread-73213] [transport.py] [_log()] starting thread (client mode): 0xf575cd90
2025-12-12T16:53:18.599 [DEBUG] [Thread-73213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:53:18.612 [DEBUG] [Thread-73213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:53:18.612 [INFO] [Thread-73213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:18.614 [DEBUG] [Thread-73213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] client lang: <none>
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] server lang: <none>
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] kex follows: False
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] Compression: none
2025-12-12T16:53:18.615 [DEBUG] [Thread-73213] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:53:18.626 [DEBUG] [Thread-73213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:53:18.627 [DEBUG] [Thread-73213] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:53:18.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:53:18.627 [DEBUG] [Thread-73213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:53:18.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:53:18.628 [DEBUG] [Thread-73213] [transport.py] [_log()] userauth is OK
2025-12-12T16:53:18.628 [DEBUG] [Thread-73213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:53:18.628 [DEBUG] [Thread-73213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:53:18.628 [DEBUG] [Thread-73213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:53:18.628 [DEBUG] [Thread-73213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:53:18.647 [INFO] [Thread-73213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:53:18.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:53:19.273 [DEBUG] [Thread-73213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:53:19.273 [DEBUG] [Thread-73213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:53:19.273 [DEBUG] [Thread-73213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:53:19.314 [DEBUG] [Thread-73213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:53:19.314 [DEBUG] [Thread-73213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:53:19.316 [DEBUG] [Thread-73213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:53:19.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:53:19.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:53:19.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:53:19.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:53:19.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:53:19.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:53:19.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.619884 -999.00  +18.80  42.76     29   +0.80 1 1 2 1 1   888    0 20.31 93.37 ----- 48.6 42.8 308.8 54.9 22.1 -26.6 22.1 -26.9 22.8 -24.8 23.2 -25.1
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.619884
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:53:19.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:52:45', tmtdew=21.45, humidity=23.3, cloud=0.0, wind=37.69, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:52:37.978', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:53:19.338 [DEBUG] [Thread-73213] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:53:19.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:53:19.426 [DEBUG] [Thread-73216] [transport.py] [_log()] starting thread (client mode): 0xf81c0310
2025-12-12T16:53:19.427 [DEBUG] [Thread-73216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:53:19.442 [DEBUG] [Thread-73216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:53:19.442 [INFO] [Thread-73216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:53:19.449 [DEBUG] [Thread-73216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:53:19.449 [DEBUG] [Thread-73216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:53:19.449 [DEBUG] [Thread-73216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] client lang: <none>
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] server lang: <none>
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] kex follows: False
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:53:19.450 [DEBUG] [Thread-73216] [transport.py] [_log()] Compression: none
2025-12-12T16:53:19.451 [DEBUG] [Thread-73216] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:53:19.509 [DEBUG] [Thread-73216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:53:19.510 [DEBUG] [Thread-73216] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:53:19.510 [DEBUG] [Thread-73216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:53:19.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:53:19.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:53:19.566 [DEBUG] [Thread-73216] [transport.py] [_log()] userauth is OK
2025-12-12T16:53:19.566 [DEBUG] [Thread-73216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:53:19.566 [DEBUG] [Thread-73216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:53:19.566 [DEBUG] [Thread-73216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:53:19.566 [DEBUG] [Thread-73216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:53:19.584 [INFO] [Thread-73216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:53:19.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:53:19.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:53:20.432 [DEBUG] [Thread-73216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:53:20.432 [DEBUG] [Thread-73216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:53:20.480 [DEBUG] [Thread-73216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:53:20.480 [DEBUG] [Thread-73216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:53:20.489 [DEBUG] [Thread-73216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:53:20.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:53:20.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:53:20.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:53:20.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:53:20.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:53:20.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:53:20.526 [DEBUG] [Thread-73216] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:53:29.957 [DEBUG] [Thread-73218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:45.000 [DEBUG] [Thread-73219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:53:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:53:50.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:53:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:53:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 53, 17), 21.46, 23.26, 0.0, 38.69, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:53:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:53:17
2025-12-12T16:53:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:53:51.555 [DEBUG] [Thread-73220] [transport.py] [_log()] starting thread (client mode): 0xf81c0d90
2025-12-12T16:53:51.555 [DEBUG] [Thread-73220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:53:51.577 [DEBUG] [Thread-73220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:53:51.577 [INFO] [Thread-73220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] client lang: <none>
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] server lang: <none>
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] kex follows: False
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] Compression: none
2025-12-12T16:53:51.580 [DEBUG] [Thread-73220] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:53:51.597 [DEBUG] [Thread-73220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:53:51.598 [DEBUG] [Thread-73220] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:53:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:53:51.598 [DEBUG] [Thread-73220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:53:51.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:53:51.600 [DEBUG] [Thread-73220] [transport.py] [_log()] userauth is OK
2025-12-12T16:53:51.600 [DEBUG] [Thread-73220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:53:51.600 [DEBUG] [Thread-73220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:53:51.600 [DEBUG] [Thread-73220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:53:51.600 [DEBUG] [Thread-73220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:53:51.618 [INFO] [Thread-73220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:53:51.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:53:52.246 [DEBUG] [Thread-73220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:53:52.246 [DEBUG] [Thread-73220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:53:52.246 [DEBUG] [Thread-73220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:53:52.287 [DEBUG] [Thread-73220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:53:52.287 [DEBUG] [Thread-73220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:53:52.290 [DEBUG] [Thread-73220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:53:52.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:53:52.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:53:52.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:53:52.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:53:52.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:53:52.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:53:52.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:53:52.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:53:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:53:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.620243 -999.00  +19.00  47.58     29   +0.80 1 1 2 1 1   888    0 20.25 99.92 ----- 47.2 47.6 306.0 53.5 22.1 -26.7 22.1 -27.3 22.7 -29.9 23.2 -24.3
2025-12-12T16:53:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:53:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:53:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.620243
2025-12-12T16:53:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:53:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:53:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:53:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:53:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:53:52.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:53:17', tmtdew=21.46, humidity=23.26, cloud=0.0, wind=38.69, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:53:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:53:52.317 [DEBUG] [Thread-73220] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:53:52.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:53:52.413 [DEBUG] [Thread-73223] [transport.py] [_log()] starting thread (client mode): 0xf81c3c40
2025-12-12T16:53:52.413 [DEBUG] [Thread-73223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:53:52.434 [DEBUG] [Thread-73223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:53:52.434 [INFO] [Thread-73223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:53:52.441 [DEBUG] [Thread-73223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:53:52.441 [DEBUG] [Thread-73223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:53:52.441 [DEBUG] [Thread-73223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:53:52.441 [DEBUG] [Thread-73223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] client lang: <none>
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] server lang: <none>
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] kex follows: False
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] Compression: none
2025-12-12T16:53:52.442 [DEBUG] [Thread-73223] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:53:52.501 [DEBUG] [Thread-73223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:53:52.501 [DEBUG] [Thread-73223] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:53:52.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:53:52.502 [DEBUG] [Thread-73223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:53:52.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:53:52.557 [DEBUG] [Thread-73223] [transport.py] [_log()] userauth is OK
2025-12-12T16:53:52.557 [DEBUG] [Thread-73223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:53:52.557 [DEBUG] [Thread-73223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:53:52.557 [DEBUG] [Thread-73223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:53:52.558 [DEBUG] [Thread-73223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:53:52.576 [INFO] [Thread-73223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:53:52.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:53:52.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:53:53.490 [DEBUG] [Thread-73223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:53:53.490 [DEBUG] [Thread-73223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:53:53.538 [DEBUG] [Thread-73223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:53:53.538 [DEBUG] [Thread-73223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:53:53.547 [DEBUG] [Thread-73223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:53:53.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:53:53.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:53:53.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:53:53.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:53:53.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:53:53.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:53:53.582 [DEBUG] [Thread-73223] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:53:55.145 [DEBUG] [Thread-73225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:00.029 [DEBUG] [Thread-73226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:13.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:13.293 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:15.078 [DEBUG] [Thread-73227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:17.354 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:54:23.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:54:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:54:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 54, 21), 21.29, 23.74, 0.0, 41.25, 19.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:54:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:54:21
2025-12-12T16:54:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:54:24.576 [DEBUG] [Thread-73228] [transport.py] [_log()] starting thread (client mode): 0xf81e42e0
2025-12-12T16:54:24.576 [DEBUG] [Thread-73228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:54:24.596 [DEBUG] [Thread-73228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:54:24.596 [INFO] [Thread-73228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] client lang: <none>
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] server lang: <none>
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] kex follows: False
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] Compression: none
2025-12-12T16:54:24.599 [DEBUG] [Thread-73228] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:54:24.623 [DEBUG] [Thread-73228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:54:24.623 [DEBUG] [Thread-73228] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:54:24.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:54:24.624 [DEBUG] [Thread-73228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:54:24.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:54:24.626 [DEBUG] [Thread-73228] [transport.py] [_log()] userauth is OK
2025-12-12T16:54:24.626 [DEBUG] [Thread-73228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:54:24.627 [DEBUG] [Thread-73228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:54:24.627 [DEBUG] [Thread-73228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:54:24.627 [DEBUG] [Thread-73228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:54:24.644 [INFO] [Thread-73228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:54:24.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:54:25.195 [DEBUG] [Thread-73228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:54:25.195 [DEBUG] [Thread-73228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:54:25.196 [DEBUG] [Thread-73228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:54:25.237 [DEBUG] [Thread-73228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:54:25.237 [DEBUG] [Thread-73228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:54:25.239 [DEBUG] [Thread-73228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:54:25.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:54:25.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:54:25.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:54:25.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:54:25.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:54:25.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:54:25.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:54:25.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:54:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:54:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.620579 -999.00  +18.80  53.45     29   +0.70 1 1 2 1 1   888    0 20.88 111.65 ----- 45.5 53.5 316.0 56.5 -999.0 -999.0 22.0 -27.5 22.8 -26.4 23.1 -25.9
2025-12-12T16:54:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:54:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:54:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.620579
2025-12-12T16:54:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:54:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:54:25.266 [DEBUG] [Thread-73228] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:54:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:54:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:54:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:54:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:54:21', tmtdew=21.29, humidity=23.74, cloud=0.0, wind=41.25, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:53:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:54:25.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:54:25.354 [DEBUG] [Thread-73231] [transport.py] [_log()] starting thread (client mode): 0xf81e4730
2025-12-12T16:54:25.354 [DEBUG] [Thread-73231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:54:25.368 [DEBUG] [Thread-73231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:54:25.368 [INFO] [Thread-73231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] client lang: <none>
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] server lang: <none>
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] kex follows: False
2025-12-12T16:54:25.376 [DEBUG] [Thread-73231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:54:25.377 [DEBUG] [Thread-73231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:54:25.377 [DEBUG] [Thread-73231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:54:25.377 [DEBUG] [Thread-73231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:54:25.377 [DEBUG] [Thread-73231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:54:25.377 [DEBUG] [Thread-73231] [transport.py] [_log()] Compression: none
2025-12-12T16:54:25.377 [DEBUG] [Thread-73231] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:54:25.433 [DEBUG] [Thread-73231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:54:25.433 [DEBUG] [Thread-73231] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:54:25.434 [DEBUG] [Thread-73231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:54:25.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:54:25.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:54:25.489 [DEBUG] [Thread-73231] [transport.py] [_log()] userauth is OK
2025-12-12T16:54:25.489 [DEBUG] [Thread-73231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:54:25.489 [DEBUG] [Thread-73231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:54:25.489 [DEBUG] [Thread-73231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:54:25.489 [DEBUG] [Thread-73231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:54:25.508 [INFO] [Thread-73231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:54:25.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:54:25.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:54:26.335 [DEBUG] [Thread-73231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:54:26.335 [DEBUG] [Thread-73231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:54:26.383 [DEBUG] [Thread-73231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:54:26.384 [DEBUG] [Thread-73231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:54:26.393 [DEBUG] [Thread-73231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:54:26.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:54:26.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:54:26.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:54:26.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:54:26.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:54:26.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:54:26.427 [DEBUG] [Thread-73231] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:54:30.104 [DEBUG] [Thread-73233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:41.832 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:45.149 [DEBUG] [Thread-73234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:55.191 [DEBUG] [Thread-73235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:54:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:54:56.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:54:56.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:54:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 54, 53), 21.47, 23.24, 0.0, 35.45, 19.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:54:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:54:53
2025-12-12T16:54:57.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:54:57.415 [DEBUG] [Thread-73236] [transport.py] [_log()] starting thread (client mode): 0xf570cac0
2025-12-12T16:54:57.415 [DEBUG] [Thread-73236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:54:57.436 [DEBUG] [Thread-73236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:54:57.436 [INFO] [Thread-73236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] client lang: <none>
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] server lang: <none>
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] kex follows: False
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] Compression: none
2025-12-12T16:54:57.439 [DEBUG] [Thread-73236] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:54:57.456 [DEBUG] [Thread-73236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:54:57.457 [DEBUG] [Thread-73236] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:54:57.457 [DEBUG] [Thread-73236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:54:57.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:54:57.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:54:57.459 [DEBUG] [Thread-73236] [transport.py] [_log()] userauth is OK
2025-12-12T16:54:57.459 [DEBUG] [Thread-73236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:54:57.459 [DEBUG] [Thread-73236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:54:57.459 [DEBUG] [Thread-73236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:54:57.460 [DEBUG] [Thread-73236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:54:57.477 [INFO] [Thread-73236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:54:57.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:54:58.114 [DEBUG] [Thread-73236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:54:58.115 [DEBUG] [Thread-73236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:54:58.115 [DEBUG] [Thread-73236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:54:58.156 [DEBUG] [Thread-73236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:54:58.156 [DEBUG] [Thread-73236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:54:58.159 [DEBUG] [Thread-73236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:54:58.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:54:58.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:54:58.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:54:58.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:54:58.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:54:58.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:54:58.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:54:58.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:54:58.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:54:58.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.620926 -999.00  +18.50  44.98     30   +0.70 1 1 2 1 1   888    0 20.63 117.24 ----- 39.8 45.0 316.2 52.3 22.0 -27.3 22.0 -26.9 22.9 -24.7 23.1 -25.0
2025-12-12T16:54:58.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:54:58.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:54:58.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.620926
2025-12-12T16:54:58.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:54:58.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:54:58.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:54:58.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:54:58.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:54:58.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:54:53', tmtdew=21.47, humidity=23.24, cloud=0.0, wind=35.45, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:54:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:54:58.183 [DEBUG] [Thread-73236] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:54:58.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:54:58.280 [DEBUG] [Thread-73239] [transport.py] [_log()] starting thread (client mode): 0xf575cf70
2025-12-12T16:54:58.280 [DEBUG] [Thread-73239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:54:58.295 [DEBUG] [Thread-73239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:54:58.295 [INFO] [Thread-73239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:54:58.302 [DEBUG] [Thread-73239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:54:58.303 [DEBUG] [Thread-73239] [transport.py] [_log()] client lang: <none>
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] server lang: <none>
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] kex follows: False
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] Compression: none
2025-12-12T16:54:58.304 [DEBUG] [Thread-73239] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:54:58.361 [DEBUG] [Thread-73239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:54:58.361 [DEBUG] [Thread-73239] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:54:58.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:54:58.362 [DEBUG] [Thread-73239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:54:58.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:54:58.416 [DEBUG] [Thread-73239] [transport.py] [_log()] userauth is OK
2025-12-12T16:54:58.417 [DEBUG] [Thread-73239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:54:58.417 [DEBUG] [Thread-73239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:54:58.417 [DEBUG] [Thread-73239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:54:58.417 [DEBUG] [Thread-73239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:54:58.436 [INFO] [Thread-73239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:54:58.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:54:58.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:54:59.326 [DEBUG] [Thread-73239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:54:59.326 [DEBUG] [Thread-73239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:54:59.374 [DEBUG] [Thread-73239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:54:59.374 [DEBUG] [Thread-73239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:54:59.383 [DEBUG] [Thread-73239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:54:59.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:54:59.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:54:59.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:54:59.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:54:59.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:54:59.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:54:59.418 [DEBUG] [Thread-73239] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:55:00.181 [DEBUG] [Thread-73241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:04.278 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:13.434 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:13.435 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:15.225 [DEBUG] [Thread-73242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:26.734 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:55:29.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:55:29.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:55:30.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 55, 25), 21.19, 23.66, 0.0, 38.71, 19.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:55:30.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:55:25
2025-12-12T16:55:30.251 [DEBUG] [Thread-73243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:55:30.433 [DEBUG] [Thread-73244] [transport.py] [_log()] starting thread (client mode): 0xf81c0fa0
2025-12-12T16:55:30.433 [DEBUG] [Thread-73244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:55:30.453 [DEBUG] [Thread-73244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:55:30.453 [INFO] [Thread-73244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] client lang: <none>
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] server lang: <none>
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] kex follows: False
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] Compression: none
2025-12-12T16:55:30.457 [DEBUG] [Thread-73244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:55:30.472 [DEBUG] [Thread-73244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:55:30.473 [DEBUG] [Thread-73244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:55:30.473 [DEBUG] [Thread-73244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:55:30.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:55:30.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:55:30.474 [DEBUG] [Thread-73244] [transport.py] [_log()] userauth is OK
2025-12-12T16:55:30.474 [DEBUG] [Thread-73244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:55:30.474 [DEBUG] [Thread-73244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:55:30.474 [DEBUG] [Thread-73244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:55:30.474 [DEBUG] [Thread-73244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:55:30.484 [INFO] [Thread-73244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:55:30.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:55:31.189 [DEBUG] [Thread-73244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:55:31.189 [DEBUG] [Thread-73244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:55:31.189 [DEBUG] [Thread-73244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:55:31.231 [DEBUG] [Thread-73244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:55:31.231 [DEBUG] [Thread-73244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:55:31.233 [DEBUG] [Thread-73244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:55:31.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:55:31.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:55:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:55:31.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:55:31.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:55:31.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:55:31.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.621632 -999.00  +18.50  29.63     30   +0.90 1 1 1 1 1   887    0 21.16 125.41 ----- 36.0 29.6 318.5 41.0 21.9 -27.2 21.9 -26.1 22.7 -23.1 23.0 -25.2
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.621632
2025-12-12T16:55:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:55:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:55:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:55:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:55:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:55:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:55:25', tmtdew=21.19, humidity=23.66, cloud=0.0, wind=38.71, temperature=19.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:55:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:55:31.253 [DEBUG] [Thread-73244] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:55:31.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:55:31.337 [DEBUG] [Thread-73247] [transport.py] [_log()] starting thread (client mode): 0xf81c3e80
2025-12-12T16:55:31.337 [DEBUG] [Thread-73247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:55:31.352 [DEBUG] [Thread-73247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:55:31.352 [INFO] [Thread-73247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] client lang: <none>
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] server lang: <none>
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] kex follows: False
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:55:31.359 [DEBUG] [Thread-73247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:55:31.360 [DEBUG] [Thread-73247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:55:31.360 [DEBUG] [Thread-73247] [transport.py] [_log()] Compression: none
2025-12-12T16:55:31.360 [DEBUG] [Thread-73247] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:55:31.414 [DEBUG] [Thread-73247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:55:31.415 [DEBUG] [Thread-73247] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:55:31.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:55:31.415 [DEBUG] [Thread-73247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:55:31.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:55:31.475 [DEBUG] [Thread-73247] [transport.py] [_log()] userauth is OK
2025-12-12T16:55:31.475 [DEBUG] [Thread-73247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:55:31.476 [DEBUG] [Thread-73247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:55:31.476 [DEBUG] [Thread-73247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:55:31.476 [DEBUG] [Thread-73247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:55:31.490 [INFO] [Thread-73247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:55:31.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:55:31.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:55:32.337 [DEBUG] [Thread-73247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:55:32.337 [DEBUG] [Thread-73247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:55:32.384 [DEBUG] [Thread-73247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:55:32.384 [DEBUG] [Thread-73247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:55:32.392 [DEBUG] [Thread-73247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:55:32.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:55:32.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:55:32.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:55:32.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:55:32.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:55:32.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:55:32.423 [DEBUG] [Thread-73247] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:55:45.277 [DEBUG] [Thread-73249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:49.306 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:55:55.236 [DEBUG] [Thread-73250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:00.323 [DEBUG] [Thread-73251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:56:02.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:56:02.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:56:03.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 55, 57), 21.03, 24.04, 0.0, 38.71, 19.02, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:56:03.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:55:57
2025-12-12T16:56:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:56:03.407 [DEBUG] [Thread-73252] [transport.py] [_log()] starting thread (client mode): 0xf81e4e80
2025-12-12T16:56:03.407 [DEBUG] [Thread-73252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:56:03.427 [DEBUG] [Thread-73252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:56:03.427 [INFO] [Thread-73252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] client lang: <none>
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] server lang: <none>
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] kex follows: False
2025-12-12T16:56:03.430 [DEBUG] [Thread-73252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:56:03.431 [DEBUG] [Thread-73252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:56:03.431 [DEBUG] [Thread-73252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:56:03.431 [DEBUG] [Thread-73252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:56:03.431 [DEBUG] [Thread-73252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:56:03.431 [DEBUG] [Thread-73252] [transport.py] [_log()] Compression: none
2025-12-12T16:56:03.431 [DEBUG] [Thread-73252] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:56:03.448 [DEBUG] [Thread-73252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:56:03.449 [DEBUG] [Thread-73252] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:56:03.450 [DEBUG] [Thread-73252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:56:03.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:56:03.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:56:03.452 [DEBUG] [Thread-73252] [transport.py] [_log()] userauth is OK
2025-12-12T16:56:03.452 [DEBUG] [Thread-73252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:56:03.452 [DEBUG] [Thread-73252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:56:03.452 [DEBUG] [Thread-73252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:56:03.452 [DEBUG] [Thread-73252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:56:03.476 [INFO] [Thread-73252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:56:03.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:56:04.098 [DEBUG] [Thread-73252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:56:04.098 [DEBUG] [Thread-73252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:56:04.099 [DEBUG] [Thread-73252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:56:04.139 [DEBUG] [Thread-73252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:56:04.139 [DEBUG] [Thread-73252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:56:04.142 [DEBUG] [Thread-73252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:56:04.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:56:04.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:56:04.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:56:04.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:56:04.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:56:04.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:56:04.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:56:04.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:56:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:56:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.621968 -999.00  +18.70  43.22     30   +0.80 1 1 2 1 1   887    0 21.05 116.76 ----- 42.7 43.2 308.4 46.0 21.9 -26.2 22.0 -26.5 22.8 -24.4 23.0 -24.4
2025-12-12T16:56:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:56:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:56:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.621968
2025-12-12T16:56:04.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:56:04.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:56:04.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:56:04.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:56:04.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:56:04.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:55:57', tmtdew=21.03, humidity=24.04, cloud=0.0, wind=38.71, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:55:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:56:04.166 [DEBUG] [Thread-73252] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:56:04.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:56:04.263 [DEBUG] [Thread-73255] [transport.py] [_log()] starting thread (client mode): 0xf81e4e50
2025-12-12T16:56:04.263 [DEBUG] [Thread-73255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:56:04.279 [DEBUG] [Thread-73255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:56:04.279 [INFO] [Thread-73255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:56:04.286 [DEBUG] [Thread-73255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] client lang: <none>
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] server lang: <none>
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] kex follows: False
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] Compression: none
2025-12-12T16:56:04.287 [DEBUG] [Thread-73255] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:56:04.342 [DEBUG] [Thread-73255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:56:04.342 [DEBUG] [Thread-73255] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:56:04.343 [DEBUG] [Thread-73255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:56:04.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:56:04.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:56:04.403 [DEBUG] [Thread-73255] [transport.py] [_log()] userauth is OK
2025-12-12T16:56:04.403 [DEBUG] [Thread-73255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:56:04.404 [DEBUG] [Thread-73255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:56:04.404 [DEBUG] [Thread-73255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:56:04.404 [DEBUG] [Thread-73255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:56:04.425 [INFO] [Thread-73255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:56:04.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:56:04.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:56:05.309 [DEBUG] [Thread-73255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:56:05.309 [DEBUG] [Thread-73255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:56:05.360 [DEBUG] [Thread-73255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:56:05.360 [DEBUG] [Thread-73255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:56:05.372 [DEBUG] [Thread-73255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:56:05.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:56:05.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:56:05.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:56:05.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:56:05.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:56:05.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:56:05.409 [DEBUG] [Thread-73255] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:56:11.832 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:13.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:13.577 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:15.352 [DEBUG] [Thread-73257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:30.398 [DEBUG] [Thread-73258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:34.407 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:35.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:56:35.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:56:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:56:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 56, 29), 21.25, 23.73, 0.0, 36.65, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:56:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:56:29
2025-12-12T16:56:36.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:56:36.363 [DEBUG] [Thread-73259] [transport.py] [_log()] starting thread (client mode): 0xf81e6b60
2025-12-12T16:56:36.363 [DEBUG] [Thread-73259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:56:36.385 [DEBUG] [Thread-73259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:56:36.385 [INFO] [Thread-73259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] client lang: <none>
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] server lang: <none>
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] kex follows: False
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:56:36.388 [DEBUG] [Thread-73259] [transport.py] [_log()] Compression: none
2025-12-12T16:56:36.389 [DEBUG] [Thread-73259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:56:36.405 [DEBUG] [Thread-73259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:56:36.406 [DEBUG] [Thread-73259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:56:36.406 [DEBUG] [Thread-73259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:56:36.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:56:36.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:56:36.409 [DEBUG] [Thread-73259] [transport.py] [_log()] userauth is OK
2025-12-12T16:56:36.409 [DEBUG] [Thread-73259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:56:36.409 [DEBUG] [Thread-73259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:56:36.409 [DEBUG] [Thread-73259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:56:36.409 [DEBUG] [Thread-73259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:56:36.427 [INFO] [Thread-73259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:56:36.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:56:37.153 [DEBUG] [Thread-73259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:56:37.153 [DEBUG] [Thread-73259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:56:37.153 [DEBUG] [Thread-73259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:56:37.194 [DEBUG] [Thread-73259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:56:37.194 [DEBUG] [Thread-73259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:56:37.197 [DEBUG] [Thread-73259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:56:37.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:56:37.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:56:37.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:56:37.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:56:37.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:56:37.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:56:37.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:56:37.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:56:37.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:56:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.622315 -999.00  +19.40  26.20     29   +1.20 1 1 1 1 1   887    0 21.02 112.14 ----- 33.1 26.2 308.6 35.9 22.1 -25.5 22.1 -25.4 23.0 -23.9 23.2 -24.0
2025-12-12T16:56:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:56:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:56:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.622315
2025-12-12T16:56:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:56:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:56:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:56:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:56:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:56:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:56:29', tmtdew=21.25, humidity=23.73, cloud=0.0, wind=36.65, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:56:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:56:37.221 [DEBUG] [Thread-73259] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:56:37.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:56:37.330 [DEBUG] [Thread-73262] [transport.py] [_log()] starting thread (client mode): 0xf575f550
2025-12-12T16:56:37.330 [DEBUG] [Thread-73262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:56:37.346 [DEBUG] [Thread-73262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:56:37.346 [INFO] [Thread-73262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:56:37.353 [DEBUG] [Thread-73262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] client lang: <none>
2025-12-12T16:56:37.354 [DEBUG] [Thread-73262] [transport.py] [_log()] server lang: <none>
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] kex follows: False
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] Compression: none
2025-12-12T16:56:37.355 [DEBUG] [Thread-73262] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:56:37.411 [DEBUG] [Thread-73262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:56:37.411 [DEBUG] [Thread-73262] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:56:37.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:56:37.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:56:37.413 [DEBUG] [Thread-73262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:56:37.467 [DEBUG] [Thread-73262] [transport.py] [_log()] userauth is OK
2025-12-12T16:56:37.467 [DEBUG] [Thread-73262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:56:37.468 [DEBUG] [Thread-73262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:56:37.468 [DEBUG] [Thread-73262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:56:37.468 [DEBUG] [Thread-73262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:56:37.487 [INFO] [Thread-73262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:56:37.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:56:37.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:56:38.291 [DEBUG] [Thread-73262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:56:38.291 [DEBUG] [Thread-73262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:56:38.339 [DEBUG] [Thread-73262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:56:38.339 [DEBUG] [Thread-73262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:56:38.347 [DEBUG] [Thread-73262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:56:38.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:56:38.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:56:38.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:56:38.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:56:38.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:56:38.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:56:38.381 [DEBUG] [Thread-73262] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:56:45.426 [DEBUG] [Thread-73264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:55.294 [DEBUG] [Thread-73265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:56:56.957 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:00.460 [DEBUG] [Thread-73266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:57:08.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:57:08.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:57:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 57, 1), 21.16, 23.89, 0.0, 37.6, 18.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:57:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:57:01
2025-12-12T16:57:09.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:57:09.353 [DEBUG] [Thread-73267] [transport.py] [_log()] starting thread (client mode): 0xfabc5ed0
2025-12-12T16:57:09.353 [DEBUG] [Thread-73267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:57:09.373 [DEBUG] [Thread-73267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:57:09.373 [INFO] [Thread-73267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] client lang: <none>
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] server lang: <none>
2025-12-12T16:57:09.374 [DEBUG] [Thread-73267] [transport.py] [_log()] kex follows: False
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] Compression: none
2025-12-12T16:57:09.375 [DEBUG] [Thread-73267] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:57:09.393 [DEBUG] [Thread-73267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:57:09.394 [DEBUG] [Thread-73267] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:57:09.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:57:09.395 [DEBUG] [Thread-73267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:57:09.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:57:09.396 [DEBUG] [Thread-73267] [transport.py] [_log()] userauth is OK
2025-12-12T16:57:09.396 [DEBUG] [Thread-73267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:57:09.397 [DEBUG] [Thread-73267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:57:09.397 [DEBUG] [Thread-73267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:57:09.397 [DEBUG] [Thread-73267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:57:09.421 [INFO] [Thread-73267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:57:09.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:57:10.086 [DEBUG] [Thread-73267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:57:10.086 [DEBUG] [Thread-73267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:57:10.087 [DEBUG] [Thread-73267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:57:10.127 [DEBUG] [Thread-73267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:57:10.127 [DEBUG] [Thread-73267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:57:10.130 [DEBUG] [Thread-73267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:57:10.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:57:10.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:57:10.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:57:10.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:57:10.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:57:10.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:57:10.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:57:10.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:57:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:57:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.622662 -999.00  +19.50  38.41     28   +0.80 1 1 2 1 1   887    0 20.82 115.02 ----- 37.4 38.4 306.0 47.9 22.1 -26.8 22.2 -26.1 23.0 -23.7 23.2 -25.3
2025-12-12T16:57:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:57:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:57:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.622662
2025-12-12T16:57:10.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:57:10.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:57:10.154 [DEBUG] [Thread-73267] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:57:10.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:57:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:57:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:57:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:57:01', tmtdew=21.16, humidity=23.89, cloud=0.0, wind=37.6, temperature=18.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:56:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:57:10.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:57:10.252 [DEBUG] [Thread-73270] [transport.py] [_log()] starting thread (client mode): 0xf81e7fd0
2025-12-12T16:57:10.252 [DEBUG] [Thread-73270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:57:10.267 [DEBUG] [Thread-73270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:57:10.268 [INFO] [Thread-73270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:57:10.275 [DEBUG] [Thread-73270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:57:10.275 [DEBUG] [Thread-73270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:57:10.275 [DEBUG] [Thread-73270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:57:10.275 [DEBUG] [Thread-73270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:10.275 [DEBUG] [Thread-73270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] client lang: <none>
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] server lang: <none>
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] kex follows: False
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:57:10.276 [DEBUG] [Thread-73270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:57:10.277 [DEBUG] [Thread-73270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:57:10.277 [DEBUG] [Thread-73270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:57:10.277 [DEBUG] [Thread-73270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:57:10.277 [DEBUG] [Thread-73270] [transport.py] [_log()] Compression: none
2025-12-12T16:57:10.277 [DEBUG] [Thread-73270] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:57:10.335 [DEBUG] [Thread-73270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:57:10.335 [DEBUG] [Thread-73270] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:57:10.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:57:10.336 [DEBUG] [Thread-73270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:57:10.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:57:10.391 [DEBUG] [Thread-73270] [transport.py] [_log()] userauth is OK
2025-12-12T16:57:10.391 [DEBUG] [Thread-73270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:57:10.391 [DEBUG] [Thread-73270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:57:10.391 [DEBUG] [Thread-73270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:57:10.392 [DEBUG] [Thread-73270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:57:10.410 [INFO] [Thread-73270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:57:10.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:57:10.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:57:11.264 [DEBUG] [Thread-73270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:57:11.264 [DEBUG] [Thread-73270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:57:11.312 [DEBUG] [Thread-73270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:57:11.312 [DEBUG] [Thread-73270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:57:11.321 [DEBUG] [Thread-73270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:57:11.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:57:11.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:57:11.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:57:11.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:57:11.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:57:11.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:57:11.355 [DEBUG] [Thread-73270] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:57:13.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:13.718 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:15.489 [DEBUG] [Thread-73272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:19.587 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:30.531 [DEBUG] [Thread-73273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:41.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:57:41.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:57:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:57:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 57, 33), 21.13, 23.97, 0.0, 35.32, 19.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:57:42.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:57:33
2025-12-12T16:57:42.116 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:57:42.314 [DEBUG] [Thread-73274] [transport.py] [_log()] starting thread (client mode): 0xf81e5840
2025-12-12T16:57:42.314 [DEBUG] [Thread-73274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:57:42.334 [DEBUG] [Thread-73274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:57:42.334 [INFO] [Thread-73274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:42.336 [DEBUG] [Thread-73274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] client lang: <none>
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] server lang: <none>
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] kex follows: False
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] Compression: none
2025-12-12T16:57:42.337 [DEBUG] [Thread-73274] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:57:42.356 [DEBUG] [Thread-73274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:57:42.356 [DEBUG] [Thread-73274] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:57:42.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:57:42.357 [DEBUG] [Thread-73274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:57:42.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:57:42.359 [DEBUG] [Thread-73274] [transport.py] [_log()] userauth is OK
2025-12-12T16:57:42.359 [DEBUG] [Thread-73274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:57:42.359 [DEBUG] [Thread-73274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:57:42.359 [DEBUG] [Thread-73274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:57:42.359 [DEBUG] [Thread-73274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:57:42.376 [INFO] [Thread-73274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:57:42.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:57:43.030 [DEBUG] [Thread-73274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:57:43.031 [DEBUG] [Thread-73274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:57:43.031 [DEBUG] [Thread-73274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:57:43.072 [DEBUG] [Thread-73274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:57:43.073 [DEBUG] [Thread-73274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:57:43.075 [DEBUG] [Thread-73274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:57:43.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:57:43.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:57:43.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:57:43.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:57:43.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:57:43.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:57:43.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:57:43.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:57:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:57:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.623009 -999.00  +18.80  52.89     29   +0.50 1 1 2 1 1   887    0 21.84 121.95 ----- 45.0 52.9 292.8 57.1 22.0 -27.8 22.0 -27.3 22.7 -26.9 23.2 -25.5
2025-12-12T16:57:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:57:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:57:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.623009
2025-12-12T16:57:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:57:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:57:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:57:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:57:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:57:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:57:33', tmtdew=21.13, humidity=23.97, cloud=0.0, wind=35.32, temperature=19.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:57:07.978', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:57:43.103 [DEBUG] [Thread-73274] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:57:43.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:57:43.203 [DEBUG] [Thread-73277] [transport.py] [_log()] starting thread (client mode): 0xf813da50
2025-12-12T16:57:43.203 [DEBUG] [Thread-73277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:57:43.217 [DEBUG] [Thread-73277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:57:43.217 [INFO] [Thread-73277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:57:43.224 [DEBUG] [Thread-73277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:57:43.224 [DEBUG] [Thread-73277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] client lang: <none>
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] server lang: <none>
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] kex follows: False
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] Compression: none
2025-12-12T16:57:43.225 [DEBUG] [Thread-73277] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:57:43.282 [DEBUG] [Thread-73277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:57:43.282 [DEBUG] [Thread-73277] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:57:43.283 [DEBUG] [Thread-73277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:57:43.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:57:43.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:57:43.339 [DEBUG] [Thread-73277] [transport.py] [_log()] userauth is OK
2025-12-12T16:57:43.339 [DEBUG] [Thread-73277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:57:43.339 [DEBUG] [Thread-73277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:57:43.339 [DEBUG] [Thread-73277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:57:43.339 [DEBUG] [Thread-73277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:57:43.358 [INFO] [Thread-73277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:57:43.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:57:43.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:57:44.222 [DEBUG] [Thread-73277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:57:44.222 [DEBUG] [Thread-73277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:57:44.271 [DEBUG] [Thread-73277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:57:44.271 [DEBUG] [Thread-73277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:57:44.280 [DEBUG] [Thread-73277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:57:44.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:57:44.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:57:44.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:57:44.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:57:44.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:57:44.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:57:44.321 [DEBUG] [Thread-73277] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:57:45.560 [DEBUG] [Thread-73279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:57:55.325 [DEBUG] [Thread-73280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:00.611 [DEBUG] [Thread-73281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:04.689 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:05.108 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:07.587 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:08.068 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:09.568 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:10.064 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:10.553 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:12.050 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:12.546 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:13.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:13.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:14.118 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:14.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:58:14.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:58:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:58:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 58, 5), 21.61, 23.28, 0.0, 40.18, 19.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:58:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:58:05
2025-12-12T16:58:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:58:15.267 [DEBUG] [Thread-73282] [transport.py] [_log()] starting thread (client mode): 0xf578bbb0
2025-12-12T16:58:15.267 [DEBUG] [Thread-73282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:58:15.288 [DEBUG] [Thread-73282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:58:15.288 [INFO] [Thread-73282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:58:15.291 [DEBUG] [Thread-73282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:58:15.291 [DEBUG] [Thread-73282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:58:15.291 [DEBUG] [Thread-73282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:58:15.291 [DEBUG] [Thread-73282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:15.291 [DEBUG] [Thread-73282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:15.291 [DEBUG] [Thread-73282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] client lang: <none>
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] server lang: <none>
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] kex follows: False
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] Compression: none
2025-12-12T16:58:15.292 [DEBUG] [Thread-73282] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:58:15.309 [DEBUG] [Thread-73282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:58:15.310 [DEBUG] [Thread-73282] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:58:15.310 [DEBUG] [Thread-73282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:58:15.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:58:15.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:58:15.312 [DEBUG] [Thread-73282] [transport.py] [_log()] userauth is OK
2025-12-12T16:58:15.312 [DEBUG] [Thread-73282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:58:15.312 [DEBUG] [Thread-73282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:58:15.312 [DEBUG] [Thread-73282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:58:15.312 [DEBUG] [Thread-73282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:58:15.330 [INFO] [Thread-73282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:58:15.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:58:15.622 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:15.643 [DEBUG] [Thread-73284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:15.962 [DEBUG] [Thread-73282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:58:15.962 [DEBUG] [Thread-73282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:58:15.963 [DEBUG] [Thread-73282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:58:16.003 [DEBUG] [Thread-73282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:58:16.003 [DEBUG] [Thread-73282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:58:16.006 [DEBUG] [Thread-73282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:58:16.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:58:16.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:58:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:58:16.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:58:16.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:58:16.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:58:16.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:58:16.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:58:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:58:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.623368 -999.00  +18.70  43.17     29   +0.70 1 1 2 1 1   887    0 21.97 132.12 ----- 42.8 43.2 298.4 47.2 22.0 -27.3 22.1 -26.9 22.7 -24.9 23.1 -25.4
2025-12-12T16:58:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:58:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:58:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.623368
2025-12-12T16:58:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:58:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:58:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:58:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:58:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:58:16.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:58:05', tmtdew=21.61, humidity=23.28, cloud=0.0, wind=40.18, temperature=19.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:57:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:58:16.034 [DEBUG] [Thread-73282] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:58:16.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:58:16.130 [DEBUG] [Thread-73286] [transport.py] [_log()] starting thread (client mode): 0xf574e110
2025-12-12T16:58:16.130 [DEBUG] [Thread-73286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:58:16.145 [DEBUG] [Thread-73286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:58:16.145 [INFO] [Thread-73286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:58:16.152 [DEBUG] [Thread-73286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:58:16.152 [DEBUG] [Thread-73286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] client lang: <none>
2025-12-12T16:58:16.153 [DEBUG] [Thread-73286] [transport.py] [_log()] server lang: <none>
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] kex follows: False
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] Compression: none
2025-12-12T16:58:16.154 [DEBUG] [Thread-73286] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:58:16.210 [DEBUG] [Thread-73286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:58:16.211 [DEBUG] [Thread-73286] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:58:16.211 [DEBUG] [Thread-73286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:58:16.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:58:16.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:58:16.267 [DEBUG] [Thread-73286] [transport.py] [_log()] userauth is OK
2025-12-12T16:58:16.267 [DEBUG] [Thread-73286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:58:16.267 [DEBUG] [Thread-73286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:58:16.267 [DEBUG] [Thread-73286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:58:16.267 [DEBUG] [Thread-73286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:58:16.286 [INFO] [Thread-73286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:58:16.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:58:16.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:58:17.144 [DEBUG] [Thread-73286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:58:17.144 [DEBUG] [Thread-73286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:58:17.151 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:17.191 [DEBUG] [Thread-73286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:58:17.192 [DEBUG] [Thread-73286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:58:17.200 [DEBUG] [Thread-73286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:58:17.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:58:17.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')
2025-12-12T16:58:17.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:58:17.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:58:17.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:58:17.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:58:17.234 [DEBUG] [Thread-73286] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:58:17.633 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:26.142 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:30.675 [DEBUG] [Thread-73288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:32.676 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:39.193 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:45.674 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:45.716 [DEBUG] [Thread-73289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:47.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:58:47.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:58:47.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:58:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 58, 37), 21.72, 22.71, 0.0, 37.16, 19.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:58:47.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:58:37
2025-12-12T16:58:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:58:48.198 [DEBUG] [Thread-73290] [transport.py] [_log()] starting thread (client mode): 0xf578b760
2025-12-12T16:58:48.198 [DEBUG] [Thread-73290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:58:48.219 [DEBUG] [Thread-73290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:58:48.220 [INFO] [Thread-73290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] client lang: <none>
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] server lang: <none>
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] kex follows: False
2025-12-12T16:58:48.223 [DEBUG] [Thread-73290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:58:48.224 [DEBUG] [Thread-73290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:58:48.224 [DEBUG] [Thread-73290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:58:48.224 [DEBUG] [Thread-73290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:58:48.224 [DEBUG] [Thread-73290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:58:48.224 [DEBUG] [Thread-73290] [transport.py] [_log()] Compression: none
2025-12-12T16:58:48.224 [DEBUG] [Thread-73290] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:58:48.242 [DEBUG] [Thread-73290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:58:48.243 [DEBUG] [Thread-73290] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:58:48.243 [DEBUG] [Thread-73290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:58:48.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:58:48.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:58:48.246 [DEBUG] [Thread-73290] [transport.py] [_log()] userauth is OK
2025-12-12T16:58:48.246 [DEBUG] [Thread-73290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:58:48.246 [DEBUG] [Thread-73290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:58:48.246 [DEBUG] [Thread-73290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:58:48.246 [DEBUG] [Thread-73290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:58:48.260 [INFO] [Thread-73290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:58:48.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:58:49.006 [DEBUG] [Thread-73290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:58:49.006 [DEBUG] [Thread-73290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:58:49.007 [DEBUG] [Thread-73290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:58:49.047 [DEBUG] [Thread-73290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:58:49.047 [DEBUG] [Thread-73290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:58:49.050 [DEBUG] [Thread-73290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:58:49.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:58:49.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:58:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:58:49.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:58:49.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:58:49.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:58:49.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:58:49.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:58:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:58:49.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.623715 -999.00  +19.00  30.18     29   +0.80 1 1 2 1 1   887    0 21.21 120.30 ----- 40.8 30.2 302.4 47.0 22.0 -26.8 22.1 -26.6 22.8 -25.0 23.1 -25.0
2025-12-12T16:58:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:58:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:58:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.623715
2025-12-12T16:58:49.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:58:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:58:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:58:49.068 [DEBUG] [Thread-73290] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:58:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:58:49.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:58:49.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:58:37', tmtdew=21.72, humidity=22.71, cloud=0.0, wind=37.16, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:58:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:58:49.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:58:49.164 [DEBUG] [Thread-73293] [transport.py] [_log()] starting thread (client mode): 0xf81e4e80
2025-12-12T16:58:49.164 [DEBUG] [Thread-73293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:58:49.179 [DEBUG] [Thread-73293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:58:49.179 [INFO] [Thread-73293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:58:49.186 [DEBUG] [Thread-73293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] client lang: <none>
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] server lang: <none>
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] kex follows: False
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] Compression: none
2025-12-12T16:58:49.187 [DEBUG] [Thread-73293] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:58:49.245 [DEBUG] [Thread-73293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:58:49.246 [DEBUG] [Thread-73293] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:58:49.246 [DEBUG] [Thread-73293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:58:49.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:58:49.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:58:49.302 [DEBUG] [Thread-73293] [transport.py] [_log()] userauth is OK
2025-12-12T16:58:49.302 [DEBUG] [Thread-73293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:58:49.302 [DEBUG] [Thread-73293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:58:49.302 [DEBUG] [Thread-73293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:58:49.302 [DEBUG] [Thread-73293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:58:49.321 [INFO] [Thread-73293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:58:49.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:58:49.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:58:50.156 [DEBUG] [Thread-73293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:58:50.156 [DEBUG] [Thread-73293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:58:50.203 [DEBUG] [Thread-73293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:58:50.204 [DEBUG] [Thread-73293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:58:50.212 [DEBUG] [Thread-73293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:58:50.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:58:50.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:58:50.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:58:50.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:58:50.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:58:50.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:58:50.246 [DEBUG] [Thread-73293] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:58:52.186 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:55.364 [DEBUG] [Thread-73295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:58:58.697 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:00.743 [DEBUG] [Thread-73296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:05.198 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:11.720 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:14.000 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:14.001 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:15.785 [DEBUG] [Thread-73297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:18.207 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:59:20.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:59:20.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T16:59:20.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 58, 37), 21.72, 22.71, 0.0, 37.16, 19.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:59:20.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:58:37
2025-12-12T16:59:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:59:21.209 [DEBUG] [Thread-73298] [transport.py] [_log()] starting thread (client mode): 0xf81e6980
2025-12-12T16:59:21.209 [DEBUG] [Thread-73298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:59:21.231 [DEBUG] [Thread-73298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:59:21.231 [INFO] [Thread-73298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] client lang: <none>
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] server lang: <none>
2025-12-12T16:59:21.234 [DEBUG] [Thread-73298] [transport.py] [_log()] kex follows: False
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] Compression: none
2025-12-12T16:59:21.235 [DEBUG] [Thread-73298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:59:21.252 [DEBUG] [Thread-73298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:59:21.252 [DEBUG] [Thread-73298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:59:21.253 [DEBUG] [Thread-73298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:59:21.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:59:21.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:59:21.255 [DEBUG] [Thread-73298] [transport.py] [_log()] userauth is OK
2025-12-12T16:59:21.255 [DEBUG] [Thread-73298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:59:21.255 [DEBUG] [Thread-73298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:59:21.255 [DEBUG] [Thread-73298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:59:21.255 [DEBUG] [Thread-73298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:59:21.274 [INFO] [Thread-73298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:59:21.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:59:21.915 [DEBUG] [Thread-73298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:59:21.915 [DEBUG] [Thread-73298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:59:21.916 [DEBUG] [Thread-73298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:59:21.956 [DEBUG] [Thread-73298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:59:21.956 [DEBUG] [Thread-73298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:59:21.959 [DEBUG] [Thread-73298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:59:21.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:59:21.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:59:21.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:59:21.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:59:21.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:59:21.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:59:21.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:59:21.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:59:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:59:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.624062 -999.00  +19.10  41.87     29   +0.70 1 1 2 1 1   887    0 20.54 104.11 ----- 45.3 41.9 307.0 48.9 21.9 -27.8 22.0 -27.1 22.7 -26.0 23.1 -25.8
2025-12-12T16:59:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:59:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:59:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.624062
2025-12-12T16:59:21.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:59:21.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:59:21.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:59:21.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:59:21.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:59:21.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:58:37', tmtdew=21.72, humidity=22.71, cloud=0.0, wind=37.16, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:58:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:59:21.983 [DEBUG] [Thread-73298] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:59:22.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:59:22.081 [DEBUG] [Thread-73301] [transport.py] [_log()] starting thread (client mode): 0xf81e5f90
2025-12-12T16:59:22.081 [DEBUG] [Thread-73301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:59:22.096 [DEBUG] [Thread-73301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:59:22.096 [INFO] [Thread-73301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:59:22.103 [DEBUG] [Thread-73301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:59:22.104 [DEBUG] [Thread-73301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] client lang: <none>
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] server lang: <none>
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] kex follows: False
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:59:22.105 [DEBUG] [Thread-73301] [transport.py] [_log()] Compression: none
2025-12-12T16:59:22.106 [DEBUG] [Thread-73301] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:59:22.162 [DEBUG] [Thread-73301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:59:22.162 [DEBUG] [Thread-73301] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:59:22.163 [DEBUG] [Thread-73301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:59:22.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:59:22.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:59:22.217 [DEBUG] [Thread-73301] [transport.py] [_log()] userauth is OK
2025-12-12T16:59:22.218 [DEBUG] [Thread-73301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:59:22.218 [DEBUG] [Thread-73301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:59:22.218 [DEBUG] [Thread-73301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:59:22.218 [DEBUG] [Thread-73301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:59:22.236 [INFO] [Thread-73301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:59:22.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:59:22.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:59:23.091 [DEBUG] [Thread-73301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:59:23.092 [DEBUG] [Thread-73301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:59:23.140 [DEBUG] [Thread-73301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:59:23.140 [DEBUG] [Thread-73301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:59:23.149 [DEBUG] [Thread-73301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:59:23.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:59:23.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:59:23.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:59:23.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:59:23.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:59:23.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:59:23.183 [DEBUG] [Thread-73301] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:59:24.749 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:25.225 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:27.735 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:28.205 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:28.701 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:29.188 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:29.676 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:30.169 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:30.695 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:30.815 [DEBUG] [Thread-73303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:31.183 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:31.713 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:32.200 [DEBUG] [Thread-73196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:45.854 [DEBUG] [Thread-73304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:53.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T16:59:53.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T16:59:53.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
2025-12-12T16:59:53.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 16, 59, 9), 21.76, 22.68, 0.0, 43.17, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T16:59:53.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 16:59:09
2025-12-12T16:59:53.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T16:59:54.119 [DEBUG] [Thread-73305] [transport.py] [_log()] starting thread (client mode): 0xf81e6a70
2025-12-12T16:59:54.120 [DEBUG] [Thread-73305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:59:54.140 [DEBUG] [Thread-73305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T16:59:54.140 [INFO] [Thread-73305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T16:59:54.141 [DEBUG] [Thread-73305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] client lang: <none>
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] server lang: <none>
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] kex follows: False
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] Compression: none
2025-12-12T16:59:54.142 [DEBUG] [Thread-73305] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:59:54.155 [DEBUG] [Thread-73305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:59:54.155 [DEBUG] [Thread-73305] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:59:54.156 [DEBUG] [Thread-73305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T16:59:54.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T16:59:54.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:59:54.157 [DEBUG] [Thread-73305] [transport.py] [_log()] userauth is OK
2025-12-12T16:59:54.158 [DEBUG] [Thread-73305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:59:54.158 [DEBUG] [Thread-73305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:59:54.158 [DEBUG] [Thread-73305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T16:59:54.158 [DEBUG] [Thread-73305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:59:54.181 [INFO] [Thread-73305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:59:54.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:59:54.942 [DEBUG] [Thread-73305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:59:54.942 [DEBUG] [Thread-73305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:59:54.942 [DEBUG] [Thread-73305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T16:59:54.983 [DEBUG] [Thread-73305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:59:54.983 [DEBUG] [Thread-73305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:59:54.985 [DEBUG] [Thread-73305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:59:54.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:59:54.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T16:59:54.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T16:59:55.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T16:59:55.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:59:55.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T16:59:55.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:59:55.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:59:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T16:59:55.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.624410 -999.00  +19.30  41.91     28   +0.60 1 1 2 1 1   887    0 21.20 113.59 ----- 41.9 41.9 298.2 49.3 22.0 -27.3 22.1 -27.0 22.7 -25.5 23.1 -25.0
2025-12-12T16:59:55.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T16:59:55.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T16:59:55.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.624410
2025-12-12T16:59:55.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T16:59:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T16:59:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T16:59:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T16:59:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T16:59:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T16:59:09', tmtdew=21.76, humidity=22.68, cloud=0.0, wind=43.17, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T14:59:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T16:59:55.012 [DEBUG] [Thread-73305] [transport.py] [_log()] EOF in transport thread
2025-12-12T16:59:55.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T16:59:55.109 [DEBUG] [Thread-73308] [transport.py] [_log()] starting thread (client mode): 0xf57bfb80
2025-12-12T16:59:55.109 [DEBUG] [Thread-73308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T16:59:55.124 [DEBUG] [Thread-73308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T16:59:55.124 [INFO] [Thread-73308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T16:59:55.131 [DEBUG] [Thread-73308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T16:59:55.132 [DEBUG] [Thread-73308] [transport.py] [_log()] client lang: <none>
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] server lang: <none>
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] kex follows: False
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] Compression: none
2025-12-12T16:59:55.133 [DEBUG] [Thread-73308] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T16:59:55.189 [DEBUG] [Thread-73308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T16:59:55.190 [DEBUG] [Thread-73308] [transport.py] [_log()] Switch to new keys ...
2025-12-12T16:59:55.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T16:59:55.190 [DEBUG] [Thread-73308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T16:59:55.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T16:59:55.245 [DEBUG] [Thread-73308] [transport.py] [_log()] userauth is OK
2025-12-12T16:59:55.245 [DEBUG] [Thread-73308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T16:59:55.245 [DEBUG] [Thread-73308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T16:59:55.246 [DEBUG] [Thread-73308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T16:59:55.246 [DEBUG] [Thread-73308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T16:59:55.263 [INFO] [Thread-73308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T16:59:55.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T16:59:55.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T16:59:55.405 [DEBUG] [Thread-73310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T16:59:56.090 [DEBUG] [Thread-73308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T16:59:56.090 [DEBUG] [Thread-73308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T16:59:56.138 [DEBUG] [Thread-73308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T16:59:56.138 [DEBUG] [Thread-73308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T16:59:56.152 [DEBUG] [Thread-73308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T16:59:56.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T16:59:56.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T16:59:56.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T16:59:56.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T16:59:56.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T16:59:56.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T16:59:56.186 [DEBUG] [Thread-73308] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:00:00.880 [DEBUG] [Thread-73311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:14.144 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:14.144 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:15.924 [DEBUG] [Thread-73312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:00:26.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:00:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:00:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 0, 20), 21.09, 23.61, 0.0, 40.42, 19.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:00:26.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:00:20
2025-12-12T17:00:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:00:27.178 [DEBUG] [Thread-73313] [transport.py] [_log()] starting thread (client mode): 0xf5742e00
2025-12-12T17:00:27.178 [DEBUG] [Thread-73313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:00:27.198 [DEBUG] [Thread-73313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:00:27.198 [INFO] [Thread-73313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] client lang: <none>
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] server lang: <none>
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] kex follows: False
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] Compression: none
2025-12-12T17:00:27.201 [DEBUG] [Thread-73313] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:00:27.219 [DEBUG] [Thread-73313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:00:27.219 [DEBUG] [Thread-73313] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:00:27.219 [DEBUG] [Thread-73313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:00:27.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:00:27.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:00:27.220 [DEBUG] [Thread-73313] [transport.py] [_log()] userauth is OK
2025-12-12T17:00:27.220 [DEBUG] [Thread-73313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:00:27.220 [DEBUG] [Thread-73313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:00:27.220 [DEBUG] [Thread-73313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:00:27.220 [DEBUG] [Thread-73313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:00:27.230 [INFO] [Thread-73313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:00:27.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:00:27.877 [DEBUG] [Thread-73313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:00:27.877 [DEBUG] [Thread-73313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:00:27.877 [DEBUG] [Thread-73313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:00:27.919 [DEBUG] [Thread-73313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:00:27.919 [DEBUG] [Thread-73313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:00:27.920 [DEBUG] [Thread-73313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:00:27.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:00:27.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:00:27.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:00:27.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:00:27.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:00:27.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:00:27.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.625104 -999.00  +19.60  30.65     27   +0.30 1 1 2 1 1   887    0 21.48 130.77 ----- 32.2 30.6 306.2 41.4 22.1 -26.5 22.2 -26.6 23.0 -23.6 23.2 -24.8
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.625104
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:00:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:00:20', tmtdew=21.09, humidity=23.61, cloud=0.0, wind=40.42, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:00:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:00:27.938 [DEBUG] [Thread-73313] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:00:28.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:00:28.023 [DEBUG] [Thread-73316] [transport.py] [_log()] starting thread (client mode): 0xf57bccd0
2025-12-12T17:00:28.023 [DEBUG] [Thread-73316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:00:28.037 [DEBUG] [Thread-73316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:00:28.037 [INFO] [Thread-73316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:00:28.048 [DEBUG] [Thread-73316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] client lang: <none>
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] server lang: <none>
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] kex follows: False
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] Compression: none
2025-12-12T17:00:28.049 [DEBUG] [Thread-73316] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:00:28.103 [DEBUG] [Thread-73316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:00:28.103 [DEBUG] [Thread-73316] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:00:28.103 [DEBUG] [Thread-73316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:00:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:00:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:00:28.161 [DEBUG] [Thread-73316] [transport.py] [_log()] userauth is OK
2025-12-12T17:00:28.161 [DEBUG] [Thread-73316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:00:28.161 [DEBUG] [Thread-73316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:00:28.161 [DEBUG] [Thread-73316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:00:28.161 [DEBUG] [Thread-73316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:00:28.175 [INFO] [Thread-73316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:00:28.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:00:28.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:00:29.001 [DEBUG] [Thread-73316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:00:29.001 [DEBUG] [Thread-73316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:00:29.048 [DEBUG] [Thread-73316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:00:29.048 [DEBUG] [Thread-73316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:00:29.057 [DEBUG] [Thread-73316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:00:29.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:00:29.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:00:29.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:00:29.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:00:29.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:00:29.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:00:29.089 [DEBUG] [Thread-73316] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:00:30.956 [DEBUG] [Thread-73318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:45.990 [DEBUG] [Thread-73319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:55.446 [DEBUG] [Thread-73320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:00:59.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:00:59.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:00:59.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:00:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 0, 20), 21.09, 23.61, 0.0, 40.42, 19.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:00:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:00:20
2025-12-12T17:00:59.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:01:00.093 [DEBUG] [Thread-73321] [transport.py] [_log()] starting thread (client mode): 0xf57435b0
2025-12-12T17:01:00.093 [DEBUG] [Thread-73321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:01:00.113 [DEBUG] [Thread-73321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:01:00.113 [INFO] [Thread-73321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:01:00.116 [DEBUG] [Thread-73321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] client lang: <none>
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] server lang: <none>
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] kex follows: False
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] Compression: none
2025-12-12T17:01:00.117 [DEBUG] [Thread-73321] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:01:00.133 [DEBUG] [Thread-73321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:01:00.133 [DEBUG] [Thread-73321] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:01:00.134 [DEBUG] [Thread-73321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:01:00.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:01:00.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:01:00.134 [DEBUG] [Thread-73321] [transport.py] [_log()] userauth is OK
2025-12-12T17:01:00.135 [DEBUG] [Thread-73321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:01:00.135 [DEBUG] [Thread-73321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:01:00.135 [DEBUG] [Thread-73321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:01:00.135 [DEBUG] [Thread-73321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:01:00.152 [INFO] [Thread-73321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:01:00.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:01:00.920 [DEBUG] [Thread-73321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:01:00.920 [DEBUG] [Thread-73321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:01:00.921 [DEBUG] [Thread-73321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:01:00.962 [DEBUG] [Thread-73321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:01:00.962 [DEBUG] [Thread-73321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:01:00.965 [DEBUG] [Thread-73321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:01:00.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:01:00.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:01:00.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:01:00.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:01:00.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:01:00.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:01:00.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:01:00.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:01:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:01:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.625451 -999.00  +19.40  40.77     27   +0.00 1 1 2 1 1   887    0 21.94 128.71 ----- 34.6 40.8 298.2 53.1 22.1 -27.6 22.1 -27.5 22.9 -24.1 23.3 -25.3
2025-12-12T17:01:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:01:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:01:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.625451
2025-12-12T17:01:00.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:01:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:01:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:01:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:01:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:01:00.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:00:20', tmtdew=21.09, humidity=23.61, cloud=0.0, wind=40.42, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:00:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:01:00.989 [DEBUG] [Thread-73321] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:01:01.021 [DEBUG] [Thread-73324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:01:01.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:01:01.085 [DEBUG] [Thread-73325] [transport.py] [_log()] starting thread (client mode): 0xf813c9a0
2025-12-12T17:01:01.085 [DEBUG] [Thread-73325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:01:01.100 [DEBUG] [Thread-73325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:01:01.100 [INFO] [Thread-73325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] client lang: <none>
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] server lang: <none>
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] kex follows: False
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:01:01.108 [DEBUG] [Thread-73325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:01:01.109 [DEBUG] [Thread-73325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:01:01.109 [DEBUG] [Thread-73325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:01:01.109 [DEBUG] [Thread-73325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:01:01.109 [DEBUG] [Thread-73325] [transport.py] [_log()] Compression: none
2025-12-12T17:01:01.109 [DEBUG] [Thread-73325] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:01:01.165 [DEBUG] [Thread-73325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:01:01.165 [DEBUG] [Thread-73325] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:01:01.166 [DEBUG] [Thread-73325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:01:01.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:01:01.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:01:01.220 [DEBUG] [Thread-73325] [transport.py] [_log()] userauth is OK
2025-12-12T17:01:01.220 [DEBUG] [Thread-73325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:01:01.220 [DEBUG] [Thread-73325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:01:01.221 [DEBUG] [Thread-73325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:01:01.221 [DEBUG] [Thread-73325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:01:01.243 [INFO] [Thread-73325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:01:01.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:01:01.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:01:02.112 [DEBUG] [Thread-73325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:01:02.112 [DEBUG] [Thread-73325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:01:02.159 [DEBUG] [Thread-73325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:01:02.160 [DEBUG] [Thread-73325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:01:02.168 [DEBUG] [Thread-73325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:01:02.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:01:02.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:01:02.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
2025-12-12T17:01:02.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:01:02.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:01:02.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:01:02.203 [DEBUG] [Thread-73325] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:01:14.284 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:01:14.284 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:01:16.053 [DEBUG] [Thread-73327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:01:31.082 [DEBUG] [Thread-73328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:01:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:01:32.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:01: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
2025-12-12T17:01:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 0, 55), 21.43, 23.47, 0.0, 44.23, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:01:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:00:55
2025-12-12T17:01:33.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:01:33.230 [DEBUG] [Thread-73329] [transport.py] [_log()] starting thread (client mode): 0xf5789750
2025-12-12T17:01:33.231 [DEBUG] [Thread-73329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:01:33.250 [DEBUG] [Thread-73329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:01:33.250 [INFO] [Thread-73329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:01:33.253 [DEBUG] [Thread-73329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:01:33.253 [DEBUG] [Thread-73329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] client lang: <none>
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] server lang: <none>
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] kex follows: False
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:01:33.254 [DEBUG] [Thread-73329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:01:33.255 [DEBUG] [Thread-73329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:01:33.255 [DEBUG] [Thread-73329] [transport.py] [_log()] Compression: none
2025-12-12T17:01:33.255 [DEBUG] [Thread-73329] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:01:33.272 [DEBUG] [Thread-73329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:01:33.273 [DEBUG] [Thread-73329] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:01:33.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:01:33.274 [DEBUG] [Thread-73329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:01:33.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:01:33.276 [DEBUG] [Thread-73329] [transport.py] [_log()] userauth is OK
2025-12-12T17:01:33.276 [DEBUG] [Thread-73329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:01:33.276 [DEBUG] [Thread-73329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:01:33.276 [DEBUG] [Thread-73329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:01:33.277 [DEBUG] [Thread-73329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:01:33.299 [INFO] [Thread-73329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:01:33.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:01:33.897 [DEBUG] [Thread-73329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:01:33.897 [DEBUG] [Thread-73329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:01:33.898 [DEBUG] [Thread-73329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:01:33.939 [DEBUG] [Thread-73329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:01:33.939 [DEBUG] [Thread-73329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:01:33.942 [DEBUG] [Thread-73329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:01:33.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:01:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:01:33.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:01:33.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:01:33.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:01:33.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:01:33.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:01:33.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:01:33.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:01:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.625799 -999.00  +19.00  47.28     27   +0.00 1 1 2 1 1   887    0 21.48 128.91 ----- 55.6 47.3 293.6 58.3 22.0 -28.9 22.1 -27.5 22.7 -25.0 23.2 -25.5
2025-12-12T17:01:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:01:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:01:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.625799
2025-12-12T17:01:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:01:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:01:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:01:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:01:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:01:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:00:55', tmtdew=21.43, humidity=23.47, cloud=0.0, wind=44.23, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:01:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:01:33.968 [DEBUG] [Thread-73329] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:01:34.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:01:34.065 [DEBUG] [Thread-73332] [transport.py] [_log()] starting thread (client mode): 0xf578bd90
2025-12-12T17:01:34.065 [DEBUG] [Thread-73332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:01:34.080 [DEBUG] [Thread-73332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:01:34.080 [INFO] [Thread-73332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:01:34.087 [DEBUG] [Thread-73332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] client lang: <none>
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] server lang: <none>
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] kex follows: False
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] Compression: none
2025-12-12T17:01:34.088 [DEBUG] [Thread-73332] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:01:34.144 [DEBUG] [Thread-73332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:01:34.144 [DEBUG] [Thread-73332] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:01:34.145 [DEBUG] [Thread-73332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:01:34.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:01:34.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:01:34.200 [DEBUG] [Thread-73332] [transport.py] [_log()] userauth is OK
2025-12-12T17:01:34.200 [DEBUG] [Thread-73332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:01:34.201 [DEBUG] [Thread-73332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:01:34.201 [DEBUG] [Thread-73332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:01:34.201 [DEBUG] [Thread-73332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:01:34.219 [INFO] [Thread-73332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:01:34.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:01:34.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:01:35.075 [DEBUG] [Thread-73332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:01:35.076 [DEBUG] [Thread-73332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:01:35.124 [DEBUG] [Thread-73332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:01:35.124 [DEBUG] [Thread-73332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:01:35.133 [DEBUG] [Thread-73332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:01:35.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:01:35.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:01:35.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:01:35.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:01:35.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:01:35.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:01:35.167 [DEBUG] [Thread-73332] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:01:46.110 [DEBUG] [Thread-73334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:01:55.499 [DEBUG] [Thread-73335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:01.155 [DEBUG] [Thread-73336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:02:05.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:02:05.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:02:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 1, 30), 21.89, 22.69, 0.0, 46.12, 19.17, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:02:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:01:30
2025-12-12T17:02:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:02:06.154 [DEBUG] [Thread-73337] [transport.py] [_log()] starting thread (client mode): 0xf57bcb80
2025-12-12T17:02:06.154 [DEBUG] [Thread-73337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:02:06.176 [DEBUG] [Thread-73337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:02:06.177 [INFO] [Thread-73337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:02:06.181 [DEBUG] [Thread-73337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] client lang: <none>
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] server lang: <none>
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] kex follows: False
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] Compression: none
2025-12-12T17:02:06.182 [DEBUG] [Thread-73337] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:02:06.199 [DEBUG] [Thread-73337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:02:06.200 [DEBUG] [Thread-73337] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:02:06.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:02:06.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:02:06.202 [DEBUG] [Thread-73337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:02:06.202 [DEBUG] [Thread-73337] [transport.py] [_log()] userauth is OK
2025-12-12T17:02:06.202 [DEBUG] [Thread-73337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:02:06.202 [DEBUG] [Thread-73337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:02:06.202 [DEBUG] [Thread-73337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:02:06.202 [DEBUG] [Thread-73337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:02:06.225 [INFO] [Thread-73337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:02:06.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:02:07.040 [DEBUG] [Thread-73337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:02:07.040 [DEBUG] [Thread-73337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:02:07.040 [DEBUG] [Thread-73337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:02:07.081 [DEBUG] [Thread-73337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:02:07.081 [DEBUG] [Thread-73337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:02:07.084 [DEBUG] [Thread-73337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:02:07.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:02:07.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:02:07.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:02:07.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:02:07.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:02:07.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:02:07.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:02:07.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:02:07.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:02:07.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.626146 -999.00  +18.80  42.57     28   +0.00 1 1 2 1 1   887    0 21.53 120.05 ----- 43.8 42.6 305.0 58.1 22.0 -27.2 22.0 -28.4 22.8 -26.5 23.1 -25.0
2025-12-12T17:02:07.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:02:07.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:02:07.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.626146
2025-12-12T17:02:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:02:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:02:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:02:07.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:02:07.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:02:07.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:01:30', tmtdew=21.89, humidity=22.69, cloud=0.0, wind=46.12, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:01:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:02:07.109 [DEBUG] [Thread-73337] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:02:07.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:02:07.206 [DEBUG] [Thread-73340] [transport.py] [_log()] starting thread (client mode): 0xf81e6bc0
2025-12-12T17:02:07.206 [DEBUG] [Thread-73340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:02:07.225 [DEBUG] [Thread-73340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:02:07.225 [INFO] [Thread-73340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] client lang: <none>
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] server lang: <none>
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] kex follows: False
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:02:07.233 [DEBUG] [Thread-73340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:02:07.234 [DEBUG] [Thread-73340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:02:07.234 [DEBUG] [Thread-73340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:02:07.234 [DEBUG] [Thread-73340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:02:07.234 [DEBUG] [Thread-73340] [transport.py] [_log()] Compression: none
2025-12-12T17:02:07.234 [DEBUG] [Thread-73340] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:02:07.291 [DEBUG] [Thread-73340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:02:07.292 [DEBUG] [Thread-73340] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:02:07.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:02:07.293 [DEBUG] [Thread-73340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:02:07.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:02:07.347 [DEBUG] [Thread-73340] [transport.py] [_log()] userauth is OK
2025-12-12T17:02:07.348 [DEBUG] [Thread-73340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:02:07.348 [DEBUG] [Thread-73340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:02:07.348 [DEBUG] [Thread-73340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:02:07.348 [DEBUG] [Thread-73340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:02:07.367 [INFO] [Thread-73340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:02:07.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:02:07.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:02:08.223 [DEBUG] [Thread-73340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:02:08.224 [DEBUG] [Thread-73340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:02:08.272 [DEBUG] [Thread-73340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:02:08.272 [DEBUG] [Thread-73340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:02:08.281 [DEBUG] [Thread-73340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:02:08.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:02: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')
2025-12-12T17:02:08.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:02:08.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:02:08.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:02:08.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:02:08.320 [DEBUG] [Thread-73340] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:02:14.425 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:14.426 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:16.181 [DEBUG] [Thread-73342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:31.230 [DEBUG] [Thread-73343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:02:38.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:02:38.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:02:39.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 2, 35), 21.85, 22.8, 0.0, 40.53, 18.92, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:02:39.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:02:35
2025-12-12T17:02:39.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:02:39.287 [DEBUG] [Thread-73344] [transport.py] [_log()] starting thread (client mode): 0xf81e7490
2025-12-12T17:02:39.287 [DEBUG] [Thread-73344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:02:39.306 [DEBUG] [Thread-73344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:02:39.306 [INFO] [Thread-73344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] client lang: <none>
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] server lang: <none>
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] kex follows: False
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:02:39.310 [DEBUG] [Thread-73344] [transport.py] [_log()] Compression: none
2025-12-12T17:02:39.311 [DEBUG] [Thread-73344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:02:39.327 [DEBUG] [Thread-73344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:02:39.327 [DEBUG] [Thread-73344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:02:39.328 [DEBUG] [Thread-73344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:02:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:02:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:02:39.330 [DEBUG] [Thread-73344] [transport.py] [_log()] userauth is OK
2025-12-12T17:02:39.331 [DEBUG] [Thread-73344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:02:39.331 [DEBUG] [Thread-73344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:02:39.331 [DEBUG] [Thread-73344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:02:39.331 [DEBUG] [Thread-73344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:02:39.355 [INFO] [Thread-73344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:02:39.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:02:39.992 [DEBUG] [Thread-73344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:02:39.993 [DEBUG] [Thread-73344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:02:39.993 [DEBUG] [Thread-73344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:02:40.034 [DEBUG] [Thread-73344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:02:40.034 [DEBUG] [Thread-73344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:02:40.037 [DEBUG] [Thread-73344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:02:40.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:02:40.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:02:40.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:02:40.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:02:40.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:02:40.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:02:40.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:02:40.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:02:40.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:02:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.626482 -999.00  +18.40  44.41     28   +0.00 1 1 2 1 1   887    0 22.37 126.82 ----- 50.0 44.4 292.2 57.1 21.9 -27.8 21.9 -27.6 22.6 -25.7 23.0 -26.3
2025-12-12T17:02:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:02:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:02:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.626482
2025-12-12T17:02:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:02:40.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:02:40.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:02:40.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:02:40.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:02:40.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:02:35', tmtdew=21.85, humidity=22.8, cloud=0.0, wind=40.53, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:02:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:02:40.065 [DEBUG] [Thread-73344] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:02:40.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:02:40.161 [DEBUG] [Thread-73347] [transport.py] [_log()] starting thread (client mode): 0xf574e080
2025-12-12T17:02:40.161 [DEBUG] [Thread-73347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:02:40.176 [DEBUG] [Thread-73347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:02:40.176 [INFO] [Thread-73347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:02:40.188 [DEBUG] [Thread-73347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:02:40.188 [DEBUG] [Thread-73347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:02:40.188 [DEBUG] [Thread-73347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:02:40.188 [DEBUG] [Thread-73347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] client lang: <none>
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] server lang: <none>
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] kex follows: False
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] Compression: none
2025-12-12T17:02:40.189 [DEBUG] [Thread-73347] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:02:40.247 [DEBUG] [Thread-73347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:02:40.248 [DEBUG] [Thread-73347] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:02:40.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:02:40.249 [DEBUG] [Thread-73347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:02:40.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:02:40.305 [DEBUG] [Thread-73347] [transport.py] [_log()] userauth is OK
2025-12-12T17:02:40.305 [DEBUG] [Thread-73347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:02:40.305 [DEBUG] [Thread-73347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:02:40.305 [DEBUG] [Thread-73347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:02:40.305 [DEBUG] [Thread-73347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:02:40.324 [INFO] [Thread-73347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:02:40.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:02:40.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:02:41.175 [DEBUG] [Thread-73347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:02:41.176 [DEBUG] [Thread-73347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:02:41.227 [DEBUG] [Thread-73347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:02:41.227 [DEBUG] [Thread-73347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:02:41.239 [DEBUG] [Thread-73347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:02:41.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:02:41.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:02:41.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:02:41.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:02:41.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:02:41.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:02:41.274 [DEBUG] [Thread-73347] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:02:46.258 [DEBUG] [Thread-73349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:02:55.534 [DEBUG] [Thread-73350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:01.302 [DEBUG] [Thread-73351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:03:11.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:03:11.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:03:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 3, 7), 22.09, 22.45, 0.0, 42.47, 19.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:03:11.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:03:07
2025-12-12T17:03:12.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:03:12.258 [DEBUG] [Thread-73352] [transport.py] [_log()] starting thread (client mode): 0xf574c970
2025-12-12T17:03:12.258 [DEBUG] [Thread-73352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:03:12.279 [DEBUG] [Thread-73352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:03:12.279 [INFO] [Thread-73352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] client lang: <none>
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] server lang: <none>
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] kex follows: False
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] Compression: none
2025-12-12T17:03:12.283 [DEBUG] [Thread-73352] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:03:12.299 [DEBUG] [Thread-73352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:03:12.300 [DEBUG] [Thread-73352] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:03:12.300 [DEBUG] [Thread-73352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:03:12.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:03:12.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:03:12.301 [DEBUG] [Thread-73352] [transport.py] [_log()] userauth is OK
2025-12-12T17:03:12.301 [DEBUG] [Thread-73352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:03:12.301 [DEBUG] [Thread-73352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:03:12.301 [DEBUG] [Thread-73352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:03:12.301 [DEBUG] [Thread-73352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:03:12.313 [INFO] [Thread-73352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:03:12.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:03:13.082 [DEBUG] [Thread-73352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:03:13.083 [DEBUG] [Thread-73352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:03:13.083 [DEBUG] [Thread-73352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:03:13.123 [DEBUG] [Thread-73352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:03:13.124 [DEBUG] [Thread-73352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:03:13.126 [DEBUG] [Thread-73352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:03:13.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:03:13.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:03:13.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:03:13.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:03:13.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:03:13.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:03:13.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:03:13.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:03:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:03:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.626840 -999.00  +18.40  33.16     29   +0.10 1 1 2 1 1   887    0 21.08 110.34 ----- 28.9 33.2 297.2 50.9 21.8 -26.9 21.9 -26.8 22.5 -24.6 22.9 -26.0
2025-12-12T17:03:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:03:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:03:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.626840
2025-12-12T17:03:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:03:13.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:03:13.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:03:13.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:03:13.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:03:13.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:03:07', tmtdew=22.09, humidity=22.45, cloud=0.0, wind=42.47, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:02:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:03:13.146 [DEBUG] [Thread-73352] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:03:13.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:03:13.242 [DEBUG] [Thread-73355] [transport.py] [_log()] starting thread (client mode): 0xf81e4c40
2025-12-12T17:03:13.242 [DEBUG] [Thread-73355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:03:13.257 [DEBUG] [Thread-73355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:03:13.257 [INFO] [Thread-73355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:13.265 [DEBUG] [Thread-73355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] client lang: <none>
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] server lang: <none>
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] kex follows: False
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] Compression: none
2025-12-12T17:03:13.266 [DEBUG] [Thread-73355] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:03:13.328 [DEBUG] [Thread-73355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:03:13.328 [DEBUG] [Thread-73355] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:03:13.329 [DEBUG] [Thread-73355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:03:13.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:03:13.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:03:13.383 [DEBUG] [Thread-73355] [transport.py] [_log()] userauth is OK
2025-12-12T17:03:13.383 [DEBUG] [Thread-73355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:03:13.383 [DEBUG] [Thread-73355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:03:13.384 [DEBUG] [Thread-73355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:03:13.384 [DEBUG] [Thread-73355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:03:13.402 [INFO] [Thread-73355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:03:13.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:03:13.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:03:14.230 [DEBUG] [Thread-73355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:03:14.231 [DEBUG] [Thread-73355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:03:14.279 [DEBUG] [Thread-73355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:03:14.279 [DEBUG] [Thread-73355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:03:14.288 [DEBUG] [Thread-73355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:03:14.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:03:14.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:03:14.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:03:14.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:03:14.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:03:14.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:03:14.323 [DEBUG] [Thread-73355] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:03:14.577 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:14.578 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:16.337 [DEBUG] [Thread-73357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:31.381 [DEBUG] [Thread-73358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:03:44.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:03:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:03:44.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 3, 39), 22.22, 21.9, 0.0, 50.04, 19.15, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:03:44.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:03:39
2025-12-12T17:03:45.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:03:45.264 [DEBUG] [Thread-73359] [transport.py] [_log()] starting thread (client mode): 0xf813cb50
2025-12-12T17:03:45.264 [DEBUG] [Thread-73359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:03:45.284 [DEBUG] [Thread-73359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:03:45.284 [INFO] [Thread-73359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:03:45.285 [DEBUG] [Thread-73359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:03:45.285 [DEBUG] [Thread-73359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] client lang: <none>
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] server lang: <none>
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] kex follows: False
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] Compression: none
2025-12-12T17:03:45.286 [DEBUG] [Thread-73359] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:03:45.302 [DEBUG] [Thread-73359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:03:45.302 [DEBUG] [Thread-73359] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:03:45.303 [DEBUG] [Thread-73359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:03:45.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:03:45.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:03:45.303 [DEBUG] [Thread-73359] [transport.py] [_log()] userauth is OK
2025-12-12T17:03:45.303 [DEBUG] [Thread-73359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:03:45.303 [DEBUG] [Thread-73359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:03:45.303 [DEBUG] [Thread-73359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:03:45.303 [DEBUG] [Thread-73359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:03:45.316 [INFO] [Thread-73359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:03:45.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:03:45.951 [DEBUG] [Thread-73359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:03:45.951 [DEBUG] [Thread-73359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:03:45.952 [DEBUG] [Thread-73359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:03:45.993 [DEBUG] [Thread-73359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:03:45.993 [DEBUG] [Thread-73359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:03:45.995 [DEBUG] [Thread-73359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:03:46.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:03:46.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:03:46.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:03:46.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:03:46.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:03:46.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:03:46.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.627187 -999.00  +18.80  40.51     28   +0.00 1 1 2 1 1   887    0 21.02 102.26 ----- 32.1 40.5 293.6 47.8 21.9 -27.4 22.0 -27.3 22.6 -24.7 22.9 -25.1
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.627187
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:03:39', tmtdew=22.22, humidity=21.9, cloud=0.0, wind=50.04, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:03:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:03:46.013 [DEBUG] [Thread-73359] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:03:46.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:03:46.097 [DEBUG] [Thread-73362] [transport.py] [_log()] starting thread (client mode): 0xf5703eb0
2025-12-12T17:03:46.097 [DEBUG] [Thread-73362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:03:46.113 [DEBUG] [Thread-73362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:03:46.113 [INFO] [Thread-73362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] client lang: <none>
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] server lang: <none>
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] kex follows: False
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] Compression: none
2025-12-12T17:03:46.121 [DEBUG] [Thread-73362] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:03:46.177 [DEBUG] [Thread-73362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:03:46.177 [DEBUG] [Thread-73362] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:03:46.177 [DEBUG] [Thread-73362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:03:46.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:03:46.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:03:46.235 [DEBUG] [Thread-73362] [transport.py] [_log()] userauth is OK
2025-12-12T17:03:46.235 [DEBUG] [Thread-73362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:03:46.235 [DEBUG] [Thread-73362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:03:46.235 [DEBUG] [Thread-73362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:03:46.235 [DEBUG] [Thread-73362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:03:46.249 [INFO] [Thread-73362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:03:46.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:03:46.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:03:46.414 [DEBUG] [Thread-73364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:03:47.115 [DEBUG] [Thread-73362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:03:47.116 [DEBUG] [Thread-73362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:03:47.163 [DEBUG] [Thread-73362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:03:47.163 [DEBUG] [Thread-73362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:03:47.171 [DEBUG] [Thread-73362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:03:47.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:03:47.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:03:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:03:47.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:03:47.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:03:47.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:03:47.203 [DEBUG] [Thread-73362] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:03:55.586 [DEBUG] [Thread-73365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:01.460 [DEBUG] [Thread-73366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:14.723 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:14.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:16.489 [DEBUG] [Thread-73367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:17.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:04:17.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:04:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:04:17.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 4, 11), 22.07, 22.11, 0.0, 42.35, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:04:17.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:04:11
2025-12-12T17:04:18.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:04:18.172 [DEBUG] [Thread-73368] [transport.py] [_log()] starting thread (client mode): 0xf5788310
2025-12-12T17:04:18.172 [DEBUG] [Thread-73368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:04:18.192 [DEBUG] [Thread-73368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:04:18.192 [INFO] [Thread-73368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] client lang: <none>
2025-12-12T17:04:18.194 [DEBUG] [Thread-73368] [transport.py] [_log()] server lang: <none>
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] kex follows: False
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] Compression: none
2025-12-12T17:04:18.195 [DEBUG] [Thread-73368] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:04:18.203 [DEBUG] [Thread-73368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:04:18.203 [DEBUG] [Thread-73368] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:04:18.204 [DEBUG] [Thread-73368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:04:18.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:04:18.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:04:18.205 [DEBUG] [Thread-73368] [transport.py] [_log()] userauth is OK
2025-12-12T17:04:18.205 [DEBUG] [Thread-73368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:04:18.205 [DEBUG] [Thread-73368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:04:18.206 [DEBUG] [Thread-73368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:04:18.206 [DEBUG] [Thread-73368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:04:18.228 [INFO] [Thread-73368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:04:18.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:04:18.942 [DEBUG] [Thread-73368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:04:18.943 [DEBUG] [Thread-73368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:04:18.943 [DEBUG] [Thread-73368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:04:18.984 [DEBUG] [Thread-73368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:04:18.984 [DEBUG] [Thread-73368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:04:18.986 [DEBUG] [Thread-73368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:04:19.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:04:19.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:04:19.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:04:19.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:04:19.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:04:19.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:04:19.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:04:19.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:04:19.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:04:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.627523 -999.00  +18.80  45.02     28   +0.00 1 1 2 1 1   887    0 21.26 101.29 ----- 35.7 45.0 297.8 53.2 21.8 -27.1 21.9 -26.8 22.6 -25.0 22.9 -25.9
2025-12-12T17:04:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:04:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:04:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.627523
2025-12-12T17:04:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:04:19.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:04:19.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:04:19.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:04:19.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:04:19.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:04:11', tmtdew=22.07, humidity=22.11, cloud=0.0, wind=42.35, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:03:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:04:19.012 [DEBUG] [Thread-73368] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:04:19.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:04:19.116 [DEBUG] [Thread-73371] [transport.py] [_log()] starting thread (client mode): 0xf813df00
2025-12-12T17:04:19.116 [DEBUG] [Thread-73371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:04:19.138 [DEBUG] [Thread-73371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:04:19.138 [INFO] [Thread-73371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:04:19.149 [DEBUG] [Thread-73371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:04:19.150 [DEBUG] [Thread-73371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] client lang: <none>
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] server lang: <none>
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] kex follows: False
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] Compression: none
2025-12-12T17:04:19.151 [DEBUG] [Thread-73371] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:04:19.210 [DEBUG] [Thread-73371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:04:19.210 [DEBUG] [Thread-73371] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:04:19.211 [DEBUG] [Thread-73371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:04:19.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:04:19.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:04:19.269 [DEBUG] [Thread-73371] [transport.py] [_log()] userauth is OK
2025-12-12T17:04:19.269 [DEBUG] [Thread-73371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:04:19.270 [DEBUG] [Thread-73371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:04:19.270 [DEBUG] [Thread-73371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:04:19.270 [DEBUG] [Thread-73371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:04:19.298 [INFO] [Thread-73371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:04:19.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:04:19.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:04:20.143 [DEBUG] [Thread-73371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:04:20.143 [DEBUG] [Thread-73371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:04:20.194 [DEBUG] [Thread-73371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:04:20.194 [DEBUG] [Thread-73371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:04:20.204 [DEBUG] [Thread-73371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:04:20.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:04:20.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:04:20.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:04:20.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:04:20.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:04:20.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:04:20.251 [DEBUG] [Thread-73371] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:04:31.518 [DEBUG] [Thread-73373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:46.562 [DEBUG] [Thread-73374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:04:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:04:50.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:04:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:04:50.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 4, 43), 21.89, 22.45, 0.0, 44.29, 18.85, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:04:50.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:04:43
2025-12-12T17:04:51.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:04:51.197 [DEBUG] [Thread-73375] [transport.py] [_log()] starting thread (client mode): 0xf81e47c0
2025-12-12T17:04:51.197 [DEBUG] [Thread-73375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:04:51.217 [DEBUG] [Thread-73375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:04:51.217 [INFO] [Thread-73375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] client lang: <none>
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] server lang: <none>
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] kex follows: False
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] Compression: none
2025-12-12T17:04:51.220 [DEBUG] [Thread-73375] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:04:51.237 [DEBUG] [Thread-73375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:04:51.238 [DEBUG] [Thread-73375] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:04:51.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:04:51.239 [DEBUG] [Thread-73375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:04:51.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:04:51.241 [DEBUG] [Thread-73375] [transport.py] [_log()] userauth is OK
2025-12-12T17:04:51.241 [DEBUG] [Thread-73375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:04:51.241 [DEBUG] [Thread-73375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:04:51.241 [DEBUG] [Thread-73375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:04:51.241 [DEBUG] [Thread-73375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:04:51.276 [INFO] [Thread-73375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:04:51.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:04:51.902 [DEBUG] [Thread-73375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:04:51.903 [DEBUG] [Thread-73375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:04:51.903 [DEBUG] [Thread-73375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:04:51.944 [DEBUG] [Thread-73375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:04:51.944 [DEBUG] [Thread-73375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:04:51.947 [DEBUG] [Thread-73375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:04:51.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:04:51.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:04:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:04:51.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:04:51.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:04:51.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:04:51.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:04:51.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:04:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:04:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.627882 -999.00  +19.00  41.82     27   +0.00 1 1 2 1 1   887    0 21.27 95.00 ----- 51.7 41.8 292.1 54.6 21.8 -28.7 21.9 -27.2 22.5 -24.9 22.9 -25.2
2025-12-12T17:04:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:04:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:04:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.627882
2025-12-12T17:04:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:04:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:04:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:04:51.972 [DEBUG] [Thread-73375] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:04:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:04:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:04:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:04:43', tmtdew=21.89, humidity=22.45, cloud=0.0, wind=44.29, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:04:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:04:52.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:04:52.069 [DEBUG] [Thread-73378] [transport.py] [_log()] starting thread (client mode): 0xf574db10
2025-12-12T17:04:52.069 [DEBUG] [Thread-73378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:04:52.084 [DEBUG] [Thread-73378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:04:52.084 [INFO] [Thread-73378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:04:52.091 [DEBUG] [Thread-73378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:04:52.091 [DEBUG] [Thread-73378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:04:52.091 [DEBUG] [Thread-73378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] client lang: <none>
2025-12-12T17:04:52.092 [DEBUG] [Thread-73378] [transport.py] [_log()] server lang: <none>
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] kex follows: False
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] Compression: none
2025-12-12T17:04:52.093 [DEBUG] [Thread-73378] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:04:52.151 [DEBUG] [Thread-73378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:04:52.151 [DEBUG] [Thread-73378] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:04:52.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:04:52.152 [DEBUG] [Thread-73378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:04:52.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:04:52.206 [DEBUG] [Thread-73378] [transport.py] [_log()] userauth is OK
2025-12-12T17:04:52.206 [DEBUG] [Thread-73378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:04:52.206 [DEBUG] [Thread-73378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:04:52.206 [DEBUG] [Thread-73378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:04:52.207 [DEBUG] [Thread-73378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:04:52.225 [INFO] [Thread-73378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:04:52.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:04:52.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:04:53.131 [DEBUG] [Thread-73378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:04:53.132 [DEBUG] [Thread-73378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:04:53.180 [DEBUG] [Thread-73378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:04:53.180 [DEBUG] [Thread-73378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:04:53.189 [DEBUG] [Thread-73378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:04:53.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:04:53.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:04:53.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:04:53.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:04:53.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:04:53.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:04:53.222 [DEBUG] [Thread-73378] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:04:55.635 [DEBUG] [Thread-73380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:01.595 [DEBUG] [Thread-73381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:14.865 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:14.866 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:16.638 [DEBUG] [Thread-73382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:05:23.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:05:23.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:05:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 5, 15), 22.05, 22.27, 0.0, 43.16, 19.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:05:23.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:05:15
2025-12-12T17:05:24.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:05:24.176 [DEBUG] [Thread-73383] [transport.py] [_log()] starting thread (client mode): 0xf574ebf0
2025-12-12T17:05:24.176 [DEBUG] [Thread-73383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:05:24.186 [DEBUG] [Thread-73383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:05:24.186 [INFO] [Thread-73383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] client lang: <none>
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] server lang: <none>
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] kex follows: False
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] Compression: none
2025-12-12T17:05:24.190 [DEBUG] [Thread-73383] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:05:24.207 [DEBUG] [Thread-73383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:05:24.207 [DEBUG] [Thread-73383] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:05:24.208 [DEBUG] [Thread-73383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:05:24.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:05:24.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:05:24.209 [DEBUG] [Thread-73383] [transport.py] [_log()] userauth is OK
2025-12-12T17:05:24.209 [DEBUG] [Thread-73383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:05:24.209 [DEBUG] [Thread-73383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:05:24.209 [DEBUG] [Thread-73383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:05:24.209 [DEBUG] [Thread-73383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:05:24.232 [INFO] [Thread-73383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:05:24.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:05:25.011 [DEBUG] [Thread-73383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:05:25.012 [DEBUG] [Thread-73383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:05:25.012 [DEBUG] [Thread-73383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:05:25.053 [DEBUG] [Thread-73383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:05:25.053 [DEBUG] [Thread-73383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:05:25.056 [DEBUG] [Thread-73383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:05:25.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:05:25.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:05:25.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:05:25.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:05:25.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:05:25.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:05:25.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:05:25.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:05:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:05:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.628229 -999.00  +18.20  42.75     29   +0.00 1 1 2 1 1   887    0 20.38 86.60 ----- 39.6 42.8 291.4 56.1 21.6 -27.8 21.8 -27.7 22.4 -27.0 22.7 -26.4
2025-12-12T17:05:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:05:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:05:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.628229
2025-12-12T17:05:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:05:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:05:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:05:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:05:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:05:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:05:15', tmtdew=22.05, humidity=22.27, cloud=0.0, wind=43.16, temperature=19.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:04:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:05:25.082 [DEBUG] [Thread-73383] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:05:25.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:05:25.177 [DEBUG] [Thread-73386] [transport.py] [_log()] starting thread (client mode): 0xfabc6110
2025-12-12T17:05:25.177 [DEBUG] [Thread-73386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:05:25.191 [DEBUG] [Thread-73386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:05:25.192 [INFO] [Thread-73386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:05:25.199 [DEBUG] [Thread-73386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] client lang: <none>
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] server lang: <none>
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] kex follows: False
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] Compression: none
2025-12-12T17:05:25.200 [DEBUG] [Thread-73386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:05:25.258 [DEBUG] [Thread-73386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:05:25.258 [DEBUG] [Thread-73386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:05:25.259 [DEBUG] [Thread-73386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:05:25.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:05:25.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:05:25.314 [DEBUG] [Thread-73386] [transport.py] [_log()] userauth is OK
2025-12-12T17:05:25.314 [DEBUG] [Thread-73386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:05:25.314 [DEBUG] [Thread-73386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:05:25.314 [DEBUG] [Thread-73386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:05:25.314 [DEBUG] [Thread-73386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:05:25.333 [INFO] [Thread-73386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:05:25.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:05:25.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:05:26.192 [DEBUG] [Thread-73386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:05:26.192 [DEBUG] [Thread-73386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:05:26.240 [DEBUG] [Thread-73386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:05:26.240 [DEBUG] [Thread-73386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:05:26.249 [DEBUG] [Thread-73386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:05:26.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:05:26.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:05:26.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:05:26.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:05:26.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:05:26.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:05:26.284 [DEBUG] [Thread-73386] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:05:31.665 [DEBUG] [Thread-73388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:46.706 [DEBUG] [Thread-73389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:55.667 [DEBUG] [Thread-73390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:05:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:05:56.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:05:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:05:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 5, 47), 22.34, 22.08, 0.0, 46.53, 19.55, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:05:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:05:47
2025-12-12T17:05:57.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:05:57.238 [DEBUG] [Thread-73391] [transport.py] [_log()] starting thread (client mode): 0xf81e66e0
2025-12-12T17:05:57.238 [DEBUG] [Thread-73391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:05:57.257 [DEBUG] [Thread-73391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:05:57.257 [INFO] [Thread-73391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:05:57.260 [DEBUG] [Thread-73391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] client lang: <none>
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] server lang: <none>
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] kex follows: False
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:05:57.261 [DEBUG] [Thread-73391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:05:57.262 [DEBUG] [Thread-73391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:05:57.262 [DEBUG] [Thread-73391] [transport.py] [_log()] Compression: none
2025-12-12T17:05:57.262 [DEBUG] [Thread-73391] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:05:57.279 [DEBUG] [Thread-73391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:05:57.279 [DEBUG] [Thread-73391] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:05:57.280 [DEBUG] [Thread-73391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:05:57.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:05:57.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:05:57.282 [DEBUG] [Thread-73391] [transport.py] [_log()] userauth is OK
2025-12-12T17:05:57.282 [DEBUG] [Thread-73391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:05:57.282 [DEBUG] [Thread-73391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:05:57.282 [DEBUG] [Thread-73391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:05:57.282 [DEBUG] [Thread-73391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:05:57.307 [INFO] [Thread-73391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:05:57.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:05:57.961 [DEBUG] [Thread-73391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:05:57.962 [DEBUG] [Thread-73391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:05:57.962 [DEBUG] [Thread-73391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:05:58.003 [DEBUG] [Thread-73391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:05:58.003 [DEBUG] [Thread-73391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:05:58.005 [DEBUG] [Thread-73391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:05:58.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:05:58.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:05:58.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:05:58.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:05:58.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:05:58.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:05:58.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:05:58.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:05:58.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:05:58.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.628923 -999.00  +18.10  39.16     29   +0.00 1 1 2 1 1   887    0 20.46 71.46 ----- 39.2 39.2 305.6 51.1 21.5 -28.2 21.6 -27.3 22.2 -25.0 22.6 -25.9
2025-12-12T17:05:58.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:05:58.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:05:58.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.628923
2025-12-12T17:05:58.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:05:58.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:05:58.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:05:58.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:05:58.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:05:58.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:05:47', tmtdew=22.34, humidity=22.08, cloud=0.0, wind=46.53, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:05:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:05:58.028 [DEBUG] [Thread-73391] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:05:58.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:05:58.126 [DEBUG] [Thread-73394] [transport.py] [_log()] starting thread (client mode): 0xf813ccd0
2025-12-12T17:05:58.126 [DEBUG] [Thread-73394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:05:58.141 [DEBUG] [Thread-73394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:05:58.141 [INFO] [Thread-73394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:05:58.149 [DEBUG] [Thread-73394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:05:58.149 [DEBUG] [Thread-73394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:05:58.149 [DEBUG] [Thread-73394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:05:58.149 [DEBUG] [Thread-73394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:58.149 [DEBUG] [Thread-73394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:05:58.149 [DEBUG] [Thread-73394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] client lang: <none>
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] server lang: <none>
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] kex follows: False
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] Compression: none
2025-12-12T17:05:58.150 [DEBUG] [Thread-73394] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:05:58.209 [DEBUG] [Thread-73394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:05:58.209 [DEBUG] [Thread-73394] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:05:58.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:05:58.210 [DEBUG] [Thread-73394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:05:58.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:05:58.266 [DEBUG] [Thread-73394] [transport.py] [_log()] userauth is OK
2025-12-12T17:05:58.266 [DEBUG] [Thread-73394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:05:58.266 [DEBUG] [Thread-73394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:05:58.266 [DEBUG] [Thread-73394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:05:58.267 [DEBUG] [Thread-73394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:05:58.285 [INFO] [Thread-73394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:05:58.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:05:58.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:05:59.110 [DEBUG] [Thread-73394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:05:59.110 [DEBUG] [Thread-73394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:05:59.158 [DEBUG] [Thread-73394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:05:59.158 [DEBUG] [Thread-73394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:05:59.167 [DEBUG] [Thread-73394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:05:59.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:05:59.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:05:59.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:05:59.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:05:59.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:05:59.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:05:59.202 [DEBUG] [Thread-73394] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:06:01.735 [DEBUG] [Thread-73396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:06:15.008 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:06:15.009 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:06:16.784 [DEBUG] [Thread-73397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:06:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:06:29.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:06:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:06:29.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 6, 19), 22.32, 22.1, 0.0, 50.92, 19.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:06:29.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:06:19
2025-12-12T17:06:29.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:06:30.137 [DEBUG] [Thread-73398] [transport.py] [_log()] starting thread (client mode): 0xf813d6c0
2025-12-12T17:06:30.138 [DEBUG] [Thread-73398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:06:30.156 [DEBUG] [Thread-73398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:06:30.156 [INFO] [Thread-73398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:06:30.157 [DEBUG] [Thread-73398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:06:30.157 [DEBUG] [Thread-73398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] client lang: <none>
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] server lang: <none>
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] kex follows: False
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] Compression: none
2025-12-12T17:06:30.158 [DEBUG] [Thread-73398] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:06:30.168 [DEBUG] [Thread-73398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:06:30.168 [DEBUG] [Thread-73398] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:06:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:06:30.169 [DEBUG] [Thread-73398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:06:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:06:30.172 [DEBUG] [Thread-73398] [transport.py] [_log()] userauth is OK
2025-12-12T17:06:30.172 [DEBUG] [Thread-73398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:06:30.172 [DEBUG] [Thread-73398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:06:30.172 [DEBUG] [Thread-73398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:06:30.172 [DEBUG] [Thread-73398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:06:30.190 [INFO] [Thread-73398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:06:30.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:06:30.859 [DEBUG] [Thread-73398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:06:30.859 [DEBUG] [Thread-73398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:06:30.859 [DEBUG] [Thread-73398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:06:30.900 [DEBUG] [Thread-73398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:06:30.900 [DEBUG] [Thread-73398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:06:30.903 [DEBUG] [Thread-73398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:06:30.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:06:30.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:06:30.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:06:30.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:06:30.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:06:30.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:06:30.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:06:30.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:06:30.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:06:30.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.629271 -999.00  +18.70  44.20     28   +0.20 1 1 2 1 1   887    0 20.26 66.81 ----- 32.3 44.2 296.0 50.3 21.7 -27.8 21.7 -27.1 22.4 -25.3 22.7 -24.9
2025-12-12T17:06:30.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:06:30.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:06:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.629271
2025-12-12T17:06:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:06:30.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:06:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:06:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:06:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:06:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:06:19', tmtdew=22.32, humidity=22.1, cloud=0.0, wind=50.92, temperature=19.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:06:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:06:30.927 [DEBUG] [Thread-73398] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:06:31.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:06:31.024 [DEBUG] [Thread-73401] [transport.py] [_log()] starting thread (client mode): 0xf5742fe0
2025-12-12T17:06:31.024 [DEBUG] [Thread-73401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:06:31.039 [DEBUG] [Thread-73401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:06:31.039 [INFO] [Thread-73401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:06:31.046 [DEBUG] [Thread-73401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:06:31.046 [DEBUG] [Thread-73401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:06:31.046 [DEBUG] [Thread-73401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:06:31.046 [DEBUG] [Thread-73401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] client lang: <none>
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] server lang: <none>
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] kex follows: False
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] Compression: none
2025-12-12T17:06:31.047 [DEBUG] [Thread-73401] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:06:31.106 [DEBUG] [Thread-73401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:06:31.107 [DEBUG] [Thread-73401] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:06:31.107 [DEBUG] [Thread-73401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:06:31.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:06:31.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:06:31.162 [DEBUG] [Thread-73401] [transport.py] [_log()] userauth is OK
2025-12-12T17:06:31.162 [DEBUG] [Thread-73401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:06:31.162 [DEBUG] [Thread-73401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:06:31.162 [DEBUG] [Thread-73401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:06:31.163 [DEBUG] [Thread-73401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:06:31.182 [INFO] [Thread-73401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:06:31.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:06:31.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:06:31.815 [DEBUG] [Thread-73403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:06:32.056 [DEBUG] [Thread-73401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:06:32.056 [DEBUG] [Thread-73401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:06:32.104 [DEBUG] [Thread-73401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:06:32.104 [DEBUG] [Thread-73401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:06:32.112 [DEBUG] [Thread-73401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:06:32.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:06:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:06:32.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:06:32.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:06:32.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:06:32.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:06:32.144 [DEBUG] [Thread-73401] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:06:46.867 [DEBUG] [Thread-73404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:06:55.722 [DEBUG] [Thread-73405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:01.893 [DEBUG] [Thread-73406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:02.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:07:02.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:07:02.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:07:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 6, 51), 22.3, 22.13, 0.0, 51.87, 19.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:07:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:06:51
2025-12-12T17:07:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:07:03.118 [DEBUG] [Thread-73407] [transport.py] [_log()] starting thread (client mode): 0xf57015d0
2025-12-12T17:07:03.118 [DEBUG] [Thread-73407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:07:03.138 [DEBUG] [Thread-73407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:07:03.138 [INFO] [Thread-73407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:07:03.141 [DEBUG] [Thread-73407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:07:03.141 [DEBUG] [Thread-73407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:07:03.141 [DEBUG] [Thread-73407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] client lang: <none>
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] server lang: <none>
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] kex follows: False
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] Compression: none
2025-12-12T17:07:03.142 [DEBUG] [Thread-73407] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:07:03.160 [DEBUG] [Thread-73407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:07:03.161 [DEBUG] [Thread-73407] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:07:03.161 [DEBUG] [Thread-73407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:07:03.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:07:03.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:07:03.163 [DEBUG] [Thread-73407] [transport.py] [_log()] userauth is OK
2025-12-12T17:07:03.163 [DEBUG] [Thread-73407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:07:03.163 [DEBUG] [Thread-73407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:07:03.163 [DEBUG] [Thread-73407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:07:03.164 [DEBUG] [Thread-73407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:07:03.188 [INFO] [Thread-73407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:07:03.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:07:03.825 [DEBUG] [Thread-73407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:07:03.825 [DEBUG] [Thread-73407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:07:03.825 [DEBUG] [Thread-73407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:07:03.866 [DEBUG] [Thread-73407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:07:03.866 [DEBUG] [Thread-73407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:07:03.869 [DEBUG] [Thread-73407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:07:03.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:07:03.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:07:03.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:07:03.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:07:03.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:07:03.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:07:03.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:07:03.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:07:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:07:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.629618 -999.00  +18.90  42.60     28   +0.00 1 1 2 1 1   887    0 20.00 62.85 ----- 46.6 42.6 310.4 50.0 21.6 -27.5 21.8 -27.3 22.4 -24.8 22.7 -25.0
2025-12-12T17:07:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:07:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:07:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.629618
2025-12-12T17:07:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:07:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:07:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:07:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:07:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:07:03.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:06:51', tmtdew=22.3, humidity=22.13, cloud=0.0, wind=51.87, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:06:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:07:03.895 [DEBUG] [Thread-73407] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:07:03.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:07:03.991 [DEBUG] [Thread-73410] [transport.py] [_log()] starting thread (client mode): 0xf81c0910
2025-12-12T17:07:03.991 [DEBUG] [Thread-73410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:07:04.006 [DEBUG] [Thread-73410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:07:04.006 [INFO] [Thread-73410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:07:04.013 [DEBUG] [Thread-73410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] client lang: <none>
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] server lang: <none>
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] kex follows: False
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:07:04.014 [DEBUG] [Thread-73410] [transport.py] [_log()] Compression: none
2025-12-12T17:07:04.015 [DEBUG] [Thread-73410] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:07:04.072 [DEBUG] [Thread-73410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:07:04.073 [DEBUG] [Thread-73410] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:07:04.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:07:04.074 [DEBUG] [Thread-73410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:07:04.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:07:04.131 [DEBUG] [Thread-73410] [transport.py] [_log()] userauth is OK
2025-12-12T17:07:04.131 [DEBUG] [Thread-73410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:07:04.131 [DEBUG] [Thread-73410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:07:04.131 [DEBUG] [Thread-73410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:07:04.131 [DEBUG] [Thread-73410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:07:04.150 [INFO] [Thread-73410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:07:04.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:07:04.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:07:05.036 [DEBUG] [Thread-73410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:07:05.036 [DEBUG] [Thread-73410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:07:05.083 [DEBUG] [Thread-73410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:07:05.084 [DEBUG] [Thread-73410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:07:05.093 [DEBUG] [Thread-73410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:07:05.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:07:05.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:07:05.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:07:05.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:07:05.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:07:05.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:07:05.131 [DEBUG] [Thread-73410] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:07:15.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:15.149 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:16.920 [DEBUG] [Thread-73412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:31.974 [DEBUG] [Thread-73413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:07:35.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:07:35.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:07:35.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 7, 23), 22.18, 22.25, 0.0, 50.48, 19.17, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:07:35.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:07:23
2025-12-12T17:07:35.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:07:36.113 [DEBUG] [Thread-73414] [transport.py] [_log()] starting thread (client mode): 0xf5703a30
2025-12-12T17:07:36.114 [DEBUG] [Thread-73414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:07:36.128 [DEBUG] [Thread-73414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:07:36.128 [INFO] [Thread-73414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] client lang: <none>
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] server lang: <none>
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] kex follows: False
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:07:36.130 [DEBUG] [Thread-73414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:07:36.131 [DEBUG] [Thread-73414] [transport.py] [_log()] Compression: none
2025-12-12T17:07:36.131 [DEBUG] [Thread-73414] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:07:36.140 [DEBUG] [Thread-73414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:07:36.140 [DEBUG] [Thread-73414] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:07:36.140 [DEBUG] [Thread-73414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:07:36.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:07:36.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:07:36.141 [DEBUG] [Thread-73414] [transport.py] [_log()] userauth is OK
2025-12-12T17:07:36.141 [DEBUG] [Thread-73414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:07:36.141 [DEBUG] [Thread-73414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:07:36.141 [DEBUG] [Thread-73414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:07:36.141 [DEBUG] [Thread-73414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:07:36.155 [INFO] [Thread-73414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:07:36.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:07:36.805 [DEBUG] [Thread-73414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:07:36.805 [DEBUG] [Thread-73414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:07:36.805 [DEBUG] [Thread-73414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:07:36.846 [DEBUG] [Thread-73414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:07:36.846 [DEBUG] [Thread-73414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:07:36.849 [DEBUG] [Thread-73414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:07:36.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:07:36.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:07:36.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:07:36.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:07:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:07:36.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:07:36.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.629965 -999.00  +18.80  42.96     28   +0.10 1 1 2 1 1   887    0 20.08 57.98 ----- 42.0 43.0 314.4 48.5 21.6 -26.7 21.7 -26.9 22.5 -23.9 22.6 -25.8
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.629965
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:07:36.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:07:23', tmtdew=22.18, humidity=22.25, cloud=0.0, wind=50.48, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:07:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:07:36.866 [DEBUG] [Thread-73414] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:07:36.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:07:36.951 [DEBUG] [Thread-73417] [transport.py] [_log()] starting thread (client mode): 0xfabc7730
2025-12-12T17:07:36.951 [DEBUG] [Thread-73417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:07:36.965 [DEBUG] [Thread-73417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:07:36.965 [INFO] [Thread-73417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] client lang: <none>
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] server lang: <none>
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] kex follows: False
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] Compression: none
2025-12-12T17:07:36.973 [DEBUG] [Thread-73417] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:07:37.029 [DEBUG] [Thread-73417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:07:37.030 [DEBUG] [Thread-73417] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:07:37.030 [DEBUG] [Thread-73417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:07:37.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:07:37.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:07:37.087 [DEBUG] [Thread-73417] [transport.py] [_log()] userauth is OK
2025-12-12T17:07:37.087 [DEBUG] [Thread-73417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:07:37.087 [DEBUG] [Thread-73417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:07:37.087 [DEBUG] [Thread-73417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:07:37.087 [DEBUG] [Thread-73417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:07:37.101 [INFO] [Thread-73417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:07:37.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:07:37.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:07:37.943 [DEBUG] [Thread-73417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:07:37.943 [DEBUG] [Thread-73417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:07:37.990 [DEBUG] [Thread-73417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:07:37.990 [DEBUG] [Thread-73417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:07:37.998 [DEBUG] [Thread-73417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:07:38.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:07:38.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:07:38.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:07:38.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:07:38.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:07:38.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:07:38.031 [DEBUG] [Thread-73417] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:07:47.002 [DEBUG] [Thread-73419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:07:55.773 [DEBUG] [Thread-73420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:02.049 [DEBUG] [Thread-73421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:08.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:08:08.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:08:08.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:08:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 7, 55), 21.95, 22.48, 0.0, 41.64, 18.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:08:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:07:55
2025-12-12T17:08:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:08:09.002 [DEBUG] [Thread-73422] [transport.py] [_log()] starting thread (client mode): 0xf81e6aa0
2025-12-12T17:08:09.002 [DEBUG] [Thread-73422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:08:09.018 [DEBUG] [Thread-73422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:08:09.018 [INFO] [Thread-73422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] client lang: <none>
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] server lang: <none>
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] kex follows: False
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] Compression: none
2025-12-12T17:08:09.021 [DEBUG] [Thread-73422] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:08:09.036 [DEBUG] [Thread-73422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:08:09.036 [DEBUG] [Thread-73422] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:08:09.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:08:09.037 [DEBUG] [Thread-73422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:08:09.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:08:09.039 [DEBUG] [Thread-73422] [transport.py] [_log()] userauth is OK
2025-12-12T17:08:09.039 [DEBUG] [Thread-73422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:08:09.040 [DEBUG] [Thread-73422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:08:09.040 [DEBUG] [Thread-73422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:08:09.040 [DEBUG] [Thread-73422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:08:09.057 [INFO] [Thread-73422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:08:09.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:08:09.689 [DEBUG] [Thread-73422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:08:09.689 [DEBUG] [Thread-73422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:08:09.689 [DEBUG] [Thread-73422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:08:09.730 [DEBUG] [Thread-73422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:08:09.730 [DEBUG] [Thread-73422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:08:09.733 [DEBUG] [Thread-73422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:08:09.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:08:09.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:08:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:08:09.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:08:09.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:08:09.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:08:09.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:08:09.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:08:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:08:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.630312 -999.00  +19.00  37.54     28   +0.10 1 1 2 1 1   887    0 19.80 54.02 ----- 37.1 37.5 314.0 48.6 21.7 -27.2 21.8 -26.9 22.5 -23.9 22.7 -25.4
2025-12-12T17:08:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:08:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:08:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.630312
2025-12-12T17:08:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:08:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:08:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:08:09.758 [DEBUG] [Thread-73422] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:08:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:08:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:08:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:07:55', tmtdew=21.95, humidity=22.48, cloud=0.0, wind=41.64, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:07:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:08:09.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:08:15.291 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:15.292 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:17.075 [DEBUG] [Thread-73425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:32.120 [DEBUG] [Thread-73426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:47.150 [DEBUG] [Thread-73427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:08:55.806 [DEBUG] [Thread-73428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:02.182 [DEBUG] [Thread-73429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:15.433 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:15.434 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:17.213 [DEBUG] [Thread-73430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:32.243 [DEBUG] [Thread-73431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:47.271 [DEBUG] [Thread-73432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:09:55.843 [DEBUG] [Thread-73433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:02.301 [DEBUG] [Thread-73434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:15.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:15.573 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:17.335 [DEBUG] [Thread-73435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:21.930 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T17:10:32.365 [DEBUG] [Thread-73436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:47.394 [DEBUG] [Thread-73437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:10:51.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:10:51.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:10:51.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:10:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 10, 36), 21.57, 23.01, 0.0, 45.29, 18.44, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:10:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:10:36
2025-12-12T17:10:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:10:52.964 [DEBUG] [Thread-73438] [transport.py] [_log()] starting thread (client mode): 0xf5703c10
2025-12-12T17:10:52.964 [DEBUG] [Thread-73438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:10:52.984 [DEBUG] [Thread-73438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:10:52.984 [INFO] [Thread-73438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:10:52.987 [DEBUG] [Thread-73438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] client lang: <none>
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] server lang: <none>
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] kex follows: False
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] Compression: none
2025-12-12T17:10:52.988 [DEBUG] [Thread-73438] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:10:53.003 [DEBUG] [Thread-73438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:10:53.003 [DEBUG] [Thread-73438] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:10:53.003 [DEBUG] [Thread-73438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:10:53.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:10:53.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:10:53.003 [DEBUG] [Thread-73438] [transport.py] [_log()] userauth is OK
2025-12-12T17:10:53.003 [DEBUG] [Thread-73438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:10:53.004 [DEBUG] [Thread-73438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:10:53.004 [DEBUG] [Thread-73438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:10:53.004 [DEBUG] [Thread-73438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:10:53.012 [INFO] [Thread-73438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:10:53.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:10:53.787 [DEBUG] [Thread-73438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:10:53.787 [DEBUG] [Thread-73438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:10:53.787 [DEBUG] [Thread-73438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:10:53.827 [DEBUG] [Thread-73438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:10:53.828 [DEBUG] [Thread-73438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:10:53.830 [DEBUG] [Thread-73438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:10:53.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:10:53.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:10:53.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:10:53.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:10:53.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:10:53.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:10:53.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.632396 -999.00  +17.70  43.03     29   -0.40 1 1 2 1 1   887    0 19.41 45.10 ----- 40.5 43.0 298.8 57.4 21.2 -28.1 21.3 -27.4 21.9 -24.9 22.3 -26.4
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.632396
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:10:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:10:36', tmtdew=21.57, humidity=23.01, cloud=0.0, wind=45.29, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:10:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:10:53.850 [DEBUG] [Thread-73438] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:10:53.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:10:53.937 [DEBUG] [Thread-73441] [transport.py] [_log()] starting thread (client mode): 0xf81c11b0
2025-12-12T17:10:53.937 [DEBUG] [Thread-73441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:10:53.951 [DEBUG] [Thread-73441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:10:53.951 [INFO] [Thread-73441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:10:53.958 [DEBUG] [Thread-73441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] client lang: <none>
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] server lang: <none>
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] kex follows: False
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] Compression: none
2025-12-12T17:10:53.959 [DEBUG] [Thread-73441] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:10:54.014 [DEBUG] [Thread-73441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:10:54.014 [DEBUG] [Thread-73441] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:10:54.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:10:54.015 [DEBUG] [Thread-73441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:10:54.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:10:54.072 [DEBUG] [Thread-73441] [transport.py] [_log()] userauth is OK
2025-12-12T17:10:54.072 [DEBUG] [Thread-73441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:10:54.072 [DEBUG] [Thread-73441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:10:54.072 [DEBUG] [Thread-73441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:10:54.072 [DEBUG] [Thread-73441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:10:54.089 [INFO] [Thread-73441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:10:54.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:10:54.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:10:54.936 [DEBUG] [Thread-73441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:10:54.937 [DEBUG] [Thread-73441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:10:54.984 [DEBUG] [Thread-73441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:10:54.984 [DEBUG] [Thread-73441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:10:54.993 [DEBUG] [Thread-73441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:10:55.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:10:55.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:10:55.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:10:55.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:10:55.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:10:55.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:10:55.031 [DEBUG] [Thread-73441] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:10:55.887 [DEBUG] [Thread-73443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:02.425 [DEBUG] [Thread-73444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:15.715 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:15.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:17.469 [DEBUG] [Thread-73445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:25.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:11:25.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:11:25.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:11:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 11, 8), 21.88, 22.53, 0.0, 41.16, 18.54, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:11:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:11:08
2025-12-12T17:11:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:11:26.010 [DEBUG] [Thread-73446] [transport.py] [_log()] starting thread (client mode): 0xf5771a50
2025-12-12T17:11:26.011 [DEBUG] [Thread-73446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:11:26.030 [DEBUG] [Thread-73446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:11:26.031 [INFO] [Thread-73446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] client lang: <none>
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] server lang: <none>
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] kex follows: False
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] Compression: none
2025-12-12T17:11:26.034 [DEBUG] [Thread-73446] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:11:26.051 [DEBUG] [Thread-73446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:11:26.051 [DEBUG] [Thread-73446] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:11:26.052 [DEBUG] [Thread-73446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:11:26.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:11:26.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:11:26.054 [DEBUG] [Thread-73446] [transport.py] [_log()] userauth is OK
2025-12-12T17:11:26.054 [DEBUG] [Thread-73446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:11:26.054 [DEBUG] [Thread-73446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:11:26.054 [DEBUG] [Thread-73446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:11:26.054 [DEBUG] [Thread-73446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:11:26.080 [INFO] [Thread-73446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:11:26.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:11:26.709 [DEBUG] [Thread-73446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:11:26.709 [DEBUG] [Thread-73446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:11:26.710 [DEBUG] [Thread-73446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:11:26.751 [DEBUG] [Thread-73446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:11:26.751 [DEBUG] [Thread-73446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:11:26.754 [DEBUG] [Thread-73446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:11:26.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:11:26.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:11:26.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:11:26.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:11:26.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:11:26.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:11:26.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:11:26.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:11:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:11:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.632743 -999.00  +17.50  42.04     29   -0.50 1 1 2 1 1   887    0 19.43 37.66 ----- 38.3 42.0 295.6 51.4 21.1 -28.1 21.2 -28.0 21.9 -24.9 22.2 -26.1
2025-12-12T17:11:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:11:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:11:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.632743
2025-12-12T17:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:11:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:11:08', tmtdew=21.88, humidity=22.53, cloud=0.0, wind=41.16, temperature=18.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:11:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:11:26.779 [DEBUG] [Thread-73446] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:11:26.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:11:26.875 [DEBUG] [Thread-73449] [transport.py] [_log()] starting thread (client mode): 0xf57bccd0
2025-12-12T17:11:26.875 [DEBUG] [Thread-73449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:11:26.890 [DEBUG] [Thread-73449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:11:26.890 [INFO] [Thread-73449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:11:26.898 [DEBUG] [Thread-73449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] client lang: <none>
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] server lang: <none>
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] kex follows: False
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] Compression: none
2025-12-12T17:11:26.899 [DEBUG] [Thread-73449] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:11:26.955 [DEBUG] [Thread-73449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:11:26.956 [DEBUG] [Thread-73449] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:11:26.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:11:26.956 [DEBUG] [Thread-73449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:11:26.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:11:27.011 [DEBUG] [Thread-73449] [transport.py] [_log()] userauth is OK
2025-12-12T17:11:27.011 [DEBUG] [Thread-73449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:11:27.011 [DEBUG] [Thread-73449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:11:27.011 [DEBUG] [Thread-73449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:11:27.012 [DEBUG] [Thread-73449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:11:27.030 [INFO] [Thread-73449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:11:27.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:11:27.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:11:27.869 [DEBUG] [Thread-73449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:11:27.869 [DEBUG] [Thread-73449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:11:27.917 [DEBUG] [Thread-73449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:11:27.917 [DEBUG] [Thread-73449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:11:27.925 [DEBUG] [Thread-73449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:11:27.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:11:27.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:11:27.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:11:27.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:11:27.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:11:27.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:11:27.956 [DEBUG] [Thread-73449] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:11:32.502 [DEBUG] [Thread-73451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:47.538 [DEBUG] [Thread-73452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:55.926 [DEBUG] [Thread-73453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:11:57.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:11:57.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:11:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:11:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 11, 40), 21.91, 22.56, 0.0, 40.51, 18.54, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:11:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:11:40
2025-12-12T17:11:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:11:58.955 [DEBUG] [Thread-73454] [transport.py] [_log()] starting thread (client mode): 0xfabc6dd0
2025-12-12T17:11:58.955 [DEBUG] [Thread-73454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:11:58.976 [DEBUG] [Thread-73454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:11:58.976 [INFO] [Thread-73454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] client lang: <none>
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] server lang: <none>
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] kex follows: False
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:11:58.979 [DEBUG] [Thread-73454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:11:58.980 [DEBUG] [Thread-73454] [transport.py] [_log()] Compression: none
2025-12-12T17:11:58.980 [DEBUG] [Thread-73454] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:11:58.996 [DEBUG] [Thread-73454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:11:58.997 [DEBUG] [Thread-73454] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:11:58.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:11:58.997 [DEBUG] [Thread-73454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:11:58.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:11:59.041 [DEBUG] [Thread-73454] [transport.py] [_log()] userauth is OK
2025-12-12T17:11:59.041 [DEBUG] [Thread-73454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:11:59.041 [DEBUG] [Thread-73454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:11:59.041 [DEBUG] [Thread-73454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:11:59.041 [DEBUG] [Thread-73454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:11:59.073 [INFO] [Thread-73454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:11:59.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:11:59.855 [DEBUG] [Thread-73454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:11:59.855 [DEBUG] [Thread-73454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:11:59.855 [DEBUG] [Thread-73454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:11:59.896 [DEBUG] [Thread-73454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:11:59.896 [DEBUG] [Thread-73454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:11:59.899 [DEBUG] [Thread-73454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:11:59.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:11:59.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:11:59.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:11:59.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:11:59.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:11:59.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:11:59.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:11:59.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:11:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:11:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.633090 -999.00  +17.60  43.11     29   -0.40 1 1 2 1 1   887    0 19.54 34.26 ----- 42.1 43.1 295.2 48.5 21.1 -27.8 21.2 -27.4 21.9 -26.0 22.2 -25.6
2025-12-12T17:11:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:11:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:11:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.633090
2025-12-12T17:11:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:11:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:11:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:11:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:11:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:11:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:11:40', tmtdew=21.91, humidity=22.56, cloud=0.0, wind=40.51, temperature=18.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:11:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:11:59.924 [DEBUG] [Thread-73454] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:12:00.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:12:00.020 [DEBUG] [Thread-73457] [transport.py] [_log()] starting thread (client mode): 0xf81c0580
2025-12-12T17:12:00.021 [DEBUG] [Thread-73457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:12:00.035 [DEBUG] [Thread-73457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:12:00.035 [INFO] [Thread-73457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:12:00.043 [DEBUG] [Thread-73457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:12:00.043 [DEBUG] [Thread-73457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:12:00.043 [DEBUG] [Thread-73457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:12:00.043 [DEBUG] [Thread-73457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:12:00.043 [DEBUG] [Thread-73457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:12:00.043 [DEBUG] [Thread-73457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] client lang: <none>
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] server lang: <none>
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] kex follows: False
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] Compression: none
2025-12-12T17:12:00.044 [DEBUG] [Thread-73457] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:12:00.101 [DEBUG] [Thread-73457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:12:00.101 [DEBUG] [Thread-73457] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:12:00.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:12:00.102 [DEBUG] [Thread-73457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:12:00.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:12:00.162 [DEBUG] [Thread-73457] [transport.py] [_log()] userauth is OK
2025-12-12T17:12:00.162 [DEBUG] [Thread-73457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:12:00.162 [DEBUG] [Thread-73457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:12:00.162 [DEBUG] [Thread-73457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:12:00.163 [DEBUG] [Thread-73457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:12:00.186 [INFO] [Thread-73457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:12:00.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:12:00.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:12:01.027 [DEBUG] [Thread-73457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:12:01.027 [DEBUG] [Thread-73457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:12:01.075 [DEBUG] [Thread-73457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:12:01.075 [DEBUG] [Thread-73457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:12:01.087 [DEBUG] [Thread-73457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:12:01.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:12:01.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:12:01.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:12:01.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:12:01.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:12:01.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:12:01.119 [DEBUG] [Thread-73457] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:12:02.570 [DEBUG] [Thread-73459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:12:15.858 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:12:15.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:12:17.617 [DEBUG] [Thread-73460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:12:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:12:31.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:12:31.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:12:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 12, 12), 21.78, 22.75, 0.0, 36.98, 18.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:12:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:12:12
2025-12-12T17:12:31.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:12:32.126 [DEBUG] [Thread-73461] [transport.py] [_log()] starting thread (client mode): 0xf57722c0
2025-12-12T17:12:32.126 [DEBUG] [Thread-73461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:12:32.145 [DEBUG] [Thread-73461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:12:32.145 [INFO] [Thread-73461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:12:32.148 [DEBUG] [Thread-73461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] client lang: <none>
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] server lang: <none>
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] kex follows: False
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] Compression: none
2025-12-12T17:12:32.149 [DEBUG] [Thread-73461] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:12:32.165 [DEBUG] [Thread-73461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:12:32.165 [DEBUG] [Thread-73461] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:12:32.165 [DEBUG] [Thread-73461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:12:32.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:12:32.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:12:32.165 [DEBUG] [Thread-73461] [transport.py] [_log()] userauth is OK
2025-12-12T17:12:32.165 [DEBUG] [Thread-73461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:12:32.165 [DEBUG] [Thread-73461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:12:32.166 [DEBUG] [Thread-73461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:12:32.166 [DEBUG] [Thread-73461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:12:32.175 [INFO] [Thread-73461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:12:32.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:12:32.650 [DEBUG] [Thread-73463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:12:32.798 [DEBUG] [Thread-73461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:12:32.798 [DEBUG] [Thread-73461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:12:32.798 [DEBUG] [Thread-73461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:12:32.839 [DEBUG] [Thread-73461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:12:32.840 [DEBUG] [Thread-73461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:12:32.841 [DEBUG] [Thread-73461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:12:32.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:12:32.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:12:32.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:12:32.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:12:32.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:12:32.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:12:32.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.633437 -999.00  +18.00  30.18     29   -0.10 1 1 2 1 1   887    0 18.99 29.30 ----- 42.7 30.2 288.2 48.1 21.1 -26.8 21.3 -27.1 21.9 -25.6 22.1 -24.9
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.633437
2025-12-12T17:12:32.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:12:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:12:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:12:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:12:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:12:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:12:12', tmtdew=21.78, humidity=22.75, cloud=0.0, wind=36.98, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:12:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:12:32.860 [DEBUG] [Thread-73461] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:12:32.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:12:32.962 [DEBUG] [Thread-73465] [transport.py] [_log()] starting thread (client mode): 0xf5743430
2025-12-12T17:12:32.962 [DEBUG] [Thread-73465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:12:32.978 [DEBUG] [Thread-73465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:12:32.978 [INFO] [Thread-73465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:12:32.985 [DEBUG] [Thread-73465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] client lang: <none>
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] server lang: <none>
2025-12-12T17:12:32.986 [DEBUG] [Thread-73465] [transport.py] [_log()] kex follows: False
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] Compression: none
2025-12-12T17:12:32.987 [DEBUG] [Thread-73465] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:12:33.047 [DEBUG] [Thread-73465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:12:33.048 [DEBUG] [Thread-73465] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:12:33.048 [DEBUG] [Thread-73465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:12:33.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:12:33.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:12:33.104 [DEBUG] [Thread-73465] [transport.py] [_log()] userauth is OK
2025-12-12T17:12:33.104 [DEBUG] [Thread-73465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:12:33.104 [DEBUG] [Thread-73465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:12:33.104 [DEBUG] [Thread-73465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:12:33.105 [DEBUG] [Thread-73465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:12:33.124 [INFO] [Thread-73465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:12:33.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:12:33.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:12:33.976 [DEBUG] [Thread-73465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:12:33.976 [DEBUG] [Thread-73465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:12:34.024 [DEBUG] [Thread-73465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:12:34.024 [DEBUG] [Thread-73465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:12:34.033 [DEBUG] [Thread-73465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:12:34.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:12:34.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:12:34.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:12:34.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:12:34.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:12:34.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:12:34.067 [DEBUG] [Thread-73465] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:12:47.677 [DEBUG] [Thread-73467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:12:55.960 [DEBUG] [Thread-73468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:02.720 [DEBUG] [Thread-73469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:04.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:13:04.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:13:04.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:13:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 12, 44), 21.82, 22.71, 0.0, 45.22, 18.72, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:13:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:12:44
2025-12-12T17:13:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:13:05.031 [DEBUG] [Thread-73470] [transport.py] [_log()] starting thread (client mode): 0xfabc6c50
2025-12-12T17:13:05.031 [DEBUG] [Thread-73470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:13:05.054 [DEBUG] [Thread-73470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:13:05.054 [INFO] [Thread-73470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:13:05.057 [DEBUG] [Thread-73470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:13:05.057 [DEBUG] [Thread-73470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] client lang: <none>
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] server lang: <none>
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] kex follows: False
2025-12-12T17:13:05.058 [DEBUG] [Thread-73470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:13:05.059 [DEBUG] [Thread-73470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:13:05.059 [DEBUG] [Thread-73470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:13:05.059 [DEBUG] [Thread-73470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:13:05.059 [DEBUG] [Thread-73470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:13:05.059 [DEBUG] [Thread-73470] [transport.py] [_log()] Compression: none
2025-12-12T17:13:05.059 [DEBUG] [Thread-73470] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:13:05.079 [DEBUG] [Thread-73470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:13:05.080 [DEBUG] [Thread-73470] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:13:05.080 [DEBUG] [Thread-73470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:13:05.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:13:05.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:13:05.082 [DEBUG] [Thread-73470] [transport.py] [_log()] userauth is OK
2025-12-12T17:13:05.082 [DEBUG] [Thread-73470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:13:05.083 [DEBUG] [Thread-73470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:13:05.083 [DEBUG] [Thread-73470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:13:05.083 [DEBUG] [Thread-73470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:13:05.106 [INFO] [Thread-73470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:13:05.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:13:05.888 [DEBUG] [Thread-73470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:13:05.888 [DEBUG] [Thread-73470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:13:05.888 [DEBUG] [Thread-73470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:13:05.929 [DEBUG] [Thread-73470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:13:05.929 [DEBUG] [Thread-73470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:13:05.931 [DEBUG] [Thread-73470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:13:05.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:13:05.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:13:05.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:13:05.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:13:05.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:13:05.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:13:05.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:13:05.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:13:05.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:13:05.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.633785 -999.00  +18.20  40.81     29   -0.00 1 1 2 1 1   887    0 19.27 26.52 ----- 32.9 40.8 314.0 59.9 21.1 -26.9 21.2 -26.8 21.9 -25.5 22.1 -25.3
2025-12-12T17:13:05.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:13:05.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:13:05.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.633785
2025-12-12T17:13:05.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:13:05.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:13:05.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:13:05.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:13:05.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:13:05.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:12:44', tmtdew=21.82, humidity=22.71, cloud=0.0, wind=45.22, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:12:39.024', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:13:05.954 [DEBUG] [Thread-73470] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:13:06.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:13:06.057 [DEBUG] [Thread-73473] [transport.py] [_log()] starting thread (client mode): 0xf57720b0
2025-12-12T17:13:06.057 [DEBUG] [Thread-73473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:13:06.072 [DEBUG] [Thread-73473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:13:06.072 [INFO] [Thread-73473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:13:06.079 [DEBUG] [Thread-73473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:13:06.079 [DEBUG] [Thread-73473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] client lang: <none>
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] server lang: <none>
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] kex follows: False
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:13:06.080 [DEBUG] [Thread-73473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:13:06.081 [DEBUG] [Thread-73473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:13:06.081 [DEBUG] [Thread-73473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:13:06.081 [DEBUG] [Thread-73473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:13:06.081 [DEBUG] [Thread-73473] [transport.py] [_log()] Compression: none
2025-12-12T17:13:06.081 [DEBUG] [Thread-73473] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:13:06.140 [DEBUG] [Thread-73473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:13:06.141 [DEBUG] [Thread-73473] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:13:06.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:13:06.142 [DEBUG] [Thread-73473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:13:06.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:13:06.200 [DEBUG] [Thread-73473] [transport.py] [_log()] userauth is OK
2025-12-12T17:13:06.201 [DEBUG] [Thread-73473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:13:06.201 [DEBUG] [Thread-73473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:13:06.201 [DEBUG] [Thread-73473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:13:06.201 [DEBUG] [Thread-73473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:13:06.219 [INFO] [Thread-73473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:13:06.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:13:06.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:13:07.058 [DEBUG] [Thread-73473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:13:07.058 [DEBUG] [Thread-73473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:13:07.108 [DEBUG] [Thread-73473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:13:07.109 [DEBUG] [Thread-73473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:13:07.118 [DEBUG] [Thread-73473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:13:07.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:13:07.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:13:07.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:13:07.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:13:07.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:13:07.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:13:07.155 [DEBUG] [Thread-73473] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:13:15.997 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:15.998 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:17.749 [DEBUG] [Thread-73475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:32.779 [DEBUG] [Thread-73476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:37.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:13:37.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:13:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:13:37.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 13, 16), 21.8, 22.73, 0.0, 45.03, 18.65, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:13:37.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:13:16
2025-12-12T17:13:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:13:38.118 [DEBUG] [Thread-73477] [transport.py] [_log()] starting thread (client mode): 0xf570c460
2025-12-12T17:13:38.118 [DEBUG] [Thread-73477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:13:38.138 [DEBUG] [Thread-73477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:13:38.138 [INFO] [Thread-73477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:13:38.141 [DEBUG] [Thread-73477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] client lang: <none>
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] server lang: <none>
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] kex follows: False
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] Compression: none
2025-12-12T17:13:38.142 [DEBUG] [Thread-73477] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:13:38.159 [DEBUG] [Thread-73477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:13:38.159 [DEBUG] [Thread-73477] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:13:38.159 [DEBUG] [Thread-73477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:13:38.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:13:38.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:13:38.161 [DEBUG] [Thread-73477] [transport.py] [_log()] userauth is OK
2025-12-12T17:13:38.162 [DEBUG] [Thread-73477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:13:38.162 [DEBUG] [Thread-73477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:13:38.162 [DEBUG] [Thread-73477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:13:38.162 [DEBUG] [Thread-73477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:13:38.186 [INFO] [Thread-73477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:13:38.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:13:38.819 [DEBUG] [Thread-73477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:13:38.820 [DEBUG] [Thread-73477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:13:38.820 [DEBUG] [Thread-73477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:13:38.861 [DEBUG] [Thread-73477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:13:38.861 [DEBUG] [Thread-73477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:13:38.864 [DEBUG] [Thread-73477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:13:38.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:13:38.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:13:38.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:13:38.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:13:38.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:13:38.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:13:38.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:13:38.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:13:38.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:13:38.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.634132 -999.00  +18.30  44.04     28   -0.10 1 1 2 1 1   887    0 19.12 23.29 ----- 39.4 44.0 304.0 56.3 21.1 -27.6 21.3 -27.2 21.8 -28.9 22.2 -25.5
2025-12-12T17:13:38.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:13:38.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:13:38.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.634132
2025-12-12T17:13:38.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:13:38.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:13:38.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:13:38.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:13:38.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:13:38.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:13:16', tmtdew=21.8, humidity=22.73, cloud=0.0, wind=45.03, temperature=18.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:13:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:13:38.889 [DEBUG] [Thread-73477] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:13:38.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:13:38.984 [DEBUG] [Thread-73480] [transport.py] [_log()] starting thread (client mode): 0xf57701f0
2025-12-12T17:13:38.985 [DEBUG] [Thread-73480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:13:39.000 [DEBUG] [Thread-73480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:13:39.000 [INFO] [Thread-73480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:13:39.007 [DEBUG] [Thread-73480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:13:39.007 [DEBUG] [Thread-73480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] client lang: <none>
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] server lang: <none>
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] kex follows: False
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] Compression: none
2025-12-12T17:13:39.008 [DEBUG] [Thread-73480] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:13:39.064 [DEBUG] [Thread-73480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:13:39.065 [DEBUG] [Thread-73480] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:13:39.065 [DEBUG] [Thread-73480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:13:39.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:13:39.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:13:39.120 [DEBUG] [Thread-73480] [transport.py] [_log()] userauth is OK
2025-12-12T17:13:39.121 [DEBUG] [Thread-73480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:13:39.121 [DEBUG] [Thread-73480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:13:39.121 [DEBUG] [Thread-73480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:13:39.121 [DEBUG] [Thread-73480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:13:39.139 [INFO] [Thread-73480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:13:39.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:13:39.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:13:39.994 [DEBUG] [Thread-73480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:13:39.994 [DEBUG] [Thread-73480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:13:40.043 [DEBUG] [Thread-73480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:13:40.043 [DEBUG] [Thread-73480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:13:40.051 [DEBUG] [Thread-73480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:13:40.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:13:40.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:13:40.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:13:40.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:13:40.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:13:40.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:13:40.086 [DEBUG] [Thread-73480] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:13:47.805 [DEBUG] [Thread-73482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:13:56.002 [DEBUG] [Thread-73483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:02.848 [DEBUG] [Thread-73484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:10.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:14:10.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:14:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:14:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 13, 48), 21.61, 22.81, 0.0, 41.75, 18.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:14:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:13:48
2025-12-12T17:14:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:14:11.067 [DEBUG] [Thread-73485] [transport.py] [_log()] starting thread (client mode): 0xf5772710
2025-12-12T17:14:11.068 [DEBUG] [Thread-73485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:14:11.088 [DEBUG] [Thread-73485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:14:11.088 [INFO] [Thread-73485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:14:11.091 [DEBUG] [Thread-73485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:14:11.091 [DEBUG] [Thread-73485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:14:11.091 [DEBUG] [Thread-73485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:14:11.091 [DEBUG] [Thread-73485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:11.091 [DEBUG] [Thread-73485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] client lang: <none>
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] server lang: <none>
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] kex follows: False
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] Compression: none
2025-12-12T17:14:11.092 [DEBUG] [Thread-73485] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:14:11.108 [DEBUG] [Thread-73485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:14:11.108 [DEBUG] [Thread-73485] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:14:11.109 [DEBUG] [Thread-73485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:14:11.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:14:11.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:14:11.109 [DEBUG] [Thread-73485] [transport.py] [_log()] userauth is OK
2025-12-12T17:14:11.110 [DEBUG] [Thread-73485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:14:11.110 [DEBUG] [Thread-73485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:14:11.110 [DEBUG] [Thread-73485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:14:11.110 [DEBUG] [Thread-73485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:14:11.129 [INFO] [Thread-73485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:14:11.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:14:11.934 [DEBUG] [Thread-73485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:14:11.934 [DEBUG] [Thread-73485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:14:11.935 [DEBUG] [Thread-73485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:14:11.975 [DEBUG] [Thread-73485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:14:11.975 [DEBUG] [Thread-73485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:14:11.978 [DEBUG] [Thread-73485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:14:11.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:14:11.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:14:11.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:14:11.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:14:11.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:14:12.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:14:12.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:14:12.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:14:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:14:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.634479 -999.00  +18.30  41.17     28   -0.30 1 1 2 1 1   887    0 19.12 19.24 ----- 47.5 41.2 295.8 49.8 21.1 -28.1 21.2 -27.3 21.8 -25.4 22.1 -25.9
2025-12-12T17:14:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:14:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:14:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.634479
2025-12-12T17:14:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:14:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:14:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:14:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:14:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:14:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:13:48', tmtdew=21.61, humidity=22.81, cloud=0.0, wind=41.75, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:13:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:14:12.003 [DEBUG] [Thread-73485] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:14:12.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:14:12.101 [DEBUG] [Thread-73488] [transport.py] [_log()] starting thread (client mode): 0xf81c2a10
2025-12-12T17:14:12.101 [DEBUG] [Thread-73488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:14:12.116 [DEBUG] [Thread-73488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:14:12.117 [INFO] [Thread-73488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:14:12.124 [DEBUG] [Thread-73488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:14:12.124 [DEBUG] [Thread-73488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:14:12.124 [DEBUG] [Thread-73488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] client lang: <none>
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] server lang: <none>
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] kex follows: False
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] Compression: none
2025-12-12T17:14:12.125 [DEBUG] [Thread-73488] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:14:12.182 [DEBUG] [Thread-73488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:14:12.183 [DEBUG] [Thread-73488] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:14:12.183 [DEBUG] [Thread-73488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:14:12.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:14:12.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:14:12.239 [DEBUG] [Thread-73488] [transport.py] [_log()] userauth is OK
2025-12-12T17:14:12.239 [DEBUG] [Thread-73488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:14:12.239 [DEBUG] [Thread-73488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:14:12.239 [DEBUG] [Thread-73488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:14:12.240 [DEBUG] [Thread-73488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:14:12.262 [INFO] [Thread-73488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:14:12.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:14:12.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:14:13.093 [DEBUG] [Thread-73488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:14:13.093 [DEBUG] [Thread-73488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:14:13.142 [DEBUG] [Thread-73488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:14:13.142 [DEBUG] [Thread-73488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:14:13.151 [DEBUG] [Thread-73488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:14:13.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:14:13.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:14:13.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:14:13.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:14:13.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:14:13.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:14:13.186 [DEBUG] [Thread-73488] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:14:16.136 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:16.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:17.871 [DEBUG] [Thread-73490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:32.920 [DEBUG] [Thread-73491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:43.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:14:43.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:14:43.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
2025-12-12T17:14:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 14, 20), 21.74, 22.63, 0.0, 46.63, 18.59, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:14:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:14:20
2025-12-12T17:14:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:14:44.206 [DEBUG] [Thread-73492] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T17:14:44.206 [DEBUG] [Thread-73492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:14:44.225 [DEBUG] [Thread-73492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:14:44.225 [INFO] [Thread-73492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] client lang: <none>
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] server lang: <none>
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] kex follows: False
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] Compression: none
2025-12-12T17:14:44.227 [DEBUG] [Thread-73492] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:14:44.234 [DEBUG] [Thread-73492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:14:44.235 [DEBUG] [Thread-73492] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:14:44.235 [DEBUG] [Thread-73492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:14:44.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:14:44.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:14:44.236 [DEBUG] [Thread-73492] [transport.py] [_log()] userauth is OK
2025-12-12T17:14:44.236 [DEBUG] [Thread-73492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:14:44.236 [DEBUG] [Thread-73492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:14:44.236 [DEBUG] [Thread-73492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:14:44.236 [DEBUG] [Thread-73492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:14:44.255 [INFO] [Thread-73492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:14:44.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:14:44.866 [DEBUG] [Thread-73492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:14:44.866 [DEBUG] [Thread-73492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:14:44.866 [DEBUG] [Thread-73492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:14:44.908 [DEBUG] [Thread-73492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:14:44.908 [DEBUG] [Thread-73492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:14:44.910 [DEBUG] [Thread-73492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:14:44.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:14:44.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:14:44.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:14:44.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:14:44.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:14:44.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:14:44.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:14:44.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:14:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:14:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.634826 -999.00  +18.20  38.03     28   -0.40 1 1 2 1 1   887    0 18.67 15.27 ----- 45.2 38.0 313.6 55.0 21.0 -27.3 21.2 -27.2 21.9 -24.4 22.1 -26.0
2025-12-12T17:14:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.634826
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:14:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:14:20', tmtdew=21.74, humidity=22.63, cloud=0.0, wind=46.63, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:14:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:14:44.929 [DEBUG] [Thread-73492] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:14:45.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:14:45.016 [DEBUG] [Thread-73495] [transport.py] [_log()] starting thread (client mode): 0xfabc6aa0
2025-12-12T17:14:45.016 [DEBUG] [Thread-73495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:14:45.031 [DEBUG] [Thread-73495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:14:45.031 [INFO] [Thread-73495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] client lang: <none>
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] server lang: <none>
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] kex follows: False
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] Compression: none
2025-12-12T17:14:45.038 [DEBUG] [Thread-73495] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:14:45.100 [DEBUG] [Thread-73495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:14:45.100 [DEBUG] [Thread-73495] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:14:45.100 [DEBUG] [Thread-73495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:14:45.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:14:45.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:14:45.160 [DEBUG] [Thread-73495] [transport.py] [_log()] userauth is OK
2025-12-12T17:14:45.161 [DEBUG] [Thread-73495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:14:45.161 [DEBUG] [Thread-73495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:14:45.161 [DEBUG] [Thread-73495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:14:45.161 [DEBUG] [Thread-73495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:14:45.174 [INFO] [Thread-73495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:14:45.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:14:45.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:14:46.001 [DEBUG] [Thread-73495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:14:46.001 [DEBUG] [Thread-73495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:14:46.048 [DEBUG] [Thread-73495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:14:46.048 [DEBUG] [Thread-73495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:14:46.057 [DEBUG] [Thread-73495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:14:46.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:14:46.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:14:46.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:14:46.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:14:46.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:14:46.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:14:46.089 [DEBUG] [Thread-73495] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:14:47.949 [DEBUG] [Thread-73497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:14:56.039 [DEBUG] [Thread-73498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:02.993 [DEBUG] [Thread-73499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:15:16.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:15:16.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
2025-12-12T17:15:16.278 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:16.278 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:16.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 14, 52), 22.29, 21.73, 0.0, 42.73, 18.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:15:16.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:14:52
2025-12-12T17:15:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:15:17.070 [DEBUG] [Thread-73500] [transport.py] [_log()] starting thread (client mode): 0xf57720e0
2025-12-12T17:15:17.070 [DEBUG] [Thread-73500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:15:17.091 [DEBUG] [Thread-73500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:15:17.091 [INFO] [Thread-73500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] client lang: <none>
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] server lang: <none>
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] kex follows: False
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:15:17.094 [DEBUG] [Thread-73500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:15:17.095 [DEBUG] [Thread-73500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:15:17.095 [DEBUG] [Thread-73500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:15:17.095 [DEBUG] [Thread-73500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:15:17.095 [DEBUG] [Thread-73500] [transport.py] [_log()] Compression: none
2025-12-12T17:15:17.095 [DEBUG] [Thread-73500] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:15:17.112 [DEBUG] [Thread-73500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:15:17.112 [DEBUG] [Thread-73500] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:15:17.113 [DEBUG] [Thread-73500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:15:17.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:15:17.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:15:17.114 [DEBUG] [Thread-73500] [transport.py] [_log()] userauth is OK
2025-12-12T17:15:17.115 [DEBUG] [Thread-73500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:15:17.115 [DEBUG] [Thread-73500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:15:17.115 [DEBUG] [Thread-73500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:15:17.115 [DEBUG] [Thread-73500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:15:17.139 [INFO] [Thread-73500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:15:17.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:15:18.024 [DEBUG] [Thread-73502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:18.167 [DEBUG] [Thread-73500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:15:18.168 [DEBUG] [Thread-73500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:15:18.168 [DEBUG] [Thread-73500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:15:18.209 [DEBUG] [Thread-73500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:15:18.209 [DEBUG] [Thread-73500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:15:18.211 [DEBUG] [Thread-73500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:15:18.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:15:18.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:15:18.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:15:18.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:15:18.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:15:18.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:15:18.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:15:18.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:15:18.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:15:18.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.635174 -999.00  +17.70  46.74     27   -1.00 1 1 2 1 1   887    0 18.73 14.37 ----- 45.5 46.7 298.8 61.5 20.9 -28.2 21.0 -28.4 21.6 -27.0 21.9 -26.5
2025-12-12T17:15:18.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:15:18.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:15:18.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.635174
2025-12-12T17:15:18.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:15:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:15:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:15:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:15:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:15:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:14:52', tmtdew=22.29, humidity=21.73, cloud=0.0, wind=42.73, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:14:39.034', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:15:18.285 [DEBUG] [Thread-73500] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:15:18.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:15:19.410 [DEBUG] [Thread-73504] [transport.py] [_log()] starting thread (client mode): 0xf57003a0
2025-12-12T17:15:19.410 [DEBUG] [Thread-73504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:15:19.424 [DEBUG] [Thread-73504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:15:19.424 [INFO] [Thread-73504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:19.431 [DEBUG] [Thread-73504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] client lang: <none>
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] server lang: <none>
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] kex follows: False
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] Compression: none
2025-12-12T17:15:19.432 [DEBUG] [Thread-73504] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:15:19.489 [DEBUG] [Thread-73504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:15:19.489 [DEBUG] [Thread-73504] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:15:19.489 [DEBUG] [Thread-73504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:15:19.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:15:19.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:15:19.547 [DEBUG] [Thread-73504] [transport.py] [_log()] userauth is OK
2025-12-12T17:15:19.547 [DEBUG] [Thread-73504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:15:19.547 [DEBUG] [Thread-73504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:15:19.547 [DEBUG] [Thread-73504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:15:19.547 [DEBUG] [Thread-73504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:15:19.561 [INFO] [Thread-73504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:15:19.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:15:19.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:15:20.397 [DEBUG] [Thread-73504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:15:20.397 [DEBUG] [Thread-73504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:15:20.445 [DEBUG] [Thread-73504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:15:20.445 [DEBUG] [Thread-73504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:15:20.453 [DEBUG] [Thread-73504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:15:20.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:15:20.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:15:20.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:15:20.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:15:20.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:15:20.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:15:20.486 [DEBUG] [Thread-73504] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:15:33.053 [DEBUG] [Thread-73506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:48.098 [DEBUG] [Thread-73507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:15:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:15:50.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:15:50.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:15:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 15, 24), 22.02, 22.11, 0.0, 40.4, 18.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:15:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:15:24
2025-12-12T17:15:51.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:15:51.461 [DEBUG] [Thread-73508] [transport.py] [_log()] starting thread (client mode): 0xf5770ac0
2025-12-12T17:15:51.462 [DEBUG] [Thread-73508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:15:51.482 [DEBUG] [Thread-73508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:15:51.482 [INFO] [Thread-73508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] client lang: <none>
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] server lang: <none>
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] kex follows: False
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] Compression: none
2025-12-12T17:15:51.484 [DEBUG] [Thread-73508] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:15:51.492 [DEBUG] [Thread-73508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:15:51.493 [DEBUG] [Thread-73508] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:15:51.493 [DEBUG] [Thread-73508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:15:51.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:15:51.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:15:51.495 [DEBUG] [Thread-73508] [transport.py] [_log()] userauth is OK
2025-12-12T17:15:51.495 [DEBUG] [Thread-73508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:15:51.495 [DEBUG] [Thread-73508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:15:51.495 [DEBUG] [Thread-73508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:15:51.495 [DEBUG] [Thread-73508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:15:51.512 [INFO] [Thread-73508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:15:51.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:15:52.145 [DEBUG] [Thread-73508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:15:52.145 [DEBUG] [Thread-73508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:15:52.145 [DEBUG] [Thread-73508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:15:52.186 [DEBUG] [Thread-73508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:15:52.186 [DEBUG] [Thread-73508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:15:52.189 [DEBUG] [Thread-73508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:15:52.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:15:52.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:15:52.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:15:52.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:15:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:15:52.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:15:52.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:15:52.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:15:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:15:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.635520 -999.00  +17.80  47.94     28   -0.80 1 1 2 1 1   887    0 18.70 11.85 ----- 45.3 47.9 309.0 58.6 20.9 -27.8 21.1 -27.9 21.7 -26.3 21.9 -25.1
2025-12-12T17:15:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:15:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:15:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.635520
2025-12-12T17:15:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:15:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:15:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:15:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:15:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:15:52.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:15:24', tmtdew=22.02, humidity=22.11, cloud=0.0, wind=40.4, temperature=18.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:15:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:15:52.216 [DEBUG] [Thread-73508] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:15:52.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:15:52.304 [DEBUG] [Thread-73511] [transport.py] [_log()] starting thread (client mode): 0xf575f370
2025-12-12T17:15:52.304 [DEBUG] [Thread-73511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:15:52.320 [DEBUG] [Thread-73511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:15:52.320 [INFO] [Thread-73511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:15:52.327 [DEBUG] [Thread-73511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:15:52.327 [DEBUG] [Thread-73511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] client lang: <none>
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] server lang: <none>
2025-12-12T17:15:52.328 [DEBUG] [Thread-73511] [transport.py] [_log()] kex follows: False
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] Compression: none
2025-12-12T17:15:52.329 [DEBUG] [Thread-73511] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:15:52.389 [DEBUG] [Thread-73511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:15:52.389 [DEBUG] [Thread-73511] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:15:52.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:15:52.390 [DEBUG] [Thread-73511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:15:52.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:15:52.445 [DEBUG] [Thread-73511] [transport.py] [_log()] userauth is OK
2025-12-12T17:15:52.445 [DEBUG] [Thread-73511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:15:52.445 [DEBUG] [Thread-73511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:15:52.445 [DEBUG] [Thread-73511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:15:52.445 [DEBUG] [Thread-73511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:15:52.465 [INFO] [Thread-73511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:15:52.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:15:52.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:15:53.333 [DEBUG] [Thread-73511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:15:53.333 [DEBUG] [Thread-73511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:15:53.381 [DEBUG] [Thread-73511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:15:53.381 [DEBUG] [Thread-73511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:15:53.389 [DEBUG] [Thread-73511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:15:53.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:15:53.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:15:53.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:15:53.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:15:53.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:15:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:15:53.423 [DEBUG] [Thread-73511] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:15:56.083 [DEBUG] [Thread-73513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:03.127 [DEBUG] [Thread-73514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:16.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:16.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:18.166 [DEBUG] [Thread-73515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:16:23.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:16:23.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:16:24.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 15, 56), 22.25, 21.78, 0.0, 44.89, 18.44, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:16:24.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:15:56
2025-12-12T17:16:24.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:16:24.395 [DEBUG] [Thread-73516] [transport.py] [_log()] starting thread (client mode): 0xf81c26e0
2025-12-12T17:16:24.395 [DEBUG] [Thread-73516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:16:24.413 [DEBUG] [Thread-73516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:16:24.414 [INFO] [Thread-73516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] client lang: <none>
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] server lang: <none>
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] kex follows: False
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:16:24.415 [DEBUG] [Thread-73516] [transport.py] [_log()] Compression: none
2025-12-12T17:16:24.416 [DEBUG] [Thread-73516] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:16:24.426 [DEBUG] [Thread-73516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:16:24.427 [DEBUG] [Thread-73516] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:16:24.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:16:24.428 [DEBUG] [Thread-73516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:16:24.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:16:24.430 [DEBUG] [Thread-73516] [transport.py] [_log()] userauth is OK
2025-12-12T17:16:24.430 [DEBUG] [Thread-73516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:16:24.430 [DEBUG] [Thread-73516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:16:24.430 [DEBUG] [Thread-73516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:16:24.431 [DEBUG] [Thread-73516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:16:24.451 [INFO] [Thread-73516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:16:24.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:16:25.131 [DEBUG] [Thread-73516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:16:25.132 [DEBUG] [Thread-73516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:16:25.132 [DEBUG] [Thread-73516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:16:25.173 [DEBUG] [Thread-73516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:16:25.173 [DEBUG] [Thread-73516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:16:25.176 [DEBUG] [Thread-73516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:16:25.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:16:25.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:16:25.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:16:25.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:16:25.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:16:25.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:16:25.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:16:25.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:16:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:16:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.636215 -999.00  +17.90  32.56     27   -0.80 1 1 2 1 1   887    0 18.59 9.54 ----- 34.1 32.6 304.2 46.3 20.9 -27.7 21.0 -27.7 21.6 -25.2 21.9 -25.0
2025-12-12T17:16:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:16:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:16:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.636215
2025-12-12T17:16:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:16:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:16:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:16:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:16:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:16:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:15:56', tmtdew=22.25, humidity=21.78, cloud=0.0, wind=44.89, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:16:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:16:25.202 [DEBUG] [Thread-73516] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:16:25.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:16:25.298 [DEBUG] [Thread-73519] [transport.py] [_log()] starting thread (client mode): 0xf5743430
2025-12-12T17:16:25.298 [DEBUG] [Thread-73519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:16:25.313 [DEBUG] [Thread-73519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:16:25.313 [INFO] [Thread-73519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:16:25.320 [DEBUG] [Thread-73519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:16:25.320 [DEBUG] [Thread-73519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:16:25.320 [DEBUG] [Thread-73519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] client lang: <none>
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] server lang: <none>
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] kex follows: False
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:16:25.321 [DEBUG] [Thread-73519] [transport.py] [_log()] Compression: none
2025-12-12T17:16:25.322 [DEBUG] [Thread-73519] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:16:25.378 [DEBUG] [Thread-73519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:16:25.379 [DEBUG] [Thread-73519] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:16:25.379 [DEBUG] [Thread-73519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:16:25.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:16:25.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:16:25.434 [DEBUG] [Thread-73519] [transport.py] [_log()] userauth is OK
2025-12-12T17:16:25.435 [DEBUG] [Thread-73519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:16:25.435 [DEBUG] [Thread-73519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:16:25.435 [DEBUG] [Thread-73519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:16:25.435 [DEBUG] [Thread-73519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:16:25.455 [INFO] [Thread-73519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:16:25.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:16:25.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:16:26.292 [DEBUG] [Thread-73519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:16:26.292 [DEBUG] [Thread-73519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:16:26.341 [DEBUG] [Thread-73519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:16:26.341 [DEBUG] [Thread-73519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:16:26.350 [DEBUG] [Thread-73519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:16:26.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:16:26.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:16:26.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:16:26.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:16:26.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:16:26.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:16:26.387 [DEBUG] [Thread-73519] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:16:33.197 [DEBUG] [Thread-73521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:48.240 [DEBUG] [Thread-73522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:56.116 [DEBUG] [Thread-73523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:16:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:16:56.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:16:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:16:57.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 16, 28), 22.45, 21.48, 0.0, 40.78, 18.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:16:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:16:28
2025-12-12T17:16:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:16:57.353 [DEBUG] [Thread-73524] [transport.py] [_log()] starting thread (client mode): 0xf81c1750
2025-12-12T17:16:57.353 [DEBUG] [Thread-73524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:16:57.372 [DEBUG] [Thread-73524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:16:57.372 [INFO] [Thread-73524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:16:57.375 [DEBUG] [Thread-73524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] client lang: <none>
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] server lang: <none>
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] kex follows: False
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] Compression: none
2025-12-12T17:16:57.376 [DEBUG] [Thread-73524] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:16:57.393 [DEBUG] [Thread-73524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:16:57.393 [DEBUG] [Thread-73524] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:16:57.393 [DEBUG] [Thread-73524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:16:57.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:16:57.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:16:57.395 [DEBUG] [Thread-73524] [transport.py] [_log()] userauth is OK
2025-12-12T17:16:57.396 [DEBUG] [Thread-73524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:16:57.396 [DEBUG] [Thread-73524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:16:57.396 [DEBUG] [Thread-73524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:16:57.396 [DEBUG] [Thread-73524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:16:57.431 [INFO] [Thread-73524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:16:57.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:16:58.107 [DEBUG] [Thread-73524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:16:58.107 [DEBUG] [Thread-73524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:16:58.108 [DEBUG] [Thread-73524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:16:58.148 [DEBUG] [Thread-73524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:16:58.148 [DEBUG] [Thread-73524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:16:58.150 [DEBUG] [Thread-73524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:16:58.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:16:58.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:16:58.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:16:58.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:16:58.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:16:58.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:16:58.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:16:58.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:16:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:16:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.636562 -999.00  +17.90  27.17     27   -0.80 1 1 1 1 1   887    0 18.97 9.84 ----- 26.6 27.2 292.2 41.2 20.9 -26.8 21.1 -26.7 21.8 -24.1 21.9 -25.2
2025-12-12T17:16:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:16:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:16:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.636562
2025-12-12T17:16:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:16:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:16:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:16:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:16:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:16:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:16:28', tmtdew=22.45, humidity=21.48, cloud=0.0, wind=40.78, temperature=18.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:16:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:16:58.173 [DEBUG] [Thread-73524] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:16:58.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:16:58.272 [DEBUG] [Thread-73527] [transport.py] [_log()] starting thread (client mode): 0xf81c1600
2025-12-12T17:16:58.272 [DEBUG] [Thread-73527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:16:58.286 [DEBUG] [Thread-73527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:16:58.286 [INFO] [Thread-73527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] client lang: <none>
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] server lang: <none>
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] kex follows: False
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] Compression: none
2025-12-12T17:16:58.294 [DEBUG] [Thread-73527] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:16:58.350 [DEBUG] [Thread-73527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:16:58.351 [DEBUG] [Thread-73527] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:16:58.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:16:58.351 [DEBUG] [Thread-73527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:16:58.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:16:58.408 [DEBUG] [Thread-73527] [transport.py] [_log()] userauth is OK
2025-12-12T17:16:58.408 [DEBUG] [Thread-73527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:16:58.408 [DEBUG] [Thread-73527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:16:58.408 [DEBUG] [Thread-73527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:16:58.408 [DEBUG] [Thread-73527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:16:58.421 [INFO] [Thread-73527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:16:58.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:16:58.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:16:59.272 [DEBUG] [Thread-73527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:16:59.272 [DEBUG] [Thread-73527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:16:59.319 [DEBUG] [Thread-73527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:16:59.319 [DEBUG] [Thread-73527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:16:59.327 [DEBUG] [Thread-73527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:16:59.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:16:59.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:16:59.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:16:59.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:16:59.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:16:59.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:16:59.359 [DEBUG] [Thread-73527] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:17:03.270 [DEBUG] [Thread-73529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:17:16.571 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:17:16.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:17:18.310 [DEBUG] [Thread-73530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:17:29.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:17:29.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:17:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:17:30.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 17), 22.46, 21.52, 0.0, 35.84, 18.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:17:30.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:17:00
2025-12-12T17:17:30.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:17:30.314 [DEBUG] [Thread-73531] [transport.py] [_log()] starting thread (client mode): 0xfabc6e60
2025-12-12T17:17:30.314 [DEBUG] [Thread-73531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:17:30.333 [DEBUG] [Thread-73531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:17:30.333 [INFO] [Thread-73531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:17:30.336 [DEBUG] [Thread-73531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] client lang: <none>
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] server lang: <none>
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] kex follows: False
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] Compression: none
2025-12-12T17:17:30.337 [DEBUG] [Thread-73531] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:17:30.353 [DEBUG] [Thread-73531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:17:30.353 [DEBUG] [Thread-73531] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:17:30.354 [DEBUG] [Thread-73531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:17:30.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:17:30.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:17:30.356 [DEBUG] [Thread-73531] [transport.py] [_log()] userauth is OK
2025-12-12T17:17:30.356 [DEBUG] [Thread-73531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:17:30.356 [DEBUG] [Thread-73531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:17:30.356 [DEBUG] [Thread-73531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:17:30.357 [DEBUG] [Thread-73531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:17:30.389 [INFO] [Thread-73531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:17:30.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:17:31.121 [DEBUG] [Thread-73531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:17:31.121 [DEBUG] [Thread-73531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:17:31.122 [DEBUG] [Thread-73531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:17:31.162 [DEBUG] [Thread-73531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:17:31.162 [DEBUG] [Thread-73531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:17:31.164 [DEBUG] [Thread-73531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:17:31.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:17:31.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:17:31.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:17:31.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:17:31.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:17:31.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:17:31.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:17:31.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:17:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:17:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.636910 -999.00  +18.30  35.43     27   -0.80 1 1 2 1 1   887    0 19.08 12.08 ----- 34.1 35.4 311.2 48.7 20.9 -27.5 21.1 -26.7 21.8 -24.5 22.0 -25.6
2025-12-12T17:17:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:17:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:17:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.636910
2025-12-12T17:17:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:17:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:17:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:17:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:17:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:17:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:17:00', tmtdew=22.46, humidity=21.52, cloud=0.0, wind=35.84, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:17:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:17:31.189 [DEBUG] [Thread-73531] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:17:31.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:17:31.282 [DEBUG] [Thread-73534] [transport.py] [_log()] starting thread (client mode): 0xf5700f10
2025-12-12T17:17:31.282 [DEBUG] [Thread-73534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:17:31.296 [DEBUG] [Thread-73534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:17:31.296 [INFO] [Thread-73534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] client lang: <none>
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] server lang: <none>
2025-12-12T17:17:31.303 [DEBUG] [Thread-73534] [transport.py] [_log()] kex follows: False
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] Compression: none
2025-12-12T17:17:31.304 [DEBUG] [Thread-73534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:17:31.361 [DEBUG] [Thread-73534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:17:31.362 [DEBUG] [Thread-73534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:17:31.362 [DEBUG] [Thread-73534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:17:31.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:17:31.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:17:31.422 [DEBUG] [Thread-73534] [transport.py] [_log()] userauth is OK
2025-12-12T17:17:31.422 [DEBUG] [Thread-73534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:17:31.422 [DEBUG] [Thread-73534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:17:31.422 [DEBUG] [Thread-73534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:17:31.422 [DEBUG] [Thread-73534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:17:31.441 [INFO] [Thread-73534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:17:31.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:17:31.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:17:32.296 [DEBUG] [Thread-73534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:17:32.296 [DEBUG] [Thread-73534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:17:32.344 [DEBUG] [Thread-73534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:17:32.344 [DEBUG] [Thread-73534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:17:32.353 [DEBUG] [Thread-73534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:17:32.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:17:32.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')
2025-12-12T17:17:32.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:17:32.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:17:32.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:17:32.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:17:32.386 [DEBUG] [Thread-73534] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:17:33.335 [DEBUG] [Thread-73536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:17:48.372 [DEBUG] [Thread-73537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:17:56.152 [DEBUG] [Thread-73538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:02.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:18:02.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:18:02.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:18:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 17, 32), 23.29, 20.33, 0.0, 55.32, 19.31, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:18:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:17:32
2025-12-12T17:18:03.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:18:03.376 [DEBUG] [Thread-73539] [transport.py] [_log()] starting thread (client mode): 0xf578a800
2025-12-12T17:18:03.376 [DEBUG] [Thread-73539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:18:03.397 [DEBUG] [Thread-73539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:18:03.397 [INFO] [Thread-73539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] client lang: <none>
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] server lang: <none>
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] kex follows: False
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] Compression: none
2025-12-12T17:18:03.400 [DEBUG] [Thread-73539] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:18:03.401 [DEBUG] [Thread-73541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:03.418 [DEBUG] [Thread-73539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:18:03.418 [DEBUG] [Thread-73539] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:18:03.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:18:03.419 [DEBUG] [Thread-73539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:18:03.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:18:03.421 [DEBUG] [Thread-73539] [transport.py] [_log()] userauth is OK
2025-12-12T17:18:03.421 [DEBUG] [Thread-73539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:18:03.421 [DEBUG] [Thread-73539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:18:03.421 [DEBUG] [Thread-73539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:18:03.422 [DEBUG] [Thread-73539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:18:03.446 [INFO] [Thread-73539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:18:03.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:18:04.088 [DEBUG] [Thread-73539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:18:04.088 [DEBUG] [Thread-73539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:18:04.088 [DEBUG] [Thread-73539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:18:04.129 [DEBUG] [Thread-73539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:18:04.129 [DEBUG] [Thread-73539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:18:04.132 [DEBUG] [Thread-73539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:18:04.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:18:04.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:18:04.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:18:04.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:18:04.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:18:04.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:18:04.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:18:04.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:18:04.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:18:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.637257 -999.00  +18.30  33.52     27   -0.70 1 1 2 1 1   887    0 19.34 15.26 ----- 35.8 33.5 297.6 45.9 20.9 -27.2 21.1 -27.4 21.8 -26.5 22.0 -26.0
2025-12-12T17:18:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:18:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:18:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.637257
2025-12-12T17:18:04.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:18:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:18:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:18:04.157 [DEBUG] [Thread-73539] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:18:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:18:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:18:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:17:32', tmtdew=23.29, humidity=20.33, cloud=0.0, wind=55.32, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:17:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:18:04.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:18:04.256 [DEBUG] [Thread-73543] [transport.py] [_log()] starting thread (client mode): 0xf575d8d0
2025-12-12T17:18:04.256 [DEBUG] [Thread-73543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:18:04.271 [DEBUG] [Thread-73543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:18:04.271 [INFO] [Thread-73543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:18:04.278 [DEBUG] [Thread-73543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:18:04.278 [DEBUG] [Thread-73543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] client lang: <none>
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] server lang: <none>
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] kex follows: False
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] Compression: none
2025-12-12T17:18:04.279 [DEBUG] [Thread-73543] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:18:04.335 [DEBUG] [Thread-73543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:18:04.336 [DEBUG] [Thread-73543] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:18:04.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:18:04.337 [DEBUG] [Thread-73543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:18:04.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:18:04.391 [DEBUG] [Thread-73543] [transport.py] [_log()] userauth is OK
2025-12-12T17:18:04.392 [DEBUG] [Thread-73543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:18:04.392 [DEBUG] [Thread-73543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:18:04.392 [DEBUG] [Thread-73543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:18:04.392 [DEBUG] [Thread-73543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:18:04.416 [INFO] [Thread-73543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:18:04.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:18:04.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:18:05.284 [DEBUG] [Thread-73543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:18:05.284 [DEBUG] [Thread-73543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:18:05.331 [DEBUG] [Thread-73543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:18:05.331 [DEBUG] [Thread-73543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:18:05.340 [DEBUG] [Thread-73543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:18:05.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:18: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')
2025-12-12T17:18:05.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:18:05.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:18:05.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:18:05.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:18:05.371 [DEBUG] [Thread-73543] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:18:16.720 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:16.721 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:18.429 [DEBUG] [Thread-73545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:33.475 [DEBUG] [Thread-73546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:18:35.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:18:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:18:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 18, 4), 22.35, 21.33, 0.0, 46.9, 18.45, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:18:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:18:04
2025-12-12T17:18:36.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:18:36.411 [DEBUG] [Thread-73547] [transport.py] [_log()] starting thread (client mode): 0xf57732e0
2025-12-12T17:18:36.411 [DEBUG] [Thread-73547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:18:36.423 [DEBUG] [Thread-73547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:18:36.423 [INFO] [Thread-73547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] client lang: <none>
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] server lang: <none>
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] kex follows: False
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] Compression: none
2025-12-12T17:18:36.424 [DEBUG] [Thread-73547] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:18:36.437 [DEBUG] [Thread-73547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:18:36.437 [DEBUG] [Thread-73547] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:18:36.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:18:36.438 [DEBUG] [Thread-73547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:18:36.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:18:36.438 [DEBUG] [Thread-73547] [transport.py] [_log()] userauth is OK
2025-12-12T17:18:36.438 [DEBUG] [Thread-73547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:18:36.438 [DEBUG] [Thread-73547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:18:36.438 [DEBUG] [Thread-73547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:18:36.439 [DEBUG] [Thread-73547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:18:36.452 [INFO] [Thread-73547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:18:36.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:18:37.112 [DEBUG] [Thread-73547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:18:37.112 [DEBUG] [Thread-73547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:18:37.112 [DEBUG] [Thread-73547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:18:37.153 [DEBUG] [Thread-73547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:18:37.153 [DEBUG] [Thread-73547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:18:37.155 [DEBUG] [Thread-73547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:18:37.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:18:37.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:18:37.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:18:37.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:18:37.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:18:37.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:18:37.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.637604 -999.00  +18.30  43.34     27   -0.60 1 1 2 1 1   887    0 18.91 19.19 ----- 55.3 43.3 312.6 52.6 21.0 -27.1 21.1 -27.3 21.9 -24.3 22.1 -25.3
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.637604
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:18:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:18:04', tmtdew=22.35, humidity=21.33, cloud=0.0, wind=46.9, temperature=18.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:18:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:18:37.173 [DEBUG] [Thread-73547] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:18:37.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:18:37.260 [DEBUG] [Thread-73550] [transport.py] [_log()] starting thread (client mode): 0xf57727a0
2025-12-12T17:18:37.260 [DEBUG] [Thread-73550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:18:37.274 [DEBUG] [Thread-73550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:18:37.274 [INFO] [Thread-73550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] client lang: <none>
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] server lang: <none>
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] kex follows: False
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] Compression: none
2025-12-12T17:18:37.282 [DEBUG] [Thread-73550] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:18:37.339 [DEBUG] [Thread-73550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:18:37.340 [DEBUG] [Thread-73550] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:18:37.340 [DEBUG] [Thread-73550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:18:37.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:18:37.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:18:37.402 [DEBUG] [Thread-73550] [transport.py] [_log()] userauth is OK
2025-12-12T17:18:37.403 [DEBUG] [Thread-73550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:18:37.403 [DEBUG] [Thread-73550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:18:37.403 [DEBUG] [Thread-73550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:18:37.403 [DEBUG] [Thread-73550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:18:37.416 [INFO] [Thread-73550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:18:37.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:18:37.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:18:38.230 [DEBUG] [Thread-73550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:18:38.230 [DEBUG] [Thread-73550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:18:38.278 [DEBUG] [Thread-73550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:18:38.279 [DEBUG] [Thread-73550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:18:38.287 [DEBUG] [Thread-73550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:18:38.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:18:38.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:18:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:18:38.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:18:38.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:18:38.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:18:38.319 [DEBUG] [Thread-73550] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:18:48.500 [DEBUG] [Thread-73552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:18:56.186 [DEBUG] [Thread-73553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:03.544 [DEBUG] [Thread-73554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:19:08.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:19:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:19:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 18, 36), 22.34, 21.85, 0.0, 44.71, 18.72, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:19:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:18:36
2025-12-12T17:19:09.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:19:09.326 [DEBUG] [Thread-73555] [transport.py] [_log()] starting thread (client mode): 0xf5703fd0
2025-12-12T17:19:09.326 [DEBUG] [Thread-73555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:19:09.345 [DEBUG] [Thread-73555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:19:09.345 [INFO] [Thread-73555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] client lang: <none>
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] server lang: <none>
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] kex follows: False
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] Compression: none
2025-12-12T17:19:09.349 [DEBUG] [Thread-73555] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:19:09.361 [DEBUG] [Thread-73555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:19:09.361 [DEBUG] [Thread-73555] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:19:09.361 [DEBUG] [Thread-73555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:19:09.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:19:09.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:19:09.362 [DEBUG] [Thread-73555] [transport.py] [_log()] userauth is OK
2025-12-12T17:19:09.362 [DEBUG] [Thread-73555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:19:09.362 [DEBUG] [Thread-73555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:19:09.362 [DEBUG] [Thread-73555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:19:09.362 [DEBUG] [Thread-73555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:19:09.372 [INFO] [Thread-73555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:19:09.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:19:10.003 [DEBUG] [Thread-73555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:19:10.003 [DEBUG] [Thread-73555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:19:10.003 [DEBUG] [Thread-73555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:19:10.043 [DEBUG] [Thread-73555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:19:10.043 [DEBUG] [Thread-73555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:19:10.045 [DEBUG] [Thread-73555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:19:10.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:19:10.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:19:10.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:19:10.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:19:10.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:19:10.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:19:10.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.637951 -999.00  +18.40  43.53     27   -0.40 1 1 2 1 1   887    0 19.06 23.91 ----- 37.5 43.5 295.4 50.1 21.0 -27.1 21.1 -26.9 21.8 -25.2 22.1 -25.1
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.637951
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:19:10.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:18:36', tmtdew=22.34, humidity=21.85, cloud=0.0, wind=44.71, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:18:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:19:10.060 [DEBUG] [Thread-73555] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:19:10.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:19:10.145 [DEBUG] [Thread-73558] [transport.py] [_log()] starting thread (client mode): 0xf81e5e10
2025-12-12T17:19:10.145 [DEBUG] [Thread-73558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:19:10.160 [DEBUG] [Thread-73558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:19:10.160 [INFO] [Thread-73558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:19:10.167 [DEBUG] [Thread-73558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] client lang: <none>
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] server lang: <none>
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] kex follows: False
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] Compression: none
2025-12-12T17:19:10.168 [DEBUG] [Thread-73558] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:19:10.224 [DEBUG] [Thread-73558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:19:10.224 [DEBUG] [Thread-73558] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:19:10.225 [DEBUG] [Thread-73558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:19:10.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:19:10.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:19:10.282 [DEBUG] [Thread-73558] [transport.py] [_log()] userauth is OK
2025-12-12T17:19:10.282 [DEBUG] [Thread-73558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:19:10.282 [DEBUG] [Thread-73558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:19:10.282 [DEBUG] [Thread-73558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:19:10.282 [DEBUG] [Thread-73558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:19:10.296 [INFO] [Thread-73558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:19:10.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:19:10.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:19:11.142 [DEBUG] [Thread-73558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:19:11.142 [DEBUG] [Thread-73558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:19:11.190 [DEBUG] [Thread-73558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:19:11.190 [DEBUG] [Thread-73558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:19:11.199 [DEBUG] [Thread-73558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:19:11.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:19:11.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:19: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') -> 00000000
2025-12-12T17:19:11.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:19:11.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:19:11.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:19:11.230 [DEBUG] [Thread-73558] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:19:16.862 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:16.863 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:18.577 [DEBUG] [Thread-73560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:33.624 [DEBUG] [Thread-73561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:19:41.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:19:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:19:41.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 19, 8), 22.4, 21.8, 0.0, 45.98, 18.87, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:19:41.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:19:08
2025-12-12T17:19:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:19:42.258 [DEBUG] [Thread-73562] [transport.py] [_log()] starting thread (client mode): 0xf5773760
2025-12-12T17:19:42.258 [DEBUG] [Thread-73562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:19:42.278 [DEBUG] [Thread-73562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:19:42.278 [INFO] [Thread-73562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] client lang: <none>
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] server lang: <none>
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] kex follows: False
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] Compression: none
2025-12-12T17:19:42.282 [DEBUG] [Thread-73562] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:19:42.299 [DEBUG] [Thread-73562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:19:42.300 [DEBUG] [Thread-73562] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:19:42.300 [DEBUG] [Thread-73562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:19:42.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:19:42.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:19:42.301 [DEBUG] [Thread-73562] [transport.py] [_log()] userauth is OK
2025-12-12T17:19:42.301 [DEBUG] [Thread-73562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:19:42.301 [DEBUG] [Thread-73562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:19:42.301 [DEBUG] [Thread-73562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:19:42.301 [DEBUG] [Thread-73562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:19:42.311 [INFO] [Thread-73562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:19:42.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:19:42.896 [DEBUG] [Thread-73562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:19:42.896 [DEBUG] [Thread-73562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:19:42.896 [DEBUG] [Thread-73562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:19:42.936 [DEBUG] [Thread-73562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:19:42.937 [DEBUG] [Thread-73562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:19:42.939 [DEBUG] [Thread-73562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:19:42.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:19:42.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:19:42.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:19:42.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:19:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:19:42.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:19:42.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.638298 -999.00  +18.60  43.82     26   -0.90 1 1 2 1 1   887    0 19.54 31.56 ----- 43.6 43.8 299.5 58.1 21.0 -28.4 21.1 -28.1 21.7 -25.7 22.2 -26.0
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.638298
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:19:42.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:19:42.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:19:08', tmtdew=22.4, humidity=21.8, cloud=0.0, wind=45.98, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:19:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:19:42.957 [DEBUG] [Thread-73562] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:19:43.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:19:48.655 [DEBUG] [Thread-73565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:19:56.231 [DEBUG] [Thread-73566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:03.701 [DEBUG] [Thread-73567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:17.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:17.006 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:18.733 [DEBUG] [Thread-73568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:33.774 [DEBUG] [Thread-73569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:48.804 [DEBUG] [Thread-73570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:20:56.265 [DEBUG] [Thread-73571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:03.836 [DEBUG] [Thread-73572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:17.146 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:17.147 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:18.866 [DEBUG] [Thread-73573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:33.895 [DEBUG] [Thread-73574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:48.923 [DEBUG] [Thread-73575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:56.299 [DEBUG] [Thread-73576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:21:58.250 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T17:22:03.951 [DEBUG] [Thread-73577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:22:17.287 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:22:17.288 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:22:18.981 [DEBUG] [Thread-73578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:22:28.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:22:28.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:22:28.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:22:28.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 22, 21), 22.83, 21.0, 0.0, 46.58, 18.7, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:22:28.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:22:21
2025-12-12T17:22:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:22:29.245 [DEBUG] [Thread-73579] [transport.py] [_log()] starting thread (client mode): 0xf81c26e0
2025-12-12T17:22:29.245 [DEBUG] [Thread-73579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:22:29.265 [DEBUG] [Thread-73579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:22:29.265 [INFO] [Thread-73579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:22:29.268 [DEBUG] [Thread-73579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:22:29.268 [DEBUG] [Thread-73579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:22:29.268 [DEBUG] [Thread-73579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:22:29.268 [DEBUG] [Thread-73579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:22:29.268 [DEBUG] [Thread-73579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:22:29.268 [DEBUG] [Thread-73579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] client lang: <none>
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] server lang: <none>
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] kex follows: False
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] Compression: none
2025-12-12T17:22:29.269 [DEBUG] [Thread-73579] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:22:29.287 [DEBUG] [Thread-73579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:22:29.288 [DEBUG] [Thread-73579] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:22:29.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:22:29.289 [DEBUG] [Thread-73579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:22:29.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:22:29.291 [DEBUG] [Thread-73579] [transport.py] [_log()] userauth is OK
2025-12-12T17:22:29.291 [DEBUG] [Thread-73579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:22:29.291 [DEBUG] [Thread-73579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:22:29.291 [DEBUG] [Thread-73579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:22:29.291 [DEBUG] [Thread-73579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:22:29.316 [INFO] [Thread-73579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:22:29.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:22:29.935 [DEBUG] [Thread-73579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:22:29.935 [DEBUG] [Thread-73579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:22:29.935 [DEBUG] [Thread-73579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:22:29.976 [DEBUG] [Thread-73579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:22:29.976 [DEBUG] [Thread-73579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:22:29.979 [DEBUG] [Thread-73579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:22:29.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:22:29.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:22:29.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:22:29.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:22:29.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:22:30.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:22:30.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:22:30.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:22:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:22:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.640382 -999.00  +18.20  33.49     27   -0.90 1 1 2 1 1   887    0 19.53 35.90 ----- 41.8 33.5 310.2 56.5 20.9 -27.3 21.0 -27.1 21.8 -24.8 21.9 -26.2
2025-12-12T17:22:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:22:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:22:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.640382
2025-12-12T17:22:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:22:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:22:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:22:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:22:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:22:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:22:21', tmtdew=22.83, humidity=21.0, cloud=0.0, wind=46.58, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:22:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:22:30.004 [DEBUG] [Thread-73579] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:22:30.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:22:30.100 [DEBUG] [Thread-73582] [transport.py] [_log()] starting thread (client mode): 0xf574d9f0
2025-12-12T17:22:30.100 [DEBUG] [Thread-73582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:22:30.116 [DEBUG] [Thread-73582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:22:30.116 [INFO] [Thread-73582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:22:30.123 [DEBUG] [Thread-73582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:22:30.124 [DEBUG] [Thread-73582] [transport.py] [_log()] client lang: <none>
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] server lang: <none>
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] kex follows: False
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] Compression: none
2025-12-12T17:22:30.125 [DEBUG] [Thread-73582] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:22:30.181 [DEBUG] [Thread-73582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:22:30.181 [DEBUG] [Thread-73582] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:22:30.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:22:30.182 [DEBUG] [Thread-73582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:22:30.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:22:30.237 [DEBUG] [Thread-73582] [transport.py] [_log()] userauth is OK
2025-12-12T17:22:30.238 [DEBUG] [Thread-73582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:22:30.238 [DEBUG] [Thread-73582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:22:30.238 [DEBUG] [Thread-73582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:22:30.238 [DEBUG] [Thread-73582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:22:30.258 [INFO] [Thread-73582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:22:30.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:22:30.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:22:31.131 [DEBUG] [Thread-73582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:22:31.131 [DEBUG] [Thread-73582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:22:31.178 [DEBUG] [Thread-73582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:22:31.179 [DEBUG] [Thread-73582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:22:31.187 [DEBUG] [Thread-73582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:22:31.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:22:31.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:22:31.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:22:31.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:22:31.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:22:31.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:22:31.221 [DEBUG] [Thread-73582] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:22:34.016 [DEBUG] [Thread-73584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:22:49.061 [DEBUG] [Thread-73585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:22:56.335 [DEBUG] [Thread-73586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:23:01.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:23:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:23:01.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 22, 53), 22.78, 20.85, 0.0, 50.5, 18.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:23:01.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:22:53
2025-12-12T17:23:02.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:23:02.287 [DEBUG] [Thread-73587] [transport.py] [_log()] starting thread (client mode): 0xf578b9d0
2025-12-12T17:23:02.287 [DEBUG] [Thread-73587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:23:02.308 [DEBUG] [Thread-73587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:23:02.308 [INFO] [Thread-73587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] client lang: <none>
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] server lang: <none>
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] kex follows: False
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] Compression: none
2025-12-12T17:23:02.311 [DEBUG] [Thread-73587] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:23:02.327 [DEBUG] [Thread-73587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:23:02.328 [DEBUG] [Thread-73587] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:23:02.328 [DEBUG] [Thread-73587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:23:02.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:23:02.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:23:02.329 [DEBUG] [Thread-73587] [transport.py] [_log()] userauth is OK
2025-12-12T17:23:02.329 [DEBUG] [Thread-73587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:23:02.329 [DEBUG] [Thread-73587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:23:02.329 [DEBUG] [Thread-73587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:23:02.329 [DEBUG] [Thread-73587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:23:02.341 [INFO] [Thread-73587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:23:02.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:23:02.971 [DEBUG] [Thread-73587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:23:02.971 [DEBUG] [Thread-73587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:23:02.972 [DEBUG] [Thread-73587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:23:03.013 [DEBUG] [Thread-73587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:23:03.013 [DEBUG] [Thread-73587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:23:03.016 [DEBUG] [Thread-73587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:23:03.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:23:03.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:23:03.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:23:03.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:23:03.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:23:03.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:23:03.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.640729 -999.00  +17.90  45.19     27   -1.30 1 1 2 1 1   887    0 20.28 42.86 ----- 44.9 45.2 295.8 56.7 20.8 -28.1 20.9 -27.6 21.6 -26.0 21.9 -26.6
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.640729
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:23:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:22:53', tmtdew=22.78, humidity=20.85, cloud=0.0, wind=50.5, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:22:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:23:03.035 [DEBUG] [Thread-73587] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:23:03.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:23:03.120 [DEBUG] [Thread-73590] [transport.py] [_log()] starting thread (client mode): 0xf57733a0
2025-12-12T17:23:03.120 [DEBUG] [Thread-73590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:23:03.134 [DEBUG] [Thread-73590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:23:03.135 [INFO] [Thread-73590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] client lang: <none>
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] server lang: <none>
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] kex follows: False
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:23:03.142 [DEBUG] [Thread-73590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:23:03.143 [DEBUG] [Thread-73590] [transport.py] [_log()] Compression: none
2025-12-12T17:23:03.143 [DEBUG] [Thread-73590] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:23:03.201 [DEBUG] [Thread-73590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:23:03.201 [DEBUG] [Thread-73590] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:23:03.201 [DEBUG] [Thread-73590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:23:03.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:23:03.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:23:03.258 [DEBUG] [Thread-73590] [transport.py] [_log()] userauth is OK
2025-12-12T17:23:03.258 [DEBUG] [Thread-73590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:23:03.258 [DEBUG] [Thread-73590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:23:03.258 [DEBUG] [Thread-73590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:23:03.258 [DEBUG] [Thread-73590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:23:03.274 [INFO] [Thread-73590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:23:03.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:23:03.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:23:04.087 [DEBUG] [Thread-73592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:04.104 [DEBUG] [Thread-73590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:23:04.105 [DEBUG] [Thread-73590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:23:04.152 [DEBUG] [Thread-73590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:23:04.152 [DEBUG] [Thread-73590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:23:04.160 [DEBUG] [Thread-73590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:23:04.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:23:04.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:23:04.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:23:04.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:23:04.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:23:04.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:23:04.192 [DEBUG] [Thread-73590] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:23:17.429 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:17.430 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:19.123 [DEBUG] [Thread-73593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:34.153 [DEBUG] [Thread-73594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:23:34.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:23:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:23:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 23, 25), 22.72, 20.92, 0.0, 49.68, 18.24, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:23:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:23:25
2025-12-12T17:23:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:23:35.195 [DEBUG] [Thread-73595] [transport.py] [_log()] starting thread (client mode): 0xf57880d0
2025-12-12T17:23:35.195 [DEBUG] [Thread-73595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:23:35.216 [DEBUG] [Thread-73595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:23:35.216 [INFO] [Thread-73595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:23:35.219 [DEBUG] [Thread-73595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:23:35.219 [DEBUG] [Thread-73595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:23:35.219 [DEBUG] [Thread-73595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:23:35.219 [DEBUG] [Thread-73595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] client lang: <none>
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] server lang: <none>
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] kex follows: False
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:23:35.220 [DEBUG] [Thread-73595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:23:35.221 [DEBUG] [Thread-73595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:23:35.221 [DEBUG] [Thread-73595] [transport.py] [_log()] Compression: none
2025-12-12T17:23:35.221 [DEBUG] [Thread-73595] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:23:35.241 [DEBUG] [Thread-73595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:23:35.241 [DEBUG] [Thread-73595] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:23:35.242 [DEBUG] [Thread-73595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:23:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:23:35.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:23:35.245 [DEBUG] [Thread-73595] [transport.py] [_log()] userauth is OK
2025-12-12T17:23:35.245 [DEBUG] [Thread-73595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:23:35.245 [DEBUG] [Thread-73595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:23:35.245 [DEBUG] [Thread-73595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:23:35.245 [DEBUG] [Thread-73595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:23:35.269 [INFO] [Thread-73595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:23:35.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:23:35.904 [DEBUG] [Thread-73595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:23:35.904 [DEBUG] [Thread-73595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:23:35.905 [DEBUG] [Thread-73595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:23:35.946 [DEBUG] [Thread-73595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:23:35.946 [DEBUG] [Thread-73595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:23:35.949 [DEBUG] [Thread-73595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:23:35.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:23:35.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:23:35.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:23:35.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:23:35.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:23:35.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:23:35.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:23:35.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:23:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:23:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.641076 -999.00  +17.60  53.84     27   -1.20 1 1 2 1 1   887    0 19.97 38.19 ----- 43.2 53.8 295.4 64.0 20.7 -28.8 20.8 -27.8 21.4 -27.2 21.7 -26.6
2025-12-12T17:23:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:23:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:23:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.641076
2025-12-12T17:23:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:23:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:23:35.974 [DEBUG] [Thread-73595] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:23:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:23:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:23:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:23:35.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:23:25', tmtdew=22.72, humidity=20.92, cloud=0.0, wind=49.68, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:23:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:23:36.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:23:36.071 [DEBUG] [Thread-73598] [transport.py] [_log()] starting thread (client mode): 0xf81c3520
2025-12-12T17:23:36.071 [DEBUG] [Thread-73598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:23:36.087 [DEBUG] [Thread-73598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:23:36.087 [INFO] [Thread-73598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:23:36.094 [DEBUG] [Thread-73598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:23:36.094 [DEBUG] [Thread-73598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:23:36.094 [DEBUG] [Thread-73598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:23:36.094 [DEBUG] [Thread-73598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:36.094 [DEBUG] [Thread-73598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:23:36.094 [DEBUG] [Thread-73598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] client lang: <none>
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] server lang: <none>
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] kex follows: False
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] Compression: none
2025-12-12T17:23:36.095 [DEBUG] [Thread-73598] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:23:36.150 [DEBUG] [Thread-73598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:23:36.151 [DEBUG] [Thread-73598] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:23:36.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:23:36.152 [DEBUG] [Thread-73598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:23:36.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:23:36.207 [DEBUG] [Thread-73598] [transport.py] [_log()] userauth is OK
2025-12-12T17:23:36.207 [DEBUG] [Thread-73598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:23:36.208 [DEBUG] [Thread-73598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:23:36.208 [DEBUG] [Thread-73598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:23:36.208 [DEBUG] [Thread-73598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:23:36.229 [INFO] [Thread-73598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:23:36.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:23:36.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:23:37.098 [DEBUG] [Thread-73598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:23:37.098 [DEBUG] [Thread-73598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:23:37.146 [DEBUG] [Thread-73598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:23:37.146 [DEBUG] [Thread-73598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:23:37.155 [DEBUG] [Thread-73598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:23:37.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:23:37.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:23:37.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:23:37.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:23:37.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:23:37.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:23:37.189 [DEBUG] [Thread-73598] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:23:49.180 [DEBUG] [Thread-73600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:23:56.377 [DEBUG] [Thread-73601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:04.222 [DEBUG] [Thread-73602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:24:07.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:24:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:24:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 23, 57), 23.04, 20.8, 0.0, 45.61, 18.57, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:24:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:23:57
2025-12-12T17:24:08.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:24:08.193 [DEBUG] [Thread-73603] [transport.py] [_log()] starting thread (client mode): 0xf5788730
2025-12-12T17:24:08.194 [DEBUG] [Thread-73603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:24:08.213 [DEBUG] [Thread-73603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:24:08.213 [INFO] [Thread-73603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:24:08.216 [DEBUG] [Thread-73603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] client lang: <none>
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] server lang: <none>
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] kex follows: False
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] Compression: none
2025-12-12T17:24:08.217 [DEBUG] [Thread-73603] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:24:08.234 [DEBUG] [Thread-73603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:24:08.235 [DEBUG] [Thread-73603] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:24:08.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:24:08.235 [DEBUG] [Thread-73603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:24:08.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:24:08.237 [DEBUG] [Thread-73603] [transport.py] [_log()] userauth is OK
2025-12-12T17:24:08.238 [DEBUG] [Thread-73603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:24:08.238 [DEBUG] [Thread-73603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:24:08.238 [DEBUG] [Thread-73603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:24:08.238 [DEBUG] [Thread-73603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:24:08.262 [INFO] [Thread-73603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:24:08.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:24:08.883 [DEBUG] [Thread-73603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:24:08.883 [DEBUG] [Thread-73603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:24:08.884 [DEBUG] [Thread-73603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:24:08.924 [DEBUG] [Thread-73603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:24:08.924 [DEBUG] [Thread-73603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:24:08.927 [DEBUG] [Thread-73603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:24:08.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:24:08.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:24:08.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:24:08.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:24:08.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:24:08.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:24:08.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:24:08.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:24:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:24:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.641423 -999.00  +17.80  58.45     27   -1.30 1 1 2 1 1   887    0 19.88 36.21 ----- 56.7 58.5 296.2 61.9 20.7 -28.5 20.8 -28.3 21.4 -28.6 21.8 -25.9
2025-12-12T17:24:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:24:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:24:08.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.641423
2025-12-12T17:24:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:24:08.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:24:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:24:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:24:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:24:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:23:57', tmtdew=23.04, humidity=20.8, cloud=0.0, wind=45.61, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:23:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:24:08.953 [DEBUG] [Thread-73603] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:24:09.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:24:09.049 [DEBUG] [Thread-73606] [transport.py] [_log()] starting thread (client mode): 0xf81c1c30
2025-12-12T17:24:09.049 [DEBUG] [Thread-73606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:24:09.064 [DEBUG] [Thread-73606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:24:09.064 [INFO] [Thread-73606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:24:09.072 [DEBUG] [Thread-73606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:24:09.072 [DEBUG] [Thread-73606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:24:09.072 [DEBUG] [Thread-73606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:24:09.072 [DEBUG] [Thread-73606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] client lang: <none>
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] server lang: <none>
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] kex follows: False
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:24:09.073 [DEBUG] [Thread-73606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:24:09.074 [DEBUG] [Thread-73606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:24:09.074 [DEBUG] [Thread-73606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:24:09.074 [DEBUG] [Thread-73606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:24:09.074 [DEBUG] [Thread-73606] [transport.py] [_log()] Compression: none
2025-12-12T17:24:09.074 [DEBUG] [Thread-73606] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:24:09.132 [DEBUG] [Thread-73606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:24:09.133 [DEBUG] [Thread-73606] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:24:09.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:24:09.134 [DEBUG] [Thread-73606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:24:09.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:24:09.188 [DEBUG] [Thread-73606] [transport.py] [_log()] userauth is OK
2025-12-12T17:24:09.188 [DEBUG] [Thread-73606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:24:09.189 [DEBUG] [Thread-73606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:24:09.189 [DEBUG] [Thread-73606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:24:09.189 [DEBUG] [Thread-73606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:24:09.211 [INFO] [Thread-73606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:24:09.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:24:09.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:24:10.045 [DEBUG] [Thread-73606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:24:10.046 [DEBUG] [Thread-73606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:24:10.094 [DEBUG] [Thread-73606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:24:10.094 [DEBUG] [Thread-73606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:24:10.104 [DEBUG] [Thread-73606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:24:10.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:24:10.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:24:10.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:24:10.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:24:10.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:24:10.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:24:10.141 [DEBUG] [Thread-73606] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:24:17.571 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:17.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:19.250 [DEBUG] [Thread-73608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:34.289 [DEBUG] [Thread-73609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:24:40.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:24:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:24:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 24, 29), 23.05, 20.8, 0.0, 42.4, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:24:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:24:29
2025-12-12T17:24:40.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:24:41.147 [DEBUG] [Thread-73610] [transport.py] [_log()] starting thread (client mode): 0xf574dd80
2025-12-12T17:24:41.147 [DEBUG] [Thread-73610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:24:41.167 [DEBUG] [Thread-73610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:24:41.168 [INFO] [Thread-73610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:41.172 [DEBUG] [Thread-73610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] client lang: <none>
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] server lang: <none>
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] kex follows: False
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] Compression: none
2025-12-12T17:24:41.173 [DEBUG] [Thread-73610] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:24:41.192 [DEBUG] [Thread-73610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:24:41.193 [DEBUG] [Thread-73610] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:24:41.193 [DEBUG] [Thread-73610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:24:41.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:24:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:24:41.196 [DEBUG] [Thread-73610] [transport.py] [_log()] userauth is OK
2025-12-12T17:24:41.196 [DEBUG] [Thread-73610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:24:41.196 [DEBUG] [Thread-73610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:24:41.196 [DEBUG] [Thread-73610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:24:41.196 [DEBUG] [Thread-73610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:24:41.211 [INFO] [Thread-73610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:24:41.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:24:41.859 [DEBUG] [Thread-73610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:24:41.859 [DEBUG] [Thread-73610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:24:41.859 [DEBUG] [Thread-73610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:24:41.900 [DEBUG] [Thread-73610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:24:41.900 [DEBUG] [Thread-73610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:24:41.903 [DEBUG] [Thread-73610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:24:41.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:24:41.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:24:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:24:41.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:24:41.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:24:41.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:24:41.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:24:41.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:24:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:24:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.641771 -999.00  +17.60  42.52     27   -1.40 1 1 2 1 1   887    0 19.45 33.71 ----- 42.2 42.5 297.6 61.7 20.6 -28.5 20.7 -27.5 21.3 -25.3 21.6 -26.0
2025-12-12T17:24:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:24:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:24:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.641771
2025-12-12T17:24:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:24:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:24:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:24:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:24:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:24:41.929 [DEBUG] [Thread-73610] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:24:41.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:24:29', tmtdew=23.05, humidity=20.8, cloud=0.0, wind=42.4, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:24:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:24:42.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:24:42.026 [DEBUG] [Thread-73613] [transport.py] [_log()] starting thread (client mode): 0xf5789690
2025-12-12T17:24:42.027 [DEBUG] [Thread-73613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:24:42.041 [DEBUG] [Thread-73613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:24:42.041 [INFO] [Thread-73613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:24:42.049 [DEBUG] [Thread-73613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] client lang: <none>
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] server lang: <none>
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] kex follows: False
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] Compression: none
2025-12-12T17:24:42.050 [DEBUG] [Thread-73613] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:24:42.109 [DEBUG] [Thread-73613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:24:42.109 [DEBUG] [Thread-73613] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:24:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:24:42.110 [DEBUG] [Thread-73613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:24:42.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:24:42.165 [DEBUG] [Thread-73613] [transport.py] [_log()] userauth is OK
2025-12-12T17:24:42.165 [DEBUG] [Thread-73613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:24:42.165 [DEBUG] [Thread-73613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:24:42.165 [DEBUG] [Thread-73613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:24:42.165 [DEBUG] [Thread-73613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:24:42.185 [INFO] [Thread-73613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:24:42.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:24:42.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:24:43.032 [DEBUG] [Thread-73613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:24:43.033 [DEBUG] [Thread-73613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:24:43.081 [DEBUG] [Thread-73613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:24:43.082 [DEBUG] [Thread-73613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:24:43.090 [DEBUG] [Thread-73613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:24:43.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:24:43.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:24:43.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:24:43.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:24:43.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:24:43.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:24:43.126 [DEBUG] [Thread-73613] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:24:49.319 [DEBUG] [Thread-73615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:24:56.437 [DEBUG] [Thread-73616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:04.363 [DEBUG] [Thread-73617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:13.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:25:13.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:25:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:25:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 25, 1), 23.3, 20.49, 0.0, 48.24, 18.82, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:25:13.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:25:01
2025-12-12T17:25:13.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:25:14.109 [DEBUG] [Thread-73618] [transport.py] [_log()] starting thread (client mode): 0xf81e6050
2025-12-12T17:25:14.109 [DEBUG] [Thread-73618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:25:14.129 [DEBUG] [Thread-73618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:25:14.129 [INFO] [Thread-73618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:25:14.132 [DEBUG] [Thread-73618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:25:14.132 [DEBUG] [Thread-73618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] client lang: <none>
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] server lang: <none>
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] kex follows: False
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:25:14.133 [DEBUG] [Thread-73618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:25:14.134 [DEBUG] [Thread-73618] [transport.py] [_log()] Compression: none
2025-12-12T17:25:14.134 [DEBUG] [Thread-73618] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:25:14.144 [DEBUG] [Thread-73618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:25:14.144 [DEBUG] [Thread-73618] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:25:14.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:25:14.145 [DEBUG] [Thread-73618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:25:14.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:25:14.147 [DEBUG] [Thread-73618] [transport.py] [_log()] userauth is OK
2025-12-12T17:25:14.147 [DEBUG] [Thread-73618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:25:14.147 [DEBUG] [Thread-73618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:25:14.147 [DEBUG] [Thread-73618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:25:14.147 [DEBUG] [Thread-73618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:25:14.164 [INFO] [Thread-73618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:25:14.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:25:14.803 [DEBUG] [Thread-73618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:25:14.803 [DEBUG] [Thread-73618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:25:14.803 [DEBUG] [Thread-73618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:25:14.844 [DEBUG] [Thread-73618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:25:14.844 [DEBUG] [Thread-73618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:25:14.847 [DEBUG] [Thread-73618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:25:14.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:25:14.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:25:14.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:25:14.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:25:14.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:25:14.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:25:14.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:25:14.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:25:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:25:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.642118 -999.00  +18.10  34.21     26   -1.30 1 1 2 1 1   887    0 19.50 29.39 ----- 43.9 34.2 295.7 47.4 20.7 -27.0 20.8 -27.0 21.5 -25.2 21.7 -25.4
2025-12-12T17:25:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:25:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:25:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.642118
2025-12-12T17:25:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:25:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:25:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:25:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:25:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:25:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:25:01', tmtdew=23.3, humidity=20.49, cloud=0.0, wind=48.24, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:24:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:25:14.869 [DEBUG] [Thread-73618] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:25:14.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:25:14.964 [DEBUG] [Thread-73621] [transport.py] [_log()] starting thread (client mode): 0xf57715a0
2025-12-12T17:25:14.964 [DEBUG] [Thread-73621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:25:14.979 [DEBUG] [Thread-73621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:25:14.979 [INFO] [Thread-73621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:25:14.986 [DEBUG] [Thread-73621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] client lang: <none>
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] server lang: <none>
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] kex follows: False
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] Compression: none
2025-12-12T17:25:14.987 [DEBUG] [Thread-73621] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:25:15.045 [DEBUG] [Thread-73621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:25:15.046 [DEBUG] [Thread-73621] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:25:15.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:25:15.047 [DEBUG] [Thread-73621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:25:15.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:25:15.102 [DEBUG] [Thread-73621] [transport.py] [_log()] userauth is OK
2025-12-12T17:25:15.102 [DEBUG] [Thread-73621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:25:15.102 [DEBUG] [Thread-73621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:25:15.102 [DEBUG] [Thread-73621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:25:15.102 [DEBUG] [Thread-73621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:25:15.119 [INFO] [Thread-73621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:25:15.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:25:15.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:25:15.945 [DEBUG] [Thread-73621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:25:15.945 [DEBUG] [Thread-73621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:25:15.994 [DEBUG] [Thread-73621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:25:15.994 [DEBUG] [Thread-73621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:25:16.003 [DEBUG] [Thread-73621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:25:16.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:25:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:25:16.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:25:16.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:25:16.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:25:16.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:25:16.038 [DEBUG] [Thread-73621] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:25:17.713 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:17.714 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:19.392 [DEBUG] [Thread-73623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:34.439 [DEBUG] [Thread-73624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:25:46.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:25:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:25:46.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 25, 33), 24.51, 18.68, 0.0, 57.93, 19.84, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:25:46.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:25:33
2025-12-12T17:25:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:25:47.007 [DEBUG] [Thread-73625] [transport.py] [_log()] starting thread (client mode): 0xf574ec80
2025-12-12T17:25:47.008 [DEBUG] [Thread-73625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:25:47.028 [DEBUG] [Thread-73625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:25:47.028 [INFO] [Thread-73625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] client lang: <none>
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] server lang: <none>
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] kex follows: False
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] Compression: none
2025-12-12T17:25:47.032 [DEBUG] [Thread-73625] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:25:47.044 [DEBUG] [Thread-73625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:25:47.044 [DEBUG] [Thread-73625] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:25:47.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:25:47.045 [DEBUG] [Thread-73625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:25:47.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:25:47.047 [DEBUG] [Thread-73625] [transport.py] [_log()] userauth is OK
2025-12-12T17:25:47.047 [DEBUG] [Thread-73625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:25:47.047 [DEBUG] [Thread-73625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:25:47.048 [DEBUG] [Thread-73625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:25:47.048 [DEBUG] [Thread-73625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:25:47.083 [INFO] [Thread-73625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:25:47.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:25:47.723 [DEBUG] [Thread-73625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:25:47.723 [DEBUG] [Thread-73625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:25:47.724 [DEBUG] [Thread-73625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:25:47.764 [DEBUG] [Thread-73625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:25:47.764 [DEBUG] [Thread-73625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:25:47.767 [DEBUG] [Thread-73625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:25:47.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:25:47.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:25:47.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:25:47.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:25:47.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:25:47.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:25:47.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:25:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:25:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:25:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.642465 -999.00  +18.30  42.34     26   -1.40 1 1 2 1 1   887    0 19.71 28.74 ----- 53.0 42.3 301.1 64.1 20.7 -28.2 20.8 -28.7 21.3 -28.1 21.8 -26.7
2025-12-12T17:25:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:25:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:25:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.642465
2025-12-12T17:25:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:25:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:25:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:25:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:25:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:25:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:25:33', tmtdew=24.51, humidity=18.68, cloud=0.0, wind=57.93, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:25:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:25:47.792 [DEBUG] [Thread-73625] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:25:47.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:25:47.889 [DEBUG] [Thread-73628] [transport.py] [_log()] starting thread (client mode): 0xf570c460
2025-12-12T17:25:47.889 [DEBUG] [Thread-73628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:25:47.906 [DEBUG] [Thread-73628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:25:47.906 [INFO] [Thread-73628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:25:47.914 [DEBUG] [Thread-73628] [transport.py] [_log()] client lang: <none>
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] server lang: <none>
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] kex follows: False
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] Compression: none
2025-12-12T17:25:47.915 [DEBUG] [Thread-73628] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:25:47.974 [DEBUG] [Thread-73628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:25:47.975 [DEBUG] [Thread-73628] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:25:47.985 [DEBUG] [Thread-73628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:25:47.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:25:47.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:25:48.031 [DEBUG] [Thread-73628] [transport.py] [_log()] userauth is OK
2025-12-12T17:25:48.031 [DEBUG] [Thread-73628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:25:48.031 [DEBUG] [Thread-73628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:25:48.031 [DEBUG] [Thread-73628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:25:48.031 [DEBUG] [Thread-73628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:25:48.050 [INFO] [Thread-73628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:25:48.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:25:48.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:25:48.990 [DEBUG] [Thread-73628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:25:48.990 [DEBUG] [Thread-73628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:25:49.039 [DEBUG] [Thread-73628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:25:49.039 [DEBUG] [Thread-73628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:25:49.048 [DEBUG] [Thread-73628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:25:49.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:25:49.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:25:49.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:25:49.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:25:49.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:25:49.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:25:49.082 [DEBUG] [Thread-73628] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:25:49.463 [DEBUG] [Thread-73630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:25:56.493 [DEBUG] [Thread-73631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:04.509 [DEBUG] [Thread-73632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:17.854 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:17.855 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:26:19.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:26:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:26:19.536 [DEBUG] [Thread-73633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 26, 5), 23.44, 20.1, 0.0, 49.07, 18.6, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:26:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:26:05
2025-12-12T17:26:19.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:26:20.117 [DEBUG] [Thread-73634] [transport.py] [_log()] starting thread (client mode): 0xf813c820
2025-12-12T17:26:20.117 [DEBUG] [Thread-73634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:26:20.136 [DEBUG] [Thread-73634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:26:20.136 [INFO] [Thread-73634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] client lang: <none>
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] server lang: <none>
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] kex follows: False
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:26:20.137 [DEBUG] [Thread-73634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:26:20.138 [DEBUG] [Thread-73634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:26:20.138 [DEBUG] [Thread-73634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:26:20.138 [DEBUG] [Thread-73634] [transport.py] [_log()] Compression: none
2025-12-12T17:26:20.138 [DEBUG] [Thread-73634] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:26:20.145 [DEBUG] [Thread-73634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:26:20.145 [DEBUG] [Thread-73634] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:26:20.145 [DEBUG] [Thread-73634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:26:20.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:26:20.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:26:20.146 [DEBUG] [Thread-73634] [transport.py] [_log()] userauth is OK
2025-12-12T17:26:20.146 [DEBUG] [Thread-73634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:26:20.146 [DEBUG] [Thread-73634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:26:20.146 [DEBUG] [Thread-73634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:26:20.146 [DEBUG] [Thread-73634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:26:20.157 [INFO] [Thread-73634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:26:20.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:26:20.709 [DEBUG] [Thread-73634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:26:20.709 [DEBUG] [Thread-73634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:26:20.709 [DEBUG] [Thread-73634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:26:20.750 [DEBUG] [Thread-73634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:26:20.750 [DEBUG] [Thread-73634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:26:20.752 [DEBUG] [Thread-73634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:26:20.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:26:20.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:26:20.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:26:20.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:26:20.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:26:20.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:26:20.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:26:20.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:26:20.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.642812 -999.00  +18.10  48.36     26   -1.40 1 1 2 1 1   887    0 19.24 28.35 ----- 42.5 48.4 299.4 55.5 20.6 -28.1 20.8 -27.7 21.4 -24.5 21.6 -26.4
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.642812
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:26:20.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:26:05', tmtdew=23.44, humidity=20.1, cloud=0.0, wind=49.07, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:25:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:26:20.775 [DEBUG] [Thread-73634] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:26:20.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:26:20.860 [DEBUG] [Thread-73637] [transport.py] [_log()] starting thread (client mode): 0xf813f4c0
2025-12-12T17:26:20.860 [DEBUG] [Thread-73637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:26:20.875 [DEBUG] [Thread-73637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:26:20.875 [INFO] [Thread-73637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:26:20.882 [DEBUG] [Thread-73637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:26:20.882 [DEBUG] [Thread-73637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] client lang: <none>
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] server lang: <none>
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] kex follows: False
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] Compression: none
2025-12-12T17:26:20.883 [DEBUG] [Thread-73637] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:26:20.941 [DEBUG] [Thread-73637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:26:20.941 [DEBUG] [Thread-73637] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:26:20.941 [DEBUG] [Thread-73637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:26:20.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:26:20.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:26:20.999 [DEBUG] [Thread-73637] [transport.py] [_log()] userauth is OK
2025-12-12T17:26:20.999 [DEBUG] [Thread-73637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:26:20.999 [DEBUG] [Thread-73637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:26:20.999 [DEBUG] [Thread-73637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:26:20.999 [DEBUG] [Thread-73637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:26:21.013 [INFO] [Thread-73637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:26:21.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:26:21.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:26:21.859 [DEBUG] [Thread-73637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:26:21.859 [DEBUG] [Thread-73637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:26:21.906 [DEBUG] [Thread-73637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:26:21.907 [DEBUG] [Thread-73637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:26:21.915 [DEBUG] [Thread-73637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:26:21.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:26:21.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:26:21.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:26:21.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:26:21.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:26:21.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:26:21.950 [DEBUG] [Thread-73637] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:26:34.570 [DEBUG] [Thread-73639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:49.621 [DEBUG] [Thread-73640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:26:51.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:26:51.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:26:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:26:52.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 26, 37), 23.07, 20.75, 0.0, 44.39, 18.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:26:52.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:26:37
2025-12-12T17:26:52.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:26:52.923 [DEBUG] [Thread-73641] [transport.py] [_log()] starting thread (client mode): 0xf574e500
2025-12-12T17:26:52.923 [DEBUG] [Thread-73641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:26:52.945 [DEBUG] [Thread-73641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:26:52.946 [INFO] [Thread-73641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] client lang: <none>
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] server lang: <none>
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] kex follows: False
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] Compression: none
2025-12-12T17:26:52.949 [DEBUG] [Thread-73641] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:26:52.966 [DEBUG] [Thread-73641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:26:52.966 [DEBUG] [Thread-73641] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:26:52.966 [DEBUG] [Thread-73641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:26:52.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:26:52.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:26:52.967 [DEBUG] [Thread-73641] [transport.py] [_log()] userauth is OK
2025-12-12T17:26:52.967 [DEBUG] [Thread-73641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:26:52.967 [DEBUG] [Thread-73641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:26:52.967 [DEBUG] [Thread-73641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:26:52.967 [DEBUG] [Thread-73641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:26:52.976 [INFO] [Thread-73641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:26:52.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:26:53.590 [DEBUG] [Thread-73641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:26:53.590 [DEBUG] [Thread-73641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:26:53.591 [DEBUG] [Thread-73641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:26:53.632 [DEBUG] [Thread-73641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:26:53.632 [DEBUG] [Thread-73641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:26:53.635 [DEBUG] [Thread-73641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:26:53.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:26:53.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:26:53.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:26:53.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:26:53.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:26:53.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:26:53.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:26:53.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:26:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:26:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.643507 -999.00  +18.10  32.39     26   -1.40 1 1 2 1 1   887    0 19.76 34.90 ----- 47.5 32.4 305.4 51.2 20.6 -28.3 20.8 -28.5 21.4 -24.6 21.7 -26.4
2025-12-12T17:26:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:26:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:26:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.643507
2025-12-12T17:26:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:26:53.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:26:53.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:26:53.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:26:53.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:26:53.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:26:37', tmtdew=23.07, humidity=20.75, cloud=0.0, wind=44.39, temperature=18.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:26:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:26:53.660 [DEBUG] [Thread-73641] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:26:53.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:26:53.756 [DEBUG] [Thread-73644] [transport.py] [_log()] starting thread (client mode): 0xf574d360
2025-12-12T17:26:53.756 [DEBUG] [Thread-73644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:26:53.771 [DEBUG] [Thread-73644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:26:53.771 [INFO] [Thread-73644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:26:53.779 [DEBUG] [Thread-73644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:26:53.779 [DEBUG] [Thread-73644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:26:53.779 [DEBUG] [Thread-73644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:26:53.779 [DEBUG] [Thread-73644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] client lang: <none>
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] server lang: <none>
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] kex follows: False
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:26:53.780 [DEBUG] [Thread-73644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:26:53.781 [DEBUG] [Thread-73644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:26:53.781 [DEBUG] [Thread-73644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:26:53.781 [DEBUG] [Thread-73644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:26:53.781 [DEBUG] [Thread-73644] [transport.py] [_log()] Compression: none
2025-12-12T17:26:53.781 [DEBUG] [Thread-73644] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:26:53.834 [DEBUG] [Thread-73644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:26:53.835 [DEBUG] [Thread-73644] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:26:53.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:26:53.835 [DEBUG] [Thread-73644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:26:53.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:26:53.892 [DEBUG] [Thread-73644] [transport.py] [_log()] userauth is OK
2025-12-12T17:26:53.893 [DEBUG] [Thread-73644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:26:53.893 [DEBUG] [Thread-73644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:26:53.893 [DEBUG] [Thread-73644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:26:53.893 [DEBUG] [Thread-73644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:26:53.906 [INFO] [Thread-73644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:26:53.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:26:53.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:26:54.734 [DEBUG] [Thread-73644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:26:54.734 [DEBUG] [Thread-73644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:26:54.783 [DEBUG] [Thread-73644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:26:54.783 [DEBUG] [Thread-73644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:26:54.791 [DEBUG] [Thread-73644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:26:54.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:26:54.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:26:54.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:26:54.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:26:54.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:26:54.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:26:54.823 [DEBUG] [Thread-73644] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:26:56.540 [DEBUG] [Thread-73646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:04.653 [DEBUG] [Thread-73647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:17.993 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:17.994 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:19.699 [DEBUG] [Thread-73648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:27:24.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:27:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:27:25.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 27, 9), 22.86, 21.03, 0.0, 38.89, 18.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:27:25.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:27:09
2025-12-12T17:27:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:27:25.817 [DEBUG] [Thread-73649] [transport.py] [_log()] starting thread (client mode): 0xf813cfa0
2025-12-12T17:27:25.818 [DEBUG] [Thread-73649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:27:25.839 [DEBUG] [Thread-73649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:27:25.839 [INFO] [Thread-73649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] client lang: <none>
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] server lang: <none>
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] kex follows: False
2025-12-12T17:27:25.843 [DEBUG] [Thread-73649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:27:25.844 [DEBUG] [Thread-73649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:27:25.844 [DEBUG] [Thread-73649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:27:25.844 [DEBUG] [Thread-73649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:27:25.844 [DEBUG] [Thread-73649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:27:25.844 [DEBUG] [Thread-73649] [transport.py] [_log()] Compression: none
2025-12-12T17:27:25.844 [DEBUG] [Thread-73649] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:27:25.860 [DEBUG] [Thread-73649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:27:25.861 [DEBUG] [Thread-73649] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:27:25.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:27:25.862 [DEBUG] [Thread-73649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:27:25.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:27:25.863 [DEBUG] [Thread-73649] [transport.py] [_log()] userauth is OK
2025-12-12T17:27:25.863 [DEBUG] [Thread-73649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:27:25.863 [DEBUG] [Thread-73649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:27:25.863 [DEBUG] [Thread-73649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:27:25.864 [DEBUG] [Thread-73649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:27:25.887 [INFO] [Thread-73649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:27:25.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:27:26.531 [DEBUG] [Thread-73649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:27:26.532 [DEBUG] [Thread-73649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:27:26.532 [DEBUG] [Thread-73649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:27:26.573 [DEBUG] [Thread-73649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:27:26.573 [DEBUG] [Thread-73649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:27:26.575 [DEBUG] [Thread-73649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:27:26.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:27:26.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:27:26.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:27:26.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:27:26.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:27:26.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:27:26.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:27:26.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:27:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:27:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.643854 -999.00  +18.10  45.73     26   -1.20 1 1 2 1 1   887    0 19.72 38.46 ----- 38.8 45.7 313.4 56.4 20.7 -28.5 20.8 -28.1 21.5 -25.7 21.8 -26.3
2025-12-12T17:27:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:27:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:27:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.643854
2025-12-12T17:27:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:27:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:27:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:27:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:27:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:27:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:27:09', tmtdew=22.86, humidity=21.03, cloud=0.0, wind=38.89, temperature=18.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:27:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:27:26.602 [DEBUG] [Thread-73649] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:27:26.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:27:26.698 [DEBUG] [Thread-73652] [transport.py] [_log()] starting thread (client mode): 0xf574e860
2025-12-12T17:27:26.698 [DEBUG] [Thread-73652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:27:26.712 [DEBUG] [Thread-73652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:27:26.712 [INFO] [Thread-73652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] client lang: <none>
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] server lang: <none>
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] kex follows: False
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:27:26.720 [DEBUG] [Thread-73652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:27:26.721 [DEBUG] [Thread-73652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:27:26.721 [DEBUG] [Thread-73652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:27:26.721 [DEBUG] [Thread-73652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:27:26.721 [DEBUG] [Thread-73652] [transport.py] [_log()] Compression: none
2025-12-12T17:27:26.721 [DEBUG] [Thread-73652] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:27:26.777 [DEBUG] [Thread-73652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:27:26.778 [DEBUG] [Thread-73652] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:27:26.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:27:26.779 [DEBUG] [Thread-73652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:27:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:27:26.837 [DEBUG] [Thread-73652] [transport.py] [_log()] userauth is OK
2025-12-12T17:27:26.837 [DEBUG] [Thread-73652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:27:26.838 [DEBUG] [Thread-73652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:27:26.838 [DEBUG] [Thread-73652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:27:26.838 [DEBUG] [Thread-73652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:27:26.857 [INFO] [Thread-73652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:27:26.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:27:26.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:27:27.689 [DEBUG] [Thread-73652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:27:27.689 [DEBUG] [Thread-73652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:27:27.737 [DEBUG] [Thread-73652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:27:27.737 [DEBUG] [Thread-73652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:27:27.746 [DEBUG] [Thread-73652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:27:27.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:27:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:27:27.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:27:27.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:27:27.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:27:27.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:27:27.779 [DEBUG] [Thread-73652] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:27:34.726 [DEBUG] [Thread-73654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:49.759 [DEBUG] [Thread-73655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:56.594 [DEBUG] [Thread-73656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:27:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:27:57.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:27:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:27:58.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 27, 41), 22.61, 21.1, 0.0, 35.62, 18.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:27:58.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:27:41
2025-12-12T17:27:58.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:27:58.780 [DEBUG] [Thread-73657] [transport.py] [_log()] starting thread (client mode): 0xf57be2f0
2025-12-12T17:27:58.780 [DEBUG] [Thread-73657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:27:58.800 [DEBUG] [Thread-73657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:27:58.800 [INFO] [Thread-73657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] client lang: <none>
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] server lang: <none>
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] kex follows: False
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] Compression: none
2025-12-12T17:27:58.804 [DEBUG] [Thread-73657] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:27:58.822 [DEBUG] [Thread-73657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:27:58.823 [DEBUG] [Thread-73657] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:27:58.823 [DEBUG] [Thread-73657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:27:58.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:27:58.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:27:58.825 [DEBUG] [Thread-73657] [transport.py] [_log()] userauth is OK
2025-12-12T17:27:58.825 [DEBUG] [Thread-73657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:27:58.826 [DEBUG] [Thread-73657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:27:58.826 [DEBUG] [Thread-73657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:27:58.826 [DEBUG] [Thread-73657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:27:58.850 [INFO] [Thread-73657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:27:58.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:27:59.481 [DEBUG] [Thread-73657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:27:59.481 [DEBUG] [Thread-73657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:27:59.482 [DEBUG] [Thread-73657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:27:59.523 [DEBUG] [Thread-73657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:27:59.523 [DEBUG] [Thread-73657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:27:59.525 [DEBUG] [Thread-73657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:27:59.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:27:59.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:27:59.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:27:59.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:27:59.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:27:59.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:27:59.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:27:59.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:27:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:27:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.644201 -999.00  +17.90  48.80     26   -1.30 1 1 2 1 1   887    0 19.71 38.11 ----- 42.3 48.8 309.0 55.8 20.6 -28.1 20.8 -27.6 21.5 -26.6 21.7 -26.1
2025-12-12T17:27:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:27:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:27:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.644201
2025-12-12T17:27:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:27:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:27:59.551 [DEBUG] [Thread-73657] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:27:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:27:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:27:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:27:59.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:27:41', tmtdew=22.61, humidity=21.1, cloud=0.0, wind=35.62, temperature=18.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:27:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:27:59.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:27:59.641 [DEBUG] [Thread-73660] [transport.py] [_log()] starting thread (client mode): 0xf813d6c0
2025-12-12T17:27:59.641 [DEBUG] [Thread-73660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:27:59.655 [DEBUG] [Thread-73660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:27:59.655 [INFO] [Thread-73660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:27:59.662 [DEBUG] [Thread-73660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] client lang: <none>
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] server lang: <none>
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] kex follows: False
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] Compression: none
2025-12-12T17:27:59.663 [DEBUG] [Thread-73660] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:27:59.725 [DEBUG] [Thread-73660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:27:59.726 [DEBUG] [Thread-73660] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:27:59.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:27:59.727 [DEBUG] [Thread-73660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:27:59.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:27:59.782 [DEBUG] [Thread-73660] [transport.py] [_log()] userauth is OK
2025-12-12T17:27:59.782 [DEBUG] [Thread-73660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:27:59.782 [DEBUG] [Thread-73660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:27:59.782 [DEBUG] [Thread-73660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:27:59.782 [DEBUG] [Thread-73660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:27:59.800 [INFO] [Thread-73660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:27:59.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:27:59.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:28:00.706 [DEBUG] [Thread-73660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:28:00.706 [DEBUG] [Thread-73660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:28:00.755 [DEBUG] [Thread-73660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:28:00.755 [DEBUG] [Thread-73660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:28:00.764 [DEBUG] [Thread-73660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:28:00.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:28:00.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:28:00.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:28:00.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:28:00.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:28:00.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:28:00.801 [DEBUG] [Thread-73660] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:28:04.793 [DEBUG] [Thread-73662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:28:18.136 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:28:18.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:28:19.845 [DEBUG] [Thread-73663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:28:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:28:30.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:28:30.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:28:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 28, 13), 22.64, 21.05, 0.0, 37.74, 18.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:28:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:28:13
2025-12-12T17:28:31.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:28:31.800 [DEBUG] [Thread-73664] [transport.py] [_log()] starting thread (client mode): 0xf57be590
2025-12-12T17:28:31.801 [DEBUG] [Thread-73664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:28:31.821 [DEBUG] [Thread-73664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:28:31.821 [INFO] [Thread-73664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] client lang: <none>
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] server lang: <none>
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] kex follows: False
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] Compression: none
2025-12-12T17:28:31.825 [DEBUG] [Thread-73664] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:28:31.833 [DEBUG] [Thread-73664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:28:31.834 [DEBUG] [Thread-73664] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:28:31.834 [DEBUG] [Thread-73664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:28:31.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:28:31.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:28:31.835 [DEBUG] [Thread-73664] [transport.py] [_log()] userauth is OK
2025-12-12T17:28:31.835 [DEBUG] [Thread-73664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:28:31.835 [DEBUG] [Thread-73664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:28:31.835 [DEBUG] [Thread-73664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:28:31.835 [DEBUG] [Thread-73664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:28:31.850 [INFO] [Thread-73664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:28:31.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:28:32.460 [DEBUG] [Thread-73664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:28:32.460 [DEBUG] [Thread-73664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:28:32.461 [DEBUG] [Thread-73664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:28:32.501 [DEBUG] [Thread-73664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:28:32.501 [DEBUG] [Thread-73664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:28:32.504 [DEBUG] [Thread-73664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:28:32.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:28:32.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:28:32.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:28:32.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:28:32.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:28:32.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:28:32.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:28:32.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:28:32.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:28:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.644548 -999.00  +17.90  30.38     27   -1.20 1 1 2 1 1   887    0 19.93 34.32 ----- 34.6 30.4 292.2 50.5 20.7 -27.4 20.8 -27.0 21.6 -25.5 21.7 -25.8
2025-12-12T17:28:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:28:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:28:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.644548
2025-12-12T17:28:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:28:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:28:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:28:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:28:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:28:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:28:13', tmtdew=22.64, humidity=21.05, cloud=0.0, wind=37.74, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:28:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:28:32.521 [DEBUG] [Thread-73664] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:28:32.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:28:32.679 [DEBUG] [Thread-73667] [transport.py] [_log()] starting thread (client mode): 0xf575ef20
2025-12-12T17:28:32.679 [DEBUG] [Thread-73667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:28:32.693 [DEBUG] [Thread-73667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:28:32.693 [INFO] [Thread-73667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] client lang: <none>
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] server lang: <none>
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] kex follows: False
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:28:32.700 [DEBUG] [Thread-73667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:28:32.701 [DEBUG] [Thread-73667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:28:32.701 [DEBUG] [Thread-73667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:28:32.701 [DEBUG] [Thread-73667] [transport.py] [_log()] Compression: none
2025-12-12T17:28:32.701 [DEBUG] [Thread-73667] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:28:32.757 [DEBUG] [Thread-73667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:28:32.757 [DEBUG] [Thread-73667] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:28:32.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:28:32.757 [DEBUG] [Thread-73667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:28:32.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:28:32.814 [DEBUG] [Thread-73667] [transport.py] [_log()] userauth is OK
2025-12-12T17:28:32.814 [DEBUG] [Thread-73667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:28:32.814 [DEBUG] [Thread-73667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:28:32.814 [DEBUG] [Thread-73667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:28:32.814 [DEBUG] [Thread-73667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:28:32.834 [INFO] [Thread-73667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:28:32.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:28:32.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:28:33.678 [DEBUG] [Thread-73667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:28:33.678 [DEBUG] [Thread-73667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:28:33.727 [DEBUG] [Thread-73667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:28:33.727 [DEBUG] [Thread-73667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:28:33.736 [DEBUG] [Thread-73667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:28:33.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:28:33.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:28:33.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:28:33.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:28:33.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:28:33.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:28:33.772 [DEBUG] [Thread-73667] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:28:34.879 [DEBUG] [Thread-73669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:28:49.922 [DEBUG] [Thread-73670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:28:56.659 [DEBUG] [Thread-73671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:03.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:29:03.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:29:03.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
2025-12-12T17:29:04.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 28, 45), 22.96, 20.83, 0.0, 39.01, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:29:04.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:28:45
2025-12-12T17:29:04.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:29:04.777 [DEBUG] [Thread-73672] [transport.py] [_log()] starting thread (client mode): 0xf570fd60
2025-12-12T17:29:04.777 [DEBUG] [Thread-73672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:29:04.798 [DEBUG] [Thread-73672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:29:04.798 [INFO] [Thread-73672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:29:04.799 [DEBUG] [Thread-73672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:29:04.799 [DEBUG] [Thread-73672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] client lang: <none>
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] server lang: <none>
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] kex follows: False
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] Compression: none
2025-12-12T17:29:04.800 [DEBUG] [Thread-73672] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:29:04.816 [DEBUG] [Thread-73672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:29:04.817 [DEBUG] [Thread-73672] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:29:04.817 [DEBUG] [Thread-73672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:29:04.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:29:04.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:29:04.820 [DEBUG] [Thread-73672] [transport.py] [_log()] userauth is OK
2025-12-12T17:29:04.820 [DEBUG] [Thread-73672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:29:04.820 [DEBUG] [Thread-73672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:29:04.820 [DEBUG] [Thread-73672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:29:04.820 [DEBUG] [Thread-73672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:29:04.844 [INFO] [Thread-73672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:29:04.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:29:04.947 [DEBUG] [Thread-73674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:05.477 [DEBUG] [Thread-73672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:29:05.477 [DEBUG] [Thread-73672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:29:05.478 [DEBUG] [Thread-73672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:29:05.519 [DEBUG] [Thread-73672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:29:05.519 [DEBUG] [Thread-73672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:29:05.522 [DEBUG] [Thread-73672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:29:05.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:29:05.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:29:05.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:29:05.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:29:05.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:29:05.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:29:05.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:29:05.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:29:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:29:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.644896 -999.00  +17.90  48.92     26   -1.50 1 1 2 1 1   887    0 20.09 33.08 ----- 49.3 48.9 303.8 62.2 20.5 -28.9 20.7 -28.8 21.6 -25.5 21.7 -27.1
2025-12-12T17:29:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:29:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:29:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.644896
2025-12-12T17:29:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:29:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:29:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:29:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:29:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:29:05.552 [DEBUG] [Thread-73672] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:29:05.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:28:45', tmtdew=22.96, humidity=20.83, cloud=0.0, wind=39.01, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:28:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:29:05.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:29:05.651 [DEBUG] [Thread-73676] [transport.py] [_log()] starting thread (client mode): 0xf575fca0
2025-12-12T17:29:05.651 [DEBUG] [Thread-73676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:29:05.667 [DEBUG] [Thread-73676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:29:05.667 [INFO] [Thread-73676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] client lang: <none>
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] server lang: <none>
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] kex follows: False
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:29:05.675 [DEBUG] [Thread-73676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:29:05.676 [DEBUG] [Thread-73676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:29:05.676 [DEBUG] [Thread-73676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:29:05.676 [DEBUG] [Thread-73676] [transport.py] [_log()] Compression: none
2025-12-12T17:29:05.676 [DEBUG] [Thread-73676] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:29:05.733 [DEBUG] [Thread-73676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:29:05.733 [DEBUG] [Thread-73676] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:29:05.734 [DEBUG] [Thread-73676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:29:05.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:29:05.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:29:05.791 [DEBUG] [Thread-73676] [transport.py] [_log()] userauth is OK
2025-12-12T17:29:05.791 [DEBUG] [Thread-73676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:29:05.791 [DEBUG] [Thread-73676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:29:05.791 [DEBUG] [Thread-73676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:29:05.791 [DEBUG] [Thread-73676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:29:05.806 [INFO] [Thread-73676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:29:05.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:29:05.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:29:06.660 [DEBUG] [Thread-73676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:29:06.661 [DEBUG] [Thread-73676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:29:06.709 [DEBUG] [Thread-73676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:29:06.709 [DEBUG] [Thread-73676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:29:06.718 [DEBUG] [Thread-73676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:29:06.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:29:06.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:29:06.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:29:06.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:29:06.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:29:06.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:29:06.752 [DEBUG] [Thread-73676] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:29:18.278 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:18.279 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:19.980 [DEBUG] [Thread-73678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:35.023 [DEBUG] [Thread-73679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:36.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:29:36.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:29:36.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:29:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 29, 17), 22.98, 20.82, 0.0, 38.68, 18.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:29:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:29:17
2025-12-12T17:29:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:29:37.752 [DEBUG] [Thread-73680] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T17:29:37.752 [DEBUG] [Thread-73680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:29:37.774 [DEBUG] [Thread-73680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:29:37.775 [INFO] [Thread-73680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:37.779 [DEBUG] [Thread-73680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] client lang: <none>
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] server lang: <none>
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] kex follows: False
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:29:37.780 [DEBUG] [Thread-73680] [transport.py] [_log()] Compression: none
2025-12-12T17:29:37.781 [DEBUG] [Thread-73680] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:29:37.798 [DEBUG] [Thread-73680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:29:37.799 [DEBUG] [Thread-73680] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:29:37.799 [DEBUG] [Thread-73680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:29:37.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:29:37.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:29:37.801 [DEBUG] [Thread-73680] [transport.py] [_log()] userauth is OK
2025-12-12T17:29:37.801 [DEBUG] [Thread-73680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:29:37.801 [DEBUG] [Thread-73680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:29:37.801 [DEBUG] [Thread-73680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:29:37.801 [DEBUG] [Thread-73680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:29:37.825 [INFO] [Thread-73680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:29:37.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:29:38.442 [DEBUG] [Thread-73680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:29:38.442 [DEBUG] [Thread-73680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:29:38.442 [DEBUG] [Thread-73680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:29:38.483 [DEBUG] [Thread-73680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:29:38.483 [DEBUG] [Thread-73680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:29:38.486 [DEBUG] [Thread-73680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:29:38.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:29:38.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:29:38.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:29:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:29:38.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:29:38.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:29:38.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.645243 -999.00  +17.60  53.83     27   -1.50 1 1 2 1 1   887    0 19.82 35.52 ----- 46.5 53.8 295.1 57.9 20.5 -28.3 20.6 -27.6 21.3 -30.0 21.5 -26.5
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.645243
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:29:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:29:17', tmtdew=22.98, humidity=20.82, cloud=0.0, wind=38.68, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:29:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:29:38.505 [DEBUG] [Thread-73680] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:29:38.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:29:38.598 [DEBUG] [Thread-73683] [transport.py] [_log()] starting thread (client mode): 0xf81f0670
2025-12-12T17:29:38.598 [DEBUG] [Thread-73683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:29:38.611 [DEBUG] [Thread-73683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:29:38.612 [INFO] [Thread-73683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:29:38.619 [DEBUG] [Thread-73683] [transport.py] [_log()] client lang: <none>
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] server lang: <none>
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] kex follows: False
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] Compression: none
2025-12-12T17:29:38.620 [DEBUG] [Thread-73683] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:29:38.677 [DEBUG] [Thread-73683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:29:38.677 [DEBUG] [Thread-73683] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:29:38.678 [DEBUG] [Thread-73683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:29:38.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:29:38.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:29:38.740 [DEBUG] [Thread-73683] [transport.py] [_log()] userauth is OK
2025-12-12T17:29:38.740 [DEBUG] [Thread-73683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:29:38.740 [DEBUG] [Thread-73683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:29:38.740 [DEBUG] [Thread-73683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:29:38.740 [DEBUG] [Thread-73683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:29:38.759 [INFO] [Thread-73683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:29:38.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:29:38.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:29:39.656 [DEBUG] [Thread-73683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:29:39.656 [DEBUG] [Thread-73683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:29:39.704 [DEBUG] [Thread-73683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:29:39.704 [DEBUG] [Thread-73683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:29:39.713 [DEBUG] [Thread-73683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:29:39.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:29:39.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:29:39.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:29:39.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:29:39.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:29:39.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:29:39.747 [DEBUG] [Thread-73683] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:29:50.051 [DEBUG] [Thread-73685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:29:56.704 [DEBUG] [Thread-73686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:05.085 [DEBUG] [Thread-73687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:30:09.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:30:09.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:30:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 29, 49), 23.14, 20.62, 0.0, 49.69, 18.49, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:30:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:29:49
2025-12-12T17:30:10.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:30:10.767 [DEBUG] [Thread-73688] [transport.py] [_log()] starting thread (client mode): 0xfabc7730
2025-12-12T17:30:10.767 [DEBUG] [Thread-73688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:30:10.787 [DEBUG] [Thread-73688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:30:10.787 [INFO] [Thread-73688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:30:10.790 [DEBUG] [Thread-73688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:30:10.790 [DEBUG] [Thread-73688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:30:10.790 [DEBUG] [Thread-73688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:30:10.790 [DEBUG] [Thread-73688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:10.790 [DEBUG] [Thread-73688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:10.790 [DEBUG] [Thread-73688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] client lang: <none>
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] server lang: <none>
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] kex follows: False
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] Compression: none
2025-12-12T17:30:10.791 [DEBUG] [Thread-73688] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:30:10.807 [DEBUG] [Thread-73688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:30:10.807 [DEBUG] [Thread-73688] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:30:10.807 [DEBUG] [Thread-73688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:30:10.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:30:10.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:30:10.808 [DEBUG] [Thread-73688] [transport.py] [_log()] userauth is OK
2025-12-12T17:30:10.808 [DEBUG] [Thread-73688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:30:10.808 [DEBUG] [Thread-73688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:30:10.808 [DEBUG] [Thread-73688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:30:10.808 [DEBUG] [Thread-73688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:30:10.817 [INFO] [Thread-73688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:30:10.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:30:11.644 [DEBUG] [Thread-73688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:30:11.644 [DEBUG] [Thread-73688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:30:11.644 [DEBUG] [Thread-73688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:30:11.685 [DEBUG] [Thread-73688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:30:11.685 [DEBUG] [Thread-73688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:30:11.687 [DEBUG] [Thread-73688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:30:11.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:30:11.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:30:11.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:30:11.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:30:11.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:30:11.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:30:11.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.645590 -999.00  +17.80  48.02     27   -1.40 1 1 2 1 1   887    0 20.17 39.02 ----- 44.9 48.0 289.0 52.1 20.5 -28.2 20.6 -27.8 21.3 -26.8 21.6 -25.9
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.645590
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:30:11.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:29:49', tmtdew=23.14, humidity=20.62, cloud=0.0, wind=49.69, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:29:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:30:11.708 [DEBUG] [Thread-73688] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:30:11.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:30:11.795 [DEBUG] [Thread-73691] [transport.py] [_log()] starting thread (client mode): 0xfabc6bf0
2025-12-12T17:30:11.795 [DEBUG] [Thread-73691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:30:11.810 [DEBUG] [Thread-73691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:30:11.811 [INFO] [Thread-73691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] client lang: <none>
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] server lang: <none>
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] kex follows: False
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] Compression: none
2025-12-12T17:30:11.818 [DEBUG] [Thread-73691] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:30:11.875 [DEBUG] [Thread-73691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:30:11.875 [DEBUG] [Thread-73691] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:30:11.875 [DEBUG] [Thread-73691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:30:11.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:30:11.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:30:11.932 [DEBUG] [Thread-73691] [transport.py] [_log()] userauth is OK
2025-12-12T17:30:11.932 [DEBUG] [Thread-73691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:30:11.932 [DEBUG] [Thread-73691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:30:11.932 [DEBUG] [Thread-73691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:30:11.932 [DEBUG] [Thread-73691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:30:11.946 [INFO] [Thread-73691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:30:11.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:30:11.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:30:12.782 [DEBUG] [Thread-73691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:30:12.782 [DEBUG] [Thread-73691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:30:12.830 [DEBUG] [Thread-73691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:30:12.831 [DEBUG] [Thread-73691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:30:12.839 [DEBUG] [Thread-73691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:30:12.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:30:12.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:30:12.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:30:12.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:30:12.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:30:12.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:30:12.878 [DEBUG] [Thread-73691] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:30:18.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:18.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:20.120 [DEBUG] [Thread-73693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:35.173 [DEBUG] [Thread-73694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:30:42.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:30:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:30:43.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 30, 21), 23.03, 20.74, 0.0, 46.19, 18.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:30:43.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:30:21
2025-12-12T17:30:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:30:43.902 [DEBUG] [Thread-73695] [transport.py] [_log()] starting thread (client mode): 0xf57bdea0
2025-12-12T17:30:43.902 [DEBUG] [Thread-73695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:30:43.926 [DEBUG] [Thread-73695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:30:43.926 [INFO] [Thread-73695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] client lang: <none>
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] server lang: <none>
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] kex follows: False
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] Compression: none
2025-12-12T17:30:43.930 [DEBUG] [Thread-73695] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:30:43.947 [DEBUG] [Thread-73695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:30:43.948 [DEBUG] [Thread-73695] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:30:43.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:30:43.949 [DEBUG] [Thread-73695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:30:43.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:30:43.950 [DEBUG] [Thread-73695] [transport.py] [_log()] userauth is OK
2025-12-12T17:30:43.951 [DEBUG] [Thread-73695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:30:43.951 [DEBUG] [Thread-73695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:30:43.951 [DEBUG] [Thread-73695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:30:43.951 [DEBUG] [Thread-73695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:30:43.975 [INFO] [Thread-73695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:30:43.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:30:44.558 [DEBUG] [Thread-73695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:30:44.558 [DEBUG] [Thread-73695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:30:44.558 [DEBUG] [Thread-73695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:30:44.599 [DEBUG] [Thread-73695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:30:44.599 [DEBUG] [Thread-73695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:30:44.602 [DEBUG] [Thread-73695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:30:44.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:30:44.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:30:44.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:30:44.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:30:44.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:30:44.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:30:44.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:30:44.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:30:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:30:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.645937 -999.00  +17.50  49.46     27   -1.50 1 1 2 1 1   887    0 20.53 42.38 ----- 49.7 49.5 296.8 62.9 20.4 -28.5 20.5 -28.3 21.2 -27.0 21.5 -26.4
2025-12-12T17:30:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:30:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:30:44.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.645937
2025-12-12T17:30:44.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:30:44.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:30:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:30:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:30:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:30:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:30:21', tmtdew=23.03, humidity=20.74, cloud=0.0, wind=46.19, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:30:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:30:44.620 [DEBUG] [Thread-73695] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:30:44.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:30:44.720 [DEBUG] [Thread-73698] [transport.py] [_log()] starting thread (client mode): 0xf574ff40
2025-12-12T17:30:44.720 [DEBUG] [Thread-73698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:30:44.740 [DEBUG] [Thread-73698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:30:44.740 [INFO] [Thread-73698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:30:44.748 [DEBUG] [Thread-73698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] client lang: <none>
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] server lang: <none>
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] kex follows: False
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] Compression: none
2025-12-12T17:30:44.749 [DEBUG] [Thread-73698] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:30:44.804 [DEBUG] [Thread-73698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:30:44.804 [DEBUG] [Thread-73698] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:30:44.805 [DEBUG] [Thread-73698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:30:44.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:30:44.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:30:44.861 [DEBUG] [Thread-73698] [transport.py] [_log()] userauth is OK
2025-12-12T17:30:44.861 [DEBUG] [Thread-73698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:30:44.861 [DEBUG] [Thread-73698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:30:44.861 [DEBUG] [Thread-73698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:30:44.861 [DEBUG] [Thread-73698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:30:44.884 [INFO] [Thread-73698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:30:44.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:30:44.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:30:45.703 [DEBUG] [Thread-73698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:30:45.704 [DEBUG] [Thread-73698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:30:45.751 [DEBUG] [Thread-73698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:30:45.751 [DEBUG] [Thread-73698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:30:45.759 [DEBUG] [Thread-73698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:30:45.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:30:45.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:30:45.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:30:45.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:30:45.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:30:45.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:30:45.791 [DEBUG] [Thread-73698] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:30:50.201 [DEBUG] [Thread-73700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:30:56.763 [DEBUG] [Thread-73701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:05.237 [DEBUG] [Thread-73702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:31:15.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:31:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:31:16.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 30, 53), 22.86, 20.77, 0.0, 49.95, 18.27, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:31:16.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:30:53
2025-12-12T17:31:16.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:31:16.782 [DEBUG] [Thread-73703] [transport.py] [_log()] starting thread (client mode): 0xf81e4c40
2025-12-12T17:31:16.782 [DEBUG] [Thread-73703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:31:16.802 [DEBUG] [Thread-73703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:31:16.802 [INFO] [Thread-73703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:31:16.805 [DEBUG] [Thread-73703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] client lang: <none>
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] server lang: <none>
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] kex follows: False
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] Compression: none
2025-12-12T17:31:16.806 [DEBUG] [Thread-73703] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:31:16.823 [DEBUG] [Thread-73703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:31:16.823 [DEBUG] [Thread-73703] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:31:16.824 [DEBUG] [Thread-73703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:31:16.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:31:16.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:31:16.826 [DEBUG] [Thread-73703] [transport.py] [_log()] userauth is OK
2025-12-12T17:31:16.826 [DEBUG] [Thread-73703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:31:16.826 [DEBUG] [Thread-73703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:31:16.826 [DEBUG] [Thread-73703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:31:16.826 [DEBUG] [Thread-73703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:31:16.842 [INFO] [Thread-73703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:31:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:31:17.463 [DEBUG] [Thread-73703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:31:17.463 [DEBUG] [Thread-73703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:31:17.463 [DEBUG] [Thread-73703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:31:17.504 [DEBUG] [Thread-73703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:31:17.504 [DEBUG] [Thread-73703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:31:17.507 [DEBUG] [Thread-73703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:31:17.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:31:17.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:31:17.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:31:17.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:31:17.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:31:17.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:31:17.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:31:17.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:31:17.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:31:17.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.646285 -999.00  +17.50  48.80     27   -1.40 1 1 2 1 1   887    0 20.26 46.10 ----- 50.5 48.8 296.2 55.3 20.4 -28.4 20.5 -27.9 21.1 -25.4 21.3 -26.2
2025-12-12T17:31:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:31:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:31:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.646285
2025-12-12T17:31:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:31:17.530 [DEBUG] [Thread-73703] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:31:17.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:31:17.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:31:17.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:31:17.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:31:17.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:30:53', tmtdew=22.86, humidity=20.77, cloud=0.0, wind=49.95, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:30:39.024', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:31:17.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:31:17.627 [DEBUG] [Thread-73706] [transport.py] [_log()] starting thread (client mode): 0xf5701090
2025-12-12T17:31:17.627 [DEBUG] [Thread-73706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:31:17.642 [DEBUG] [Thread-73706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:31:17.642 [INFO] [Thread-73706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] client lang: <none>
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] server lang: <none>
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] kex follows: False
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:31:17.650 [DEBUG] [Thread-73706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:31:17.651 [DEBUG] [Thread-73706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:31:17.651 [DEBUG] [Thread-73706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:31:17.651 [DEBUG] [Thread-73706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:31:17.651 [DEBUG] [Thread-73706] [transport.py] [_log()] Compression: none
2025-12-12T17:31:17.651 [DEBUG] [Thread-73706] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:31:17.709 [DEBUG] [Thread-73706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:31:17.710 [DEBUG] [Thread-73706] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:31:17.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:31:17.711 [DEBUG] [Thread-73706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:31:17.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:31:17.765 [DEBUG] [Thread-73706] [transport.py] [_log()] userauth is OK
2025-12-12T17:31:17.766 [DEBUG] [Thread-73706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:31:17.766 [DEBUG] [Thread-73706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:31:17.766 [DEBUG] [Thread-73706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:31:17.766 [DEBUG] [Thread-73706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:31:17.785 [INFO] [Thread-73706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:31:17.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:31:17.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:31:18.561 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:18.562 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:18.612 [DEBUG] [Thread-73706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:31:18.612 [DEBUG] [Thread-73706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:31:18.660 [DEBUG] [Thread-73706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:31:18.660 [DEBUG] [Thread-73706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:31:18.669 [DEBUG] [Thread-73706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:31:18.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:31:18.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:31:18.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:31:18.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:31:18.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:31:18.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:31:18.703 [DEBUG] [Thread-73706] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:31:20.271 [DEBUG] [Thread-73708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:35.315 [DEBUG] [Thread-73709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:48.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:31:48.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:31:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:31:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 31, 25), 22.95, 20.67, 0.0, 51.66, 18.37, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:31:49.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:31:25
2025-12-12T17:31:49.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:31:49.688 [DEBUG] [Thread-73710] [transport.py] [_log()] starting thread (client mode): 0xf81e59f0
2025-12-12T17:31:49.689 [DEBUG] [Thread-73710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:31:49.710 [DEBUG] [Thread-73710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:31:49.710 [INFO] [Thread-73710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:31:49.714 [DEBUG] [Thread-73710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:31:49.714 [DEBUG] [Thread-73710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:31:49.714 [DEBUG] [Thread-73710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:31:49.714 [DEBUG] [Thread-73710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:49.714 [DEBUG] [Thread-73710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:49.714 [DEBUG] [Thread-73710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] client lang: <none>
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] server lang: <none>
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] kex follows: False
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] Compression: none
2025-12-12T17:31:49.715 [DEBUG] [Thread-73710] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:31:49.734 [DEBUG] [Thread-73710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:31:49.735 [DEBUG] [Thread-73710] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:31:49.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:31:49.736 [DEBUG] [Thread-73710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:31:49.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:31:49.738 [DEBUG] [Thread-73710] [transport.py] [_log()] userauth is OK
2025-12-12T17:31:49.738 [DEBUG] [Thread-73710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:31:49.738 [DEBUG] [Thread-73710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:31:49.738 [DEBUG] [Thread-73710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:31:49.739 [DEBUG] [Thread-73710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:31:49.759 [INFO] [Thread-73710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:31:49.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:31:50.335 [DEBUG] [Thread-73710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:31:50.336 [DEBUG] [Thread-73710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:31:50.336 [DEBUG] [Thread-73710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:31:50.343 [DEBUG] [Thread-73712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:31:50.376 [DEBUG] [Thread-73710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:31:50.377 [DEBUG] [Thread-73710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:31:50.381 [DEBUG] [Thread-73710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:31:50.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:31:50.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:31:50.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:31:50.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:31:50.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:31:50.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:31:50.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:31:50.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:31:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:31:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.646979 -999.00  +17.90  35.85     27   -1.30 1 1 2 1 1   887    0 20.80 56.04 ----- 41.4 35.9 314.0 46.5 20.4 -27.3 20.6 -26.9 21.0 -24.6 21.4 -25.7
2025-12-12T17:31:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:31:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:31:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.646979
2025-12-12T17:31:50.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:31:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:31:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:31:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:31:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:31:50.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:31:25', tmtdew=22.95, humidity=20.67, cloud=0.0, wind=51.66, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:31:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:31:50.404 [DEBUG] [Thread-73710] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:31:50.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:31:50.501 [DEBUG] [Thread-73714] [transport.py] [_log()] starting thread (client mode): 0xf57bd9c0
2025-12-12T17:31:50.501 [DEBUG] [Thread-73714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:31:50.515 [DEBUG] [Thread-73714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:31:50.515 [INFO] [Thread-73714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] client lang: <none>
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] server lang: <none>
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] kex follows: False
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:31:50.523 [DEBUG] [Thread-73714] [transport.py] [_log()] Compression: none
2025-12-12T17:31:50.524 [DEBUG] [Thread-73714] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:31:50.582 [DEBUG] [Thread-73714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:31:50.582 [DEBUG] [Thread-73714] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:31:50.583 [DEBUG] [Thread-73714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:31:50.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:31:50.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:31:50.638 [DEBUG] [Thread-73714] [transport.py] [_log()] userauth is OK
2025-12-12T17:31:50.639 [DEBUG] [Thread-73714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:31:50.639 [DEBUG] [Thread-73714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:31:50.639 [DEBUG] [Thread-73714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:31:50.639 [DEBUG] [Thread-73714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:31:50.658 [INFO] [Thread-73714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:31:50.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:31:50.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:31:51.547 [DEBUG] [Thread-73714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:31:51.547 [DEBUG] [Thread-73714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:31:51.595 [DEBUG] [Thread-73714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:31:51.595 [DEBUG] [Thread-73714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:31:51.605 [DEBUG] [Thread-73714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:31:51.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:31:51.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:31:51.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:31:51.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:31:51.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:31:51.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:31:51.644 [DEBUG] [Thread-73714] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:31:56.815 [DEBUG] [Thread-73716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:05.370 [DEBUG] [Thread-73717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:18.703 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:18.704 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:20.403 [DEBUG] [Thread-73718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:21.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:32:21.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:32:21.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:32:22.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 31, 57), 22.99, 20.62, 0.0, 47.43, 18.37, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:32:22.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:31:57
2025-12-12T17:32:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:32:22.636 [DEBUG] [Thread-73719] [transport.py] [_log()] starting thread (client mode): 0xf81c3fd0
2025-12-12T17:32:22.636 [DEBUG] [Thread-73719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:32:22.656 [DEBUG] [Thread-73719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:32:22.656 [INFO] [Thread-73719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:32:22.659 [DEBUG] [Thread-73719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:32:22.659 [DEBUG] [Thread-73719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:32:22.659 [DEBUG] [Thread-73719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] client lang: <none>
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] server lang: <none>
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] kex follows: False
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] Compression: none
2025-12-12T17:32:22.660 [DEBUG] [Thread-73719] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:32:22.678 [DEBUG] [Thread-73719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:32:22.678 [DEBUG] [Thread-73719] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:32:22.678 [DEBUG] [Thread-73719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:32:22.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:32:22.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:32:22.678 [DEBUG] [Thread-73719] [transport.py] [_log()] userauth is OK
2025-12-12T17:32:22.679 [DEBUG] [Thread-73719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:32:22.679 [DEBUG] [Thread-73719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:32:22.679 [DEBUG] [Thread-73719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:32:22.679 [DEBUG] [Thread-73719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:32:22.709 [INFO] [Thread-73719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:32:22.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:32:23.365 [DEBUG] [Thread-73719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:32:23.365 [DEBUG] [Thread-73719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:32:23.365 [DEBUG] [Thread-73719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:32:23.406 [DEBUG] [Thread-73719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:32:23.406 [DEBUG] [Thread-73719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:32:23.410 [DEBUG] [Thread-73719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:32:23.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:32:23.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:32:23.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:32:23.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:32:23.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:32:23.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:32:23.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:32:23.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:32:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:32:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.647326 -999.00  +18.00  38.20     26   -1.40 1 1 2 1 1   887    0 21.00 59.16 ----- 45.2 38.2 307.4 46.1 20.4 -28.4 20.6 -28.0 21.2 -26.2 21.5 -25.9
2025-12-12T17:32:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:32:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:32:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.647326
2025-12-12T17:32:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:32:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:32:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:32:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:32:23.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:32:23.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:31:57', tmtdew=22.99, humidity=20.62, cloud=0.0, wind=47.43, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:32:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:32:23.436 [DEBUG] [Thread-73719] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:32:23.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:32:23.531 [DEBUG] [Thread-73722] [transport.py] [_log()] starting thread (client mode): 0xf81c1ed0
2025-12-12T17:32:23.531 [DEBUG] [Thread-73722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:32:23.545 [DEBUG] [Thread-73722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:32:23.545 [INFO] [Thread-73722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:32:23.553 [DEBUG] [Thread-73722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:32:23.553 [DEBUG] [Thread-73722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:32:23.553 [DEBUG] [Thread-73722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:32:23.553 [DEBUG] [Thread-73722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:23.553 [DEBUG] [Thread-73722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:23.553 [DEBUG] [Thread-73722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] client lang: <none>
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] server lang: <none>
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] kex follows: False
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:32:23.554 [DEBUG] [Thread-73722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:32:23.555 [DEBUG] [Thread-73722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:32:23.555 [DEBUG] [Thread-73722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:32:23.555 [DEBUG] [Thread-73722] [transport.py] [_log()] Compression: none
2025-12-12T17:32:23.555 [DEBUG] [Thread-73722] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:32:23.610 [DEBUG] [Thread-73722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:32:23.611 [DEBUG] [Thread-73722] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:32:23.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:32:23.611 [DEBUG] [Thread-73722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:32:23.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:32:23.667 [DEBUG] [Thread-73722] [transport.py] [_log()] userauth is OK
2025-12-12T17:32:23.668 [DEBUG] [Thread-73722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:32:23.668 [DEBUG] [Thread-73722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:32:23.668 [DEBUG] [Thread-73722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:32:23.668 [DEBUG] [Thread-73722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:32:23.686 [INFO] [Thread-73722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:32:23.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:32:23.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:32:24.524 [DEBUG] [Thread-73722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:32:24.525 [DEBUG] [Thread-73722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:32:24.574 [DEBUG] [Thread-73722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:32:24.574 [DEBUG] [Thread-73722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:32:24.583 [DEBUG] [Thread-73722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:32:24.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:32:24.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:32:24.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:32:24.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:32:24.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:32:24.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:32:24.617 [DEBUG] [Thread-73722] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:32:35.434 [DEBUG] [Thread-73724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:50.487 [DEBUG] [Thread-73725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:32:54.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:32:54.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:32:55.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 32, 29), 22.84, 20.8, 0.0, 47.11, 18.19, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:32:55.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:32:29
2025-12-12T17:32:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:32:55.607 [DEBUG] [Thread-73726] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-12T17:32:55.607 [DEBUG] [Thread-73726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:32:55.628 [DEBUG] [Thread-73726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:32:55.628 [INFO] [Thread-73726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] client lang: <none>
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] server lang: <none>
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] kex follows: False
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] Compression: none
2025-12-12T17:32:55.631 [DEBUG] [Thread-73726] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:32:55.649 [DEBUG] [Thread-73726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:32:55.649 [DEBUG] [Thread-73726] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:32:55.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:32:55.650 [DEBUG] [Thread-73726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:32:55.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:32:55.652 [DEBUG] [Thread-73726] [transport.py] [_log()] userauth is OK
2025-12-12T17:32:55.652 [DEBUG] [Thread-73726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:32:55.652 [DEBUG] [Thread-73726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:32:55.652 [DEBUG] [Thread-73726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:32:55.653 [DEBUG] [Thread-73726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:32:55.677 [INFO] [Thread-73726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:32:55.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:32:56.330 [DEBUG] [Thread-73726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:32:56.330 [DEBUG] [Thread-73726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:32:56.330 [DEBUG] [Thread-73726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:32:56.371 [DEBUG] [Thread-73726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:32:56.371 [DEBUG] [Thread-73726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:32:56.374 [DEBUG] [Thread-73726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:32:56.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:32:56.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:32:56.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:32:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:32:56.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:32:56.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:32:56.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:32:56.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:32:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:32:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.647673 -999.00  +17.90  43.68     26   -1.40 1 1 2 1 1   887    0 20.63 58.60 ----- 44.2 43.7 310.2 51.7 20.4 -28.2 20.5 -27.8 21.2 -27.2 21.4 -25.8
2025-12-12T17:32:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:32:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:32:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.647673
2025-12-12T17:32:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:32:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:32:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:32:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:32:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:32:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:32:29', tmtdew=22.84, humidity=20.8, cloud=0.0, wind=47.11, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:32:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:32:56.393 [DEBUG] [Thread-73726] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:32:56.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:32:56.489 [DEBUG] [Thread-73729] [transport.py] [_log()] starting thread (client mode): 0xf813f580
2025-12-12T17:32:56.489 [DEBUG] [Thread-73729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:32:56.504 [DEBUG] [Thread-73729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:32:56.505 [INFO] [Thread-73729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:32:56.512 [DEBUG] [Thread-73729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:32:56.512 [DEBUG] [Thread-73729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:32:56.512 [DEBUG] [Thread-73729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:32:56.512 [DEBUG] [Thread-73729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:56.512 [DEBUG] [Thread-73729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] client lang: <none>
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] server lang: <none>
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] kex follows: False
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] Compression: none
2025-12-12T17:32:56.513 [DEBUG] [Thread-73729] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:32:56.571 [DEBUG] [Thread-73729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:32:56.571 [DEBUG] [Thread-73729] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:32:56.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:32:56.572 [DEBUG] [Thread-73729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:32:56.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:32:56.627 [DEBUG] [Thread-73729] [transport.py] [_log()] userauth is OK
2025-12-12T17:32:56.627 [DEBUG] [Thread-73729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:32:56.628 [DEBUG] [Thread-73729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:32:56.628 [DEBUG] [Thread-73729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:32:56.628 [DEBUG] [Thread-73729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:32:56.647 [INFO] [Thread-73729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:32:56.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:32:56.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:32:56.866 [DEBUG] [Thread-73731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:32:57.518 [DEBUG] [Thread-73729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:32:57.519 [DEBUG] [Thread-73729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:32:57.567 [DEBUG] [Thread-73729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:32:57.567 [DEBUG] [Thread-73729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:32:57.576 [DEBUG] [Thread-73729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:32:57.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:32:57.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:32:57.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:32:57.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:32:57.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:32:57.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:32:57.610 [DEBUG] [Thread-73729] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:33:05.517 [DEBUG] [Thread-73732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:33:18.844 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:33:18.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:33:20.558 [DEBUG] [Thread-73733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:33:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:33:27.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:33:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:33:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 33, 1), 22.8, 20.82, 0.0, 52.19, 18.05, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:33:28.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:33:01
2025-12-12T17:33:28.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:33:28.580 [DEBUG] [Thread-73734] [transport.py] [_log()] starting thread (client mode): 0xf81e7e50
2025-12-12T17:33:28.580 [DEBUG] [Thread-73734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:33:28.601 [DEBUG] [Thread-73734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:33:28.601 [INFO] [Thread-73734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:33:28.605 [DEBUG] [Thread-73734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:33:28.610 [DEBUG] [Thread-73734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:33:28.610 [DEBUG] [Thread-73734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] client lang: <none>
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] server lang: <none>
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] kex follows: False
2025-12-12T17:33:28.611 [DEBUG] [Thread-73734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:33:28.612 [DEBUG] [Thread-73734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:33:28.612 [DEBUG] [Thread-73734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:33:28.612 [DEBUG] [Thread-73734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:33:28.612 [DEBUG] [Thread-73734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:33:28.612 [DEBUG] [Thread-73734] [transport.py] [_log()] Compression: none
2025-12-12T17:33:28.612 [DEBUG] [Thread-73734] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:33:28.630 [DEBUG] [Thread-73734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:33:28.631 [DEBUG] [Thread-73734] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:33:28.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:33:28.632 [DEBUG] [Thread-73734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:33:28.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:33:28.634 [DEBUG] [Thread-73734] [transport.py] [_log()] userauth is OK
2025-12-12T17:33:28.634 [DEBUG] [Thread-73734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:33:28.634 [DEBUG] [Thread-73734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:33:28.634 [DEBUG] [Thread-73734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:33:28.634 [DEBUG] [Thread-73734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:33:28.657 [INFO] [Thread-73734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:33:28.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:33:29.296 [DEBUG] [Thread-73734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:33:29.296 [DEBUG] [Thread-73734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:33:29.297 [DEBUG] [Thread-73734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:33:29.337 [DEBUG] [Thread-73734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:33:29.337 [DEBUG] [Thread-73734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:33:29.340 [DEBUG] [Thread-73734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:33:29.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:33:29.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:33:29.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:33:29.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:33:29.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:33:29.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:33:29.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:33:29.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.648021 -999.00  +18.10  40.48     26   -1.40 1 1 2 1 1   887    0 20.37 54.84 ----- 41.4 40.5 307.0 47.5 20.4 -27.9 20.6 -27.4 21.1 -25.4 21.4 -25.7
2025-12-12T17:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.648021
2025-12-12T17:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:33:29.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:33:29.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:33:29.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:33:29.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:33:29.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:33:01', tmtdew=22.8, humidity=20.82, cloud=0.0, wind=52.19, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:33:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:33:29.365 [DEBUG] [Thread-73734] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:33:29.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:33:29.458 [DEBUG] [Thread-73737] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-12T17:33:29.458 [DEBUG] [Thread-73737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:33:29.473 [DEBUG] [Thread-73737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:33:29.473 [INFO] [Thread-73737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:33:29.482 [DEBUG] [Thread-73737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:33:29.482 [DEBUG] [Thread-73737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:33:29.482 [DEBUG] [Thread-73737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:33:29.482 [DEBUG] [Thread-73737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:33:29.482 [DEBUG] [Thread-73737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] client lang: <none>
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] server lang: <none>
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] kex follows: False
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] Compression: none
2025-12-12T17:33:29.483 [DEBUG] [Thread-73737] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:33:29.539 [DEBUG] [Thread-73737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:33:29.539 [DEBUG] [Thread-73737] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:33:29.540 [DEBUG] [Thread-73737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:33:29.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:33:29.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:33:29.596 [DEBUG] [Thread-73737] [transport.py] [_log()] userauth is OK
2025-12-12T17:33:29.596 [DEBUG] [Thread-73737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:33:29.596 [DEBUG] [Thread-73737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:33:29.596 [DEBUG] [Thread-73737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:33:29.596 [DEBUG] [Thread-73737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:33:29.615 [INFO] [Thread-73737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:33:29.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:33:29.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:33:30.480 [DEBUG] [Thread-73737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:33:30.480 [DEBUG] [Thread-73737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:33:30.528 [DEBUG] [Thread-73737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:33:30.528 [DEBUG] [Thread-73737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:33:30.537 [DEBUG] [Thread-73737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:33:30.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:33:30.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:33:30.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:33:30.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:33:30.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:33:30.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:33:30.571 [DEBUG] [Thread-73737] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:33:35.584 [DEBUG] [Thread-73739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:33:50.617 [DEBUG] [Thread-73740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:33:56.914 [DEBUG] [Thread-73741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:00.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:34:00.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:34:00.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:34:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 33, 33), 23.52, 19.87, 0.0, 49.4, 18.88, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:34:01.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:33:33
2025-12-12T17:34:01.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:34:01.583 [DEBUG] [Thread-73742] [transport.py] [_log()] starting thread (client mode): 0xf5701090
2025-12-12T17:34:01.583 [DEBUG] [Thread-73742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:34:01.603 [DEBUG] [Thread-73742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:34:01.603 [INFO] [Thread-73742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:34:01.606 [DEBUG] [Thread-73742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:34:01.606 [DEBUG] [Thread-73742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:34:01.606 [DEBUG] [Thread-73742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:34:01.606 [DEBUG] [Thread-73742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:01.606 [DEBUG] [Thread-73742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] client lang: <none>
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] server lang: <none>
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] kex follows: False
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] Compression: none
2025-12-12T17:34:01.607 [DEBUG] [Thread-73742] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:34:01.624 [DEBUG] [Thread-73742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:34:01.624 [DEBUG] [Thread-73742] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:34:01.624 [DEBUG] [Thread-73742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:34:01.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:34:01.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:34:01.625 [DEBUG] [Thread-73742] [transport.py] [_log()] userauth is OK
2025-12-12T17:34:01.625 [DEBUG] [Thread-73742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:34:01.625 [DEBUG] [Thread-73742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:34:01.625 [DEBUG] [Thread-73742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:34:01.625 [DEBUG] [Thread-73742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:34:01.643 [INFO] [Thread-73742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:34:01.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:34:02.291 [DEBUG] [Thread-73742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:34:02.291 [DEBUG] [Thread-73742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:34:02.291 [DEBUG] [Thread-73742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:34:02.332 [DEBUG] [Thread-73742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:34:02.332 [DEBUG] [Thread-73742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:34:02.334 [DEBUG] [Thread-73742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:34:02.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:34:02.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:34:02.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:34:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:34:02.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:34:02.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:34:02.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.648368 -999.00  +18.00  38.01     26   -1.40 1 1 2 1 1   887    0 20.29 54.03 ----- 41.3 38.0 313.6 51.3 20.4 -27.6 20.6 -27.3 21.1 -27.9 21.4 -25.3
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.648368
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:34:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:33:33', tmtdew=23.52, humidity=19.87, cloud=0.0, wind=49.4, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:33:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:34:02.353 [DEBUG] [Thread-73742] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:34:02.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:34:02.439 [DEBUG] [Thread-73745] [transport.py] [_log()] starting thread (client mode): 0xf5771810
2025-12-12T17:34:02.439 [DEBUG] [Thread-73745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:34:02.454 [DEBUG] [Thread-73745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:34:02.454 [INFO] [Thread-73745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] client lang: <none>
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] server lang: <none>
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] kex follows: False
2025-12-12T17:34:02.464 [DEBUG] [Thread-73745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:34:02.465 [DEBUG] [Thread-73745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:34:02.465 [DEBUG] [Thread-73745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:34:02.465 [DEBUG] [Thread-73745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:34:02.465 [DEBUG] [Thread-73745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:34:02.465 [DEBUG] [Thread-73745] [transport.py] [_log()] Compression: none
2025-12-12T17:34:02.465 [DEBUG] [Thread-73745] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:34:02.524 [DEBUG] [Thread-73745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:34:02.524 [DEBUG] [Thread-73745] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:34:02.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:34:02.524 [DEBUG] [Thread-73745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:34:02.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:34:02.580 [DEBUG] [Thread-73745] [transport.py] [_log()] userauth is OK
2025-12-12T17:34:02.580 [DEBUG] [Thread-73745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:34:02.580 [DEBUG] [Thread-73745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:34:02.580 [DEBUG] [Thread-73745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:34:02.580 [DEBUG] [Thread-73745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:34:02.594 [INFO] [Thread-73745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:34:02.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:34:02.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:34:03.451 [DEBUG] [Thread-73745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:34:03.451 [DEBUG] [Thread-73745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:34:03.498 [DEBUG] [Thread-73745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:34:03.499 [DEBUG] [Thread-73745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:34:03.507 [DEBUG] [Thread-73745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:34:03.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:34:03.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:34:03.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:34:03.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:34:03.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:34:03.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:34:03.538 [DEBUG] [Thread-73745] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:34:05.644 [DEBUG] [Thread-73747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:18.985 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:18.986 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:20.689 [DEBUG] [Thread-73748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:34:33.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:34:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:34:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 34, 5), 22.84, 20.85, 0.0, 37.94, 18.24, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:34:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:34:05
2025-12-12T17:34:34.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:34:34.521 [DEBUG] [Thread-73749] [transport.py] [_log()] starting thread (client mode): 0xf81c0490
2025-12-12T17:34:34.521 [DEBUG] [Thread-73749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:34:34.540 [DEBUG] [Thread-73749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:34:34.540 [INFO] [Thread-73749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] client lang: <none>
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] server lang: <none>
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] kex follows: False
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] Compression: none
2025-12-12T17:34:34.544 [DEBUG] [Thread-73749] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:34:34.560 [DEBUG] [Thread-73749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:34:34.561 [DEBUG] [Thread-73749] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:34:34.561 [DEBUG] [Thread-73749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:34:34.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:34:34.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:34:34.563 [DEBUG] [Thread-73749] [transport.py] [_log()] userauth is OK
2025-12-12T17:34:34.563 [DEBUG] [Thread-73749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:34:34.564 [DEBUG] [Thread-73749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:34:34.564 [DEBUG] [Thread-73749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:34:34.564 [DEBUG] [Thread-73749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:34:34.588 [INFO] [Thread-73749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:34:34.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:34:35.238 [DEBUG] [Thread-73749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:34:35.238 [DEBUG] [Thread-73749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:34:35.239 [DEBUG] [Thread-73749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:34:35.280 [DEBUG] [Thread-73749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:34:35.280 [DEBUG] [Thread-73749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:34:35.282 [DEBUG] [Thread-73749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:34:35.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:34:35.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:34:35.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:34:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:34:35.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:34:35.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:34:35.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:34:35.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:34:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:34:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.648715 -999.00  +17.90  25.77     26   -1.50 1 1 1 1 1   887    0 21.03 53.31 ----- 39.5 25.8 308.2 49.1 20.4 -27.3 20.6 -27.2 21.3 -25.2 21.4 -26.1
2025-12-12T17:34:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:34:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:34:35.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.648715
2025-12-12T17:34:35.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:34:35.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:34:35.307 [DEBUG] [Thread-73749] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:34:35.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:34:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:34:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:34:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:34:05', tmtdew=22.84, humidity=20.85, cloud=0.0, wind=37.94, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:34:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:34:35.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:34:35.404 [DEBUG] [Thread-73752] [transport.py] [_log()] starting thread (client mode): 0xf57bdc30
2025-12-12T17:34:35.405 [DEBUG] [Thread-73752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:34:35.420 [DEBUG] [Thread-73752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:34:35.420 [INFO] [Thread-73752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:35.427 [DEBUG] [Thread-73752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] client lang: <none>
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] server lang: <none>
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] kex follows: False
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] Compression: none
2025-12-12T17:34:35.428 [DEBUG] [Thread-73752] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:34:35.484 [DEBUG] [Thread-73752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:34:35.485 [DEBUG] [Thread-73752] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:34:35.485 [DEBUG] [Thread-73752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:34:35.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:34:35.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:34:35.540 [DEBUG] [Thread-73752] [transport.py] [_log()] userauth is OK
2025-12-12T17:34:35.541 [DEBUG] [Thread-73752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:34:35.541 [DEBUG] [Thread-73752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:34:35.541 [DEBUG] [Thread-73752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:34:35.541 [DEBUG] [Thread-73752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:34:35.554 [INFO] [Thread-73752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:34:35.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:34:35.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:34:35.722 [DEBUG] [Thread-73754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:36.393 [DEBUG] [Thread-73752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:34:36.394 [DEBUG] [Thread-73752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:34:36.441 [DEBUG] [Thread-73752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:34:36.441 [DEBUG] [Thread-73752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:34:36.450 [DEBUG] [Thread-73752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:34:36.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:34:36.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:34:36.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:34:36.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:34:36.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:34:36.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:34:36.484 [DEBUG] [Thread-73752] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:34:50.769 [DEBUG] [Thread-73755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:34:56.964 [DEBUG] [Thread-73756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:05.798 [DEBUG] [Thread-73757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:06.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:35:06.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:35:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:35:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 34, 37), 22.71, 20.85, 0.0, 33.24, 18.14, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:35:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:34:37
2025-12-12T17:35:07.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:35:07.463 [DEBUG] [Thread-73758] [transport.py] [_log()] starting thread (client mode): 0xf574fb80
2025-12-12T17:35:07.463 [DEBUG] [Thread-73758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:35:07.484 [DEBUG] [Thread-73758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:35:07.484 [INFO] [Thread-73758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] client lang: <none>
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] server lang: <none>
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] kex follows: False
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] Compression: none
2025-12-12T17:35:07.486 [DEBUG] [Thread-73758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:35:07.499 [DEBUG] [Thread-73758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:35:07.499 [DEBUG] [Thread-73758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:35:07.500 [DEBUG] [Thread-73758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:35:07.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:35:07.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:35:07.501 [DEBUG] [Thread-73758] [transport.py] [_log()] userauth is OK
2025-12-12T17:35:07.501 [DEBUG] [Thread-73758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:35:07.501 [DEBUG] [Thread-73758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:35:07.501 [DEBUG] [Thread-73758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:35:07.501 [DEBUG] [Thread-73758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:35:07.521 [INFO] [Thread-73758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:35:07.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:35:08.387 [DEBUG] [Thread-73758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:35:08.387 [DEBUG] [Thread-73758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:35:08.387 [DEBUG] [Thread-73758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:35:08.428 [DEBUG] [Thread-73758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:35:08.428 [DEBUG] [Thread-73758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:35:08.431 [DEBUG] [Thread-73758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:35:08.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:35:08.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:35:08.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:35:08.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:35:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:35:08.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:35:08.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:35:08.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:35:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:35:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.649062 -999.00  +18.00  41.44     26   -1.50 1 1 2 1 1   887    0 20.49 57.14 ----- 53.0 41.4 309.6 50.3 20.5 -28.2 20.6 -28.0 21.3 -26.3 21.5 -25.3
2025-12-12T17:35:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:35:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:35:08.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.649062
2025-12-12T17:35:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:35:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:35:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:35:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:35:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:35:08.458 [DEBUG] [Thread-73758] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:35:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:34:37', tmtdew=22.71, humidity=20.85, cloud=0.0, wind=33.24, temperature=18.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:34:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:35:08.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:35:08.555 [DEBUG] [Thread-73761] [transport.py] [_log()] starting thread (client mode): 0xf81c2a70
2025-12-12T17:35:08.555 [DEBUG] [Thread-73761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:35:08.570 [DEBUG] [Thread-73761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:35:08.570 [INFO] [Thread-73761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:08.578 [DEBUG] [Thread-73761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] client lang: <none>
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] server lang: <none>
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] kex follows: False
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:35:08.579 [DEBUG] [Thread-73761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:35:08.580 [DEBUG] [Thread-73761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:35:08.580 [DEBUG] [Thread-73761] [transport.py] [_log()] Compression: none
2025-12-12T17:35:08.580 [DEBUG] [Thread-73761] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:35:08.638 [DEBUG] [Thread-73761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:35:08.638 [DEBUG] [Thread-73761] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:35:08.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:35:08.639 [DEBUG] [Thread-73761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:35:08.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:35:08.693 [DEBUG] [Thread-73761] [transport.py] [_log()] userauth is OK
2025-12-12T17:35:08.694 [DEBUG] [Thread-73761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:35:08.694 [DEBUG] [Thread-73761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:35:08.694 [DEBUG] [Thread-73761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:35:08.694 [DEBUG] [Thread-73761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:35:08.713 [INFO] [Thread-73761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:35:08.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:35:08.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:35:09.579 [DEBUG] [Thread-73761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:35:09.579 [DEBUG] [Thread-73761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:35:09.627 [DEBUG] [Thread-73761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:35:09.627 [DEBUG] [Thread-73761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:35:09.636 [DEBUG] [Thread-73761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:35:09.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:35:09.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:35:09.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:35:09.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:35:09.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:35:09.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:35:09.670 [DEBUG] [Thread-73761] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:35:19.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:19.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:20.821 [DEBUG] [Thread-73763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:35.855 [DEBUG] [Thread-73764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:39.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:35:39.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:35:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:35:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 35, 9), 23.06, 20.38, 0.0, 39.04, 18.44, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:35:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:35:09
2025-12-12T17:35:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:35:40.640 [DEBUG] [Thread-73765] [transport.py] [_log()] starting thread (client mode): 0xf5788670
2025-12-12T17:35:40.640 [DEBUG] [Thread-73765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:35:40.661 [DEBUG] [Thread-73765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:35:40.662 [INFO] [Thread-73765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] client lang: <none>
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] server lang: <none>
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] kex follows: False
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:35:40.665 [DEBUG] [Thread-73765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:35:40.666 [DEBUG] [Thread-73765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:35:40.666 [DEBUG] [Thread-73765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:35:40.666 [DEBUG] [Thread-73765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:35:40.666 [DEBUG] [Thread-73765] [transport.py] [_log()] Compression: none
2025-12-12T17:35:40.666 [DEBUG] [Thread-73765] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:35:40.682 [DEBUG] [Thread-73765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:35:40.682 [DEBUG] [Thread-73765] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:35:40.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:35:40.683 [DEBUG] [Thread-73765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:35:40.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:35:40.685 [DEBUG] [Thread-73765] [transport.py] [_log()] userauth is OK
2025-12-12T17:35:40.685 [DEBUG] [Thread-73765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:35:40.685 [DEBUG] [Thread-73765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:35:40.685 [DEBUG] [Thread-73765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:35:40.685 [DEBUG] [Thread-73765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:35:40.709 [INFO] [Thread-73765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:35:40.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:35:41.367 [DEBUG] [Thread-73765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:35:41.367 [DEBUG] [Thread-73765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:35:41.368 [DEBUG] [Thread-73765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:35:41.408 [DEBUG] [Thread-73765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:35:41.408 [DEBUG] [Thread-73765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:35:41.411 [DEBUG] [Thread-73765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:35:41.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:35:41.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:35:41.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:35:41.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:35:41.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:35:41.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:35:41.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:35:41.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:35:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:35:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.649409 -999.00  +17.90  58.02     26   -1.40 1 1 2 1 1   887    0 21.09 55.19 ----- 55.5 58.0 311.4 63.2 20.5 -28.8 20.6 -28.6 21.4 -25.5 21.6 -26.2
2025-12-12T17:35:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:35:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:35:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.649409
2025-12-12T17:35:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:35:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:35:41.437 [DEBUG] [Thread-73765] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:35:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:35:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:35:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:35:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:35:09', tmtdew=23.06, humidity=20.38, cloud=0.0, wind=39.04, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:35:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:35:41.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:35:41.534 [DEBUG] [Thread-73768] [transport.py] [_log()] starting thread (client mode): 0xf5773910
2025-12-12T17:35:41.534 [DEBUG] [Thread-73768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:35:41.549 [DEBUG] [Thread-73768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:35:41.549 [INFO] [Thread-73768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] client lang: <none>
2025-12-12T17:35:41.557 [DEBUG] [Thread-73768] [transport.py] [_log()] server lang: <none>
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] kex follows: False
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] Compression: none
2025-12-12T17:35:41.558 [DEBUG] [Thread-73768] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:35:41.614 [DEBUG] [Thread-73768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:35:41.614 [DEBUG] [Thread-73768] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:35:41.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:35:41.615 [DEBUG] [Thread-73768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:35:41.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:35:41.670 [DEBUG] [Thread-73768] [transport.py] [_log()] userauth is OK
2025-12-12T17:35:41.670 [DEBUG] [Thread-73768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:35:41.670 [DEBUG] [Thread-73768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:35:41.670 [DEBUG] [Thread-73768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:35:41.670 [DEBUG] [Thread-73768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:35:41.689 [INFO] [Thread-73768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:35:41.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:35:41.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:35:42.526 [DEBUG] [Thread-73768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:35:42.526 [DEBUG] [Thread-73768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:35:42.573 [DEBUG] [Thread-73768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:35:42.573 [DEBUG] [Thread-73768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:35:42.582 [DEBUG] [Thread-73768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:35:42.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:35:42.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:35:42.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:35:42.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:35:42.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:35:42.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:35:42.616 [DEBUG] [Thread-73768] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:35:50.884 [DEBUG] [Thread-73770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:35:57.010 [DEBUG] [Thread-73771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:05.934 [DEBUG] [Thread-73772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:12.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:36:12.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:36:12.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:36:13.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 35, 41), 23.15, 20.29, 0.0, 36.17, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:36:13.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:35:41
2025-12-12T17:36:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:36:13.617 [DEBUG] [Thread-73773] [transport.py] [_log()] starting thread (client mode): 0xf81e6530
2025-12-12T17:36:13.617 [DEBUG] [Thread-73773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:36:13.638 [DEBUG] [Thread-73773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:36:13.638 [INFO] [Thread-73773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] client lang: <none>
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] server lang: <none>
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] kex follows: False
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:36:13.641 [DEBUG] [Thread-73773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:36:13.642 [DEBUG] [Thread-73773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:36:13.642 [DEBUG] [Thread-73773] [transport.py] [_log()] Compression: none
2025-12-12T17:36:13.642 [DEBUG] [Thread-73773] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:36:13.658 [DEBUG] [Thread-73773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:36:13.659 [DEBUG] [Thread-73773] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:36:13.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:36:13.660 [DEBUG] [Thread-73773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:36:13.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:36:13.662 [DEBUG] [Thread-73773] [transport.py] [_log()] userauth is OK
2025-12-12T17:36:13.662 [DEBUG] [Thread-73773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:36:13.662 [DEBUG] [Thread-73773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:36:13.662 [DEBUG] [Thread-73773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:36:13.662 [DEBUG] [Thread-73773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:36:13.698 [INFO] [Thread-73773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:36:13.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:36:14.351 [DEBUG] [Thread-73773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:36:14.351 [DEBUG] [Thread-73773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:36:14.351 [DEBUG] [Thread-73773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:36:14.393 [DEBUG] [Thread-73773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:36:14.393 [DEBUG] [Thread-73773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:36:14.395 [DEBUG] [Thread-73773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:36:14.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:36:14.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:36:14.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:36:14.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:36:14.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:36:14.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:36:14.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.649757 -999.00  +17.70  39.92     27   -1.30 1 1 2 1 1   887    0 20.33 50.85 ----- 35.0 39.9 303.4 52.1 20.4 -27.4 20.6 -27.0 21.3 -25.0 21.5 -25.9
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.649757
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:36:14.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:35:41', tmtdew=23.15, humidity=20.29, cloud=0.0, wind=36.17, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:35:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:36:14.414 [DEBUG] [Thread-73773] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:36:14.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:36:14.499 [DEBUG] [Thread-73776] [transport.py] [_log()] starting thread (client mode): 0xf5772320
2025-12-12T17:36:14.499 [DEBUG] [Thread-73776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:36:14.514 [DEBUG] [Thread-73776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:36:14.514 [INFO] [Thread-73776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] client lang: <none>
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] server lang: <none>
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] kex follows: False
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] Compression: none
2025-12-12T17:36:14.522 [DEBUG] [Thread-73776] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:36:14.577 [DEBUG] [Thread-73776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:36:14.577 [DEBUG] [Thread-73776] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:36:14.577 [DEBUG] [Thread-73776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:36:14.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:36:14.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:36:14.634 [DEBUG] [Thread-73776] [transport.py] [_log()] userauth is OK
2025-12-12T17:36:14.634 [DEBUG] [Thread-73776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:36:14.634 [DEBUG] [Thread-73776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:36:14.634 [DEBUG] [Thread-73776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:36:14.634 [DEBUG] [Thread-73776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:36:14.648 [INFO] [Thread-73776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:36:14.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:36:14.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:36:15.512 [DEBUG] [Thread-73776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:36:15.512 [DEBUG] [Thread-73776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:36:15.559 [DEBUG] [Thread-73776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:36:15.560 [DEBUG] [Thread-73776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:36:15.568 [DEBUG] [Thread-73776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:36:15.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:36:15.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:36:15.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:36:15.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:36:15.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:36:15.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:36:15.599 [DEBUG] [Thread-73776] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:36:19.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:19.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:20.962 [DEBUG] [Thread-73778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:36.004 [DEBUG] [Thread-73779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:36:45.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:36:45.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:36:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 36, 13), 23.13, 20.32, 0.0, 38.27, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:36:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:36:13
2025-12-12T17:36:46.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:36:46.581 [DEBUG] [Thread-73780] [transport.py] [_log()] starting thread (client mode): 0xf5770c70
2025-12-12T17:36:46.581 [DEBUG] [Thread-73780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:36:46.600 [DEBUG] [Thread-73780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:36:46.600 [INFO] [Thread-73780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] client lang: <none>
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] server lang: <none>
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] kex follows: False
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] Compression: none
2025-12-12T17:36:46.602 [DEBUG] [Thread-73780] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:36:46.610 [DEBUG] [Thread-73780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:36:46.610 [DEBUG] [Thread-73780] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:36:46.610 [DEBUG] [Thread-73780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:36:46.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:36:46.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:36:46.611 [DEBUG] [Thread-73780] [transport.py] [_log()] userauth is OK
2025-12-12T17:36:46.611 [DEBUG] [Thread-73780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:36:46.611 [DEBUG] [Thread-73780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:36:46.611 [DEBUG] [Thread-73780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:36:46.611 [DEBUG] [Thread-73780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:36:46.625 [INFO] [Thread-73780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:36:46.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:36:47.249 [DEBUG] [Thread-73780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:36:47.249 [DEBUG] [Thread-73780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:36:47.249 [DEBUG] [Thread-73780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:36:47.290 [DEBUG] [Thread-73780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:36:47.290 [DEBUG] [Thread-73780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:36:47.292 [DEBUG] [Thread-73780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:36:47.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:36:47.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:36:47.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:36:47.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:36:47.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:36:47.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:36:47.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.650104 -999.00  +17.90  40.20     26   -1.30 1 1 2 1 1   887    0 20.24 48.26 ----- 37.6 40.2 311.6 47.2 20.4 -27.8 20.6 -27.8 21.4 -24.6 21.5 -26.6
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.650104
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:36:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:36:13', tmtdew=23.13, humidity=20.32, cloud=0.0, wind=38.27, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:36:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:36:47.310 [DEBUG] [Thread-73780] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:36:47.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:36:47.397 [DEBUG] [Thread-73783] [transport.py] [_log()] starting thread (client mode): 0xfabc6ef0
2025-12-12T17:36:47.397 [DEBUG] [Thread-73783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:36:47.411 [DEBUG] [Thread-73783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:36:47.411 [INFO] [Thread-73783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] client lang: <none>
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] server lang: <none>
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] kex follows: False
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] Compression: none
2025-12-12T17:36:47.419 [DEBUG] [Thread-73783] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:36:47.477 [DEBUG] [Thread-73783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:36:47.478 [DEBUG] [Thread-73783] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:36:47.478 [DEBUG] [Thread-73783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:36:47.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:36:47.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:36:47.534 [DEBUG] [Thread-73783] [transport.py] [_log()] userauth is OK
2025-12-12T17:36:47.534 [DEBUG] [Thread-73783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:36:47.535 [DEBUG] [Thread-73783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:36:47.535 [DEBUG] [Thread-73783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:36:47.535 [DEBUG] [Thread-73783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:36:47.549 [INFO] [Thread-73783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:36:47.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:36:47.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:36:48.411 [DEBUG] [Thread-73783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:36:48.411 [DEBUG] [Thread-73783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:36:48.459 [DEBUG] [Thread-73783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:36:48.459 [DEBUG] [Thread-73783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:36:48.468 [DEBUG] [Thread-73783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:36:48.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:36:48.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:36:48.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:36:48.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:36:48.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:36:48.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:36:48.502 [DEBUG] [Thread-73783] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:36:51.031 [DEBUG] [Thread-73785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:36:57.061 [DEBUG] [Thread-73786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:06.079 [DEBUG] [Thread-73787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:37:18.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:37:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:37:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 36, 45), 22.75, 20.83, 0.0, 42.45, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:37:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:36:45
2025-12-12T17:37:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:37:19.411 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:19.411 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:19.534 [DEBUG] [Thread-73788] [transport.py] [_log()] starting thread (client mode): 0xf8157dc0
2025-12-12T17:37:19.534 [DEBUG] [Thread-73788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:37:19.553 [DEBUG] [Thread-73788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:37:19.553 [INFO] [Thread-73788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] client lang: <none>
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] server lang: <none>
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] kex follows: False
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] Compression: none
2025-12-12T17:37:19.557 [DEBUG] [Thread-73788] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:37:19.573 [DEBUG] [Thread-73788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:37:19.573 [DEBUG] [Thread-73788] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:37:19.573 [DEBUG] [Thread-73788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:37:19.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:37:19.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:37:19.574 [DEBUG] [Thread-73788] [transport.py] [_log()] userauth is OK
2025-12-12T17:37:19.574 [DEBUG] [Thread-73788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:37:19.574 [DEBUG] [Thread-73788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:37:19.574 [DEBUG] [Thread-73788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:37:19.574 [DEBUG] [Thread-73788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:37:19.583 [INFO] [Thread-73788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:37:19.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:37:20.197 [DEBUG] [Thread-73788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:37:20.197 [DEBUG] [Thread-73788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:37:20.197 [DEBUG] [Thread-73788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:37:20.238 [DEBUG] [Thread-73788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:37:20.238 [DEBUG] [Thread-73788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:37:20.241 [DEBUG] [Thread-73788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:37:20.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:37:20.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:37:20.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:37:20.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:37:20.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:37:20.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:37:20.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:37:20.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:37:20.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:37:20.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.650798 -999.00  +17.40  38.17     27   -1.60 1 1 2 1 1   887    0 20.69 48.90 ----- 40.2 38.2 300.1 52.3 20.3 -29.1 20.4 -28.6 21.0 -25.9 21.4 -26.8
2025-12-12T17:37:20.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:37:20.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:37:20.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.650798
2025-12-12T17:37:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:37:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:37:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:37:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:37:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:37:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:36:45', tmtdew=22.75, humidity=20.83, cloud=0.0, wind=42.45, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:37:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:37:20.264 [DEBUG] [Thread-73788] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:37:20.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:37:20.365 [DEBUG] [Thread-73791] [transport.py] [_log()] starting thread (client mode): 0xf8155300
2025-12-12T17:37:20.366 [DEBUG] [Thread-73791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:37:20.380 [DEBUG] [Thread-73791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:37:20.380 [INFO] [Thread-73791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] client lang: <none>
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] server lang: <none>
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] kex follows: False
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:37:20.388 [DEBUG] [Thread-73791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:37:20.389 [DEBUG] [Thread-73791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:37:20.389 [DEBUG] [Thread-73791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:37:20.389 [DEBUG] [Thread-73791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:37:20.389 [DEBUG] [Thread-73791] [transport.py] [_log()] Compression: none
2025-12-12T17:37:20.389 [DEBUG] [Thread-73791] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:37:20.449 [DEBUG] [Thread-73791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:37:20.449 [DEBUG] [Thread-73791] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:37:20.450 [DEBUG] [Thread-73791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:37:20.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:37:20.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:37:20.507 [DEBUG] [Thread-73791] [transport.py] [_log()] userauth is OK
2025-12-12T17:37:20.508 [DEBUG] [Thread-73791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:37:20.508 [DEBUG] [Thread-73791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:37:20.508 [DEBUG] [Thread-73791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:37:20.508 [DEBUG] [Thread-73791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:37:20.532 [INFO] [Thread-73791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:37:20.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:37:20.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:37:21.107 [DEBUG] [Thread-73793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:21.370 [DEBUG] [Thread-73791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:37:21.370 [DEBUG] [Thread-73791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:37:21.419 [DEBUG] [Thread-73791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:37:21.419 [DEBUG] [Thread-73791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:37:21.432 [DEBUG] [Thread-73791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:37:21.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:37:21.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:37:21.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:37:21.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:37:21.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:37:21.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:37:21.467 [DEBUG] [Thread-73791] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:37:36.166 [DEBUG] [Thread-73794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:51.194 [DEBUG] [Thread-73795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:37:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:37:51.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:37:51.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:37:52.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 37, 17), 22.75, 20.85, 0.0, 40.95, 18.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:37:52.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:37:17
2025-12-12T17:37:52.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:37:52.514 [DEBUG] [Thread-73796] [transport.py] [_log()] starting thread (client mode): 0xf81560b0
2025-12-12T17:37:52.514 [DEBUG] [Thread-73796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:37:52.533 [DEBUG] [Thread-73796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:37:52.534 [INFO] [Thread-73796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] client lang: <none>
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] server lang: <none>
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] kex follows: False
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] Compression: none
2025-12-12T17:37:52.537 [DEBUG] [Thread-73796] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:37:52.555 [DEBUG] [Thread-73796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:37:52.555 [DEBUG] [Thread-73796] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:37:52.555 [DEBUG] [Thread-73796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:37:52.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:37:52.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:37:52.556 [DEBUG] [Thread-73796] [transport.py] [_log()] userauth is OK
2025-12-12T17:37:52.556 [DEBUG] [Thread-73796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:37:52.556 [DEBUG] [Thread-73796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:37:52.556 [DEBUG] [Thread-73796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:37:52.556 [DEBUG] [Thread-73796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:37:52.583 [INFO] [Thread-73796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:37:52.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:37:53.239 [DEBUG] [Thread-73796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:37:53.240 [DEBUG] [Thread-73796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:37:53.240 [DEBUG] [Thread-73796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:37:53.281 [DEBUG] [Thread-73796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:37:53.281 [DEBUG] [Thread-73796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:37:53.283 [DEBUG] [Thread-73796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:37:53.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:37:53.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:37:53.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:37:53.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:37:53.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:37:53.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:37:53.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:37:53.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:37:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:37:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.651145 -999.00  +17.10  48.95     27   -1.80 1 1 2 1 1   887    0 20.30 45.66 ----- 49.4 49.0 300.0 64.8 20.1 -28.8 20.3 -28.5 21.0 -28.8 21.2 -26.7
2025-12-12T17:37:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:37:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:37:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.651145
2025-12-12T17:37:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:37:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:37:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:37:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:37:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:37:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:37:17', tmtdew=22.75, humidity=20.85, cloud=0.0, wind=40.95, temperature=18.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:37:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:37:53.301 [DEBUG] [Thread-73796] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:37:53.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:37:53.387 [DEBUG] [Thread-73799] [transport.py] [_log()] starting thread (client mode): 0xf81545b0
2025-12-12T17:37:53.387 [DEBUG] [Thread-73799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:37:53.402 [DEBUG] [Thread-73799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:37:53.402 [INFO] [Thread-73799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] client lang: <none>
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] server lang: <none>
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] kex follows: False
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] Compression: none
2025-12-12T17:37:53.409 [DEBUG] [Thread-73799] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:37:53.466 [DEBUG] [Thread-73799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:37:53.466 [DEBUG] [Thread-73799] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:37:53.466 [DEBUG] [Thread-73799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:37:53.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:37:53.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:37:53.523 [DEBUG] [Thread-73799] [transport.py] [_log()] userauth is OK
2025-12-12T17:37:53.524 [DEBUG] [Thread-73799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:37:53.524 [DEBUG] [Thread-73799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:37:53.524 [DEBUG] [Thread-73799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:37:53.524 [DEBUG] [Thread-73799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:37:53.537 [INFO] [Thread-73799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:37:53.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:37:53.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:37:54.375 [DEBUG] [Thread-73799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:37:54.375 [DEBUG] [Thread-73799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:37:54.422 [DEBUG] [Thread-73799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:37:54.422 [DEBUG] [Thread-73799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:37:54.430 [DEBUG] [Thread-73799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:37:54.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:37:54.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:37:54.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:37:54.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:37:54.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:37:54.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:37:54.464 [DEBUG] [Thread-73799] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:37:57.104 [DEBUG] [Thread-73801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:06.220 [DEBUG] [Thread-73802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:19.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:19.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:21.265 [DEBUG] [Thread-73803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:24.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:38:24.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:38:24.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:38:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 38, 22), 22.81, 20.88, 0.0, 42.79, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:38:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:38:22
2025-12-12T17:38:25.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:38:25.458 [DEBUG] [Thread-73804] [transport.py] [_log()] starting thread (client mode): 0xf8157010
2025-12-12T17:38:25.458 [DEBUG] [Thread-73804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:38:25.480 [DEBUG] [Thread-73804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:38:25.480 [INFO] [Thread-73804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] client lang: <none>
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] server lang: <none>
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] kex follows: False
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] Compression: none
2025-12-12T17:38:25.483 [DEBUG] [Thread-73804] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:38:25.500 [DEBUG] [Thread-73804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:38:25.501 [DEBUG] [Thread-73804] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:38:25.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:38:25.501 [DEBUG] [Thread-73804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:38:25.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:38:25.503 [DEBUG] [Thread-73804] [transport.py] [_log()] userauth is OK
2025-12-12T17:38:25.503 [DEBUG] [Thread-73804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:38:25.503 [DEBUG] [Thread-73804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:38:25.503 [DEBUG] [Thread-73804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:38:25.503 [DEBUG] [Thread-73804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:38:25.520 [INFO] [Thread-73804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:38:25.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:38:26.163 [DEBUG] [Thread-73804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:38:26.164 [DEBUG] [Thread-73804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:38:26.164 [DEBUG] [Thread-73804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:38:26.205 [DEBUG] [Thread-73804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:38:26.205 [DEBUG] [Thread-73804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:38:26.208 [DEBUG] [Thread-73804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:38:26.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:38:26.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:38:26.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:38:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:38:26.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:38:26.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:38:26.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:38:26.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:38:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:38:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.651493 -999.00  +17.30  40.49     27   -1.70 1 1 2 1 1   887    0 20.50 47.57 ----- 41.0 40.5 302.2 52.8 20.1 -28.2 20.3 -27.8 20.8 -29.4 21.1 -26.5
2025-12-12T17:38:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:38:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:38:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.651493
2025-12-12T17:38:26.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:38:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:38:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:38:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:38:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:38:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:38:22', tmtdew=22.81, humidity=20.88, cloud=0.0, wind=42.79, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:38:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:38:26.235 [DEBUG] [Thread-73804] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:38:26.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:38:26.331 [DEBUG] [Thread-73807] [transport.py] [_log()] starting thread (client mode): 0xfabc6470
2025-12-12T17:38:26.331 [DEBUG] [Thread-73807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:38:26.346 [DEBUG] [Thread-73807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:38:26.346 [INFO] [Thread-73807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] client lang: <none>
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] server lang: <none>
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] kex follows: False
2025-12-12T17:38:26.354 [DEBUG] [Thread-73807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:38:26.355 [DEBUG] [Thread-73807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:38:26.355 [DEBUG] [Thread-73807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:38:26.355 [DEBUG] [Thread-73807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:38:26.355 [DEBUG] [Thread-73807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:38:26.355 [DEBUG] [Thread-73807] [transport.py] [_log()] Compression: none
2025-12-12T17:38:26.355 [DEBUG] [Thread-73807] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:38:26.412 [DEBUG] [Thread-73807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:38:26.412 [DEBUG] [Thread-73807] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:38:26.413 [DEBUG] [Thread-73807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:38:26.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:38:26.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:38:26.468 [DEBUG] [Thread-73807] [transport.py] [_log()] userauth is OK
2025-12-12T17:38:26.468 [DEBUG] [Thread-73807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:38:26.469 [DEBUG] [Thread-73807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:38:26.469 [DEBUG] [Thread-73807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:38:26.469 [DEBUG] [Thread-73807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:38:26.488 [INFO] [Thread-73807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:38:26.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:38:26.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:38:27.333 [DEBUG] [Thread-73807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:38:27.333 [DEBUG] [Thread-73807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:38:27.381 [DEBUG] [Thread-73807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:38:27.381 [DEBUG] [Thread-73807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:38:27.390 [DEBUG] [Thread-73807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:38:27.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:38:27.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:38:27.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:38:27.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:38:27.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:38:27.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:38:27.424 [DEBUG] [Thread-73807] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:38:36.296 [DEBUG] [Thread-73809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:51.349 [DEBUG] [Thread-73810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:57.152 [DEBUG] [Thread-73811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:38:57.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:38:57.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:38:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:38:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 38, 54), 22.88, 20.72, 0.0, 47.27, 18.04, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:38:58.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:38:54
2025-12-12T17:38:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:38:58.383 [DEBUG] [Thread-73812] [transport.py] [_log()] starting thread (client mode): 0xf8156e30
2025-12-12T17:38:58.383 [DEBUG] [Thread-73812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:38:58.407 [DEBUG] [Thread-73812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:38:58.407 [INFO] [Thread-73812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:58.410 [DEBUG] [Thread-73812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] client lang: <none>
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] server lang: <none>
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] kex follows: False
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] Compression: none
2025-12-12T17:38:58.411 [DEBUG] [Thread-73812] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:38:58.429 [DEBUG] [Thread-73812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:38:58.429 [DEBUG] [Thread-73812] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:38:58.430 [DEBUG] [Thread-73812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:38:58.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:38:58.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:38:58.473 [DEBUG] [Thread-73812] [transport.py] [_log()] userauth is OK
2025-12-12T17:38:58.473 [DEBUG] [Thread-73812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:38:58.473 [DEBUG] [Thread-73812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:38:58.473 [DEBUG] [Thread-73812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:38:58.473 [DEBUG] [Thread-73812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:38:58.508 [INFO] [Thread-73812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:38:58.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:38:59.095 [DEBUG] [Thread-73812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:38:59.096 [DEBUG] [Thread-73812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:38:59.096 [DEBUG] [Thread-73812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:38:59.138 [DEBUG] [Thread-73812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:38:59.138 [DEBUG] [Thread-73812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:38:59.141 [DEBUG] [Thread-73812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:38:59.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:38:59.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:38:59.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:38:59.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:38:59.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:38:59.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:38:59.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:38:59.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:38:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:38:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.651840 -999.00  +17.50  46.38     26   -1.70 1 1 2 1 1   887    0 20.56 44.04 ----- 44.3 46.4 298.2 55.4 20.1 -27.6 20.2 -27.6 20.8 -25.1 21.2 -26.5
2025-12-12T17:38:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:38:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:38:59.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.651840
2025-12-12T17:38:59.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:38:59.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:38:59.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:38:59.169 [DEBUG] [Thread-73812] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:38:59.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:38:59.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:38:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:38:54', tmtdew=22.88, humidity=20.72, cloud=0.0, wind=47.27, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:38:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:38:59.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:38:59.264 [DEBUG] [Thread-73815] [transport.py] [_log()] starting thread (client mode): 0xf81570d0
2025-12-12T17:38:59.264 [DEBUG] [Thread-73815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:38:59.278 [DEBUG] [Thread-73815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:38:59.279 [INFO] [Thread-73815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:38:59.286 [DEBUG] [Thread-73815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:38:59.286 [DEBUG] [Thread-73815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:38:59.286 [DEBUG] [Thread-73815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:38:59.286 [DEBUG] [Thread-73815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:59.286 [DEBUG] [Thread-73815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:38:59.286 [DEBUG] [Thread-73815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] client lang: <none>
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] server lang: <none>
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] kex follows: False
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:38:59.287 [DEBUG] [Thread-73815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:38:59.288 [DEBUG] [Thread-73815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:38:59.288 [DEBUG] [Thread-73815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:38:59.288 [DEBUG] [Thread-73815] [transport.py] [_log()] Compression: none
2025-12-12T17:38:59.288 [DEBUG] [Thread-73815] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:38:59.345 [DEBUG] [Thread-73815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:38:59.345 [DEBUG] [Thread-73815] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:38:59.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:38:59.346 [DEBUG] [Thread-73815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:38:59.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:38:59.401 [DEBUG] [Thread-73815] [transport.py] [_log()] userauth is OK
2025-12-12T17:38:59.401 [DEBUG] [Thread-73815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:38:59.401 [DEBUG] [Thread-73815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:38:59.401 [DEBUG] [Thread-73815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:38:59.401 [DEBUG] [Thread-73815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:38:59.421 [INFO] [Thread-73815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:38:59.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:38:59.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:39:00.272 [DEBUG] [Thread-73815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:39:00.272 [DEBUG] [Thread-73815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:39:00.320 [DEBUG] [Thread-73815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:39:00.320 [DEBUG] [Thread-73815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:39:00.329 [DEBUG] [Thread-73815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:39:00.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:39:00.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:39:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:39:00.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:39:00.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:39:00.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:39:00.363 [DEBUG] [Thread-73815] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:39:06.377 [DEBUG] [Thread-73817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:39:19.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:39:19.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:39:21.421 [DEBUG] [Thread-73818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:39:30.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:39:30.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:39:30.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:39:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 39, 26), 22.89, 20.72, 0.0, 52.35, 18.09, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:39:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:39:26
2025-12-12T17:39:31.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:39:31.333 [DEBUG] [Thread-73819] [transport.py] [_log()] starting thread (client mode): 0xf8155a80
2025-12-12T17:39:31.333 [DEBUG] [Thread-73819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:39:31.353 [DEBUG] [Thread-73819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:39:31.353 [INFO] [Thread-73819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:39:31.356 [DEBUG] [Thread-73819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:39:31.356 [DEBUG] [Thread-73819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:39:31.356 [DEBUG] [Thread-73819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:39:31.356 [DEBUG] [Thread-73819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] client lang: <none>
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] server lang: <none>
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] kex follows: False
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] Compression: none
2025-12-12T17:39:31.357 [DEBUG] [Thread-73819] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:39:31.376 [DEBUG] [Thread-73819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:39:31.377 [DEBUG] [Thread-73819] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:39:31.377 [DEBUG] [Thread-73819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:39:31.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:39:31.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:39:31.380 [DEBUG] [Thread-73819] [transport.py] [_log()] userauth is OK
2025-12-12T17:39:31.380 [DEBUG] [Thread-73819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:39:31.380 [DEBUG] [Thread-73819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:39:31.380 [DEBUG] [Thread-73819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:39:31.380 [DEBUG] [Thread-73819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:39:31.402 [INFO] [Thread-73819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:39:31.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:39:32.027 [DEBUG] [Thread-73819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:39:32.027 [DEBUG] [Thread-73819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:39:32.028 [DEBUG] [Thread-73819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:39:32.068 [DEBUG] [Thread-73819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:39:32.068 [DEBUG] [Thread-73819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:39:32.070 [DEBUG] [Thread-73819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:39:32.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:39:32.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:39:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:39:32.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:39:32.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:39:32.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:39:32.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.652187 -999.00  +17.90  38.59     26   -1.50 1 1 2 1 1   887    0 20.43 43.03 ----- 51.8 38.6 296.6 47.2 20.1 -28.9 20.4 -28.4 20.9 -25.4 21.2 -26.0
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.652187
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:39:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:39:26', tmtdew=22.89, humidity=20.72, cloud=0.0, wind=52.35, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:39:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:39:32.089 [DEBUG] [Thread-73819] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:39:32.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:39:32.171 [DEBUG] [Thread-73822] [transport.py] [_log()] starting thread (client mode): 0xf81c2a70
2025-12-12T17:39:32.171 [DEBUG] [Thread-73822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:39:32.187 [DEBUG] [Thread-73822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:39:32.187 [INFO] [Thread-73822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] client lang: <none>
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] server lang: <none>
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] kex follows: False
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] Compression: none
2025-12-12T17:39:32.195 [DEBUG] [Thread-73822] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:39:32.256 [DEBUG] [Thread-73822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:39:32.256 [DEBUG] [Thread-73822] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:39:32.257 [DEBUG] [Thread-73822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:39:32.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:39:32.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:39:32.316 [DEBUG] [Thread-73822] [transport.py] [_log()] userauth is OK
2025-12-12T17:39:32.317 [DEBUG] [Thread-73822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:39:32.317 [DEBUG] [Thread-73822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:39:32.317 [DEBUG] [Thread-73822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:39:32.317 [DEBUG] [Thread-73822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:39:32.339 [INFO] [Thread-73822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:39:32.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:39:32.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:39:33.171 [DEBUG] [Thread-73822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:39:33.171 [DEBUG] [Thread-73822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:39:33.219 [DEBUG] [Thread-73822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:39:33.219 [DEBUG] [Thread-73822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:39:33.228 [DEBUG] [Thread-73822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:39:33.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:39:33.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:39:33.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:39:33.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:39:33.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:39:33.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:39:33.263 [DEBUG] [Thread-73822] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:39:36.450 [DEBUG] [Thread-73824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:39:51.499 [DEBUG] [Thread-73825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:39:57.202 [DEBUG] [Thread-73826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:03.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:40:03.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:40:03.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:40:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 39, 58), 23.12, 20.25, 0.0, 51.79, 18.42, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:40:03.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:39:58
2025-12-12T17:40:04.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:40:04.221 [DEBUG] [Thread-73827] [transport.py] [_log()] starting thread (client mode): 0xf5772560
2025-12-12T17:40:04.221 [DEBUG] [Thread-73827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:40:04.241 [DEBUG] [Thread-73827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:40:04.241 [INFO] [Thread-73827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:40:04.244 [DEBUG] [Thread-73827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:40:04.244 [DEBUG] [Thread-73827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:40:04.244 [DEBUG] [Thread-73827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:40:04.244 [DEBUG] [Thread-73827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:04.244 [DEBUG] [Thread-73827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] client lang: <none>
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] server lang: <none>
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] kex follows: False
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] Compression: none
2025-12-12T17:40:04.245 [DEBUG] [Thread-73827] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:40:04.261 [DEBUG] [Thread-73827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:40:04.262 [DEBUG] [Thread-73827] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:40:04.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:40:04.262 [DEBUG] [Thread-73827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:40:04.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:40:04.264 [DEBUG] [Thread-73827] [transport.py] [_log()] userauth is OK
2025-12-12T17:40:04.265 [DEBUG] [Thread-73827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:40:04.265 [DEBUG] [Thread-73827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:40:04.265 [DEBUG] [Thread-73827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:40:04.265 [DEBUG] [Thread-73827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:40:04.282 [INFO] [Thread-73827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:40:04.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:40:05.067 [DEBUG] [Thread-73827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:40:05.067 [DEBUG] [Thread-73827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:40:05.067 [DEBUG] [Thread-73827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:40:05.107 [DEBUG] [Thread-73827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:40:05.108 [DEBUG] [Thread-73827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:40:05.110 [DEBUG] [Thread-73827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:40:05.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:40:05.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:40:05.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:40:05.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:40:05.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:40:05.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:40:05.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:40:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:40:05.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:40:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.652534 -999.00  +17.50  43.93     27   -1.60 1 1 2 1 1   887    0 20.05 40.98 ----- 49.1 43.9 308.6 55.4 20.0 -28.4 20.2 -28.4 20.9 -26.4 21.1 -26.5
2025-12-12T17:40:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:40:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:40:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.652534
2025-12-12T17:40:05.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:40:05.144 [DEBUG] [Thread-73827] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:40:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:40:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:40:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:40:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:40:05.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:39:58', tmtdew=23.12, humidity=20.25, cloud=0.0, wind=51.79, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:39:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:40:05.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:40:05.247 [DEBUG] [Thread-73830] [transport.py] [_log()] starting thread (client mode): 0xf5772f80
2025-12-12T17:40:05.247 [DEBUG] [Thread-73830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:40:05.267 [DEBUG] [Thread-73830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:40:05.268 [INFO] [Thread-73830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:05.275 [DEBUG] [Thread-73830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] client lang: <none>
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] server lang: <none>
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] kex follows: False
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] Compression: none
2025-12-12T17:40:05.276 [DEBUG] [Thread-73830] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:40:05.336 [DEBUG] [Thread-73830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:40:05.336 [DEBUG] [Thread-73830] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:40:05.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:40:05.337 [DEBUG] [Thread-73830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:40:05.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:40:05.393 [DEBUG] [Thread-73830] [transport.py] [_log()] userauth is OK
2025-12-12T17:40:05.394 [DEBUG] [Thread-73830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:40:05.394 [DEBUG] [Thread-73830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:40:05.394 [DEBUG] [Thread-73830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:40:05.394 [DEBUG] [Thread-73830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:40:05.416 [INFO] [Thread-73830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:40:05.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:40:05.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:40:06.242 [DEBUG] [Thread-73830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:40:06.242 [DEBUG] [Thread-73830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:40:06.290 [DEBUG] [Thread-73830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:40:06.290 [DEBUG] [Thread-73830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:40:06.299 [DEBUG] [Thread-73830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:40:06.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:40:06.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:40:06.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:40:06.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:40:06.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:40:06.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:40:06.335 [DEBUG] [Thread-73830] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:40:06.525 [DEBUG] [Thread-73832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:19.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:19.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:21.566 [DEBUG] [Thread-73833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:40:36.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:40:36.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:40:36.592 [DEBUG] [Thread-73834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:37.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 40, 30), 22.89, 20.53, 0.0, 48.35, 18.19, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:40:37.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:40:30
2025-12-12T17:40:37.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:40:37.308 [DEBUG] [Thread-73835] [transport.py] [_log()] starting thread (client mode): 0xf81f1cc0
2025-12-12T17:40:37.308 [DEBUG] [Thread-73835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:40:37.329 [DEBUG] [Thread-73835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:40:37.329 [INFO] [Thread-73835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:37.332 [DEBUG] [Thread-73835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] client lang: <none>
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] server lang: <none>
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] kex follows: False
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] Compression: none
2025-12-12T17:40:37.333 [DEBUG] [Thread-73835] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:40:37.349 [DEBUG] [Thread-73835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:40:37.350 [DEBUG] [Thread-73835] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:40:37.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:40:37.351 [DEBUG] [Thread-73835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:40:37.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:40:37.353 [DEBUG] [Thread-73835] [transport.py] [_log()] userauth is OK
2025-12-12T17:40:37.353 [DEBUG] [Thread-73835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:40:37.353 [DEBUG] [Thread-73835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:40:37.353 [DEBUG] [Thread-73835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:40:37.353 [DEBUG] [Thread-73835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:40:37.371 [INFO] [Thread-73835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:40:37.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:40:37.982 [DEBUG] [Thread-73835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:40:37.982 [DEBUG] [Thread-73835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:40:37.983 [DEBUG] [Thread-73835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:40:38.023 [DEBUG] [Thread-73835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:40:38.023 [DEBUG] [Thread-73835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:40:38.026 [DEBUG] [Thread-73835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:40:38.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:40:38.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:40:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:40:38.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:40:38.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:40:38.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:40:38.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:40:38.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:40:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:40:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.652881 -999.00  +17.30  44.92     27   -1.60 1 1 2 1 1   887    0 20.34 37.55 ----- 42.6 44.9 299.4 61.4 20.0 -28.2 20.2 -28.1 20.9 -25.1 21.0 -26.5
2025-12-12T17:40:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:40:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:40:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.652881
2025-12-12T17:40:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:40:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:40:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:40:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:40:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:40:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:40:30', tmtdew=22.89, humidity=20.53, cloud=0.0, wind=48.35, temperature=18.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:40:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:40:38.054 [DEBUG] [Thread-73835] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:40:38.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:40:38.155 [DEBUG] [Thread-73838] [transport.py] [_log()] starting thread (client mode): 0xf5703850
2025-12-12T17:40:38.155 [DEBUG] [Thread-73838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:40:38.170 [DEBUG] [Thread-73838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:40:38.170 [INFO] [Thread-73838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:40:38.177 [DEBUG] [Thread-73838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] client lang: <none>
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] server lang: <none>
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] kex follows: False
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:40:38.178 [DEBUG] [Thread-73838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:40:38.179 [DEBUG] [Thread-73838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:40:38.179 [DEBUG] [Thread-73838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:40:38.179 [DEBUG] [Thread-73838] [transport.py] [_log()] Compression: none
2025-12-12T17:40:38.179 [DEBUG] [Thread-73838] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:40:38.234 [DEBUG] [Thread-73838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:40:38.235 [DEBUG] [Thread-73838] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:40:38.235 [DEBUG] [Thread-73838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:40:38.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:40:38.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:40:38.291 [DEBUG] [Thread-73838] [transport.py] [_log()] userauth is OK
2025-12-12T17:40:38.291 [DEBUG] [Thread-73838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:40:38.291 [DEBUG] [Thread-73838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:40:38.291 [DEBUG] [Thread-73838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:40:38.291 [DEBUG] [Thread-73838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:40:38.311 [INFO] [Thread-73838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:40:38.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:40:38.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:40:39.142 [DEBUG] [Thread-73838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:40:39.142 [DEBUG] [Thread-73838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:40:39.189 [DEBUG] [Thread-73838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:40:39.189 [DEBUG] [Thread-73838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:40:39.198 [DEBUG] [Thread-73838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:40:39.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:40:39.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:40:39.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:40:39.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:40:39.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:40:39.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:40:39.231 [DEBUG] [Thread-73838] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:40:51.620 [DEBUG] [Thread-73840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:40:57.259 [DEBUG] [Thread-73841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:06.672 [DEBUG] [Thread-73842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:41:09.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:41:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:41:09.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 41, 2), 22.89, 20.57, 0.0, 46.16, 18.31, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:41:09.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:41:02
2025-12-12T17:41:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:41:10.200 [DEBUG] [Thread-73843] [transport.py] [_log()] starting thread (client mode): 0xf5771a50
2025-12-12T17:41:10.200 [DEBUG] [Thread-73843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:41:10.222 [DEBUG] [Thread-73843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:41:10.222 [INFO] [Thread-73843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] client lang: <none>
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] server lang: <none>
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] kex follows: False
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] Compression: none
2025-12-12T17:41:10.223 [DEBUG] [Thread-73843] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:41:10.242 [DEBUG] [Thread-73843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:41:10.242 [DEBUG] [Thread-73843] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:41:10.243 [DEBUG] [Thread-73843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:41:10.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:41:10.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:41:10.245 [DEBUG] [Thread-73843] [transport.py] [_log()] userauth is OK
2025-12-12T17:41:10.245 [DEBUG] [Thread-73843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:41:10.245 [DEBUG] [Thread-73843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:41:10.245 [DEBUG] [Thread-73843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:41:10.245 [DEBUG] [Thread-73843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:41:10.269 [INFO] [Thread-73843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:41:10.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:41:10.896 [DEBUG] [Thread-73843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:41:10.896 [DEBUG] [Thread-73843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:41:10.897 [DEBUG] [Thread-73843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:41:10.938 [DEBUG] [Thread-73843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:41:10.938 [DEBUG] [Thread-73843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:41:10.941 [DEBUG] [Thread-73843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:41:10.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:41:10.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:41:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:41:10.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:41:10.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:41:10.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:41:10.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:41:10.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:41:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:41:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.653229 -999.00  +17.30  42.67     27   -1.40 1 1 2 1 1   887    0 19.99 32.79 ----- 44.3 42.7 300.8 52.6 19.9 -28.6 20.1 -28.2 20.8 -25.8 21.0 -26.6
2025-12-12T17:41:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:41:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:41:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.653229
2025-12-12T17:41:10.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:41:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:41:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:41:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:41:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:41:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:41:02', tmtdew=22.89, humidity=20.57, cloud=0.0, wind=46.16, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:40:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:41:10.967 [DEBUG] [Thread-73843] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:41:11.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:41:11.063 [DEBUG] [Thread-73846] [transport.py] [_log()] starting thread (client mode): 0xf5773ca0
2025-12-12T17:41:11.063 [DEBUG] [Thread-73846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:41:11.078 [DEBUG] [Thread-73846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:41:11.078 [INFO] [Thread-73846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:41:11.085 [DEBUG] [Thread-73846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] client lang: <none>
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] server lang: <none>
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] kex follows: False
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] Compression: none
2025-12-12T17:41:11.086 [DEBUG] [Thread-73846] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:41:11.143 [DEBUG] [Thread-73846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:41:11.144 [DEBUG] [Thread-73846] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:41:11.144 [DEBUG] [Thread-73846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:41:11.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:41:11.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:41:11.202 [DEBUG] [Thread-73846] [transport.py] [_log()] userauth is OK
2025-12-12T17:41:11.203 [DEBUG] [Thread-73846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:41:11.203 [DEBUG] [Thread-73846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:41:11.203 [DEBUG] [Thread-73846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:41:11.203 [DEBUG] [Thread-73846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:41:11.223 [INFO] [Thread-73846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:41:11.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:41:11.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:41:12.077 [DEBUG] [Thread-73846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:41:12.078 [DEBUG] [Thread-73846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:41:12.126 [DEBUG] [Thread-73846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:41:12.126 [DEBUG] [Thread-73846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:41:12.135 [DEBUG] [Thread-73846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:41:12.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:41:12.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:41:12.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:41:12.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:41:12.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:41:12.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:41:12.169 [DEBUG] [Thread-73846] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:41:19.976 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:19.977 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:21.700 [DEBUG] [Thread-73848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:36.754 [DEBUG] [Thread-73849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:41:42.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:41:42.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:41:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 41, 34), 22.37, 21.58, 0.0, 47.14, 17.87, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:41:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:41:34
2025-12-12T17:41:43.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:41:43.190 [DEBUG] [Thread-73850] [transport.py] [_log()] starting thread (client mode): 0xf81c1180
2025-12-12T17:41:43.190 [DEBUG] [Thread-73850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:41:43.210 [DEBUG] [Thread-73850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:41:43.210 [INFO] [Thread-73850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] client lang: <none>
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] server lang: <none>
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] kex follows: False
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] Compression: none
2025-12-12T17:41:43.213 [DEBUG] [Thread-73850] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:41:43.231 [DEBUG] [Thread-73850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:41:43.231 [DEBUG] [Thread-73850] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:41:43.231 [DEBUG] [Thread-73850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:41:43.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:41:43.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:41:43.232 [DEBUG] [Thread-73850] [transport.py] [_log()] userauth is OK
2025-12-12T17:41:43.232 [DEBUG] [Thread-73850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:41:43.232 [DEBUG] [Thread-73850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:41:43.232 [DEBUG] [Thread-73850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:41:43.232 [DEBUG] [Thread-73850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:41:43.242 [INFO] [Thread-73850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:41:43.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:41:43.882 [DEBUG] [Thread-73850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:41:43.882 [DEBUG] [Thread-73850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:41:43.882 [DEBUG] [Thread-73850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:41:43.923 [DEBUG] [Thread-73850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:41:43.923 [DEBUG] [Thread-73850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:41:43.925 [DEBUG] [Thread-73850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:41:43.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:41:43.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:41:43.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:41:43.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:41:43.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:41:43.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:41:43.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.653576 -999.00  +17.10  46.80     27   -1.60 1 1 2 1 1   887    0 19.98 27.64 ----- 47.7 46.8 294.4 55.1 19.9 -28.1 20.0 -27.9 20.6 -27.4 20.9 -26.3
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.653576
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:41:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:41:34', tmtdew=22.37, humidity=21.58, cloud=0.0, wind=47.14, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:41:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:41:43.942 [DEBUG] [Thread-73850] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:41:44.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:41:44.028 [DEBUG] [Thread-73853] [transport.py] [_log()] starting thread (client mode): 0xf5771ae0
2025-12-12T17:41:44.028 [DEBUG] [Thread-73853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:41:44.043 [DEBUG] [Thread-73853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:41:44.044 [INFO] [Thread-73853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] client lang: <none>
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] server lang: <none>
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] kex follows: False
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] Compression: none
2025-12-12T17:41:44.051 [DEBUG] [Thread-73853] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:41:44.107 [DEBUG] [Thread-73853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:41:44.107 [DEBUG] [Thread-73853] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:41:44.107 [DEBUG] [Thread-73853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:41:44.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:41:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:41:44.165 [DEBUG] [Thread-73853] [transport.py] [_log()] userauth is OK
2025-12-12T17:41:44.165 [DEBUG] [Thread-73853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:41:44.165 [DEBUG] [Thread-73853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:41:44.165 [DEBUG] [Thread-73853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:41:44.165 [DEBUG] [Thread-73853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:41:44.178 [INFO] [Thread-73853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:41:44.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:41:44.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:41:45.028 [DEBUG] [Thread-73853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:41:45.028 [DEBUG] [Thread-73853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:41:45.075 [DEBUG] [Thread-73853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:41:45.076 [DEBUG] [Thread-73853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:41:45.084 [DEBUG] [Thread-73853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:41:45.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:41:45.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:41:45.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:41:45.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:41:45.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:41:45.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:41:45.123 [DEBUG] [Thread-73853] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:41:51.783 [DEBUG] [Thread-73855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:41:57.310 [DEBUG] [Thread-73856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:06.831 [DEBUG] [Thread-73857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:42:15.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:42:15.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:42:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 42, 6), 22.21, 21.78, 0.0, 49.46, 17.72, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:42:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:42:06
2025-12-12T17:42:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:42:16.097 [DEBUG] [Thread-73858] [transport.py] [_log()] starting thread (client mode): 0xf5773640
2025-12-12T17:42:16.097 [DEBUG] [Thread-73858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:42:16.117 [DEBUG] [Thread-73858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:42:16.117 [INFO] [Thread-73858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] client lang: <none>
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] server lang: <none>
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] kex follows: False
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:42:16.120 [DEBUG] [Thread-73858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:42:16.121 [DEBUG] [Thread-73858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:42:16.121 [DEBUG] [Thread-73858] [transport.py] [_log()] Compression: none
2025-12-12T17:42:16.121 [DEBUG] [Thread-73858] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:42:16.133 [DEBUG] [Thread-73858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:42:16.134 [DEBUG] [Thread-73858] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:42:16.134 [DEBUG] [Thread-73858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:42:16.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:42:16.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:42:16.136 [DEBUG] [Thread-73858] [transport.py] [_log()] userauth is OK
2025-12-12T17:42:16.136 [DEBUG] [Thread-73858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:42:16.136 [DEBUG] [Thread-73858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:42:16.137 [DEBUG] [Thread-73858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:42:16.137 [DEBUG] [Thread-73858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:42:16.161 [INFO] [Thread-73858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:42:16.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:42:16.798 [DEBUG] [Thread-73858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:42:16.798 [DEBUG] [Thread-73858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:42:16.798 [DEBUG] [Thread-73858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:42:16.839 [DEBUG] [Thread-73858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:42:16.839 [DEBUG] [Thread-73858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:42:16.842 [DEBUG] [Thread-73858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:42:16.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:42:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:42:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:42:16.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:42:16.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:42:16.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:42:16.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:42:16.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:42:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:42:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.653923 -999.00  +17.20  38.91     28   -1.40 1 1 2 1 1   887    0 20.09 22.92 ----- 38.0 38.9 302.4 58.4 19.9 -27.8 20.0 -27.3 20.6 -25.5 20.9 -26.2
2025-12-12T17:42:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:42:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:42:16.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.653923
2025-12-12T17:42:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:42:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:42:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:42:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:42:16.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:42:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:42:06', tmtdew=22.21, humidity=21.78, cloud=0.0, wind=49.46, temperature=17.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:41:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:42:16.868 [DEBUG] [Thread-73858] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:42:16.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:42:16.965 [DEBUG] [Thread-73861] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T17:42:16.965 [DEBUG] [Thread-73861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:42:16.980 [DEBUG] [Thread-73861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:42:16.980 [INFO] [Thread-73861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] client lang: <none>
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] server lang: <none>
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] kex follows: False
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:42:16.988 [DEBUG] [Thread-73861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:42:16.989 [DEBUG] [Thread-73861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:42:16.989 [DEBUG] [Thread-73861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:42:16.989 [DEBUG] [Thread-73861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:42:16.989 [DEBUG] [Thread-73861] [transport.py] [_log()] Compression: none
2025-12-12T17:42:16.989 [DEBUG] [Thread-73861] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:42:17.046 [DEBUG] [Thread-73861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:42:17.047 [DEBUG] [Thread-73861] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:42:17.047 [DEBUG] [Thread-73861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:42:17.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:42:17.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:42:17.102 [DEBUG] [Thread-73861] [transport.py] [_log()] userauth is OK
2025-12-12T17:42:17.103 [DEBUG] [Thread-73861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:42:17.103 [DEBUG] [Thread-73861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:42:17.103 [DEBUG] [Thread-73861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:42:17.103 [DEBUG] [Thread-73861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:42:17.122 [INFO] [Thread-73861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:42:17.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:42:17.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:42:17.977 [DEBUG] [Thread-73861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:42:17.977 [DEBUG] [Thread-73861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:42:18.025 [DEBUG] [Thread-73861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:42:18.026 [DEBUG] [Thread-73861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:42:18.034 [DEBUG] [Thread-73861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:42:18.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:42:18.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:42: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') -> 00000000
2025-12-12T17:42:18.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:42:18.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:42:18.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:42:18.065 [DEBUG] [Thread-73861] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:42:20.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:20.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:21.864 [DEBUG] [Thread-73863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:36.907 [DEBUG] [Thread-73864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:48.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:42:48.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:42:48.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:42:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 42, 38), 22.37, 21.35, 0.0, 42.82, 17.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:42:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:42:38
2025-12-12T17:42:48.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:42:49.055 [DEBUG] [Thread-73865] [transport.py] [_log()] starting thread (client mode): 0xf5770f10
2025-12-12T17:42:49.055 [DEBUG] [Thread-73865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:42:49.076 [DEBUG] [Thread-73865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:42:49.076 [INFO] [Thread-73865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] client lang: <none>
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] server lang: <none>
2025-12-12T17:42:49.080 [DEBUG] [Thread-73865] [transport.py] [_log()] kex follows: False
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] Compression: none
2025-12-12T17:42:49.081 [DEBUG] [Thread-73865] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:42:49.101 [DEBUG] [Thread-73865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:42:49.101 [DEBUG] [Thread-73865] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:42:49.102 [DEBUG] [Thread-73865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:42:49.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:42:49.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:42:49.105 [DEBUG] [Thread-73865] [transport.py] [_log()] userauth is OK
2025-12-12T17:42:49.105 [DEBUG] [Thread-73865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:42:49.105 [DEBUG] [Thread-73865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:42:49.105 [DEBUG] [Thread-73865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:42:49.105 [DEBUG] [Thread-73865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:42:49.131 [INFO] [Thread-73865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:42:49.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:42:49.788 [DEBUG] [Thread-73865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:42:49.788 [DEBUG] [Thread-73865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:42:49.788 [DEBUG] [Thread-73865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:42:49.829 [DEBUG] [Thread-73865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:42:49.829 [DEBUG] [Thread-73865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:42:49.832 [DEBUG] [Thread-73865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:42:49.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:42:49.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:42:49.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:42:49.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:42:49.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:42:49.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:42:49.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:42:49.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:42:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:42:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.654618 -999.00  +17.20  52.33     27   -1.40 1 1 2 1 1   887    0 19.36 10.22 ----- 49.0 52.3 313.0 61.5 19.9 -27.8 20.1 -28.2 20.7 -25.3 20.9 -26.2
2025-12-12T17:42:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:42:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:42:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.654618
2025-12-12T17:42:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:42:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:42:49.859 [DEBUG] [Thread-73865] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:42:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:42:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:42:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:42:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:42:38', tmtdew=22.37, humidity=21.35, cloud=0.0, wind=42.82, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:42:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:42:49.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:42:49.959 [DEBUG] [Thread-73868] [transport.py] [_log()] starting thread (client mode): 0xf5772020
2025-12-12T17:42:49.959 [DEBUG] [Thread-73868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:42:49.974 [DEBUG] [Thread-73868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:42:49.974 [INFO] [Thread-73868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:42:49.981 [DEBUG] [Thread-73868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:42:49.982 [DEBUG] [Thread-73868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] client lang: <none>
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] server lang: <none>
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] kex follows: False
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:42:49.983 [DEBUG] [Thread-73868] [transport.py] [_log()] Compression: none
2025-12-12T17:42:49.984 [DEBUG] [Thread-73868] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:42:50.044 [DEBUG] [Thread-73868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:42:50.045 [DEBUG] [Thread-73868] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:42:50.045 [DEBUG] [Thread-73868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:42:50.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:42:50.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:42:50.100 [DEBUG] [Thread-73868] [transport.py] [_log()] userauth is OK
2025-12-12T17:42:50.100 [DEBUG] [Thread-73868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:42:50.100 [DEBUG] [Thread-73868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:42:50.100 [DEBUG] [Thread-73868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:42:50.100 [DEBUG] [Thread-73868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:42:50.122 [INFO] [Thread-73868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:42:50.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:42:50.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:42:50.983 [DEBUG] [Thread-73868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:42:50.983 [DEBUG] [Thread-73868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:42:51.031 [DEBUG] [Thread-73868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:42:51.031 [DEBUG] [Thread-73868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:42:51.040 [DEBUG] [Thread-73868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:42:51.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:42:51.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:42:51.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:42:51.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:42:51.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:42:51.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:42:51.074 [DEBUG] [Thread-73868] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:42:51.936 [DEBUG] [Thread-73870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:42:57.360 [DEBUG] [Thread-73871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:06.980 [DEBUG] [Thread-73872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:20.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:20.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:43:21.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:43:21.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:43:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 43, 10), 22.09, 21.71, 0.0, 46.28, 17.69, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:43:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:43:10
2025-12-12T17:43:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:43:22.007 [DEBUG] [Thread-73873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:22.057 [DEBUG] [Thread-73874] [transport.py] [_log()] starting thread (client mode): 0xf57bd7b0
2025-12-12T17:43:22.057 [DEBUG] [Thread-73874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:43:22.080 [DEBUG] [Thread-73874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:43:22.081 [INFO] [Thread-73874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:43:22.084 [DEBUG] [Thread-73874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:43:22.084 [DEBUG] [Thread-73874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] client lang: <none>
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] server lang: <none>
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] kex follows: False
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:43:22.085 [DEBUG] [Thread-73874] [transport.py] [_log()] Compression: none
2025-12-12T17:43:22.086 [DEBUG] [Thread-73874] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:43:22.105 [DEBUG] [Thread-73874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:43:22.105 [DEBUG] [Thread-73874] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:43:22.106 [DEBUG] [Thread-73874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:43:22.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:43:22.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:43:22.108 [DEBUG] [Thread-73874] [transport.py] [_log()] userauth is OK
2025-12-12T17:43:22.108 [DEBUG] [Thread-73874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:43:22.108 [DEBUG] [Thread-73874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:43:22.108 [DEBUG] [Thread-73874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:43:22.108 [DEBUG] [Thread-73874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:43:22.144 [INFO] [Thread-73874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:43:22.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:43:22.798 [DEBUG] [Thread-73874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:43:22.798 [DEBUG] [Thread-73874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:43:22.798 [DEBUG] [Thread-73874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:43:22.840 [DEBUG] [Thread-73874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:43:22.840 [DEBUG] [Thread-73874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:43:22.843 [DEBUG] [Thread-73874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:43:22.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:43:22.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:43:22.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:43:22.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:43:22.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:43:22.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:43:22.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:43:22.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:43:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:43:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.654965 -999.00  +17.00  41.03     28   -1.30 1 1 2 1 1   887    0 19.55 4.38 ----- 35.9 41.0 299.2 56.5 19.9 -28.4 20.0 -27.0 20.7 -25.7 20.8 -26.4
2025-12-12T17:43:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:43:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:43:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.654965
2025-12-12T17:43:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:43:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:43:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:43:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:43:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:43:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:43:10', tmtdew=22.09, humidity=21.71, cloud=0.0, wind=46.28, temperature=17.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:43:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:43:22.857 [DEBUG] [Thread-73874] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:43:22.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:43:22.951 [DEBUG] [Thread-73877] [transport.py] [_log()] starting thread (client mode): 0xf813f880
2025-12-12T17:43:22.951 [DEBUG] [Thread-73877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:43:22.970 [DEBUG] [Thread-73877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:43:22.970 [INFO] [Thread-73877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:43:22.977 [DEBUG] [Thread-73877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:43:22.977 [DEBUG] [Thread-73877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:43:22.977 [DEBUG] [Thread-73877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:43:22.977 [DEBUG] [Thread-73877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:22.977 [DEBUG] [Thread-73877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:22.977 [DEBUG] [Thread-73877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] client lang: <none>
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] server lang: <none>
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] kex follows: False
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] Compression: none
2025-12-12T17:43:22.978 [DEBUG] [Thread-73877] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:43:23.038 [DEBUG] [Thread-73877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:43:23.039 [DEBUG] [Thread-73877] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:43:23.039 [DEBUG] [Thread-73877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:43:23.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:43:23.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:43:23.102 [DEBUG] [Thread-73877] [transport.py] [_log()] userauth is OK
2025-12-12T17:43:23.103 [DEBUG] [Thread-73877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:43:23.103 [DEBUG] [Thread-73877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:43:23.103 [DEBUG] [Thread-73877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:43:23.103 [DEBUG] [Thread-73877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:43:23.127 [INFO] [Thread-73877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:43:23.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:43:23.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:43:23.959 [DEBUG] [Thread-73877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:43:23.960 [DEBUG] [Thread-73877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:43:24.008 [DEBUG] [Thread-73877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:43:24.008 [DEBUG] [Thread-73877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:43:24.017 [DEBUG] [Thread-73877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:43:24.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:43:24.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:43:24.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:43:24.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:43:24.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:43:24.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:43:24.052 [DEBUG] [Thread-73877] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:43:37.035 [DEBUG] [Thread-73879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:52.081 [DEBUG] [Thread-73880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:43:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:43:54.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:43:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:43:54.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 43, 42), 21.83, 22.39, 0.0, 39.8, 17.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:43:54.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:43:42
2025-12-12T17:43:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:43:55.043 [DEBUG] [Thread-73881] [transport.py] [_log()] starting thread (client mode): 0xf5703490
2025-12-12T17:43:55.043 [DEBUG] [Thread-73881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:43:55.063 [DEBUG] [Thread-73881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:43:55.064 [INFO] [Thread-73881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] client lang: <none>
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] server lang: <none>
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] kex follows: False
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] Compression: none
2025-12-12T17:43:55.067 [DEBUG] [Thread-73881] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:43:55.084 [DEBUG] [Thread-73881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:43:55.085 [DEBUG] [Thread-73881] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:43:55.085 [DEBUG] [Thread-73881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:43:55.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:43:55.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:43:55.087 [DEBUG] [Thread-73881] [transport.py] [_log()] userauth is OK
2025-12-12T17:43:55.087 [DEBUG] [Thread-73881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:43:55.087 [DEBUG] [Thread-73881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:43:55.087 [DEBUG] [Thread-73881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:43:55.088 [DEBUG] [Thread-73881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:43:55.112 [INFO] [Thread-73881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:43:55.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:43:55.762 [DEBUG] [Thread-73881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:43:55.763 [DEBUG] [Thread-73881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:43:55.763 [DEBUG] [Thread-73881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:43:55.804 [DEBUG] [Thread-73881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:43:55.804 [DEBUG] [Thread-73881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:43:55.807 [DEBUG] [Thread-73881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:43:55.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:43:55.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:43:55.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:43:55.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:43:55.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:43:55.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:43:55.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:43:55.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:43:55.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:43:55.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.655312 -999.00  +17.30  47.23     28   -1.20 1 1 2 1 1   887    0 18.91 -2.32 ----- 37.3 47.2 297.0 49.5 19.8 -27.5 20.0 -27.3 20.7 -26.5 20.9 -26.5
2025-12-12T17:43:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:43:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:43:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.655312
2025-12-12T17:43:55.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:43:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:43:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:43:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:43:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:43:55.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:43:42', tmtdew=21.83, humidity=22.39, cloud=0.0, wind=39.8, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:43:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:43:55.833 [DEBUG] [Thread-73881] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:43:55.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:43:55.928 [DEBUG] [Thread-73884] [transport.py] [_log()] starting thread (client mode): 0xf5702710
2025-12-12T17:43:55.928 [DEBUG] [Thread-73884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:43:55.943 [DEBUG] [Thread-73884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:43:55.944 [INFO] [Thread-73884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:55.951 [DEBUG] [Thread-73884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] client lang: <none>
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] server lang: <none>
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] kex follows: False
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] Compression: none
2025-12-12T17:43:55.952 [DEBUG] [Thread-73884] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:43:56.007 [DEBUG] [Thread-73884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:43:56.008 [DEBUG] [Thread-73884] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:43:56.008 [DEBUG] [Thread-73884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:43:56.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:43:56.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:43:56.063 [DEBUG] [Thread-73884] [transport.py] [_log()] userauth is OK
2025-12-12T17:43:56.064 [DEBUG] [Thread-73884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:43:56.064 [DEBUG] [Thread-73884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:43:56.064 [DEBUG] [Thread-73884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:43:56.064 [DEBUG] [Thread-73884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:43:56.083 [INFO] [Thread-73884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:43:56.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:43:56.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:43:56.935 [DEBUG] [Thread-73884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:43:56.935 [DEBUG] [Thread-73884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:43:56.983 [DEBUG] [Thread-73884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:43:56.983 [DEBUG] [Thread-73884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:43:56.992 [DEBUG] [Thread-73884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:43:57.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:43:57.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:43:57.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:43:57.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:43:57.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:43:57.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:43:57.027 [DEBUG] [Thread-73884] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:43:57.419 [DEBUG] [Thread-73886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:07.115 [DEBUG] [Thread-73887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:20.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:20.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:22.167 [DEBUG] [Thread-73888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:27.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:44:27.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:44:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:44:27.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 44, 14), 21.91, 22.28, 0.0, 39.93, 17.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:44:27.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:44:14
2025-12-12T17:44:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:44:27.984 [DEBUG] [Thread-73889] [transport.py] [_log()] starting thread (client mode): 0xf57bcc40
2025-12-12T17:44:27.984 [DEBUG] [Thread-73889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:44:28.004 [DEBUG] [Thread-73889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:44:28.004 [INFO] [Thread-73889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] client lang: <none>
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] server lang: <none>
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] kex follows: False
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:44:28.008 [DEBUG] [Thread-73889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:44:28.009 [DEBUG] [Thread-73889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:44:28.009 [DEBUG] [Thread-73889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:44:28.009 [DEBUG] [Thread-73889] [transport.py] [_log()] Compression: none
2025-12-12T17:44:28.009 [DEBUG] [Thread-73889] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:44:28.026 [DEBUG] [Thread-73889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:44:28.026 [DEBUG] [Thread-73889] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:44:28.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:44:28.027 [DEBUG] [Thread-73889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:44:28.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:44:28.029 [DEBUG] [Thread-73889] [transport.py] [_log()] userauth is OK
2025-12-12T17:44:28.029 [DEBUG] [Thread-73889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:44:28.029 [DEBUG] [Thread-73889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:44:28.029 [DEBUG] [Thread-73889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:44:28.030 [DEBUG] [Thread-73889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:44:28.054 [INFO] [Thread-73889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:44:28.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:44:28.705 [DEBUG] [Thread-73889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:44:28.706 [DEBUG] [Thread-73889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:44:28.706 [DEBUG] [Thread-73889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:44:28.747 [DEBUG] [Thread-73889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:44:28.747 [DEBUG] [Thread-73889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:44:28.750 [DEBUG] [Thread-73889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:44:28.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:44:28.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:44:28.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:44:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:44:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:44:28.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:44:28.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:44:28.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:44:28.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:44:28.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.655659 -999.00  +17.80  39.15     27   -1.00 1 1 2 1 1   887    0 18.44 -7.56 ----- 34.9 39.1 298.4 44.6 19.8 -28.0 20.2 -26.7 20.7 -25.6 20.9 -25.6
2025-12-12T17:44:28.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:44:28.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:44:28.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.655659
2025-12-12T17:44:28.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:44:28.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:44:28.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:44:28.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:44:28.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:44:28.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:44:14', tmtdew=21.91, humidity=22.28, cloud=0.0, wind=39.93, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:44:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:44:28.777 [DEBUG] [Thread-73889] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:44:28.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:44:28.873 [DEBUG] [Thread-73892] [transport.py] [_log()] starting thread (client mode): 0xf575d2a0
2025-12-12T17:44:28.873 [DEBUG] [Thread-73892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:44:28.888 [DEBUG] [Thread-73892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:44:28.888 [INFO] [Thread-73892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:44:28.896 [DEBUG] [Thread-73892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:44:28.896 [DEBUG] [Thread-73892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:44:28.896 [DEBUG] [Thread-73892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:44:28.896 [DEBUG] [Thread-73892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:44:28.896 [DEBUG] [Thread-73892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] client lang: <none>
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] server lang: <none>
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] kex follows: False
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:44:28.897 [DEBUG] [Thread-73892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:44:28.898 [DEBUG] [Thread-73892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:44:28.898 [DEBUG] [Thread-73892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:44:28.898 [DEBUG] [Thread-73892] [transport.py] [_log()] Compression: none
2025-12-12T17:44:28.898 [DEBUG] [Thread-73892] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:44:28.954 [DEBUG] [Thread-73892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:44:28.954 [DEBUG] [Thread-73892] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:44:28.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:44:28.955 [DEBUG] [Thread-73892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:44:28.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:44:29.009 [DEBUG] [Thread-73892] [transport.py] [_log()] userauth is OK
2025-12-12T17:44:29.010 [DEBUG] [Thread-73892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:44:29.010 [DEBUG] [Thread-73892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:44:29.010 [DEBUG] [Thread-73892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:44:29.010 [DEBUG] [Thread-73892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:44:29.030 [INFO] [Thread-73892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:44:29.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:44:29.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:44:29.902 [DEBUG] [Thread-73892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:44:29.902 [DEBUG] [Thread-73892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:44:29.950 [DEBUG] [Thread-73892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:44:29.950 [DEBUG] [Thread-73892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:44:29.959 [DEBUG] [Thread-73892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:44:29.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:44:29.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:44:29.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:44:29.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:44:29.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:44:29.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:44:29.993 [DEBUG] [Thread-73892] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:44:37.194 [DEBUG] [Thread-73894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:52.239 [DEBUG] [Thread-73895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:44:57.466 [DEBUG] [Thread-73896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:00.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:45:00.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:45:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:45:00.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 44, 46), 21.96, 22.18, 0.0, 38.48, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:45:00.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:44:46
2025-12-12T17:45:00.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:45:00.987 [DEBUG] [Thread-73897] [transport.py] [_log()] starting thread (client mode): 0xf57bff10
2025-12-12T17:45:00.987 [DEBUG] [Thread-73897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:45:01.007 [DEBUG] [Thread-73897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:45:01.007 [INFO] [Thread-73897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:45:01.010 [DEBUG] [Thread-73897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:45:01.010 [DEBUG] [Thread-73897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:45:01.010 [DEBUG] [Thread-73897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:45:01.010 [DEBUG] [Thread-73897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] client lang: <none>
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] server lang: <none>
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] kex follows: False
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:45:01.011 [DEBUG] [Thread-73897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:45:01.012 [DEBUG] [Thread-73897] [transport.py] [_log()] Compression: none
2025-12-12T17:45:01.012 [DEBUG] [Thread-73897] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:45:01.029 [DEBUG] [Thread-73897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:45:01.029 [DEBUG] [Thread-73897] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:45:01.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:45:01.031 [DEBUG] [Thread-73897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:45:01.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:45:01.033 [DEBUG] [Thread-73897] [transport.py] [_log()] userauth is OK
2025-12-12T17:45:01.033 [DEBUG] [Thread-73897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:45:01.033 [DEBUG] [Thread-73897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:45:01.033 [DEBUG] [Thread-73897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:45:01.034 [DEBUG] [Thread-73897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:45:01.069 [INFO] [Thread-73897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:45:01.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:45:01.686 [DEBUG] [Thread-73897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:45:01.686 [DEBUG] [Thread-73897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:45:01.687 [DEBUG] [Thread-73897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:45:01.727 [DEBUG] [Thread-73897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:45:01.727 [DEBUG] [Thread-73897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:45:01.730 [DEBUG] [Thread-73897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:45:01.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:45:01.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:45:01.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:45:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:45:01.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:45:01.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:45:01.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:45:01.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:45:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:45:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.656006 -999.00  +18.00  38.38     27   -0.90 1 1 2 1 1   887    0 18.55 -10.30 ----- 40.0 38.4 309.0 49.5 20.0 -27.4 20.1 -28.0 20.9 -24.7 21.1 -25.6
2025-12-12T17:45:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:45:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:45:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.656006
2025-12-12T17:45:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:45:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:45:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:45:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:45:01.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:45:01.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:44:46', tmtdew=21.96, humidity=22.18, cloud=0.0, wind=38.48, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:44:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:45:01.754 [DEBUG] [Thread-73897] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:45:01.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:45:01.870 [DEBUG] [Thread-73900] [transport.py] [_log()] starting thread (client mode): 0xf57721a0
2025-12-12T17:45:01.870 [DEBUG] [Thread-73900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:45:01.885 [DEBUG] [Thread-73900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:45:01.885 [INFO] [Thread-73900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] client lang: <none>
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] server lang: <none>
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] kex follows: False
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] Compression: none
2025-12-12T17:45:01.892 [DEBUG] [Thread-73900] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:45:01.950 [DEBUG] [Thread-73900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:45:01.950 [DEBUG] [Thread-73900] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:45:01.951 [DEBUG] [Thread-73900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:45:01.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:45:01.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:45:02.007 [DEBUG] [Thread-73900] [transport.py] [_log()] userauth is OK
2025-12-12T17:45:02.007 [DEBUG] [Thread-73900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:45:02.007 [DEBUG] [Thread-73900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:45:02.007 [DEBUG] [Thread-73900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:45:02.007 [DEBUG] [Thread-73900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:45:02.021 [INFO] [Thread-73900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:45:02.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:45:02.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:45:02.881 [DEBUG] [Thread-73900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:45:02.881 [DEBUG] [Thread-73900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:45:02.929 [DEBUG] [Thread-73900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:45:02.929 [DEBUG] [Thread-73900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:45:02.938 [DEBUG] [Thread-73900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:45:02.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:45:02.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:45:02.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:45:02.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:45:02.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:45:02.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:45:02.972 [DEBUG] [Thread-73900] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:45:07.269 [DEBUG] [Thread-73902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:20.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:20.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:22.314 [DEBUG] [Thread-73903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:32.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:45:32.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:45:32.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:45:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 45, 18), 22.1, 21.98, 0.0, 41.59, 17.87, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:45:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:45:18
2025-12-12T17:45:33.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:45:33.986 [DEBUG] [Thread-73904] [transport.py] [_log()] starting thread (client mode): 0xf81e6f50
2025-12-12T17:45:33.986 [DEBUG] [Thread-73904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:45:34.005 [DEBUG] [Thread-73904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:45:34.005 [INFO] [Thread-73904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] client lang: <none>
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] server lang: <none>
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] kex follows: False
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] Compression: none
2025-12-12T17:45:34.008 [DEBUG] [Thread-73904] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:45:34.024 [DEBUG] [Thread-73904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:45:34.025 [DEBUG] [Thread-73904] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:45:34.025 [DEBUG] [Thread-73904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:45:34.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:45:34.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:45:34.025 [DEBUG] [Thread-73904] [transport.py] [_log()] userauth is OK
2025-12-12T17:45:34.025 [DEBUG] [Thread-73904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:45:34.025 [DEBUG] [Thread-73904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:45:34.025 [DEBUG] [Thread-73904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:45:34.026 [DEBUG] [Thread-73904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:45:34.040 [INFO] [Thread-73904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:45:34.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:45:34.670 [DEBUG] [Thread-73904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:45:34.670 [DEBUG] [Thread-73904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:45:34.670 [DEBUG] [Thread-73904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:45:34.711 [DEBUG] [Thread-73904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:45:34.711 [DEBUG] [Thread-73904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:45:34.713 [DEBUG] [Thread-73904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:45:34.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:45:34.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:45:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:45:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:45:34.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:45:34.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:45:34.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.656353 -999.00  +18.00  30.82     27   -0.90 1 1 2 1 1   887    0 18.95 -12.80 ----- 35.7 30.8 313.2 46.4 19.9 -27.9 20.2 -28.4 20.9 -25.2 21.1 -25.9
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.656353
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:45:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:45:18', tmtdew=22.1, humidity=21.98, cloud=0.0, wind=41.59, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:45:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:45:34.733 [DEBUG] [Thread-73904] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:45:34.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:45:34.819 [DEBUG] [Thread-73907] [transport.py] [_log()] starting thread (client mode): 0xf57bd9c0
2025-12-12T17:45:34.819 [DEBUG] [Thread-73907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:45:34.834 [DEBUG] [Thread-73907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:45:34.834 [INFO] [Thread-73907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] client lang: <none>
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] server lang: <none>
2025-12-12T17:45:34.841 [DEBUG] [Thread-73907] [transport.py] [_log()] kex follows: False
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] Compression: none
2025-12-12T17:45:34.842 [DEBUG] [Thread-73907] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:45:34.896 [DEBUG] [Thread-73907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:45:34.897 [DEBUG] [Thread-73907] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:45:34.897 [DEBUG] [Thread-73907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:45:34.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:45:34.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:45:34.953 [DEBUG] [Thread-73907] [transport.py] [_log()] userauth is OK
2025-12-12T17:45:34.953 [DEBUG] [Thread-73907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:45:34.953 [DEBUG] [Thread-73907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:45:34.953 [DEBUG] [Thread-73907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:45:34.953 [DEBUG] [Thread-73907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:45:34.968 [INFO] [Thread-73907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:45:34.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:45:34.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:45:35.807 [DEBUG] [Thread-73907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:45:35.807 [DEBUG] [Thread-73907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:45:35.855 [DEBUG] [Thread-73907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:45:35.856 [DEBUG] [Thread-73907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:45:35.864 [DEBUG] [Thread-73907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:45:35.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:45:35.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:45:35.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:45:35.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:45:35.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:45:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:45:35.895 [DEBUG] [Thread-73907] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:45:37.341 [DEBUG] [Thread-73909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:52.374 [DEBUG] [Thread-73910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:45:57.516 [DEBUG] [Thread-73911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:46:05.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:46:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:46:06.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 45, 50), 21.86, 22.33, 0.0, 33.35, 17.89, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:46:06.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:45:50
2025-12-12T17:46:06.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:46:06.860 [DEBUG] [Thread-73912] [transport.py] [_log()] starting thread (client mode): 0xf81e4580
2025-12-12T17:46:06.860 [DEBUG] [Thread-73912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:46:06.880 [DEBUG] [Thread-73912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:46:06.880 [INFO] [Thread-73912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:46:06.883 [DEBUG] [Thread-73912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] client lang: <none>
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] server lang: <none>
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] kex follows: False
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] Compression: none
2025-12-12T17:46:06.884 [DEBUG] [Thread-73912] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:46:06.902 [DEBUG] [Thread-73912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:46:06.902 [DEBUG] [Thread-73912] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:46:06.903 [DEBUG] [Thread-73912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:46:06.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:46:06.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:46:06.905 [DEBUG] [Thread-73912] [transport.py] [_log()] userauth is OK
2025-12-12T17:46:06.905 [DEBUG] [Thread-73912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:46:06.905 [DEBUG] [Thread-73912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:46:06.905 [DEBUG] [Thread-73912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:46:06.905 [DEBUG] [Thread-73912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:46:06.929 [INFO] [Thread-73912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:46:06.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:46:07.402 [DEBUG] [Thread-73914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:07.611 [DEBUG] [Thread-73912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:46:07.611 [DEBUG] [Thread-73912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:46:07.612 [DEBUG] [Thread-73912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:46:07.653 [DEBUG] [Thread-73912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:46:07.653 [DEBUG] [Thread-73912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:46:07.656 [DEBUG] [Thread-73912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:46:07.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:46:07.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:46:07.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:46:07.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:46:07.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:46:07.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:46:07.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:46:07.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:46:07.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:46:07.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.656701 -999.00  +17.70  31.15     27   -1.00 1 1 2 1 1   887    0 18.66 -16.10 ----- 37.3 31.1 316.0 45.5 20.0 -28.7 20.1 -27.9 20.8 -26.2 21.0 -26.3
2025-12-12T17:46:07.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:46:07.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:46:07.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.656701
2025-12-12T17:46:07.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:46:07.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:46:07.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:46:07.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:46:07.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:46:07.681 [DEBUG] [Thread-73912] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:46:07.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:45:50', tmtdew=21.86, humidity=22.33, cloud=0.0, wind=33.35, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:45:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:46:07.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:46:07.777 [DEBUG] [Thread-73916] [transport.py] [_log()] starting thread (client mode): 0xf574df00
2025-12-12T17:46:07.777 [DEBUG] [Thread-73916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:46:07.792 [DEBUG] [Thread-73916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:46:07.792 [INFO] [Thread-73916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:46:07.799 [DEBUG] [Thread-73916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] client lang: <none>
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] server lang: <none>
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] kex follows: False
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] Compression: none
2025-12-12T17:46:07.800 [DEBUG] [Thread-73916] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:46:07.861 [DEBUG] [Thread-73916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:46:07.861 [DEBUG] [Thread-73916] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:46:07.862 [DEBUG] [Thread-73916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:46:07.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:46:07.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:46:07.916 [DEBUG] [Thread-73916] [transport.py] [_log()] userauth is OK
2025-12-12T17:46:07.917 [DEBUG] [Thread-73916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:46:07.917 [DEBUG] [Thread-73916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:46:07.917 [DEBUG] [Thread-73916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:46:07.917 [DEBUG] [Thread-73916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:46:07.936 [INFO] [Thread-73916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:46:07.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:46:07.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:46:08.824 [DEBUG] [Thread-73916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:46:08.824 [DEBUG] [Thread-73916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:46:08.872 [DEBUG] [Thread-73916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:46:08.872 [DEBUG] [Thread-73916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:46:08.881 [DEBUG] [Thread-73916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:46:08.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:46:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:46:08.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:46:08.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:46:08.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:46:08.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:46:08.916 [DEBUG] [Thread-73916] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:46:20.679 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:20.680 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:22.432 [DEBUG] [Thread-73918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:37.492 [DEBUG] [Thread-73919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:38.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:46:38.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:46:38.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:46:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 46, 22), 21.89, 22.26, 0.0, 39.06, 17.87, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:46:39.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:46:22
2025-12-12T17:46:39.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:46:39.889 [DEBUG] [Thread-73920] [transport.py] [_log()] starting thread (client mode): 0xf81c1180
2025-12-12T17:46:39.889 [DEBUG] [Thread-73920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:46:39.909 [DEBUG] [Thread-73920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:46:39.909 [INFO] [Thread-73920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] client lang: <none>
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] server lang: <none>
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] kex follows: False
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] Compression: none
2025-12-12T17:46:39.913 [DEBUG] [Thread-73920] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:46:39.931 [DEBUG] [Thread-73920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:46:39.931 [DEBUG] [Thread-73920] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:46:39.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:46:39.932 [DEBUG] [Thread-73920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:46:39.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:46:39.934 [DEBUG] [Thread-73920] [transport.py] [_log()] userauth is OK
2025-12-12T17:46:39.935 [DEBUG] [Thread-73920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:46:39.935 [DEBUG] [Thread-73920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:46:39.935 [DEBUG] [Thread-73920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:46:39.935 [DEBUG] [Thread-73920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:46:39.972 [INFO] [Thread-73920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:46:39.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:46:40.634 [DEBUG] [Thread-73920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:46:40.634 [DEBUG] [Thread-73920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:46:40.635 [DEBUG] [Thread-73920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:46:40.676 [DEBUG] [Thread-73920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:46:40.676 [DEBUG] [Thread-73920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:46:40.679 [DEBUG] [Thread-73920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:46:40.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:46:40.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:46:40.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:46:40.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:46:40.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:46:40.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:46:40.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:46:40.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:46:40.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:46:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.657048 -999.00  +17.60  30.57     28   -1.00 1 1 2 1 1   887    0 18.56 -20.92 ----- 35.3 30.6 324.4 51.9 19.9 -28.0 20.1 -27.6 20.8 -24.8 21.0 -25.6
2025-12-12T17:46:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:46:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:46:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.657048
2025-12-12T17:46:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:46:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:46:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:46:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:46:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:46:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:46:22', tmtdew=21.89, humidity=22.26, cloud=0.0, wind=39.06, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:46:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:46:40.703 [DEBUG] [Thread-73920] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:46:40.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:46:40.804 [DEBUG] [Thread-73923] [transport.py] [_log()] starting thread (client mode): 0xf81c01c0
2025-12-12T17:46:40.804 [DEBUG] [Thread-73923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:46:40.818 [DEBUG] [Thread-73923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:46:40.818 [INFO] [Thread-73923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:46:40.825 [DEBUG] [Thread-73923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:46:40.825 [DEBUG] [Thread-73923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:46:40.825 [DEBUG] [Thread-73923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] client lang: <none>
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] server lang: <none>
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] kex follows: False
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] Compression: none
2025-12-12T17:46:40.826 [DEBUG] [Thread-73923] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:46:40.883 [DEBUG] [Thread-73923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:46:40.883 [DEBUG] [Thread-73923] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:46:40.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:46:40.884 [DEBUG] [Thread-73923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:46:40.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:46:40.939 [DEBUG] [Thread-73923] [transport.py] [_log()] userauth is OK
2025-12-12T17:46:40.939 [DEBUG] [Thread-73923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:46:40.939 [DEBUG] [Thread-73923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:46:40.939 [DEBUG] [Thread-73923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:46:40.940 [DEBUG] [Thread-73923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:46:40.959 [INFO] [Thread-73923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:46:40.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:46:40.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:46:41.801 [DEBUG] [Thread-73923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:46:41.801 [DEBUG] [Thread-73923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:46:41.849 [DEBUG] [Thread-73923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:46:41.849 [DEBUG] [Thread-73923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:46:41.858 [DEBUG] [Thread-73923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:46:41.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:46:41.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:46:41.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:46:41.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:46:41.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:46:41.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:46:41.891 [DEBUG] [Thread-73923] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:46:52.519 [DEBUG] [Thread-73925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:46:57.566 [DEBUG] [Thread-73926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:07.559 [DEBUG] [Thread-73927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:11.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:47:11.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:47:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:47:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 46, 54), 21.81, 22.38, 0.0, 43.69, 17.91, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:47:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:46:54
2025-12-12T17:47:12.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:47:12.870 [DEBUG] [Thread-73928] [transport.py] [_log()] starting thread (client mode): 0xf81c3a60
2025-12-12T17:47:12.870 [DEBUG] [Thread-73928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:47:12.892 [DEBUG] [Thread-73928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:47:12.892 [INFO] [Thread-73928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:12.895 [DEBUG] [Thread-73928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] client lang: <none>
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] server lang: <none>
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] kex follows: False
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] Compression: none
2025-12-12T17:47:12.896 [DEBUG] [Thread-73928] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:47:12.914 [DEBUG] [Thread-73928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:47:12.914 [DEBUG] [Thread-73928] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:47:12.915 [DEBUG] [Thread-73928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:47:12.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:47:12.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:47:12.917 [DEBUG] [Thread-73928] [transport.py] [_log()] userauth is OK
2025-12-12T17:47:12.917 [DEBUG] [Thread-73928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:47:12.917 [DEBUG] [Thread-73928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:47:12.917 [DEBUG] [Thread-73928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:47:12.917 [DEBUG] [Thread-73928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:47:12.950 [INFO] [Thread-73928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:47:12.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:47:13.586 [DEBUG] [Thread-73928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:47:13.586 [DEBUG] [Thread-73928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:47:13.586 [DEBUG] [Thread-73928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:47:13.627 [DEBUG] [Thread-73928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:47:13.627 [DEBUG] [Thread-73928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:47:13.630 [DEBUG] [Thread-73928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:47:13.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:47:13.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:47:13.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:47:13.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:47:13.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:47:13.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:47:13.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:47:13.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:47:13.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:47:13.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.657395 -999.00  +17.70  43.50     27   -1.00 1 1 2 1 1   887    0 18.62 -25.07 ----- 42.9 43.5 294.2 46.8 19.9 -27.8 20.1 -27.8 20.7 -24.8 21.0 -26.1
2025-12-12T17:47:13.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:47:13.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:47:13.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.657395
2025-12-12T17:47:13.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:47:13.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:47:13.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:47:13.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:47:13.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:47:13.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:46:54', tmtdew=21.81, humidity=22.38, cloud=0.0, wind=43.69, temperature=17.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:46:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:47:13.657 [DEBUG] [Thread-73928] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:47:13.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:47:13.756 [DEBUG] [Thread-73931] [transport.py] [_log()] starting thread (client mode): 0xf5771ed0
2025-12-12T17:47:13.756 [DEBUG] [Thread-73931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:47:13.770 [DEBUG] [Thread-73931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:47:13.770 [INFO] [Thread-73931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:47:13.778 [DEBUG] [Thread-73931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:47:13.778 [DEBUG] [Thread-73931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:47:13.778 [DEBUG] [Thread-73931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:47:13.778 [DEBUG] [Thread-73931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:13.778 [DEBUG] [Thread-73931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] client lang: <none>
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] server lang: <none>
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] kex follows: False
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:47:13.779 [DEBUG] [Thread-73931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:47:13.780 [DEBUG] [Thread-73931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:47:13.780 [DEBUG] [Thread-73931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:47:13.780 [DEBUG] [Thread-73931] [transport.py] [_log()] Compression: none
2025-12-12T17:47:13.780 [DEBUG] [Thread-73931] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:47:13.837 [DEBUG] [Thread-73931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:47:13.838 [DEBUG] [Thread-73931] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:47:13.838 [DEBUG] [Thread-73931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:47:13.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:47:13.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:47:13.893 [DEBUG] [Thread-73931] [transport.py] [_log()] userauth is OK
2025-12-12T17:47:13.893 [DEBUG] [Thread-73931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:47:13.893 [DEBUG] [Thread-73931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:47:13.893 [DEBUG] [Thread-73931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:47:13.894 [DEBUG] [Thread-73931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:47:13.912 [INFO] [Thread-73931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:47:13.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:47:13.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:47:14.744 [DEBUG] [Thread-73931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:47:14.744 [DEBUG] [Thread-73931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:47:14.792 [DEBUG] [Thread-73931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:47:14.792 [DEBUG] [Thread-73931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:47:14.801 [DEBUG] [Thread-73931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:47:14.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:47:14.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:47:14.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:47:14.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:47:14.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:47:14.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:47:14.835 [DEBUG] [Thread-73931] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:47:20.819 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:20.820 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:22.597 [DEBUG] [Thread-73933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:37.643 [DEBUG] [Thread-73934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:47:44.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:47:44.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:47:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 47, 26), 21.74, 22.48, 0.0, 44.36, 17.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:47:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:47:26
2025-12-12T17:47:45.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:47:45.800 [DEBUG] [Thread-73935] [transport.py] [_log()] starting thread (client mode): 0xf574eda0
2025-12-12T17:47:45.800 [DEBUG] [Thread-73935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:47:45.820 [DEBUG] [Thread-73935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:47:45.820 [INFO] [Thread-73935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:47:45.823 [DEBUG] [Thread-73935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:47:45.823 [DEBUG] [Thread-73935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] client lang: <none>
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] server lang: <none>
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] kex follows: False
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] Compression: none
2025-12-12T17:47:45.824 [DEBUG] [Thread-73935] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:47:45.842 [DEBUG] [Thread-73935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:47:45.843 [DEBUG] [Thread-73935] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:47:45.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:47:45.844 [DEBUG] [Thread-73935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:47:45.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:47:45.845 [DEBUG] [Thread-73935] [transport.py] [_log()] userauth is OK
2025-12-12T17:47:45.846 [DEBUG] [Thread-73935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:47:45.846 [DEBUG] [Thread-73935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:47:45.846 [DEBUG] [Thread-73935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:47:45.846 [DEBUG] [Thread-73935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:47:45.869 [INFO] [Thread-73935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:47:45.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:47:46.529 [DEBUG] [Thread-73935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:47:46.530 [DEBUG] [Thread-73935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:47:46.530 [DEBUG] [Thread-73935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:47:46.571 [DEBUG] [Thread-73935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:47:46.571 [DEBUG] [Thread-73935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:47:46.574 [DEBUG] [Thread-73935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:47:46.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:47:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:47:46.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:47:46.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:47:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:47:46.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:47:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:47:46.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:47:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:47:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.658079 -999.00  +17.70  36.21     28   -0.80 1 1 2 1 1   887    0 17.96 -31.44 ----- 41.2 36.2 312.2 51.0 19.9 -27.6 20.1 -27.8 20.8 -26.4 21.0 -26.1
2025-12-12T17:47:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:47:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:47:46.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.658079
2025-12-12T17:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:47:26', tmtdew=21.74, humidity=22.48, cloud=0.0, wind=44.36, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:47:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:47:46.601 [DEBUG] [Thread-73935] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:47:46.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:47:46.697 [DEBUG] [Thread-73938] [transport.py] [_log()] starting thread (client mode): 0xf57bdea0
2025-12-12T17:47:46.697 [DEBUG] [Thread-73938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:47:46.712 [DEBUG] [Thread-73938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:47:46.712 [INFO] [Thread-73938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:47:46.720 [DEBUG] [Thread-73938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:47:46.720 [DEBUG] [Thread-73938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:47:46.720 [DEBUG] [Thread-73938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:47:46.720 [DEBUG] [Thread-73938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:46.720 [DEBUG] [Thread-73938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] client lang: <none>
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] server lang: <none>
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] kex follows: False
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:47:46.721 [DEBUG] [Thread-73938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:47:46.722 [DEBUG] [Thread-73938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:47:46.722 [DEBUG] [Thread-73938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:47:46.722 [DEBUG] [Thread-73938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:47:46.722 [DEBUG] [Thread-73938] [transport.py] [_log()] Compression: none
2025-12-12T17:47:46.722 [DEBUG] [Thread-73938] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:47:46.779 [DEBUG] [Thread-73938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:47:46.780 [DEBUG] [Thread-73938] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:47:46.780 [DEBUG] [Thread-73938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:47:46.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:47:46.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:47:46.839 [DEBUG] [Thread-73938] [transport.py] [_log()] userauth is OK
2025-12-12T17:47:46.840 [DEBUG] [Thread-73938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:47:46.840 [DEBUG] [Thread-73938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:47:46.840 [DEBUG] [Thread-73938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:47:46.840 [DEBUG] [Thread-73938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:47:46.859 [INFO] [Thread-73938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:47:46.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:47:46.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:47:47.704 [DEBUG] [Thread-73938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:47:47.704 [DEBUG] [Thread-73938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:47:47.752 [DEBUG] [Thread-73938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:47:47.752 [DEBUG] [Thread-73938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:47:47.761 [DEBUG] [Thread-73938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:47:47.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:47:47.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:47:47.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:47:47.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:47:47.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:47:47.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:47:47.796 [DEBUG] [Thread-73938] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:47:52.675 [DEBUG] [Thread-73940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:47:57.625 [DEBUG] [Thread-73941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:07.719 [DEBUG] [Thread-73942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:17.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:48:17.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:48:17.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:48:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 47, 58), 21.75, 22.41, 0.0, 46.54, 17.76, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:48:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:47:58
2025-12-12T17:48:18.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:48:18.777 [DEBUG] [Thread-73943] [transport.py] [_log()] starting thread (client mode): 0xf57bdf60
2025-12-12T17:48:18.777 [DEBUG] [Thread-73943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:48:18.798 [DEBUG] [Thread-73943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:48:18.798 [INFO] [Thread-73943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] client lang: <none>
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] server lang: <none>
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] kex follows: False
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] Compression: none
2025-12-12T17:48:18.802 [DEBUG] [Thread-73943] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:48:18.820 [DEBUG] [Thread-73943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:48:18.821 [DEBUG] [Thread-73943] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:48:18.821 [DEBUG] [Thread-73943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:48:18.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:48:18.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:48:18.823 [DEBUG] [Thread-73943] [transport.py] [_log()] userauth is OK
2025-12-12T17:48:18.823 [DEBUG] [Thread-73943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:48:18.823 [DEBUG] [Thread-73943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:48:18.824 [DEBUG] [Thread-73943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:48:18.824 [DEBUG] [Thread-73943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:48:18.843 [INFO] [Thread-73943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:48:18.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:48:19.476 [DEBUG] [Thread-73943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:48:19.477 [DEBUG] [Thread-73943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:48:19.477 [DEBUG] [Thread-73943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:48:19.518 [DEBUG] [Thread-73943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:48:19.518 [DEBUG] [Thread-73943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:48:19.521 [DEBUG] [Thread-73943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:48:19.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:48:19.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:48:19.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:48:19.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:48:19.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:48:19.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:48:19.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:48:19.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:48:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:48:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.658437 -999.00  +17.70  48.25     28   -1.00 1 1 2 1 1   887    0 17.71 -33.11 ----- 42.4 48.2 289.2 54.1 19.9 -28.4 20.0 -27.9 20.7 -25.5 20.9 -26.9
2025-12-12T17:48:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:48:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:48:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.658437
2025-12-12T17:48:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:48:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:48:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:48:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:48:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:48:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:47:58', tmtdew=21.75, humidity=22.41, cloud=0.0, wind=46.54, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:48:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:48:19.549 [DEBUG] [Thread-73943] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:48:19.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:48:19.647 [DEBUG] [Thread-73946] [transport.py] [_log()] starting thread (client mode): 0xf5789990
2025-12-12T17:48:19.648 [DEBUG] [Thread-73946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:48:19.666 [DEBUG] [Thread-73946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:48:19.667 [INFO] [Thread-73946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:48:19.674 [DEBUG] [Thread-73946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:48:19.674 [DEBUG] [Thread-73946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:48:19.674 [DEBUG] [Thread-73946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:48:19.674 [DEBUG] [Thread-73946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] client lang: <none>
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] server lang: <none>
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] kex follows: False
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] Compression: none
2025-12-12T17:48:19.675 [DEBUG] [Thread-73946] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:48:19.733 [DEBUG] [Thread-73946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:48:19.734 [DEBUG] [Thread-73946] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:48:19.734 [DEBUG] [Thread-73946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:48:19.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:48:19.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:48:19.790 [DEBUG] [Thread-73946] [transport.py] [_log()] userauth is OK
2025-12-12T17:48:19.791 [DEBUG] [Thread-73946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:48:19.791 [DEBUG] [Thread-73946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:48:19.791 [DEBUG] [Thread-73946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:48:19.791 [DEBUG] [Thread-73946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:48:19.807 [INFO] [Thread-73946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:48:19.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:48:19.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:48:20.634 [DEBUG] [Thread-73946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:48:20.634 [DEBUG] [Thread-73946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:48:20.682 [DEBUG] [Thread-73946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:48:20.682 [DEBUG] [Thread-73946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:48:20.691 [DEBUG] [Thread-73946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:48:20.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:48:20.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:48:20.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:48:20.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:48:20.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:48:20.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:48:20.726 [DEBUG] [Thread-73946] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:48:20.960 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:20.961 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:22.745 [DEBUG] [Thread-73948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:37.787 [DEBUG] [Thread-73949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:50.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:48:50.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:48:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:48:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 48, 31), 21.8, 22.34, 0.0, 44.32, 17.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:48:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:48:31
2025-12-12T17:48:51.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:48:51.749 [DEBUG] [Thread-73950] [transport.py] [_log()] starting thread (client mode): 0xf574d270
2025-12-12T17:48:51.749 [DEBUG] [Thread-73950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:48:51.766 [DEBUG] [Thread-73950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:48:51.766 [INFO] [Thread-73950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:48:51.769 [DEBUG] [Thread-73950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:48:51.769 [DEBUG] [Thread-73950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] client lang: <none>
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] server lang: <none>
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] kex follows: False
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] Compression: none
2025-12-12T17:48:51.770 [DEBUG] [Thread-73950] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:48:51.785 [DEBUG] [Thread-73950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:48:51.785 [DEBUG] [Thread-73950] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:48:51.785 [DEBUG] [Thread-73950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:48:51.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:48:51.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:48:51.786 [DEBUG] [Thread-73950] [transport.py] [_log()] userauth is OK
2025-12-12T17:48:51.786 [DEBUG] [Thread-73950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:48:51.786 [DEBUG] [Thread-73950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:48:51.786 [DEBUG] [Thread-73950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:48:51.786 [DEBUG] [Thread-73950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:48:51.796 [INFO] [Thread-73950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:48:51.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:48:52.442 [DEBUG] [Thread-73950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:48:52.442 [DEBUG] [Thread-73950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:48:52.443 [DEBUG] [Thread-73950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:48:52.484 [DEBUG] [Thread-73950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:48:52.484 [DEBUG] [Thread-73950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:48:52.487 [DEBUG] [Thread-73950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:48:52.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:48:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:48:52.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:48:52.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:48:52.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:48:52.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:48:52.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:48:52.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:48:52.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:48:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.658784 -999.00  +17.30  43.58     28   -0.90 1 1 2 1 1   887    0 18.22 -34.19 ----- 51.1 43.6 309.4 55.1 19.8 -28.8 20.0 -27.9 20.7 -28.0 20.9 -26.4
2025-12-12T17:48:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:48:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:48:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.658784
2025-12-12T17:48:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:48:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:48:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:48:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:48:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:48:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:48:31', tmtdew=21.8, humidity=22.34, cloud=0.0, wind=44.32, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:48:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:48:52.511 [DEBUG] [Thread-73950] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:48:52.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:48:52.618 [DEBUG] [Thread-73953] [transport.py] [_log()] starting thread (client mode): 0xf574c400
2025-12-12T17:48:52.618 [DEBUG] [Thread-73953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:48:52.632 [DEBUG] [Thread-73953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:48:52.632 [INFO] [Thread-73953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:48:52.639 [DEBUG] [Thread-73953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:48:52.639 [DEBUG] [Thread-73953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] client lang: <none>
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] server lang: <none>
2025-12-12T17:48:52.640 [DEBUG] [Thread-73953] [transport.py] [_log()] kex follows: False
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] Compression: none
2025-12-12T17:48:52.641 [DEBUG] [Thread-73953] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:48:52.696 [DEBUG] [Thread-73953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:48:52.696 [DEBUG] [Thread-73953] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:48:52.696 [DEBUG] [Thread-73953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:48:52.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:48:52.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:48:52.753 [DEBUG] [Thread-73953] [transport.py] [_log()] userauth is OK
2025-12-12T17:48:52.753 [DEBUG] [Thread-73953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:48:52.753 [DEBUG] [Thread-73953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:48:52.753 [DEBUG] [Thread-73953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:48:52.754 [DEBUG] [Thread-73953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:48:52.776 [INFO] [Thread-73953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:48:52.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:48:52.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:48:52.816 [DEBUG] [Thread-73955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:48:53.640 [DEBUG] [Thread-73953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:48:53.640 [DEBUG] [Thread-73953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:48:53.687 [DEBUG] [Thread-73953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:48:53.687 [DEBUG] [Thread-73953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:48:53.696 [DEBUG] [Thread-73953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:48:53.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:48:53.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:48:53.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:48:53.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:48:53.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:48:53.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:48:53.729 [DEBUG] [Thread-73953] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:48:57.685 [DEBUG] [Thread-73956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:07.863 [DEBUG] [Thread-73957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:21.102 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:21.103 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:22.892 [DEBUG] [Thread-73958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:49:23.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:49:23.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:49:24.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 49, 3), 21.66, 22.54, 0.0, 47.99, 17.67, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:49:24.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:49:03
2025-12-12T17:49:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:49:24.679 [DEBUG] [Thread-73959] [transport.py] [_log()] starting thread (client mode): 0xf5788f10
2025-12-12T17:49:24.679 [DEBUG] [Thread-73959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:49:24.692 [DEBUG] [Thread-73959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:49:24.692 [INFO] [Thread-73959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] client lang: <none>
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] server lang: <none>
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] kex follows: False
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:49:24.693 [DEBUG] [Thread-73959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:49:24.694 [DEBUG] [Thread-73959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:49:24.694 [DEBUG] [Thread-73959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:49:24.694 [DEBUG] [Thread-73959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:49:24.694 [DEBUG] [Thread-73959] [transport.py] [_log()] Compression: none
2025-12-12T17:49:24.694 [DEBUG] [Thread-73959] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:49:24.709 [DEBUG] [Thread-73959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:49:24.709 [DEBUG] [Thread-73959] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:49:24.709 [DEBUG] [Thread-73959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:49:24.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:49:24.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:49:24.710 [DEBUG] [Thread-73959] [transport.py] [_log()] userauth is OK
2025-12-12T17:49:24.710 [DEBUG] [Thread-73959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:49:24.710 [DEBUG] [Thread-73959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:49:24.710 [DEBUG] [Thread-73959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:49:24.710 [DEBUG] [Thread-73959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:49:24.721 [INFO] [Thread-73959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:49:24.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:49:25.365 [DEBUG] [Thread-73959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:49:25.365 [DEBUG] [Thread-73959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:49:25.365 [DEBUG] [Thread-73959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:49:25.406 [DEBUG] [Thread-73959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:49:25.406 [DEBUG] [Thread-73959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:49:25.409 [DEBUG] [Thread-73959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:49:25.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:49:25.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:49:25.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:49:25.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:49:25.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:49:25.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:49:25.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:49:25.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:49:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:49:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.659131 -999.00  +17.30  49.72     29   -0.60 1 1 2 1 1   887    0 17.68 -43.52 ----- 48.1 49.7 315.4 58.1 19.8 -29.1 20.0 -28.7 20.6 -26.5 20.8 -26.0
2025-12-12T17:49:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:49:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:49:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.659131
2025-12-12T17:49:25.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:49:25.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:49:25.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:49:25.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:49:25.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:49:25.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:49:03', tmtdew=21.66, humidity=22.54, cloud=0.0, wind=47.99, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:49:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:49:25.430 [DEBUG] [Thread-73959] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:49:25.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:49:25.520 [DEBUG] [Thread-73962] [transport.py] [_log()] starting thread (client mode): 0xf57beb00
2025-12-12T17:49:25.520 [DEBUG] [Thread-73962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:49:25.534 [DEBUG] [Thread-73962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:49:25.534 [INFO] [Thread-73962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:49:25.541 [DEBUG] [Thread-73962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:49:25.541 [DEBUG] [Thread-73962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] client lang: <none>
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] server lang: <none>
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] kex follows: False
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] Compression: none
2025-12-12T17:49:25.542 [DEBUG] [Thread-73962] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:49:25.598 [DEBUG] [Thread-73962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:49:25.599 [DEBUG] [Thread-73962] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:49:25.599 [DEBUG] [Thread-73962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:49:25.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:49:25.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:49:25.656 [DEBUG] [Thread-73962] [transport.py] [_log()] userauth is OK
2025-12-12T17:49:25.656 [DEBUG] [Thread-73962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:49:25.656 [DEBUG] [Thread-73962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:49:25.656 [DEBUG] [Thread-73962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:49:25.656 [DEBUG] [Thread-73962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:49:25.673 [INFO] [Thread-73962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:49:25.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:49:25.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:49:26.516 [DEBUG] [Thread-73962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:49:26.516 [DEBUG] [Thread-73962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:49:26.563 [DEBUG] [Thread-73962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:49:26.563 [DEBUG] [Thread-73962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:49:26.571 [DEBUG] [Thread-73962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:49:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:49:26.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:49:26.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:49:26.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:49:26.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:49:26.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:49:26.603 [DEBUG] [Thread-73962] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:49:37.919 [DEBUG] [Thread-73964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:52.961 [DEBUG] [Thread-73965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:49:56.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:49:56.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:49:57.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 49, 35), 21.33, 23.09, 0.0, 49.37, 17.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:49:57.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:49:35
2025-12-12T17:49:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:49:57.578 [DEBUG] [Thread-73966] [transport.py] [_log()] starting thread (client mode): 0xf578ac20
2025-12-12T17:49:57.578 [DEBUG] [Thread-73966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:49:57.598 [DEBUG] [Thread-73966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:49:57.598 [INFO] [Thread-73966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] client lang: <none>
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] server lang: <none>
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] kex follows: False
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] Compression: none
2025-12-12T17:49:57.602 [DEBUG] [Thread-73966] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:49:57.621 [DEBUG] [Thread-73966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:49:57.622 [DEBUG] [Thread-73966] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:49:57.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:49:57.623 [DEBUG] [Thread-73966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:49:57.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:49:57.625 [DEBUG] [Thread-73966] [transport.py] [_log()] userauth is OK
2025-12-12T17:49:57.625 [DEBUG] [Thread-73966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:49:57.625 [DEBUG] [Thread-73966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:49:57.625 [DEBUG] [Thread-73966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:49:57.625 [DEBUG] [Thread-73966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:49:57.647 [INFO] [Thread-73966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:49:57.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:49:57.737 [DEBUG] [Thread-73968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:49:58.311 [DEBUG] [Thread-73966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:49:58.311 [DEBUG] [Thread-73966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:49:58.311 [DEBUG] [Thread-73966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:49:58.352 [DEBUG] [Thread-73966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:49:58.352 [DEBUG] [Thread-73966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:49:58.355 [DEBUG] [Thread-73966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:49:58.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:49:58.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:49:58.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:49:58.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:49:58.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:49:58.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:49:58.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:49:58.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:49:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:49:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.659479 -999.00  +17.10  57.73     29   -0.90 1 1 2 1 1   887    0 17.58 -44.91 ----- 51.9 57.7 314.4 66.0 19.8 -28.9 19.8 -28.3 20.5 -28.0 20.7 -27.1
2025-12-12T17:49:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:49:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:49:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.659479
2025-12-12T17:49:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:49:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:49:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:49:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:49:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:49:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:49:35', tmtdew=21.33, humidity=23.09, cloud=0.0, wind=49.37, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:49:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:49:58.381 [DEBUG] [Thread-73966] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:49:58.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:49:58.480 [DEBUG] [Thread-73970] [transport.py] [_log()] starting thread (client mode): 0xf813f220
2025-12-12T17:49:58.480 [DEBUG] [Thread-73970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:49:58.494 [DEBUG] [Thread-73970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:49:58.495 [INFO] [Thread-73970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:58.502 [DEBUG] [Thread-73970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] client lang: <none>
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] server lang: <none>
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] kex follows: False
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] Compression: none
2025-12-12T17:49:58.503 [DEBUG] [Thread-73970] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:49:58.558 [DEBUG] [Thread-73970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:49:58.559 [DEBUG] [Thread-73970] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:49:58.559 [DEBUG] [Thread-73970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:49:58.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:49:58.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:49:58.615 [DEBUG] [Thread-73970] [transport.py] [_log()] userauth is OK
2025-12-12T17:49:58.615 [DEBUG] [Thread-73970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:49:58.615 [DEBUG] [Thread-73970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:49:58.615 [DEBUG] [Thread-73970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:49:58.615 [DEBUG] [Thread-73970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:49:58.633 [INFO] [Thread-73970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:49:58.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:49:58.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:49:59.451 [DEBUG] [Thread-73970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:49:59.452 [DEBUG] [Thread-73970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:49:59.500 [DEBUG] [Thread-73970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:49:59.500 [DEBUG] [Thread-73970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:49:59.509 [DEBUG] [Thread-73970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:49:59.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:49:59.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:49:59.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:49:59.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:49:59.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:49:59.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:49:59.546 [DEBUG] [Thread-73970] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:50:07.991 [DEBUG] [Thread-73972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:50:21.243 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:50:21.244 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:50:23.028 [DEBUG] [Thread-73973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:50:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:50:29.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:50:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:50:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 50, 7), 21.39, 23.01, 0.0, 46.65, 17.62, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:50:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:50:07
2025-12-12T17:50:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:50:30.534 [DEBUG] [Thread-73974] [transport.py] [_log()] starting thread (client mode): 0xf574cbe0
2025-12-12T17:50:30.534 [DEBUG] [Thread-73974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:50:30.545 [DEBUG] [Thread-73974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:50:30.545 [INFO] [Thread-73974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:50:30.548 [DEBUG] [Thread-73974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] client lang: <none>
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] server lang: <none>
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] kex follows: False
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] Compression: none
2025-12-12T17:50:30.549 [DEBUG] [Thread-73974] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:50:30.566 [DEBUG] [Thread-73974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:50:30.567 [DEBUG] [Thread-73974] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:50:30.567 [DEBUG] [Thread-73974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:50:30.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:50:30.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:50:30.569 [DEBUG] [Thread-73974] [transport.py] [_log()] userauth is OK
2025-12-12T17:50:30.569 [DEBUG] [Thread-73974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:50:30.569 [DEBUG] [Thread-73974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:50:30.569 [DEBUG] [Thread-73974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:50:30.569 [DEBUG] [Thread-73974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:50:30.592 [INFO] [Thread-73974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:50:30.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:50:31.262 [DEBUG] [Thread-73974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:50:31.262 [DEBUG] [Thread-73974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:50:31.262 [DEBUG] [Thread-73974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:50:31.303 [DEBUG] [Thread-73974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:50:31.303 [DEBUG] [Thread-73974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:50:31.306 [DEBUG] [Thread-73974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:50:31.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:50:31.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:50:31.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:50:31.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:50:31.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:50:31.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:50:31.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:50:31.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:50:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:50:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.659826 -999.00  +17.30  39.69     29   -0.50 1 1 2 1 1   887    0 17.37 -47.68 ----- 40.2 39.7 310.4 56.0 19.6 -28.6 19.9 -27.3 20.4 -27.3 20.7 -26.0
2025-12-12T17:50:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:50:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:50:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.659826
2025-12-12T17:50:31.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:50:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:50:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:50:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:50:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:50:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:50:07', tmtdew=21.39, humidity=23.01, cloud=0.0, wind=46.65, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:50:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:50:31.330 [DEBUG] [Thread-73974] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:50:31.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:50:31.427 [DEBUG] [Thread-73977] [transport.py] [_log()] starting thread (client mode): 0xf575df60
2025-12-12T17:50:31.427 [DEBUG] [Thread-73977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:50:31.441 [DEBUG] [Thread-73977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:50:31.441 [INFO] [Thread-73977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:50:31.448 [DEBUG] [Thread-73977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] client lang: <none>
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] server lang: <none>
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] kex follows: False
2025-12-12T17:50:31.449 [DEBUG] [Thread-73977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:50:31.450 [DEBUG] [Thread-73977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:50:31.450 [DEBUG] [Thread-73977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:50:31.450 [DEBUG] [Thread-73977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:50:31.450 [DEBUG] [Thread-73977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:50:31.450 [DEBUG] [Thread-73977] [transport.py] [_log()] Compression: none
2025-12-12T17:50:31.450 [DEBUG] [Thread-73977] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:50:31.506 [DEBUG] [Thread-73977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:50:31.506 [DEBUG] [Thread-73977] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:50:31.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:50:31.507 [DEBUG] [Thread-73977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:50:31.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:50:31.562 [DEBUG] [Thread-73977] [transport.py] [_log()] userauth is OK
2025-12-12T17:50:31.562 [DEBUG] [Thread-73977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:50:31.562 [DEBUG] [Thread-73977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:50:31.562 [DEBUG] [Thread-73977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:50:31.563 [DEBUG] [Thread-73977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:50:31.580 [INFO] [Thread-73977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:50:31.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:50:31.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:50:32.442 [DEBUG] [Thread-73977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:50:32.442 [DEBUG] [Thread-73977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:50:32.490 [DEBUG] [Thread-73977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:50:32.490 [DEBUG] [Thread-73977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:50:32.498 [DEBUG] [Thread-73977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:50:32.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:50:32.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')
2025-12-12T17:50:32.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:50:32.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:50:32.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:50:32.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:50:32.533 [DEBUG] [Thread-73977] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:50:38.058 [DEBUG] [Thread-73979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:50:53.098 [DEBUG] [Thread-73980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:50:57.791 [DEBUG] [Thread-73981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:02.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:51:02.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:51:02.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:51:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 50, 39), 21.11, 23.64, 0.0, 44.8, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:51:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:50:39
2025-12-12T17:51:03.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:51:03.527 [DEBUG] [Thread-73982] [transport.py] [_log()] starting thread (client mode): 0xf813c070
2025-12-12T17:51:03.527 [DEBUG] [Thread-73982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:51:03.548 [DEBUG] [Thread-73982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:51:03.548 [INFO] [Thread-73982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:51:03.551 [DEBUG] [Thread-73982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:51:03.551 [DEBUG] [Thread-73982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] client lang: <none>
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] server lang: <none>
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] kex follows: False
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:51:03.552 [DEBUG] [Thread-73982] [transport.py] [_log()] Compression: none
2025-12-12T17:51:03.553 [DEBUG] [Thread-73982] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:51:03.569 [DEBUG] [Thread-73982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:51:03.569 [DEBUG] [Thread-73982] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:51:03.569 [DEBUG] [Thread-73982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:51:03.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:51:03.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:51:03.570 [DEBUG] [Thread-73982] [transport.py] [_log()] userauth is OK
2025-12-12T17:51:03.571 [DEBUG] [Thread-73982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:51:03.571 [DEBUG] [Thread-73982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:51:03.571 [DEBUG] [Thread-73982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:51:03.571 [DEBUG] [Thread-73982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:51:03.586 [INFO] [Thread-73982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:51:03.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:51:04.216 [DEBUG] [Thread-73982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:51:04.216 [DEBUG] [Thread-73982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:51:04.216 [DEBUG] [Thread-73982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:51:04.257 [DEBUG] [Thread-73982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:51:04.257 [DEBUG] [Thread-73982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:51:04.260 [DEBUG] [Thread-73982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:51:04.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:51:04.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:51:04.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:51:04.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:51:04.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:51:04.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:51:04.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:51:04.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:51:04.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:51:04.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.660173 -999.00  +17.60  42.25     29   -0.30 1 1 2 1 1   887    0 17.25 -54.37 ----- 49.3 42.2 308.6 54.2 19.7 -27.7 19.9 -27.8 20.5 -27.0 20.7 -26.3
2025-12-12T17:51:04.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:51:04.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:51:04.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.660173
2025-12-12T17:51:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:51:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:51:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:51:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:51:04.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:51:04.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:50:39', tmtdew=21.11, humidity=23.64, cloud=0.0, wind=44.8, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:50:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:51:04.285 [DEBUG] [Thread-73982] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:51:04.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:51:04.377 [DEBUG] [Thread-73985] [transport.py] [_log()] starting thread (client mode): 0xf813e4d0
2025-12-12T17:51:04.378 [DEBUG] [Thread-73985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:51:04.392 [DEBUG] [Thread-73985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:51:04.392 [INFO] [Thread-73985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:04.400 [DEBUG] [Thread-73985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] client lang: <none>
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] server lang: <none>
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] kex follows: False
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] Compression: none
2025-12-12T17:51:04.401 [DEBUG] [Thread-73985] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:51:04.457 [DEBUG] [Thread-73985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:51:04.457 [DEBUG] [Thread-73985] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:51:04.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:51:04.458 [DEBUG] [Thread-73985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:51:04.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:51:04.513 [DEBUG] [Thread-73985] [transport.py] [_log()] userauth is OK
2025-12-12T17:51:04.513 [DEBUG] [Thread-73985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:51:04.513 [DEBUG] [Thread-73985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:51:04.513 [DEBUG] [Thread-73985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:51:04.513 [DEBUG] [Thread-73985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:51:04.532 [INFO] [Thread-73985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:51:04.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:51:04.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:51:05.432 [DEBUG] [Thread-73985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:51:05.432 [DEBUG] [Thread-73985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:51:05.480 [DEBUG] [Thread-73985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:51:05.480 [DEBUG] [Thread-73985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:51:05.489 [DEBUG] [Thread-73985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:51:05.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:51:05.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:51:05.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:51:05.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:51:05.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:51:05.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:51:05.524 [DEBUG] [Thread-73985] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:51:08.126 [DEBUG] [Thread-73987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:21.384 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:21.384 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:23.176 [DEBUG] [Thread-73988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:35.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:51:35.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:51:35.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:51:36.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 51, 11), 21.05, 23.73, 0.0, 37.79, 17.57, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:51:36.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:51:11
2025-12-12T17:51:36.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:51:36.503 [DEBUG] [Thread-73989] [transport.py] [_log()] starting thread (client mode): 0xf574ff40
2025-12-12T17:51:36.503 [DEBUG] [Thread-73989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:51:36.522 [DEBUG] [Thread-73989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:51:36.522 [INFO] [Thread-73989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:51:36.525 [DEBUG] [Thread-73989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] client lang: <none>
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] server lang: <none>
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] kex follows: False
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] Compression: none
2025-12-12T17:51:36.526 [DEBUG] [Thread-73989] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:51:36.541 [DEBUG] [Thread-73989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:51:36.542 [DEBUG] [Thread-73989] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:51:36.542 [DEBUG] [Thread-73989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:51:36.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:51:36.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:51:36.544 [DEBUG] [Thread-73989] [transport.py] [_log()] userauth is OK
2025-12-12T17:51:36.545 [DEBUG] [Thread-73989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:51:36.545 [DEBUG] [Thread-73989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:51:36.545 [DEBUG] [Thread-73989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:51:36.545 [DEBUG] [Thread-73989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:51:36.564 [INFO] [Thread-73989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:51:36.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:51:37.168 [DEBUG] [Thread-73989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:51:37.168 [DEBUG] [Thread-73989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:51:37.168 [DEBUG] [Thread-73989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:51:37.209 [DEBUG] [Thread-73989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:51:37.209 [DEBUG] [Thread-73989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:51:37.212 [DEBUG] [Thread-73989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:51:37.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:51:37.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:51:37.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:51:37.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:51:37.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:51:37.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:51:37.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:51:37.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:51:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:51:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.660520 -999.00  +17.20  51.51     30   -0.50 1 1 2 1 1   887    0 17.15 -56.99 ----- 47.0 51.5 315.4 60.4 19.6 -28.4 19.8 -27.7 20.4 -25.3 20.6 -26.4
2025-12-12T17:51:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:51:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:51:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.660520
2025-12-12T17:51:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:51:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:51:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:51:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:51:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:51:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:51:11', tmtdew=21.05, humidity=23.73, cloud=0.0, wind=37.79, temperature=17.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:51:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:51:37.238 [DEBUG] [Thread-73989] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:51:37.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:51:37.333 [DEBUG] [Thread-73992] [transport.py] [_log()] starting thread (client mode): 0xf813df00
2025-12-12T17:51:37.333 [DEBUG] [Thread-73992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:51:37.347 [DEBUG] [Thread-73992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:51:37.348 [INFO] [Thread-73992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:51:37.355 [DEBUG] [Thread-73992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:51:37.355 [DEBUG] [Thread-73992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:51:37.355 [DEBUG] [Thread-73992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] client lang: <none>
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] server lang: <none>
2025-12-12T17:51:37.356 [DEBUG] [Thread-73992] [transport.py] [_log()] kex follows: False
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] Compression: none
2025-12-12T17:51:37.357 [DEBUG] [Thread-73992] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:51:37.411 [DEBUG] [Thread-73992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:51:37.412 [DEBUG] [Thread-73992] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:51:37.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:51:37.413 [DEBUG] [Thread-73992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:51:37.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:51:37.468 [DEBUG] [Thread-73992] [transport.py] [_log()] userauth is OK
2025-12-12T17:51:37.468 [DEBUG] [Thread-73992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:51:37.468 [DEBUG] [Thread-73992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:51:37.468 [DEBUG] [Thread-73992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:51:37.468 [DEBUG] [Thread-73992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:51:37.487 [INFO] [Thread-73992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:51:37.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:51:37.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:51:38.205 [DEBUG] [Thread-73994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:38.327 [DEBUG] [Thread-73992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:51:38.327 [DEBUG] [Thread-73992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:51:38.375 [DEBUG] [Thread-73992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:51:38.375 [DEBUG] [Thread-73992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:51:38.384 [DEBUG] [Thread-73992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:51:38.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:51:38.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:51:38.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:51:38.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:51:38.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:51:38.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:51:38.419 [DEBUG] [Thread-73992] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:51:53.247 [DEBUG] [Thread-73995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:51:57.857 [DEBUG] [Thread-73996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:08.278 [DEBUG] [Thread-73997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:08.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:52:08.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:52:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:52:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 51, 43), 20.79, 23.94, 0.0, 44.69, 17.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:52:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:51:43
2025-12-12T17:52:09.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:52:09.408 [DEBUG] [Thread-73998] [transport.py] [_log()] starting thread (client mode): 0xf574d930
2025-12-12T17:52:09.408 [DEBUG] [Thread-73998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:52:09.429 [DEBUG] [Thread-73998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:52:09.429 [INFO] [Thread-73998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:52:09.432 [DEBUG] [Thread-73998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:52:09.432 [DEBUG] [Thread-73998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:52:09.432 [DEBUG] [Thread-73998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] client lang: <none>
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] server lang: <none>
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] kex follows: False
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] Compression: none
2025-12-12T17:52:09.433 [DEBUG] [Thread-73998] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:52:09.451 [DEBUG] [Thread-73998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:52:09.451 [DEBUG] [Thread-73998] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:52:09.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:52:09.452 [DEBUG] [Thread-73998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:52:09.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:52:09.454 [DEBUG] [Thread-73998] [transport.py] [_log()] userauth is OK
2025-12-12T17:52:09.454 [DEBUG] [Thread-73998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:52:09.454 [DEBUG] [Thread-73998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:52:09.454 [DEBUG] [Thread-73998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:52:09.454 [DEBUG] [Thread-73998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:52:09.472 [INFO] [Thread-73998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:52:09.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:52:10.090 [DEBUG] [Thread-73998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:52:10.090 [DEBUG] [Thread-73998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:52:10.090 [DEBUG] [Thread-73998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:52:10.132 [DEBUG] [Thread-73998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:52:10.132 [DEBUG] [Thread-73998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:52:10.135 [DEBUG] [Thread-73998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:52:10.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:52:10.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:52:10.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:52:10.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:52:10.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:52:10.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:52:10.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:52:10.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:52:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:52:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.660867 -999.00  +17.20  38.12     30   -0.10 1 1 2 1 1   887    0 16.51 -67.32 ----- 38.6 38.1 309.6 47.7 19.6 -28.1 19.8 -27.5 20.4 -25.3 20.7 -26.2
2025-12-12T17:52:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:52:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:52:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.660867
2025-12-12T17:52:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:52:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:52:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:52:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:52:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:52:10.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:51:43', tmtdew=20.79, humidity=23.94, cloud=0.0, wind=44.69, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:51:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:52:10.161 [DEBUG] [Thread-73998] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:52:10.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:52:10.255 [DEBUG] [Thread-74001] [transport.py] [_log()] starting thread (client mode): 0xf578a800
2025-12-12T17:52:10.255 [DEBUG] [Thread-74001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:52:10.270 [DEBUG] [Thread-74001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:52:10.270 [INFO] [Thread-74001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:52:10.277 [DEBUG] [Thread-74001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:52:10.277 [DEBUG] [Thread-74001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] client lang: <none>
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] server lang: <none>
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] kex follows: False
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] Compression: none
2025-12-12T17:52:10.278 [DEBUG] [Thread-74001] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:52:10.335 [DEBUG] [Thread-74001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:52:10.335 [DEBUG] [Thread-74001] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:52:10.336 [DEBUG] [Thread-74001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:52:10.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:52:10.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:52:10.396 [DEBUG] [Thread-74001] [transport.py] [_log()] userauth is OK
2025-12-12T17:52:10.397 [DEBUG] [Thread-74001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:52:10.397 [DEBUG] [Thread-74001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:52:10.397 [DEBUG] [Thread-74001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:52:10.397 [DEBUG] [Thread-74001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:52:10.415 [INFO] [Thread-74001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:52:10.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:52:10.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:52:11.283 [DEBUG] [Thread-74001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:52:11.283 [DEBUG] [Thread-74001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:52:11.331 [DEBUG] [Thread-74001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:52:11.331 [DEBUG] [Thread-74001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:52:11.339 [DEBUG] [Thread-74001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:52:11.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:52:11.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:52:11.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:52:11.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:52:11.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:52:11.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:52:11.374 [DEBUG] [Thread-74001] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:52:21.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:21.528 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:23.310 [DEBUG] [Thread-74003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:38.354 [DEBUG] [Thread-74004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:41.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:52:41.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:52:41.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:52:42.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 52, 15), 20.74, 24.02, 0.0, 43.09, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:52:42.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:52:15
2025-12-12T17:52:42.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:52:42.402 [DEBUG] [Thread-74005] [transport.py] [_log()] starting thread (client mode): 0xf575d2a0
2025-12-12T17:52:42.403 [DEBUG] [Thread-74005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:52:42.422 [DEBUG] [Thread-74005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:52:42.422 [INFO] [Thread-74005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] client lang: <none>
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] server lang: <none>
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] kex follows: False
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] Compression: none
2025-12-12T17:52:42.426 [DEBUG] [Thread-74005] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:52:42.439 [DEBUG] [Thread-74005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:52:42.439 [DEBUG] [Thread-74005] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:52:42.439 [DEBUG] [Thread-74005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:52:42.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:52:42.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:52:42.440 [DEBUG] [Thread-74005] [transport.py] [_log()] userauth is OK
2025-12-12T17:52:42.440 [DEBUG] [Thread-74005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:52:42.440 [DEBUG] [Thread-74005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:52:42.440 [DEBUG] [Thread-74005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:52:42.440 [DEBUG] [Thread-74005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:52:42.456 [INFO] [Thread-74005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:52:42.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:52:43.089 [DEBUG] [Thread-74005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:52:43.090 [DEBUG] [Thread-74005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:52:43.090 [DEBUG] [Thread-74005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:52:43.130 [DEBUG] [Thread-74005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:52:43.130 [DEBUG] [Thread-74005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:52:43.133 [DEBUG] [Thread-74005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:52:43.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:52:43.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:52:43.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:52:43.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:52:43.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:52:43.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:52:43.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.661215 -999.00  +17.40  37.15     30   +0.00 1 1 2 1 1   887    0 16.31 -71.80 ----- 35.8 37.1 310.2 51.2 19.6 -28.3 -999.0 -999.0 20.4 -26.1 20.6 -26.4
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.661215
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:52:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:52:15', tmtdew=20.74, humidity=24.02, cloud=0.0, wind=43.09, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:52:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:52:43.152 [DEBUG] [Thread-74005] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:52:43.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:52:43.238 [DEBUG] [Thread-74008] [transport.py] [_log()] starting thread (client mode): 0xf575c760
2025-12-12T17:52:43.238 [DEBUG] [Thread-74008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:52:43.253 [DEBUG] [Thread-74008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:52:43.253 [INFO] [Thread-74008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:52:43.260 [DEBUG] [Thread-74008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] client lang: <none>
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] server lang: <none>
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] kex follows: False
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] Compression: none
2025-12-12T17:52:43.261 [DEBUG] [Thread-74008] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:52:43.317 [DEBUG] [Thread-74008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:52:43.317 [DEBUG] [Thread-74008] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:52:43.317 [DEBUG] [Thread-74008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:52:43.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:52:43.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:52:43.374 [DEBUG] [Thread-74008] [transport.py] [_log()] userauth is OK
2025-12-12T17:52:43.374 [DEBUG] [Thread-74008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:52:43.374 [DEBUG] [Thread-74008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:52:43.374 [DEBUG] [Thread-74008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:52:43.374 [DEBUG] [Thread-74008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:52:43.388 [INFO] [Thread-74008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:52:43.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:52:43.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:52:44.218 [DEBUG] [Thread-74008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:52:44.218 [DEBUG] [Thread-74008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:52:44.266 [DEBUG] [Thread-74008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:52:44.266 [DEBUG] [Thread-74008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:52:44.276 [DEBUG] [Thread-74008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:52:44.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:52:44.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:52:44.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:52:44.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:52:44.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:52:44.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:52:44.311 [DEBUG] [Thread-74008] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:52:53.379 [DEBUG] [Thread-74010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:52:57.913 [DEBUG] [Thread-74011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:08.423 [DEBUG] [Thread-74012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:53:14.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:53:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:53:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 52, 47), 20.5, 24.38, 0.0, 42.27, 17.74, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:53:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:52:47
2025-12-12T17:53:15.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:53:15.302 [DEBUG] [Thread-74013] [transport.py] [_log()] starting thread (client mode): 0xf57037c0
2025-12-12T17:53:15.303 [DEBUG] [Thread-74013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:53:15.322 [DEBUG] [Thread-74013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:53:15.322 [INFO] [Thread-74013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] client lang: <none>
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] server lang: <none>
2025-12-12T17:53:15.324 [DEBUG] [Thread-74013] [transport.py] [_log()] kex follows: False
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] Compression: none
2025-12-12T17:53:15.325 [DEBUG] [Thread-74013] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:53:15.337 [DEBUG] [Thread-74013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:53:15.338 [DEBUG] [Thread-74013] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:53:15.339 [DEBUG] [Thread-74013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:53:15.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:53:15.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:53:15.341 [DEBUG] [Thread-74013] [transport.py] [_log()] userauth is OK
2025-12-12T17:53:15.341 [DEBUG] [Thread-74013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:53:15.342 [DEBUG] [Thread-74013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:53:15.342 [DEBUG] [Thread-74013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:53:15.342 [DEBUG] [Thread-74013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:53:15.355 [INFO] [Thread-74013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:53:15.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:53:15.976 [DEBUG] [Thread-74013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:53:15.977 [DEBUG] [Thread-74013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:53:15.977 [DEBUG] [Thread-74013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:53:16.018 [DEBUG] [Thread-74013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:53:16.018 [DEBUG] [Thread-74013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:53:16.021 [DEBUG] [Thread-74013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:53:16.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:53:16.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:53:16.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:53:16.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:53:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:53:16.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:53:16.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:53:16.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:53:16.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:53:16.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.661909 -999.00  +17.70  29.90     30   +0.30 1 1 1 1 1   887    0 15.60 -90.11 ----- 36.4 29.9 303.7 45.2 19.7 -27.4 20.0 -27.3 20.6 -26.3 20.8 -25.4
2025-12-12T17:53:16.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:53:16.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:53:16.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.661909
2025-12-12T17:53:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:53:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:53:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:53:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:53:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:53:16.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:52:47', tmtdew=20.5, humidity=24.38, cloud=0.0, wind=42.27, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:53:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:53:16.046 [DEBUG] [Thread-74013] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:53:16.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:53:16.144 [DEBUG] [Thread-74016] [transport.py] [_log()] starting thread (client mode): 0xf578b5b0
2025-12-12T17:53:16.144 [DEBUG] [Thread-74016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:53:16.159 [DEBUG] [Thread-74016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:53:16.159 [INFO] [Thread-74016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:53:16.167 [DEBUG] [Thread-74016] [transport.py] [_log()] client lang: <none>
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] server lang: <none>
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] kex follows: False
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] Compression: none
2025-12-12T17:53:16.168 [DEBUG] [Thread-74016] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:53:16.225 [DEBUG] [Thread-74016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:53:16.226 [DEBUG] [Thread-74016] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:53:16.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:53:16.227 [DEBUG] [Thread-74016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:53:16.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:53:16.282 [DEBUG] [Thread-74016] [transport.py] [_log()] userauth is OK
2025-12-12T17:53:16.282 [DEBUG] [Thread-74016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:53:16.282 [DEBUG] [Thread-74016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:53:16.282 [DEBUG] [Thread-74016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:53:16.282 [DEBUG] [Thread-74016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:53:16.301 [INFO] [Thread-74016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:53:16.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:53:16.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:53:17.175 [DEBUG] [Thread-74016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:53:17.175 [DEBUG] [Thread-74016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:53:17.223 [DEBUG] [Thread-74016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:53:17.223 [DEBUG] [Thread-74016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:53:17.231 [DEBUG] [Thread-74016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:53:17.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:53:17.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:53:17.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:53:17.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:53:17.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:53:17.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:53:17.262 [DEBUG] [Thread-74016] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:53:21.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:21.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:23.451 [DEBUG] [Thread-74018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:38.492 [DEBUG] [Thread-74019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:47.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:53:47.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:53:47.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:53:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 53, 19), 20.25, 24.74, 0.0, 40.7, 17.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:53:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:53:19
2025-12-12T17:53:48.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:53:48.249 [DEBUG] [Thread-74020] [transport.py] [_log()] starting thread (client mode): 0xf575e770
2025-12-12T17:53:48.249 [DEBUG] [Thread-74020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:53:48.270 [DEBUG] [Thread-74020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:53:48.271 [INFO] [Thread-74020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:53:48.274 [DEBUG] [Thread-74020] [transport.py] [_log()] client lang: <none>
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] server lang: <none>
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] kex follows: False
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] Compression: none
2025-12-12T17:53:48.275 [DEBUG] [Thread-74020] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:53:48.294 [DEBUG] [Thread-74020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:53:48.295 [DEBUG] [Thread-74020] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:53:48.296 [DEBUG] [Thread-74020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:53:48.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:53:48.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:53:48.298 [DEBUG] [Thread-74020] [transport.py] [_log()] userauth is OK
2025-12-12T17:53:48.298 [DEBUG] [Thread-74020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:53:48.298 [DEBUG] [Thread-74020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:53:48.298 [DEBUG] [Thread-74020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:53:48.298 [DEBUG] [Thread-74020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:53:48.322 [INFO] [Thread-74020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:53:48.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:53:48.975 [DEBUG] [Thread-74020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:53:48.976 [DEBUG] [Thread-74020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:53:48.976 [DEBUG] [Thread-74020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:53:49.017 [DEBUG] [Thread-74020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:53:49.017 [DEBUG] [Thread-74020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:53:49.020 [DEBUG] [Thread-74020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:53:49.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:53:49.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:53:49.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:53:49.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:53:49.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:53:49.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:53:49.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:53:49.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:53:49.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:53:49.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.662256 -999.00  +17.50  37.59     31   +0.20 1 1 2 1 1   887    0 15.87 -95.52 ----- 45.0 37.6 301.0 53.0 19.8 -27.7 19.9 -28.5 20.6 -27.5 20.8 -26.2
2025-12-12T17:53:49.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:53:49.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:53:49.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.662256
2025-12-12T17:53:49.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:53:49.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:53:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:53:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:53:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:53:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:53:19', tmtdew=20.25, humidity=24.74, cloud=0.0, wind=40.7, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:53:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:53:49.044 [DEBUG] [Thread-74020] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:53:49.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:53:49.154 [DEBUG] [Thread-74023] [transport.py] [_log()] starting thread (client mode): 0xf575ef20
2025-12-12T17:53:49.154 [DEBUG] [Thread-74023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:53:49.169 [DEBUG] [Thread-74023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:53:49.169 [INFO] [Thread-74023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:53:49.176 [DEBUG] [Thread-74023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:53:49.176 [DEBUG] [Thread-74023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] client lang: <none>
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] server lang: <none>
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] kex follows: False
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] Compression: none
2025-12-12T17:53:49.177 [DEBUG] [Thread-74023] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:53:49.237 [DEBUG] [Thread-74023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:53:49.237 [DEBUG] [Thread-74023] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:53:49.238 [DEBUG] [Thread-74023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:53:49.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:53:49.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:53:49.293 [DEBUG] [Thread-74023] [transport.py] [_log()] userauth is OK
2025-12-12T17:53:49.293 [DEBUG] [Thread-74023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:53:49.293 [DEBUG] [Thread-74023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:53:49.293 [DEBUG] [Thread-74023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:53:49.293 [DEBUG] [Thread-74023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:53:49.315 [INFO] [Thread-74023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:53:49.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:53:49.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:53:50.224 [DEBUG] [Thread-74023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:53:50.224 [DEBUG] [Thread-74023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:53:50.272 [DEBUG] [Thread-74023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:53:50.272 [DEBUG] [Thread-74023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:53:50.281 [DEBUG] [Thread-74023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:53:50.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:53:50.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:53:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:53:50.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:53:50.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:53:50.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:53:50.319 [DEBUG] [Thread-74023] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:53:53.520 [DEBUG] [Thread-74025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:53:57.967 [DEBUG] [Thread-74026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:08.562 [DEBUG] [Thread-74027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:20.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:54:20.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:54:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 53, 51), 19.87, 25.37, 0.0, 36.21, 17.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:54:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:53:51
2025-12-12T17:54:21.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:54:21.294 [DEBUG] [Thread-74028] [transport.py] [_log()] starting thread (client mode): 0xf813f640
2025-12-12T17:54:21.294 [DEBUG] [Thread-74028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:54:21.313 [DEBUG] [Thread-74028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:54:21.313 [INFO] [Thread-74028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] client lang: <none>
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] server lang: <none>
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] kex follows: False
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] Compression: none
2025-12-12T17:54:21.315 [DEBUG] [Thread-74028] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:54:21.328 [DEBUG] [Thread-74028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:54:21.328 [DEBUG] [Thread-74028] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:54:21.329 [DEBUG] [Thread-74028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:54:21.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:54:21.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:54:21.330 [DEBUG] [Thread-74028] [transport.py] [_log()] userauth is OK
2025-12-12T17:54:21.331 [DEBUG] [Thread-74028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:54:21.331 [DEBUG] [Thread-74028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:54:21.331 [DEBUG] [Thread-74028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:54:21.331 [DEBUG] [Thread-74028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:54:21.355 [INFO] [Thread-74028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:54:21.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:54:21.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:21.820 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:22.023 [DEBUG] [Thread-74028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:54:22.023 [DEBUG] [Thread-74028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:54:22.023 [DEBUG] [Thread-74028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:54:22.064 [DEBUG] [Thread-74028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:54:22.064 [DEBUG] [Thread-74028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:54:22.067 [DEBUG] [Thread-74028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:54:22.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:54:22.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:54:22.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:54:22.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:54:22.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:54:22.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:54:22.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:54:22.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:54:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:54:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.662604 -999.00  +17.30  40.11     31   +0.20 1 1 2 1 1   887    0 15.56 -98.23 ----- 38.4 40.1 301.0 52.0 19.6 -28.0 19.9 -27.6 20.4 -25.6 20.7 -26.6
2025-12-12T17:54:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:54:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:54:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.662604
2025-12-12T17:54:22.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:54:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:54:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:54:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:54:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:54:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:53:51', tmtdew=19.87, humidity=25.37, cloud=0.0, wind=36.21, temperature=17.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:54:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:54:22.093 [DEBUG] [Thread-74028] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:54:22.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:54:22.189 [DEBUG] [Thread-74031] [transport.py] [_log()] starting thread (client mode): 0xf575f490
2025-12-12T17:54:22.189 [DEBUG] [Thread-74031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:54:22.204 [DEBUG] [Thread-74031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:54:22.205 [INFO] [Thread-74031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:54:22.212 [DEBUG] [Thread-74031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:54:22.212 [DEBUG] [Thread-74031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] client lang: <none>
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] server lang: <none>
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] kex follows: False
2025-12-12T17:54:22.213 [DEBUG] [Thread-74031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:54:22.214 [DEBUG] [Thread-74031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:54:22.214 [DEBUG] [Thread-74031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:54:22.214 [DEBUG] [Thread-74031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:54:22.214 [DEBUG] [Thread-74031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:54:22.214 [DEBUG] [Thread-74031] [transport.py] [_log()] Compression: none
2025-12-12T17:54:22.214 [DEBUG] [Thread-74031] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:54:22.268 [DEBUG] [Thread-74031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:54:22.268 [DEBUG] [Thread-74031] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:54:22.269 [DEBUG] [Thread-74031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:54:22.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:54:22.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:54:22.324 [DEBUG] [Thread-74031] [transport.py] [_log()] userauth is OK
2025-12-12T17:54:22.324 [DEBUG] [Thread-74031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:54:22.325 [DEBUG] [Thread-74031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:54:22.325 [DEBUG] [Thread-74031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:54:22.325 [DEBUG] [Thread-74031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:54:22.344 [INFO] [Thread-74031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:54:22.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:54:22.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:54:23.186 [DEBUG] [Thread-74031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:54:23.186 [DEBUG] [Thread-74031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:54:23.234 [DEBUG] [Thread-74031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:54:23.234 [DEBUG] [Thread-74031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:54:23.243 [DEBUG] [Thread-74031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:54:23.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:54: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')
2025-12-12T17:54: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
2025-12-12T17:54:23.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:54:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:54:23.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:54:23.277 [DEBUG] [Thread-74031] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:54:23.595 [DEBUG] [Thread-74033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:38.637 [DEBUG] [Thread-74034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:54:53.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:54: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
2025-12-12T17:54:53.659 [DEBUG] [Thread-74035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:54:53.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 54, 23), 20.0, 25.22, 0.0, 35.61, 17.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:54:53.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:54:23
2025-12-12T17:54:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:54:54.245 [DEBUG] [Thread-74036] [transport.py] [_log()] starting thread (client mode): 0xf575fd90
2025-12-12T17:54:54.245 [DEBUG] [Thread-74036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:54:54.266 [DEBUG] [Thread-74036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:54:54.266 [INFO] [Thread-74036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:54:54.269 [DEBUG] [Thread-74036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] client lang: <none>
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] server lang: <none>
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] kex follows: False
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:54:54.270 [DEBUG] [Thread-74036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:54:54.271 [DEBUG] [Thread-74036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:54:54.271 [DEBUG] [Thread-74036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:54:54.271 [DEBUG] [Thread-74036] [transport.py] [_log()] Compression: none
2025-12-12T17:54:54.271 [DEBUG] [Thread-74036] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:54:54.289 [DEBUG] [Thread-74036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:54:54.289 [DEBUG] [Thread-74036] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:54:54.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:54:54.290 [DEBUG] [Thread-74036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:54:54.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:54:54.292 [DEBUG] [Thread-74036] [transport.py] [_log()] userauth is OK
2025-12-12T17:54:54.292 [DEBUG] [Thread-74036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:54:54.292 [DEBUG] [Thread-74036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:54:54.292 [DEBUG] [Thread-74036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:54:54.292 [DEBUG] [Thread-74036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:54:54.316 [INFO] [Thread-74036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:54:54.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:54:54.900 [DEBUG] [Thread-74036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:54:54.901 [DEBUG] [Thread-74036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:54:54.901 [DEBUG] [Thread-74036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:54:54.942 [DEBUG] [Thread-74036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:54:54.942 [DEBUG] [Thread-74036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:54:54.945 [DEBUG] [Thread-74036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:54:54.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:54:54.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:54:54.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:54:54.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:54:54.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:54:54.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:54:54.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:54:54.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:54:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:54:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.662951 -999.00  +17.00  47.17     31   +0.00 1 1 2 1 1   887    0 15.37 -99.14 ----- 46.0 47.2 295.0 59.0 19.6 -27.9 19.8 -28.0 20.4 -25.6 20.6 -26.2
2025-12-12T17:54:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:54:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:54:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.662951
2025-12-12T17:54:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:54:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:54:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:54:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:54:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:54:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:54:23', tmtdew=20.0, humidity=25.22, cloud=0.0, wind=35.61, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:54:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:54:54.969 [DEBUG] [Thread-74036] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:54:55.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:54:55.066 [DEBUG] [Thread-74039] [transport.py] [_log()] starting thread (client mode): 0xf57be3e0
2025-12-12T17:54:55.066 [DEBUG] [Thread-74039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:54:55.080 [DEBUG] [Thread-74039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:54:55.081 [INFO] [Thread-74039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:54:55.088 [DEBUG] [Thread-74039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:54:55.088 [DEBUG] [Thread-74039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:54:55.088 [DEBUG] [Thread-74039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:54:55.088 [DEBUG] [Thread-74039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:55.088 [DEBUG] [Thread-74039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:54:55.088 [DEBUG] [Thread-74039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] client lang: <none>
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] server lang: <none>
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] kex follows: False
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:54:55.089 [DEBUG] [Thread-74039] [transport.py] [_log()] Compression: none
2025-12-12T17:54:55.090 [DEBUG] [Thread-74039] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:54:55.147 [DEBUG] [Thread-74039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:54:55.148 [DEBUG] [Thread-74039] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:54:55.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:54:55.149 [DEBUG] [Thread-74039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:54:55.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:54:55.204 [DEBUG] [Thread-74039] [transport.py] [_log()] userauth is OK
2025-12-12T17:54:55.204 [DEBUG] [Thread-74039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:54:55.204 [DEBUG] [Thread-74039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:54:55.204 [DEBUG] [Thread-74039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:54:55.204 [DEBUG] [Thread-74039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:54:55.223 [INFO] [Thread-74039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:54:55.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:54:55.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:54:56.093 [DEBUG] [Thread-74039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:54:56.093 [DEBUG] [Thread-74039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:54:56.140 [DEBUG] [Thread-74039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:54:56.140 [DEBUG] [Thread-74039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:54:56.148 [DEBUG] [Thread-74039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:54:56.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:54:56.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:54:56.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:54:56.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:54:56.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:54:56.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:54:56.180 [DEBUG] [Thread-74039] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:54:58.028 [DEBUG] [Thread-74041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:08.690 [DEBUG] [Thread-74042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:21.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:21.968 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:23.735 [DEBUG] [Thread-74043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:55:26.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:55:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:55:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 54, 55), 20.17, 25.02, 0.0, 38.96, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:55:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:54:55
2025-12-12T17:55:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:55:27.172 [DEBUG] [Thread-74044] [transport.py] [_log()] starting thread (client mode): 0xf5703610
2025-12-12T17:55:27.173 [DEBUG] [Thread-74044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:55:27.188 [DEBUG] [Thread-74044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:55:27.188 [INFO] [Thread-74044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] client lang: <none>
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] server lang: <none>
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] kex follows: False
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] Compression: none
2025-12-12T17:55:27.191 [DEBUG] [Thread-74044] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:55:27.207 [DEBUG] [Thread-74044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:55:27.208 [DEBUG] [Thread-74044] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:55:27.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:55:27.208 [DEBUG] [Thread-74044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:55:27.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:55:27.210 [DEBUG] [Thread-74044] [transport.py] [_log()] userauth is OK
2025-12-12T17:55:27.210 [DEBUG] [Thread-74044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:55:27.210 [DEBUG] [Thread-74044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:55:27.211 [DEBUG] [Thread-74044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:55:27.211 [DEBUG] [Thread-74044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:55:27.228 [INFO] [Thread-74044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:55:27.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:55:27.835 [DEBUG] [Thread-74044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:55:27.835 [DEBUG] [Thread-74044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:55:27.835 [DEBUG] [Thread-74044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:55:27.877 [DEBUG] [Thread-74044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:55:27.877 [DEBUG] [Thread-74044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:55:27.879 [DEBUG] [Thread-74044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:55:27.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:55:27.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:55:27.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:55:27.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:55:27.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:55:27.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:55:27.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.663298 -999.00  +16.80  39.00     32   +0.10 1 1 2 1 1   887    0 14.64 -107.37 ----- 34.5 39.0 304.8 51.6 19.6 -28.2 19.7 -27.4 20.3 -24.8 20.5 -26.5
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.663298
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:55:27.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:54:55', tmtdew=20.17, humidity=25.02, cloud=0.0, wind=38.96, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:55:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:55:27.892 [DEBUG] [Thread-74044] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:55:27.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:55:27.980 [DEBUG] [Thread-74047] [transport.py] [_log()] starting thread (client mode): 0xf5701150
2025-12-12T17:55:27.980 [DEBUG] [Thread-74047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:55:27.995 [DEBUG] [Thread-74047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:55:27.995 [INFO] [Thread-74047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:55:28.003 [DEBUG] [Thread-74047] [transport.py] [_log()] client lang: <none>
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] server lang: <none>
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] kex follows: False
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] Compression: none
2025-12-12T17:55:28.004 [DEBUG] [Thread-74047] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:55:28.057 [DEBUG] [Thread-74047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:55:28.058 [DEBUG] [Thread-74047] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:55:28.058 [DEBUG] [Thread-74047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:55:28.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:55:28.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:55:28.115 [DEBUG] [Thread-74047] [transport.py] [_log()] userauth is OK
2025-12-12T17:55:28.115 [DEBUG] [Thread-74047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:55:28.115 [DEBUG] [Thread-74047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:55:28.115 [DEBUG] [Thread-74047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:55:28.115 [DEBUG] [Thread-74047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:55:28.129 [INFO] [Thread-74047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:55:28.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:55:28.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:55:29.009 [DEBUG] [Thread-74047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:55:29.009 [DEBUG] [Thread-74047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:55:29.057 [DEBUG] [Thread-74047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:55:29.057 [DEBUG] [Thread-74047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:55:29.065 [DEBUG] [Thread-74047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:55:29.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:55:29.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:55:29.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:55:29.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:55:29.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:55:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:55:29.097 [DEBUG] [Thread-74047] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:55:38.772 [DEBUG] [Thread-74049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:53.824 [DEBUG] [Thread-74050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:58.080 [DEBUG] [Thread-74051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:55:59.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:55:59.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:55:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:55:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 55, 27), 20.32, 24.79, 0.0, 43.72, 17.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:55:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:55:27
2025-12-12T17:55:59.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:56:00.113 [DEBUG] [Thread-74052] [transport.py] [_log()] starting thread (client mode): 0xf81c1cf0
2025-12-12T17:56:00.113 [DEBUG] [Thread-74052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:56:00.133 [DEBUG] [Thread-74052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:56:00.133 [INFO] [Thread-74052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] client lang: <none>
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] server lang: <none>
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] kex follows: False
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] Compression: none
2025-12-12T17:56:00.136 [DEBUG] [Thread-74052] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:56:00.154 [DEBUG] [Thread-74052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:56:00.154 [DEBUG] [Thread-74052] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:56:00.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:56:00.154 [DEBUG] [Thread-74052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:56:00.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:56:00.155 [DEBUG] [Thread-74052] [transport.py] [_log()] userauth is OK
2025-12-12T17:56:00.155 [DEBUG] [Thread-74052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:56:00.155 [DEBUG] [Thread-74052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:56:00.155 [DEBUG] [Thread-74052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:56:00.155 [DEBUG] [Thread-74052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:56:00.170 [INFO] [Thread-74052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:56:00.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:56:00.796 [DEBUG] [Thread-74052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:56:00.796 [DEBUG] [Thread-74052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:56:00.796 [DEBUG] [Thread-74052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:56:00.838 [DEBUG] [Thread-74052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:56:00.838 [DEBUG] [Thread-74052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:56:00.840 [DEBUG] [Thread-74052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:56:00.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:56:00.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:56:00.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:56:00.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:56:00.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:56:00.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:56:00.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.663645 -999.00  +17.00  42.40     32   +0.20 1 1 2 1 1   887    0 14.76 -117.21 ----- 40.7 42.4 310.2 48.0 19.5 -27.8 19.7 -27.2 20.3 -27.9 20.5 -25.8
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.663645
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:56:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:56:00.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:56:00.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:55:27', tmtdew=20.32, humidity=24.79, cloud=0.0, wind=43.72, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:55:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:56:00.858 [DEBUG] [Thread-74052] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:56:00.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:56:00.944 [DEBUG] [Thread-74055] [transport.py] [_log()] starting thread (client mode): 0xf575dd80
2025-12-12T17:56:00.944 [DEBUG] [Thread-74055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:56:00.959 [DEBUG] [Thread-74055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:56:00.959 [INFO] [Thread-74055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:56:00.966 [DEBUG] [Thread-74055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] client lang: <none>
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] server lang: <none>
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] kex follows: False
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] Compression: none
2025-12-12T17:56:00.967 [DEBUG] [Thread-74055] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:56:01.026 [DEBUG] [Thread-74055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:56:01.026 [DEBUG] [Thread-74055] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:56:01.026 [DEBUG] [Thread-74055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:56:01.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:56:01.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:56:01.083 [DEBUG] [Thread-74055] [transport.py] [_log()] userauth is OK
2025-12-12T17:56:01.083 [DEBUG] [Thread-74055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:56:01.083 [DEBUG] [Thread-74055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:56:01.083 [DEBUG] [Thread-74055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:56:01.083 [DEBUG] [Thread-74055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:56:01.102 [INFO] [Thread-74055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:56:01.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:56:01.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:56:01.979 [DEBUG] [Thread-74055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:56:01.979 [DEBUG] [Thread-74055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:56:02.027 [DEBUG] [Thread-74055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:56:02.027 [DEBUG] [Thread-74055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:56:02.036 [DEBUG] [Thread-74055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:56:02.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:56:02.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:56:02.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:56:02.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:56:02.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:56:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:56:02.070 [DEBUG] [Thread-74055] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:56:08.851 [DEBUG] [Thread-74057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:56:22.109 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:56:22.110 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:56:23.898 [DEBUG] [Thread-74058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:56:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:56:32.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:56:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:56:32.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 55, 59), 20.02, 25.42, 0.0, 43.16, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:56:32.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:55:59
2025-12-12T17:56:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:56:33.179 [DEBUG] [Thread-74059] [transport.py] [_log()] starting thread (client mode): 0xf5700580
2025-12-12T17:56:33.179 [DEBUG] [Thread-74059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:56:33.197 [DEBUG] [Thread-74059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:56:33.197 [INFO] [Thread-74059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] client lang: <none>
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] server lang: <none>
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] kex follows: False
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] Compression: none
2025-12-12T17:56:33.200 [DEBUG] [Thread-74059] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:56:33.215 [DEBUG] [Thread-74059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:56:33.216 [DEBUG] [Thread-74059] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:56:33.216 [DEBUG] [Thread-74059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:56:33.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:56:33.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:56:33.217 [DEBUG] [Thread-74059] [transport.py] [_log()] userauth is OK
2025-12-12T17:56:33.217 [DEBUG] [Thread-74059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:56:33.217 [DEBUG] [Thread-74059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:56:33.217 [DEBUG] [Thread-74059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:56:33.217 [DEBUG] [Thread-74059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:56:33.227 [INFO] [Thread-74059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:56:33.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:56:33.785 [DEBUG] [Thread-74059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:56:33.785 [DEBUG] [Thread-74059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:56:33.785 [DEBUG] [Thread-74059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:56:33.825 [DEBUG] [Thread-74059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:56:33.825 [DEBUG] [Thread-74059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:56:33.829 [DEBUG] [Thread-74059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:56:33.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:56:33.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:56:33.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:56:33.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:56:33.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:56:33.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:56:33.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:56:33.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:56:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:56:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.663992 -999.00  +17.10  40.87     31   +0.20 1 1 2 1 1   887    0 14.75 -117.39 ----- 37.5 40.9 298.7 54.5 19.5 -27.9 19.7 -28.2 20.3 -26.2 20.5 -26.4
2025-12-12T17:56:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:56:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:56:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.663992
2025-12-12T17:56:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:56:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:56:33.849 [DEBUG] [Thread-74059] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:56:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:56:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:56:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:56:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:55:59', tmtdew=20.02, humidity=25.42, cloud=0.0, wind=43.16, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:56:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:56:33.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:56:33.944 [DEBUG] [Thread-74062] [transport.py] [_log()] starting thread (client mode): 0xf81550c0
2025-12-12T17:56:33.944 [DEBUG] [Thread-74062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:56:33.958 [DEBUG] [Thread-74062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:56:33.958 [INFO] [Thread-74062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:56:33.966 [DEBUG] [Thread-74062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:56:33.966 [DEBUG] [Thread-74062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] client lang: <none>
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] server lang: <none>
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] kex follows: False
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] Compression: none
2025-12-12T17:56:33.967 [DEBUG] [Thread-74062] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:56:34.025 [DEBUG] [Thread-74062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:56:34.025 [DEBUG] [Thread-74062] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:56:34.025 [DEBUG] [Thread-74062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:56:34.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:56:34.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:56:34.082 [DEBUG] [Thread-74062] [transport.py] [_log()] userauth is OK
2025-12-12T17:56:34.082 [DEBUG] [Thread-74062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:56:34.082 [DEBUG] [Thread-74062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:56:34.082 [DEBUG] [Thread-74062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:56:34.082 [DEBUG] [Thread-74062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:56:34.096 [INFO] [Thread-74062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:56:34.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:56:34.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:56:34.934 [DEBUG] [Thread-74062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:56:34.934 [DEBUG] [Thread-74062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:56:34.982 [DEBUG] [Thread-74062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:56:34.982 [DEBUG] [Thread-74062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:56:34.990 [DEBUG] [Thread-74062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:56:34.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:56:34.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:56: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') -> 00000000
2025-12-12T17:56:35.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:56:35.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:56:35.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:56:35.021 [DEBUG] [Thread-74062] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:56:38.929 [DEBUG] [Thread-74064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:56:53.977 [DEBUG] [Thread-74065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:56:58.139 [DEBUG] [Thread-74066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:05.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:57:05.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:57:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:57:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 56, 31), 19.9, 25.6, 0.0, 41.16, 17.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:57:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:56:31
2025-12-12T17:57:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:57:06.052 [DEBUG] [Thread-74067] [transport.py] [_log()] starting thread (client mode): 0xf5702fb0
2025-12-12T17:57:06.052 [DEBUG] [Thread-74067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:57:06.072 [DEBUG] [Thread-74067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:57:06.072 [INFO] [Thread-74067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:57:06.075 [DEBUG] [Thread-74067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:57:06.075 [DEBUG] [Thread-74067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:57:06.075 [DEBUG] [Thread-74067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:57:06.075 [DEBUG] [Thread-74067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] client lang: <none>
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] server lang: <none>
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] kex follows: False
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] Compression: none
2025-12-12T17:57:06.076 [DEBUG] [Thread-74067] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:57:06.093 [DEBUG] [Thread-74067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:57:06.094 [DEBUG] [Thread-74067] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:57:06.094 [DEBUG] [Thread-74067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:57:06.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:57:06.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:57:06.096 [DEBUG] [Thread-74067] [transport.py] [_log()] userauth is OK
2025-12-12T17:57:06.096 [DEBUG] [Thread-74067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:57:06.097 [DEBUG] [Thread-74067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:57:06.097 [DEBUG] [Thread-74067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:57:06.097 [DEBUG] [Thread-74067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:57:06.114 [INFO] [Thread-74067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:57:06.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:57:06.755 [DEBUG] [Thread-74067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:57:06.755 [DEBUG] [Thread-74067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:57:06.756 [DEBUG] [Thread-74067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:57:06.797 [DEBUG] [Thread-74067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:57:06.797 [DEBUG] [Thread-74067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:57:06.799 [DEBUG] [Thread-74067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:57:06.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:57:06.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:57:06.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:57:06.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:57:06.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:57:06.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:57:06.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:57:06.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:57:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:57:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.664340 -999.00  +17.00  43.35     31   +0.10 1 1 2 1 1   887    0 14.94 -117.89 ----- 33.7 43.4 299.2 54.3 19.4 -28.1 19.6 -27.7 20.2 -26.5 20.3 -26.6
2025-12-12T17:57:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:57:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:57:06.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.664340
2025-12-12T17:57:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:57:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:57:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:57:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:57:06.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:57:06.822 [DEBUG] [Thread-74067] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:57:06.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:56:31', tmtdew=19.9, humidity=25.6, cloud=0.0, wind=41.16, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:56:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:57:06.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:57:06.911 [DEBUG] [Thread-74070] [transport.py] [_log()] starting thread (client mode): 0xf5773700
2025-12-12T17:57:06.911 [DEBUG] [Thread-74070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:57:06.928 [DEBUG] [Thread-74070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:57:06.929 [INFO] [Thread-74070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:57:06.936 [DEBUG] [Thread-74070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:57:06.936 [DEBUG] [Thread-74070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:57:06.936 [DEBUG] [Thread-74070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:57:06.936 [DEBUG] [Thread-74070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:06.936 [DEBUG] [Thread-74070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] client lang: <none>
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] server lang: <none>
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] kex follows: False
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] Compression: none
2025-12-12T17:57:06.937 [DEBUG] [Thread-74070] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:57:06.994 [DEBUG] [Thread-74070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:57:06.995 [DEBUG] [Thread-74070] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:57:06.995 [DEBUG] [Thread-74070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:57:06.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:57:06.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:57:07.049 [DEBUG] [Thread-74070] [transport.py] [_log()] userauth is OK
2025-12-12T17:57:07.049 [DEBUG] [Thread-74070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:57:07.050 [DEBUG] [Thread-74070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:57:07.050 [DEBUG] [Thread-74070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:57:07.050 [DEBUG] [Thread-74070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:57:07.068 [INFO] [Thread-74070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:57:07.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:57:07.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:57:07.947 [DEBUG] [Thread-74070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:57:07.948 [DEBUG] [Thread-74070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:57:07.995 [DEBUG] [Thread-74070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:57:07.995 [DEBUG] [Thread-74070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:57:08.009 [DEBUG] [Thread-74070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:57:08.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:57:08.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:57:08.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:57:08.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:57:08.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:57:08.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:57:08.048 [DEBUG] [Thread-74070] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:57:09.009 [DEBUG] [Thread-74072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:22.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:22.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:24.054 [DEBUG] [Thread-74073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:38.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:57:38.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:57:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:57:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 57, 35), 19.99, 25.69, 0.0, 41.22, 17.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:57:38.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:57:35
2025-12-12T17:57:38.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:57:39.032 [DEBUG] [Thread-74074] [transport.py] [_log()] starting thread (client mode): 0xf5772920
2025-12-12T17:57:39.032 [DEBUG] [Thread-74074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:57:39.052 [DEBUG] [Thread-74074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:57:39.052 [INFO] [Thread-74074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:39.055 [DEBUG] [Thread-74074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] client lang: <none>
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] server lang: <none>
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] kex follows: False
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] Compression: none
2025-12-12T17:57:39.056 [DEBUG] [Thread-74074] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:57:39.074 [DEBUG] [Thread-74074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:57:39.074 [DEBUG] [Thread-74074] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:57:39.075 [DEBUG] [Thread-74074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:57:39.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:57:39.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:57:39.087 [DEBUG] [Thread-74076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:39.117 [DEBUG] [Thread-74074] [transport.py] [_log()] userauth is OK
2025-12-12T17:57:39.117 [DEBUG] [Thread-74074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:57:39.117 [DEBUG] [Thread-74074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:57:39.117 [DEBUG] [Thread-74074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:57:39.118 [DEBUG] [Thread-74074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:57:39.139 [INFO] [Thread-74074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:57:39.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:57:39.791 [DEBUG] [Thread-74074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:57:39.791 [DEBUG] [Thread-74074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:57:39.792 [DEBUG] [Thread-74074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:57:39.833 [DEBUG] [Thread-74074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:57:39.833 [DEBUG] [Thread-74074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:57:39.836 [DEBUG] [Thread-74074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:57:39.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:57:39.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:57:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:57:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:57:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:57:39.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:57:39.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:57:39.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:57:39.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:57:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.664687 -999.00  +17.00  48.09     31   +0.10 1 1 2 1 1   887    0 14.62 -123.31 ----- 48.5 48.1 307.8 54.9 19.4 -27.1 19.6 -27.9 20.3 -25.3 20.4 -26.3
2025-12-12T17:57:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:57:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:57:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.664687
2025-12-12T17:57:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:57:39.858 [DEBUG] [Thread-74074] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:57:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:57:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:57:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:57:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:57:39.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:57:35', tmtdew=19.99, humidity=25.69, cloud=0.0, wind=41.22, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:57:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:57:39.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:57:39.955 [DEBUG] [Thread-74078] [transport.py] [_log()] starting thread (client mode): 0xf8154040
2025-12-12T17:57:39.955 [DEBUG] [Thread-74078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:57:39.974 [DEBUG] [Thread-74078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:57:39.974 [INFO] [Thread-74078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:57:39.981 [DEBUG] [Thread-74078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:57:39.982 [DEBUG] [Thread-74078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] client lang: <none>
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] server lang: <none>
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] kex follows: False
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:57:39.983 [DEBUG] [Thread-74078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:57:39.984 [DEBUG] [Thread-74078] [transport.py] [_log()] Compression: none
2025-12-12T17:57:39.984 [DEBUG] [Thread-74078] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:57:40.042 [DEBUG] [Thread-74078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:57:40.042 [DEBUG] [Thread-74078] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:57:40.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:57:40.043 [DEBUG] [Thread-74078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:57:40.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:57:40.097 [DEBUG] [Thread-74078] [transport.py] [_log()] userauth is OK
2025-12-12T17:57:40.098 [DEBUG] [Thread-74078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:57:40.098 [DEBUG] [Thread-74078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:57:40.098 [DEBUG] [Thread-74078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:57:40.098 [DEBUG] [Thread-74078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:57:40.118 [INFO] [Thread-74078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:57:40.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:57:40.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:57:40.970 [DEBUG] [Thread-74078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:57:40.970 [DEBUG] [Thread-74078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:57:41.018 [DEBUG] [Thread-74078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:57:41.018 [DEBUG] [Thread-74078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:57:41.027 [DEBUG] [Thread-74078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:57:41.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:57:41.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:57: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') -> 00000000
2025-12-12T17:57:41.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:57:41.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:57:41.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:57:41.061 [DEBUG] [Thread-74078] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:57:54.120 [DEBUG] [Thread-74080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:57:58.194 [DEBUG] [Thread-74081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:09.163 [DEBUG] [Thread-74082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:11.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:58:11.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:58:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:58:11.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 58, 7), 20.0, 25.7, 0.0, 43.02, 17.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:58:11.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:58:07
2025-12-12T17:58:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:58:12.052 [DEBUG] [Thread-74083] [transport.py] [_log()] starting thread (client mode): 0xf574c370
2025-12-12T17:58:12.052 [DEBUG] [Thread-74083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:58:12.073 [DEBUG] [Thread-74083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:58:12.073 [INFO] [Thread-74083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:58:12.076 [DEBUG] [Thread-74083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:58:12.076 [DEBUG] [Thread-74083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:58:12.076 [DEBUG] [Thread-74083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:58:12.076 [DEBUG] [Thread-74083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:12.076 [DEBUG] [Thread-74083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] client lang: <none>
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] server lang: <none>
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] kex follows: False
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] Compression: none
2025-12-12T17:58:12.077 [DEBUG] [Thread-74083] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:58:12.096 [DEBUG] [Thread-74083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:58:12.096 [DEBUG] [Thread-74083] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:58:12.097 [DEBUG] [Thread-74083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:58:12.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:58:12.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:58:12.098 [DEBUG] [Thread-74083] [transport.py] [_log()] userauth is OK
2025-12-12T17:58:12.098 [DEBUG] [Thread-74083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:58:12.099 [DEBUG] [Thread-74083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:58:12.099 [DEBUG] [Thread-74083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:58:12.099 [DEBUG] [Thread-74083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:58:12.114 [INFO] [Thread-74083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:58:12.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:58:12.784 [DEBUG] [Thread-74083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:58:12.784 [DEBUG] [Thread-74083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:58:12.785 [DEBUG] [Thread-74083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:58:12.825 [DEBUG] [Thread-74083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:58:12.825 [DEBUG] [Thread-74083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:58:12.828 [DEBUG] [Thread-74083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:58:12.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:58:12.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:58:12.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:58:12.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:58:12.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:58:12.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:58:12.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.665034 -999.00  +16.90  46.86     32   +0.20 1 1 2 1 1   887    0 14.43 -126.40 ----- 49.2 46.9 314.4 54.6 19.4 -27.8 19.6 -27.4 20.2 -25.0 20.3 -26.1
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.665034
2025-12-12T17:58:12.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:58:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:58:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:58:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:58:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:58:12.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:58:07', tmtdew=20.0, humidity=25.7, cloud=0.0, wind=43.02, temperature=17.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:57:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:58:12.850 [DEBUG] [Thread-74083] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:58:12.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:58:12.945 [DEBUG] [Thread-74086] [transport.py] [_log()] starting thread (client mode): 0xf81c0640
2025-12-12T17:58:12.945 [DEBUG] [Thread-74086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:58:12.960 [DEBUG] [Thread-74086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:58:12.960 [INFO] [Thread-74086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] client lang: <none>
2025-12-12T17:58:12.968 [DEBUG] [Thread-74086] [transport.py] [_log()] server lang: <none>
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] kex follows: False
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] Compression: none
2025-12-12T17:58:12.969 [DEBUG] [Thread-74086] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:58:13.024 [DEBUG] [Thread-74086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:58:13.025 [DEBUG] [Thread-74086] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:58:13.025 [DEBUG] [Thread-74086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:58:13.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:58:13.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:58:13.081 [DEBUG] [Thread-74086] [transport.py] [_log()] userauth is OK
2025-12-12T17:58:13.081 [DEBUG] [Thread-74086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:58:13.081 [DEBUG] [Thread-74086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:58:13.081 [DEBUG] [Thread-74086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:58:13.081 [DEBUG] [Thread-74086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:58:13.100 [INFO] [Thread-74086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:58:13.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:58:13.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:58:13.930 [DEBUG] [Thread-74086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:58:13.930 [DEBUG] [Thread-74086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:58:13.978 [DEBUG] [Thread-74086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:58:13.978 [DEBUG] [Thread-74086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:58:13.987 [DEBUG] [Thread-74086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:58:13.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:58:13.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:58:14.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:58:14.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:58:14.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:58:14.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:58:14.021 [DEBUG] [Thread-74086] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:58:22.391 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:22.392 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:24.193 [DEBUG] [Thread-74088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:39.239 [DEBUG] [Thread-74089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:44.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:58:44.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:58:44.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:58:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 58, 39), 20.05, 25.27, 0.0, 46.83, 17.61, 0, 0, 0, 2, 1, 0),)
2025-12-12T17:58:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:58:39
2025-12-12T17:58:44.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:58:45.014 [DEBUG] [Thread-74090] [transport.py] [_log()] starting thread (client mode): 0xf57735b0
2025-12-12T17:58:45.014 [DEBUG] [Thread-74090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:58:45.036 [DEBUG] [Thread-74090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:58:45.037 [INFO] [Thread-74090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:58:45.038 [DEBUG] [Thread-74090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:58:45.038 [DEBUG] [Thread-74090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:58:45.038 [DEBUG] [Thread-74090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] client lang: <none>
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] server lang: <none>
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] kex follows: False
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] Compression: none
2025-12-12T17:58:45.039 [DEBUG] [Thread-74090] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:58:45.048 [DEBUG] [Thread-74090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:58:45.048 [DEBUG] [Thread-74090] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:58:45.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:58:45.049 [DEBUG] [Thread-74090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:58:45.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:58:45.051 [DEBUG] [Thread-74090] [transport.py] [_log()] userauth is OK
2025-12-12T17:58:45.051 [DEBUG] [Thread-74090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:58:45.051 [DEBUG] [Thread-74090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:58:45.051 [DEBUG] [Thread-74090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:58:45.051 [DEBUG] [Thread-74090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:58:45.069 [INFO] [Thread-74090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:58:45.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:58:45.711 [DEBUG] [Thread-74090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:58:45.711 [DEBUG] [Thread-74090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:58:45.712 [DEBUG] [Thread-74090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:58:45.752 [DEBUG] [Thread-74090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:58:45.752 [DEBUG] [Thread-74090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:58:45.755 [DEBUG] [Thread-74090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:58:45.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:58:45.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:58:45.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:58:45.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:58:45.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:58:45.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:58:45.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:58:45.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:58:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:58:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.665728 -999.00  +16.70  47.79     33   +0.40 1 1 2 1 1   887    0 14.92 -121.96 ----- 44.2 47.8 317.2 63.1 19.3 -28.3 19.5 -27.4 20.1 -25.2 20.2 -26.1
2025-12-12T17:58:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:58:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:58:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.665728
2025-12-12T17:58:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:58:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:58:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:58:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:58:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:58:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:58:39', tmtdew=20.05, humidity=25.27, cloud=0.0, wind=46.83, temperature=17.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:58:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:58:45.780 [DEBUG] [Thread-74090] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:58:45.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:58:45.878 [DEBUG] [Thread-74093] [transport.py] [_log()] starting thread (client mode): 0xf81f16c0
2025-12-12T17:58:45.878 [DEBUG] [Thread-74093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:58:45.893 [DEBUG] [Thread-74093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:58:45.893 [INFO] [Thread-74093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:58:45.900 [DEBUG] [Thread-74093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] client lang: <none>
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] server lang: <none>
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] kex follows: False
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] Compression: none
2025-12-12T17:58:45.901 [DEBUG] [Thread-74093] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:58:45.961 [DEBUG] [Thread-74093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:58:45.961 [DEBUG] [Thread-74093] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:58:45.962 [DEBUG] [Thread-74093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:58:45.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:58:45.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:58:46.016 [DEBUG] [Thread-74093] [transport.py] [_log()] userauth is OK
2025-12-12T17:58:46.016 [DEBUG] [Thread-74093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:58:46.016 [DEBUG] [Thread-74093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:58:46.017 [DEBUG] [Thread-74093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:58:46.017 [DEBUG] [Thread-74093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:58:46.036 [INFO] [Thread-74093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:58:46.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:58:46.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:58:46.922 [DEBUG] [Thread-74093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:58:46.922 [DEBUG] [Thread-74093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:58:46.970 [DEBUG] [Thread-74093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:58:46.970 [DEBUG] [Thread-74093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:58:46.979 [DEBUG] [Thread-74093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:58:46.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:58:46.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:58:46.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:58:47.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:58:47.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:58:47.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:58:47.014 [DEBUG] [Thread-74093] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:58:54.265 [DEBUG] [Thread-74095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:58:58.248 [DEBUG] [Thread-74096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:09.307 [DEBUG] [Thread-74097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:59:17.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:59:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:59:17.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 59, 11), 19.87, 25.58, 0.0, 44.07, 17.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:59:17.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:59:11
2025-12-12T17:59:17.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:59:17.991 [DEBUG] [Thread-74098] [transport.py] [_log()] starting thread (client mode): 0xf57712d0
2025-12-12T17:59:17.991 [DEBUG] [Thread-74098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:59:18.011 [DEBUG] [Thread-74098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:59:18.011 [INFO] [Thread-74098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] client lang: <none>
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] server lang: <none>
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] kex follows: False
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] Compression: none
2025-12-12T17:59:18.014 [DEBUG] [Thread-74098] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:59:18.031 [DEBUG] [Thread-74098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:59:18.032 [DEBUG] [Thread-74098] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:59:18.032 [DEBUG] [Thread-74098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:59:18.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:59:18.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:59:18.034 [DEBUG] [Thread-74098] [transport.py] [_log()] userauth is OK
2025-12-12T17:59:18.034 [DEBUG] [Thread-74098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:59:18.035 [DEBUG] [Thread-74098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:59:18.035 [DEBUG] [Thread-74098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:59:18.035 [DEBUG] [Thread-74098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:59:18.059 [INFO] [Thread-74098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:59:18.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:59:18.687 [DEBUG] [Thread-74098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:59:18.687 [DEBUG] [Thread-74098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:59:18.688 [DEBUG] [Thread-74098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:59:18.729 [DEBUG] [Thread-74098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:59:18.729 [DEBUG] [Thread-74098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:59:18.732 [DEBUG] [Thread-74098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:59:18.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:59:18.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:59:18.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:59:18.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:59:18.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:59:18.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:59:18.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:59:18.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:59:18.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:59:18.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.666076 -999.00  +16.70  43.45     32   +0.30 1 1 2 1 1   887    0 14.74 -125.15 ----- 45.8 43.5 312.8 53.6 19.3 -28.4 19.5 -27.8 20.1 -27.0 20.2 -26.0
2025-12-12T17:59:18.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:59:18.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:59:18.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.666076
2025-12-12T17:59:18.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:59:18.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:59:18.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:59:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:59:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:59:18.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:59:11', tmtdew=19.87, humidity=25.58, cloud=0.0, wind=44.07, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:59:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:59:18.758 [DEBUG] [Thread-74098] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:59:18.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:59:18.865 [DEBUG] [Thread-74101] [transport.py] [_log()] starting thread (client mode): 0xf5770580
2025-12-12T17:59:18.865 [DEBUG] [Thread-74101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:59:18.881 [DEBUG] [Thread-74101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:59:18.881 [INFO] [Thread-74101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:59:18.888 [DEBUG] [Thread-74101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:59:18.888 [DEBUG] [Thread-74101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:59:18.888 [DEBUG] [Thread-74101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:59:18.888 [DEBUG] [Thread-74101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:18.888 [DEBUG] [Thread-74101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:18.888 [DEBUG] [Thread-74101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] client lang: <none>
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] server lang: <none>
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] kex follows: False
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] Compression: none
2025-12-12T17:59:18.889 [DEBUG] [Thread-74101] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:59:18.948 [DEBUG] [Thread-74101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:59:18.948 [DEBUG] [Thread-74101] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:59:18.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:59:18.950 [DEBUG] [Thread-74101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:59:18.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:59:19.004 [DEBUG] [Thread-74101] [transport.py] [_log()] userauth is OK
2025-12-12T17:59:19.004 [DEBUG] [Thread-74101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:59:19.005 [DEBUG] [Thread-74101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:59:19.005 [DEBUG] [Thread-74101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:59:19.005 [DEBUG] [Thread-74101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:59:19.027 [INFO] [Thread-74101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:59:19.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:59:19.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:59:19.851 [DEBUG] [Thread-74101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:59:19.852 [DEBUG] [Thread-74101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:59:19.900 [DEBUG] [Thread-74101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:59:19.900 [DEBUG] [Thread-74101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:59:19.909 [DEBUG] [Thread-74101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:59:19.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:59:19.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:59:19.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:59:19.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:59:19.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:59:19.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:59:19.943 [DEBUG] [Thread-74101] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:59:22.532 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:22.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:24.336 [DEBUG] [Thread-74103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:39.378 [DEBUG] [Thread-74104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T17:59:49.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T17:59:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T17:59:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 17, 59, 43), 19.56, 26.18, 0.0, 40.7, 17.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T17:59:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 17:59:43
2025-12-12T17:59:50.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T17:59:50.923 [DEBUG] [Thread-74105] [transport.py] [_log()] starting thread (client mode): 0xf5771a50
2025-12-12T17:59:50.923 [DEBUG] [Thread-74105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:59:50.942 [DEBUG] [Thread-74105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T17:59:50.942 [INFO] [Thread-74105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] client lang: <none>
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] server lang: <none>
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] kex follows: False
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] Compression: none
2025-12-12T17:59:50.946 [DEBUG] [Thread-74105] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:59:50.964 [DEBUG] [Thread-74105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:59:50.965 [DEBUG] [Thread-74105] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:59:50.965 [DEBUG] [Thread-74105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T17:59:50.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T17:59:50.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:59:50.967 [DEBUG] [Thread-74105] [transport.py] [_log()] userauth is OK
2025-12-12T17:59:50.967 [DEBUG] [Thread-74105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:59:50.967 [DEBUG] [Thread-74105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:59:50.967 [DEBUG] [Thread-74105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T17:59:50.967 [DEBUG] [Thread-74105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:59:50.985 [INFO] [Thread-74105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:59:50.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:59:51.590 [DEBUG] [Thread-74105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:59:51.591 [DEBUG] [Thread-74105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:59:51.591 [DEBUG] [Thread-74105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T17:59:51.632 [DEBUG] [Thread-74105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:59:51.632 [DEBUG] [Thread-74105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:59:51.635 [DEBUG] [Thread-74105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:59:51.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:59:51.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T17:59:51.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T17:59:51.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T17:59:51.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:59:51.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T17:59:51.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:59:51.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:59:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T17:59:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.666423 -999.00  +17.00  30.23     32   +0.40 1 1 2 1 1   887    0 14.15 -129.81 ----- 38.9 30.2 297.4 45.8 19.2 -27.8 19.5 -27.8 20.1 -24.6 20.3 -26.1
2025-12-12T17:59:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T17:59:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T17:59:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.666423
2025-12-12T17:59:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T17:59:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T17:59:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T17:59:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T17:59:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T17:59:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T17:59:43', tmtdew=19.56, humidity=26.18, cloud=0.0, wind=40.7, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T15:59:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T17:59:51.661 [DEBUG] [Thread-74105] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:59:51.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T17:59:51.759 [DEBUG] [Thread-74108] [transport.py] [_log()] starting thread (client mode): 0xf5770910
2025-12-12T17:59:51.759 [DEBUG] [Thread-74108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T17:59:51.774 [DEBUG] [Thread-74108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T17:59:51.774 [INFO] [Thread-74108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T17:59:51.782 [DEBUG] [Thread-74108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T17:59:51.782 [DEBUG] [Thread-74108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T17:59:51.782 [DEBUG] [Thread-74108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T17:59:51.782 [DEBUG] [Thread-74108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:51.782 [DEBUG] [Thread-74108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] client lang: <none>
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] server lang: <none>
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] kex follows: False
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T17:59:51.783 [DEBUG] [Thread-74108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T17:59:51.784 [DEBUG] [Thread-74108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T17:59:51.784 [DEBUG] [Thread-74108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T17:59:51.784 [DEBUG] [Thread-74108] [transport.py] [_log()] Compression: none
2025-12-12T17:59:51.784 [DEBUG] [Thread-74108] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T17:59:51.844 [DEBUG] [Thread-74108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T17:59:51.844 [DEBUG] [Thread-74108] [transport.py] [_log()] Switch to new keys ...
2025-12-12T17:59:51.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T17:59:51.845 [DEBUG] [Thread-74108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T17:59:51.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T17:59:51.900 [DEBUG] [Thread-74108] [transport.py] [_log()] userauth is OK
2025-12-12T17:59:51.901 [DEBUG] [Thread-74108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T17:59:51.901 [DEBUG] [Thread-74108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T17:59:51.901 [DEBUG] [Thread-74108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T17:59:51.901 [DEBUG] [Thread-74108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T17:59:51.925 [INFO] [Thread-74108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T17:59:51.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T17:59:51.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T17:59:52.786 [DEBUG] [Thread-74108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T17:59:52.786 [DEBUG] [Thread-74108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T17:59:52.834 [DEBUG] [Thread-74108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T17:59:52.834 [DEBUG] [Thread-74108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T17:59:52.843 [DEBUG] [Thread-74108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T17:59:52.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T17:59:52.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T17:59:52.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T17:59:52.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T17:59:52.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T17:59:52.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T17:59:52.875 [DEBUG] [Thread-74108] [transport.py] [_log()] EOF in transport thread
2025-12-12T17:59:54.404 [DEBUG] [Thread-74110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T17:59:58.297 [DEBUG] [Thread-74111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:09.449 [DEBUG] [Thread-74112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:22.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:22.676 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:22.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:00:22.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:00:22.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:00:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 0, 15), 19.56, 26.18, 0.0, 39.91, 17.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:00:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:00:15
2025-12-12T18:00:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:00:23.908 [DEBUG] [Thread-74113] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-12T18:00:23.908 [DEBUG] [Thread-74113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:00:23.928 [DEBUG] [Thread-74113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:00:23.928 [INFO] [Thread-74113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] client lang: <none>
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] server lang: <none>
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] kex follows: False
2025-12-12T18:00:23.931 [DEBUG] [Thread-74113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:00:23.932 [DEBUG] [Thread-74113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:00:23.932 [DEBUG] [Thread-74113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:00:23.932 [DEBUG] [Thread-74113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:00:23.932 [DEBUG] [Thread-74113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:00:23.932 [DEBUG] [Thread-74113] [transport.py] [_log()] Compression: none
2025-12-12T18:00:23.932 [DEBUG] [Thread-74113] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:00:23.949 [DEBUG] [Thread-74113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:00:23.949 [DEBUG] [Thread-74113] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:00:23.949 [DEBUG] [Thread-74113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:00:23.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:00:23.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:00:23.950 [DEBUG] [Thread-74113] [transport.py] [_log()] userauth is OK
2025-12-12T18:00:23.950 [DEBUG] [Thread-74113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:00:23.950 [DEBUG] [Thread-74113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:00:23.950 [DEBUG] [Thread-74113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:00:23.950 [DEBUG] [Thread-74113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:00:23.959 [INFO] [Thread-74113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:00:23.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:00:24.475 [DEBUG] [Thread-74115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:24.604 [DEBUG] [Thread-74113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:00:24.604 [DEBUG] [Thread-74113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:00:24.604 [DEBUG] [Thread-74113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:00:24.645 [DEBUG] [Thread-74113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:00:24.645 [DEBUG] [Thread-74113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:00:24.647 [DEBUG] [Thread-74113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:00:24.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:00:24.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:00:24.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:00:24.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:00:24.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:00:24.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:00:24.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.666770 -999.00  +16.90  39.82     32   +0.30 1 1 2 1 1   887    0 14.24 -128.30 ----- 35.5 39.8 304.8 46.1 19.3 -28.2 19.5 -27.8 20.1 -25.0 20.3 -26.0
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.666770
2025-12-12T18:00:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:00:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:00:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:00:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:00:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:00:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:00:15', tmtdew=19.56, humidity=26.18, cloud=0.0, wind=39.91, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:00:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:00:24.666 [DEBUG] [Thread-74113] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:00:24.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:00:24.751 [DEBUG] [Thread-74117] [transport.py] [_log()] starting thread (client mode): 0xf570c460
2025-12-12T18:00:24.751 [DEBUG] [Thread-74117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:00:24.766 [DEBUG] [Thread-74117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:00:24.766 [INFO] [Thread-74117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:00:24.773 [DEBUG] [Thread-74117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] client lang: <none>
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] server lang: <none>
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] kex follows: False
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] Compression: none
2025-12-12T18:00:24.774 [DEBUG] [Thread-74117] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:00:24.834 [DEBUG] [Thread-74117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:00:24.834 [DEBUG] [Thread-74117] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:00:24.834 [DEBUG] [Thread-74117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:00:24.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:00:24.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:00:24.895 [DEBUG] [Thread-74117] [transport.py] [_log()] userauth is OK
2025-12-12T18:00:24.895 [DEBUG] [Thread-74117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:00:24.895 [DEBUG] [Thread-74117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:00:24.895 [DEBUG] [Thread-74117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:00:24.895 [DEBUG] [Thread-74117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:00:24.909 [INFO] [Thread-74117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:00:24.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:00:24.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:00:25.827 [DEBUG] [Thread-74117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:00:25.827 [DEBUG] [Thread-74117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:00:25.874 [DEBUG] [Thread-74117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:00:25.875 [DEBUG] [Thread-74117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:00:25.883 [DEBUG] [Thread-74117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:00:25.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:00:25.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:00:25.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:00:25.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:00:25.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:00:25.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:00:25.914 [DEBUG] [Thread-74117] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:00:39.504 [DEBUG] [Thread-74119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:54.556 [DEBUG] [Thread-74120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:00:55.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:00:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:00:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 0, 48), 19.25, 26.92, 0.0, 44.09, 17.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:00:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:00:48
2025-12-12T18:00:56.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:00:56.894 [DEBUG] [Thread-74121] [transport.py] [_log()] starting thread (client mode): 0xf81f16c0
2025-12-12T18:00:56.894 [DEBUG] [Thread-74121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:00:56.905 [DEBUG] [Thread-74121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:00:56.905 [INFO] [Thread-74121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] client lang: <none>
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] server lang: <none>
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] kex follows: False
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:00:56.907 [DEBUG] [Thread-74121] [transport.py] [_log()] Compression: none
2025-12-12T18:00:56.908 [DEBUG] [Thread-74121] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:00:56.922 [DEBUG] [Thread-74121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:00:56.922 [DEBUG] [Thread-74121] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:00:56.922 [DEBUG] [Thread-74121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:00:56.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:00:56.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:00:56.924 [DEBUG] [Thread-74121] [transport.py] [_log()] userauth is OK
2025-12-12T18:00:56.924 [DEBUG] [Thread-74121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:00:56.924 [DEBUG] [Thread-74121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:00:56.924 [DEBUG] [Thread-74121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:00:56.924 [DEBUG] [Thread-74121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:00:56.936 [INFO] [Thread-74121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:00:56.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:00:57.570 [DEBUG] [Thread-74121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:00:57.570 [DEBUG] [Thread-74121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:00:57.570 [DEBUG] [Thread-74121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:00:57.611 [DEBUG] [Thread-74121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:00:57.611 [DEBUG] [Thread-74121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:00:57.614 [DEBUG] [Thread-74121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:00:57.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:00:57.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:00:57.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:00:57.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:00:57.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:00:57.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:00:57.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:00:57.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:00:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:00:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.667117 -999.00  +17.10  31.15     32   +0.50 1 1 2 1 1   887    0 14.22 -129.19 ----- 29.1 31.1 314.0 45.2 19.3 -27.3 19.5 -27.4 20.1 -25.7 20.3 -25.5
2025-12-12T18:00:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:00:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:00:57.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.667117
2025-12-12T18:00:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:00:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:00:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:00:57.636 [DEBUG] [Thread-74121] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:00:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:00:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:00:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:00:48', tmtdew=19.25, humidity=26.92, cloud=0.0, wind=44.09, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:00:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:00:57.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:00:57.734 [DEBUG] [Thread-74124] [transport.py] [_log()] starting thread (client mode): 0xf5771930
2025-12-12T18:00:57.734 [DEBUG] [Thread-74124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:00:57.750 [DEBUG] [Thread-74124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:00:57.750 [INFO] [Thread-74124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] client lang: <none>
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] server lang: <none>
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] kex follows: False
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:00:57.758 [DEBUG] [Thread-74124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:00:57.759 [DEBUG] [Thread-74124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:00:57.759 [DEBUG] [Thread-74124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:00:57.759 [DEBUG] [Thread-74124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:00:57.759 [DEBUG] [Thread-74124] [transport.py] [_log()] Compression: none
2025-12-12T18:00:57.759 [DEBUG] [Thread-74124] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:00:57.815 [DEBUG] [Thread-74124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:00:57.815 [DEBUG] [Thread-74124] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:00:57.815 [DEBUG] [Thread-74124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:00:57.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:00:57.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:00:57.871 [DEBUG] [Thread-74124] [transport.py] [_log()] userauth is OK
2025-12-12T18:00:57.871 [DEBUG] [Thread-74124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:00:57.871 [DEBUG] [Thread-74124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:00:57.871 [DEBUG] [Thread-74124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:00:57.871 [DEBUG] [Thread-74124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:00:57.890 [INFO] [Thread-74124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:00:57.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:00:57.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:00:58.352 [DEBUG] [Thread-74126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:00:58.707 [DEBUG] [Thread-74124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:00:58.707 [DEBUG] [Thread-74124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:00:58.755 [DEBUG] [Thread-74124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:00:58.755 [DEBUG] [Thread-74124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:00:58.763 [DEBUG] [Thread-74124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:00:58.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:00:58.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:00:58.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:00:58.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:00:58.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:00:58.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:00:58.798 [DEBUG] [Thread-74124] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:01:09.582 [DEBUG] [Thread-74127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:01:22.815 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:01:22.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:01:24.629 [DEBUG] [Thread-74128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:01:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:01:28.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:01:28.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:01:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 1, 20), 19.11, 27.16, 0.0, 36.26, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:01:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:01:20
2025-12-12T18:01:29.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:01:29.776 [DEBUG] [Thread-74129] [transport.py] [_log()] starting thread (client mode): 0xf8155870
2025-12-12T18:01:29.776 [DEBUG] [Thread-74129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:01:29.796 [DEBUG] [Thread-74129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:01:29.796 [INFO] [Thread-74129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] client lang: <none>
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] server lang: <none>
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] kex follows: False
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:01:29.798 [DEBUG] [Thread-74129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:01:29.799 [DEBUG] [Thread-74129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:01:29.799 [DEBUG] [Thread-74129] [transport.py] [_log()] Compression: none
2025-12-12T18:01:29.799 [DEBUG] [Thread-74129] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:01:29.815 [DEBUG] [Thread-74129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:01:29.816 [DEBUG] [Thread-74129] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:01:29.816 [DEBUG] [Thread-74129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:01:29.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:01:29.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:01:29.818 [DEBUG] [Thread-74129] [transport.py] [_log()] userauth is OK
2025-12-12T18:01:29.818 [DEBUG] [Thread-74129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:01:29.818 [DEBUG] [Thread-74129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:01:29.819 [DEBUG] [Thread-74129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:01:29.819 [DEBUG] [Thread-74129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:01:29.843 [INFO] [Thread-74129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:01:29.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:01:30.482 [DEBUG] [Thread-74129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:01:30.482 [DEBUG] [Thread-74129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:01:30.483 [DEBUG] [Thread-74129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:01:30.523 [DEBUG] [Thread-74129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:01:30.523 [DEBUG] [Thread-74129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:01:30.526 [DEBUG] [Thread-74129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:01:30.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:01:30.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:01:30.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:01:30.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:01:30.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:01:30.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:01:30.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:01:30.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:01:30.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:01:30.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.667465 -999.00  +17.10  50.16     31   +0.10 1 1 2 1 1   887    0 14.14 -127.45 ----- 44.7 50.2 296.8 57.5 19.3 -27.6 19.5 -27.0 20.2 -25.8 20.2 -26.8
2025-12-12T18:01:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:01:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:01:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.667465
2025-12-12T18:01:30.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:01:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:01:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:01:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:01:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:01:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:01:20', tmtdew=19.11, humidity=27.16, cloud=0.0, wind=36.26, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:01:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:01:30.553 [DEBUG] [Thread-74129] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:01:30.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:01:30.649 [DEBUG] [Thread-74132] [transport.py] [_log()] starting thread (client mode): 0xf81f2620
2025-12-12T18:01:30.650 [DEBUG] [Thread-74132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:01:30.665 [DEBUG] [Thread-74132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:01:30.665 [INFO] [Thread-74132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:01:30.672 [DEBUG] [Thread-74132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:01:30.672 [DEBUG] [Thread-74132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:01:30.672 [DEBUG] [Thread-74132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:01:30.672 [DEBUG] [Thread-74132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] client lang: <none>
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] server lang: <none>
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] kex follows: False
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] Compression: none
2025-12-12T18:01:30.673 [DEBUG] [Thread-74132] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:01:30.730 [DEBUG] [Thread-74132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:01:30.730 [DEBUG] [Thread-74132] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:01:30.731 [DEBUG] [Thread-74132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:01:30.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:01:30.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:01:30.787 [DEBUG] [Thread-74132] [transport.py] [_log()] userauth is OK
2025-12-12T18:01:30.787 [DEBUG] [Thread-74132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:01:30.787 [DEBUG] [Thread-74132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:01:30.788 [DEBUG] [Thread-74132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:01:30.788 [DEBUG] [Thread-74132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:01:30.806 [INFO] [Thread-74132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:01:30.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:01:30.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:01:31.696 [DEBUG] [Thread-74132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:01:31.697 [DEBUG] [Thread-74132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:01:31.745 [DEBUG] [Thread-74132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:01:31.745 [DEBUG] [Thread-74132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:01:31.754 [DEBUG] [Thread-74132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:01:31.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:01:31.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:01:31.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:01:31.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:01:31.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:01:31.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:01:31.788 [DEBUG] [Thread-74132] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:01:39.656 [DEBUG] [Thread-74134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:01:54.695 [DEBUG] [Thread-74135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:01:58.402 [DEBUG] [Thread-74136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:01.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:02:01.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:02: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
2025-12-12T18:02:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 1, 52), 19.19, 26.8, 0.0, 42.95, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:02:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:01:52
2025-12-12T18:02:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:02:02.768 [DEBUG] [Thread-74137] [transport.py] [_log()] starting thread (client mode): 0xf8154ac0
2025-12-12T18:02:02.768 [DEBUG] [Thread-74137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:02:02.784 [DEBUG] [Thread-74137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:02:02.784 [INFO] [Thread-74137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] client lang: <none>
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] server lang: <none>
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] kex follows: False
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] Compression: none
2025-12-12T18:02:02.786 [DEBUG] [Thread-74137] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:02:02.799 [DEBUG] [Thread-74137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:02:02.799 [DEBUG] [Thread-74137] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:02:02.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:02:02.800 [DEBUG] [Thread-74137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:02:02.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:02:02.802 [DEBUG] [Thread-74137] [transport.py] [_log()] userauth is OK
2025-12-12T18:02:02.802 [DEBUG] [Thread-74137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:02:02.802 [DEBUG] [Thread-74137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:02:02.802 [DEBUG] [Thread-74137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:02:02.802 [DEBUG] [Thread-74137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:02:02.821 [INFO] [Thread-74137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:02:02.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:02:03.483 [DEBUG] [Thread-74137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:02:03.484 [DEBUG] [Thread-74137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:02:03.484 [DEBUG] [Thread-74137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:02:03.525 [DEBUG] [Thread-74137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:02:03.526 [DEBUG] [Thread-74137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:02:03.529 [DEBUG] [Thread-74137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:02:03.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:02:03.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:02:03.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:02:03.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:02:03.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:02:03.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:02:03.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:02:03.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:02:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:02:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.667812 -999.00  +16.80  33.62     32   +0.20 1 1 2 1 1   887    0 13.86 -138.54 ----- 32.8 33.6 302.6 54.6 19.2 -27.8 19.4 -28.1 20.0 -24.8 20.2 -26.0
2025-12-12T18:02:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:02:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:02:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.667812
2025-12-12T18:02:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:02:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:02:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:02:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:02:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:02:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:01:52', tmtdew=19.19, humidity=26.8, cloud=0.0, wind=42.95, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:01:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:02:03.555 [DEBUG] [Thread-74137] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:02:03.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:02:03.652 [DEBUG] [Thread-74140] [transport.py] [_log()] starting thread (client mode): 0xf8156b30
2025-12-12T18:02:03.653 [DEBUG] [Thread-74140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:02:03.668 [DEBUG] [Thread-74140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:02:03.668 [INFO] [Thread-74140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:02:03.675 [DEBUG] [Thread-74140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:02:03.675 [DEBUG] [Thread-74140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:02:03.675 [DEBUG] [Thread-74140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] client lang: <none>
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] server lang: <none>
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] kex follows: False
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] Compression: none
2025-12-12T18:02:03.676 [DEBUG] [Thread-74140] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:02:03.734 [DEBUG] [Thread-74140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:02:03.734 [DEBUG] [Thread-74140] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:02:03.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:02:03.735 [DEBUG] [Thread-74140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:02:03.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:02:03.791 [DEBUG] [Thread-74140] [transport.py] [_log()] userauth is OK
2025-12-12T18:02:03.791 [DEBUG] [Thread-74140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:02:03.791 [DEBUG] [Thread-74140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:02:03.791 [DEBUG] [Thread-74140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:02:03.791 [DEBUG] [Thread-74140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:02:03.810 [INFO] [Thread-74140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:02:03.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:02:03.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:02:04.643 [DEBUG] [Thread-74140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:02:04.643 [DEBUG] [Thread-74140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:02:04.691 [DEBUG] [Thread-74140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:02:04.692 [DEBUG] [Thread-74140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:02:04.700 [DEBUG] [Thread-74140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:02:04.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:02:04.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:02:04.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:02:04.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:02:04.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:02:04.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:02:04.735 [DEBUG] [Thread-74140] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:02:09.723 [DEBUG] [Thread-74142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:22.956 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:22.957 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:24.766 [DEBUG] [Thread-74143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:34.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:02:34.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:02:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:02:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 2, 24), 19.45, 26.38, 0.0, 46.62, 17.26, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:02:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:02:24
2025-12-12T18:02:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:02:35.728 [DEBUG] [Thread-74144] [transport.py] [_log()] starting thread (client mode): 0xf8154e50
2025-12-12T18:02:35.728 [DEBUG] [Thread-74144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:02:35.748 [DEBUG] [Thread-74144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:02:35.748 [INFO] [Thread-74144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:02:35.751 [DEBUG] [Thread-74144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] client lang: <none>
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] server lang: <none>
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] kex follows: False
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:02:35.752 [DEBUG] [Thread-74144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:02:35.753 [DEBUG] [Thread-74144] [transport.py] [_log()] Compression: none
2025-12-12T18:02:35.753 [DEBUG] [Thread-74144] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:02:35.769 [DEBUG] [Thread-74144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:02:35.769 [DEBUG] [Thread-74144] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:02:35.770 [DEBUG] [Thread-74144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:02:35.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:02:35.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:02:35.772 [DEBUG] [Thread-74144] [transport.py] [_log()] userauth is OK
2025-12-12T18:02:35.772 [DEBUG] [Thread-74144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:02:35.772 [DEBUG] [Thread-74144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:02:35.772 [DEBUG] [Thread-74144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:02:35.773 [DEBUG] [Thread-74144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:02:35.790 [INFO] [Thread-74144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:02:35.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:02:36.441 [DEBUG] [Thread-74144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:02:36.441 [DEBUG] [Thread-74144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:02:36.442 [DEBUG] [Thread-74144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:02:36.483 [DEBUG] [Thread-74144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:02:36.483 [DEBUG] [Thread-74144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:02:36.485 [DEBUG] [Thread-74144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:02:36.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:02:36.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:02:36.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:02:36.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:02:36.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:02:36.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:02:36.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:02:36.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:02:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:02:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.668159 -999.00  +17.00  42.72     32   +0.30 1 1 2 1 1   887    0 13.50 -146.03 ----- 34.0 42.7 296.6 52.3 19.2 -27.6 19.4 -27.4 20.0 -27.3 20.2 -25.9
2025-12-12T18:02:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:02:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:02:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.668159
2025-12-12T18:02:36.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:02:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:02:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:02:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:02:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:02:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:02:24', tmtdew=19.45, humidity=26.38, cloud=0.0, wind=46.62, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:02:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:02:36.508 [DEBUG] [Thread-74144] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:02:36.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:02:36.606 [DEBUG] [Thread-74147] [transport.py] [_log()] starting thread (client mode): 0xf5700fa0
2025-12-12T18:02:36.606 [DEBUG] [Thread-74147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:02:36.620 [DEBUG] [Thread-74147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:02:36.620 [INFO] [Thread-74147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] client lang: <none>
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] server lang: <none>
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] kex follows: False
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:02:36.628 [DEBUG] [Thread-74147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:02:36.629 [DEBUG] [Thread-74147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:02:36.629 [DEBUG] [Thread-74147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:02:36.629 [DEBUG] [Thread-74147] [transport.py] [_log()] Compression: none
2025-12-12T18:02:36.629 [DEBUG] [Thread-74147] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:02:36.686 [DEBUG] [Thread-74147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:02:36.686 [DEBUG] [Thread-74147] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:02:36.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:02:36.687 [DEBUG] [Thread-74147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:02:36.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:02:36.746 [DEBUG] [Thread-74147] [transport.py] [_log()] userauth is OK
2025-12-12T18:02:36.746 [DEBUG] [Thread-74147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:02:36.746 [DEBUG] [Thread-74147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:02:36.747 [DEBUG] [Thread-74147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:02:36.747 [DEBUG] [Thread-74147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:02:36.766 [INFO] [Thread-74147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:02:36.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:02:36.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:02:37.592 [DEBUG] [Thread-74147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:02:37.593 [DEBUG] [Thread-74147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:02:37.641 [DEBUG] [Thread-74147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:02:37.641 [DEBUG] [Thread-74147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:02:37.650 [DEBUG] [Thread-74147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:02:37.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:02:37.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:02:37.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:02:37.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:02:37.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:02:37.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:02:37.685 [DEBUG] [Thread-74147] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:02:39.797 [DEBUG] [Thread-74149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:54.851 [DEBUG] [Thread-74150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:02:58.447 [DEBUG] [Thread-74151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:07.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:03:07.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:03:07.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:03:08.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 2, 56), 19.47, 26.27, 0.0, 40.93, 17.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:03:08.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:02:56
2025-12-12T18:03:08.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:03:08.669 [DEBUG] [Thread-74152] [transport.py] [_log()] starting thread (client mode): 0xf5700040
2025-12-12T18:03:08.669 [DEBUG] [Thread-74152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:03:08.679 [DEBUG] [Thread-74152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:03:08.679 [INFO] [Thread-74152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] client lang: <none>
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] server lang: <none>
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] kex follows: False
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:03:08.681 [DEBUG] [Thread-74152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:03:08.682 [DEBUG] [Thread-74152] [transport.py] [_log()] Compression: none
2025-12-12T18:03:08.682 [DEBUG] [Thread-74152] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:03:08.689 [DEBUG] [Thread-74152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:03:08.689 [DEBUG] [Thread-74152] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:03:08.689 [DEBUG] [Thread-74152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:03:08.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:03:08.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:03:08.690 [DEBUG] [Thread-74152] [transport.py] [_log()] userauth is OK
2025-12-12T18:03:08.690 [DEBUG] [Thread-74152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:03:08.690 [DEBUG] [Thread-74152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:03:08.690 [DEBUG] [Thread-74152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:03:08.690 [DEBUG] [Thread-74152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:03:08.702 [INFO] [Thread-74152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:03:08.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:03:09.312 [DEBUG] [Thread-74152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:03:09.312 [DEBUG] [Thread-74152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:03:09.313 [DEBUG] [Thread-74152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:03:09.353 [DEBUG] [Thread-74152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:03:09.353 [DEBUG] [Thread-74152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:03:09.355 [DEBUG] [Thread-74152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:03:09.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:03:09.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:03:09.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:03:09.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:03:09.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:03:09.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:03:09.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:03:09.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:03:09.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:03:09.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.668506 -999.00  +17.10  38.27     32   +0.30 1 1 2 1 1   887    0 13.30 -155.69 ----- 39.1 38.3 300.4 46.9 19.2 -27.0 19.4 -27.3 20.1 -24.7 20.2 -26.1
2025-12-12T18:03:09.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:03:09.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:03:09.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.668506
2025-12-12T18:03:09.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:03:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:03:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:03:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:03:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:03:09.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:02:56', tmtdew=19.47, humidity=26.27, cloud=0.0, wind=40.93, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:02:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:03:09.381 [DEBUG] [Thread-74152] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:03:09.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:03:09.478 [DEBUG] [Thread-74155] [transport.py] [_log()] starting thread (client mode): 0xf5773640
2025-12-12T18:03:09.478 [DEBUG] [Thread-74155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:03:09.492 [DEBUG] [Thread-74155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:03:09.492 [INFO] [Thread-74155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:09.500 [DEBUG] [Thread-74155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] client lang: <none>
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] server lang: <none>
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] kex follows: False
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:03:09.501 [DEBUG] [Thread-74155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:03:09.502 [DEBUG] [Thread-74155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:03:09.502 [DEBUG] [Thread-74155] [transport.py] [_log()] Compression: none
2025-12-12T18:03:09.502 [DEBUG] [Thread-74155] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:03:09.558 [DEBUG] [Thread-74155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:03:09.559 [DEBUG] [Thread-74155] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:03:09.559 [DEBUG] [Thread-74155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:03:09.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:03:09.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:03:09.614 [DEBUG] [Thread-74155] [transport.py] [_log()] userauth is OK
2025-12-12T18:03:09.614 [DEBUG] [Thread-74155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:03:09.614 [DEBUG] [Thread-74155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:03:09.615 [DEBUG] [Thread-74155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:03:09.615 [DEBUG] [Thread-74155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:03:09.634 [INFO] [Thread-74155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:03:09.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:03:09.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:03:09.879 [DEBUG] [Thread-74157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:10.438 [DEBUG] [Thread-74155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:03:10.439 [DEBUG] [Thread-74155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:03:10.487 [DEBUG] [Thread-74155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:03:10.487 [DEBUG] [Thread-74155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:03:10.496 [DEBUG] [Thread-74155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:03:10.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:03:10.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:03:10.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:03:10.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:03:10.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:03:10.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:03:10.531 [DEBUG] [Thread-74155] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:03:23.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:23.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:24.922 [DEBUG] [Thread-74158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:39.952 [DEBUG] [Thread-74159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:03:40.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:03:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:03:41.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 3, 28), 19.68, 25.87, 0.0, 39.47, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:03:41.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:03:28
2025-12-12T18:03:41.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:03:41.525 [DEBUG] [Thread-74160] [transport.py] [_log()] starting thread (client mode): 0xf8154670
2025-12-12T18:03:41.525 [DEBUG] [Thread-74160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:03:41.545 [DEBUG] [Thread-74160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:03:41.545 [INFO] [Thread-74160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] client lang: <none>
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] server lang: <none>
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] kex follows: False
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:03:41.549 [DEBUG] [Thread-74160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:03:41.550 [DEBUG] [Thread-74160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:03:41.550 [DEBUG] [Thread-74160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:03:41.550 [DEBUG] [Thread-74160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:03:41.550 [DEBUG] [Thread-74160] [transport.py] [_log()] Compression: none
2025-12-12T18:03:41.550 [DEBUG] [Thread-74160] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:03:41.564 [DEBUG] [Thread-74160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:03:41.565 [DEBUG] [Thread-74160] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:03:41.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:03:41.565 [DEBUG] [Thread-74160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:03:41.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:03:41.567 [DEBUG] [Thread-74160] [transport.py] [_log()] userauth is OK
2025-12-12T18:03:41.567 [DEBUG] [Thread-74160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:03:41.567 [DEBUG] [Thread-74160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:03:41.567 [DEBUG] [Thread-74160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:03:41.567 [DEBUG] [Thread-74160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:03:41.591 [INFO] [Thread-74160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:03:41.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:03:42.225 [DEBUG] [Thread-74160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:03:42.225 [DEBUG] [Thread-74160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:03:42.225 [DEBUG] [Thread-74160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:03:42.266 [DEBUG] [Thread-74160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:03:42.266 [DEBUG] [Thread-74160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:03:42.269 [DEBUG] [Thread-74160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:03:42.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:03:42.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:03:42.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:03:42.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:03:42.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:03:42.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:03:42.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:03:42.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:03:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:03:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.669201 -999.00  +17.30  43.32     31   +0.20 1 1 2 1 1   887    0 13.38 -143.18 ----- 45.7 43.3 304.8 51.7 19.3 -26.8 19.6 -26.9 20.2 -24.1 20.3 -26.6
2025-12-12T18:03:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:03:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:03:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.669201
2025-12-12T18:03:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:03:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:03:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:03:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:03:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:03:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:03:28', tmtdew=19.68, humidity=25.87, cloud=0.0, wind=39.47, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:03:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:03:42.293 [DEBUG] [Thread-74160] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:03:42.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:03:42.390 [DEBUG] [Thread-74163] [transport.py] [_log()] starting thread (client mode): 0xf5742fe0
2025-12-12T18:03:42.390 [DEBUG] [Thread-74163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:03:42.404 [DEBUG] [Thread-74163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:03:42.405 [INFO] [Thread-74163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:03:42.412 [DEBUG] [Thread-74163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:03:42.412 [DEBUG] [Thread-74163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:03:42.412 [DEBUG] [Thread-74163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:03:42.412 [DEBUG] [Thread-74163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] client lang: <none>
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] server lang: <none>
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] kex follows: False
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] Compression: none
2025-12-12T18:03:42.413 [DEBUG] [Thread-74163] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:03:42.469 [DEBUG] [Thread-74163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:03:42.469 [DEBUG] [Thread-74163] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:03:42.469 [DEBUG] [Thread-74163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:03:42.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:03:42.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:03:42.525 [DEBUG] [Thread-74163] [transport.py] [_log()] userauth is OK
2025-12-12T18:03:42.526 [DEBUG] [Thread-74163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:03:42.526 [DEBUG] [Thread-74163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:03:42.526 [DEBUG] [Thread-74163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:03:42.526 [DEBUG] [Thread-74163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:03:42.548 [INFO] [Thread-74163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:03:42.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:03:42.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:03:43.368 [DEBUG] [Thread-74163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:03:43.369 [DEBUG] [Thread-74163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:03:43.417 [DEBUG] [Thread-74163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:03:43.417 [DEBUG] [Thread-74163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:03:43.427 [DEBUG] [Thread-74163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:03:43.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:03:43.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:03:43.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:03:43.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:03:43.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:03:43.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:03:43.462 [DEBUG] [Thread-74163] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:03:54.988 [DEBUG] [Thread-74165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:03:58.509 [DEBUG] [Thread-74166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:10.035 [DEBUG] [Thread-74167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:13.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:04:13.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:04:13.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:04:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 4), 19.68, 25.97, 0.0, 38.69, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:04:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:04:00
2025-12-12T18:04:14.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:04:14.455 [DEBUG] [Thread-74168] [transport.py] [_log()] starting thread (client mode): 0xf5702f50
2025-12-12T18:04:14.455 [DEBUG] [Thread-74168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:04:14.465 [DEBUG] [Thread-74168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:04:14.465 [INFO] [Thread-74168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] client lang: <none>
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] server lang: <none>
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] kex follows: False
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:04:14.467 [DEBUG] [Thread-74168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:04:14.468 [DEBUG] [Thread-74168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:04:14.468 [DEBUG] [Thread-74168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:04:14.468 [DEBUG] [Thread-74168] [transport.py] [_log()] Compression: none
2025-12-12T18:04:14.468 [DEBUG] [Thread-74168] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:04:14.484 [DEBUG] [Thread-74168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:04:14.484 [DEBUG] [Thread-74168] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:04:14.484 [DEBUG] [Thread-74168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:04:14.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:04:14.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:04:14.485 [DEBUG] [Thread-74168] [transport.py] [_log()] userauth is OK
2025-12-12T18:04:14.485 [DEBUG] [Thread-74168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:04:14.485 [DEBUG] [Thread-74168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:04:14.485 [DEBUG] [Thread-74168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:04:14.485 [DEBUG] [Thread-74168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:04:14.494 [INFO] [Thread-74168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:04:14.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:04:15.125 [DEBUG] [Thread-74168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:04:15.126 [DEBUG] [Thread-74168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:04:15.126 [DEBUG] [Thread-74168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:04:15.166 [DEBUG] [Thread-74168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:04:15.166 [DEBUG] [Thread-74168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:04:15.169 [DEBUG] [Thread-74168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:04:15.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:04:15.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:04:15.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:04:15.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:04:15.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:04:15.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:04:15.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.669548 -999.00  +17.00  40.81     32   +0.20 1 1 2 1 1   887    0 13.28 -142.61 ----- 34.3 40.8 295.2 61.8 19.2 -28.2 19.6 -27.6 20.0 -25.8 20.2 -25.9
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.669548
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:04:15.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:04:00', tmtdew=19.68, humidity=25.97, cloud=0.0, wind=38.69, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:04:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:04:15.189 [DEBUG] [Thread-74168] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:04:15.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:04:15.273 [DEBUG] [Thread-74171] [transport.py] [_log()] starting thread (client mode): 0xf81e5240
2025-12-12T18:04:15.273 [DEBUG] [Thread-74171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:04:15.288 [DEBUG] [Thread-74171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:04:15.288 [INFO] [Thread-74171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] client lang: <none>
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] server lang: <none>
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] kex follows: False
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] Compression: none
2025-12-12T18:04:15.299 [DEBUG] [Thread-74171] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:04:15.352 [DEBUG] [Thread-74171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:04:15.353 [DEBUG] [Thread-74171] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:04:15.353 [DEBUG] [Thread-74171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:04:15.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:04:15.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:04:15.409 [DEBUG] [Thread-74171] [transport.py] [_log()] userauth is OK
2025-12-12T18:04:15.409 [DEBUG] [Thread-74171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:04:15.409 [DEBUG] [Thread-74171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:04:15.409 [DEBUG] [Thread-74171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:04:15.409 [DEBUG] [Thread-74171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:04:15.422 [INFO] [Thread-74171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:04:15.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:04:15.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:04:16.278 [DEBUG] [Thread-74171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:04:16.278 [DEBUG] [Thread-74171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:04:16.326 [DEBUG] [Thread-74171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:04:16.326 [DEBUG] [Thread-74171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:04:16.334 [DEBUG] [Thread-74171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:04:16.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:04:16.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:04:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:04:16.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:04:16.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:04:16.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:04:16.367 [DEBUG] [Thread-74171] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:04:23.248 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:23.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:25.064 [DEBUG] [Thread-74173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:40.110 [DEBUG] [Thread-74174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:46.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:04:46.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:04:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:04:47.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 4, 32), 20.22, 25.1, 0.0, 58.18, 17.79, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:04:47.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:04:32
2025-12-12T18:04:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:04:47.352 [DEBUG] [Thread-74175] [transport.py] [_log()] starting thread (client mode): 0xf5702b30
2025-12-12T18:04:47.352 [DEBUG] [Thread-74175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:04:47.372 [DEBUG] [Thread-74175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:04:47.373 [INFO] [Thread-74175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] client lang: <none>
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] server lang: <none>
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] kex follows: False
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] Compression: none
2025-12-12T18:04:47.376 [DEBUG] [Thread-74175] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:04:47.396 [DEBUG] [Thread-74175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:04:47.396 [DEBUG] [Thread-74175] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:04:47.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:04:47.397 [DEBUG] [Thread-74175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:04:47.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:04:47.399 [DEBUG] [Thread-74175] [transport.py] [_log()] userauth is OK
2025-12-12T18:04:47.399 [DEBUG] [Thread-74175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:04:47.399 [DEBUG] [Thread-74175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:04:47.399 [DEBUG] [Thread-74175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:04:47.399 [DEBUG] [Thread-74175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:04:47.416 [INFO] [Thread-74175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:04:47.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:04:48.065 [DEBUG] [Thread-74175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:04:48.065 [DEBUG] [Thread-74175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:04:48.066 [DEBUG] [Thread-74175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:04:48.107 [DEBUG] [Thread-74175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:04:48.107 [DEBUG] [Thread-74175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:04:48.110 [DEBUG] [Thread-74175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:04:48.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:04:48.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:04:48.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:04:48.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:04:48.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:04:48.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:04:48.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:04:48.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:04:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:04:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.669895 -999.00  +17.40  39.28     31   +0.30 1 1 2 1 1   887    0 13.31 -143.71 ----- 47.3 39.3 317.4 44.9 19.2 -27.1 19.4 -27.1 20.1 -25.9 20.2 -26.2
2025-12-12T18:04:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:04:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:04:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.669895
2025-12-12T18:04:48.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:04:48.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:04:48.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:04:48.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:04:48.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:04:48.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:04:32', tmtdew=20.22, humidity=25.1, cloud=0.0, wind=58.18, temperature=17.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:04:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:04:48.134 [DEBUG] [Thread-74175] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:04:48.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:04:48.243 [DEBUG] [Thread-74178] [transport.py] [_log()] starting thread (client mode): 0xf5703f40
2025-12-12T18:04:48.243 [DEBUG] [Thread-74178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:04:48.258 [DEBUG] [Thread-74178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:04:48.258 [INFO] [Thread-74178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] client lang: <none>
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] server lang: <none>
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] kex follows: False
2025-12-12T18:04:48.266 [DEBUG] [Thread-74178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:04:48.267 [DEBUG] [Thread-74178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:04:48.267 [DEBUG] [Thread-74178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:04:48.267 [DEBUG] [Thread-74178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:04:48.267 [DEBUG] [Thread-74178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:04:48.267 [DEBUG] [Thread-74178] [transport.py] [_log()] Compression: none
2025-12-12T18:04:48.267 [DEBUG] [Thread-74178] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:04:48.325 [DEBUG] [Thread-74178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:04:48.326 [DEBUG] [Thread-74178] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:04:48.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:04:48.327 [DEBUG] [Thread-74178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:04:48.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:04:48.381 [DEBUG] [Thread-74178] [transport.py] [_log()] userauth is OK
2025-12-12T18:04:48.381 [DEBUG] [Thread-74178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:04:48.381 [DEBUG] [Thread-74178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:04:48.381 [DEBUG] [Thread-74178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:04:48.382 [DEBUG] [Thread-74178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:04:48.398 [INFO] [Thread-74178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:04:48.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:04:48.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:04:49.245 [DEBUG] [Thread-74178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:04:49.245 [DEBUG] [Thread-74178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:04:49.293 [DEBUG] [Thread-74178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:04:49.293 [DEBUG] [Thread-74178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:04:49.302 [DEBUG] [Thread-74178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:04:49.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:04:49.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:04:49.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:04:49.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:04:49.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:04:49.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:04:49.335 [DEBUG] [Thread-74178] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:04:55.135 [DEBUG] [Thread-74180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:04:58.570 [DEBUG] [Thread-74181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:10.173 [DEBUG] [Thread-74182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:19.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:05:19.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:05:19.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:05:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 5, 4), 19.54, 26.32, 0.0, 46.7, 17.1, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:05:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:05:04
2025-12-12T18:05:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:05:20.295 [DEBUG] [Thread-74183] [transport.py] [_log()] starting thread (client mode): 0xfabc6a10
2025-12-12T18:05:20.296 [DEBUG] [Thread-74183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:05:20.315 [DEBUG] [Thread-74183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:05:20.315 [INFO] [Thread-74183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] client lang: <none>
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] server lang: <none>
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] kex follows: False
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] Compression: none
2025-12-12T18:05:20.318 [DEBUG] [Thread-74183] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:05:20.334 [DEBUG] [Thread-74183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:05:20.335 [DEBUG] [Thread-74183] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:05:20.335 [DEBUG] [Thread-74183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:05:20.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:05:20.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:05:20.337 [DEBUG] [Thread-74183] [transport.py] [_log()] userauth is OK
2025-12-12T18:05:20.337 [DEBUG] [Thread-74183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:05:20.338 [DEBUG] [Thread-74183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:05:20.338 [DEBUG] [Thread-74183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:05:20.338 [DEBUG] [Thread-74183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:05:20.361 [INFO] [Thread-74183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:05:20.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:05:20.999 [DEBUG] [Thread-74183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:05:20.999 [DEBUG] [Thread-74183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:05:20.999 [DEBUG] [Thread-74183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:05:21.040 [DEBUG] [Thread-74183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:05:21.040 [DEBUG] [Thread-74183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:05:21.044 [DEBUG] [Thread-74183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:05:21.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:05:21.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:05:21.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:05:21.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:05:21.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:05:21.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:05:21.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:05:21.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:05:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:05:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.670242 -999.00  +17.30  38.58     31   +0.40 1 1 2 1 1   887    0 13.58 -142.59 ----- 43.1 38.6 311.2 47.9 19.2 -28.3 19.5 -27.6 19.9 -26.6 20.2 -25.4
2025-12-12T18:05:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:05:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:05:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.670242
2025-12-12T18:05:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:05:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:05:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:05:21.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:05:21.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:05:21.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:05:04', tmtdew=19.54, humidity=26.32, cloud=0.0, wind=46.7, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:05:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:05:21.070 [DEBUG] [Thread-74183] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:05:21.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:05:21.167 [DEBUG] [Thread-74186] [transport.py] [_log()] starting thread (client mode): 0xf578ae00
2025-12-12T18:05:21.167 [DEBUG] [Thread-74186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:05:21.181 [DEBUG] [Thread-74186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:05:21.181 [INFO] [Thread-74186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:05:21.189 [DEBUG] [Thread-74186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:05:21.189 [DEBUG] [Thread-74186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:05:21.189 [DEBUG] [Thread-74186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:05:21.189 [DEBUG] [Thread-74186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:21.189 [DEBUG] [Thread-74186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:21.189 [DEBUG] [Thread-74186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] client lang: <none>
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] server lang: <none>
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] kex follows: False
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:05:21.190 [DEBUG] [Thread-74186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:05:21.191 [DEBUG] [Thread-74186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:05:21.191 [DEBUG] [Thread-74186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:05:21.191 [DEBUG] [Thread-74186] [transport.py] [_log()] Compression: none
2025-12-12T18:05:21.191 [DEBUG] [Thread-74186] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:05:21.249 [DEBUG] [Thread-74186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:05:21.249 [DEBUG] [Thread-74186] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:05:21.250 [DEBUG] [Thread-74186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:05:21.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:05:21.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:05:21.305 [DEBUG] [Thread-74186] [transport.py] [_log()] userauth is OK
2025-12-12T18:05:21.305 [DEBUG] [Thread-74186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:05:21.305 [DEBUG] [Thread-74186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:05:21.305 [DEBUG] [Thread-74186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:05:21.306 [DEBUG] [Thread-74186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:05:21.326 [INFO] [Thread-74186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:05:21.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:05:21.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:05:22.155 [DEBUG] [Thread-74186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:05:22.155 [DEBUG] [Thread-74186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:05:22.203 [DEBUG] [Thread-74186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:05:22.203 [DEBUG] [Thread-74186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:05:22.211 [DEBUG] [Thread-74186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:05:22.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:05:22.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:05:22.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:05:22.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:05:22.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:05:22.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:05:22.246 [DEBUG] [Thread-74186] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:05:23.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:23.390 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:25.209 [DEBUG] [Thread-74188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:40.256 [DEBUG] [Thread-74189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:05:52.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:05:52.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:05:52.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 5, 36), 19.0, 27.08, 0.0, 44.83, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:05:52.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:05:36
2025-12-12T18:05:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:05:53.244 [DEBUG] [Thread-74190] [transport.py] [_log()] starting thread (client mode): 0xf57733d0
2025-12-12T18:05:53.245 [DEBUG] [Thread-74190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:05:53.263 [DEBUG] [Thread-74190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:05:53.263 [INFO] [Thread-74190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:05:53.266 [DEBUG] [Thread-74190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:05:53.266 [DEBUG] [Thread-74190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] client lang: <none>
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] server lang: <none>
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] kex follows: False
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] Compression: none
2025-12-12T18:05:53.267 [DEBUG] [Thread-74190] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:05:53.277 [DEBUG] [Thread-74190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:05:53.278 [DEBUG] [Thread-74190] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:05:53.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:05:53.279 [DEBUG] [Thread-74190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:05:53.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:05:53.280 [DEBUG] [Thread-74190] [transport.py] [_log()] userauth is OK
2025-12-12T18:05:53.281 [DEBUG] [Thread-74190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:05:53.281 [DEBUG] [Thread-74190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:05:53.281 [DEBUG] [Thread-74190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:05:53.281 [DEBUG] [Thread-74190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:05:53.295 [INFO] [Thread-74190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:05:53.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:05:53.897 [DEBUG] [Thread-74190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:05:53.898 [DEBUG] [Thread-74190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:05:53.898 [DEBUG] [Thread-74190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:05:53.939 [DEBUG] [Thread-74190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:05:53.939 [DEBUG] [Thread-74190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:05:53.941 [DEBUG] [Thread-74190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:05:53.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:05:53.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:05:53.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:05:53.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:05:53.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:05:53.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:05:53.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:05:53.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:05:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:05:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.670590 -999.00  +17.30  36.21     33   +0.90 1 1 2 1 1   887    0 13.42 -143.61 ----- 34.6 36.2 308.4 47.4 19.3 -27.0 19.5 -27.0 20.2 -26.4 20.3 -26.4
2025-12-12T18:05:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:05:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:05:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.670590
2025-12-12T18:05:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:05:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:05:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:05:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:05:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:05:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:05:36', tmtdew=19.0, humidity=27.08, cloud=0.0, wind=44.83, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:05:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:05:53.965 [DEBUG] [Thread-74190] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:05:54.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:05:54.060 [DEBUG] [Thread-74193] [transport.py] [_log()] starting thread (client mode): 0xf5770bb0
2025-12-12T18:05:54.060 [DEBUG] [Thread-74193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:05:54.075 [DEBUG] [Thread-74193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:05:54.075 [INFO] [Thread-74193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:05:54.082 [DEBUG] [Thread-74193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] client lang: <none>
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] server lang: <none>
2025-12-12T18:05:54.083 [DEBUG] [Thread-74193] [transport.py] [_log()] kex follows: False
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] Compression: none
2025-12-12T18:05:54.084 [DEBUG] [Thread-74193] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:05:54.140 [DEBUG] [Thread-74193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:05:54.140 [DEBUG] [Thread-74193] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:05:54.141 [DEBUG] [Thread-74193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:05:54.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:05:54.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:05:54.196 [DEBUG] [Thread-74193] [transport.py] [_log()] userauth is OK
2025-12-12T18:05:54.197 [DEBUG] [Thread-74193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:05:54.197 [DEBUG] [Thread-74193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:05:54.197 [DEBUG] [Thread-74193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:05:54.197 [DEBUG] [Thread-74193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:05:54.215 [INFO] [Thread-74193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:05:54.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:05:54.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:05:55.078 [DEBUG] [Thread-74193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:05:55.078 [DEBUG] [Thread-74193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:05:55.126 [DEBUG] [Thread-74193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:05:55.126 [DEBUG] [Thread-74193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:05:55.135 [DEBUG] [Thread-74193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:05:55.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:05:55.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:05:55.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:05:55.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:05:55.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:05:55.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:05:55.169 [DEBUG] [Thread-74193] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:05:55.290 [DEBUG] [Thread-74195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:05:58.623 [DEBUG] [Thread-74196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:10.331 [DEBUG] [Thread-74197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:23.531 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:23.532 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:25.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:06:25.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:06:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:06:25.359 [DEBUG] [Thread-74198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 6, 8), 18.8, 27.45, 0.0, 46.14, 16.76, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:06:25.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:06:08
2025-12-12T18:06:25.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:06:26.134 [DEBUG] [Thread-74199] [transport.py] [_log()] starting thread (client mode): 0xf5771960
2025-12-12T18:06:26.134 [DEBUG] [Thread-74199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:06:26.154 [DEBUG] [Thread-74199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:06:26.154 [INFO] [Thread-74199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:06:26.157 [DEBUG] [Thread-74199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] client lang: <none>
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] server lang: <none>
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] kex follows: False
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] Compression: none
2025-12-12T18:06:26.158 [DEBUG] [Thread-74199] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:06:26.167 [DEBUG] [Thread-74199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:06:26.168 [DEBUG] [Thread-74199] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:06:26.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:06:26.169 [DEBUG] [Thread-74199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:06:26.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:06:26.171 [DEBUG] [Thread-74199] [transport.py] [_log()] userauth is OK
2025-12-12T18:06:26.171 [DEBUG] [Thread-74199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:06:26.171 [DEBUG] [Thread-74199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:06:26.171 [DEBUG] [Thread-74199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:06:26.171 [DEBUG] [Thread-74199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:06:26.199 [INFO] [Thread-74199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:06:26.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:06:26.764 [DEBUG] [Thread-74199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:06:26.764 [DEBUG] [Thread-74199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:06:26.765 [DEBUG] [Thread-74199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:06:26.805 [DEBUG] [Thread-74199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:06:26.805 [DEBUG] [Thread-74199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:06:26.808 [DEBUG] [Thread-74199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:06:26.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:06:26.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:06:26.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:06:26.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:06:26.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:06:26.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:06:26.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:06:26.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:06:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:06:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.670937 -999.00  +17.00  37.53     34   +1.10 1 1 2 1 1   887    0 13.31 -141.17 ----- 43.8 37.5 305.0 46.5 19.2 -28.2 19.5 -27.9 20.0 -26.6 20.1 -26.3
2025-12-12T18:06:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:06:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:06:26.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.670937
2025-12-12T18:06:26.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:06:26.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:06:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:06:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:06:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:06:26.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:06:08', tmtdew=18.8, humidity=27.45, cloud=0.0, wind=46.14, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:06:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:06:26.834 [DEBUG] [Thread-74199] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:06:26.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:06:40.388 [DEBUG] [Thread-74202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:55.433 [DEBUG] [Thread-74203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:06:58.677 [DEBUG] [Thread-74204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:10.464 [DEBUG] [Thread-74205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:23.671 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:23.672 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:25.496 [DEBUG] [Thread-74206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:40.523 [DEBUG] [Thread-74207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:55.549 [DEBUG] [Thread-74208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:07:58.734 [DEBUG] [Thread-74209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:10.576 [DEBUG] [Thread-74210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:23.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:23.819 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:25.607 [DEBUG] [Thread-74211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:39.914 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T18:08:40.641 [DEBUG] [Thread-74212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:55.667 [DEBUG] [Thread-74213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:08:58.787 [DEBUG] [Thread-74214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:09:09.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:09:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:09:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 8, 49), 18.27, 28.98, 0.0, 48.89, 17.0, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:09:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:08:49
2025-12-12T18:09:10.694 [DEBUG] [Thread-74215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:09:10.916 [DEBUG] [Thread-74216] [transport.py] [_log()] starting thread (client mode): 0xf570c1f0
2025-12-12T18:09:10.916 [DEBUG] [Thread-74216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:09:10.934 [DEBUG] [Thread-74216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:09:10.935 [INFO] [Thread-74216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] client lang: <none>
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] server lang: <none>
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] kex follows: False
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] Compression: none
2025-12-12T18:09:10.938 [DEBUG] [Thread-74216] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:09:10.956 [DEBUG] [Thread-74216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:09:10.957 [DEBUG] [Thread-74216] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:09:10.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:09:10.958 [DEBUG] [Thread-74216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:09:10.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:09:10.960 [DEBUG] [Thread-74216] [transport.py] [_log()] userauth is OK
2025-12-12T18:09:10.960 [DEBUG] [Thread-74216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:09:10.960 [DEBUG] [Thread-74216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:09:10.960 [DEBUG] [Thread-74216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:09:10.960 [DEBUG] [Thread-74216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:09:10.984 [INFO] [Thread-74216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:09:10.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:09:11.547 [DEBUG] [Thread-74216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:09:11.547 [DEBUG] [Thread-74216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:09:11.547 [DEBUG] [Thread-74216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:09:11.588 [DEBUG] [Thread-74216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:09:11.588 [DEBUG] [Thread-74216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:09:11.591 [DEBUG] [Thread-74216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:09:11.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:09:11.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:09:11.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:09:11.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:09:11.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:09:11.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:09:11.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:09:11.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:09:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:09:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.673020 -999.00  +16.50  44.94     35   +1.00 1 1 2 1 1   887    0 11.82 -174.64 ----- 51.6 44.9 306.0 51.8 18.9 -27.8 19.1 -26.8 19.6 -25.5 19.9 -25.7
2025-12-12T18:09:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:09:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:09:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.673020
2025-12-12T18:09:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:09:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:09:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:09:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:09:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:09:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:08:49', tmtdew=18.27, humidity=28.98, cloud=0.0, wind=48.89, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:09:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:09:11.612 [DEBUG] [Thread-74216] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:09:11.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:09:11.699 [DEBUG] [Thread-74219] [transport.py] [_log()] starting thread (client mode): 0xf57719c0
2025-12-12T18:09:11.699 [DEBUG] [Thread-74219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:09:11.714 [DEBUG] [Thread-74219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:09:11.714 [INFO] [Thread-74219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:09:11.722 [DEBUG] [Thread-74219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] client lang: <none>
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] server lang: <none>
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] kex follows: False
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] Compression: none
2025-12-12T18:09:11.723 [DEBUG] [Thread-74219] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:09:11.782 [DEBUG] [Thread-74219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:09:11.783 [DEBUG] [Thread-74219] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:09:11.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:09:11.784 [DEBUG] [Thread-74219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:09:11.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:09:11.840 [DEBUG] [Thread-74219] [transport.py] [_log()] userauth is OK
2025-12-12T18:09:11.840 [DEBUG] [Thread-74219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:09:11.840 [DEBUG] [Thread-74219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:09:11.840 [DEBUG] [Thread-74219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:09:11.840 [DEBUG] [Thread-74219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:09:11.859 [INFO] [Thread-74219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:09:11.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:09:11.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:09:12.735 [DEBUG] [Thread-74219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:09:12.735 [DEBUG] [Thread-74219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:09:12.782 [DEBUG] [Thread-74219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:09:12.783 [DEBUG] [Thread-74219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:09:12.791 [DEBUG] [Thread-74219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:09:12.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:09:12.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:09:12.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:09:12.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:09:12.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:09:12.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:09:12.823 [DEBUG] [Thread-74219] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:09:23.960 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:23.961 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:25.716 [DEBUG] [Thread-74221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:40.750 [DEBUG] [Thread-74222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:42.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:09:42.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:09:42.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:09:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 9, 21), 18.3, 28.91, 0.0, 42.84, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:09:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:09:21
2025-12-12T18:09:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:09:43.815 [DEBUG] [Thread-74223] [transport.py] [_log()] starting thread (client mode): 0xf5773dc0
2025-12-12T18:09:43.815 [DEBUG] [Thread-74223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:09:43.835 [DEBUG] [Thread-74223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:09:43.835 [INFO] [Thread-74223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] client lang: <none>
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] server lang: <none>
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] kex follows: False
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:09:43.837 [DEBUG] [Thread-74223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:09:43.838 [DEBUG] [Thread-74223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:09:43.838 [DEBUG] [Thread-74223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:09:43.838 [DEBUG] [Thread-74223] [transport.py] [_log()] Compression: none
2025-12-12T18:09:43.838 [DEBUG] [Thread-74223] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:09:43.847 [DEBUG] [Thread-74223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:09:43.848 [DEBUG] [Thread-74223] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:09:43.848 [DEBUG] [Thread-74223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:09:43.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:09:43.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:09:43.850 [DEBUG] [Thread-74223] [transport.py] [_log()] userauth is OK
2025-12-12T18:09:43.850 [DEBUG] [Thread-74223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:09:43.850 [DEBUG] [Thread-74223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:09:43.850 [DEBUG] [Thread-74223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:09:43.850 [DEBUG] [Thread-74223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:09:43.866 [INFO] [Thread-74223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:09:43.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:09:44.454 [DEBUG] [Thread-74223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:09:44.454 [DEBUG] [Thread-74223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:09:44.454 [DEBUG] [Thread-74223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:09:44.495 [DEBUG] [Thread-74223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:09:44.495 [DEBUG] [Thread-74223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:09:44.498 [DEBUG] [Thread-74223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:09:44.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:09:44.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:09:44.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:09:44.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:09:44.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:09:44.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:09:44.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:09:44.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:09:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:09:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.673367 -999.00  +16.70  37.92     34   +1.10 1 1 2 1 1   887    0 11.83 -166.84 ----- 41.9 37.9 308.2 58.9 18.9 -27.0 19.1 -27.5 19.6 -23.9 19.8 -25.9
2025-12-12T18:09:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:09:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:09:44.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.673367
2025-12-12T18:09:44.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:09:44.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:09:44.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:09:44.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:09:44.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:09:44.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:09:21', tmtdew=18.3, humidity=28.91, cloud=0.0, wind=42.84, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:09:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:09:44.518 [DEBUG] [Thread-74223] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:09:44.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:09:44.614 [DEBUG] [Thread-74226] [transport.py] [_log()] starting thread (client mode): 0xf81567d0
2025-12-12T18:09:44.614 [DEBUG] [Thread-74226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:09:44.634 [DEBUG] [Thread-74226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:09:44.634 [INFO] [Thread-74226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:09:44.642 [DEBUG] [Thread-74226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] client lang: <none>
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] server lang: <none>
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] kex follows: False
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] Compression: none
2025-12-12T18:09:44.643 [DEBUG] [Thread-74226] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:09:44.700 [DEBUG] [Thread-74226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:09:44.700 [DEBUG] [Thread-74226] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:09:44.701 [DEBUG] [Thread-74226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:09:44.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:09:44.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:09:44.756 [DEBUG] [Thread-74226] [transport.py] [_log()] userauth is OK
2025-12-12T18:09:44.756 [DEBUG] [Thread-74226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:09:44.756 [DEBUG] [Thread-74226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:09:44.756 [DEBUG] [Thread-74226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:09:44.756 [DEBUG] [Thread-74226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:09:44.775 [INFO] [Thread-74226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:09:44.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:09:44.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:09:45.624 [DEBUG] [Thread-74226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:09:45.624 [DEBUG] [Thread-74226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:09:45.672 [DEBUG] [Thread-74226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:09:45.672 [DEBUG] [Thread-74226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:09:45.681 [DEBUG] [Thread-74226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:09:45.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:09:45.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:09:45.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:09:45.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:09:45.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:09:45.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:09:45.715 [DEBUG] [Thread-74226] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:09:55.780 [DEBUG] [Thread-74228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:09:58.832 [DEBUG] [Thread-74229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:10.824 [DEBUG] [Thread-74230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:10:15.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:10:15.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:10:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 9, 53), 18.2, 28.84, 0.0, 41.13, 16.9, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:10:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:09:53
2025-12-12T18:10:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:10:16.683 [DEBUG] [Thread-74231] [transport.py] [_log()] starting thread (client mode): 0xf574f910
2025-12-12T18:10:16.683 [DEBUG] [Thread-74231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:10:16.702 [DEBUG] [Thread-74231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:10:16.702 [INFO] [Thread-74231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:10:16.705 [DEBUG] [Thread-74231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:10:16.705 [DEBUG] [Thread-74231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] client lang: <none>
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] server lang: <none>
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] kex follows: False
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:10:16.706 [DEBUG] [Thread-74231] [transport.py] [_log()] Compression: none
2025-12-12T18:10:16.707 [DEBUG] [Thread-74231] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:10:16.725 [DEBUG] [Thread-74231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:10:16.726 [DEBUG] [Thread-74231] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:10:16.726 [DEBUG] [Thread-74231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:10:16.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:10:16.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:10:16.728 [DEBUG] [Thread-74231] [transport.py] [_log()] userauth is OK
2025-12-12T18:10:16.728 [DEBUG] [Thread-74231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:10:16.728 [DEBUG] [Thread-74231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:10:16.729 [DEBUG] [Thread-74231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:10:16.729 [DEBUG] [Thread-74231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:10:16.752 [INFO] [Thread-74231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:10:16.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:10:17.298 [DEBUG] [Thread-74231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:10:17.299 [DEBUG] [Thread-74231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:10:17.299 [DEBUG] [Thread-74231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:10:17.340 [DEBUG] [Thread-74231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:10:17.340 [DEBUG] [Thread-74231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:10:17.342 [DEBUG] [Thread-74231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:10:17.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:10:17.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:10:17.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:10:17.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:10:17.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:10:17.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:10:17.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:10:17.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:10:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:10:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.673714 -999.00  +16.50  46.58     35   +1.30 1 1 2 1 1   887    0 11.72 -183.42 ----- 40.3 46.6 311.4 55.0 18.9 -27.5 19.1 -27.1 19.7 -24.4 19.8 -25.6
2025-12-12T18:10:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:10:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:10:17.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.673714
2025-12-12T18:10:17.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:10:17.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:10:17.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:10:17.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:10:17.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:10:17.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:09:53', tmtdew=18.2, humidity=28.84, cloud=0.0, wind=41.13, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:10:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:10:17.369 [DEBUG] [Thread-74231] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:10:17.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:10:17.465 [DEBUG] [Thread-74234] [transport.py] [_log()] starting thread (client mode): 0xf574c6a0
2025-12-12T18:10:17.465 [DEBUG] [Thread-74234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:10:17.480 [DEBUG] [Thread-74234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:10:17.480 [INFO] [Thread-74234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:17.488 [DEBUG] [Thread-74234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] client lang: <none>
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] server lang: <none>
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] kex follows: False
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] Compression: none
2025-12-12T18:10:17.489 [DEBUG] [Thread-74234] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:10:17.547 [DEBUG] [Thread-74234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:10:17.548 [DEBUG] [Thread-74234] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:10:17.549 [DEBUG] [Thread-74234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:10:17.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:10:17.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:10:17.603 [DEBUG] [Thread-74234] [transport.py] [_log()] userauth is OK
2025-12-12T18:10:17.603 [DEBUG] [Thread-74234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:10:17.604 [DEBUG] [Thread-74234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:10:17.604 [DEBUG] [Thread-74234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:10:17.604 [DEBUG] [Thread-74234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:10:17.627 [INFO] [Thread-74234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:10:17.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:10:17.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:10:18.471 [DEBUG] [Thread-74234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:10:18.471 [DEBUG] [Thread-74234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:10:18.519 [DEBUG] [Thread-74234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:10:18.519 [DEBUG] [Thread-74234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:10:18.528 [DEBUG] [Thread-74234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:10:18.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:10:18.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:10:18.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:10:18.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:10:18.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:10:18.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:10:18.563 [DEBUG] [Thread-74234] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:10:24.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:24.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:25.854 [DEBUG] [Thread-74236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:40.898 [DEBUG] [Thread-74237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:48.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:10:48.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:10:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:10:49.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 10, 25), 18.12, 28.99, 0.0, 44.23, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:10:49.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:10:25
2025-12-12T18:10:49.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:10:49.535 [DEBUG] [Thread-74238] [transport.py] [_log()] starting thread (client mode): 0xf57027a0
2025-12-12T18:10:49.535 [DEBUG] [Thread-74238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:10:49.553 [DEBUG] [Thread-74238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:10:49.553 [INFO] [Thread-74238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] client lang: <none>
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] server lang: <none>
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] kex follows: False
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:10:49.559 [DEBUG] [Thread-74238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:10:49.560 [DEBUG] [Thread-74238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:10:49.560 [DEBUG] [Thread-74238] [transport.py] [_log()] Compression: none
2025-12-12T18:10:49.560 [DEBUG] [Thread-74238] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:10:49.569 [DEBUG] [Thread-74238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:10:49.569 [DEBUG] [Thread-74238] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:10:49.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:10:49.570 [DEBUG] [Thread-74238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:10:49.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:10:49.572 [DEBUG] [Thread-74238] [transport.py] [_log()] userauth is OK
2025-12-12T18:10:49.572 [DEBUG] [Thread-74238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:10:49.572 [DEBUG] [Thread-74238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:10:49.572 [DEBUG] [Thread-74238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:10:49.572 [DEBUG] [Thread-74238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:10:49.590 [INFO] [Thread-74238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:10:49.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:10:50.180 [DEBUG] [Thread-74238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:10:50.180 [DEBUG] [Thread-74238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:10:50.181 [DEBUG] [Thread-74238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:10:50.222 [DEBUG] [Thread-74238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:10:50.222 [DEBUG] [Thread-74238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:10:50.226 [DEBUG] [Thread-74238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:10:50.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:10:50.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:10:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:10:50.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:10:50.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:10:50.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:10:50.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:10:50.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.674062 -999.00  +16.40  48.81     36   +1.30 1 1 2 1 1   887    0 11.35 -186.66 ----- 37.4 48.8 290.2 54.1 18.8 -27.4 19.1 -26.7 19.6 -24.9 19.8 -25.9
2025-12-12T18:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.674062
2025-12-12T18:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:10:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:10:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:10:50.252 [DEBUG] [Thread-74238] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:10:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:10:50.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:10:50.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:10:25', tmtdew=18.12, humidity=28.99, cloud=0.0, wind=44.23, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:10:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:10:50.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:10:50.349 [DEBUG] [Thread-74241] [transport.py] [_log()] starting thread (client mode): 0xf578bdc0
2025-12-12T18:10:50.349 [DEBUG] [Thread-74241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:10:50.363 [DEBUG] [Thread-74241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:10:50.363 [INFO] [Thread-74241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] client lang: <none>
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] server lang: <none>
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] kex follows: False
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:10:50.371 [DEBUG] [Thread-74241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:10:50.372 [DEBUG] [Thread-74241] [transport.py] [_log()] Compression: none
2025-12-12T18:10:50.372 [DEBUG] [Thread-74241] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:10:50.427 [DEBUG] [Thread-74241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:10:50.427 [DEBUG] [Thread-74241] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:10:50.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:10:50.428 [DEBUG] [Thread-74241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:10:50.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:10:50.483 [DEBUG] [Thread-74241] [transport.py] [_log()] userauth is OK
2025-12-12T18:10:50.484 [DEBUG] [Thread-74241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:10:50.484 [DEBUG] [Thread-74241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:10:50.484 [DEBUG] [Thread-74241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:10:50.484 [DEBUG] [Thread-74241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:10:50.504 [INFO] [Thread-74241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:10:50.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:10:50.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:10:51.376 [DEBUG] [Thread-74241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:10:51.377 [DEBUG] [Thread-74241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:10:51.425 [DEBUG] [Thread-74241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:10:51.425 [DEBUG] [Thread-74241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:10:51.434 [DEBUG] [Thread-74241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:10:51.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:10:51.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:10:51.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:10:51.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:10:51.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:10:51.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:10:51.468 [DEBUG] [Thread-74241] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:10:55.928 [DEBUG] [Thread-74243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:10:58.882 [DEBUG] [Thread-74244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:10.969 [DEBUG] [Thread-74245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:11:21.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:11:21.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:11:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 10, 57), 17.82, 29.71, 0.0, 31.35, 17.01, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:11:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:10:57
2025-12-12T18:11:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:11:22.477 [DEBUG] [Thread-74246] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-12T18:11:22.478 [DEBUG] [Thread-74246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:11:22.493 [DEBUG] [Thread-74246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:11:22.493 [INFO] [Thread-74246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:11:22.494 [DEBUG] [Thread-74246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:11:22.494 [DEBUG] [Thread-74246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:11:22.494 [DEBUG] [Thread-74246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:11:22.494 [DEBUG] [Thread-74246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:22.494 [DEBUG] [Thread-74246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:22.494 [DEBUG] [Thread-74246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] client lang: <none>
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] server lang: <none>
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] kex follows: False
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] Compression: none
2025-12-12T18:11:22.495 [DEBUG] [Thread-74246] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:11:22.508 [DEBUG] [Thread-74246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:11:22.508 [DEBUG] [Thread-74246] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:11:22.508 [DEBUG] [Thread-74246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:11:22.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:11:22.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:11:22.509 [DEBUG] [Thread-74246] [transport.py] [_log()] userauth is OK
2025-12-12T18:11:22.509 [DEBUG] [Thread-74246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:11:22.509 [DEBUG] [Thread-74246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:11:22.509 [DEBUG] [Thread-74246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:11:22.509 [DEBUG] [Thread-74246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:11:22.521 [INFO] [Thread-74246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:11:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:11:23.154 [DEBUG] [Thread-74246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:11:23.154 [DEBUG] [Thread-74246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:11:23.155 [DEBUG] [Thread-74246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:11:23.195 [DEBUG] [Thread-74246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:11:23.195 [DEBUG] [Thread-74246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:11:23.197 [DEBUG] [Thread-74246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:11:23.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:11:23.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:11:23.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:11:23.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:11:23.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:11:23.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:11:23.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:11:23.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:11:23.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:11:23.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.674409 -999.00  +16.50  43.24     36   +1.40 1 1 2 1 1   887    0 10.28 -212.53 ----- 38.2 43.2 312.6 55.4 18.8 -27.1 19.1 -27.0 19.6 -25.6 19.8 -25.6
2025-12-12T18:11:23.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:11:23.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:11:23.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.674409
2025-12-12T18:11:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:11:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:11:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:11:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:11:23.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:11:23.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:10:57', tmtdew=17.82, humidity=29.71, cloud=0.0, wind=31.35, temperature=17.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:11:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:11:23.233 [DEBUG] [Thread-74246] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:11:23.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:11:23.331 [DEBUG] [Thread-74249] [transport.py] [_log()] starting thread (client mode): 0xf813e5c0
2025-12-12T18:11:23.331 [DEBUG] [Thread-74249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:11:23.345 [DEBUG] [Thread-74249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:11:23.345 [INFO] [Thread-74249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:11:23.353 [DEBUG] [Thread-74249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:11:23.353 [DEBUG] [Thread-74249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:11:23.353 [DEBUG] [Thread-74249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] client lang: <none>
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] server lang: <none>
2025-12-12T18:11:23.354 [DEBUG] [Thread-74249] [transport.py] [_log()] kex follows: False
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] Compression: none
2025-12-12T18:11:23.355 [DEBUG] [Thread-74249] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:11:23.411 [DEBUG] [Thread-74249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:11:23.411 [DEBUG] [Thread-74249] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:11:23.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:11:23.412 [DEBUG] [Thread-74249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:11:23.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:11:23.467 [DEBUG] [Thread-74249] [transport.py] [_log()] userauth is OK
2025-12-12T18:11:23.467 [DEBUG] [Thread-74249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:11:23.467 [DEBUG] [Thread-74249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:11:23.467 [DEBUG] [Thread-74249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:11:23.468 [DEBUG] [Thread-74249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:11:23.486 [INFO] [Thread-74249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:11:23.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:11:23.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:11:24.246 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:24.247 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:24.328 [DEBUG] [Thread-74249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:11:24.328 [DEBUG] [Thread-74249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:11:24.376 [DEBUG] [Thread-74249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:11:24.376 [DEBUG] [Thread-74249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:11:24.385 [DEBUG] [Thread-74249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:11:24.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:11:24.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:11:24.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:11:24.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:11:24.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:11:24.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:11:24.419 [DEBUG] [Thread-74249] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:11:25.999 [DEBUG] [Thread-74251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:41.040 [DEBUG] [Thread-74252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:11:54.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:11:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:11:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 11, 29), 17.83, 29.71, 0.0, 36.26, 17.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:11:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:11:29
2025-12-12T18:11:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:11:55.389 [DEBUG] [Thread-74253] [transport.py] [_log()] starting thread (client mode): 0xf5703fa0
2025-12-12T18:11:55.389 [DEBUG] [Thread-74253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:11:55.409 [DEBUG] [Thread-74253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:11:55.409 [INFO] [Thread-74253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] client lang: <none>
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] server lang: <none>
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] kex follows: False
2025-12-12T18:11:55.412 [DEBUG] [Thread-74253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:11:55.413 [DEBUG] [Thread-74253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:11:55.413 [DEBUG] [Thread-74253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:11:55.413 [DEBUG] [Thread-74253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:11:55.413 [DEBUG] [Thread-74253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:11:55.413 [DEBUG] [Thread-74253] [transport.py] [_log()] Compression: none
2025-12-12T18:11:55.413 [DEBUG] [Thread-74253] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:11:55.421 [DEBUG] [Thread-74253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:11:55.421 [DEBUG] [Thread-74253] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:11:55.422 [DEBUG] [Thread-74253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:11:55.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:11:55.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:11:55.423 [DEBUG] [Thread-74253] [transport.py] [_log()] userauth is OK
2025-12-12T18:11:55.424 [DEBUG] [Thread-74253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:11:55.424 [DEBUG] [Thread-74253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:11:55.424 [DEBUG] [Thread-74253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:11:55.424 [DEBUG] [Thread-74253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:11:55.459 [INFO] [Thread-74253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:11:55.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:11:56.068 [DEBUG] [Thread-74253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:11:56.068 [DEBUG] [Thread-74253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:11:56.068 [DEBUG] [Thread-74253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:11:56.070 [DEBUG] [Thread-74255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:11:56.108 [DEBUG] [Thread-74253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:11:56.109 [DEBUG] [Thread-74253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:11:56.110 [DEBUG] [Thread-74253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:11:56.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:11:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:11:56.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:11:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:11:56.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:11:56.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:11:56.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:11:56.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.674756 -999.00  +16.50  38.67     36   +1.60 1 1 2 1 1   887    0 10.73 -203.35 ----- 42.5 38.7 322.6 57.5 18.8 -27.2 19.0 -26.6 19.6 -25.0 19.7 -25.4
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.674756
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:11:56.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:11:29', tmtdew=17.83, humidity=29.71, cloud=0.0, wind=36.26, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:11:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:11:56.130 [DEBUG] [Thread-74253] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:11:56.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:11:56.217 [DEBUG] [Thread-74257] [transport.py] [_log()] starting thread (client mode): 0xf574ff40
2025-12-12T18:11:56.217 [DEBUG] [Thread-74257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:11:56.232 [DEBUG] [Thread-74257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:11:56.232 [INFO] [Thread-74257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] client lang: <none>
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] server lang: <none>
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] kex follows: False
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:11:56.239 [DEBUG] [Thread-74257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:11:56.240 [DEBUG] [Thread-74257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:11:56.240 [DEBUG] [Thread-74257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:11:56.240 [DEBUG] [Thread-74257] [transport.py] [_log()] Compression: none
2025-12-12T18:11:56.240 [DEBUG] [Thread-74257] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:11:56.298 [DEBUG] [Thread-74257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:11:56.298 [DEBUG] [Thread-74257] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:11:56.298 [DEBUG] [Thread-74257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:11:56.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:11:56.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:11:56.355 [DEBUG] [Thread-74257] [transport.py] [_log()] userauth is OK
2025-12-12T18:11:56.355 [DEBUG] [Thread-74257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:11:56.355 [DEBUG] [Thread-74257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:11:56.355 [DEBUG] [Thread-74257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:11:56.355 [DEBUG] [Thread-74257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:11:56.369 [INFO] [Thread-74257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:11:56.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:11:56.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:11:57.256 [DEBUG] [Thread-74257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:11:57.256 [DEBUG] [Thread-74257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:11:57.303 [DEBUG] [Thread-74257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:11:57.303 [DEBUG] [Thread-74257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:11:57.312 [DEBUG] [Thread-74257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:11:57.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:11:57.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:11:57.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:11:57.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:11:57.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:11:57.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:11:57.343 [DEBUG] [Thread-74257] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:11:58.933 [DEBUG] [Thread-74259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:11.104 [DEBUG] [Thread-74260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:24.388 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:24.389 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:26.147 [DEBUG] [Thread-74261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:12:27.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:12:27.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:12:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 12, 1), 17.47, 30.39, 0.0, 35.43, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:12:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:12:01
2025-12-12T18:12:28.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:12:28.427 [DEBUG] [Thread-74262] [transport.py] [_log()] starting thread (client mode): 0xf57970a0
2025-12-12T18:12:28.428 [DEBUG] [Thread-74262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:12:28.440 [DEBUG] [Thread-74262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:12:28.441 [INFO] [Thread-74262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:12:28.443 [DEBUG] [Thread-74262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] client lang: <none>
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] server lang: <none>
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] kex follows: False
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:12:28.444 [DEBUG] [Thread-74262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:12:28.445 [DEBUG] [Thread-74262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:12:28.445 [DEBUG] [Thread-74262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:12:28.445 [DEBUG] [Thread-74262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:12:28.445 [DEBUG] [Thread-74262] [transport.py] [_log()] Compression: none
2025-12-12T18:12:28.445 [DEBUG] [Thread-74262] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:12:28.463 [DEBUG] [Thread-74262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:12:28.464 [DEBUG] [Thread-74262] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:12:28.464 [DEBUG] [Thread-74262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:12:28.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:12:28.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:12:28.466 [DEBUG] [Thread-74262] [transport.py] [_log()] userauth is OK
2025-12-12T18:12:28.466 [DEBUG] [Thread-74262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:12:28.466 [DEBUG] [Thread-74262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:12:28.466 [DEBUG] [Thread-74262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:12:28.466 [DEBUG] [Thread-74262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:12:28.485 [INFO] [Thread-74262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:12:28.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:12:29.130 [DEBUG] [Thread-74262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:12:29.130 [DEBUG] [Thread-74262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:12:29.131 [DEBUG] [Thread-74262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:12:29.171 [DEBUG] [Thread-74262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:12:29.171 [DEBUG] [Thread-74262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:12:29.174 [DEBUG] [Thread-74262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:12:29.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:12:29.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:12:29.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:12:29.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:12:29.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:12:29.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:12:29.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:12:29.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:12:29.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:12:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.675103 -999.00  +16.40  37.31     36   +1.60 1 1 2 1 1   887    0 10.62 -197.40 ----- 32.5 37.3 315.2 45.6 18.8 -27.0 19.0 -26.8 19.6 -24.2 19.7 -25.6
2025-12-12T18:12:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:12:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:12:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.675103
2025-12-12T18:12:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:12:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:12:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:12:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:12:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:12:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:12:01', tmtdew=17.47, humidity=30.39, cloud=0.0, wind=35.43, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:12:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:12:29.191 [DEBUG] [Thread-74262] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:12:29.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:12:29.290 [DEBUG] [Thread-74265] [transport.py] [_log()] starting thread (client mode): 0xf57bc190
2025-12-12T18:12:29.291 [DEBUG] [Thread-74265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:12:29.306 [DEBUG] [Thread-74265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:12:29.306 [INFO] [Thread-74265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] client lang: <none>
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] server lang: <none>
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] kex follows: False
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:12:29.314 [DEBUG] [Thread-74265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:12:29.315 [DEBUG] [Thread-74265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:12:29.315 [DEBUG] [Thread-74265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:12:29.315 [DEBUG] [Thread-74265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:12:29.315 [DEBUG] [Thread-74265] [transport.py] [_log()] Compression: none
2025-12-12T18:12:29.315 [DEBUG] [Thread-74265] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:12:29.374 [DEBUG] [Thread-74265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:12:29.375 [DEBUG] [Thread-74265] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:12:29.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:12:29.376 [DEBUG] [Thread-74265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:12:29.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:12:29.431 [DEBUG] [Thread-74265] [transport.py] [_log()] userauth is OK
2025-12-12T18:12:29.431 [DEBUG] [Thread-74265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:12:29.431 [DEBUG] [Thread-74265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:12:29.431 [DEBUG] [Thread-74265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:12:29.432 [DEBUG] [Thread-74265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:12:29.451 [INFO] [Thread-74265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:12:29.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:12:29.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:12:30.312 [DEBUG] [Thread-74265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:12:30.312 [DEBUG] [Thread-74265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:12:30.360 [DEBUG] [Thread-74265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:12:30.360 [DEBUG] [Thread-74265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:12:30.369 [DEBUG] [Thread-74265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:12:30.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:12:30.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:12:30.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:12:30.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:12:30.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:12:30.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:12:30.404 [DEBUG] [Thread-74265] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:12:41.183 [DEBUG] [Thread-74267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:56.228 [DEBUG] [Thread-74268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:12:58.985 [DEBUG] [Thread-74269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:13:00.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:13:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:13:01.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 12, 33), 17.47, 30.5, 0.0, 46.75, 17.06, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:13:01.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:12:33
2025-12-12T18:13:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:13:01.388 [DEBUG] [Thread-74270] [transport.py] [_log()] starting thread (client mode): 0xf5797220
2025-12-12T18:13:01.388 [DEBUG] [Thread-74270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:13:01.409 [DEBUG] [Thread-74270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:13:01.409 [INFO] [Thread-74270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] client lang: <none>
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] server lang: <none>
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] kex follows: False
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:13:01.412 [DEBUG] [Thread-74270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:13:01.413 [DEBUG] [Thread-74270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:13:01.413 [DEBUG] [Thread-74270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:13:01.413 [DEBUG] [Thread-74270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:13:01.413 [DEBUG] [Thread-74270] [transport.py] [_log()] Compression: none
2025-12-12T18:13:01.413 [DEBUG] [Thread-74270] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:13:01.430 [DEBUG] [Thread-74270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:13:01.431 [DEBUG] [Thread-74270] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:13:01.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:13:01.432 [DEBUG] [Thread-74270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:13:01.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:13:01.434 [DEBUG] [Thread-74270] [transport.py] [_log()] userauth is OK
2025-12-12T18:13:01.434 [DEBUG] [Thread-74270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:13:01.434 [DEBUG] [Thread-74270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:13:01.434 [DEBUG] [Thread-74270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:13:01.434 [DEBUG] [Thread-74270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:13:01.458 [INFO] [Thread-74270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:13:01.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:13:02.038 [DEBUG] [Thread-74270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:13:02.038 [DEBUG] [Thread-74270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:13:02.039 [DEBUG] [Thread-74270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:13:02.079 [DEBUG] [Thread-74270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:13:02.079 [DEBUG] [Thread-74270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:13:02.081 [DEBUG] [Thread-74270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:13:02.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:13:02.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:13:02.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:13:02.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:13:02.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:13:02.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:13:02.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:13:02.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:13:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:13:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.675103 -999.00  +16.40  37.31     36   +1.60 1 1 2 1 1   887    0 10.62 -197.40 ----- 32.5 37.3 315.2 45.6 18.8 -27.0 19.0 -26.8 19.6 -24.2 19.7 -25.6
2025-12-12T18:13:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:13:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:13:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.675103
2025-12-12T18:13:02.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:13:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:13:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:13:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:13:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:13:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:12:33', tmtdew=17.47, humidity=30.5, cloud=0.0, wind=46.75, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:12:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:13:02.098 [DEBUG] [Thread-74270] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:13:02.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:13:02.195 [DEBUG] [Thread-74273] [transport.py] [_log()] starting thread (client mode): 0xf813d6c0
2025-12-12T18:13:02.195 [DEBUG] [Thread-74273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:13:02.210 [DEBUG] [Thread-74273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:13:02.210 [INFO] [Thread-74273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:02.218 [DEBUG] [Thread-74273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] client lang: <none>
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] server lang: <none>
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] kex follows: False
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:13:02.219 [DEBUG] [Thread-74273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:13:02.220 [DEBUG] [Thread-74273] [transport.py] [_log()] Compression: none
2025-12-12T18:13:02.220 [DEBUG] [Thread-74273] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:13:02.275 [DEBUG] [Thread-74273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:13:02.276 [DEBUG] [Thread-74273] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:13:02.276 [DEBUG] [Thread-74273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:13:02.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:13:02.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:13:02.331 [DEBUG] [Thread-74273] [transport.py] [_log()] userauth is OK
2025-12-12T18:13:02.331 [DEBUG] [Thread-74273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:13:02.332 [DEBUG] [Thread-74273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:13:02.332 [DEBUG] [Thread-74273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:13:02.332 [DEBUG] [Thread-74273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:13:02.352 [INFO] [Thread-74273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:13:02.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:13:02.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:13:03.221 [DEBUG] [Thread-74273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:13:03.221 [DEBUG] [Thread-74273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:13:03.269 [DEBUG] [Thread-74273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:13:03.269 [DEBUG] [Thread-74273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:13:03.278 [DEBUG] [Thread-74273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:13:03.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:13:03.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:13:03.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:13:03.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:13:03.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:13:03.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:13:03.312 [DEBUG] [Thread-74273] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:13:11.257 [DEBUG] [Thread-74275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:24.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:24.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:26.309 [DEBUG] [Thread-74276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:13:33.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:13:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:13:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 13, 5), 16.98, 31.38, 0.0, 41.59, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:13:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:13:05
2025-12-12T18:13:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:13:34.276 [DEBUG] [Thread-74277] [transport.py] [_log()] starting thread (client mode): 0xf813fac0
2025-12-12T18:13:34.276 [DEBUG] [Thread-74277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:13:34.296 [DEBUG] [Thread-74277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:13:34.296 [INFO] [Thread-74277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] client lang: <none>
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] server lang: <none>
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] kex follows: False
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:13:34.299 [DEBUG] [Thread-74277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:13:34.300 [DEBUG] [Thread-74277] [transport.py] [_log()] Compression: none
2025-12-12T18:13:34.300 [DEBUG] [Thread-74277] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:13:34.318 [DEBUG] [Thread-74277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:13:34.318 [DEBUG] [Thread-74277] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:13:34.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:13:34.319 [DEBUG] [Thread-74277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:13:34.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:13:34.321 [DEBUG] [Thread-74277] [transport.py] [_log()] userauth is OK
2025-12-12T18:13:34.321 [DEBUG] [Thread-74277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:13:34.321 [DEBUG] [Thread-74277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:13:34.321 [DEBUG] [Thread-74277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:13:34.322 [DEBUG] [Thread-74277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:13:34.345 [INFO] [Thread-74277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:13:34.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:13:35.074 [DEBUG] [Thread-74277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:13:35.074 [DEBUG] [Thread-74277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:13:35.075 [DEBUG] [Thread-74277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:13:35.115 [DEBUG] [Thread-74277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:13:35.115 [DEBUG] [Thread-74277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:13:35.117 [DEBUG] [Thread-74277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:13:35.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:13:35.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:13:35.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:13:35.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:13:35.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:13:35.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:13:35.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:13:35.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:13:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:13:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.675798 -999.00  +16.30  38.54     37   +1.80 1 1 2 1 1   887    0 10.47 -202.47 ----- 47.5 38.5 307.8 50.5 18.7 -27.5 18.9 -27.2 19.4 -25.9 19.6 -25.9
2025-12-12T18:13:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:13:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:13:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.675798
2025-12-12T18:13:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:13:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:13:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:13:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:13:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:13:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:13:05', tmtdew=16.98, humidity=31.38, cloud=0.0, wind=41.59, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:13:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:13:35.140 [DEBUG] [Thread-74277] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:13:35.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:13:35.237 [DEBUG] [Thread-74280] [transport.py] [_log()] starting thread (client mode): 0xf813f580
2025-12-12T18:13:35.237 [DEBUG] [Thread-74280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:13:35.251 [DEBUG] [Thread-74280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:13:35.251 [INFO] [Thread-74280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:13:35.259 [DEBUG] [Thread-74280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] client lang: <none>
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] server lang: <none>
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] kex follows: False
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] Compression: none
2025-12-12T18:13:35.260 [DEBUG] [Thread-74280] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:13:35.318 [DEBUG] [Thread-74280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:13:35.318 [DEBUG] [Thread-74280] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:13:35.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:13:35.319 [DEBUG] [Thread-74280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:13:35.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:13:35.375 [DEBUG] [Thread-74280] [transport.py] [_log()] userauth is OK
2025-12-12T18:13:35.375 [DEBUG] [Thread-74280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:13:35.375 [DEBUG] [Thread-74280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:13:35.375 [DEBUG] [Thread-74280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:13:35.375 [DEBUG] [Thread-74280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:13:35.394 [INFO] [Thread-74280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:13:35.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:13:35.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:13:36.210 [DEBUG] [Thread-74280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:13:36.210 [DEBUG] [Thread-74280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:13:36.258 [DEBUG] [Thread-74280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:13:36.258 [DEBUG] [Thread-74280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:13:36.268 [DEBUG] [Thread-74280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:13:36.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:13:36.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:13:36.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:13:36.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:13:36.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:13:36.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:13:36.302 [DEBUG] [Thread-74280] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:13:41.340 [DEBUG] [Thread-74282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:56.379 [DEBUG] [Thread-74283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:13:59.039 [DEBUG] [Thread-74284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:14:06.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:14:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:14:07.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 13, 37), 17.01, 31.43, 0.0, 43.9, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:14:07.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:13:37
2025-12-12T18:14:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:14:07.295 [DEBUG] [Thread-74285] [transport.py] [_log()] starting thread (client mode): 0xf813e4d0
2025-12-12T18:14:07.295 [DEBUG] [Thread-74285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:14:07.315 [DEBUG] [Thread-74285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:14:07.315 [INFO] [Thread-74285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] client lang: <none>
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] server lang: <none>
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] kex follows: False
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] Compression: none
2025-12-12T18:14:07.318 [DEBUG] [Thread-74285] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:14:07.338 [DEBUG] [Thread-74285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:14:07.339 [DEBUG] [Thread-74285] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:14:07.339 [DEBUG] [Thread-74285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:14:07.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:14:07.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:14:07.341 [DEBUG] [Thread-74285] [transport.py] [_log()] userauth is OK
2025-12-12T18:14:07.341 [DEBUG] [Thread-74285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:14:07.341 [DEBUG] [Thread-74285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:14:07.341 [DEBUG] [Thread-74285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:14:07.341 [DEBUG] [Thread-74285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:14:07.361 [INFO] [Thread-74285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:14:07.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:14:07.963 [DEBUG] [Thread-74285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:14:07.963 [DEBUG] [Thread-74285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:14:07.964 [DEBUG] [Thread-74285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:14:08.004 [DEBUG] [Thread-74285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:14:08.004 [DEBUG] [Thread-74285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:14:08.006 [DEBUG] [Thread-74285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:14:08.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:14:08.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:14:08.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:14:08.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:14:08.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:14:08.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:14:08.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:14:08.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:14:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:14:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.675798 -999.00  +16.30  38.54     37   +1.80 1 1 2 1 1   887    0 10.47 -202.47 ----- 47.5 38.5 307.8 50.5 18.7 -27.5 18.9 -27.2 19.4 -25.9 19.6 -25.9
2025-12-12T18:14:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.675798
2025-12-12T18:14:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:14:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:14:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:14:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:14:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:14:08.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:13:37', tmtdew=17.01, humidity=31.43, cloud=0.0, wind=43.9, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:13:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:14:08.033 [DEBUG] [Thread-74285] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:14:08.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:14:08.130 [DEBUG] [Thread-74288] [transport.py] [_log()] starting thread (client mode): 0xf574cd30
2025-12-12T18:14:08.131 [DEBUG] [Thread-74288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:14:08.145 [DEBUG] [Thread-74288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:14:08.145 [INFO] [Thread-74288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:14:08.152 [DEBUG] [Thread-74288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:14:08.152 [DEBUG] [Thread-74288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:14:08.152 [DEBUG] [Thread-74288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:14:08.152 [DEBUG] [Thread-74288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:08.152 [DEBUG] [Thread-74288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:08.152 [DEBUG] [Thread-74288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] client lang: <none>
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] server lang: <none>
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] kex follows: False
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] Compression: none
2025-12-12T18:14:08.153 [DEBUG] [Thread-74288] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:14:08.217 [DEBUG] [Thread-74288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:14:08.217 [DEBUG] [Thread-74288] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:14:08.218 [DEBUG] [Thread-74288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:14:08.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:14:08.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:14:08.274 [DEBUG] [Thread-74288] [transport.py] [_log()] userauth is OK
2025-12-12T18:14:08.274 [DEBUG] [Thread-74288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:14:08.275 [DEBUG] [Thread-74288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:14:08.275 [DEBUG] [Thread-74288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:14:08.275 [DEBUG] [Thread-74288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:14:08.294 [INFO] [Thread-74288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:14:08.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:14:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:14:09.144 [DEBUG] [Thread-74288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:14:09.144 [DEBUG] [Thread-74288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:14:09.192 [DEBUG] [Thread-74288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:14:09.192 [DEBUG] [Thread-74288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:14:09.201 [DEBUG] [Thread-74288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:14:09.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:14:09.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')
2025-12-12T18:14:09.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:14:09.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:14:09.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:14:09.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:14:09.235 [DEBUG] [Thread-74288] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:14:11.404 [DEBUG] [Thread-74290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:24.697 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:24.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:26.441 [DEBUG] [Thread-74291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:14:39.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:14:39.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:14:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 14, 9), 17.04, 31.37, 0.0, 43.95, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:14:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:14:09
2025-12-12T18:14:40.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:14:40.196 [DEBUG] [Thread-74292] [transport.py] [_log()] starting thread (client mode): 0xf574f910
2025-12-12T18:14:40.196 [DEBUG] [Thread-74292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:14:40.217 [DEBUG] [Thread-74292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:14:40.217 [INFO] [Thread-74292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:40.218 [DEBUG] [Thread-74292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] client lang: <none>
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] server lang: <none>
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] kex follows: False
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] Compression: none
2025-12-12T18:14:40.219 [DEBUG] [Thread-74292] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:14:40.227 [DEBUG] [Thread-74292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:14:40.228 [DEBUG] [Thread-74292] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:14:40.228 [DEBUG] [Thread-74292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:14:40.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:14:40.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:14:40.230 [DEBUG] [Thread-74292] [transport.py] [_log()] userauth is OK
2025-12-12T18:14:40.230 [DEBUG] [Thread-74292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:14:40.230 [DEBUG] [Thread-74292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:14:40.231 [DEBUG] [Thread-74292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:14:40.231 [DEBUG] [Thread-74292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:14:40.248 [INFO] [Thread-74292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:14:40.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:14:40.960 [DEBUG] [Thread-74292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:14:40.960 [DEBUG] [Thread-74292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:14:40.961 [DEBUG] [Thread-74292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:14:41.001 [DEBUG] [Thread-74292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:14:41.001 [DEBUG] [Thread-74292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:14:41.003 [DEBUG] [Thread-74292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:14:41.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:14:41.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:14:41.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:14:41.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:14:41.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:14:41.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:14:41.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:14:41.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:14:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:14:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.676145 -999.00  +16.20  38.84     37   +1.80 1 1 2 1 1   887    0 10.31 -207.50 ----- 46.5 38.8 323.0 57.8 18.6 -27.2 18.9 -26.8 19.5 -24.4 19.5 -25.6
2025-12-12T18:14:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:14:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:14:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.676145
2025-12-12T18:14:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:14:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:14:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:14:41.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:14:41.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:14:41.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:14:09', tmtdew=17.04, humidity=31.37, cloud=0.0, wind=43.95, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:13:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:14:41.021 [DEBUG] [Thread-74292] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:14:41.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:14:41.118 [DEBUG] [Thread-74295] [transport.py] [_log()] starting thread (client mode): 0xf813ee90
2025-12-12T18:14:41.118 [DEBUG] [Thread-74295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:14:41.133 [DEBUG] [Thread-74295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:14:41.133 [INFO] [Thread-74295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:14:41.141 [DEBUG] [Thread-74295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:14:41.141 [DEBUG] [Thread-74295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:14:41.141 [DEBUG] [Thread-74295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:14:41.141 [DEBUG] [Thread-74295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:41.141 [DEBUG] [Thread-74295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:14:41.141 [DEBUG] [Thread-74295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] client lang: <none>
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] server lang: <none>
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] kex follows: False
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] Compression: none
2025-12-12T18:14:41.142 [DEBUG] [Thread-74295] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:14:41.198 [DEBUG] [Thread-74295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:14:41.198 [DEBUG] [Thread-74295] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:14:41.199 [DEBUG] [Thread-74295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:14:41.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:14:41.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:14:41.254 [DEBUG] [Thread-74295] [transport.py] [_log()] userauth is OK
2025-12-12T18:14:41.255 [DEBUG] [Thread-74295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:14:41.255 [DEBUG] [Thread-74295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:14:41.255 [DEBUG] [Thread-74295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:14:41.255 [DEBUG] [Thread-74295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:14:41.274 [INFO] [Thread-74295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:14:41.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:14:41.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:14:41.469 [DEBUG] [Thread-74297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:42.123 [DEBUG] [Thread-74295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:14:42.124 [DEBUG] [Thread-74295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:14:42.172 [DEBUG] [Thread-74295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:14:42.172 [DEBUG] [Thread-74295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:14:42.180 [DEBUG] [Thread-74295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:14:42.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:14:42.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:14:42.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:14:42.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:14:42.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:14:42.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:14:42.214 [DEBUG] [Thread-74295] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:14:56.515 [DEBUG] [Thread-74298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:14:59.092 [DEBUG] [Thread-74299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:11.543 [DEBUG] [Thread-74300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:15:12.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:15:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:15:12.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 14, 41), 16.98, 31.42, 0.0, 49.88, 16.81, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:15:12.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:14:41
2025-12-12T18:15:13.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:15:13.239 [DEBUG] [Thread-74301] [transport.py] [_log()] starting thread (client mode): 0xf57be590
2025-12-12T18:15:13.239 [DEBUG] [Thread-74301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:15:13.259 [DEBUG] [Thread-74301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:15:13.259 [INFO] [Thread-74301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:15:13.262 [DEBUG] [Thread-74301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:15:13.262 [DEBUG] [Thread-74301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:15:13.262 [DEBUG] [Thread-74301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:15:13.262 [DEBUG] [Thread-74301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:13.262 [DEBUG] [Thread-74301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:13.262 [DEBUG] [Thread-74301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] client lang: <none>
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] server lang: <none>
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] kex follows: False
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] Compression: none
2025-12-12T18:15:13.263 [DEBUG] [Thread-74301] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:15:13.278 [DEBUG] [Thread-74301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:15:13.278 [DEBUG] [Thread-74301] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:15:13.278 [DEBUG] [Thread-74301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:15:13.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:15:13.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:15:13.279 [DEBUG] [Thread-74301] [transport.py] [_log()] userauth is OK
2025-12-12T18:15:13.279 [DEBUG] [Thread-74301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:15:13.279 [DEBUG] [Thread-74301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:15:13.280 [DEBUG] [Thread-74301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:15:13.280 [DEBUG] [Thread-74301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:15:13.295 [INFO] [Thread-74301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:15:13.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:15:13.970 [DEBUG] [Thread-74301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:15:13.970 [DEBUG] [Thread-74301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:15:13.970 [DEBUG] [Thread-74301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:15:14.010 [DEBUG] [Thread-74301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:15:14.011 [DEBUG] [Thread-74301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:15:14.013 [DEBUG] [Thread-74301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:15:14.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:15:14.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:15:14.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:15:14.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:15:14.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:15:14.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.676839 -999.00  +16.10  45.58     38   +1.90 1 1 2 1 1   887    0 10.24 -207.16 ----- 47.9 45.6 316.2 57.2 18.5 -27.5 18.8 -26.7 19.2 -27.1 19.4 -25.5
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:15:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.676839
2025-12-12T18:15:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:15:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:15:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:15:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:15:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:15:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:14:41', tmtdew=16.98, humidity=31.42, cloud=0.0, wind=49.88, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:14:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:15:14.032 [DEBUG] [Thread-74301] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:15:14.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:15:14.117 [DEBUG] [Thread-74304] [transport.py] [_log()] starting thread (client mode): 0xf575e260
2025-12-12T18:15:14.117 [DEBUG] [Thread-74304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:15:14.132 [DEBUG] [Thread-74304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:15:14.132 [INFO] [Thread-74304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] client lang: <none>
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] server lang: <none>
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] kex follows: False
2025-12-12T18:15:14.139 [DEBUG] [Thread-74304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:15:14.140 [DEBUG] [Thread-74304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:15:14.140 [DEBUG] [Thread-74304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:15:14.140 [DEBUG] [Thread-74304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:15:14.140 [DEBUG] [Thread-74304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:15:14.140 [DEBUG] [Thread-74304] [transport.py] [_log()] Compression: none
2025-12-12T18:15:14.140 [DEBUG] [Thread-74304] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:15:14.197 [DEBUG] [Thread-74304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:15:14.197 [DEBUG] [Thread-74304] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:15:14.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:15:14.197 [DEBUG] [Thread-74304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:15:14.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:15:14.254 [DEBUG] [Thread-74304] [transport.py] [_log()] userauth is OK
2025-12-12T18:15:14.254 [DEBUG] [Thread-74304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:15:14.254 [DEBUG] [Thread-74304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:15:14.254 [DEBUG] [Thread-74304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:15:14.254 [DEBUG] [Thread-74304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:15:14.269 [INFO] [Thread-74304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:15:14.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:15:14.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:15:15.108 [DEBUG] [Thread-74304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:15:15.108 [DEBUG] [Thread-74304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:15:15.155 [DEBUG] [Thread-74304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:15:15.155 [DEBUG] [Thread-74304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:15:15.163 [DEBUG] [Thread-74304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:15:15.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:15:15.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:15:15.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:15:15.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:15:15.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:15:15.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:15:15.195 [DEBUG] [Thread-74304] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:15:24.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:24.839 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:26.570 [DEBUG] [Thread-74306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:41.624 [DEBUG] [Thread-74307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:15:45.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:15:45.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:15:45.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 15, 13), 17.01, 31.37, 0.0, 50.97, 16.86, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:15:45.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:15:13
2025-12-12T18:15:46.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:15:46.180 [DEBUG] [Thread-74308] [transport.py] [_log()] starting thread (client mode): 0xf57be0e0
2025-12-12T18:15:46.181 [DEBUG] [Thread-74308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:15:46.200 [DEBUG] [Thread-74308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:15:46.200 [INFO] [Thread-74308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] client lang: <none>
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] server lang: <none>
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] kex follows: False
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] Compression: none
2025-12-12T18:15:46.203 [DEBUG] [Thread-74308] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:15:46.219 [DEBUG] [Thread-74308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:15:46.220 [DEBUG] [Thread-74308] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:15:46.220 [DEBUG] [Thread-74308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:15:46.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:15:46.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:15:46.222 [DEBUG] [Thread-74308] [transport.py] [_log()] userauth is OK
2025-12-12T18:15:46.222 [DEBUG] [Thread-74308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:15:46.222 [DEBUG] [Thread-74308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:15:46.222 [DEBUG] [Thread-74308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:15:46.222 [DEBUG] [Thread-74308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:15:46.240 [INFO] [Thread-74308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:15:46.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:15:47.034 [DEBUG] [Thread-74308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:15:47.034 [DEBUG] [Thread-74308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:15:47.034 [DEBUG] [Thread-74308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:15:47.076 [DEBUG] [Thread-74308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:15:47.076 [DEBUG] [Thread-74308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:15:47.078 [DEBUG] [Thread-74308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:15:47.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:15:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:15:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:15:47.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:15:47.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:15:47.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:15:47.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:15:47.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.677186 -999.00  +16.20  46.95     37   +1.80 1 1 2 1 1   887    0 10.01 -207.85 ----- 47.8 47.0 315.8 56.4 18.4 -26.6 18.7 -26.7 19.2 -24.9 19.3 -25.7
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.677186
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:15:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:15:13', tmtdew=17.01, humidity=31.37, cloud=0.0, wind=50.97, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:15:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:15:47.090 [DEBUG] [Thread-74308] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:15:47.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:15:47.177 [DEBUG] [Thread-74311] [transport.py] [_log()] starting thread (client mode): 0xf5795300
2025-12-12T18:15:47.177 [DEBUG] [Thread-74311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:15:47.191 [DEBUG] [Thread-74311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:15:47.191 [INFO] [Thread-74311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] client lang: <none>
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] server lang: <none>
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] kex follows: False
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] Compression: none
2025-12-12T18:15:47.199 [DEBUG] [Thread-74311] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:15:47.257 [DEBUG] [Thread-74311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:15:47.258 [DEBUG] [Thread-74311] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:15:47.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:15:47.258 [DEBUG] [Thread-74311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:15:47.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:15:47.314 [DEBUG] [Thread-74311] [transport.py] [_log()] userauth is OK
2025-12-12T18:15:47.314 [DEBUG] [Thread-74311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:15:47.314 [DEBUG] [Thread-74311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:15:47.314 [DEBUG] [Thread-74311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:15:47.314 [DEBUG] [Thread-74311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:15:47.332 [INFO] [Thread-74311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:15:47.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:15:47.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:15:48.187 [DEBUG] [Thread-74311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:15:48.187 [DEBUG] [Thread-74311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:15:48.235 [DEBUG] [Thread-74311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:15:48.235 [DEBUG] [Thread-74311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:15:48.243 [DEBUG] [Thread-74311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:15:48.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:15:48.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:15:48.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:15:48.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:15:48.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:15:48.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:15:48.274 [DEBUG] [Thread-74311] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:15:56.654 [DEBUG] [Thread-74313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:15:59.140 [DEBUG] [Thread-74314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:11.695 [DEBUG] [Thread-74315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:18.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:16:18.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:16:18.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:16:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 15, 45), 16.6, 32.38, 0.0, 43.61, 16.52, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:16:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:15:45
2025-12-12T18:16:19.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:16:19.284 [DEBUG] [Thread-74316] [transport.py] [_log()] starting thread (client mode): 0xf5797550
2025-12-12T18:16:19.284 [DEBUG] [Thread-74316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:16:19.304 [DEBUG] [Thread-74316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:16:19.304 [INFO] [Thread-74316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:19.307 [DEBUG] [Thread-74316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] client lang: <none>
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] server lang: <none>
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] kex follows: False
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] Compression: none
2025-12-12T18:16:19.308 [DEBUG] [Thread-74316] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:16:19.315 [DEBUG] [Thread-74316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:16:19.315 [DEBUG] [Thread-74316] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:16:19.315 [DEBUG] [Thread-74316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:16:19.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:16:19.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:16:19.316 [DEBUG] [Thread-74316] [transport.py] [_log()] userauth is OK
2025-12-12T18:16:19.316 [DEBUG] [Thread-74316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:16:19.316 [DEBUG] [Thread-74316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:16:19.316 [DEBUG] [Thread-74316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:16:19.316 [DEBUG] [Thread-74316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:16:19.325 [INFO] [Thread-74316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:16:19.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:16:19.902 [DEBUG] [Thread-74316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:16:19.903 [DEBUG] [Thread-74316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:16:19.903 [DEBUG] [Thread-74316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:16:19.944 [DEBUG] [Thread-74316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:16:19.944 [DEBUG] [Thread-74316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:16:19.946 [DEBUG] [Thread-74316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:16:19.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:16:19.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:16:19.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:16:19.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:16:19.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:16:19.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:16:19.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:16:19.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:16:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:16:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.677534 -999.00  +16.40  43.37     37   +2.00 1 1 2 1 1   887    0 10.90 -190.96 ----- 45.9 43.4 317.6 54.1 18.4 -26.5 18.6 -26.6 19.2 -25.9 19.3 -25.3
2025-12-12T18:16:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:16:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:16:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.677534
2025-12-12T18:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:15:45', tmtdew=16.6, humidity=32.38, cloud=0.0, wind=43.61, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:15:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:16:19.964 [DEBUG] [Thread-74316] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:16:20.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:16:20.061 [DEBUG] [Thread-74319] [transport.py] [_log()] starting thread (client mode): 0xf574f4c0
2025-12-12T18:16:20.061 [DEBUG] [Thread-74319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:16:20.076 [DEBUG] [Thread-74319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:16:20.076 [INFO] [Thread-74319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:16:20.083 [DEBUG] [Thread-74319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:16:20.083 [DEBUG] [Thread-74319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:16:20.083 [DEBUG] [Thread-74319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] client lang: <none>
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] server lang: <none>
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] kex follows: False
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] Compression: none
2025-12-12T18:16:20.084 [DEBUG] [Thread-74319] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:16:20.141 [DEBUG] [Thread-74319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:16:20.141 [DEBUG] [Thread-74319] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:16:20.142 [DEBUG] [Thread-74319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:16:20.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:16:20.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:16:20.199 [DEBUG] [Thread-74319] [transport.py] [_log()] userauth is OK
2025-12-12T18:16:20.199 [DEBUG] [Thread-74319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:16:20.199 [DEBUG] [Thread-74319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:16:20.200 [DEBUG] [Thread-74319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:16:20.200 [DEBUG] [Thread-74319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:16:20.215 [INFO] [Thread-74319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:16:20.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:16:20.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:16:21.059 [DEBUG] [Thread-74319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:16:21.060 [DEBUG] [Thread-74319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:16:21.108 [DEBUG] [Thread-74319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:16:21.108 [DEBUG] [Thread-74319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:16:21.117 [DEBUG] [Thread-74319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:16:21.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:16:21.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:16: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
2025-12-12T18:16:21.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:16:21.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:16:21.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:16:21.152 [DEBUG] [Thread-74319] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:16:24.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:24.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:26.722 [DEBUG] [Thread-74321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:41.764 [DEBUG] [Thread-74322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:16:51.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:16:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:16:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 16, 17), 16.58, 32.41, 0.0, 42.13, 16.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:16:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:16:17
2025-12-12T18:16:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:16:52.164 [DEBUG] [Thread-74323] [transport.py] [_log()] starting thread (client mode): 0xf578b8e0
2025-12-12T18:16:52.164 [DEBUG] [Thread-74323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:16:52.184 [DEBUG] [Thread-74323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:16:52.184 [INFO] [Thread-74323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] client lang: <none>
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] server lang: <none>
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] kex follows: False
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] Compression: none
2025-12-12T18:16:52.187 [DEBUG] [Thread-74323] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:16:52.195 [DEBUG] [Thread-74323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:16:52.195 [DEBUG] [Thread-74323] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:16:52.196 [DEBUG] [Thread-74323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:16:52.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:16:52.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:16:52.197 [DEBUG] [Thread-74323] [transport.py] [_log()] userauth is OK
2025-12-12T18:16:52.197 [DEBUG] [Thread-74323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:16:52.197 [DEBUG] [Thread-74323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:16:52.197 [DEBUG] [Thread-74323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:16:52.197 [DEBUG] [Thread-74323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:16:52.210 [INFO] [Thread-74323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:16:52.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:16:52.943 [DEBUG] [Thread-74323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:16:52.943 [DEBUG] [Thread-74323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:16:52.944 [DEBUG] [Thread-74323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:16:52.984 [DEBUG] [Thread-74323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:16:52.984 [DEBUG] [Thread-74323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:16:52.986 [DEBUG] [Thread-74323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:16:52.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:16:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:16:52.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:16:52.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:16:52.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:16:53.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:16:53.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:16:53.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:16:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:16:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.677881 -999.00  +16.70  31.04     37   +2.00 1 1 2 1 1   887    0 10.20 -209.31 ----- 38.8 31.0 314.4 50.6 18.5 -26.5 18.7 -25.8 19.3 -23.8 19.4 -24.9
2025-12-12T18:16:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:16:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:16:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.677881
2025-12-12T18:16:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:16:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:16:53.003 [DEBUG] [Thread-74323] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:16:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:16:17', tmtdew=16.58, humidity=32.41, cloud=0.0, wind=42.13, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:16:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:16:53.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:16:53.107 [DEBUG] [Thread-74326] [transport.py] [_log()] starting thread (client mode): 0xf81e7eb0
2025-12-12T18:16:53.107 [DEBUG] [Thread-74326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:16:53.121 [DEBUG] [Thread-74326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:16:53.121 [INFO] [Thread-74326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:16:53.130 [DEBUG] [Thread-74326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:16:53.130 [DEBUG] [Thread-74326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] client lang: <none>
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] server lang: <none>
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] kex follows: False
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] Compression: none
2025-12-12T18:16:53.131 [DEBUG] [Thread-74326] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:16:53.186 [DEBUG] [Thread-74326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:16:53.186 [DEBUG] [Thread-74326] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:16:53.187 [DEBUG] [Thread-74326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:16:53.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:16:53.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:16:53.243 [DEBUG] [Thread-74326] [transport.py] [_log()] userauth is OK
2025-12-12T18:16:53.243 [DEBUG] [Thread-74326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:16:53.243 [DEBUG] [Thread-74326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:16:53.243 [DEBUG] [Thread-74326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:16:53.243 [DEBUG] [Thread-74326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:16:53.263 [INFO] [Thread-74326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:16:53.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:16:53.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:16:54.092 [DEBUG] [Thread-74326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:16:54.092 [DEBUG] [Thread-74326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:16:54.140 [DEBUG] [Thread-74326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:16:54.140 [DEBUG] [Thread-74326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:16:54.149 [DEBUG] [Thread-74326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:16:54.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:16:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:16:54.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:16:54.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:16:54.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:16:54.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:16:54.183 [DEBUG] [Thread-74326] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:16:56.793 [DEBUG] [Thread-74328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:16:59.195 [DEBUG] [Thread-74329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:11.844 [DEBUG] [Thread-74330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:17:24.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:17:24.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:17:24.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 16, 50), 16.95, 31.6, 0.0, 43.81, 16.63, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:17:24.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:16:50
2025-12-12T18:17:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:17:25.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:25.126 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:25.165 [DEBUG] [Thread-74331] [transport.py] [_log()] starting thread (client mode): 0xf5795d20
2025-12-12T18:17:25.165 [DEBUG] [Thread-74331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:17:25.185 [DEBUG] [Thread-74331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:17:25.185 [INFO] [Thread-74331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:17:25.188 [DEBUG] [Thread-74331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:17:25.188 [DEBUG] [Thread-74331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] client lang: <none>
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] server lang: <none>
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] kex follows: False
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:17:25.189 [DEBUG] [Thread-74331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:17:25.190 [DEBUG] [Thread-74331] [transport.py] [_log()] Compression: none
2025-12-12T18:17:25.190 [DEBUG] [Thread-74331] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:17:25.210 [DEBUG] [Thread-74331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:17:25.210 [DEBUG] [Thread-74331] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:17:25.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:17:25.211 [DEBUG] [Thread-74331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:17:25.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:17:25.213 [DEBUG] [Thread-74331] [transport.py] [_log()] userauth is OK
2025-12-12T18:17:25.213 [DEBUG] [Thread-74331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:17:25.214 [DEBUG] [Thread-74331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:17:25.214 [DEBUG] [Thread-74331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:17:25.214 [DEBUG] [Thread-74331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:17:25.237 [INFO] [Thread-74331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:17:25.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:17:25.836 [DEBUG] [Thread-74331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:17:25.837 [DEBUG] [Thread-74331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:17:25.837 [DEBUG] [Thread-74331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:17:25.878 [DEBUG] [Thread-74331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:17:25.878 [DEBUG] [Thread-74331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:17:25.881 [DEBUG] [Thread-74331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:17:25.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:17:25.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:17:25.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:17:25.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:17:25.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:17:25.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:17:25.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:17:25.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:17:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:17:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.678228 -999.00  +16.50  45.11     36   +1.70 1 1 2 1 1   887    0 9.84 -209.53 ----- 46.8 45.1 311.2 54.3 18.4 -26.8 18.8 -26.5 19.2 -24.4 19.4 -25.0
2025-12-12T18:17:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:17:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:17:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.678228
2025-12-12T18:17:25.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:17:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:17:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:17:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:17:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:17:25.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:16:50', tmtdew=16.95, humidity=31.6, cloud=0.0, wind=43.81, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:16:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:17:25.903 [DEBUG] [Thread-74331] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:17:25.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:17:25.996 [DEBUG] [Thread-74334] [transport.py] [_log()] starting thread (client mode): 0xf575ffd0
2025-12-12T18:17:25.996 [DEBUG] [Thread-74334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:17:26.011 [DEBUG] [Thread-74334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:17:26.011 [INFO] [Thread-74334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:26.019 [DEBUG] [Thread-74334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] client lang: <none>
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] server lang: <none>
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] kex follows: False
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:17:26.020 [DEBUG] [Thread-74334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:17:26.021 [DEBUG] [Thread-74334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:17:26.021 [DEBUG] [Thread-74334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:17:26.021 [DEBUG] [Thread-74334] [transport.py] [_log()] Compression: none
2025-12-12T18:17:26.021 [DEBUG] [Thread-74334] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:17:26.080 [DEBUG] [Thread-74334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:17:26.080 [DEBUG] [Thread-74334] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:17:26.081 [DEBUG] [Thread-74334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:17:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:17:26.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:17:26.139 [DEBUG] [Thread-74334] [transport.py] [_log()] userauth is OK
2025-12-12T18:17:26.139 [DEBUG] [Thread-74334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:17:26.139 [DEBUG] [Thread-74334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:17:26.140 [DEBUG] [Thread-74334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:17:26.140 [DEBUG] [Thread-74334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:17:26.159 [INFO] [Thread-74334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:17:26.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:17:26.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:17:26.874 [DEBUG] [Thread-74336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:27.011 [DEBUG] [Thread-74334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:17:27.012 [DEBUG] [Thread-74334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:17:27.060 [DEBUG] [Thread-74334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:17:27.060 [DEBUG] [Thread-74334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:17:27.069 [DEBUG] [Thread-74334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:17:27.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:17:27.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:17:27.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:17:27.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:17:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:17:27.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:17:27.104 [DEBUG] [Thread-74334] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:17:41.918 [DEBUG] [Thread-74337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:56.949 [DEBUG] [Thread-74338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:17:57.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:17:57.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:17:57.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:17:57.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 17, 54), 16.76, 32.03, 0.0, 44.46, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:17:57.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:17:54
2025-12-12T18:17:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:17:58.078 [DEBUG] [Thread-74339] [transport.py] [_log()] starting thread (client mode): 0xf81e78e0
2025-12-12T18:17:58.078 [DEBUG] [Thread-74339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:17:58.099 [DEBUG] [Thread-74339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:17:58.099 [INFO] [Thread-74339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] client lang: <none>
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] server lang: <none>
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] kex follows: False
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:17:58.102 [DEBUG] [Thread-74339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:17:58.103 [DEBUG] [Thread-74339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:17:58.103 [DEBUG] [Thread-74339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:17:58.103 [DEBUG] [Thread-74339] [transport.py] [_log()] Compression: none
2025-12-12T18:17:58.103 [DEBUG] [Thread-74339] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:17:58.121 [DEBUG] [Thread-74339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:17:58.122 [DEBUG] [Thread-74339] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:17:58.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:17:58.123 [DEBUG] [Thread-74339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:17:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:17:58.126 [DEBUG] [Thread-74339] [transport.py] [_log()] userauth is OK
2025-12-12T18:17:58.126 [DEBUG] [Thread-74339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:17:58.126 [DEBUG] [Thread-74339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:17:58.126 [DEBUG] [Thread-74339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:17:58.126 [DEBUG] [Thread-74339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:17:58.149 [INFO] [Thread-74339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:17:58.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:17:58.910 [DEBUG] [Thread-74339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:17:58.910 [DEBUG] [Thread-74339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:17:58.911 [DEBUG] [Thread-74339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:17:58.951 [DEBUG] [Thread-74339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:17:58.952 [DEBUG] [Thread-74339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:17:58.954 [DEBUG] [Thread-74339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:17:58.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:17:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:17:58.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:17:58.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:17:58.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:17:58.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:17:58.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:17:58.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:17:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:17:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.678575 -999.00  +16.40  48.56     36   +1.50 1 1 2 1 1   887    0 10.05 -205.91 ----- 47.1 48.6 315.2 56.2 18.4 -26.8 18.7 -26.5 19.2 -24.1 19.3 -25.4
2025-12-12T18:17:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:17:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:17:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.678575
2025-12-12T18:17:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:17:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:17:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:17:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:17:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:17:58.973 [DEBUG] [Thread-74339] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:17:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:17:54', tmtdew=16.76, humidity=32.03, cloud=0.0, wind=44.46, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:17:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:17:59.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:17:59.071 [DEBUG] [Thread-74342] [transport.py] [_log()] starting thread (client mode): 0xf57036d0
2025-12-12T18:17:59.071 [DEBUG] [Thread-74342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:17:59.086 [DEBUG] [Thread-74342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:17:59.086 [INFO] [Thread-74342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:17:59.093 [DEBUG] [Thread-74342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:17:59.093 [DEBUG] [Thread-74342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] client lang: <none>
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] server lang: <none>
2025-12-12T18:17:59.094 [DEBUG] [Thread-74342] [transport.py] [_log()] kex follows: False
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] Compression: none
2025-12-12T18:17:59.095 [DEBUG] [Thread-74342] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:17:59.154 [DEBUG] [Thread-74342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:17:59.155 [DEBUG] [Thread-74342] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:17:59.155 [DEBUG] [Thread-74342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:17:59.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:17:59.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:17:59.211 [DEBUG] [Thread-74342] [transport.py] [_log()] userauth is OK
2025-12-12T18:17:59.211 [DEBUG] [Thread-74342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:17:59.211 [DEBUG] [Thread-74342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:17:59.211 [DEBUG] [Thread-74342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:17:59.212 [DEBUG] [Thread-74342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:17:59.231 [INFO] [Thread-74342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:17:59.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:17:59.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:17:59.244 [DEBUG] [Thread-74344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:00.071 [DEBUG] [Thread-74342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:18:00.071 [DEBUG] [Thread-74342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:18:00.119 [DEBUG] [Thread-74342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:18:00.119 [DEBUG] [Thread-74342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:18:00.128 [DEBUG] [Thread-74342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:18:00.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:18:00.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:18:00.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:18:00.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:18:00.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:18:00.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:18:00.163 [DEBUG] [Thread-74342] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:18:11.979 [DEBUG] [Thread-74345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:25.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:25.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:27.023 [DEBUG] [Thread-74346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:18:30.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:18:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:18:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 18, 26), 16.73, 32.1, 0.0, 44.36, 16.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:18:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:18:26
2025-12-12T18:18:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:18:31.145 [DEBUG] [Thread-74347] [transport.py] [_log()] starting thread (client mode): 0xf574e500
2025-12-12T18:18:31.145 [DEBUG] [Thread-74347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:18:31.165 [DEBUG] [Thread-74347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:18:31.165 [INFO] [Thread-74347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:18:31.168 [DEBUG] [Thread-74347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:18:31.168 [DEBUG] [Thread-74347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:18:31.168 [DEBUG] [Thread-74347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:18:31.168 [DEBUG] [Thread-74347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:18:31.168 [DEBUG] [Thread-74347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] client lang: <none>
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] server lang: <none>
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] kex follows: False
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] Compression: none
2025-12-12T18:18:31.169 [DEBUG] [Thread-74347] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:18:31.187 [DEBUG] [Thread-74347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:18:31.188 [DEBUG] [Thread-74347] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:18:31.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:18:31.189 [DEBUG] [Thread-74347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:18:31.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:18:31.190 [DEBUG] [Thread-74347] [transport.py] [_log()] userauth is OK
2025-12-12T18:18:31.191 [DEBUG] [Thread-74347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:18:31.191 [DEBUG] [Thread-74347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:18:31.191 [DEBUG] [Thread-74347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:18:31.191 [DEBUG] [Thread-74347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:18:31.214 [INFO] [Thread-74347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:18:31.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:18:31.836 [DEBUG] [Thread-74347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:18:31.836 [DEBUG] [Thread-74347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:18:31.837 [DEBUG] [Thread-74347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:18:31.877 [DEBUG] [Thread-74347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:18:31.878 [DEBUG] [Thread-74347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:18:31.880 [DEBUG] [Thread-74347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:18:31.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:18:31.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:18:31.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:18:31.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:18:31.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:18:31.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:18:31.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:18:31.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:18:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:18:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.678923 -999.00  +16.20  35.19     37   +1.70 1 1 2 1 1   887    0 10.27 -195.21 ----- 34.7 35.2 305.2 57.1 18.4 -27.0 18.6 -26.9 19.2 -23.8 19.3 -25.6
2025-12-12T18:18:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:18:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:18:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.678923
2025-12-12T18:18:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:18:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:18:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:18:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:18:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:18:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:18:26', tmtdew=16.73, humidity=32.1, cloud=0.0, wind=44.36, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:17:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:18:31.900 [DEBUG] [Thread-74347] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:18:31.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:18:31.996 [DEBUG] [Thread-74350] [transport.py] [_log()] starting thread (client mode): 0xf574f910
2025-12-12T18:18:31.996 [DEBUG] [Thread-74350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:18:32.018 [DEBUG] [Thread-74350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:18:32.018 [INFO] [Thread-74350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] client lang: <none>
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] server lang: <none>
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] kex follows: False
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:18:32.026 [DEBUG] [Thread-74350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:18:32.027 [DEBUG] [Thread-74350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:18:32.027 [DEBUG] [Thread-74350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:18:32.027 [DEBUG] [Thread-74350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:18:32.027 [DEBUG] [Thread-74350] [transport.py] [_log()] Compression: none
2025-12-12T18:18:32.027 [DEBUG] [Thread-74350] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:18:32.088 [DEBUG] [Thread-74350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:18:32.088 [DEBUG] [Thread-74350] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:18:32.089 [DEBUG] [Thread-74350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:18:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:18:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:18:32.152 [DEBUG] [Thread-74350] [transport.py] [_log()] userauth is OK
2025-12-12T18:18:32.152 [DEBUG] [Thread-74350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:18:32.152 [DEBUG] [Thread-74350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:18:32.152 [DEBUG] [Thread-74350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:18:32.152 [DEBUG] [Thread-74350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:18:32.170 [INFO] [Thread-74350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:18:32.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:18:32.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:18:33.002 [DEBUG] [Thread-74350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:18:33.002 [DEBUG] [Thread-74350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:18:33.051 [DEBUG] [Thread-74350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:18:33.051 [DEBUG] [Thread-74350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:18:33.064 [DEBUG] [Thread-74350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:18:33.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:18:33.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:18:33.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:18:33.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:18:33.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:18:33.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:18:33.107 [DEBUG] [Thread-74350] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:18:42.052 [DEBUG] [Thread-74352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:57.096 [DEBUG] [Thread-74353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:18:59.300 [DEBUG] [Thread-74354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:03.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:19:03.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:19:03.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:19:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 18, 58), 16.53, 32.5, 0.0, 46.07, 16.25, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:19:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:18:58
2025-12-12T18:19:03.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:19:04.128 [DEBUG] [Thread-74355] [transport.py] [_log()] starting thread (client mode): 0xf5703610
2025-12-12T18:19:04.128 [DEBUG] [Thread-74355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:19:04.148 [DEBUG] [Thread-74355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:19:04.148 [INFO] [Thread-74355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:19:04.151 [DEBUG] [Thread-74355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:19:04.151 [DEBUG] [Thread-74355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:19:04.151 [DEBUG] [Thread-74355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:19:04.151 [DEBUG] [Thread-74355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:04.151 [DEBUG] [Thread-74355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] client lang: <none>
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] server lang: <none>
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] kex follows: False
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] Compression: none
2025-12-12T18:19:04.152 [DEBUG] [Thread-74355] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:19:04.166 [DEBUG] [Thread-74355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:19:04.167 [DEBUG] [Thread-74355] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:19:04.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:19:04.167 [DEBUG] [Thread-74355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:19:04.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:19:04.168 [DEBUG] [Thread-74355] [transport.py] [_log()] userauth is OK
2025-12-12T18:19:04.168 [DEBUG] [Thread-74355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:19:04.168 [DEBUG] [Thread-74355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:19:04.168 [DEBUG] [Thread-74355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:19:04.168 [DEBUG] [Thread-74355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:19:04.177 [INFO] [Thread-74355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:19:04.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:19:04.913 [DEBUG] [Thread-74355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:19:04.913 [DEBUG] [Thread-74355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:19:04.913 [DEBUG] [Thread-74355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:19:04.954 [DEBUG] [Thread-74355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:19:04.954 [DEBUG] [Thread-74355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:19:04.957 [DEBUG] [Thread-74355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:19:04.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:19:04.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:19:04.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:19:04.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:19:04.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:19:04.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:19:04.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.679270 -999.00  +16.20  47.25     37   +1.80 1 1 2 1 1   887    0 9.99 -203.31 ----- 38.2 47.2 311.4 58.6 18.4 -26.6 18.6 -26.7 19.2 -24.5 19.3 -25.1
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.679270
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:19:04.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:18:58', tmtdew=16.53, humidity=32.5, cloud=0.0, wind=46.07, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:18:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:19:04.974 [DEBUG] [Thread-74355] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:19:05.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:19:05.060 [DEBUG] [Thread-74358] [transport.py] [_log()] starting thread (client mode): 0xf81c3cd0
2025-12-12T18:19:05.060 [DEBUG] [Thread-74358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:19:05.076 [DEBUG] [Thread-74358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:19:05.076 [INFO] [Thread-74358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:19:05.085 [DEBUG] [Thread-74358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:19:05.085 [DEBUG] [Thread-74358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:19:05.085 [DEBUG] [Thread-74358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] client lang: <none>
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] server lang: <none>
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] kex follows: False
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] Compression: none
2025-12-12T18:19:05.086 [DEBUG] [Thread-74358] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:19:05.146 [DEBUG] [Thread-74358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:19:05.146 [DEBUG] [Thread-74358] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:19:05.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:19:05.146 [DEBUG] [Thread-74358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:19:05.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:19:05.202 [DEBUG] [Thread-74358] [transport.py] [_log()] userauth is OK
2025-12-12T18:19:05.202 [DEBUG] [Thread-74358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:19:05.202 [DEBUG] [Thread-74358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:19:05.202 [DEBUG] [Thread-74358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:19:05.202 [DEBUG] [Thread-74358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:19:05.215 [INFO] [Thread-74358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:19:05.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:19:05.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:19:06.168 [DEBUG] [Thread-74358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:19:06.168 [DEBUG] [Thread-74358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:19:06.216 [DEBUG] [Thread-74358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:19:06.216 [DEBUG] [Thread-74358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:19:06.225 [DEBUG] [Thread-74358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:19:06.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:19:06.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:19:06.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:19:06.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:19:06.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:19:06.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:19:06.258 [DEBUG] [Thread-74358] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:19:12.126 [DEBUG] [Thread-74360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:25.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:25.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:27.170 [DEBUG] [Thread-74361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:19:36.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:19:36.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:19:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 19, 30), 16.65, 32.23, 0.0, 47.81, 16.3, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:19:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:19:30
2025-12-12T18:19:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:19:37.240 [DEBUG] [Thread-74362] [transport.py] [_log()] starting thread (client mode): 0xf575f6d0
2025-12-12T18:19:37.240 [DEBUG] [Thread-74362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:19:37.260 [DEBUG] [Thread-74362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:19:37.260 [INFO] [Thread-74362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] client lang: <none>
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] server lang: <none>
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] kex follows: False
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:19:37.263 [DEBUG] [Thread-74362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:19:37.264 [DEBUG] [Thread-74362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:19:37.264 [DEBUG] [Thread-74362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:19:37.264 [DEBUG] [Thread-74362] [transport.py] [_log()] Compression: none
2025-12-12T18:19:37.264 [DEBUG] [Thread-74362] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:19:37.282 [DEBUG] [Thread-74362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:19:37.283 [DEBUG] [Thread-74362] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:19:37.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:19:37.284 [DEBUG] [Thread-74362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:19:37.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:19:37.286 [DEBUG] [Thread-74362] [transport.py] [_log()] userauth is OK
2025-12-12T18:19:37.286 [DEBUG] [Thread-74362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:19:37.286 [DEBUG] [Thread-74362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:19:37.286 [DEBUG] [Thread-74362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:19:37.286 [DEBUG] [Thread-74362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:19:37.324 [INFO] [Thread-74362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:19:37.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:19:37.903 [DEBUG] [Thread-74362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:19:37.903 [DEBUG] [Thread-74362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:19:37.904 [DEBUG] [Thread-74362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:19:37.944 [DEBUG] [Thread-74362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:19:37.944 [DEBUG] [Thread-74362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:19:37.947 [DEBUG] [Thread-74362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:19:37.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:19:37.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:19:37.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:19:37.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:19:37.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:19:37.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:19:37.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:19:37.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:19:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:19:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.679617 -999.00  +16.20  45.19     37   +1.70 1 1 2 1 1   887    0 9.46 -203.66 ----- 40.0 45.2 310.0 49.2 18.4 -26.6 18.6 -26.9 19.1 -24.1 19.3 -25.6
2025-12-12T18:19:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:19:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:19:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.679617
2025-12-12T18:19:37.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:19:37.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:19:37.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:19:37.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:19:37.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:19:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:19:30', tmtdew=16.65, humidity=32.23, cloud=0.0, wind=47.81, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:18:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:19:37.976 [DEBUG] [Thread-74362] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:19:38.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:19:38.074 [DEBUG] [Thread-74365] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T18:19:38.075 [DEBUG] [Thread-74365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:19:38.089 [DEBUG] [Thread-74365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:19:38.089 [INFO] [Thread-74365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] client lang: <none>
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] server lang: <none>
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] kex follows: False
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:19:38.096 [DEBUG] [Thread-74365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:19:38.097 [DEBUG] [Thread-74365] [transport.py] [_log()] Compression: none
2025-12-12T18:19:38.097 [DEBUG] [Thread-74365] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:19:38.153 [DEBUG] [Thread-74365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:19:38.153 [DEBUG] [Thread-74365] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:19:38.153 [DEBUG] [Thread-74365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:19:38.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:19:38.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:19:38.215 [DEBUG] [Thread-74365] [transport.py] [_log()] userauth is OK
2025-12-12T18:19:38.215 [DEBUG] [Thread-74365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:19:38.215 [DEBUG] [Thread-74365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:19:38.215 [DEBUG] [Thread-74365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:19:38.215 [DEBUG] [Thread-74365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:19:38.233 [INFO] [Thread-74365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:19:38.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:19:38.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:19:39.077 [DEBUG] [Thread-74365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:19:39.077 [DEBUG] [Thread-74365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:19:39.126 [DEBUG] [Thread-74365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:19:39.126 [DEBUG] [Thread-74365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:19:39.135 [DEBUG] [Thread-74365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:19:39.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:19: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')
2025-12-12T18:19:39.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:19:39.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:19:39.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:19:39.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:19:39.167 [DEBUG] [Thread-74365] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:19:42.196 [DEBUG] [Thread-74367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:57.232 [DEBUG] [Thread-74368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:19:59.361 [DEBUG] [Thread-74369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:09.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:20:09.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:20:09.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:20:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 20, 2), 16.67, 32.17, 0.0, 49.16, 16.25, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:20:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:20:02
2025-12-12T18:20:09.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:20:10.126 [DEBUG] [Thread-74370] [transport.py] [_log()] starting thread (client mode): 0xf81c12a0
2025-12-12T18:20:10.126 [DEBUG] [Thread-74370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:20:10.146 [DEBUG] [Thread-74370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:20:10.147 [INFO] [Thread-74370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] client lang: <none>
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] server lang: <none>
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] kex follows: False
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:20:10.150 [DEBUG] [Thread-74370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:20:10.151 [DEBUG] [Thread-74370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:20:10.151 [DEBUG] [Thread-74370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:20:10.151 [DEBUG] [Thread-74370] [transport.py] [_log()] Compression: none
2025-12-12T18:20:10.151 [DEBUG] [Thread-74370] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:20:10.168 [DEBUG] [Thread-74370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:20:10.169 [DEBUG] [Thread-74370] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:20:10.169 [DEBUG] [Thread-74370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:20:10.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:20:10.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:20:10.171 [DEBUG] [Thread-74370] [transport.py] [_log()] userauth is OK
2025-12-12T18:20:10.171 [DEBUG] [Thread-74370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:20:10.171 [DEBUG] [Thread-74370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:20:10.171 [DEBUG] [Thread-74370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:20:10.171 [DEBUG] [Thread-74370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:20:10.189 [INFO] [Thread-74370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:20:10.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:20:11.431 [DEBUG] [Thread-74370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:20:11.431 [DEBUG] [Thread-74370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:20:11.431 [DEBUG] [Thread-74370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:20:11.472 [DEBUG] [Thread-74370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:20:11.472 [DEBUG] [Thread-74370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:20:11.475 [DEBUG] [Thread-74370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:20:11.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:20:11.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:20:11.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:20:11.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:20:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:20:11.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:20:11.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:20:11.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:20:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:20:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.680659 -999.00  +16.20  38.63     36   +1.40 1 1 2 1 1   887    0 10.54 -176.88 ----- 44.0 38.6 310.2 52.3 18.4 -26.9 18.6 -27.1 19.1 -25.3 19.2 -25.8
2025-12-12T18:20:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:20:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:20:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.680659
2025-12-12T18:20:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:20:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:20:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:20:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:20:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:20:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:20:02', tmtdew=16.67, humidity=32.17, cloud=0.0, wind=49.16, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:20:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:20:11.504 [DEBUG] [Thread-74370] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:20:11.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:20:11.600 [DEBUG] [Thread-74373] [transport.py] [_log()] starting thread (client mode): 0xf5795090
2025-12-12T18:20:11.600 [DEBUG] [Thread-74373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:20:11.615 [DEBUG] [Thread-74373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:20:11.615 [INFO] [Thread-74373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] client lang: <none>
2025-12-12T18:20:11.623 [DEBUG] [Thread-74373] [transport.py] [_log()] server lang: <none>
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] kex follows: False
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] Compression: none
2025-12-12T18:20:11.624 [DEBUG] [Thread-74373] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:20:11.686 [DEBUG] [Thread-74373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:20:11.687 [DEBUG] [Thread-74373] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:20:11.687 [DEBUG] [Thread-74373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:20:11.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:20:11.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:20:11.743 [DEBUG] [Thread-74373] [transport.py] [_log()] userauth is OK
2025-12-12T18:20:11.743 [DEBUG] [Thread-74373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:20:11.743 [DEBUG] [Thread-74373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:20:11.743 [DEBUG] [Thread-74373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:20:11.743 [DEBUG] [Thread-74373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:20:11.762 [INFO] [Thread-74373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:20:11.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:20:11.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:20:12.263 [DEBUG] [Thread-74375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:12.623 [DEBUG] [Thread-74373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:20:12.623 [DEBUG] [Thread-74373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:20:12.673 [DEBUG] [Thread-74373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:20:12.674 [DEBUG] [Thread-74373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:20:12.682 [DEBUG] [Thread-74373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:20:12.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:20:12.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:20:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:20:12.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:20:12.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:20:12.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:20:12.717 [DEBUG] [Thread-74373] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:20:25.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:25.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:27.305 [DEBUG] [Thread-74376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:42.334 [DEBUG] [Thread-74377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:20:42.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:20:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:20:43.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 20, 34), 16.98, 31.48, 0.0, 43.26, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:20:43.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:20:34
2025-12-12T18:20:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:20:43.726 [DEBUG] [Thread-74378] [transport.py] [_log()] starting thread (client mode): 0xf574e2c0
2025-12-12T18:20:43.726 [DEBUG] [Thread-74378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:20:43.746 [DEBUG] [Thread-74378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:20:43.747 [INFO] [Thread-74378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] client lang: <none>
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] server lang: <none>
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] kex follows: False
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] Compression: none
2025-12-12T18:20:43.750 [DEBUG] [Thread-74378] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:20:43.766 [DEBUG] [Thread-74378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:20:43.766 [DEBUG] [Thread-74378] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:20:43.767 [DEBUG] [Thread-74378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:20:43.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:20:43.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:20:43.776 [DEBUG] [Thread-74378] [transport.py] [_log()] userauth is OK
2025-12-12T18:20:43.777 [DEBUG] [Thread-74378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:20:43.777 [DEBUG] [Thread-74378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:20:43.777 [DEBUG] [Thread-74378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:20:43.777 [DEBUG] [Thread-74378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:20:43.800 [INFO] [Thread-74378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:20:43.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:20:44.407 [DEBUG] [Thread-74378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:20:44.407 [DEBUG] [Thread-74378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:20:44.407 [DEBUG] [Thread-74378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:20:44.448 [DEBUG] [Thread-74378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:20:44.448 [DEBUG] [Thread-74378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:20:44.451 [DEBUG] [Thread-74378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:20:44.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:20:44.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:20:44.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:20:44.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:20:44.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:20:44.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:20:44.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:20:44.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:20:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:20:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.681006 -999.00  +16.60  27.81     36   +1.70 1 1 1 1 1   887    0 10.30 -175.99 ----- 30.9 27.8 304.0 51.3 18.4 -26.3 18.6 -26.5 19.2 -24.1 19.2 -25.1
2025-12-12T18:20:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:20:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:20:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.681006
2025-12-12T18:20:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:20:44.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:20:44.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:20:44.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:20:44.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:20:44.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:20:34', tmtdew=16.98, humidity=31.48, cloud=0.0, wind=43.26, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:20:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:20:44.476 [DEBUG] [Thread-74378] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:20:44.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:20:44.577 [DEBUG] [Thread-74381] [transport.py] [_log()] starting thread (client mode): 0xf81c2b00
2025-12-12T18:20:44.577 [DEBUG] [Thread-74381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:20:44.592 [DEBUG] [Thread-74381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:20:44.592 [INFO] [Thread-74381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:20:44.600 [DEBUG] [Thread-74381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] client lang: <none>
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] server lang: <none>
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] kex follows: False
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:20:44.601 [DEBUG] [Thread-74381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:20:44.602 [DEBUG] [Thread-74381] [transport.py] [_log()] Compression: none
2025-12-12T18:20:44.602 [DEBUG] [Thread-74381] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:20:44.658 [DEBUG] [Thread-74381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:20:44.659 [DEBUG] [Thread-74381] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:20:44.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:20:44.660 [DEBUG] [Thread-74381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:20:44.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:20:44.718 [DEBUG] [Thread-74381] [transport.py] [_log()] userauth is OK
2025-12-12T18:20:44.718 [DEBUG] [Thread-74381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:20:44.718 [DEBUG] [Thread-74381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:20:44.718 [DEBUG] [Thread-74381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:20:44.718 [DEBUG] [Thread-74381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:20:44.741 [INFO] [Thread-74381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:20:44.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:20:44.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:20:45.635 [DEBUG] [Thread-74381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:20:45.635 [DEBUG] [Thread-74381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:20:45.683 [DEBUG] [Thread-74381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:20:45.683 [DEBUG] [Thread-74381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:20:45.692 [DEBUG] [Thread-74381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:20:45.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:20:45.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:20:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:20:45.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:20:45.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:20:45.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:20:45.726 [DEBUG] [Thread-74381] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:20:57.361 [DEBUG] [Thread-74383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:20:59.406 [DEBUG] [Thread-74384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:12.402 [DEBUG] [Thread-74385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:15.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:21:15.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:21:15.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:21:16.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 21, 6), 16.96, 31.53, 0.0, 40.93, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:21:16.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:21:06
2025-12-12T18:21:16.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:21:16.700 [DEBUG] [Thread-74386] [transport.py] [_log()] starting thread (client mode): 0xf5771ae0
2025-12-12T18:21:16.701 [DEBUG] [Thread-74386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:21:16.721 [DEBUG] [Thread-74386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:21:16.721 [INFO] [Thread-74386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] client lang: <none>
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] server lang: <none>
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] kex follows: False
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:21:16.725 [DEBUG] [Thread-74386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:21:16.726 [DEBUG] [Thread-74386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:21:16.726 [DEBUG] [Thread-74386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:21:16.726 [DEBUG] [Thread-74386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:21:16.726 [DEBUG] [Thread-74386] [transport.py] [_log()] Compression: none
2025-12-12T18:21:16.726 [DEBUG] [Thread-74386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:21:16.744 [DEBUG] [Thread-74386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:21:16.745 [DEBUG] [Thread-74386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:21:16.745 [DEBUG] [Thread-74386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:21:16.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:21:16.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:21:16.747 [DEBUG] [Thread-74386] [transport.py] [_log()] userauth is OK
2025-12-12T18:21:16.747 [DEBUG] [Thread-74386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:21:16.747 [DEBUG] [Thread-74386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:21:16.747 [DEBUG] [Thread-74386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:21:16.747 [DEBUG] [Thread-74386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:21:16.764 [INFO] [Thread-74386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:21:16.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:21:17.550 [DEBUG] [Thread-74386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:21:17.550 [DEBUG] [Thread-74386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:21:17.550 [DEBUG] [Thread-74386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:21:17.591 [DEBUG] [Thread-74386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:21:17.591 [DEBUG] [Thread-74386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:21:17.594 [DEBUG] [Thread-74386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:21:17.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:21:17.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:21:17.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:21:17.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:21:17.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:21:17.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:21:17.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:21:17.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:21:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:21:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.681006 -999.00  +16.60  27.81     36   +1.70 1 1 1 1 1   887    0 10.30 -175.99 ----- 30.9 27.8 304.0 51.3 18.4 -26.3 18.6 -26.5 19.2 -24.1 19.2 -25.1
2025-12-12T18:21:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:21:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:21:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.681006
2025-12-12T18:21:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:21:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:21:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:21:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:21:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:21:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:21:06', tmtdew=16.96, humidity=31.53, cloud=0.0, wind=40.93, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:20:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:21:17.620 [DEBUG] [Thread-74386] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:21:17.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:21:17.728 [DEBUG] [Thread-74389] [transport.py] [_log()] starting thread (client mode): 0xf81e5570
2025-12-12T18:21:17.729 [DEBUG] [Thread-74389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:21:17.743 [DEBUG] [Thread-74389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:21:17.743 [INFO] [Thread-74389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:21:17.751 [DEBUG] [Thread-74389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:21:17.751 [DEBUG] [Thread-74389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:21:17.751 [DEBUG] [Thread-74389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:21:17.751 [DEBUG] [Thread-74389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:17.751 [DEBUG] [Thread-74389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] client lang: <none>
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] server lang: <none>
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] kex follows: False
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:21:17.752 [DEBUG] [Thread-74389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:21:17.753 [DEBUG] [Thread-74389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:21:17.753 [DEBUG] [Thread-74389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:21:17.753 [DEBUG] [Thread-74389] [transport.py] [_log()] Compression: none
2025-12-12T18:21:17.753 [DEBUG] [Thread-74389] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:21:17.813 [DEBUG] [Thread-74389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:21:17.813 [DEBUG] [Thread-74389] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:21:17.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:21:17.815 [DEBUG] [Thread-74389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:21:17.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:21:17.870 [DEBUG] [Thread-74389] [transport.py] [_log()] userauth is OK
2025-12-12T18:21:17.871 [DEBUG] [Thread-74389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:21:17.871 [DEBUG] [Thread-74389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:21:17.871 [DEBUG] [Thread-74389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:21:17.871 [DEBUG] [Thread-74389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:21:17.890 [INFO] [Thread-74389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:21:17.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:21:17.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:21:18.759 [DEBUG] [Thread-74389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:21:18.759 [DEBUG] [Thread-74389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:21:18.807 [DEBUG] [Thread-74389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:21:18.807 [DEBUG] [Thread-74389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:21:18.816 [DEBUG] [Thread-74389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:21:18.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:21:18.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:21:18.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:21:18.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:21:18.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:21:18.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:21:18.850 [DEBUG] [Thread-74389] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:21:25.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:25.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:27.432 [DEBUG] [Thread-74391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:42.476 [DEBUG] [Thread-74392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:21:48.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:21:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:21:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 21, 38), 17.0, 31.23, 0.0, 40.83, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:21:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:21:38
2025-12-12T18:21:49.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:21:49.823 [DEBUG] [Thread-74393] [transport.py] [_log()] starting thread (client mode): 0xf5700d60
2025-12-12T18:21:49.823 [DEBUG] [Thread-74393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:21:49.844 [DEBUG] [Thread-74393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:21:49.844 [INFO] [Thread-74393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:21:49.845 [DEBUG] [Thread-74393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] client lang: <none>
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] server lang: <none>
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] kex follows: False
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] Compression: none
2025-12-12T18:21:49.846 [DEBUG] [Thread-74393] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:21:49.863 [DEBUG] [Thread-74393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:21:49.863 [DEBUG] [Thread-74393] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:21:49.864 [DEBUG] [Thread-74393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:21:49.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:21:49.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:21:49.866 [DEBUG] [Thread-74393] [transport.py] [_log()] userauth is OK
2025-12-12T18:21:49.866 [DEBUG] [Thread-74393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:21:49.866 [DEBUG] [Thread-74393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:21:49.866 [DEBUG] [Thread-74393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:21:49.866 [DEBUG] [Thread-74393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:21:49.890 [INFO] [Thread-74393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:21:49.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:21:50.509 [DEBUG] [Thread-74393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:21:50.509 [DEBUG] [Thread-74393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:21:50.510 [DEBUG] [Thread-74393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:21:50.551 [DEBUG] [Thread-74393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:21:50.551 [DEBUG] [Thread-74393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:21:50.554 [DEBUG] [Thread-74393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:21:50.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:21:50.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:21:50.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:21:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:21:50.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:21:50.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:21:50.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:21:50.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:21:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:21:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.681353 -999.00  +16.80  30.69     36   +1.80 1 1 2 1 1   887    0 10.70 -166.73 ----- 34.3 30.7 313.2 46.9 18.5 -26.2 18.7 -26.0 19.3 -23.7 19.4 -24.9
2025-12-12T18:21:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:21:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:21:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.681353
2025-12-12T18:21:50.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:21:50.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:21:50.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:21:50.579 [DEBUG] [Thread-74393] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:21:50.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:21:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:21:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:21:38', tmtdew=17.0, humidity=31.23, cloud=0.0, wind=40.83, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:21:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:21:50.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:21:50.679 [DEBUG] [Thread-74396] [transport.py] [_log()] starting thread (client mode): 0xfabc5ab0
2025-12-12T18:21:50.679 [DEBUG] [Thread-74396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:21:50.693 [DEBUG] [Thread-74396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:21:50.693 [INFO] [Thread-74396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] client lang: <none>
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] server lang: <none>
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] kex follows: False
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:21:50.701 [DEBUG] [Thread-74396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:21:50.702 [DEBUG] [Thread-74396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:21:50.702 [DEBUG] [Thread-74396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:21:50.702 [DEBUG] [Thread-74396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:21:50.702 [DEBUG] [Thread-74396] [transport.py] [_log()] Compression: none
2025-12-12T18:21:50.702 [DEBUG] [Thread-74396] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:21:50.758 [DEBUG] [Thread-74396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:21:50.759 [DEBUG] [Thread-74396] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:21:50.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:21:50.760 [DEBUG] [Thread-74396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:21:50.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:21:50.815 [DEBUG] [Thread-74396] [transport.py] [_log()] userauth is OK
2025-12-12T18:21:50.815 [DEBUG] [Thread-74396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:21:50.815 [DEBUG] [Thread-74396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:21:50.815 [DEBUG] [Thread-74396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:21:50.815 [DEBUG] [Thread-74396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:21:50.837 [INFO] [Thread-74396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:21:50.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:21:50.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:21:51.658 [DEBUG] [Thread-74396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:21:51.659 [DEBUG] [Thread-74396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:21:51.707 [DEBUG] [Thread-74396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:21:51.707 [DEBUG] [Thread-74396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:21:51.716 [DEBUG] [Thread-74396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:21:51.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:21:51.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:21:51.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:21:51.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:21:51.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:21:51.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:21:51.751 [DEBUG] [Thread-74396] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:21:57.506 [DEBUG] [Thread-74398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:21:59.456 [DEBUG] [Thread-74399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:12.548 [DEBUG] [Thread-74400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:21.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:22:21.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:22:21.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:22:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 22, 10), 17.22, 30.82, 0.0, 35.54, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:22:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:22:10
2025-12-12T18:22:22.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:22:22.745 [DEBUG] [Thread-74401] [transport.py] [_log()] starting thread (client mode): 0xf575fa00
2025-12-12T18:22:22.745 [DEBUG] [Thread-74401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:22:22.763 [DEBUG] [Thread-74401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:22:22.763 [INFO] [Thread-74401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:22:22.766 [DEBUG] [Thread-74401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] client lang: <none>
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] server lang: <none>
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] kex follows: False
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] Compression: none
2025-12-12T18:22:22.767 [DEBUG] [Thread-74401] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:22:22.783 [DEBUG] [Thread-74401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:22:22.784 [DEBUG] [Thread-74401] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:22:22.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:22:22.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:22:22.786 [DEBUG] [Thread-74401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:22:22.786 [DEBUG] [Thread-74401] [transport.py] [_log()] userauth is OK
2025-12-12T18:22:22.786 [DEBUG] [Thread-74401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:22:22.786 [DEBUG] [Thread-74401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:22:22.787 [DEBUG] [Thread-74401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:22:22.787 [DEBUG] [Thread-74401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:22:22.805 [INFO] [Thread-74401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:22:22.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:22:23.542 [DEBUG] [Thread-74401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:22:23.542 [DEBUG] [Thread-74401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:22:23.543 [DEBUG] [Thread-74401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:22:23.583 [DEBUG] [Thread-74401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:22:23.583 [DEBUG] [Thread-74401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:22:23.586 [DEBUG] [Thread-74401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:22:23.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:22:23.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:22:23.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:22:23.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:22:23.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:22:23.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:22:23.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:22:23.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:22:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:22:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.681700 -999.00  +16.70  35.43     36   +1.60 1 1 2 1 1   887    0 10.54 -171.79 ----- 37.0 35.4 311.0 42.8 18.5 -27.2 18.8 -26.3 19.4 -25.1 19.4 -25.4
2025-12-12T18:22:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:22:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:22:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.681700
2025-12-12T18:22:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:22:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:22:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:22:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:22:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:22:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:22:10', tmtdew=17.22, humidity=30.82, cloud=0.0, wind=35.54, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:21:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:22:23.611 [DEBUG] [Thread-74401] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:22:23.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:22:23.708 [DEBUG] [Thread-74404] [transport.py] [_log()] starting thread (client mode): 0xf81c01c0
2025-12-12T18:22:23.708 [DEBUG] [Thread-74404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:22:23.723 [DEBUG] [Thread-74404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:22:23.723 [INFO] [Thread-74404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:22:23.730 [DEBUG] [Thread-74404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:22:23.731 [DEBUG] [Thread-74404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] client lang: <none>
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] server lang: <none>
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] kex follows: False
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] Compression: none
2025-12-12T18:22:23.732 [DEBUG] [Thread-74404] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:22:23.790 [DEBUG] [Thread-74404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:22:23.790 [DEBUG] [Thread-74404] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:22:23.791 [DEBUG] [Thread-74404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:22:23.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:22:23.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:22:23.850 [DEBUG] [Thread-74404] [transport.py] [_log()] userauth is OK
2025-12-12T18:22:23.851 [DEBUG] [Thread-74404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:22:23.851 [DEBUG] [Thread-74404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:22:23.851 [DEBUG] [Thread-74404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:22:23.851 [DEBUG] [Thread-74404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:22:23.870 [INFO] [Thread-74404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:22:23.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:22:23.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:22:24.704 [DEBUG] [Thread-74404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:22:24.704 [DEBUG] [Thread-74404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:22:24.752 [DEBUG] [Thread-74404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:22:24.752 [DEBUG] [Thread-74404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:22:24.761 [DEBUG] [Thread-74404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:22:24.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:22:24.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:22:24.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:22:24.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:22:24.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:22:24.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:22:24.796 [DEBUG] [Thread-74404] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:22:25.833 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:25.835 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:27.575 [DEBUG] [Thread-74406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:42.626 [DEBUG] [Thread-74407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:54.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:22:54.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:22:54.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:22:55.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 22, 42), 17.06, 31.55, 0.0, 41.96, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:22:55.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:22:42
2025-12-12T18:22:55.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:22:55.824 [DEBUG] [Thread-74408] [transport.py] [_log()] starting thread (client mode): 0xf5772500
2025-12-12T18:22:55.824 [DEBUG] [Thread-74408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:22:55.841 [DEBUG] [Thread-74408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:22:55.841 [INFO] [Thread-74408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] client lang: <none>
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] server lang: <none>
2025-12-12T18:22:55.844 [DEBUG] [Thread-74408] [transport.py] [_log()] kex follows: False
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] Compression: none
2025-12-12T18:22:55.845 [DEBUG] [Thread-74408] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:22:55.864 [DEBUG] [Thread-74408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:22:55.864 [DEBUG] [Thread-74408] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:22:55.864 [DEBUG] [Thread-74408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:22:55.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:22:55.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:22:55.865 [DEBUG] [Thread-74408] [transport.py] [_log()] userauth is OK
2025-12-12T18:22:55.865 [DEBUG] [Thread-74408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:22:55.865 [DEBUG] [Thread-74408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:22:55.865 [DEBUG] [Thread-74408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:22:55.865 [DEBUG] [Thread-74408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:22:55.877 [INFO] [Thread-74408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:22:55.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:22:56.448 [DEBUG] [Thread-74408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:22:56.448 [DEBUG] [Thread-74408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:22:56.448 [DEBUG] [Thread-74408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:22:56.489 [DEBUG] [Thread-74408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:22:56.489 [DEBUG] [Thread-74408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:22:56.491 [DEBUG] [Thread-74408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:22:56.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:22:56.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:22:56.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:22:56.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:22:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:22:56.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:22:56.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.682048 -999.00  +16.40  45.38     37   +1.70 1 1 2 1 1   887    0 10.70 -166.81 ----- 39.8 45.4 308.6 52.2 18.5 -26.9 18.8 -26.8 19.4 -24.2 19.4 -25.8
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.682048
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:22:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:22:42', tmtdew=17.06, humidity=31.55, cloud=0.0, wind=41.96, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:22:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:22:56.505 [DEBUG] [Thread-74408] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:22:56.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:22:56.591 [DEBUG] [Thread-74411] [transport.py] [_log()] starting thread (client mode): 0xf5773e50
2025-12-12T18:22:56.591 [DEBUG] [Thread-74411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:22:56.605 [DEBUG] [Thread-74411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:22:56.605 [INFO] [Thread-74411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:22:56.612 [DEBUG] [Thread-74411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:22:56.612 [DEBUG] [Thread-74411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] client lang: <none>
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] server lang: <none>
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] kex follows: False
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] Compression: none
2025-12-12T18:22:56.613 [DEBUG] [Thread-74411] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:22:56.669 [DEBUG] [Thread-74411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:22:56.669 [DEBUG] [Thread-74411] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:22:56.669 [DEBUG] [Thread-74411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:22:56.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:22:56.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:22:56.726 [DEBUG] [Thread-74411] [transport.py] [_log()] userauth is OK
2025-12-12T18:22:56.726 [DEBUG] [Thread-74411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:22:56.726 [DEBUG] [Thread-74411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:22:56.726 [DEBUG] [Thread-74411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:22:56.726 [DEBUG] [Thread-74411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:22:56.740 [INFO] [Thread-74411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:22:56.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:22:56.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:22:57.595 [DEBUG] [Thread-74411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:22:57.595 [DEBUG] [Thread-74411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:22:57.643 [DEBUG] [Thread-74411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:22:57.643 [DEBUG] [Thread-74411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:22:57.652 [DEBUG] [Thread-74411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:22:57.652 [DEBUG] [Thread-74413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:22:57.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:22:57.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:22:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:22:57.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:22:57.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:22:57.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:22:57.688 [DEBUG] [Thread-74411] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:22:59.507 [DEBUG] [Thread-74414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:12.696 [DEBUG] [Thread-74415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:25.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:25.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:27.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:23:27.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:23:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:23:27.728 [DEBUG] [Thread-74416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 23, 14), 16.94, 31.8, 0.0, 41.3, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:23:28.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:23:14
2025-12-12T18:23:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:23:28.688 [DEBUG] [Thread-74417] [transport.py] [_log()] starting thread (client mode): 0xfabc74f0
2025-12-12T18:23:28.688 [DEBUG] [Thread-74417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:23:28.708 [DEBUG] [Thread-74417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:23:28.708 [INFO] [Thread-74417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] client lang: <none>
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] server lang: <none>
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] kex follows: False
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] Compression: none
2025-12-12T18:23:28.712 [DEBUG] [Thread-74417] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:23:28.731 [DEBUG] [Thread-74417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:23:28.731 [DEBUG] [Thread-74417] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:23:28.731 [DEBUG] [Thread-74417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:23:28.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:23:28.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:23:28.733 [DEBUG] [Thread-74417] [transport.py] [_log()] userauth is OK
2025-12-12T18:23:28.733 [DEBUG] [Thread-74417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:23:28.733 [DEBUG] [Thread-74417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:23:28.733 [DEBUG] [Thread-74417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:23:28.733 [DEBUG] [Thread-74417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:23:28.754 [INFO] [Thread-74417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:23:28.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:23:29.493 [DEBUG] [Thread-74417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:23:29.493 [DEBUG] [Thread-74417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:23:29.494 [DEBUG] [Thread-74417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:23:29.534 [DEBUG] [Thread-74417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:23:29.534 [DEBUG] [Thread-74417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:23:29.536 [DEBUG] [Thread-74417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:23:29.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:23:29.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:23:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:23:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:23:29.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:23:29.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:23:29.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.682395 -999.00  +16.30  40.74     37   +1.90 1 1 2 1 1   887    0 10.96 -160.37 ----- 43.8 40.7 292.8 55.3 18.5 -27.2 18.7 -26.8 19.3 -26.2 19.4 -25.7
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.682395
2025-12-12T18:23:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:23:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:23:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:23:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:23:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:23:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:23:14', tmtdew=16.94, humidity=31.8, cloud=0.0, wind=41.3, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:22:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:23:29.553 [DEBUG] [Thread-74417] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:23:29.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:23:29.638 [DEBUG] [Thread-74420] [transport.py] [_log()] starting thread (client mode): 0xf8155810
2025-12-12T18:23:29.638 [DEBUG] [Thread-74420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:23:29.654 [DEBUG] [Thread-74420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:23:29.654 [INFO] [Thread-74420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] client lang: <none>
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] server lang: <none>
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] kex follows: False
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] Compression: none
2025-12-12T18:23:29.661 [DEBUG] [Thread-74420] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:23:29.717 [DEBUG] [Thread-74420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:23:29.717 [DEBUG] [Thread-74420] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:23:29.717 [DEBUG] [Thread-74420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:23:29.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:23:29.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:23:29.774 [DEBUG] [Thread-74420] [transport.py] [_log()] userauth is OK
2025-12-12T18:23:29.774 [DEBUG] [Thread-74420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:23:29.774 [DEBUG] [Thread-74420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:23:29.774 [DEBUG] [Thread-74420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:23:29.774 [DEBUG] [Thread-74420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:23:29.788 [INFO] [Thread-74420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:23:29.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:23:29.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:23:30.589 [DEBUG] [Thread-74420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:23:30.589 [DEBUG] [Thread-74420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:23:30.636 [DEBUG] [Thread-74420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:23:30.636 [DEBUG] [Thread-74420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:23:30.644 [DEBUG] [Thread-74420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:23:30.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:23:30.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:23:30.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:23:30.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:23:30.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:23:30.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:23:30.675 [DEBUG] [Thread-74420] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:23:42.757 [DEBUG] [Thread-74422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:57.807 [DEBUG] [Thread-74423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:23:59.560 [DEBUG] [Thread-74424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:00.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:24:00.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:24:00.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:24:01.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 23, 46), 16.73, 32.17, 0.0, 42.94, 16.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:24:01.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:23:46
2025-12-12T18:24:01.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:24:01.673 [DEBUG] [Thread-74425] [transport.py] [_log()] starting thread (client mode): 0xf8157d30
2025-12-12T18:24:01.673 [DEBUG] [Thread-74425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:24:01.692 [DEBUG] [Thread-74425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:24:01.692 [INFO] [Thread-74425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:24:01.695 [DEBUG] [Thread-74425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] client lang: <none>
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] server lang: <none>
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] kex follows: False
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:24:01.696 [DEBUG] [Thread-74425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:24:01.697 [DEBUG] [Thread-74425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:24:01.697 [DEBUG] [Thread-74425] [transport.py] [_log()] Compression: none
2025-12-12T18:24:01.697 [DEBUG] [Thread-74425] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:24:01.714 [DEBUG] [Thread-74425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:24:01.715 [DEBUG] [Thread-74425] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:24:01.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:24:01.716 [DEBUG] [Thread-74425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:24:01.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:24:01.718 [DEBUG] [Thread-74425] [transport.py] [_log()] userauth is OK
2025-12-12T18:24:01.718 [DEBUG] [Thread-74425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:24:01.718 [DEBUG] [Thread-74425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:24:01.719 [DEBUG] [Thread-74425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:24:01.719 [DEBUG] [Thread-74425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:24:01.741 [INFO] [Thread-74425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:24:01.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:24:02.358 [DEBUG] [Thread-74425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:24:02.358 [DEBUG] [Thread-74425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:24:02.359 [DEBUG] [Thread-74425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:24:02.399 [DEBUG] [Thread-74425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:24:02.399 [DEBUG] [Thread-74425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:24:02.401 [DEBUG] [Thread-74425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:24:02.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:24:02.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:24:02.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:24:02.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:24:02.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:24:02.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:24:02.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:24:02.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:24:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:24:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.682742 -999.00  +16.30  39.99     38   +2.00 1 1 2 1 1   887    0 11.36 -146.59 ----- 38.9 40.0 308.6 51.0 18.4 -27.3 18.6 -26.9 19.1 -25.3 19.3 -25.9
2025-12-12T18:24:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:24:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:24:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.682742
2025-12-12T18:24:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:24:02.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:24:02.428 [DEBUG] [Thread-74425] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:24:02.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:24:02.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:24:02.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:24:02.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:23:46', tmtdew=16.73, humidity=32.17, cloud=0.0, wind=42.94, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:23:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:24:02.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:24:02.523 [DEBUG] [Thread-74428] [transport.py] [_log()] starting thread (client mode): 0xf8155420
2025-12-12T18:24:02.523 [DEBUG] [Thread-74428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:24:02.538 [DEBUG] [Thread-74428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:24:02.538 [INFO] [Thread-74428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] client lang: <none>
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] server lang: <none>
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] kex follows: False
2025-12-12T18:24:02.546 [DEBUG] [Thread-74428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:24:02.547 [DEBUG] [Thread-74428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:24:02.547 [DEBUG] [Thread-74428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:24:02.547 [DEBUG] [Thread-74428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:24:02.547 [DEBUG] [Thread-74428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:24:02.547 [DEBUG] [Thread-74428] [transport.py] [_log()] Compression: none
2025-12-12T18:24:02.547 [DEBUG] [Thread-74428] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:24:02.603 [DEBUG] [Thread-74428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:24:02.603 [DEBUG] [Thread-74428] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:24:02.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:24:02.604 [DEBUG] [Thread-74428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:24:02.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:24:02.658 [DEBUG] [Thread-74428] [transport.py] [_log()] userauth is OK
2025-12-12T18:24:02.659 [DEBUG] [Thread-74428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:24:02.659 [DEBUG] [Thread-74428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:24:02.659 [DEBUG] [Thread-74428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:24:02.659 [DEBUG] [Thread-74428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:24:02.678 [INFO] [Thread-74428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:24:02.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:24:02.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:24:03.590 [DEBUG] [Thread-74428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:24:03.591 [DEBUG] [Thread-74428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:24:03.638 [DEBUG] [Thread-74428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:24:03.638 [DEBUG] [Thread-74428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:24:03.652 [DEBUG] [Thread-74428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:24:03.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:24: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')
2025-12-12T18:24:03.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:24:03.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:24:03.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:24:03.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:24:03.687 [DEBUG] [Thread-74428] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:24:12.835 [DEBUG] [Thread-74430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:26.117 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:26.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:27.872 [DEBUG] [Thread-74431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:24:33.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:24:33.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:24:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 24, 18), 16.74, 32.15, 0.0, 42.31, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:24:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:24:18
2025-12-12T18:24:34.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:24:34.658 [DEBUG] [Thread-74432] [transport.py] [_log()] starting thread (client mode): 0xf8157130
2025-12-12T18:24:34.658 [DEBUG] [Thread-74432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:24:34.669 [DEBUG] [Thread-74432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:24:34.669 [INFO] [Thread-74432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:24:34.670 [DEBUG] [Thread-74432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] client lang: <none>
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] server lang: <none>
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] kex follows: False
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] Compression: none
2025-12-12T18:24:34.671 [DEBUG] [Thread-74432] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:24:34.680 [DEBUG] [Thread-74432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:24:34.681 [DEBUG] [Thread-74432] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:24:34.681 [DEBUG] [Thread-74432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:24:34.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:24:34.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:24:34.682 [DEBUG] [Thread-74432] [transport.py] [_log()] userauth is OK
2025-12-12T18:24:34.682 [DEBUG] [Thread-74432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:24:34.682 [DEBUG] [Thread-74432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:24:34.682 [DEBUG] [Thread-74432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:24:34.682 [DEBUG] [Thread-74432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:24:34.702 [INFO] [Thread-74432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:24:34.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:24:35.438 [DEBUG] [Thread-74432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:24:35.438 [DEBUG] [Thread-74432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:24:35.439 [DEBUG] [Thread-74432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:24:35.480 [DEBUG] [Thread-74432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:24:35.480 [DEBUG] [Thread-74432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:24:35.482 [DEBUG] [Thread-74432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:24:35.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:24:35.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:24:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:24:35.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:24:35.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:24:35.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:24:35.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:24:35.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:24:35.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:24:35.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.683089 -999.00  +16.30  40.48     37   +1.60 1 1 2 1 1   887    0 11.07 -146.00 ----- 36.0 40.5 310.8 49.9 18.3 -27.1 18.6 -27.5 19.0 -26.3 19.3 -26.2
2025-12-12T18:24:35.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:24:35.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:24:35.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.683089
2025-12-12T18:24:35.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:24:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:24:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:24:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:24:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:24:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:24:18', tmtdew=16.74, humidity=32.15, cloud=0.0, wind=42.31, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:23:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:24:35.499 [DEBUG] [Thread-74432] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:24:35.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:24:35.595 [DEBUG] [Thread-74435] [transport.py] [_log()] starting thread (client mode): 0xf8157910
2025-12-12T18:24:35.595 [DEBUG] [Thread-74435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:24:35.610 [DEBUG] [Thread-74435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:24:35.610 [INFO] [Thread-74435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] client lang: <none>
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] server lang: <none>
2025-12-12T18:24:35.618 [DEBUG] [Thread-74435] [transport.py] [_log()] kex follows: False
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] Compression: none
2025-12-12T18:24:35.619 [DEBUG] [Thread-74435] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:24:35.674 [DEBUG] [Thread-74435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:24:35.675 [DEBUG] [Thread-74435] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:24:35.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:24:35.676 [DEBUG] [Thread-74435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:24:35.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:24:35.731 [DEBUG] [Thread-74435] [transport.py] [_log()] userauth is OK
2025-12-12T18:24:35.731 [DEBUG] [Thread-74435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:24:35.731 [DEBUG] [Thread-74435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:24:35.731 [DEBUG] [Thread-74435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:24:35.731 [DEBUG] [Thread-74435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:24:35.751 [INFO] [Thread-74435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:24:35.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:24:35.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:24:36.570 [DEBUG] [Thread-74435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:24:36.570 [DEBUG] [Thread-74435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:24:36.618 [DEBUG] [Thread-74435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:24:36.618 [DEBUG] [Thread-74435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:24:36.626 [DEBUG] [Thread-74435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:24:36.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:24:36.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:24:36.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:24:36.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:24:36.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:24:36.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:24:36.659 [DEBUG] [Thread-74435] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:24:42.907 [DEBUG] [Thread-74437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:57.958 [DEBUG] [Thread-74438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:24:59.610 [DEBUG] [Thread-74439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:25:06.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:25:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:25:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 24, 50), 16.36, 32.95, 0.0, 42.19, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:25:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:24:50
2025-12-12T18:25:07.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:25:07.619 [DEBUG] [Thread-74440] [transport.py] [_log()] starting thread (client mode): 0xf8157040
2025-12-12T18:25:07.619 [DEBUG] [Thread-74440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:25:07.638 [DEBUG] [Thread-74440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:25:07.638 [INFO] [Thread-74440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:25:07.641 [DEBUG] [Thread-74440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:25:07.641 [DEBUG] [Thread-74440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:25:07.641 [DEBUG] [Thread-74440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:25:07.641 [DEBUG] [Thread-74440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] client lang: <none>
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] server lang: <none>
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] kex follows: False
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] Compression: none
2025-12-12T18:25:07.642 [DEBUG] [Thread-74440] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:25:07.657 [DEBUG] [Thread-74440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:25:07.658 [DEBUG] [Thread-74440] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:25:07.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:25:07.659 [DEBUG] [Thread-74440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:25:07.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:25:07.660 [DEBUG] [Thread-74440] [transport.py] [_log()] userauth is OK
2025-12-12T18:25:07.660 [DEBUG] [Thread-74440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:25:07.660 [DEBUG] [Thread-74440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:25:07.660 [DEBUG] [Thread-74440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:25:07.660 [DEBUG] [Thread-74440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:25:07.674 [INFO] [Thread-74440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:25:07.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:25:08.407 [DEBUG] [Thread-74440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:25:08.408 [DEBUG] [Thread-74440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:25:08.408 [DEBUG] [Thread-74440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:25:08.449 [DEBUG] [Thread-74440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:25:08.449 [DEBUG] [Thread-74440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:25:08.452 [DEBUG] [Thread-74440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:25:08.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:25:08.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:25:08.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:25:08.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:25:08.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:25:08.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:25:08.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:25:08.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:25:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:25:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.683437 -999.00  +16.30  28.53     37   +1.90 1 1 1 1 1   887    0 11.33 -138.69 ----- 37.7 28.5 304.8 48.2 18.4 -26.9 18.6 -26.9 19.1 -23.8 19.2 -25.6
2025-12-12T18:25:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:25:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:25:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.683437
2025-12-12T18:25:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:25:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:25:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:25:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:25:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:25:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:24:50', tmtdew=16.36, humidity=32.95, cloud=0.0, wind=42.19, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:24:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:25:08.479 [DEBUG] [Thread-74440] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:25:08.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:25:08.572 [DEBUG] [Thread-74443] [transport.py] [_log()] starting thread (client mode): 0xfabc7730
2025-12-12T18:25:08.572 [DEBUG] [Thread-74443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:25:08.587 [DEBUG] [Thread-74443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:25:08.587 [INFO] [Thread-74443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] client lang: <none>
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] server lang: <none>
2025-12-12T18:25:08.595 [DEBUG] [Thread-74443] [transport.py] [_log()] kex follows: False
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] Compression: none
2025-12-12T18:25:08.596 [DEBUG] [Thread-74443] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:25:08.654 [DEBUG] [Thread-74443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:25:08.655 [DEBUG] [Thread-74443] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:25:08.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:25:08.656 [DEBUG] [Thread-74443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:25:08.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:25:08.711 [DEBUG] [Thread-74443] [transport.py] [_log()] userauth is OK
2025-12-12T18:25:08.711 [DEBUG] [Thread-74443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:25:08.711 [DEBUG] [Thread-74443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:25:08.711 [DEBUG] [Thread-74443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:25:08.711 [DEBUG] [Thread-74443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:25:08.730 [INFO] [Thread-74443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:25:08.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:25:08.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:25:09.597 [DEBUG] [Thread-74443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:25:09.597 [DEBUG] [Thread-74443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:25:09.645 [DEBUG] [Thread-74443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:25:09.645 [DEBUG] [Thread-74443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:25:09.653 [DEBUG] [Thread-74443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:25:09.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:25:09.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:25:09.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:25:09.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:25:09.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:25:09.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:25:09.687 [DEBUG] [Thread-74443] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:25:12.990 [DEBUG] [Thread-74445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:26.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:26.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:28.029 [DEBUG] [Thread-74446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:39.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:25:39.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:25:39.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:25:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 25, 22), 16.21, 33.3, 0.0, 46.86, 16.47, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:25:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:25:22
2025-12-12T18:25:40.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:25:40.654 [DEBUG] [Thread-74447] [transport.py] [_log()] starting thread (client mode): 0xf57724a0
2025-12-12T18:25:40.654 [DEBUG] [Thread-74447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:25:40.674 [DEBUG] [Thread-74447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:25:40.674 [INFO] [Thread-74447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:25:40.677 [DEBUG] [Thread-74447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] client lang: <none>
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] server lang: <none>
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] kex follows: False
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] Compression: none
2025-12-12T18:25:40.678 [DEBUG] [Thread-74447] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:25:40.694 [DEBUG] [Thread-74447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:25:40.695 [DEBUG] [Thread-74447] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:25:40.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:25:40.696 [DEBUG] [Thread-74447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:25:40.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:25:40.698 [DEBUG] [Thread-74447] [transport.py] [_log()] userauth is OK
2025-12-12T18:25:40.698 [DEBUG] [Thread-74447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:25:40.698 [DEBUG] [Thread-74447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:25:40.698 [DEBUG] [Thread-74447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:25:40.699 [DEBUG] [Thread-74447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:25:40.721 [INFO] [Thread-74447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:25:40.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:25:41.348 [DEBUG] [Thread-74447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:25:41.348 [DEBUG] [Thread-74447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:25:41.348 [DEBUG] [Thread-74447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:25:41.389 [DEBUG] [Thread-74447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:25:41.389 [DEBUG] [Thread-74447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:25:41.392 [DEBUG] [Thread-74447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:25:41.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:25:41.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:25:41.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:25:41.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:25:41.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:25:41.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:25:41.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:25:41.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:25:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:25:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.683784 -999.00  +16.20  36.82     39   +2.30 1 1 2 1 1   887    0 11.28 -133.83 ----- 38.9 36.8 311.8 51.4 18.3 -27.0 18.6 -26.9 19.0 -25.0 19.2 -25.7
2025-12-12T18:25:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:25:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:25:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.683784
2025-12-12T18:25:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:25:41.414 [DEBUG] [Thread-74447] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:25:41.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:25:41.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:25:41.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:25:41.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:25:41.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:25:22', tmtdew=16.21, humidity=33.3, cloud=0.0, wind=46.86, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:24:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:25:41.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:25:41.511 [DEBUG] [Thread-74450] [transport.py] [_log()] starting thread (client mode): 0xf5772470
2025-12-12T18:25:41.511 [DEBUG] [Thread-74450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:25:41.525 [DEBUG] [Thread-74450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:25:41.525 [INFO] [Thread-74450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] client lang: <none>
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] server lang: <none>
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] kex follows: False
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:25:41.535 [DEBUG] [Thread-74450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:25:41.536 [DEBUG] [Thread-74450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:25:41.536 [DEBUG] [Thread-74450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:25:41.536 [DEBUG] [Thread-74450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:25:41.536 [DEBUG] [Thread-74450] [transport.py] [_log()] Compression: none
2025-12-12T18:25:41.536 [DEBUG] [Thread-74450] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:25:41.590 [DEBUG] [Thread-74450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:25:41.591 [DEBUG] [Thread-74450] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:25:41.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:25:41.592 [DEBUG] [Thread-74450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:25:41.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:25:41.647 [DEBUG] [Thread-74450] [transport.py] [_log()] userauth is OK
2025-12-12T18:25:41.647 [DEBUG] [Thread-74450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:25:41.647 [DEBUG] [Thread-74450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:25:41.647 [DEBUG] [Thread-74450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:25:41.648 [DEBUG] [Thread-74450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:25:41.666 [INFO] [Thread-74450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:25:41.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:25:41.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:25:42.520 [DEBUG] [Thread-74450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:25:42.520 [DEBUG] [Thread-74450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:25:42.568 [DEBUG] [Thread-74450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:25:42.568 [DEBUG] [Thread-74450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:25:42.580 [DEBUG] [Thread-74450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:25:42.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:25:42.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:25:42.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:25:42.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:25:42.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:25:42.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:25:42.617 [DEBUG] [Thread-74450] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:25:43.056 [DEBUG] [Thread-74452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:58.103 [DEBUG] [Thread-74453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:25:59.667 [DEBUG] [Thread-74454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:26:12.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:26:12.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:26:13.130 [DEBUG] [Thread-74455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 25, 54), 15.84, 33.96, 0.0, 39.35, 16.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:26:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:25:54
2025-12-12T18:26:13.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:26:13.582 [DEBUG] [Thread-74456] [transport.py] [_log()] starting thread (client mode): 0xfabc4fa0
2025-12-12T18:26:13.582 [DEBUG] [Thread-74456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:26:13.602 [DEBUG] [Thread-74456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:26:13.603 [INFO] [Thread-74456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] client lang: <none>
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] server lang: <none>
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] kex follows: False
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:26:13.606 [DEBUG] [Thread-74456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:26:13.607 [DEBUG] [Thread-74456] [transport.py] [_log()] Compression: none
2025-12-12T18:26:13.607 [DEBUG] [Thread-74456] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:26:13.624 [DEBUG] [Thread-74456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:26:13.625 [DEBUG] [Thread-74456] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:26:13.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:26:13.626 [DEBUG] [Thread-74456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:26:13.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:26:13.627 [DEBUG] [Thread-74456] [transport.py] [_log()] userauth is OK
2025-12-12T18:26:13.627 [DEBUG] [Thread-74456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:26:13.628 [DEBUG] [Thread-74456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:26:13.628 [DEBUG] [Thread-74456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:26:13.628 [DEBUG] [Thread-74456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:26:13.648 [INFO] [Thread-74456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:26:13.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:26:14.277 [DEBUG] [Thread-74456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:26:14.277 [DEBUG] [Thread-74456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:26:14.277 [DEBUG] [Thread-74456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:26:14.318 [DEBUG] [Thread-74456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:26:14.318 [DEBUG] [Thread-74456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:26:14.321 [DEBUG] [Thread-74456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:26:14.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:26:14.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:26:14.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:26:14.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:26:14.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:26:14.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:26:14.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:26:14.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:26:14.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:26:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.684478 -999.00  +16.00  41.44     40   +2.40 1 1 2 1 1   887    0 11.14 -134.13 ----- 45.9 41.4 298.8 54.7 18.2 -27.6 18.6 -26.6 18.9 -27.2 19.2 -25.5
2025-12-12T18:26:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:26:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:26:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.684478
2025-12-12T18:26:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:26:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:26:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:26:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:26:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:26:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:25:54', tmtdew=15.84, humidity=33.96, cloud=0.0, wind=39.35, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:25:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:26:14.346 [DEBUG] [Thread-74456] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:26:14.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:26:14.444 [DEBUG] [Thread-74459] [transport.py] [_log()] starting thread (client mode): 0xf5700fa0
2025-12-12T18:26:14.444 [DEBUG] [Thread-74459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:26:14.459 [DEBUG] [Thread-74459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:26:14.459 [INFO] [Thread-74459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:26:14.467 [DEBUG] [Thread-74459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:26:14.467 [DEBUG] [Thread-74459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:26:14.467 [DEBUG] [Thread-74459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:26:14.467 [DEBUG] [Thread-74459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:14.467 [DEBUG] [Thread-74459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] client lang: <none>
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] server lang: <none>
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] kex follows: False
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:26:14.468 [DEBUG] [Thread-74459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:26:14.469 [DEBUG] [Thread-74459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:26:14.469 [DEBUG] [Thread-74459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:26:14.469 [DEBUG] [Thread-74459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:26:14.469 [DEBUG] [Thread-74459] [transport.py] [_log()] Compression: none
2025-12-12T18:26:14.469 [DEBUG] [Thread-74459] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:26:14.527 [DEBUG] [Thread-74459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:26:14.528 [DEBUG] [Thread-74459] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:26:14.528 [DEBUG] [Thread-74459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:26:14.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:26:14.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:26:14.583 [DEBUG] [Thread-74459] [transport.py] [_log()] userauth is OK
2025-12-12T18:26:14.583 [DEBUG] [Thread-74459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:26:14.583 [DEBUG] [Thread-74459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:26:14.583 [DEBUG] [Thread-74459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:26:14.583 [DEBUG] [Thread-74459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:26:14.605 [INFO] [Thread-74459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:26:14.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:26:14.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:26:15.432 [DEBUG] [Thread-74459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:26:15.432 [DEBUG] [Thread-74459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:26:15.480 [DEBUG] [Thread-74459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:26:15.480 [DEBUG] [Thread-74459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:26:15.489 [DEBUG] [Thread-74459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:26:15.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:26:15.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:26:15.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:26:15.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:26:15.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:26:15.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:26:15.523 [DEBUG] [Thread-74459] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:26:26.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:26.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:28.155 [DEBUG] [Thread-74461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:43.191 [DEBUG] [Thread-74462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:26:45.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:26:45.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:26:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 26, 26), 15.75, 34.18, 0.0, 38.09, 16.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:26:46.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:26:26
2025-12-12T18:26:46.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:26:46.523 [DEBUG] [Thread-74463] [transport.py] [_log()] starting thread (client mode): 0xf8156aa0
2025-12-12T18:26:46.523 [DEBUG] [Thread-74463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:26:46.543 [DEBUG] [Thread-74463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:26:46.543 [INFO] [Thread-74463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] client lang: <none>
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] server lang: <none>
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] kex follows: False
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] Compression: none
2025-12-12T18:26:46.547 [DEBUG] [Thread-74463] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:26:46.561 [DEBUG] [Thread-74463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:26:46.561 [DEBUG] [Thread-74463] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:26:46.561 [DEBUG] [Thread-74463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:26:46.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:26:46.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:26:46.605 [DEBUG] [Thread-74463] [transport.py] [_log()] userauth is OK
2025-12-12T18:26:46.605 [DEBUG] [Thread-74463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:26:46.605 [DEBUG] [Thread-74463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:26:46.605 [DEBUG] [Thread-74463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:26:46.605 [DEBUG] [Thread-74463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:26:46.620 [INFO] [Thread-74463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:26:46.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:26:47.236 [DEBUG] [Thread-74463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:26:47.236 [DEBUG] [Thread-74463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:26:47.236 [DEBUG] [Thread-74463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:26:47.277 [DEBUG] [Thread-74463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:26:47.277 [DEBUG] [Thread-74463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:26:47.279 [DEBUG] [Thread-74463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:26:47.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:26:47.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:26:47.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:26:47.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:26:47.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:26:47.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:26:47.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.684825 -999.00  +15.60  45.72     40   +2.40 1 1 2 1 1   887    0 10.82 -147.48 ----- 44.9 45.7 301.6 55.4 18.1 -27.6 18.4 -26.5 18.8 -24.7 19.0 -25.7
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.684825
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:26:47.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:26:26', tmtdew=15.75, humidity=34.18, cloud=0.0, wind=38.09, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:26:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:26:47.298 [DEBUG] [Thread-74463] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:26:47.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:26:47.384 [DEBUG] [Thread-74466] [transport.py] [_log()] starting thread (client mode): 0xf8157940
2025-12-12T18:26:47.385 [DEBUG] [Thread-74466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:26:47.399 [DEBUG] [Thread-74466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:26:47.399 [INFO] [Thread-74466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] client lang: <none>
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] server lang: <none>
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] kex follows: False
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] Compression: none
2025-12-12T18:26:47.407 [DEBUG] [Thread-74466] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:26:47.465 [DEBUG] [Thread-74466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:26:47.465 [DEBUG] [Thread-74466] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:26:47.465 [DEBUG] [Thread-74466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:26:47.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:26:47.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:26:47.522 [DEBUG] [Thread-74466] [transport.py] [_log()] userauth is OK
2025-12-12T18:26:47.522 [DEBUG] [Thread-74466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:26:47.522 [DEBUG] [Thread-74466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:26:47.522 [DEBUG] [Thread-74466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:26:47.522 [DEBUG] [Thread-74466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:26:47.536 [INFO] [Thread-74466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:26:47.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:26:47.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:26:48.380 [DEBUG] [Thread-74466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:26:48.381 [DEBUG] [Thread-74466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:26:48.431 [DEBUG] [Thread-74466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:26:48.431 [DEBUG] [Thread-74466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:26:48.440 [DEBUG] [Thread-74466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:26:48.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:26:48.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:26:48.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:26:48.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:26:48.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:26:48.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:26:48.477 [DEBUG] [Thread-74466] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:26:58.215 [DEBUG] [Thread-74468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:26:59.716 [DEBUG] [Thread-74469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:13.259 [DEBUG] [Thread-74470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:27:18.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:27:18.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:27:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 26, 58), 15.81, 34.24, 0.0, 41.48, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:27:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:26:58
2025-12-12T18:27:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:27:19.447 [DEBUG] [Thread-74471] [transport.py] [_log()] starting thread (client mode): 0xfabc5cc0
2025-12-12T18:27:19.447 [DEBUG] [Thread-74471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:27:19.467 [DEBUG] [Thread-74471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:27:19.468 [INFO] [Thread-74471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:27:19.471 [DEBUG] [Thread-74471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] client lang: <none>
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] server lang: <none>
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] kex follows: False
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] Compression: none
2025-12-12T18:27:19.472 [DEBUG] [Thread-74471] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:27:19.490 [DEBUG] [Thread-74471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:27:19.491 [DEBUG] [Thread-74471] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:27:19.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:27:19.492 [DEBUG] [Thread-74471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:27:19.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:27:19.494 [DEBUG] [Thread-74471] [transport.py] [_log()] userauth is OK
2025-12-12T18:27:19.494 [DEBUG] [Thread-74471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:27:19.494 [DEBUG] [Thread-74471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:27:19.494 [DEBUG] [Thread-74471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:27:19.494 [DEBUG] [Thread-74471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:27:19.519 [INFO] [Thread-74471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:27:19.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:27:20.135 [DEBUG] [Thread-74471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:27:20.136 [DEBUG] [Thread-74471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:27:20.136 [DEBUG] [Thread-74471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:27:20.177 [DEBUG] [Thread-74471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:27:20.177 [DEBUG] [Thread-74471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:27:20.180 [DEBUG] [Thread-74471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:27:20.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:27:20.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:27:20.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:27:20.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:27:20.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:27:20.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:27:20.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:27:20.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:27:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:27:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.685173 -999.00  +15.70  42.22     41   +2.50 1 1 2 1 1   887    0 10.38 -154.86 ----- 44.0 42.2 292.8 53.7 18.0 -26.7 18.4 -26.5 18.7 -24.0 18.9 -25.9
2025-12-12T18:27:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:27:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:27:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.685173
2025-12-12T18:27:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:27:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:27:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:27:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:27:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:27:20.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:26:58', tmtdew=15.81, humidity=34.24, cloud=0.0, wind=41.48, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:26:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:27:20.204 [DEBUG] [Thread-74471] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:27:20.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:27:20.300 [DEBUG] [Thread-74474] [transport.py] [_log()] starting thread (client mode): 0xf5772f20
2025-12-12T18:27:20.300 [DEBUG] [Thread-74474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:27:20.315 [DEBUG] [Thread-74474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:27:20.315 [INFO] [Thread-74474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:27:20.322 [DEBUG] [Thread-74474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:27:20.322 [DEBUG] [Thread-74474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:27:20.322 [DEBUG] [Thread-74474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:27:20.322 [DEBUG] [Thread-74474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:27:20.322 [DEBUG] [Thread-74474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] client lang: <none>
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] server lang: <none>
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] kex follows: False
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] Compression: none
2025-12-12T18:27:20.323 [DEBUG] [Thread-74474] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:27:20.382 [DEBUG] [Thread-74474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:27:20.383 [DEBUG] [Thread-74474] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:27:20.383 [DEBUG] [Thread-74474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:27:20.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:27:20.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:27:20.439 [DEBUG] [Thread-74474] [transport.py] [_log()] userauth is OK
2025-12-12T18:27:20.439 [DEBUG] [Thread-74474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:27:20.439 [DEBUG] [Thread-74474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:27:20.439 [DEBUG] [Thread-74474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:27:20.439 [DEBUG] [Thread-74474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:27:20.458 [INFO] [Thread-74474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:27:20.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:27:20.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:27:21.331 [DEBUG] [Thread-74474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:27:21.331 [DEBUG] [Thread-74474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:27:21.380 [DEBUG] [Thread-74474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:27:21.380 [DEBUG] [Thread-74474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:27:21.388 [DEBUG] [Thread-74474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:27:21.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:27:21.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:27:21.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:27:21.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:27:21.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:27:21.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:27:21.419 [DEBUG] [Thread-74474] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:27:26.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:26.542 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:28.291 [DEBUG] [Thread-74476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:43.341 [DEBUG] [Thread-74477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:51.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:27:51.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:27:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:27:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 27, 30), 15.76, 34.38, 0.0, 44.5, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:27:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:27:30
2025-12-12T18:27:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:27:52.382 [DEBUG] [Thread-74478] [transport.py] [_log()] starting thread (client mode): 0xf5773040
2025-12-12T18:27:52.382 [DEBUG] [Thread-74478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:27:52.402 [DEBUG] [Thread-74478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:27:52.402 [INFO] [Thread-74478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] client lang: <none>
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] server lang: <none>
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] kex follows: False
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] Compression: none
2025-12-12T18:27:52.406 [DEBUG] [Thread-74478] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:27:52.424 [DEBUG] [Thread-74478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:27:52.424 [DEBUG] [Thread-74478] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:27:52.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:27:52.425 [DEBUG] [Thread-74478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:27:52.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:27:52.427 [DEBUG] [Thread-74478] [transport.py] [_log()] userauth is OK
2025-12-12T18:27:52.427 [DEBUG] [Thread-74478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:27:52.427 [DEBUG] [Thread-74478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:27:52.427 [DEBUG] [Thread-74478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:27:52.427 [DEBUG] [Thread-74478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:27:52.451 [INFO] [Thread-74478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:27:52.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:27:53.089 [DEBUG] [Thread-74478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:27:53.090 [DEBUG] [Thread-74478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:27:53.090 [DEBUG] [Thread-74478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:27:53.132 [DEBUG] [Thread-74478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:27:53.132 [DEBUG] [Thread-74478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:27:53.135 [DEBUG] [Thread-74478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:27:53.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:27:53.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:27:53.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:27:53.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:27:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:27:53.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:27:53.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:27:53.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:27:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:27:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.685520 -999.00  +16.00  29.68     40   +2.60 1 1 1 1 1   887    0 10.48 -153.27 ----- 27.8 29.7 305.8 42.9 18.0 -26.4 18.4 -26.1 18.8 -25.2 18.9 -25.0
2025-12-12T18:27:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:27:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:27:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.685520
2025-12-12T18:27:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:27:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:27:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:27:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:27:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:27:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:27:30', tmtdew=15.76, humidity=34.38, cloud=0.0, wind=44.5, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:27:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:27:53.156 [DEBUG] [Thread-74478] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:27:53.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:27:58.370 [DEBUG] [Thread-74481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:27:59.772 [DEBUG] [Thread-74482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:13.409 [DEBUG] [Thread-74483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:26.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:26.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:28.442 [DEBUG] [Thread-74484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:43.472 [DEBUG] [Thread-74485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:58.501 [DEBUG] [Thread-74486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:28:59.824 [DEBUG] [Thread-74487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:13.531 [DEBUG] [Thread-74488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:26.824 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:26.825 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:28.560 [DEBUG] [Thread-74489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:43.594 [DEBUG] [Thread-74490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:58.621 [DEBUG] [Thread-74491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:29:59.870 [DEBUG] [Thread-74492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:06.058 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T18:30:13.653 [DEBUG] [Thread-74493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:26.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:26.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:28.681 [DEBUG] [Thread-74494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:36.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:30:36.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:30:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:30:36.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 30, 12), 16.08, 33.41, 0.0, 40.79, 16.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:30:36.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:30:12
2025-12-12T18:30:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:30:37.109 [DEBUG] [Thread-74495] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-12T18:30:37.109 [DEBUG] [Thread-74495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:30:37.130 [DEBUG] [Thread-74495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:30:37.130 [INFO] [Thread-74495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] client lang: <none>
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] server lang: <none>
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] kex follows: False
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] Compression: none
2025-12-12T18:30:37.133 [DEBUG] [Thread-74495] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:30:37.150 [DEBUG] [Thread-74495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:30:37.150 [DEBUG] [Thread-74495] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:30:37.150 [DEBUG] [Thread-74495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:30:37.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:30:37.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:30:37.151 [DEBUG] [Thread-74495] [transport.py] [_log()] userauth is OK
2025-12-12T18:30:37.151 [DEBUG] [Thread-74495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:30:37.151 [DEBUG] [Thread-74495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:30:37.151 [DEBUG] [Thread-74495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:30:37.151 [DEBUG] [Thread-74495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:30:37.160 [INFO] [Thread-74495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:30:37.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:30:37.761 [DEBUG] [Thread-74495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:30:37.761 [DEBUG] [Thread-74495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:30:37.761 [DEBUG] [Thread-74495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:30:37.802 [DEBUG] [Thread-74495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:30:37.802 [DEBUG] [Thread-74495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:30:37.804 [DEBUG] [Thread-74495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:30:37.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:30:37.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:30:37.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:30:37.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:30:37.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:30:37.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:30:37.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:30:37.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.687256 -999.00  +16.50  31.08     39   +2.60 1 1 2 1 1   887    0 10.02 -161.38 ----- 31.5 31.1 305.6 38.9 18.2 -26.2 18.6 -25.8 19.1 -23.4 19.1 -24.9
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.687256
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:30:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:30:12', tmtdew=16.08, humidity=33.41, cloud=0.0, wind=40.79, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:29:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:30:37.823 [DEBUG] [Thread-74495] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:30:37.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:30:37.909 [DEBUG] [Thread-74498] [transport.py] [_log()] starting thread (client mode): 0xf575ce80
2025-12-12T18:30:37.909 [DEBUG] [Thread-74498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:30:37.924 [DEBUG] [Thread-74498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:30:37.924 [INFO] [Thread-74498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] client lang: <none>
2025-12-12T18:30:37.931 [DEBUG] [Thread-74498] [transport.py] [_log()] server lang: <none>
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] kex follows: False
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] Compression: none
2025-12-12T18:30:37.932 [DEBUG] [Thread-74498] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:30:37.989 [DEBUG] [Thread-74498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:30:37.989 [DEBUG] [Thread-74498] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:30:37.989 [DEBUG] [Thread-74498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:30:37.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:30:37.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:30:38.048 [DEBUG] [Thread-74498] [transport.py] [_log()] userauth is OK
2025-12-12T18:30:38.048 [DEBUG] [Thread-74498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:30:38.048 [DEBUG] [Thread-74498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:30:38.048 [DEBUG] [Thread-74498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:30:38.048 [DEBUG] [Thread-74498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:30:38.062 [INFO] [Thread-74498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:30:38.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:30:38.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:30:38.892 [DEBUG] [Thread-74498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:30:38.892 [DEBUG] [Thread-74498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:30:38.940 [DEBUG] [Thread-74498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:30:38.940 [DEBUG] [Thread-74498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:30:38.948 [DEBUG] [Thread-74498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:30:38.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:30:38.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:30:38.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:30:38.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:30:38.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:30:38.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:30:38.980 [DEBUG] [Thread-74498] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:30:43.709 [DEBUG] [Thread-74500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:58.753 [DEBUG] [Thread-74501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:30:59.932 [DEBUG] [Thread-74502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:08.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:31:08.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:31:08.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:31:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 30, 44), 16.29, 32.91, 0.0, 37.35, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:31:09.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:30:44
2025-12-12T18:31:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:31:09.949 [DEBUG] [Thread-74503] [transport.py] [_log()] starting thread (client mode): 0xf5703700
2025-12-12T18:31:09.949 [DEBUG] [Thread-74503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:31:09.969 [DEBUG] [Thread-74503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:31:09.969 [INFO] [Thread-74503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] client lang: <none>
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] server lang: <none>
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] kex follows: False
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] Compression: none
2025-12-12T18:31:09.971 [DEBUG] [Thread-74503] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:31:09.983 [DEBUG] [Thread-74503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:31:09.983 [DEBUG] [Thread-74503] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:31:09.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:31:09.984 [DEBUG] [Thread-74503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:31:09.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:31:09.986 [DEBUG] [Thread-74503] [transport.py] [_log()] userauth is OK
2025-12-12T18:31:09.986 [DEBUG] [Thread-74503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:31:09.986 [DEBUG] [Thread-74503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:31:09.986 [DEBUG] [Thread-74503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:31:09.986 [DEBUG] [Thread-74503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:31:10.004 [INFO] [Thread-74503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:31:10.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:31:10.658 [DEBUG] [Thread-74503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:31:10.658 [DEBUG] [Thread-74503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:31:10.659 [DEBUG] [Thread-74503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:31:10.699 [DEBUG] [Thread-74503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:31:10.699 [DEBUG] [Thread-74503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:31:10.702 [DEBUG] [Thread-74503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:31:10.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:31:10.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:31:10.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:31:10.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:31:10.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:31:10.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:31:10.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:31:10.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:31:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.687950 -999.00  +15.50  53.24     40   +2.10 1 1 2 1 1   887    0 10.06 -162.26 ----- 50.5 53.2 313.2 59.2 18.1 -27.7 18.4 -27.6 19.0 -25.3 19.0 -26.4
2025-12-12T18:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.687950
2025-12-12T18:31:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:31:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:31:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:31:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:31:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:31:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:30:44', tmtdew=16.29, humidity=32.91, cloud=0.0, wind=37.35, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:30:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:31:10.726 [DEBUG] [Thread-74503] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:31:10.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:31:10.824 [DEBUG] [Thread-74506] [transport.py] [_log()] starting thread (client mode): 0xf5788fa0
2025-12-12T18:31:10.824 [DEBUG] [Thread-74506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:31:10.839 [DEBUG] [Thread-74506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:31:10.839 [INFO] [Thread-74506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:10.847 [DEBUG] [Thread-74506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] client lang: <none>
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] server lang: <none>
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] kex follows: False
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] Compression: none
2025-12-12T18:31:10.848 [DEBUG] [Thread-74506] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:31:10.906 [DEBUG] [Thread-74506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:31:10.906 [DEBUG] [Thread-74506] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:31:10.907 [DEBUG] [Thread-74506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:31:10.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:31:10.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:31:10.962 [DEBUG] [Thread-74506] [transport.py] [_log()] userauth is OK
2025-12-12T18:31:10.963 [DEBUG] [Thread-74506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:31:10.963 [DEBUG] [Thread-74506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:31:10.963 [DEBUG] [Thread-74506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:31:10.963 [DEBUG] [Thread-74506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:31:10.982 [INFO] [Thread-74506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:31:10.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:31:10.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:31:11.826 [DEBUG] [Thread-74506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:31:11.826 [DEBUG] [Thread-74506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:31:11.874 [DEBUG] [Thread-74506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:31:11.874 [DEBUG] [Thread-74506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:31:11.883 [DEBUG] [Thread-74506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:31:11.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:31:11.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:31:11.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:31:11.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:31:11.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:31:11.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:31:11.917 [DEBUG] [Thread-74506] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:31:13.781 [DEBUG] [Thread-74508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:27.115 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:27.116 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:28.815 [DEBUG] [Thread-74509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:31:41.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:31:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:31:42.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 31, 16), 16.29, 32.91, 0.0, 41.04, 16.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:31:42.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:31:16
2025-12-12T18:31:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:31:42.896 [DEBUG] [Thread-74510] [transport.py] [_log()] starting thread (client mode): 0xf5700dc0
2025-12-12T18:31:42.896 [DEBUG] [Thread-74510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:31:42.910 [DEBUG] [Thread-74510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:31:42.910 [INFO] [Thread-74510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:31:42.914 [DEBUG] [Thread-74510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] client lang: <none>
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] server lang: <none>
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] kex follows: False
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] Compression: none
2025-12-12T18:31:42.915 [DEBUG] [Thread-74510] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:31:42.930 [DEBUG] [Thread-74510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:31:42.930 [DEBUG] [Thread-74510] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:31:42.930 [DEBUG] [Thread-74510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:31:42.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:31:42.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:31:42.931 [DEBUG] [Thread-74510] [transport.py] [_log()] userauth is OK
2025-12-12T18:31:42.931 [DEBUG] [Thread-74510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:31:42.931 [DEBUG] [Thread-74510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:31:42.931 [DEBUG] [Thread-74510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:31:42.931 [DEBUG] [Thread-74510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:31:42.946 [INFO] [Thread-74510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:31:42.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:31:43.603 [DEBUG] [Thread-74510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:31:43.603 [DEBUG] [Thread-74510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:31:43.604 [DEBUG] [Thread-74510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:31:43.644 [DEBUG] [Thread-74510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:31:43.644 [DEBUG] [Thread-74510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:31:43.647 [DEBUG] [Thread-74510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:31:43.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:31:43.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:31:43.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:31:43.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:31:43.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:31:43.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:31:43.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:31:43.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:31:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:31:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.688298 -999.00  +15.50  39.13     41   +2.30 1 1 2 1 1   887    0 9.76 -164.07 ----- 42.6 39.1 309.2 48.6 17.9 -27.1 18.3 -27.9 18.7 -24.5 18.9 -26.3
2025-12-12T18:31:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:31:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:31:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.688298
2025-12-12T18:31:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:31:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:31:43.672 [DEBUG] [Thread-74510] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:31:43.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:31:43.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:31:43.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:31:43.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:31:16', tmtdew=16.29, humidity=32.91, cloud=0.0, wind=41.04, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:31:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:31:43.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:31:43.769 [DEBUG] [Thread-74513] [transport.py] [_log()] starting thread (client mode): 0xf81e77c0
2025-12-12T18:31:43.769 [DEBUG] [Thread-74513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:31:43.784 [DEBUG] [Thread-74513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:31:43.784 [INFO] [Thread-74513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:31:43.792 [DEBUG] [Thread-74513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] client lang: <none>
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] server lang: <none>
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] kex follows: False
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:31:43.793 [DEBUG] [Thread-74513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:31:43.794 [DEBUG] [Thread-74513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:31:43.794 [DEBUG] [Thread-74513] [transport.py] [_log()] Compression: none
2025-12-12T18:31:43.794 [DEBUG] [Thread-74513] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:31:43.849 [DEBUG] [Thread-74515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:43.853 [DEBUG] [Thread-74513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:31:43.853 [DEBUG] [Thread-74513] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:31:43.854 [DEBUG] [Thread-74513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:31:43.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:31:43.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:31:43.910 [DEBUG] [Thread-74513] [transport.py] [_log()] userauth is OK
2025-12-12T18:31:43.911 [DEBUG] [Thread-74513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:31:43.911 [DEBUG] [Thread-74513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:31:43.911 [DEBUG] [Thread-74513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:31:43.911 [DEBUG] [Thread-74513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:31:43.934 [INFO] [Thread-74513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:31:43.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:31:43.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:31:44.765 [DEBUG] [Thread-74513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:31:44.765 [DEBUG] [Thread-74513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:31:44.813 [DEBUG] [Thread-74513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:31:44.813 [DEBUG] [Thread-74513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:31:44.822 [DEBUG] [Thread-74513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:31:44.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:31:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:31:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:31:44.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:31:44.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:31:44.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:31:44.856 [DEBUG] [Thread-74513] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:31:58.896 [DEBUG] [Thread-74516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:31:59.989 [DEBUG] [Thread-74517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:32:13.927 [DEBUG] [Thread-74518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:32:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:32:14.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:32:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:32:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 31, 48), 16.11, 33.43, 0.0, 30.45, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:32:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:31:48
2025-12-12T18:32:15.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:32:15.847 [DEBUG] [Thread-74519] [transport.py] [_log()] starting thread (client mode): 0xf81e4100
2025-12-12T18:32:15.847 [DEBUG] [Thread-74519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:32:15.867 [DEBUG] [Thread-74519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:32:15.867 [INFO] [Thread-74519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] client lang: <none>
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] server lang: <none>
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] kex follows: False
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:32:15.870 [DEBUG] [Thread-74519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:32:15.871 [DEBUG] [Thread-74519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:32:15.871 [DEBUG] [Thread-74519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:32:15.871 [DEBUG] [Thread-74519] [transport.py] [_log()] Compression: none
2025-12-12T18:32:15.871 [DEBUG] [Thread-74519] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:32:15.888 [DEBUG] [Thread-74519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:32:15.888 [DEBUG] [Thread-74519] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:32:15.889 [DEBUG] [Thread-74519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:32:15.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:32:15.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:32:15.891 [DEBUG] [Thread-74519] [transport.py] [_log()] userauth is OK
2025-12-12T18:32:15.891 [DEBUG] [Thread-74519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:32:15.891 [DEBUG] [Thread-74519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:32:15.891 [DEBUG] [Thread-74519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:32:15.891 [DEBUG] [Thread-74519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:32:15.912 [INFO] [Thread-74519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:32:15.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:32:16.548 [DEBUG] [Thread-74519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:32:16.549 [DEBUG] [Thread-74519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:32:16.549 [DEBUG] [Thread-74519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:32:16.590 [DEBUG] [Thread-74519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:32:16.590 [DEBUG] [Thread-74519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:32:16.593 [DEBUG] [Thread-74519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:32:16.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:32:16.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:32:16.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:32:16.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:32:16.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:32:16.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:32:16.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:32:16.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:32:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:32:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.688645 -999.00  +15.60  44.99     41   +2.40 1 1 2 1 1   887    0 9.37 -167.54 ----- 42.8 45.0 316.4 52.0 18.0 -27.1 18.2 -26.9 18.8 -26.1 18.8 -25.8
2025-12-12T18:32:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:32:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:32:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.688645
2025-12-12T18:32:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:32:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:32:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:32:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:32:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:32:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:31:48', tmtdew=16.11, humidity=33.43, cloud=0.0, wind=30.45, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:31:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:32:16.618 [DEBUG] [Thread-74519] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:32:16.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:32:16.716 [DEBUG] [Thread-74522] [transport.py] [_log()] starting thread (client mode): 0xf81e7d90
2025-12-12T18:32:16.716 [DEBUG] [Thread-74522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:32:16.731 [DEBUG] [Thread-74522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:32:16.731 [INFO] [Thread-74522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:32:16.738 [DEBUG] [Thread-74522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:32:16.738 [DEBUG] [Thread-74522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:32:16.738 [DEBUG] [Thread-74522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] client lang: <none>
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] server lang: <none>
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] kex follows: False
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] Compression: none
2025-12-12T18:32:16.739 [DEBUG] [Thread-74522] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:32:16.798 [DEBUG] [Thread-74522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:32:16.799 [DEBUG] [Thread-74522] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:32:16.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:32:16.800 [DEBUG] [Thread-74522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:32:16.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:32:16.854 [DEBUG] [Thread-74522] [transport.py] [_log()] userauth is OK
2025-12-12T18:32:16.855 [DEBUG] [Thread-74522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:32:16.855 [DEBUG] [Thread-74522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:32:16.855 [DEBUG] [Thread-74522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:32:16.855 [DEBUG] [Thread-74522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:32:16.874 [INFO] [Thread-74522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:32:16.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:32:16.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:32:17.709 [DEBUG] [Thread-74522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:32:17.709 [DEBUG] [Thread-74522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:32:17.757 [DEBUG] [Thread-74522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:32:17.757 [DEBUG] [Thread-74522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:32:17.766 [DEBUG] [Thread-74522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:32:17.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:32:17.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:32:17.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:32:17.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:32:17.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:32:17.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:32:17.800 [DEBUG] [Thread-74522] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:32:27.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:32:27.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:32:28.955 [DEBUG] [Thread-74524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:32:43.995 [DEBUG] [Thread-74525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:32:47.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:32:47.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:32:47.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:32:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 32, 20), 16.16, 33.33, 0.0, 33.01, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:32:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:32:20
2025-12-12T18:32:48.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:32:48.781 [DEBUG] [Thread-74526] [transport.py] [_log()] starting thread (client mode): 0xf575ee60
2025-12-12T18:32:48.781 [DEBUG] [Thread-74526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:32:48.801 [DEBUG] [Thread-74526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:32:48.801 [INFO] [Thread-74526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:32:48.804 [DEBUG] [Thread-74526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] client lang: <none>
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] server lang: <none>
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] kex follows: False
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] Compression: none
2025-12-12T18:32:48.805 [DEBUG] [Thread-74526] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:32:48.824 [DEBUG] [Thread-74526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:32:48.825 [DEBUG] [Thread-74526] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:32:48.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:32:48.825 [DEBUG] [Thread-74526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:32:48.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:32:48.828 [DEBUG] [Thread-74526] [transport.py] [_log()] userauth is OK
2025-12-12T18:32:48.828 [DEBUG] [Thread-74526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:32:48.828 [DEBUG] [Thread-74526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:32:48.828 [DEBUG] [Thread-74526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:32:48.828 [DEBUG] [Thread-74526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:32:48.853 [INFO] [Thread-74526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:32:48.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:32:49.511 [DEBUG] [Thread-74526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:32:49.511 [DEBUG] [Thread-74526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:32:49.512 [DEBUG] [Thread-74526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:32:49.552 [DEBUG] [Thread-74526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:32:49.552 [DEBUG] [Thread-74526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:32:49.555 [DEBUG] [Thread-74526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:32:49.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:32:49.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:32:49.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:32:49.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:32:49.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:32:49.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:32:49.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:32:49.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:32:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:32:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.688992 -999.00  +15.70  29.10     40   +2.40 1 1 1 1 1   887    0 9.32 -173.53 ----- 34.1 29.1 307.1 45.6 17.9 -26.9 18.2 -26.9 18.7 -24.6 18.8 -25.9
2025-12-12T18:32:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:32:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:32:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.688992
2025-12-12T18:32:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:32:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:32:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:32:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:32:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:32:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:32:20', tmtdew=16.16, humidity=33.33, cloud=0.0, wind=33.01, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:32:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:32:49.582 [DEBUG] [Thread-74526] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:32:49.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:32:49.672 [DEBUG] [Thread-74529] [transport.py] [_log()] starting thread (client mode): 0xf5703760
2025-12-12T18:32:49.672 [DEBUG] [Thread-74529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:32:49.687 [DEBUG] [Thread-74529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:32:49.687 [INFO] [Thread-74529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:32:49.694 [DEBUG] [Thread-74529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:32:49.694 [DEBUG] [Thread-74529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:32:49.694 [DEBUG] [Thread-74529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] client lang: <none>
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] server lang: <none>
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] kex follows: False
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] Compression: none
2025-12-12T18:32:49.695 [DEBUG] [Thread-74529] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:32:49.754 [DEBUG] [Thread-74529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:32:49.755 [DEBUG] [Thread-74529] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:32:49.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:32:49.756 [DEBUG] [Thread-74529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:32:49.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:32:49.814 [DEBUG] [Thread-74529] [transport.py] [_log()] userauth is OK
2025-12-12T18:32:49.815 [DEBUG] [Thread-74529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:32:49.815 [DEBUG] [Thread-74529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:32:49.815 [DEBUG] [Thread-74529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:32:49.815 [DEBUG] [Thread-74529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:32:49.835 [INFO] [Thread-74529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:32:49.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:32:49.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:32:50.695 [DEBUG] [Thread-74529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:32:50.696 [DEBUG] [Thread-74529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:32:50.743 [DEBUG] [Thread-74529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:32:50.743 [DEBUG] [Thread-74529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:32:50.752 [DEBUG] [Thread-74529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:32:50.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:32:50.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:32:50.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:32:50.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:32:50.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:32:50.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:32:50.787 [DEBUG] [Thread-74529] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:32:59.026 [DEBUG] [Thread-74531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:00.041 [DEBUG] [Thread-74532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:14.071 [DEBUG] [Thread-74533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:33:20.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:33:20.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:33:21.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 32, 52), 16.06, 33.86, 0.0, 34.97, 16.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:33:21.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:32:52
2025-12-12T18:33:21.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:33:21.784 [DEBUG] [Thread-74534] [transport.py] [_log()] starting thread (client mode): 0xf5701750
2025-12-12T18:33:21.785 [DEBUG] [Thread-74534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:33:21.804 [DEBUG] [Thread-74534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:33:21.805 [INFO] [Thread-74534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] client lang: <none>
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] server lang: <none>
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] kex follows: False
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:33:21.808 [DEBUG] [Thread-74534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:33:21.809 [DEBUG] [Thread-74534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:33:21.809 [DEBUG] [Thread-74534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:33:21.809 [DEBUG] [Thread-74534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:33:21.809 [DEBUG] [Thread-74534] [transport.py] [_log()] Compression: none
2025-12-12T18:33:21.809 [DEBUG] [Thread-74534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:33:21.827 [DEBUG] [Thread-74534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:33:21.827 [DEBUG] [Thread-74534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:33:21.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:33:21.828 [DEBUG] [Thread-74534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:33:21.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:33:21.831 [DEBUG] [Thread-74534] [transport.py] [_log()] userauth is OK
2025-12-12T18:33:21.831 [DEBUG] [Thread-74534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:33:21.831 [DEBUG] [Thread-74534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:33:21.831 [DEBUG] [Thread-74534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:33:21.831 [DEBUG] [Thread-74534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:33:21.855 [INFO] [Thread-74534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:33:21.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:33:22.522 [DEBUG] [Thread-74534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:33:22.522 [DEBUG] [Thread-74534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:33:22.522 [DEBUG] [Thread-74534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:33:22.563 [DEBUG] [Thread-74534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:33:22.563 [DEBUG] [Thread-74534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:33:22.566 [DEBUG] [Thread-74534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:33:22.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:33:22.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:33:22.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:33:22.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:33:22.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:33:22.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:33:22.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:33:22.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:33:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:33:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.689339 -999.00  +15.90  38.20     40   +2.30 1 1 2 1 1   887    0 9.57 -169.97 ----- 33.2 38.2 302.4 43.4 17.9 -26.9 18.2 -26.6 18.6 -24.6 18.8 -25.5
2025-12-12T18:33:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:33:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:33:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.689339
2025-12-12T18:33:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:33:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:33:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:33:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:33:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:33:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:32:52', tmtdew=16.06, humidity=33.86, cloud=0.0, wind=34.97, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:32:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:33:22.592 [DEBUG] [Thread-74534] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:33:22.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:33:22.688 [DEBUG] [Thread-74537] [transport.py] [_log()] starting thread (client mode): 0xf8154af0
2025-12-12T18:33:22.688 [DEBUG] [Thread-74537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:33:22.702 [DEBUG] [Thread-74537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:33:22.702 [INFO] [Thread-74537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] client lang: <none>
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] server lang: <none>
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] kex follows: False
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:33:22.710 [DEBUG] [Thread-74537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:33:22.711 [DEBUG] [Thread-74537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:33:22.711 [DEBUG] [Thread-74537] [transport.py] [_log()] Compression: none
2025-12-12T18:33:22.711 [DEBUG] [Thread-74537] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:33:22.766 [DEBUG] [Thread-74537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:33:22.766 [DEBUG] [Thread-74537] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:33:22.767 [DEBUG] [Thread-74537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:33:22.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:33:22.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:33:22.822 [DEBUG] [Thread-74537] [transport.py] [_log()] userauth is OK
2025-12-12T18:33:22.822 [DEBUG] [Thread-74537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:33:22.823 [DEBUG] [Thread-74537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:33:22.823 [DEBUG] [Thread-74537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:33:22.823 [DEBUG] [Thread-74537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:33:22.847 [INFO] [Thread-74537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:33:22.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:33:22.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:33:23.701 [DEBUG] [Thread-74537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:33:23.701 [DEBUG] [Thread-74537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:33:23.749 [DEBUG] [Thread-74537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:33:23.749 [DEBUG] [Thread-74537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:33:23.758 [DEBUG] [Thread-74537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:33:23.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:33: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')
2025-12-12T18:33:23.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:33:23.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:33:23.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:33:23.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:33:23.792 [DEBUG] [Thread-74537] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:33:27.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:27.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:29.103 [DEBUG] [Thread-74539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:44.145 [DEBUG] [Thread-74540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:33:53.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:33:53.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:33:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:33:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 33, 24), 15.96, 34.08, 0.0, 40.21, 16.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:33:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:33:24
2025-12-12T18:33:54.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:33:54.773 [DEBUG] [Thread-74541] [transport.py] [_log()] starting thread (client mode): 0xf575f220
2025-12-12T18:33:54.773 [DEBUG] [Thread-74541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:33:54.792 [DEBUG] [Thread-74541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:33:54.792 [INFO] [Thread-74541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] client lang: <none>
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] server lang: <none>
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] kex follows: False
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:33:54.795 [DEBUG] [Thread-74541] [transport.py] [_log()] Compression: none
2025-12-12T18:33:54.796 [DEBUG] [Thread-74541] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:33:54.811 [DEBUG] [Thread-74541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:33:54.811 [DEBUG] [Thread-74541] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:33:54.812 [DEBUG] [Thread-74541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:33:54.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:33:54.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:33:54.813 [DEBUG] [Thread-74541] [transport.py] [_log()] userauth is OK
2025-12-12T18:33:54.814 [DEBUG] [Thread-74541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:33:54.814 [DEBUG] [Thread-74541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:33:54.814 [DEBUG] [Thread-74541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:33:54.814 [DEBUG] [Thread-74541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:33:54.834 [INFO] [Thread-74541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:33:54.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:33:55.499 [DEBUG] [Thread-74541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:33:55.499 [DEBUG] [Thread-74541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:33:55.499 [DEBUG] [Thread-74541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:33:55.540 [DEBUG] [Thread-74541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:33:55.540 [DEBUG] [Thread-74541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:33:55.543 [DEBUG] [Thread-74541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:33:55.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:33:55.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:33:55.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:33:55.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:33:55.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:33:55.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:33:55.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:33:55.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:33:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:33:55.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.689686 -999.00  +15.70  36.44     40   +2.20 1 1 2 1 1   887    0 9.63 -162.63 ----- 35.0 36.4 293.0 46.8 17.9 -27.2 18.2 -26.4 18.6 -26.6 18.7 -26.0
2025-12-12T18:33:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:33:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:33:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.689686
2025-12-12T18:33:55.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:33:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:33:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:33:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:33:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:33:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:33:24', tmtdew=15.96, humidity=34.08, cloud=0.0, wind=40.21, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:33:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:33:55.568 [DEBUG] [Thread-74541] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:33:55.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:33:55.664 [DEBUG] [Thread-74544] [transport.py] [_log()] starting thread (client mode): 0xf575eef0
2025-12-12T18:33:55.664 [DEBUG] [Thread-74544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:33:55.679 [DEBUG] [Thread-74544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:33:55.679 [INFO] [Thread-74544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] client lang: <none>
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] server lang: <none>
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] kex follows: False
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:33:55.687 [DEBUG] [Thread-74544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:33:55.688 [DEBUG] [Thread-74544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:33:55.688 [DEBUG] [Thread-74544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:33:55.688 [DEBUG] [Thread-74544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:33:55.688 [DEBUG] [Thread-74544] [transport.py] [_log()] Compression: none
2025-12-12T18:33:55.688 [DEBUG] [Thread-74544] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:33:55.746 [DEBUG] [Thread-74544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:33:55.747 [DEBUG] [Thread-74544] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:33:55.747 [DEBUG] [Thread-74544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:33:55.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:33:55.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:33:55.802 [DEBUG] [Thread-74544] [transport.py] [_log()] userauth is OK
2025-12-12T18:33:55.802 [DEBUG] [Thread-74544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:33:55.802 [DEBUG] [Thread-74544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:33:55.803 [DEBUG] [Thread-74544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:33:55.803 [DEBUG] [Thread-74544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:33:55.822 [INFO] [Thread-74544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:33:55.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:33:55.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:33:56.669 [DEBUG] [Thread-74544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:33:56.669 [DEBUG] [Thread-74544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:33:56.716 [DEBUG] [Thread-74544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:33:56.716 [DEBUG] [Thread-74544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:33:56.724 [DEBUG] [Thread-74544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:33:56.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:33:56.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:33:56.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:33:56.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:33:56.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:33:56.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:33:56.756 [DEBUG] [Thread-74544] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:33:59.169 [DEBUG] [Thread-74546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:00.087 [DEBUG] [Thread-74547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:14.227 [DEBUG] [Thread-74548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:34:26.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:34:26.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:34:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 33, 56), 15.85, 34.28, 0.0, 44.99, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:34:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:33:56
2025-12-12T18:34:27.544 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:27.545 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:27.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:34:27.775 [DEBUG] [Thread-74549] [transport.py] [_log()] starting thread (client mode): 0xf5788670
2025-12-12T18:34:27.775 [DEBUG] [Thread-74549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:34:27.793 [DEBUG] [Thread-74549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:34:27.794 [INFO] [Thread-74549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:34:27.796 [DEBUG] [Thread-74549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] client lang: <none>
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] server lang: <none>
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] kex follows: False
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] Compression: none
2025-12-12T18:34:27.797 [DEBUG] [Thread-74549] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:34:27.811 [DEBUG] [Thread-74549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:34:27.811 [DEBUG] [Thread-74549] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:34:27.811 [DEBUG] [Thread-74549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:34:27.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:34:27.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:34:27.812 [DEBUG] [Thread-74549] [transport.py] [_log()] userauth is OK
2025-12-12T18:34:27.812 [DEBUG] [Thread-74549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:34:27.812 [DEBUG] [Thread-74549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:34:27.812 [DEBUG] [Thread-74549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:34:27.812 [DEBUG] [Thread-74549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:34:27.829 [INFO] [Thread-74549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:34:27.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:34:28.459 [DEBUG] [Thread-74549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:34:28.459 [DEBUG] [Thread-74549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:34:28.459 [DEBUG] [Thread-74549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:34:28.501 [DEBUG] [Thread-74549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:34:28.502 [DEBUG] [Thread-74549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:34:28.503 [DEBUG] [Thread-74549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:34:28.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:34:28.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:34:28.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:34:28.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:34:28.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:34:28.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:34:28.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.690034 -999.00  +15.90  39.17     39   +2.20 1 1 2 1 1   887    0 10.16 -145.12 ----- 37.9 39.2 315.2 43.7 17.9 -26.8 18.2 -26.0 18.6 -24.1 18.8 -25.3
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.690034
2025-12-12T18:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:34:28.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:34:28.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:34:28.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:34:28.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:34:28.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:33:56', tmtdew=15.85, humidity=34.28, cloud=0.0, wind=44.99, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:33:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:34:28.522 [DEBUG] [Thread-74549] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:34:28.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:34:28.608 [DEBUG] [Thread-74552] [transport.py] [_log()] starting thread (client mode): 0xf574da50
2025-12-12T18:34:28.608 [DEBUG] [Thread-74552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:34:28.623 [DEBUG] [Thread-74552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:34:28.623 [INFO] [Thread-74552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:34:28.630 [DEBUG] [Thread-74552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] client lang: <none>
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] server lang: <none>
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] kex follows: False
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] Compression: none
2025-12-12T18:34:28.631 [DEBUG] [Thread-74552] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:34:28.689 [DEBUG] [Thread-74552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:34:28.689 [DEBUG] [Thread-74552] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:34:28.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:34:28.690 [DEBUG] [Thread-74552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:34:28.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:34:28.746 [DEBUG] [Thread-74552] [transport.py] [_log()] userauth is OK
2025-12-12T18:34:28.746 [DEBUG] [Thread-74552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:34:28.746 [DEBUG] [Thread-74552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:34:28.746 [DEBUG] [Thread-74552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:34:28.746 [DEBUG] [Thread-74552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:34:28.764 [INFO] [Thread-74552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:34:28.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:34:28.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:34:29.256 [DEBUG] [Thread-74554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:29.646 [DEBUG] [Thread-74552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:34:29.646 [DEBUG] [Thread-74552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:34:29.695 [DEBUG] [Thread-74552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:34:29.695 [DEBUG] [Thread-74552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:34:29.703 [DEBUG] [Thread-74552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:34:29.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:34:29.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')
2025-12-12T18:34:29.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
2025-12-12T18:34:29.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:34:29.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:34:29.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:34:29.735 [DEBUG] [Thread-74552] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:34:44.289 [DEBUG] [Thread-74555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:59.320 [DEBUG] [Thread-74556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:34:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:34:59.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:34:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:35:00.137 [DEBUG] [Thread-74557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:35:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 34, 28), 15.59, 34.88, 0.0, 40.09, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:35:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:34:28
2025-12-12T18:35:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:35:00.718 [DEBUG] [Thread-74558] [transport.py] [_log()] starting thread (client mode): 0xf8154af0
2025-12-12T18:35:00.718 [DEBUG] [Thread-74558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:35:00.737 [DEBUG] [Thread-74558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:35:00.737 [INFO] [Thread-74558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:35:00.740 [DEBUG] [Thread-74558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] client lang: <none>
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] server lang: <none>
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] kex follows: False
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:35:00.741 [DEBUG] [Thread-74558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:35:00.742 [DEBUG] [Thread-74558] [transport.py] [_log()] Compression: none
2025-12-12T18:35:00.742 [DEBUG] [Thread-74558] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:35:00.757 [DEBUG] [Thread-74558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:35:00.757 [DEBUG] [Thread-74558] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:35:00.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:35:00.757 [DEBUG] [Thread-74558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:35:00.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:35:00.758 [DEBUG] [Thread-74558] [transport.py] [_log()] userauth is OK
2025-12-12T18:35:00.758 [DEBUG] [Thread-74558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:35:00.758 [DEBUG] [Thread-74558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:35:00.758 [DEBUG] [Thread-74558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:35:00.758 [DEBUG] [Thread-74558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:35:00.767 [INFO] [Thread-74558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:35:00.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:35:01.399 [DEBUG] [Thread-74558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:35:01.399 [DEBUG] [Thread-74558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:35:01.399 [DEBUG] [Thread-74558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:35:01.440 [DEBUG] [Thread-74558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:35:01.440 [DEBUG] [Thread-74558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:35:01.442 [DEBUG] [Thread-74558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:35:01.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:35:01.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:35:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:35:01.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:35:01.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:35:01.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.690381 -999.00  +15.90  31.75     39   +2.20 1 1 2 1 1   887    0 10.45 -134.25 ----- 27.3 31.8 329.2 50.5 17.8 -26.8 18.2 -26.5 18.6 -24.0 18.7 -25.3
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:35:01.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.690381
2025-12-12T18:35:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:35:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:35:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:35:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:35:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:35:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:34:28', tmtdew=15.59, humidity=34.88, cloud=0.0, wind=40.09, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:34:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:35:01.461 [DEBUG] [Thread-74558] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:35:01.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:35:01.546 [DEBUG] [Thread-74561] [transport.py] [_log()] starting thread (client mode): 0xf5701e70
2025-12-12T18:35:01.546 [DEBUG] [Thread-74561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:35:01.560 [DEBUG] [Thread-74561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:35:01.560 [INFO] [Thread-74561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] client lang: <none>
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] server lang: <none>
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] kex follows: False
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] Compression: none
2025-12-12T18:35:01.568 [DEBUG] [Thread-74561] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:35:01.625 [DEBUG] [Thread-74561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:35:01.625 [DEBUG] [Thread-74561] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:35:01.626 [DEBUG] [Thread-74561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:35:01.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:35:01.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:35:01.682 [DEBUG] [Thread-74561] [transport.py] [_log()] userauth is OK
2025-12-12T18:35:01.682 [DEBUG] [Thread-74561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:35:01.682 [DEBUG] [Thread-74561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:35:01.682 [DEBUG] [Thread-74561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:35:01.682 [DEBUG] [Thread-74561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:35:01.700 [INFO] [Thread-74561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:35:01.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:35:01.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:35:02.659 [DEBUG] [Thread-74561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:35:02.659 [DEBUG] [Thread-74561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:35:02.708 [DEBUG] [Thread-74561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:35:02.708 [DEBUG] [Thread-74561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:35:02.717 [DEBUG] [Thread-74561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:35:02.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:35:02.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:35:02.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:35:02.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:35:02.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:35:02.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:35:02.748 [DEBUG] [Thread-74561] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:35:14.349 [DEBUG] [Thread-74563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:35:27.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:35:27.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:35:29.395 [DEBUG] [Thread-74564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:35:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:35:32.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:35:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:35:33.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 34, 28), 15.59, 34.88, 0.0, 40.09, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:35:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:34:28
2025-12-12T18:35:33.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:35:33.821 [DEBUG] [Thread-74565] [transport.py] [_log()] starting thread (client mode): 0xf5772aa0
2025-12-12T18:35:33.821 [DEBUG] [Thread-74565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:35:33.840 [DEBUG] [Thread-74565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:35:33.840 [INFO] [Thread-74565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] client lang: <none>
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] server lang: <none>
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] kex follows: False
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] Compression: none
2025-12-12T18:35:33.844 [DEBUG] [Thread-74565] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:35:33.858 [DEBUG] [Thread-74565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:35:33.858 [DEBUG] [Thread-74565] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:35:33.858 [DEBUG] [Thread-74565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:35:33.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:35:33.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:35:33.859 [DEBUG] [Thread-74565] [transport.py] [_log()] userauth is OK
2025-12-12T18:35:33.859 [DEBUG] [Thread-74565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:35:33.859 [DEBUG] [Thread-74565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:35:33.859 [DEBUG] [Thread-74565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:35:33.859 [DEBUG] [Thread-74565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:35:33.876 [INFO] [Thread-74565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:35:33.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:35:34.524 [DEBUG] [Thread-74565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:35:34.524 [DEBUG] [Thread-74565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:35:34.524 [DEBUG] [Thread-74565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:35:34.565 [DEBUG] [Thread-74565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:35:34.565 [DEBUG] [Thread-74565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:35:34.567 [DEBUG] [Thread-74565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:35:34.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:35:34.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:35:34.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:35:34.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:35:34.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:35:34.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:35:34.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.690728 -999.00  +16.10  35.88     39   +2.20 1 1 2 1 1   887    0 10.50 -131.38 ----- 37.0 35.9 310.6 45.2 17.9 -26.7 18.2 -26.5 18.7 -23.7 18.8 -25.8
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.690728
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:35:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:34:28', tmtdew=15.59, humidity=34.88, cloud=0.0, wind=40.09, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:34:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:35:34.585 [DEBUG] [Thread-74565] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:35:34.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:35:34.671 [DEBUG] [Thread-74568] [transport.py] [_log()] starting thread (client mode): 0xf574f430
2025-12-12T18:35:34.671 [DEBUG] [Thread-74568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:35:34.684 [DEBUG] [Thread-74568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:35:34.684 [INFO] [Thread-74568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] client lang: <none>
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] server lang: <none>
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] kex follows: False
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] Compression: none
2025-12-12T18:35:34.692 [DEBUG] [Thread-74568] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:35:34.748 [DEBUG] [Thread-74568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:35:34.748 [DEBUG] [Thread-74568] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:35:34.748 [DEBUG] [Thread-74568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:35:34.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:35:34.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:35:34.806 [DEBUG] [Thread-74568] [transport.py] [_log()] userauth is OK
2025-12-12T18:35:34.806 [DEBUG] [Thread-74568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:35:34.806 [DEBUG] [Thread-74568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:35:34.806 [DEBUG] [Thread-74568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:35:34.807 [DEBUG] [Thread-74568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:35:34.825 [INFO] [Thread-74568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:35:34.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:35:34.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:35:35.614 [DEBUG] [Thread-74568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:35:35.614 [DEBUG] [Thread-74568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:35:35.662 [DEBUG] [Thread-74568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:35:35.662 [DEBUG] [Thread-74568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:35:35.670 [DEBUG] [Thread-74568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:35:35.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:35:35.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:35:35.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:35:35.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:35:35.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:35:35.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:35:35.705 [DEBUG] [Thread-74568] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:35:44.420 [DEBUG] [Thread-74570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:35:59.454 [DEBUG] [Thread-74571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:00.189 [DEBUG] [Thread-74572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:36:05.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:36:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:36:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 35, 32), 15.87, 34.23, 0.0, 35.66, 16.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:36:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:35:32
2025-12-12T18:36:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:36:06.760 [DEBUG] [Thread-74573] [transport.py] [_log()] starting thread (client mode): 0xf5797850
2025-12-12T18:36:06.760 [DEBUG] [Thread-74573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:36:06.780 [DEBUG] [Thread-74573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:36:06.780 [INFO] [Thread-74573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:36:06.781 [DEBUG] [Thread-74573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] client lang: <none>
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] server lang: <none>
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] kex follows: False
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] Compression: none
2025-12-12T18:36:06.782 [DEBUG] [Thread-74573] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:36:06.791 [DEBUG] [Thread-74573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:36:06.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:36:06.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] userauth is OK
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:36:06.792 [DEBUG] [Thread-74573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:36:06.802 [INFO] [Thread-74573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:36:06.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:36:07.469 [DEBUG] [Thread-74573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:36:07.469 [DEBUG] [Thread-74573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:36:07.469 [DEBUG] [Thread-74573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:36:07.510 [DEBUG] [Thread-74573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:36:07.510 [DEBUG] [Thread-74573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:36:07.513 [DEBUG] [Thread-74573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:36:07.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:36:07.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:36:07.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:36:07.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:36:07.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:36:07.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:36:07.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:36:07.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:36:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:36:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.691075 -999.00  +15.80  41.21     39   +2.20 1 1 2 1 1   887    0 10.46 -119.51 ----- 33.9 41.2 314.8 52.2 17.8 -27.2 18.2 -27.3 18.6 -25.4 18.7 -25.5
2025-12-12T18:36:07.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:36:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:36:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.691075
2025-12-12T18:36:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:36:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:36:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:36:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:36:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:36:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:35:32', tmtdew=15.87, humidity=34.23, cloud=0.0, wind=35.66, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:35:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:36:07.534 [DEBUG] [Thread-74573] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:36:07.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:36:07.631 [DEBUG] [Thread-74576] [transport.py] [_log()] starting thread (client mode): 0xf5795450
2025-12-12T18:36:07.631 [DEBUG] [Thread-74576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:36:07.645 [DEBUG] [Thread-74576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:36:07.646 [INFO] [Thread-74576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:36:07.653 [DEBUG] [Thread-74576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:36:07.653 [DEBUG] [Thread-74576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:36:07.653 [DEBUG] [Thread-74576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] client lang: <none>
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] server lang: <none>
2025-12-12T18:36:07.654 [DEBUG] [Thread-74576] [transport.py] [_log()] kex follows: False
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] Compression: none
2025-12-12T18:36:07.655 [DEBUG] [Thread-74576] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:36:07.710 [DEBUG] [Thread-74576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:36:07.711 [DEBUG] [Thread-74576] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:36:07.711 [DEBUG] [Thread-74576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:36:07.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:36:07.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:36:07.766 [DEBUG] [Thread-74576] [transport.py] [_log()] userauth is OK
2025-12-12T18:36:07.766 [DEBUG] [Thread-74576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:36:07.767 [DEBUG] [Thread-74576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:36:07.767 [DEBUG] [Thread-74576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:36:07.767 [DEBUG] [Thread-74576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:36:07.785 [INFO] [Thread-74576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:36:07.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:36:07.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:36:08.618 [DEBUG] [Thread-74576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:36:08.619 [DEBUG] [Thread-74576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:36:08.667 [DEBUG] [Thread-74576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:36:08.667 [DEBUG] [Thread-74576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:36:08.675 [DEBUG] [Thread-74576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:36:08.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:36:08.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:36:08.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:36:08.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:36:08.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:36:08.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:36:08.710 [DEBUG] [Thread-74576] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:36:14.490 [DEBUG] [Thread-74578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:27.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:27.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:29.543 [DEBUG] [Thread-74579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:38.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:36:38.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:36:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:36:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 36, 4), 15.86, 34.26, 0.0, 34.83, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:36:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:36:04
2025-12-12T18:36:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:36:39.705 [DEBUG] [Thread-74580] [transport.py] [_log()] starting thread (client mode): 0xf5770be0
2025-12-12T18:36:39.705 [DEBUG] [Thread-74580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:36:39.725 [DEBUG] [Thread-74580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:36:39.725 [INFO] [Thread-74580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:36:39.728 [DEBUG] [Thread-74580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:36:39.728 [DEBUG] [Thread-74580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:36:39.728 [DEBUG] [Thread-74580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:36:39.728 [DEBUG] [Thread-74580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:39.728 [DEBUG] [Thread-74580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] client lang: <none>
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] server lang: <none>
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] kex follows: False
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] Compression: none
2025-12-12T18:36:39.729 [DEBUG] [Thread-74580] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:36:39.747 [DEBUG] [Thread-74580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:36:39.748 [DEBUG] [Thread-74580] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:36:39.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:36:39.748 [DEBUG] [Thread-74580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:36:39.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:36:39.750 [DEBUG] [Thread-74580] [transport.py] [_log()] userauth is OK
2025-12-12T18:36:39.751 [DEBUG] [Thread-74580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:36:39.751 [DEBUG] [Thread-74580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:36:39.751 [DEBUG] [Thread-74580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:36:39.751 [DEBUG] [Thread-74580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:36:39.786 [INFO] [Thread-74580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:36:39.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:36:40.436 [DEBUG] [Thread-74580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:36:40.436 [DEBUG] [Thread-74580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:36:40.437 [DEBUG] [Thread-74580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:36:40.477 [DEBUG] [Thread-74580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:36:40.477 [DEBUG] [Thread-74580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:36:40.480 [DEBUG] [Thread-74580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:36:40.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:36:40.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:36:40.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:36:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:36:40.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:36:40.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:36:40.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:36:40.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:36:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:36:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.691770 -999.00  +15.60  51.43     40   +2.20 1 1 2 1 1   887    0 11.06 -107.78 ----- 49.6 51.4 313.2 56.7 17.8 -27.5 18.1 -27.0 18.5 -25.2 18.6 -26.0
2025-12-12T18:36:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:36:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:36:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.691770
2025-12-12T18:36:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:36:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:36:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:36:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:36:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:36:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:36:04', tmtdew=15.86, humidity=34.26, cloud=0.0, wind=34.83, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:36:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:36:40.501 [DEBUG] [Thread-74580] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:36:40.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:36:40.599 [DEBUG] [Thread-74583] [transport.py] [_log()] starting thread (client mode): 0xfabc6110
2025-12-12T18:36:40.599 [DEBUG] [Thread-74583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:36:40.615 [DEBUG] [Thread-74583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:36:40.616 [INFO] [Thread-74583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:40.623 [DEBUG] [Thread-74583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] client lang: <none>
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] server lang: <none>
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] kex follows: False
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] Compression: none
2025-12-12T18:36:40.624 [DEBUG] [Thread-74583] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:36:40.682 [DEBUG] [Thread-74583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:36:40.682 [DEBUG] [Thread-74583] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:36:40.683 [DEBUG] [Thread-74583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:36:40.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:36:40.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:36:40.738 [DEBUG] [Thread-74583] [transport.py] [_log()] userauth is OK
2025-12-12T18:36:40.738 [DEBUG] [Thread-74583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:36:40.738 [DEBUG] [Thread-74583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:36:40.739 [DEBUG] [Thread-74583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:36:40.739 [DEBUG] [Thread-74583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:36:40.757 [INFO] [Thread-74583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:36:40.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:36:40.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:36:41.568 [DEBUG] [Thread-74583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:36:41.568 [DEBUG] [Thread-74583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:36:41.616 [DEBUG] [Thread-74583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:36:41.616 [DEBUG] [Thread-74583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:36:41.625 [DEBUG] [Thread-74583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:36:41.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:36:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:36:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:36:41.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:36:41.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:36:41.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:36:41.661 [DEBUG] [Thread-74583] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:36:44.578 [DEBUG] [Thread-74585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:36:59.624 [DEBUG] [Thread-74586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:00.242 [DEBUG] [Thread-74587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:11.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:37:11.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:37: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
2025-12-12T18:37:12.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 37, 8), 15.24, 35.5, 0.0, 37.6, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:37:12.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:37:08
2025-12-12T18:37:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:37:12.639 [DEBUG] [Thread-74588] [transport.py] [_log()] starting thread (client mode): 0xf813ed10
2025-12-12T18:37:12.639 [DEBUG] [Thread-74588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:37:12.659 [DEBUG] [Thread-74588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:37:12.659 [INFO] [Thread-74588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] client lang: <none>
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] server lang: <none>
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] kex follows: False
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] Compression: none
2025-12-12T18:37:12.661 [DEBUG] [Thread-74588] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:37:12.674 [DEBUG] [Thread-74588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:37:12.675 [DEBUG] [Thread-74588] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:37:12.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:37:12.675 [DEBUG] [Thread-74588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:37:12.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:37:12.676 [DEBUG] [Thread-74588] [transport.py] [_log()] userauth is OK
2025-12-12T18:37:12.676 [DEBUG] [Thread-74588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:37:12.676 [DEBUG] [Thread-74588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:37:12.677 [DEBUG] [Thread-74588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:37:12.677 [DEBUG] [Thread-74588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:37:12.693 [INFO] [Thread-74588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:37:12.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:37:13.477 [DEBUG] [Thread-74588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:37:13.477 [DEBUG] [Thread-74588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:37:13.478 [DEBUG] [Thread-74588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:37:13.518 [DEBUG] [Thread-74588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:37:13.518 [DEBUG] [Thread-74588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:37:13.520 [DEBUG] [Thread-74588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:37:13.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:37:13.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:37:13.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:37:13.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:37:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:37:13.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:37:13.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:37:13.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:37:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.692117 -999.00  +15.80  36.55     40   +2.50 1 1 2 1 1   887    0 10.74 -110.02 ----- 41.6 36.5 322.0 46.4 17.8 -27.1 18.0 -26.6 18.5 -24.4 18.6 -25.7
2025-12-12T18:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.692117
2025-12-12T18:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:37:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:37:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:37:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:37:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:37:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:37:08', tmtdew=15.24, humidity=35.5, cloud=0.0, wind=37.6, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:36:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:37:13.544 [DEBUG] [Thread-74588] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:37:13.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:37:13.639 [DEBUG] [Thread-74591] [transport.py] [_log()] starting thread (client mode): 0xf813c9a0
2025-12-12T18:37:13.639 [DEBUG] [Thread-74591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:37:13.654 [DEBUG] [Thread-74591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:37:13.654 [INFO] [Thread-74591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:37:13.661 [DEBUG] [Thread-74591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:37:13.661 [DEBUG] [Thread-74591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:37:13.661 [DEBUG] [Thread-74591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] client lang: <none>
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] server lang: <none>
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] kex follows: False
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] Compression: none
2025-12-12T18:37:13.662 [DEBUG] [Thread-74591] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:37:13.717 [DEBUG] [Thread-74591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:37:13.718 [DEBUG] [Thread-74591] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:37:13.718 [DEBUG] [Thread-74591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:37:13.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:37:13.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:37:13.774 [DEBUG] [Thread-74591] [transport.py] [_log()] userauth is OK
2025-12-12T18:37:13.774 [DEBUG] [Thread-74591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:37:13.774 [DEBUG] [Thread-74591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:37:13.775 [DEBUG] [Thread-74591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:37:13.775 [DEBUG] [Thread-74591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:37:13.795 [INFO] [Thread-74591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:37:13.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:37:13.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:37:14.646 [DEBUG] [Thread-74591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:37:14.646 [DEBUG] [Thread-74591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:37:14.656 [DEBUG] [Thread-74593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:14.694 [DEBUG] [Thread-74591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:37:14.694 [DEBUG] [Thread-74591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:37:14.703 [DEBUG] [Thread-74591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:37:14.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:37:14.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:37:14.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:37:14.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:37:14.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:37:14.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:37:14.737 [DEBUG] [Thread-74591] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:37:27.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:27.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:29.698 [DEBUG] [Thread-74594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:44.723 [DEBUG] [Thread-74595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:37:44.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:37:44.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:37:44.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:37:45.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 37, 40), 15.15, 35.5, 0.0, 40.18, 15.89, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:37:45.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:37:40
2025-12-12T18:37:45.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:37:45.748 [DEBUG] [Thread-74596] [transport.py] [_log()] starting thread (client mode): 0xfabc6c50
2025-12-12T18:37:45.748 [DEBUG] [Thread-74596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:37:45.768 [DEBUG] [Thread-74596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:37:45.768 [INFO] [Thread-74596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] client lang: <none>
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] server lang: <none>
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] kex follows: False
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] Compression: none
2025-12-12T18:37:45.772 [DEBUG] [Thread-74596] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:37:45.790 [DEBUG] [Thread-74596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:37:45.790 [DEBUG] [Thread-74596] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:37:45.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:37:45.791 [DEBUG] [Thread-74596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:37:45.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:37:45.793 [DEBUG] [Thread-74596] [transport.py] [_log()] userauth is OK
2025-12-12T18:37:45.793 [DEBUG] [Thread-74596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:37:45.793 [DEBUG] [Thread-74596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:37:45.793 [DEBUG] [Thread-74596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:37:45.793 [DEBUG] [Thread-74596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:37:45.814 [INFO] [Thread-74596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:37:45.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:37:46.413 [DEBUG] [Thread-74596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:37:46.413 [DEBUG] [Thread-74596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:37:46.414 [DEBUG] [Thread-74596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:37:46.454 [DEBUG] [Thread-74596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:37:46.455 [DEBUG] [Thread-74596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:37:46.457 [DEBUG] [Thread-74596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:37:46.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:37:46.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:37:46.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:37:46.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:37:46.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:37:46.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:37:46.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:37:46.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:37:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:37:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.692464 -999.00  +15.70  35.68     40   +2.40 1 1 2 1 1   887    0 10.81 -117.14 ----- 35.3 35.7 313.8 44.1 17.7 -27.1 18.0 -26.7 18.4 -24.4 18.6 -25.6
2025-12-12T18:37:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:37:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:37:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.692464
2025-12-12T18:37:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:37:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:37:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:37:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:37:46.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:37:46.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:37:40', tmtdew=15.15, humidity=35.5, cloud=0.0, wind=40.18, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:37:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:37:46.482 [DEBUG] [Thread-74596] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:37:46.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:37:46.582 [DEBUG] [Thread-74599] [transport.py] [_log()] starting thread (client mode): 0xf5797700
2025-12-12T18:37:46.582 [DEBUG] [Thread-74599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:37:46.600 [DEBUG] [Thread-74599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:37:46.601 [INFO] [Thread-74599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:37:46.608 [DEBUG] [Thread-74599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:37:46.608 [DEBUG] [Thread-74599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:37:46.608 [DEBUG] [Thread-74599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] client lang: <none>
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] server lang: <none>
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] kex follows: False
2025-12-12T18:37:46.609 [DEBUG] [Thread-74599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:37:46.610 [DEBUG] [Thread-74599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:37:46.610 [DEBUG] [Thread-74599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:37:46.610 [DEBUG] [Thread-74599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:37:46.610 [DEBUG] [Thread-74599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:37:46.610 [DEBUG] [Thread-74599] [transport.py] [_log()] Compression: none
2025-12-12T18:37:46.610 [DEBUG] [Thread-74599] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:37:46.666 [DEBUG] [Thread-74599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:37:46.667 [DEBUG] [Thread-74599] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:37:46.667 [DEBUG] [Thread-74599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:37:46.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:37:46.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:37:46.722 [DEBUG] [Thread-74599] [transport.py] [_log()] userauth is OK
2025-12-12T18:37:46.722 [DEBUG] [Thread-74599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:37:46.723 [DEBUG] [Thread-74599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:37:46.723 [DEBUG] [Thread-74599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:37:46.723 [DEBUG] [Thread-74599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:37:46.745 [INFO] [Thread-74599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:37:46.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:37:46.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:37:47.608 [DEBUG] [Thread-74599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:37:47.608 [DEBUG] [Thread-74599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:37:47.656 [DEBUG] [Thread-74599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:37:47.656 [DEBUG] [Thread-74599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:37:47.664 [DEBUG] [Thread-74599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:37:47.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:37:47.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:37: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') -> 00000000
2025-12-12T18:37:47.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:37:47.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:37:47.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:37:47.699 [DEBUG] [Thread-74599] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:37:59.748 [DEBUG] [Thread-74601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:00.296 [DEBUG] [Thread-74602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:14.787 [DEBUG] [Thread-74603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:17.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:38:17.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:38:17.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:38:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 38, 12), 15.18, 35.44, 0.0, 39.91, 15.97, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:38:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:38:12
2025-12-12T18:38:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:38:18.715 [DEBUG] [Thread-74604] [transport.py] [_log()] starting thread (client mode): 0xf813cbe0
2025-12-12T18:38:18.715 [DEBUG] [Thread-74604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:38:18.735 [DEBUG] [Thread-74604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:38:18.735 [INFO] [Thread-74604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:38:18.738 [DEBUG] [Thread-74604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:38:18.738 [DEBUG] [Thread-74604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:38:18.738 [DEBUG] [Thread-74604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:38:18.738 [DEBUG] [Thread-74604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:18.738 [DEBUG] [Thread-74604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:18.738 [DEBUG] [Thread-74604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] client lang: <none>
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] server lang: <none>
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] kex follows: False
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] Compression: none
2025-12-12T18:38:18.739 [DEBUG] [Thread-74604] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:38:18.754 [DEBUG] [Thread-74604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:38:18.754 [DEBUG] [Thread-74604] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:38:18.754 [DEBUG] [Thread-74604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:38:18.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:38:18.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:38:18.796 [DEBUG] [Thread-74604] [transport.py] [_log()] userauth is OK
2025-12-12T18:38:18.796 [DEBUG] [Thread-74604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:38:18.797 [DEBUG] [Thread-74604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:38:18.797 [DEBUG] [Thread-74604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:38:18.797 [DEBUG] [Thread-74604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:38:18.812 [INFO] [Thread-74604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:38:18.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:38:19.545 [DEBUG] [Thread-74604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:38:19.545 [DEBUG] [Thread-74604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:38:19.545 [DEBUG] [Thread-74604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:38:19.585 [DEBUG] [Thread-74604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:38:19.586 [DEBUG] [Thread-74604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:38:19.588 [DEBUG] [Thread-74604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:38:19.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:38:19.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:38:19.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:38:19.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:38:19.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:38:19.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:38:19.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.692811 -999.00  +15.70  38.35     40   +2.40 1 1 2 1 1   887    0 11.01 -108.32 ----- 42.7 38.4 308.6 48.4 17.7 -27.0 18.1 -26.7 18.4 -24.2 18.5 -25.8
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.692811
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:38:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:38:12', tmtdew=15.18, humidity=35.44, cloud=0.0, wind=39.91, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:37:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:38:19.606 [DEBUG] [Thread-74604] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:38:19.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:38:19.692 [DEBUG] [Thread-74607] [transport.py] [_log()] starting thread (client mode): 0xfabc72e0
2025-12-12T18:38:19.692 [DEBUG] [Thread-74607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:38:19.708 [DEBUG] [Thread-74607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:38:19.708 [INFO] [Thread-74607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] client lang: <none>
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] server lang: <none>
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] kex follows: False
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:38:19.715 [DEBUG] [Thread-74607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:38:19.716 [DEBUG] [Thread-74607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:38:19.716 [DEBUG] [Thread-74607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:38:19.716 [DEBUG] [Thread-74607] [transport.py] [_log()] Compression: none
2025-12-12T18:38:19.716 [DEBUG] [Thread-74607] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:38:19.772 [DEBUG] [Thread-74607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:38:19.773 [DEBUG] [Thread-74607] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:38:19.773 [DEBUG] [Thread-74607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:38:19.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:38:19.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:38:19.830 [DEBUG] [Thread-74607] [transport.py] [_log()] userauth is OK
2025-12-12T18:38:19.830 [DEBUG] [Thread-74607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:38:19.830 [DEBUG] [Thread-74607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:38:19.830 [DEBUG] [Thread-74607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:38:19.830 [DEBUG] [Thread-74607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:38:19.844 [INFO] [Thread-74607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:38:19.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:38:19.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:38:20.686 [DEBUG] [Thread-74607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:38:20.686 [DEBUG] [Thread-74607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:38:20.733 [DEBUG] [Thread-74607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:38:20.734 [DEBUG] [Thread-74607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:38:20.742 [DEBUG] [Thread-74607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:38:20.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:38:20.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:38:20.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:38:20.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:38:20.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:38:20.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:38:20.773 [DEBUG] [Thread-74607] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:38:28.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:28.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:29.812 [DEBUG] [Thread-74609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:44.863 [DEBUG] [Thread-74610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:38:50.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:38:50.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:38:50.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:38:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 38, 44), 15.09, 36.14, 0.0, 41.15, 15.89, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:38:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:38:44
2025-12-12T18:38:51.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:38:51.764 [DEBUG] [Thread-74611] [transport.py] [_log()] starting thread (client mode): 0xf813ed10
2025-12-12T18:38:51.764 [DEBUG] [Thread-74611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:38:51.782 [DEBUG] [Thread-74611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:38:51.782 [INFO] [Thread-74611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:51.785 [DEBUG] [Thread-74611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] client lang: <none>
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] server lang: <none>
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] kex follows: False
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] Compression: none
2025-12-12T18:38:51.786 [DEBUG] [Thread-74611] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:38:51.803 [DEBUG] [Thread-74611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:38:51.804 [DEBUG] [Thread-74611] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:38:51.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:38:51.805 [DEBUG] [Thread-74611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:38:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:38:51.807 [DEBUG] [Thread-74611] [transport.py] [_log()] userauth is OK
2025-12-12T18:38:51.807 [DEBUG] [Thread-74611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:38:51.808 [DEBUG] [Thread-74611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:38:51.808 [DEBUG] [Thread-74611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:38:51.808 [DEBUG] [Thread-74611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:38:51.845 [INFO] [Thread-74611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:38:51.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:38:52.490 [DEBUG] [Thread-74611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:38:52.490 [DEBUG] [Thread-74611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:38:52.491 [DEBUG] [Thread-74611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:38:52.532 [DEBUG] [Thread-74611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:38:52.532 [DEBUG] [Thread-74611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:38:52.535 [DEBUG] [Thread-74611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:38:52.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:38:52.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:38:52.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:38:52.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:38:52.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:38:52.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:38:52.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:38:52.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:38:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:38:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.693158 -999.00  +15.80  39.52     41   +2.50 1 1 2 1 1   887    0 11.22 -97.71 ----- 41.1 39.5 316.6 52.4 17.6 -27.2 18.0 -27.1 18.4 -25.3 18.4 -25.5
2025-12-12T18:38:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:38:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:38:52.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.693158
2025-12-12T18:38:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:38:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:38:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:38:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:38:52.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:38:52.562 [DEBUG] [Thread-74611] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:38:52.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:38:44', tmtdew=15.09, humidity=36.14, cloud=0.0, wind=41.15, temperature=15.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:38:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:38:52.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:38:52.659 [DEBUG] [Thread-74614] [transport.py] [_log()] starting thread (client mode): 0xf813ccd0
2025-12-12T18:38:52.659 [DEBUG] [Thread-74614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:38:52.675 [DEBUG] [Thread-74614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:38:52.676 [INFO] [Thread-74614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:38:52.683 [DEBUG] [Thread-74614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:38:52.683 [DEBUG] [Thread-74614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:38:52.683 [DEBUG] [Thread-74614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:38:52.683 [DEBUG] [Thread-74614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:52.683 [DEBUG] [Thread-74614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] client lang: <none>
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] server lang: <none>
2025-12-12T18:38:52.684 [DEBUG] [Thread-74614] [transport.py] [_log()] kex follows: False
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] Compression: none
2025-12-12T18:38:52.685 [DEBUG] [Thread-74614] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:38:52.742 [DEBUG] [Thread-74614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:38:52.743 [DEBUG] [Thread-74614] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:38:52.743 [DEBUG] [Thread-74614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:38:52.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:38:52.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:38:52.798 [DEBUG] [Thread-74614] [transport.py] [_log()] userauth is OK
2025-12-12T18:38:52.798 [DEBUG] [Thread-74614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:38:52.798 [DEBUG] [Thread-74614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:38:52.798 [DEBUG] [Thread-74614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:38:52.798 [DEBUG] [Thread-74614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:38:52.818 [INFO] [Thread-74614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:38:52.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:38:52.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:38:53.696 [DEBUG] [Thread-74614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:38:53.697 [DEBUG] [Thread-74614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:38:53.745 [DEBUG] [Thread-74614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:38:53.745 [DEBUG] [Thread-74614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:38:53.754 [DEBUG] [Thread-74614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:38:53.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:38:53.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:38:53.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:38:53.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:38:53.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:38:53.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:38:53.790 [DEBUG] [Thread-74614] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:38:59.892 [DEBUG] [Thread-74616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:00.343 [DEBUG] [Thread-74617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:14.927 [DEBUG] [Thread-74618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:39:23.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:39:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:39:24.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 39, 16), 15.0, 36.34, 0.0, 43.79, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:39:24.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:39:16
2025-12-12T18:39:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:39:24.754 [DEBUG] [Thread-74619] [transport.py] [_log()] starting thread (client mode): 0xf574cbe0
2025-12-12T18:39:24.754 [DEBUG] [Thread-74619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:39:24.767 [DEBUG] [Thread-74619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:39:24.767 [INFO] [Thread-74619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] client lang: <none>
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] server lang: <none>
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] kex follows: False
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] Compression: none
2025-12-12T18:39:24.770 [DEBUG] [Thread-74619] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:39:24.786 [DEBUG] [Thread-74619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:39:24.786 [DEBUG] [Thread-74619] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:39:24.787 [DEBUG] [Thread-74619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:39:24.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:39:24.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:39:24.788 [DEBUG] [Thread-74619] [transport.py] [_log()] userauth is OK
2025-12-12T18:39:24.788 [DEBUG] [Thread-74619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:39:24.789 [DEBUG] [Thread-74619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:39:24.789 [DEBUG] [Thread-74619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:39:24.789 [DEBUG] [Thread-74619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:39:24.806 [INFO] [Thread-74619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:39:24.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:39:25.539 [DEBUG] [Thread-74619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:39:25.539 [DEBUG] [Thread-74619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:39:25.539 [DEBUG] [Thread-74619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:39:25.580 [DEBUG] [Thread-74619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:39:25.580 [DEBUG] [Thread-74619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:39:25.583 [DEBUG] [Thread-74619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:39:25.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:39:25.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:39:25.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:39:25.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:39:25.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:39:25.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:39:25.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:39:25.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:39:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:39:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.693506 -999.00  +15.70  45.35     41   +2.70 1 1 2 1 1   887    0 11.12 -90.56 ----- 38.0 45.4 309.8 49.3 17.6 -27.0 18.0 -27.0 18.4 -24.5 18.5 -25.6
2025-12-12T18:39:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:39:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:39:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.693506
2025-12-12T18:39:25.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:39:25.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:39:25.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:39:25.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:39:25.606 [DEBUG] [Thread-74619] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:39:25.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:39:25.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:39:16', tmtdew=15.0, humidity=36.34, cloud=0.0, wind=43.79, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:38:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:39:25.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:39:25.703 [DEBUG] [Thread-74622] [transport.py] [_log()] starting thread (client mode): 0xf578add0
2025-12-12T18:39:25.703 [DEBUG] [Thread-74622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:39:25.717 [DEBUG] [Thread-74622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:39:25.717 [INFO] [Thread-74622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:39:25.725 [DEBUG] [Thread-74622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:39:25.725 [DEBUG] [Thread-74622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:39:25.725 [DEBUG] [Thread-74622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] client lang: <none>
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] server lang: <none>
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] kex follows: False
2025-12-12T18:39:25.726 [DEBUG] [Thread-74622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:39:25.727 [DEBUG] [Thread-74622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:39:25.727 [DEBUG] [Thread-74622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:39:25.727 [DEBUG] [Thread-74622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:39:25.727 [DEBUG] [Thread-74622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:39:25.727 [DEBUG] [Thread-74622] [transport.py] [_log()] Compression: none
2025-12-12T18:39:25.727 [DEBUG] [Thread-74622] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:39:25.782 [DEBUG] [Thread-74622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:39:25.782 [DEBUG] [Thread-74622] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:39:25.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:39:25.783 [DEBUG] [Thread-74622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:39:25.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:39:25.838 [DEBUG] [Thread-74622] [transport.py] [_log()] userauth is OK
2025-12-12T18:39:25.838 [DEBUG] [Thread-74622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:39:25.838 [DEBUG] [Thread-74622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:39:25.838 [DEBUG] [Thread-74622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:39:25.839 [DEBUG] [Thread-74622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:39:25.857 [INFO] [Thread-74622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:39:25.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:39:25.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:39:26.699 [DEBUG] [Thread-74622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:39:26.699 [DEBUG] [Thread-74622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:39:26.748 [DEBUG] [Thread-74622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:39:26.748 [DEBUG] [Thread-74622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:39:26.757 [DEBUG] [Thread-74622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:39:26.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:39:26.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:39:26.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:39:26.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:39:26.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:39:26.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:39:26.792 [DEBUG] [Thread-74622] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:39:28.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:28.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:29.957 [DEBUG] [Thread-74624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:45.013 [DEBUG] [Thread-74625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:39:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:39:56.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:39:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:39:57.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 39, 48), 14.62, 37.15, 0.0, 46.56, 15.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:39:57.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:39:48
2025-12-12T18:39:57.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:39:57.770 [DEBUG] [Thread-74626] [transport.py] [_log()] starting thread (client mode): 0xf578a4d0
2025-12-12T18:39:57.770 [DEBUG] [Thread-74626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:39:57.792 [DEBUG] [Thread-74626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:39:57.792 [INFO] [Thread-74626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] client lang: <none>
2025-12-12T18:39:57.795 [DEBUG] [Thread-74626] [transport.py] [_log()] server lang: <none>
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] kex follows: False
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] Compression: none
2025-12-12T18:39:57.796 [DEBUG] [Thread-74626] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:39:57.813 [DEBUG] [Thread-74626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:39:57.814 [DEBUG] [Thread-74626] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:39:57.814 [DEBUG] [Thread-74626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:39:57.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:39:57.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:39:57.816 [DEBUG] [Thread-74626] [transport.py] [_log()] userauth is OK
2025-12-12T18:39:57.817 [DEBUG] [Thread-74626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:39:57.817 [DEBUG] [Thread-74626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:39:57.817 [DEBUG] [Thread-74626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:39:57.817 [DEBUG] [Thread-74626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:39:57.840 [INFO] [Thread-74626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:39:57.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:39:58.492 [DEBUG] [Thread-74626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:39:58.492 [DEBUG] [Thread-74626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:39:58.493 [DEBUG] [Thread-74626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:39:58.534 [DEBUG] [Thread-74626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:39:58.534 [DEBUG] [Thread-74626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:39:58.537 [DEBUG] [Thread-74626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:39:58.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:39:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:39:58.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:39:58.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:39:58.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:39:58.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:39:58.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:39:58.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:39:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:39:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.693853 -999.00  +15.60  46.86     41   +2.60 1 1 2 1 1   887    0 11.27 -92.45 ----- 38.6 46.9 305.2 57.5 17.6 -27.7 18.0 -26.8 18.3 -25.9 18.5 -26.0
2025-12-12T18:39:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:39:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:39:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.693853
2025-12-12T18:39:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:39:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:39:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:39:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:39:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:39:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:39:48', tmtdew=14.62, humidity=37.15, cloud=0.0, wind=46.56, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:39:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:39:58.561 [DEBUG] [Thread-74626] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:39:58.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:39:58.657 [DEBUG] [Thread-74629] [transport.py] [_log()] starting thread (client mode): 0xf574f9a0
2025-12-12T18:39:58.657 [DEBUG] [Thread-74629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:39:58.671 [DEBUG] [Thread-74629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:39:58.671 [INFO] [Thread-74629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:39:58.679 [DEBUG] [Thread-74629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] client lang: <none>
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] server lang: <none>
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] kex follows: False
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] Compression: none
2025-12-12T18:39:58.680 [DEBUG] [Thread-74629] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:39:58.738 [DEBUG] [Thread-74629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:39:58.738 [DEBUG] [Thread-74629] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:39:58.738 [DEBUG] [Thread-74629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:39:58.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:39:58.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:39:58.794 [DEBUG] [Thread-74629] [transport.py] [_log()] userauth is OK
2025-12-12T18:39:58.795 [DEBUG] [Thread-74629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:39:58.795 [DEBUG] [Thread-74629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:39:58.795 [DEBUG] [Thread-74629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:39:58.795 [DEBUG] [Thread-74629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:39:58.817 [INFO] [Thread-74629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:39:58.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:39:58.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:39:59.643 [DEBUG] [Thread-74629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:39:59.644 [DEBUG] [Thread-74629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:39:59.692 [DEBUG] [Thread-74629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:39:59.692 [DEBUG] [Thread-74629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:39:59.700 [DEBUG] [Thread-74629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:39:59.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:39:59.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:39:59.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:39:59.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:39:59.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:39:59.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:39:59.736 [DEBUG] [Thread-74629] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:40:00.046 [DEBUG] [Thread-74631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:40:00.397 [DEBUG] [Thread-74632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:40:15.090 [DEBUG] [Thread-74633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:40:28.403 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:40:28.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:40:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:40:29.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:40:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:40:30.116 [DEBUG] [Thread-74634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:40:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 40, 20), 14.6, 37.2, 0.0, 47.29, 15.52, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:40:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:40:20
2025-12-12T18:40:30.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:40:30.691 [DEBUG] [Thread-74635] [transport.py] [_log()] starting thread (client mode): 0xf574e230
2025-12-12T18:40:30.691 [DEBUG] [Thread-74635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:40:30.710 [DEBUG] [Thread-74635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:40:30.710 [INFO] [Thread-74635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:40:30.713 [DEBUG] [Thread-74635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] client lang: <none>
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] server lang: <none>
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] kex follows: False
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] Compression: none
2025-12-12T18:40:30.714 [DEBUG] [Thread-74635] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:40:30.731 [DEBUG] [Thread-74635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:40:30.731 [DEBUG] [Thread-74635] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:40:30.732 [DEBUG] [Thread-74635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:40:30.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:40:30.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:40:30.734 [DEBUG] [Thread-74635] [transport.py] [_log()] userauth is OK
2025-12-12T18:40:30.734 [DEBUG] [Thread-74635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:40:30.734 [DEBUG] [Thread-74635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:40:30.734 [DEBUG] [Thread-74635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:40:30.734 [DEBUG] [Thread-74635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:40:30.758 [INFO] [Thread-74635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:40:30.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:40:31.536 [DEBUG] [Thread-74635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:40:31.536 [DEBUG] [Thread-74635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:40:31.537 [DEBUG] [Thread-74635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:40:31.578 [DEBUG] [Thread-74635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:40:31.578 [DEBUG] [Thread-74635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:40:31.581 [DEBUG] [Thread-74635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:40:31.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:40:31.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:40:31.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:40:31.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:40:31.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:40:31.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:40:31.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:40:31.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:40:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:40:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.694200 -999.00  +15.50  43.86     42   +2.70 1 1 2 1 1   887    0 11.06 -92.52 ----- 40.1 43.9 311.0 51.2 17.5 -28.0 17.9 -27.0 18.3 -27.7 18.4 -25.7
2025-12-12T18:40:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:40:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:40:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.694200
2025-12-12T18:40:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:40:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:40:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:40:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:40:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:40:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:40:20', tmtdew=14.6, humidity=37.2, cloud=0.0, wind=47.29, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:39:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:40:31.606 [DEBUG] [Thread-74635] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:40:31.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:40:31.846 [DEBUG] [Thread-74638] [transport.py] [_log()] starting thread (client mode): 0xf575c9d0
2025-12-12T18:40:31.846 [DEBUG] [Thread-74638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:40:31.860 [DEBUG] [Thread-74638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:40:31.860 [INFO] [Thread-74638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:40:31.868 [DEBUG] [Thread-74638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:40:31.868 [DEBUG] [Thread-74638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:40:31.868 [DEBUG] [Thread-74638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:40:31.868 [DEBUG] [Thread-74638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:40:31.868 [DEBUG] [Thread-74638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] client lang: <none>
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] server lang: <none>
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] kex follows: False
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] Compression: none
2025-12-12T18:40:31.869 [DEBUG] [Thread-74638] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:40:31.930 [DEBUG] [Thread-74638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:40:31.930 [DEBUG] [Thread-74638] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:40:31.931 [DEBUG] [Thread-74638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:40:31.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:40:31.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:40:31.986 [DEBUG] [Thread-74638] [transport.py] [_log()] userauth is OK
2025-12-12T18:40:31.986 [DEBUG] [Thread-74638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:40:31.986 [DEBUG] [Thread-74638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:40:31.986 [DEBUG] [Thread-74638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:40:31.986 [DEBUG] [Thread-74638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:40:32.004 [INFO] [Thread-74638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:40:32.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:40:32.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:40:32.830 [DEBUG] [Thread-74638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:40:32.830 [DEBUG] [Thread-74638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:40:32.878 [DEBUG] [Thread-74638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:40:32.879 [DEBUG] [Thread-74638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:40:32.888 [DEBUG] [Thread-74638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:40:32.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:40: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')
2025-12-12T18:40:32.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:40:32.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:40:32.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:40:32.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:40:32.921 [DEBUG] [Thread-74638] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:40:45.145 [DEBUG] [Thread-74640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:00.202 [DEBUG] [Thread-74641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:00.449 [DEBUG] [Thread-74642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:02.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:41:02.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:41:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:41:03.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 40, 52), 14.53, 37.1, 0.0, 41.5, 15.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:41:03.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:40:52
2025-12-12T18:41:03.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:41:03.906 [DEBUG] [Thread-74643] [transport.py] [_log()] starting thread (client mode): 0xf574f430
2025-12-12T18:41:03.906 [DEBUG] [Thread-74643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:41:03.926 [DEBUG] [Thread-74643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:41:03.926 [INFO] [Thread-74643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:41:03.927 [DEBUG] [Thread-74643] [transport.py] [_log()] client lang: <none>
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] server lang: <none>
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] kex follows: False
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] Compression: none
2025-12-12T18:41:03.928 [DEBUG] [Thread-74643] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:41:03.935 [DEBUG] [Thread-74643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:41:03.935 [DEBUG] [Thread-74643] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:41:03.936 [DEBUG] [Thread-74643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:41:03.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:41:03.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:41:03.937 [DEBUG] [Thread-74643] [transport.py] [_log()] userauth is OK
2025-12-12T18:41:03.937 [DEBUG] [Thread-74643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:41:03.937 [DEBUG] [Thread-74643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:41:03.937 [DEBUG] [Thread-74643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:41:03.937 [DEBUG] [Thread-74643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:41:03.971 [INFO] [Thread-74643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:41:03.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:41:04.598 [DEBUG] [Thread-74643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:41:04.599 [DEBUG] [Thread-74643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:41:04.599 [DEBUG] [Thread-74643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:41:04.640 [DEBUG] [Thread-74643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:41:04.640 [DEBUG] [Thread-74643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:41:04.643 [DEBUG] [Thread-74643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:41:04.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:41:04.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:41:04.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:41:04.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:41:04.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:41:04.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:41:04.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.694547 -999.00  +15.40  42.85     42   +2.70 1 1 2 1 1   887    0 11.25 -89.02 ----- 43.6 42.9 312.2 52.6 17.5 -28.0 17.8 -27.2 18.2 -26.1 18.3 -26.1
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.694547
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:41:04.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:40:52', tmtdew=14.53, humidity=37.1, cloud=0.0, wind=41.5, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:40:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:41:04.665 [DEBUG] [Thread-74643] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:41:04.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:41:04.751 [DEBUG] [Thread-74646] [transport.py] [_log()] starting thread (client mode): 0xf813d9c0
2025-12-12T18:41:04.751 [DEBUG] [Thread-74646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:41:04.774 [DEBUG] [Thread-74646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:41:04.774 [INFO] [Thread-74646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:41:04.784 [DEBUG] [Thread-74646] [transport.py] [_log()] client lang: <none>
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] server lang: <none>
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] kex follows: False
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] Compression: none
2025-12-12T18:41:04.785 [DEBUG] [Thread-74646] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:41:04.843 [DEBUG] [Thread-74646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:41:04.844 [DEBUG] [Thread-74646] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:41:04.844 [DEBUG] [Thread-74646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:41:04.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:41:04.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:41:04.909 [DEBUG] [Thread-74646] [transport.py] [_log()] userauth is OK
2025-12-12T18:41:04.909 [DEBUG] [Thread-74646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:41:04.909 [DEBUG] [Thread-74646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:41:04.909 [DEBUG] [Thread-74646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:41:04.910 [DEBUG] [Thread-74646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:41:04.929 [INFO] [Thread-74646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:41:04.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:41:04.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:41:05.811 [DEBUG] [Thread-74646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:41:05.811 [DEBUG] [Thread-74646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:41:05.859 [DEBUG] [Thread-74646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:41:05.860 [DEBUG] [Thread-74646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:41:05.868 [DEBUG] [Thread-74646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:41:05.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:41: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')
2025-12-12T18:41:05.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:41:05.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:41:05.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:41:05.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:41:05.900 [DEBUG] [Thread-74646] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:41:15.231 [DEBUG] [Thread-74648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:28.543 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:28.544 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:30.277 [DEBUG] [Thread-74649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:41:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:41:35.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:41:35.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:41:36.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 41, 24), 14.55, 37.05, 0.0, 38.09, 15.59, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:41:36.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:41:24
2025-12-12T18:41:36.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:41:36.888 [DEBUG] [Thread-74650] [transport.py] [_log()] starting thread (client mode): 0xf575dd80
2025-12-12T18:41:36.888 [DEBUG] [Thread-74650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:41:36.908 [DEBUG] [Thread-74650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:41:36.908 [INFO] [Thread-74650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] client lang: <none>
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] server lang: <none>
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] kex follows: False
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] Compression: none
2025-12-12T18:41:36.912 [DEBUG] [Thread-74650] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:41:36.929 [DEBUG] [Thread-74650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:41:36.929 [DEBUG] [Thread-74650] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:41:36.929 [DEBUG] [Thread-74650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:41:36.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:41:36.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:41:36.930 [DEBUG] [Thread-74650] [transport.py] [_log()] userauth is OK
2025-12-12T18:41:36.930 [DEBUG] [Thread-74650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:41:36.930 [DEBUG] [Thread-74650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:41:36.930 [DEBUG] [Thread-74650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:41:36.930 [DEBUG] [Thread-74650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:41:36.960 [INFO] [Thread-74650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:41:36.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:41:37.719 [DEBUG] [Thread-74650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:41:37.719 [DEBUG] [Thread-74650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:41:37.719 [DEBUG] [Thread-74650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:41:37.761 [DEBUG] [Thread-74650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:41:37.761 [DEBUG] [Thread-74650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:41:37.763 [DEBUG] [Thread-74650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:41:37.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:41:37.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:41:37.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:41:37.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:41:37.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:41:37.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:41:37.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.695242 -999.00  +15.10  49.24     42   +2.60 1 1 2 1 1   887    0 10.45 -105.67 ----- 42.3 49.2 317.0 53.8 17.4 -27.4 17.8 -26.6 17.9 -26.5 18.1 -25.9
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.695242
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:41:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:41:24', tmtdew=14.55, humidity=37.05, cloud=0.0, wind=38.09, temperature=15.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:41:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:41:37.784 [DEBUG] [Thread-74650] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:41:37.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:41:37.867 [DEBUG] [Thread-74653] [transport.py] [_log()] starting thread (client mode): 0xf578bcd0
2025-12-12T18:41:37.867 [DEBUG] [Thread-74653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:41:37.882 [DEBUG] [Thread-74653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:41:37.882 [INFO] [Thread-74653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] client lang: <none>
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] server lang: <none>
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] kex follows: False
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:41:37.890 [DEBUG] [Thread-74653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:41:37.891 [DEBUG] [Thread-74653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:41:37.891 [DEBUG] [Thread-74653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:41:37.891 [DEBUG] [Thread-74653] [transport.py] [_log()] Compression: none
2025-12-12T18:41:37.891 [DEBUG] [Thread-74653] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:41:37.949 [DEBUG] [Thread-74653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:41:37.950 [DEBUG] [Thread-74653] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:41:37.950 [DEBUG] [Thread-74653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:41:37.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:41:37.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:41:38.007 [DEBUG] [Thread-74653] [transport.py] [_log()] userauth is OK
2025-12-12T18:41:38.007 [DEBUG] [Thread-74653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:41:38.007 [DEBUG] [Thread-74653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:41:38.007 [DEBUG] [Thread-74653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:41:38.007 [DEBUG] [Thread-74653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:41:38.026 [INFO] [Thread-74653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:41:38.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:41:38.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:41:38.878 [DEBUG] [Thread-74653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:41:38.878 [DEBUG] [Thread-74653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:41:38.929 [DEBUG] [Thread-74653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:41:38.929 [DEBUG] [Thread-74653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:41:38.941 [DEBUG] [Thread-74653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:41:38.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:41:38.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:41: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') -> 00000000
2025-12-12T18:41:38.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:41:38.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:41:38.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:41:38.978 [DEBUG] [Thread-74653] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:41:45.306 [DEBUG] [Thread-74655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:00.350 [DEBUG] [Thread-74656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:00.508 [DEBUG] [Thread-74657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:09.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:42:09.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:42:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:42:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 41, 57), 14.58, 37.13, 0.0, 38.78, 15.64, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:42:09.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:41:57
2025-12-12T18:42:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:42:09.964 [DEBUG] [Thread-74658] [transport.py] [_log()] starting thread (client mode): 0xf81e6590
2025-12-12T18:42:09.964 [DEBUG] [Thread-74658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:42:09.984 [DEBUG] [Thread-74658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:42:09.984 [INFO] [Thread-74658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:42:09.987 [DEBUG] [Thread-74658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:42:09.987 [DEBUG] [Thread-74658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:42:09.987 [DEBUG] [Thread-74658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:42:09.987 [DEBUG] [Thread-74658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:09.987 [DEBUG] [Thread-74658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] client lang: <none>
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] server lang: <none>
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] kex follows: False
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] Compression: none
2025-12-12T18:42:09.988 [DEBUG] [Thread-74658] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:42:10.005 [DEBUG] [Thread-74658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:42:10.006 [DEBUG] [Thread-74658] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:42:10.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:42:10.007 [DEBUG] [Thread-74658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:42:10.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:42:10.009 [DEBUG] [Thread-74658] [transport.py] [_log()] userauth is OK
2025-12-12T18:42:10.009 [DEBUG] [Thread-74658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:42:10.009 [DEBUG] [Thread-74658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:42:10.009 [DEBUG] [Thread-74658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:42:10.009 [DEBUG] [Thread-74658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:42:10.033 [INFO] [Thread-74658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:42:10.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:42:10.686 [DEBUG] [Thread-74658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:42:10.686 [DEBUG] [Thread-74658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:42:10.686 [DEBUG] [Thread-74658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:42:10.727 [DEBUG] [Thread-74658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:42:10.728 [DEBUG] [Thread-74658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:42:10.730 [DEBUG] [Thread-74658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:42:10.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:42:10.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:42:10.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:42:10.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:42:10.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:42:10.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:42:10.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.695589 -999.00  +15.40  32.03     42   +2.80 1 1 2 1 1   887    0 10.45 -111.95 ----- 31.4 32.0 315.8 47.2 17.4 -26.6 17.6 -26.5 17.9 -24.1 18.1 -25.3
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.695589
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:42:10.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:41:57', tmtdew=14.58, humidity=37.13, cloud=0.0, wind=38.78, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:41:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:42:10.746 [DEBUG] [Thread-74658] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:42:10.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:42:10.833 [DEBUG] [Thread-74661] [transport.py] [_log()] starting thread (client mode): 0xfabc6b60
2025-12-12T18:42:10.833 [DEBUG] [Thread-74661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:42:10.847 [DEBUG] [Thread-74661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:42:10.847 [INFO] [Thread-74661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:42:10.854 [DEBUG] [Thread-74661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:42:10.854 [DEBUG] [Thread-74661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] client lang: <none>
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] server lang: <none>
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] kex follows: False
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] Compression: none
2025-12-12T18:42:10.855 [DEBUG] [Thread-74661] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:42:10.913 [DEBUG] [Thread-74661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:42:10.913 [DEBUG] [Thread-74661] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:42:10.913 [DEBUG] [Thread-74661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:42:10.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:42:10.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:42:10.970 [DEBUG] [Thread-74661] [transport.py] [_log()] userauth is OK
2025-12-12T18:42:10.970 [DEBUG] [Thread-74661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:42:10.970 [DEBUG] [Thread-74661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:42:10.970 [DEBUG] [Thread-74661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:42:10.970 [DEBUG] [Thread-74661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:42:10.984 [INFO] [Thread-74661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:42:10.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:42:10.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:42:11.825 [DEBUG] [Thread-74661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:42:11.825 [DEBUG] [Thread-74661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:42:11.874 [DEBUG] [Thread-74661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:42:11.874 [DEBUG] [Thread-74661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:42:11.882 [DEBUG] [Thread-74661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:42:11.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:42:11.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:42: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') -> 00000000
2025-12-12T18:42:11.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:42:11.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:42:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:42:11.913 [DEBUG] [Thread-74661] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:42:15.377 [DEBUG] [Thread-74663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:28.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:28.687 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:30.418 [DEBUG] [Thread-74664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:42:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:42:41.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:42:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:42:42.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 42, 29), 14.47, 37.42, 0.0, 40.4, 15.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:42:42.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:42:29
2025-12-12T18:42:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:42:42.914 [DEBUG] [Thread-74665] [transport.py] [_log()] starting thread (client mode): 0xf5788fa0
2025-12-12T18:42:42.914 [DEBUG] [Thread-74665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:42:42.935 [DEBUG] [Thread-74665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:42:42.935 [INFO] [Thread-74665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:42:42.938 [DEBUG] [Thread-74665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:42:42.938 [DEBUG] [Thread-74665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:42:42.938 [DEBUG] [Thread-74665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:42:42.938 [DEBUG] [Thread-74665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:42.938 [DEBUG] [Thread-74665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:42.938 [DEBUG] [Thread-74665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] client lang: <none>
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] server lang: <none>
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] kex follows: False
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:42:42.939 [DEBUG] [Thread-74665] [transport.py] [_log()] Compression: none
2025-12-12T18:42:42.940 [DEBUG] [Thread-74665] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:42:42.957 [DEBUG] [Thread-74665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:42:42.958 [DEBUG] [Thread-74665] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:42:42.958 [DEBUG] [Thread-74665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:42:42.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:42:42.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:42:42.960 [DEBUG] [Thread-74665] [transport.py] [_log()] userauth is OK
2025-12-12T18:42:42.960 [DEBUG] [Thread-74665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:42:42.960 [DEBUG] [Thread-74665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:42:42.961 [DEBUG] [Thread-74665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:42:42.961 [DEBUG] [Thread-74665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:42:42.984 [INFO] [Thread-74665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:42:42.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:42:43.762 [DEBUG] [Thread-74665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:42:43.762 [DEBUG] [Thread-74665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:42:43.763 [DEBUG] [Thread-74665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:42:43.803 [DEBUG] [Thread-74665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:42:43.803 [DEBUG] [Thread-74665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:42:43.805 [DEBUG] [Thread-74665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:42:43.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:42:43.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:42:43.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:42:43.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:42:43.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:42:43.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:42:43.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:42:43.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:42:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:42:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.695936 -999.00  +15.50  36.19     42   +2.80 1 1 2 1 1   887    0 10.78 -99.62 ----- 38.6 36.2 318.6 49.9 17.4 -26.8 17.7 -26.3 18.1 -24.4 18.1 -25.5
2025-12-12T18:42:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:42:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:42:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.695936
2025-12-12T18:42:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:42:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:42:43.827 [DEBUG] [Thread-74665] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:42:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:42:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:42:43.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:42:43.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:42:29', tmtdew=14.47, humidity=37.42, cloud=0.0, wind=40.4, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:42:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:42:43.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:42:43.926 [DEBUG] [Thread-74668] [transport.py] [_log()] starting thread (client mode): 0xf81e60e0
2025-12-12T18:42:43.926 [DEBUG] [Thread-74668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:42:43.940 [DEBUG] [Thread-74668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:42:43.941 [INFO] [Thread-74668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:42:43.948 [DEBUG] [Thread-74668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:42:43.948 [DEBUG] [Thread-74668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:42:43.948 [DEBUG] [Thread-74668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] client lang: <none>
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] server lang: <none>
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] kex follows: False
2025-12-12T18:42:43.949 [DEBUG] [Thread-74668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:42:43.950 [DEBUG] [Thread-74668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:42:43.950 [DEBUG] [Thread-74668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:42:43.950 [DEBUG] [Thread-74668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:42:43.950 [DEBUG] [Thread-74668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:42:43.950 [DEBUG] [Thread-74668] [transport.py] [_log()] Compression: none
2025-12-12T18:42:43.950 [DEBUG] [Thread-74668] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:42:44.006 [DEBUG] [Thread-74668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:42:44.007 [DEBUG] [Thread-74668] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:42:44.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:42:44.008 [DEBUG] [Thread-74668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:42:44.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:42:44.069 [DEBUG] [Thread-74668] [transport.py] [_log()] userauth is OK
2025-12-12T18:42:44.069 [DEBUG] [Thread-74668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:42:44.070 [DEBUG] [Thread-74668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:42:44.070 [DEBUG] [Thread-74668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:42:44.070 [DEBUG] [Thread-74668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:42:44.088 [INFO] [Thread-74668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:42:44.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:42:44.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:42:44.893 [DEBUG] [Thread-74668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:42:44.893 [DEBUG] [Thread-74668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:42:44.941 [DEBUG] [Thread-74668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:42:44.941 [DEBUG] [Thread-74668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:42:44.950 [DEBUG] [Thread-74668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:42:44.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:42:44.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:42: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
2025-12-12T18:42:44.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:42:44.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:42:44.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:42:44.985 [DEBUG] [Thread-74668] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:42:45.446 [DEBUG] [Thread-74670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:00.492 [DEBUG] [Thread-74671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:00.568 [DEBUG] [Thread-74672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:15.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:43:15.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:43:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:43:15.522 [DEBUG] [Thread-74673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 43, 1), 14.37, 37.65, 0.0, 44.02, 15.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:43:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:43:01
2025-12-12T18:43:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:43:15.969 [DEBUG] [Thread-74674] [transport.py] [_log()] starting thread (client mode): 0xf81c03a0
2025-12-12T18:43:15.969 [DEBUG] [Thread-74674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:43:15.990 [DEBUG] [Thread-74674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:43:15.990 [INFO] [Thread-74674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] client lang: <none>
2025-12-12T18:43:15.994 [DEBUG] [Thread-74674] [transport.py] [_log()] server lang: <none>
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] kex follows: False
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] Compression: none
2025-12-12T18:43:15.995 [DEBUG] [Thread-74674] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:43:16.013 [DEBUG] [Thread-74674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:43:16.014 [DEBUG] [Thread-74674] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:43:16.015 [DEBUG] [Thread-74674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:43:16.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:43:16.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:43:16.018 [DEBUG] [Thread-74674] [transport.py] [_log()] userauth is OK
2025-12-12T18:43:16.018 [DEBUG] [Thread-74674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:43:16.018 [DEBUG] [Thread-74674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:43:16.018 [DEBUG] [Thread-74674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:43:16.019 [DEBUG] [Thread-74674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:43:16.042 [INFO] [Thread-74674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:43:16.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:43:16.690 [DEBUG] [Thread-74674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:43:16.691 [DEBUG] [Thread-74674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:43:16.691 [DEBUG] [Thread-74674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:43:16.732 [DEBUG] [Thread-74674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:43:16.732 [DEBUG] [Thread-74674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:43:16.735 [DEBUG] [Thread-74674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:43:16.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:43:16.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:43:16.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:43:16.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:43:16.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:43:16.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:43:16.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:43:16.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:43:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:43:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.696283 -999.00  +15.10  46.16     43   +2.70 1 1 2 1 1   887    0 10.90 -98.88 ----- 46.3 46.2 314.0 53.3 17.2 -27.2 17.6 -27.3 17.9 -25.0 18.1 -26.2
2025-12-12T18:43:16.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:43:16.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:43:16.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.696283
2025-12-12T18:43:16.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:43:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:43:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:43:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:43:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:43:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:43:01', tmtdew=14.37, humidity=37.65, cloud=0.0, wind=44.02, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:42:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:43:16.763 [DEBUG] [Thread-74674] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:43:16.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:43:16.858 [DEBUG] [Thread-74677] [transport.py] [_log()] starting thread (client mode): 0xf578b760
2025-12-12T18:43:16.858 [DEBUG] [Thread-74677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:43:16.874 [DEBUG] [Thread-74677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:43:16.874 [INFO] [Thread-74677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:43:16.881 [DEBUG] [Thread-74677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] client lang: <none>
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] server lang: <none>
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] kex follows: False
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] Compression: none
2025-12-12T18:43:16.882 [DEBUG] [Thread-74677] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:43:16.941 [DEBUG] [Thread-74677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:43:16.942 [DEBUG] [Thread-74677] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:43:16.942 [DEBUG] [Thread-74677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:43:16.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:43:16.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:43:16.998 [DEBUG] [Thread-74677] [transport.py] [_log()] userauth is OK
2025-12-12T18:43:16.998 [DEBUG] [Thread-74677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:43:16.998 [DEBUG] [Thread-74677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:43:16.998 [DEBUG] [Thread-74677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:43:16.998 [DEBUG] [Thread-74677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:43:17.017 [INFO] [Thread-74677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:43:17.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:43:17.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:43:17.875 [DEBUG] [Thread-74677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:43:17.876 [DEBUG] [Thread-74677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:43:17.924 [DEBUG] [Thread-74677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:43:17.924 [DEBUG] [Thread-74677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:43:17.932 [DEBUG] [Thread-74677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:43:17.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:43:17.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:43:17.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:43:17.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:43:17.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:43:17.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:43:17.967 [DEBUG] [Thread-74677] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:43:28.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:28.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:30.546 [DEBUG] [Thread-74679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:45.581 [DEBUG] [Thread-74680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:43:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:43:47.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:43:47.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:43:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 43, 33), 14.5, 37.33, 0.0, 54.65, 15.58, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:43:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:43:33
2025-12-12T18:43:48.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:43:48.939 [DEBUG] [Thread-74681] [transport.py] [_log()] starting thread (client mode): 0xf5703a30
2025-12-12T18:43:48.939 [DEBUG] [Thread-74681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:43:48.961 [DEBUG] [Thread-74681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:43:48.961 [INFO] [Thread-74681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] client lang: <none>
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] server lang: <none>
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] kex follows: False
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:43:48.964 [DEBUG] [Thread-74681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:43:48.965 [DEBUG] [Thread-74681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:43:48.965 [DEBUG] [Thread-74681] [transport.py] [_log()] Compression: none
2025-12-12T18:43:48.965 [DEBUG] [Thread-74681] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:43:48.984 [DEBUG] [Thread-74681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:43:48.985 [DEBUG] [Thread-74681] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:43:48.985 [DEBUG] [Thread-74681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:43:48.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:43:48.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:43:48.988 [DEBUG] [Thread-74681] [transport.py] [_log()] userauth is OK
2025-12-12T18:43:48.988 [DEBUG] [Thread-74681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:43:48.988 [DEBUG] [Thread-74681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:43:48.988 [DEBUG] [Thread-74681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:43:48.988 [DEBUG] [Thread-74681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:43:49.012 [INFO] [Thread-74681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:43:49.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:43:49.782 [DEBUG] [Thread-74681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:43:49.782 [DEBUG] [Thread-74681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:43:49.783 [DEBUG] [Thread-74681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:43:49.823 [DEBUG] [Thread-74681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:43:49.823 [DEBUG] [Thread-74681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:43:49.825 [DEBUG] [Thread-74681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:43:49.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:43:49.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:43:49.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:43:49.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:43:49.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:43:49.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:43:49.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:43:49.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:43:49.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:43:49.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.696631 -999.00  +15.10  55.55     44   +3.00 1 1 2 1 1   887    0 10.58 -98.94 ----- 53.3 55.5 312.6 59.3 17.3 -26.9 17.5 -27.2 17.9 -24.2 17.9 -25.3
2025-12-12T18:43:49.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:43:49.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:43:49.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.696631
2025-12-12T18:43:49.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:43:49.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:43:49.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:43:49.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:43:49.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:43:49.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:43:33', tmtdew=14.5, humidity=37.33, cloud=0.0, wind=54.65, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:43:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:43:49.848 [DEBUG] [Thread-74681] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:43:49.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:43:49.944 [DEBUG] [Thread-74684] [transport.py] [_log()] starting thread (client mode): 0xf5701870
2025-12-12T18:43:49.944 [DEBUG] [Thread-74684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:43:49.959 [DEBUG] [Thread-74684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:43:49.959 [INFO] [Thread-74684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] client lang: <none>
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] server lang: <none>
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] kex follows: False
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] Compression: none
2025-12-12T18:43:49.967 [DEBUG] [Thread-74684] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:43:50.026 [DEBUG] [Thread-74684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:43:50.026 [DEBUG] [Thread-74684] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:43:50.027 [DEBUG] [Thread-74684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:43:50.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:43:50.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:43:50.082 [DEBUG] [Thread-74684] [transport.py] [_log()] userauth is OK
2025-12-12T18:43:50.082 [DEBUG] [Thread-74684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:43:50.082 [DEBUG] [Thread-74684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:43:50.082 [DEBUG] [Thread-74684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:43:50.082 [DEBUG] [Thread-74684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:43:50.105 [INFO] [Thread-74684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:43:50.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:43:50.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:43:50.934 [DEBUG] [Thread-74684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:43:50.934 [DEBUG] [Thread-74684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:43:50.982 [DEBUG] [Thread-74684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:43:50.982 [DEBUG] [Thread-74684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:43:50.991 [DEBUG] [Thread-74684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:43:51.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:43:51.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:43:51.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:43:51.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:43:51.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:43:51.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:43:51.032 [DEBUG] [Thread-74684] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:44:00.611 [DEBUG] [Thread-74686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:00.617 [DEBUG] [Thread-74687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:15.647 [DEBUG] [Thread-74688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:44:21.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:44:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:44:21.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 44, 5), 13.97, 38.73, 0.0, 45.38, 15.04, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:44:21.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:44:05
2025-12-12T18:44:21.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:44:21.998 [DEBUG] [Thread-74689] [transport.py] [_log()] starting thread (client mode): 0xf5797ac0
2025-12-12T18:44:21.998 [DEBUG] [Thread-74689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:44:22.018 [DEBUG] [Thread-74689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:44:22.018 [INFO] [Thread-74689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] client lang: <none>
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] server lang: <none>
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] kex follows: False
2025-12-12T18:44:22.021 [DEBUG] [Thread-74689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:44:22.022 [DEBUG] [Thread-74689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:44:22.022 [DEBUG] [Thread-74689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:44:22.022 [DEBUG] [Thread-74689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:44:22.022 [DEBUG] [Thread-74689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:44:22.022 [DEBUG] [Thread-74689] [transport.py] [_log()] Compression: none
2025-12-12T18:44:22.022 [DEBUG] [Thread-74689] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:44:22.039 [DEBUG] [Thread-74689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:44:22.040 [DEBUG] [Thread-74689] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:44:22.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:44:22.041 [DEBUG] [Thread-74689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:44:22.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:44:22.043 [DEBUG] [Thread-74689] [transport.py] [_log()] userauth is OK
2025-12-12T18:44:22.043 [DEBUG] [Thread-74689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:44:22.043 [DEBUG] [Thread-74689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:44:22.043 [DEBUG] [Thread-74689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:44:22.043 [DEBUG] [Thread-74689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:44:22.065 [INFO] [Thread-74689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:44:22.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:44:22.707 [DEBUG] [Thread-74689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:44:22.707 [DEBUG] [Thread-74689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:44:22.708 [DEBUG] [Thread-74689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:44:22.748 [DEBUG] [Thread-74689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:44:22.748 [DEBUG] [Thread-74689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:44:22.750 [DEBUG] [Thread-74689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:44:22.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:44:22.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:44:22.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:44:22.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:44:22.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:44:22.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:44:22.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.696978 -999.00  +15.10  50.04     44   +3.10 1 1 2 1 1   887    0 10.43 -110.77 ----- 46.1 50.0 315.6 56.0 17.1 -27.5 17.5 -26.6 17.8 -27.3 17.9 -25.4
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.696978
2025-12-12T18:44:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:44:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:44:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:44:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:44:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:44:22.772 [DEBUG] [Thread-74689] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:44:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:44:05', tmtdew=13.97, humidity=38.73, cloud=0.0, wind=45.38, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:43:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:44:22.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:44:22.862 [DEBUG] [Thread-74692] [transport.py] [_log()] starting thread (client mode): 0xf5789810
2025-12-12T18:44:22.862 [DEBUG] [Thread-74692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:44:22.876 [DEBUG] [Thread-74692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:44:22.876 [INFO] [Thread-74692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] client lang: <none>
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] server lang: <none>
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] kex follows: False
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:44:22.883 [DEBUG] [Thread-74692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:44:22.884 [DEBUG] [Thread-74692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:44:22.884 [DEBUG] [Thread-74692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:44:22.884 [DEBUG] [Thread-74692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:44:22.884 [DEBUG] [Thread-74692] [transport.py] [_log()] Compression: none
2025-12-12T18:44:22.884 [DEBUG] [Thread-74692] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:44:22.942 [DEBUG] [Thread-74692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:44:22.943 [DEBUG] [Thread-74692] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:44:22.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:44:22.945 [DEBUG] [Thread-74692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:44:22.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:44:22.999 [DEBUG] [Thread-74692] [transport.py] [_log()] userauth is OK
2025-12-12T18:44:23.000 [DEBUG] [Thread-74692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:44:23.000 [DEBUG] [Thread-74692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:44:23.000 [DEBUG] [Thread-74692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:44:23.000 [DEBUG] [Thread-74692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:44:23.019 [INFO] [Thread-74692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:44:23.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:44:23.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:44:23.846 [DEBUG] [Thread-74692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:44:23.846 [DEBUG] [Thread-74692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:44:23.895 [DEBUG] [Thread-74692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:44:23.895 [DEBUG] [Thread-74692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:44:23.905 [DEBUG] [Thread-74692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:44:23.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:44:23.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:44:23.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:44:23.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:44:23.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:44:23.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:44:23.939 [DEBUG] [Thread-74692] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:44:28.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:28.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:30.676 [DEBUG] [Thread-74694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:45.716 [DEBUG] [Thread-74695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:44:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:44:53.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:44:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:44:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 44, 37), 13.98, 38.7, 0.0, 43.46, 15.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:44:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:44:37
2025-12-12T18:44:54.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:44:54.906 [DEBUG] [Thread-74696] [transport.py] [_log()] starting thread (client mode): 0xf574d690
2025-12-12T18:44:54.906 [DEBUG] [Thread-74696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:44:54.927 [DEBUG] [Thread-74696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:44:54.928 [INFO] [Thread-74696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] client lang: <none>
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] server lang: <none>
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] kex follows: False
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] Compression: none
2025-12-12T18:44:54.931 [DEBUG] [Thread-74696] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:44:54.948 [DEBUG] [Thread-74696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:44:54.948 [DEBUG] [Thread-74696] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:44:54.949 [DEBUG] [Thread-74696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:44:54.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:44:54.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:44:54.951 [DEBUG] [Thread-74696] [transport.py] [_log()] userauth is OK
2025-12-12T18:44:54.951 [DEBUG] [Thread-74696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:44:54.951 [DEBUG] [Thread-74696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:44:54.951 [DEBUG] [Thread-74696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:44:54.951 [DEBUG] [Thread-74696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:44:54.969 [INFO] [Thread-74696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:44:54.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:44:55.756 [DEBUG] [Thread-74696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:44:55.756 [DEBUG] [Thread-74696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:44:55.757 [DEBUG] [Thread-74696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:44:55.797 [DEBUG] [Thread-74696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:44:55.797 [DEBUG] [Thread-74696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:44:55.799 [DEBUG] [Thread-74696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:44:55.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:44:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:44:55.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:44:55.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:44:55.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:44:55.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:44:55.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:44:55.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:44:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:44:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.697325 -999.00  +15.10  39.78     44   +3.10 1 1 2 1 1   887    0 10.20 -114.37 ----- 37.6 39.8 316.2 51.5 17.1 -26.5 17.4 -26.9 17.8 -24.1 17.8 -25.4
2025-12-12T18:44:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:44:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:44:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.697325
2025-12-12T18:44:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:44:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:44:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:44:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:44:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:44:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:44:37', tmtdew=13.98, humidity=38.7, cloud=0.0, wind=43.46, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:44:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:44:55.824 [DEBUG] [Thread-74696] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:44:55.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:44:55.926 [DEBUG] [Thread-74699] [transport.py] [_log()] starting thread (client mode): 0xf5789030
2025-12-12T18:44:55.926 [DEBUG] [Thread-74699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:44:55.942 [DEBUG] [Thread-74699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:44:55.942 [INFO] [Thread-74699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:44:55.949 [DEBUG] [Thread-74699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:44:55.949 [DEBUG] [Thread-74699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] client lang: <none>
2025-12-12T18:44:55.950 [DEBUG] [Thread-74699] [transport.py] [_log()] server lang: <none>
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] kex follows: False
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] Compression: none
2025-12-12T18:44:55.951 [DEBUG] [Thread-74699] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:44:56.006 [DEBUG] [Thread-74699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:44:56.007 [DEBUG] [Thread-74699] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:44:56.007 [DEBUG] [Thread-74699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:44:56.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:44:56.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:44:56.062 [DEBUG] [Thread-74699] [transport.py] [_log()] userauth is OK
2025-12-12T18:44:56.062 [DEBUG] [Thread-74699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:44:56.062 [DEBUG] [Thread-74699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:44:56.062 [DEBUG] [Thread-74699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:44:56.062 [DEBUG] [Thread-74699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:44:56.084 [INFO] [Thread-74699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:44:56.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:44:56.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:44:56.905 [DEBUG] [Thread-74699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:44:56.906 [DEBUG] [Thread-74699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:44:56.954 [DEBUG] [Thread-74699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:44:56.954 [DEBUG] [Thread-74699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:44:56.963 [DEBUG] [Thread-74699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:44:56.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:44:56.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:44: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
2025-12-12T18:44:56.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:44:56.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:44:56.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:44:56.998 [DEBUG] [Thread-74699] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:45:00.670 [DEBUG] [Thread-74701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:00.741 [DEBUG] [Thread-74702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:15.783 [DEBUG] [Thread-74703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:45:27.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:45:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:45:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 45, 9), 14.03, 38.56, 0.0, 43.03, 15.19, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:45:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:45:09
2025-12-12T18:45:27.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:45:28.001 [DEBUG] [Thread-74704] [transport.py] [_log()] starting thread (client mode): 0xf813dff0
2025-12-12T18:45:28.001 [DEBUG] [Thread-74704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:45:28.020 [DEBUG] [Thread-74704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:45:28.020 [INFO] [Thread-74704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] client lang: <none>
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] server lang: <none>
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] kex follows: False
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] Compression: none
2025-12-12T18:45:28.022 [DEBUG] [Thread-74704] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:45:28.030 [DEBUG] [Thread-74704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:45:28.030 [DEBUG] [Thread-74704] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:45:28.030 [DEBUG] [Thread-74704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:45:28.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:45:28.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:45:28.031 [DEBUG] [Thread-74704] [transport.py] [_log()] userauth is OK
2025-12-12T18:45:28.031 [DEBUG] [Thread-74704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:45:28.031 [DEBUG] [Thread-74704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:45:28.031 [DEBUG] [Thread-74704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:45:28.031 [DEBUG] [Thread-74704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:45:28.040 [INFO] [Thread-74704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:45:28.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:45:28.668 [DEBUG] [Thread-74704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:45:28.668 [DEBUG] [Thread-74704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:45:28.668 [DEBUG] [Thread-74704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:45:28.709 [DEBUG] [Thread-74704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:45:28.709 [DEBUG] [Thread-74704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:45:28.712 [DEBUG] [Thread-74704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:45:28.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:45:28.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:45:28.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:45:28.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:45:28.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:45:28.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:45:28.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:45:28.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:45:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:45:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.697672 -999.00  +15.10  43.59     44   +3.20 1 1 2 1 1   887    0 9.95 -121.24 ----- 40.2 43.6 309.8 59.3 17.1 -26.5 17.4 -26.6 17.7 -24.7 17.8 -25.2
2025-12-12T18:45:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:45:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:45:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.697672
2025-12-12T18:45:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:45:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:45:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:45:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:45:28.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:45:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:45:09', tmtdew=14.03, humidity=38.56, cloud=0.0, wind=43.03, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:44:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:45:28.736 [DEBUG] [Thread-74704] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:45:28.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:45:28.831 [DEBUG] [Thread-74707] [transport.py] [_log()] starting thread (client mode): 0xf813e740
2025-12-12T18:45:28.831 [DEBUG] [Thread-74707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:45:28.849 [DEBUG] [Thread-74707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:45:28.849 [INFO] [Thread-74707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] client lang: <none>
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] server lang: <none>
2025-12-12T18:45:28.857 [DEBUG] [Thread-74707] [transport.py] [_log()] kex follows: False
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] Compression: none
2025-12-12T18:45:28.858 [DEBUG] [Thread-74707] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:45:28.914 [DEBUG] [Thread-74707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:45:28.914 [DEBUG] [Thread-74707] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:45:28.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:45:28.915 [DEBUG] [Thread-74707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:45:28.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:45:28.975 [DEBUG] [Thread-74707] [transport.py] [_log()] userauth is OK
2025-12-12T18:45:28.975 [DEBUG] [Thread-74707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:45:28.975 [DEBUG] [Thread-74707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:45:28.975 [DEBUG] [Thread-74707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:45:28.975 [DEBUG] [Thread-74707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:45:28.998 [INFO] [Thread-74707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:45:28.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:45:28.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:45:29.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:29.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:29.860 [DEBUG] [Thread-74707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:45:29.861 [DEBUG] [Thread-74707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:45:29.909 [DEBUG] [Thread-74707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:45:29.909 [DEBUG] [Thread-74707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:45:29.918 [DEBUG] [Thread-74707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:45:29.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:45:29.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:45:29.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:45:29.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:45:29.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:45:29.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:45:29.953 [DEBUG] [Thread-74707] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:45:30.809 [DEBUG] [Thread-74709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:45.854 [DEBUG] [Thread-74710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:45:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:45:59.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:45:59.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:46:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 45, 41), 14.13, 38.35, 0.0, 42.38, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:46:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:45:41
2025-12-12T18:46:00.718 [DEBUG] [Thread-74711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:46:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:46:00.889 [DEBUG] [Thread-74712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:46:00.931 [DEBUG] [Thread-74713] [transport.py] [_log()] starting thread (client mode): 0xf8155510
2025-12-12T18:46:00.931 [DEBUG] [Thread-74713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:46:00.951 [DEBUG] [Thread-74713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:46:00.951 [INFO] [Thread-74713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:46:00.954 [DEBUG] [Thread-74713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:46:00.954 [DEBUG] [Thread-74713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] client lang: <none>
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] server lang: <none>
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] kex follows: False
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:46:00.955 [DEBUG] [Thread-74713] [transport.py] [_log()] Compression: none
2025-12-12T18:46:00.956 [DEBUG] [Thread-74713] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:46:00.972 [DEBUG] [Thread-74713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:46:00.972 [DEBUG] [Thread-74713] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:46:00.973 [DEBUG] [Thread-74713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:46:00.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:46:00.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:46:01.017 [DEBUG] [Thread-74713] [transport.py] [_log()] userauth is OK
2025-12-12T18:46:01.017 [DEBUG] [Thread-74713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:46:01.017 [DEBUG] [Thread-74713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:46:01.017 [DEBUG] [Thread-74713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:46:01.017 [DEBUG] [Thread-74713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:46:01.037 [INFO] [Thread-74713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:46:01.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:46:01.828 [DEBUG] [Thread-74713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:46:01.828 [DEBUG] [Thread-74713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:46:01.828 [DEBUG] [Thread-74713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:46:01.870 [DEBUG] [Thread-74713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:46:01.870 [DEBUG] [Thread-74713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:46:01.872 [DEBUG] [Thread-74713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:46:01.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:46:01.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:46:01.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:46:01.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:46:01.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:46:01.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:46:01.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.698019 -999.00  +15.20  36.95     44   +3.10 1 1 2 1 1   887    0 9.57 -133.41 ----- 35.2 37.0 298.4 50.0 17.0 -26.6 17.4 -26.2 17.7 -24.1 17.8 -25.3
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.698019
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:46:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:45:41', tmtdew=14.13, humidity=38.35, cloud=0.0, wind=42.38, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:45:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:46:01.890 [DEBUG] [Thread-74713] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:46:01.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:46:01.982 [DEBUG] [Thread-74716] [transport.py] [_log()] starting thread (client mode): 0xf575c940
2025-12-12T18:46:01.982 [DEBUG] [Thread-74716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:46:01.997 [DEBUG] [Thread-74716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:46:01.997 [INFO] [Thread-74716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] client lang: <none>
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] server lang: <none>
2025-12-12T18:46:02.005 [DEBUG] [Thread-74716] [transport.py] [_log()] kex follows: False
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] Compression: none
2025-12-12T18:46:02.006 [DEBUG] [Thread-74716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:46:02.062 [DEBUG] [Thread-74716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:46:02.062 [DEBUG] [Thread-74716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:46:02.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:46:02.062 [DEBUG] [Thread-74716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:46:02.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:46:02.117 [DEBUG] [Thread-74716] [transport.py] [_log()] userauth is OK
2025-12-12T18:46:02.117 [DEBUG] [Thread-74716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:46:02.118 [DEBUG] [Thread-74716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:46:02.118 [DEBUG] [Thread-74716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:46:02.118 [DEBUG] [Thread-74716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:46:02.131 [INFO] [Thread-74716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:46:02.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:46:02.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:46:03.007 [DEBUG] [Thread-74716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:46:03.007 [DEBUG] [Thread-74716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:46:03.055 [DEBUG] [Thread-74716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:46:03.055 [DEBUG] [Thread-74716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:46:03.063 [DEBUG] [Thread-74716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:46:03.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:46:03.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:46:03.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:46:03.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:46:03.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:46:03.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:46:03.095 [DEBUG] [Thread-74716] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:46:15.917 [DEBUG] [Thread-74718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:46:29.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:46:29.277 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:46:30.964 [DEBUG] [Thread-74719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:46:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:46:33.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:46:33.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:46:33.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 46, 13), 14.31, 37.87, 0.0, 39.91, 15.34, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:46:33.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:46:13
2025-12-12T18:46:33.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:46:34.034 [DEBUG] [Thread-74720] [transport.py] [_log()] starting thread (client mode): 0xf574c100
2025-12-12T18:46:34.034 [DEBUG] [Thread-74720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:46:34.054 [DEBUG] [Thread-74720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:46:34.054 [INFO] [Thread-74720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] client lang: <none>
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] server lang: <none>
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] kex follows: False
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] Compression: none
2025-12-12T18:46:34.058 [DEBUG] [Thread-74720] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:46:34.075 [DEBUG] [Thread-74720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:46:34.075 [DEBUG] [Thread-74720] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:46:34.076 [DEBUG] [Thread-74720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:46:34.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:46:34.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:46:34.077 [DEBUG] [Thread-74720] [transport.py] [_log()] userauth is OK
2025-12-12T18:46:34.078 [DEBUG] [Thread-74720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:46:34.078 [DEBUG] [Thread-74720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:46:34.078 [DEBUG] [Thread-74720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:46:34.078 [DEBUG] [Thread-74720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:46:34.102 [INFO] [Thread-74720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:46:34.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:46:34.735 [DEBUG] [Thread-74720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:46:34.736 [DEBUG] [Thread-74720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:46:34.736 [DEBUG] [Thread-74720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:46:34.777 [DEBUG] [Thread-74720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:46:34.777 [DEBUG] [Thread-74720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:46:34.779 [DEBUG] [Thread-74720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:46:34.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:46:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:46:34.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:46:34.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:46:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:46:34.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:46:34.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:46:34.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.698367 -999.00  +15.30  40.81     43   +2.80 1 1 2 1 1   887    0 9.39 -131.33 ----- 39.7 40.8 305.4 44.9 17.1 -26.3 17.3 -26.1 17.8 -23.6 17.8 -24.9
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.698367
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:46:34.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:46:13', tmtdew=14.31, humidity=37.87, cloud=0.0, wind=39.91, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:45:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:46:34.800 [DEBUG] [Thread-74720] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:46:34.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:46:34.882 [DEBUG] [Thread-74723] [transport.py] [_log()] starting thread (client mode): 0xf81e4ee0
2025-12-12T18:46:34.882 [DEBUG] [Thread-74723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:46:34.897 [DEBUG] [Thread-74723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:46:34.897 [INFO] [Thread-74723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] client lang: <none>
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] server lang: <none>
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] kex follows: False
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:46:34.909 [DEBUG] [Thread-74723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:46:34.910 [DEBUG] [Thread-74723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:46:34.910 [DEBUG] [Thread-74723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:46:34.910 [DEBUG] [Thread-74723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:46:34.910 [DEBUG] [Thread-74723] [transport.py] [_log()] Compression: none
2025-12-12T18:46:34.910 [DEBUG] [Thread-74723] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:46:34.961 [DEBUG] [Thread-74723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:46:34.962 [DEBUG] [Thread-74723] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:46:34.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:46:34.962 [DEBUG] [Thread-74723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:46:34.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:46:35.018 [DEBUG] [Thread-74723] [transport.py] [_log()] userauth is OK
2025-12-12T18:46:35.018 [DEBUG] [Thread-74723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:46:35.018 [DEBUG] [Thread-74723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:46:35.019 [DEBUG] [Thread-74723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:46:35.019 [DEBUG] [Thread-74723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:46:35.039 [INFO] [Thread-74723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:46:35.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:46:35.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:46:35.871 [DEBUG] [Thread-74723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:46:35.871 [DEBUG] [Thread-74723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:46:35.919 [DEBUG] [Thread-74723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:46:35.919 [DEBUG] [Thread-74723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:46:35.931 [DEBUG] [Thread-74723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:46:35.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:46:35.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:46: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') -> 00000000
2025-12-12T18:46:35.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:46:35.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:46:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:46:35.969 [DEBUG] [Thread-74723] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:46:45.995 [DEBUG] [Thread-74725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:00.778 [DEBUG] [Thread-74726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:01.031 [DEBUG] [Thread-74727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:05.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:47:05.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:47:05.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:47:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 46, 45), 14.62, 36.97, 0.0, 44.89, 15.36, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:47:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:46:45
2025-12-12T18:47:06.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:47:06.951 [DEBUG] [Thread-74728] [transport.py] [_log()] starting thread (client mode): 0xf813d360
2025-12-12T18:47:06.951 [DEBUG] [Thread-74728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:47:06.971 [DEBUG] [Thread-74728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:47:06.971 [INFO] [Thread-74728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] client lang: <none>
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] server lang: <none>
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] kex follows: False
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] Compression: none
2025-12-12T18:47:06.975 [DEBUG] [Thread-74728] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:47:06.993 [DEBUG] [Thread-74728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:47:06.994 [DEBUG] [Thread-74728] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:47:06.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:47:06.994 [DEBUG] [Thread-74728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:47:06.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:47:07.036 [DEBUG] [Thread-74728] [transport.py] [_log()] userauth is OK
2025-12-12T18:47:07.036 [DEBUG] [Thread-74728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:47:07.036 [DEBUG] [Thread-74728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:47:07.036 [DEBUG] [Thread-74728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:47:07.036 [DEBUG] [Thread-74728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:47:07.062 [INFO] [Thread-74728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:47:07.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:47:07.849 [DEBUG] [Thread-74728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:47:07.849 [DEBUG] [Thread-74728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:47:07.850 [DEBUG] [Thread-74728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:47:07.891 [DEBUG] [Thread-74728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:47:07.891 [DEBUG] [Thread-74728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:47:07.893 [DEBUG] [Thread-74728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:47:07.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:47:07.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:47:07.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:47:07.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:47:07.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:47:07.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:47:07.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:47:07.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:47:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:47:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.699061 -999.00  +15.10  40.85     43   +2.90 1 1 2 1 1   887    0 9.72 -127.96 ----- 43.7 40.9 310.2 53.2 17.1 -26.6 17.3 -26.6 17.7 -23.7 17.7 -25.3
2025-12-12T18:47:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:47:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:47:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.699061
2025-12-12T18:47:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:47:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:47:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:47:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:47:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:47:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:46:45', tmtdew=14.62, humidity=36.97, cloud=0.0, wind=44.89, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:46:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:47:07.919 [DEBUG] [Thread-74728] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:47:08.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:47:08.015 [DEBUG] [Thread-74731] [transport.py] [_log()] starting thread (client mode): 0xf5773a60
2025-12-12T18:47:08.015 [DEBUG] [Thread-74731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:47:08.032 [DEBUG] [Thread-74731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:47:08.032 [INFO] [Thread-74731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:08.040 [DEBUG] [Thread-74731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] client lang: <none>
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] server lang: <none>
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] kex follows: False
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:47:08.041 [DEBUG] [Thread-74731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:47:08.042 [DEBUG] [Thread-74731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:47:08.042 [DEBUG] [Thread-74731] [transport.py] [_log()] Compression: none
2025-12-12T18:47:08.042 [DEBUG] [Thread-74731] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:47:08.097 [DEBUG] [Thread-74731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:47:08.097 [DEBUG] [Thread-74731] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:47:08.098 [DEBUG] [Thread-74731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:47:08.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:47:08.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:47:08.153 [DEBUG] [Thread-74731] [transport.py] [_log()] userauth is OK
2025-12-12T18:47:08.154 [DEBUG] [Thread-74731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:47:08.154 [DEBUG] [Thread-74731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:47:08.154 [DEBUG] [Thread-74731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:47:08.154 [DEBUG] [Thread-74731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:47:08.176 [INFO] [Thread-74731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:47:08.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:47:08.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:47:08.996 [DEBUG] [Thread-74731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:47:08.996 [DEBUG] [Thread-74731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:47:09.044 [DEBUG] [Thread-74731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:47:09.044 [DEBUG] [Thread-74731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:47:09.053 [DEBUG] [Thread-74731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:47:09.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:47:09.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:47:09.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:47:09.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:47:09.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:47:09.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:47:09.087 [DEBUG] [Thread-74731] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:47:16.060 [DEBUG] [Thread-74733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:29.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:29.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:31.096 [DEBUG] [Thread-74734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:47:39.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:47:39.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:47:39.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:47:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 47, 17), 14.69, 36.82, 0.0, 41.46, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:47:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:47:17
2025-12-12T18:47:39.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:47:40.053 [DEBUG] [Thread-74735] [transport.py] [_log()] starting thread (client mode): 0xf81c3a60
2025-12-12T18:47:40.053 [DEBUG] [Thread-74735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:47:40.074 [DEBUG] [Thread-74735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:47:40.074 [INFO] [Thread-74735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:47:40.077 [DEBUG] [Thread-74735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:47:40.077 [DEBUG] [Thread-74735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] client lang: <none>
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] server lang: <none>
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] kex follows: False
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:47:40.078 [DEBUG] [Thread-74735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:47:40.079 [DEBUG] [Thread-74735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:47:40.079 [DEBUG] [Thread-74735] [transport.py] [_log()] Compression: none
2025-12-12T18:47:40.079 [DEBUG] [Thread-74735] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:47:40.096 [DEBUG] [Thread-74735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:47:40.097 [DEBUG] [Thread-74735] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:47:40.098 [DEBUG] [Thread-74735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:47:40.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:47:40.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:47:40.100 [DEBUG] [Thread-74735] [transport.py] [_log()] userauth is OK
2025-12-12T18:47:40.100 [DEBUG] [Thread-74735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:47:40.100 [DEBUG] [Thread-74735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:47:40.100 [DEBUG] [Thread-74735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:47:40.100 [DEBUG] [Thread-74735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:47:40.115 [INFO] [Thread-74735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:47:40.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:47:40.738 [DEBUG] [Thread-74735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:47:40.738 [DEBUG] [Thread-74735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:47:40.739 [DEBUG] [Thread-74735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:47:40.779 [DEBUG] [Thread-74735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:47:40.779 [DEBUG] [Thread-74735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:47:40.782 [DEBUG] [Thread-74735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:47:40.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:47:40.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:47:40.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:47:40.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:47:40.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:47:40.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:47:40.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:47:40.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:47:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:47:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.699408 -999.00  +15.10  38.36     43   +2.90 1 1 2 1 1   887    0 9.29 -135.03 ----- 33.0 38.4 310.6 47.3 17.0 -26.9 17.3 -26.3 17.6 -25.3 17.7 -25.8
2025-12-12T18:47:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:47:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:47:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.699408
2025-12-12T18:47:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:47:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:47:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:47:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:47:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:47:40.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:47:17', tmtdew=14.69, humidity=36.82, cloud=0.0, wind=41.46, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:47:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:47:40.807 [DEBUG] [Thread-74735] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:47:40.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:47:40.903 [DEBUG] [Thread-74738] [transport.py] [_log()] starting thread (client mode): 0xf81554b0
2025-12-12T18:47:40.903 [DEBUG] [Thread-74738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:47:40.918 [DEBUG] [Thread-74738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:47:40.918 [INFO] [Thread-74738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] client lang: <none>
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] server lang: <none>
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] kex follows: False
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:47:40.926 [DEBUG] [Thread-74738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:47:40.927 [DEBUG] [Thread-74738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:47:40.927 [DEBUG] [Thread-74738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:47:40.927 [DEBUG] [Thread-74738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:47:40.927 [DEBUG] [Thread-74738] [transport.py] [_log()] Compression: none
2025-12-12T18:47:40.927 [DEBUG] [Thread-74738] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:47:40.985 [DEBUG] [Thread-74738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:47:40.986 [DEBUG] [Thread-74738] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:47:40.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:47:40.986 [DEBUG] [Thread-74738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:47:40.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:47:41.042 [DEBUG] [Thread-74738] [transport.py] [_log()] userauth is OK
2025-12-12T18:47:41.042 [DEBUG] [Thread-74738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:47:41.042 [DEBUG] [Thread-74738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:47:41.042 [DEBUG] [Thread-74738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:47:41.042 [DEBUG] [Thread-74738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:47:41.066 [INFO] [Thread-74738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:47:41.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:47:41.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:47:41.894 [DEBUG] [Thread-74738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:47:41.895 [DEBUG] [Thread-74738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:47:41.943 [DEBUG] [Thread-74738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:47:41.943 [DEBUG] [Thread-74738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:47:41.952 [DEBUG] [Thread-74738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:47:41.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:47:41.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:47:41.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:47:41.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:47:41.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:47:41.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:47:41.986 [DEBUG] [Thread-74738] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:47:46.130 [DEBUG] [Thread-74740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:00.827 [DEBUG] [Thread-74741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:01.181 [DEBUG] [Thread-74742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:12.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:48:12.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:48:12.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:48:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 47, 49), 14.66, 36.92, 0.0, 39.06, 15.52, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:48:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:47:49
2025-12-12T18:48:12.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:48:12.957 [DEBUG] [Thread-74743] [transport.py] [_log()] starting thread (client mode): 0xf8157910
2025-12-12T18:48:12.957 [DEBUG] [Thread-74743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:48:12.979 [DEBUG] [Thread-74743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:48:12.979 [INFO] [Thread-74743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] client lang: <none>
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] server lang: <none>
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] kex follows: False
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:48:12.982 [DEBUG] [Thread-74743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:48:12.983 [DEBUG] [Thread-74743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:48:12.983 [DEBUG] [Thread-74743] [transport.py] [_log()] Compression: none
2025-12-12T18:48:12.983 [DEBUG] [Thread-74743] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:48:12.999 [DEBUG] [Thread-74743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:48:13.000 [DEBUG] [Thread-74743] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:48:13.000 [DEBUG] [Thread-74743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:48:13.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:48:13.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:48:13.002 [DEBUG] [Thread-74743] [transport.py] [_log()] userauth is OK
2025-12-12T18:48:13.002 [DEBUG] [Thread-74743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:48:13.002 [DEBUG] [Thread-74743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:48:13.002 [DEBUG] [Thread-74743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:48:13.003 [DEBUG] [Thread-74743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:48:13.021 [INFO] [Thread-74743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:48:13.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:48:13.855 [DEBUG] [Thread-74743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:48:13.855 [DEBUG] [Thread-74743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:48:13.856 [DEBUG] [Thread-74743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:48:13.897 [DEBUG] [Thread-74743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:48:13.897 [DEBUG] [Thread-74743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:48:13.900 [DEBUG] [Thread-74743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:48:13.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:48:13.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:48:13.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:48:13.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:48:13.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:48:13.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:48:13.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:48:13.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:48:13.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:48:13.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.699756 -999.00  +15.30  41.90     42   +2.60 1 1 2 1 1   887    0 9.31 -130.62 ----- 38.8 41.9 310.4 52.6 17.0 -26.9 17.3 -26.6 17.6 -25.5 17.7 -25.8
2025-12-12T18:48:13.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:48:13.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:48:13.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.699756
2025-12-12T18:48:13.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:48:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:48:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:48:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:48:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:48:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:47:49', tmtdew=14.66, humidity=36.92, cloud=0.0, wind=39.06, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:47:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:48:13.925 [DEBUG] [Thread-74743] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:48:14.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:48:14.021 [DEBUG] [Thread-74746] [transport.py] [_log()] starting thread (client mode): 0xf81540d0
2025-12-12T18:48:14.021 [DEBUG] [Thread-74746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:48:14.036 [DEBUG] [Thread-74746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:48:14.036 [INFO] [Thread-74746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:14.044 [DEBUG] [Thread-74746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] client lang: <none>
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] server lang: <none>
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] kex follows: False
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] Compression: none
2025-12-12T18:48:14.045 [DEBUG] [Thread-74746] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:48:14.101 [DEBUG] [Thread-74746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:48:14.102 [DEBUG] [Thread-74746] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:48:14.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:48:14.103 [DEBUG] [Thread-74746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:48:14.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:48:14.158 [DEBUG] [Thread-74746] [transport.py] [_log()] userauth is OK
2025-12-12T18:48:14.158 [DEBUG] [Thread-74746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:48:14.158 [DEBUG] [Thread-74746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:48:14.159 [DEBUG] [Thread-74746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:48:14.159 [DEBUG] [Thread-74746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:48:14.184 [INFO] [Thread-74746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:48:14.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:48:14.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:48:15.016 [DEBUG] [Thread-74746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:48:15.016 [DEBUG] [Thread-74746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:48:15.064 [DEBUG] [Thread-74746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:48:15.064 [DEBUG] [Thread-74746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:48:15.076 [DEBUG] [Thread-74746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:48:15.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:48:15.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:48:15.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:48:15.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:48:15.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:48:15.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:48:15.111 [DEBUG] [Thread-74746] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:48:16.207 [DEBUG] [Thread-74748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:29.556 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:29.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:31.252 [DEBUG] [Thread-74749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:45.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:48:45.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:48:45.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:48:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 48, 21), 14.64, 36.94, 0.0, 42.82, 15.41, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:48:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:48:21
2025-12-12T18:48:45.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:48:46.095 [DEBUG] [Thread-74750] [transport.py] [_log()] starting thread (client mode): 0xf57724d0
2025-12-12T18:48:46.095 [DEBUG] [Thread-74750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:48:46.115 [DEBUG] [Thread-74750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:48:46.115 [INFO] [Thread-74750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] client lang: <none>
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] server lang: <none>
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] kex follows: False
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:48:46.117 [DEBUG] [Thread-74750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:48:46.118 [DEBUG] [Thread-74750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:48:46.118 [DEBUG] [Thread-74750] [transport.py] [_log()] Compression: none
2025-12-12T18:48:46.118 [DEBUG] [Thread-74750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:48:46.131 [DEBUG] [Thread-74750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:48:46.132 [DEBUG] [Thread-74750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:48:46.132 [DEBUG] [Thread-74750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:48:46.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:48:46.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:48:46.134 [DEBUG] [Thread-74750] [transport.py] [_log()] userauth is OK
2025-12-12T18:48:46.134 [DEBUG] [Thread-74750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:48:46.134 [DEBUG] [Thread-74750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:48:46.134 [DEBUG] [Thread-74750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:48:46.135 [DEBUG] [Thread-74750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:48:46.158 [INFO] [Thread-74750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:48:46.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:48:46.286 [DEBUG] [Thread-74752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:48:46.762 [DEBUG] [Thread-74750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:48:46.762 [DEBUG] [Thread-74750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:48:46.763 [DEBUG] [Thread-74750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:48:46.803 [DEBUG] [Thread-74750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:48:46.803 [DEBUG] [Thread-74750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:48:46.806 [DEBUG] [Thread-74750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:48:46.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:48:46.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:48:46.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:48:46.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:48:46.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:48:46.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:48:46.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:48:46.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:48:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:48:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.700103 -999.00  +15.20  36.96     41   +2.30 1 1 2 1 1   887    0 9.77 -120.73 ----- 41.2 37.0 312.8 49.1 17.0 -26.8 17.3 -26.3 17.6 -25.1 17.7 -25.8
2025-12-12T18:48:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:48:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:48:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.700103
2025-12-12T18:48:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:48:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:48:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:48:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:48:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:48:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:48:21', tmtdew=14.64, humidity=36.94, cloud=0.0, wind=42.82, temperature=15.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:48:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:48:46.833 [DEBUG] [Thread-74750] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:48:46.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:48:46.930 [DEBUG] [Thread-74754] [transport.py] [_log()] starting thread (client mode): 0xf57707f0
2025-12-12T18:48:46.930 [DEBUG] [Thread-74754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:48:46.945 [DEBUG] [Thread-74754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:48:46.945 [INFO] [Thread-74754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] client lang: <none>
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] server lang: <none>
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] kex follows: False
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:48:46.953 [DEBUG] [Thread-74754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:48:46.954 [DEBUG] [Thread-74754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:48:46.954 [DEBUG] [Thread-74754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:48:46.954 [DEBUG] [Thread-74754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:48:46.954 [DEBUG] [Thread-74754] [transport.py] [_log()] Compression: none
2025-12-12T18:48:46.954 [DEBUG] [Thread-74754] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:48:47.011 [DEBUG] [Thread-74754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:48:47.011 [DEBUG] [Thread-74754] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:48:47.011 [DEBUG] [Thread-74754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:48:47.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:48:47.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:48:47.067 [DEBUG] [Thread-74754] [transport.py] [_log()] userauth is OK
2025-12-12T18:48:47.067 [DEBUG] [Thread-74754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:48:47.067 [DEBUG] [Thread-74754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:48:47.068 [DEBUG] [Thread-74754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:48:47.068 [DEBUG] [Thread-74754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:48:47.086 [INFO] [Thread-74754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:48:47.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:48:47.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:48:47.978 [DEBUG] [Thread-74754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:48:47.978 [DEBUG] [Thread-74754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:48:48.026 [DEBUG] [Thread-74754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:48:48.026 [DEBUG] [Thread-74754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:48:48.037 [DEBUG] [Thread-74754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:48:48.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:48: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')
2025-12-12T18:48: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
2025-12-12T18:48:48.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:48:48.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:48:48.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:48:48.071 [DEBUG] [Thread-74754] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:49:00.881 [DEBUG] [Thread-74756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:01.321 [DEBUG] [Thread-74757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:16.373 [DEBUG] [Thread-74758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:18.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:49:18.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:49:18.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:49:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 48, 53), 14.72, 36.7, 0.0, 44.41, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:49:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:48:53
2025-12-12T18:49:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:49:19.093 [DEBUG] [Thread-74759] [transport.py] [_log()] starting thread (client mode): 0xf5772980
2025-12-12T18:49:19.093 [DEBUG] [Thread-74759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:49:19.114 [DEBUG] [Thread-74759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:49:19.114 [INFO] [Thread-74759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] client lang: <none>
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] server lang: <none>
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] kex follows: False
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] Compression: none
2025-12-12T18:49:19.117 [DEBUG] [Thread-74759] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:49:19.133 [DEBUG] [Thread-74759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:49:19.133 [DEBUG] [Thread-74759] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:49:19.133 [DEBUG] [Thread-74759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:49:19.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:49:19.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:49:19.134 [DEBUG] [Thread-74759] [transport.py] [_log()] userauth is OK
2025-12-12T18:49:19.134 [DEBUG] [Thread-74759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:49:19.134 [DEBUG] [Thread-74759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:49:19.134 [DEBUG] [Thread-74759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:49:19.134 [DEBUG] [Thread-74759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:49:19.143 [INFO] [Thread-74759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:49:19.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:49:19.910 [DEBUG] [Thread-74759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:49:19.910 [DEBUG] [Thread-74759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:49:19.910 [DEBUG] [Thread-74759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:49:19.952 [DEBUG] [Thread-74759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:49:19.952 [DEBUG] [Thread-74759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:49:19.954 [DEBUG] [Thread-74759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:49:19.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:49:19.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:49:19.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:49:19.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:49:19.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:49:19.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:49:19.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.700450 -999.00  +15.30  32.42     41   +2.40 1 1 2 1 1   887    0 9.78 -121.66 ----- 33.5 32.4 312.4 51.2 17.0 -26.7 17.3 -26.2 17.6 -24.6 17.7 -25.4
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.700450
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:49:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:48:53', tmtdew=14.72, humidity=36.7, cloud=0.0, wind=44.41, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:48:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:49:19.972 [DEBUG] [Thread-74759] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:49:20.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:49:20.059 [DEBUG] [Thread-74762] [transport.py] [_log()] starting thread (client mode): 0xf57713c0
2025-12-12T18:49:20.059 [DEBUG] [Thread-74762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:49:20.075 [DEBUG] [Thread-74762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:49:20.075 [INFO] [Thread-74762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:49:20.082 [DEBUG] [Thread-74762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] client lang: <none>
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] server lang: <none>
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] kex follows: False
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] Compression: none
2025-12-12T18:49:20.083 [DEBUG] [Thread-74762] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:49:20.139 [DEBUG] [Thread-74762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:49:20.139 [DEBUG] [Thread-74762] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:49:20.139 [DEBUG] [Thread-74762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:49:20.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:49:20.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:49:20.197 [DEBUG] [Thread-74762] [transport.py] [_log()] userauth is OK
2025-12-12T18:49:20.197 [DEBUG] [Thread-74762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:49:20.197 [DEBUG] [Thread-74762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:49:20.197 [DEBUG] [Thread-74762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:49:20.197 [DEBUG] [Thread-74762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:49:20.211 [INFO] [Thread-74762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:49:20.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:49:20.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:49:21.067 [DEBUG] [Thread-74762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:49:21.067 [DEBUG] [Thread-74762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:49:21.115 [DEBUG] [Thread-74762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:49:21.115 [DEBUG] [Thread-74762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:49:21.123 [DEBUG] [Thread-74762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:49:21.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:49:21.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:49:21.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:49:21.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:49:21.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:49:21.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:49:21.155 [DEBUG] [Thread-74762] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:49:29.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:29.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:31.399 [DEBUG] [Thread-74764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:46.442 [DEBUG] [Thread-74765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:49:51.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:49:51.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:49:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:49:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 49, 25), 14.61, 36.99, 0.0, 44.94, 15.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:49:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:49:25
2025-12-12T18:49:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:49:52.116 [DEBUG] [Thread-74766] [transport.py] [_log()] starting thread (client mode): 0xf81c03a0
2025-12-12T18:49:52.116 [DEBUG] [Thread-74766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:49:52.129 [DEBUG] [Thread-74766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:49:52.129 [INFO] [Thread-74766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:49:52.130 [DEBUG] [Thread-74766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] client lang: <none>
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] server lang: <none>
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] kex follows: False
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] Compression: none
2025-12-12T18:49:52.131 [DEBUG] [Thread-74766] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:49:52.147 [DEBUG] [Thread-74766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:49:52.147 [DEBUG] [Thread-74766] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:49:52.147 [DEBUG] [Thread-74766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:49:52.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:49:52.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:49:52.148 [DEBUG] [Thread-74766] [transport.py] [_log()] userauth is OK
2025-12-12T18:49:52.148 [DEBUG] [Thread-74766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:49:52.148 [DEBUG] [Thread-74766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:49:52.148 [DEBUG] [Thread-74766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:49:52.148 [DEBUG] [Thread-74766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:49:52.165 [INFO] [Thread-74766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:49:52.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:49:52.797 [DEBUG] [Thread-74766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:49:52.797 [DEBUG] [Thread-74766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:49:52.798 [DEBUG] [Thread-74766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:49:52.839 [DEBUG] [Thread-74766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:49:52.839 [DEBUG] [Thread-74766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:49:52.842 [DEBUG] [Thread-74766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:49:52.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:49:52.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:49:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:49:52.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:49:52.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:49:52.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:49:52.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:49:52.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:49:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:49:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.700797 -999.00  +15.10  48.94     41   +2.20 1 1 2 1 1   887    0 9.25 -121.37 ----- 42.2 48.9 314.2 54.7 17.0 -27.8 17.3 -26.7 17.5 -26.8 17.7 -26.0
2025-12-12T18:49:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:49:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:49:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.700797
2025-12-12T18:49:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:49:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:49:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:49:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:49:52.866 [DEBUG] [Thread-74766] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:49:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:49:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:49:25', tmtdew=14.61, humidity=36.99, cloud=0.0, wind=44.94, temperature=15.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:49:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:49:52.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:49:52.963 [DEBUG] [Thread-74769] [transport.py] [_log()] starting thread (client mode): 0xf81569b0
2025-12-12T18:49:52.963 [DEBUG] [Thread-74769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:49:52.979 [DEBUG] [Thread-74769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:49:52.979 [INFO] [Thread-74769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:49:52.986 [DEBUG] [Thread-74769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:49:52.986 [DEBUG] [Thread-74769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:49:52.986 [DEBUG] [Thread-74769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:49:52.986 [DEBUG] [Thread-74769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:52.986 [DEBUG] [Thread-74769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] client lang: <none>
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] server lang: <none>
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] kex follows: False
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] Compression: none
2025-12-12T18:49:52.987 [DEBUG] [Thread-74769] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:49:53.046 [DEBUG] [Thread-74769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:49:53.047 [DEBUG] [Thread-74769] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:49:53.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:49:53.048 [DEBUG] [Thread-74769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:49:53.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:49:53.102 [DEBUG] [Thread-74769] [transport.py] [_log()] userauth is OK
2025-12-12T18:49:53.103 [DEBUG] [Thread-74769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:49:53.103 [DEBUG] [Thread-74769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:49:53.103 [DEBUG] [Thread-74769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:49:53.103 [DEBUG] [Thread-74769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:49:53.122 [INFO] [Thread-74769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:49:53.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:49:53.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:49:53.982 [DEBUG] [Thread-74769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:49:53.982 [DEBUG] [Thread-74769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:49:54.030 [DEBUG] [Thread-74769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:49:54.030 [DEBUG] [Thread-74769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:49:54.038 [DEBUG] [Thread-74769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:49:54.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:49:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:49: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
2025-12-12T18:49:54.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:49:54.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:49:54.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:49:54.072 [DEBUG] [Thread-74769] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:50:00.929 [DEBUG] [Thread-74771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:01.472 [DEBUG] [Thread-74772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:16.527 [DEBUG] [Thread-74773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:50:24.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:50:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:50:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 49, 57), 14.76, 36.47, 0.0, 48.12, 15.17, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:50:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:49:57
2025-12-12T18:50:24.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:50:25.035 [DEBUG] [Thread-74774] [transport.py] [_log()] starting thread (client mode): 0xf57716f0
2025-12-12T18:50:25.035 [DEBUG] [Thread-74774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:50:25.056 [DEBUG] [Thread-74774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:50:25.056 [INFO] [Thread-74774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:50:25.060 [DEBUG] [Thread-74774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:50:25.060 [DEBUG] [Thread-74774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:50:25.060 [DEBUG] [Thread-74774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:50:25.060 [DEBUG] [Thread-74774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:25.060 [DEBUG] [Thread-74774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:25.060 [DEBUG] [Thread-74774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] client lang: <none>
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] server lang: <none>
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] kex follows: False
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] Compression: none
2025-12-12T18:50:25.061 [DEBUG] [Thread-74774] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:50:25.078 [DEBUG] [Thread-74774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:50:25.079 [DEBUG] [Thread-74774] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:50:25.079 [DEBUG] [Thread-74774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:50:25.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:50:25.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:50:25.121 [DEBUG] [Thread-74774] [transport.py] [_log()] userauth is OK
2025-12-12T18:50:25.122 [DEBUG] [Thread-74774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:50:25.122 [DEBUG] [Thread-74774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:50:25.122 [DEBUG] [Thread-74774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:50:25.122 [DEBUG] [Thread-74774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:50:25.153 [INFO] [Thread-74774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:50:25.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:50:25.918 [DEBUG] [Thread-74774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:50:25.918 [DEBUG] [Thread-74774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:50:25.918 [DEBUG] [Thread-74774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:50:25.959 [DEBUG] [Thread-74774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:50:25.959 [DEBUG] [Thread-74774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:50:25.962 [DEBUG] [Thread-74774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:50:25.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:50:25.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:50:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:50:25.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:50:25.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:50:25.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:50:25.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:50:25.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:50:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:50:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.701145 -999.00  +15.10  38.43     41   +1.90 1 1 2 1 1   887    0 9.23 -129.75 ----- 39.4 38.4 316.0 52.1 16.9 -27.3 17.2 -26.8 17.5 -25.1 17.6 -25.8
2025-12-12T18:50:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:50:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:50:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.701145
2025-12-12T18:50:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:50:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:50:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:50:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:50:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:50:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:49:57', tmtdew=14.76, humidity=36.47, cloud=0.0, wind=48.12, temperature=15.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:49:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:50:25.989 [DEBUG] [Thread-74774] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:50:26.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:50:26.085 [DEBUG] [Thread-74777] [transport.py] [_log()] starting thread (client mode): 0xf5700040
2025-12-12T18:50:26.086 [DEBUG] [Thread-74777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:50:26.101 [DEBUG] [Thread-74777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:50:26.101 [INFO] [Thread-74777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:50:26.108 [DEBUG] [Thread-74777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:50:26.108 [DEBUG] [Thread-74777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:50:26.108 [DEBUG] [Thread-74777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:50:26.108 [DEBUG] [Thread-74777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] client lang: <none>
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] server lang: <none>
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] kex follows: False
2025-12-12T18:50:26.109 [DEBUG] [Thread-74777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:50:26.110 [DEBUG] [Thread-74777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:50:26.110 [DEBUG] [Thread-74777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:50:26.110 [DEBUG] [Thread-74777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:50:26.110 [DEBUG] [Thread-74777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:50:26.110 [DEBUG] [Thread-74777] [transport.py] [_log()] Compression: none
2025-12-12T18:50:26.110 [DEBUG] [Thread-74777] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:50:26.168 [DEBUG] [Thread-74777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:50:26.169 [DEBUG] [Thread-74777] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:50:26.170 [DEBUG] [Thread-74777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:50:26.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:50:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:50:26.228 [DEBUG] [Thread-74777] [transport.py] [_log()] userauth is OK
2025-12-12T18:50:26.228 [DEBUG] [Thread-74777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:50:26.228 [DEBUG] [Thread-74777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:50:26.229 [DEBUG] [Thread-74777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:50:26.229 [DEBUG] [Thread-74777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:50:26.247 [INFO] [Thread-74777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:50:26.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:50:26.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:50:27.129 [DEBUG] [Thread-74777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:50:27.129 [DEBUG] [Thread-74777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:50:27.177 [DEBUG] [Thread-74777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:50:27.177 [DEBUG] [Thread-74777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:50:27.186 [DEBUG] [Thread-74777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:50:27.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:50:27.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:50:27.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:50:27.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:50:27.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:50:27.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:50:27.221 [DEBUG] [Thread-74777] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:50:29.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:29.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:31.554 [DEBUG] [Thread-74779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:46.589 [DEBUG] [Thread-74780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:50:57.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:50:57.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:50:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:50:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 50, 29), 15.33, 35.04, 0.0, 48.19, 15.24, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:50:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:50:29
2025-12-12T18:50:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:50:58.209 [DEBUG] [Thread-74781] [transport.py] [_log()] starting thread (client mode): 0xf81546d0
2025-12-12T18:50:58.209 [DEBUG] [Thread-74781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:50:58.229 [DEBUG] [Thread-74781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:50:58.229 [INFO] [Thread-74781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:50:58.232 [DEBUG] [Thread-74781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:50:58.232 [DEBUG] [Thread-74781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:50:58.232 [DEBUG] [Thread-74781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:50:58.232 [DEBUG] [Thread-74781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:58.232 [DEBUG] [Thread-74781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:58.232 [DEBUG] [Thread-74781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] client lang: <none>
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] server lang: <none>
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] kex follows: False
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] Compression: none
2025-12-12T18:50:58.233 [DEBUG] [Thread-74781] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:50:58.252 [DEBUG] [Thread-74781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:50:58.252 [DEBUG] [Thread-74781] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:50:58.253 [DEBUG] [Thread-74781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:50:58.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:50:58.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:50:58.255 [DEBUG] [Thread-74781] [transport.py] [_log()] userauth is OK
2025-12-12T18:50:58.255 [DEBUG] [Thread-74781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:50:58.255 [DEBUG] [Thread-74781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:50:58.255 [DEBUG] [Thread-74781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:50:58.255 [DEBUG] [Thread-74781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:50:58.278 [INFO] [Thread-74781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:50:58.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:50:58.909 [DEBUG] [Thread-74781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:50:58.909 [DEBUG] [Thread-74781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:50:58.909 [DEBUG] [Thread-74781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:50:58.950 [DEBUG] [Thread-74781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:50:58.950 [DEBUG] [Thread-74781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:50:58.953 [DEBUG] [Thread-74781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:50:58.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:50:58.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:50:58.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:50:58.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:50:58.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:50:58.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:50:58.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:50:58.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:50:58.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:50:58.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.701491 -999.00  +15.10  45.01     39   +1.30 1 1 2 1 1   887    0 9.84 -108.09 ----- 42.1 45.0 308.8 57.3 16.8 -27.6 17.1 -27.4 17.4 -25.7 17.6 -26.3
2025-12-12T18:50:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:50:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:50:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.701491
2025-12-12T18:50:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:50:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:50:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:50:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:50:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:50:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:50:29', tmtdew=15.33, humidity=35.04, cloud=0.0, wind=48.19, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:50:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:50:58.978 [DEBUG] [Thread-74781] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:50:59.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:50:59.087 [DEBUG] [Thread-74784] [transport.py] [_log()] starting thread (client mode): 0xf8157820
2025-12-12T18:50:59.087 [DEBUG] [Thread-74784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:50:59.102 [DEBUG] [Thread-74784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:50:59.103 [INFO] [Thread-74784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:50:59.110 [DEBUG] [Thread-74784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] client lang: <none>
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] server lang: <none>
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] kex follows: False
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:50:59.111 [DEBUG] [Thread-74784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:50:59.112 [DEBUG] [Thread-74784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:50:59.112 [DEBUG] [Thread-74784] [transport.py] [_log()] Compression: none
2025-12-12T18:50:59.112 [DEBUG] [Thread-74784] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:50:59.169 [DEBUG] [Thread-74784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:50:59.169 [DEBUG] [Thread-74784] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:50:59.170 [DEBUG] [Thread-74784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:50:59.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:50:59.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:50:59.226 [DEBUG] [Thread-74784] [transport.py] [_log()] userauth is OK
2025-12-12T18:50:59.226 [DEBUG] [Thread-74784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:50:59.226 [DEBUG] [Thread-74784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:50:59.226 [DEBUG] [Thread-74784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:50:59.227 [DEBUG] [Thread-74784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:50:59.245 [INFO] [Thread-74784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:50:59.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:50:59.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:51:00.060 [DEBUG] [Thread-74784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:51:00.060 [DEBUG] [Thread-74784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:51:00.110 [DEBUG] [Thread-74784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:51:00.110 [DEBUG] [Thread-74784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:51:00.119 [DEBUG] [Thread-74784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:51:00.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:51:00.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:51:00.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:51:00.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:51:00.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:51:00.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:51:00.154 [DEBUG] [Thread-74784] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:51:00.982 [DEBUG] [Thread-74786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:51:01.619 [DEBUG] [Thread-74787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:51:16.662 [DEBUG] [Thread-74788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:51:29.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:51:29.984 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:51:30.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:51:30.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:51:30.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
2025-12-12T18:51:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 51, 1), 15.88, 33.77, 0.0, 49.35, 15.27, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:51:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:51:01
2025-12-12T18:51:30.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:51:31.125 [DEBUG] [Thread-74789] [transport.py] [_log()] starting thread (client mode): 0xf81e6e30
2025-12-12T18:51:31.125 [DEBUG] [Thread-74789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:51:31.144 [DEBUG] [Thread-74789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:51:31.144 [INFO] [Thread-74789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] client lang: <none>
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] server lang: <none>
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] kex follows: False
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] Compression: none
2025-12-12T18:51:31.148 [DEBUG] [Thread-74789] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:51:31.164 [DEBUG] [Thread-74789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:51:31.165 [DEBUG] [Thread-74789] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:51:31.165 [DEBUG] [Thread-74789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:51:31.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:51:31.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:51:31.167 [DEBUG] [Thread-74789] [transport.py] [_log()] userauth is OK
2025-12-12T18:51:31.167 [DEBUG] [Thread-74789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:51:31.167 [DEBUG] [Thread-74789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:51:31.168 [DEBUG] [Thread-74789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:51:31.168 [DEBUG] [Thread-74789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:51:31.191 [INFO] [Thread-74789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:51:31.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:51:31.693 [DEBUG] [Thread-74791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:51:31.983 [DEBUG] [Thread-74789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:51:31.983 [DEBUG] [Thread-74789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:51:31.983 [DEBUG] [Thread-74789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:51:32.024 [DEBUG] [Thread-74789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:51:32.024 [DEBUG] [Thread-74789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:51:32.027 [DEBUG] [Thread-74789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:51:32.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:51:32.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:51:32.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:51:32.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:51:32.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:51:32.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:51:32.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:51:32.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:51:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:51:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.701839 -999.00  +15.00  42.90     38   +0.80 1 1 2 1 1   887    0 10.46 -91.03 ----- 46.9 42.9 313.4 62.5 16.8 -27.8 17.1 -27.2 17.3 -26.7 17.4 -26.4
2025-12-12T18:51:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:51:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:51:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.701839
2025-12-12T18:51:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:51:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:51:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:51:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:51:32.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:51:32.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:51:01', tmtdew=15.88, humidity=33.77, cloud=0.0, wind=49.35, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:50:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:51:32.051 [DEBUG] [Thread-74789] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:51:32.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:51:32.146 [DEBUG] [Thread-74793] [transport.py] [_log()] starting thread (client mode): 0xf81e5840
2025-12-12T18:51:32.146 [DEBUG] [Thread-74793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:51:32.161 [DEBUG] [Thread-74793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:51:32.161 [INFO] [Thread-74793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] client lang: <none>
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] server lang: <none>
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] kex follows: False
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] Compression: none
2025-12-12T18:51:32.169 [DEBUG] [Thread-74793] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:51:32.226 [DEBUG] [Thread-74793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:51:32.226 [DEBUG] [Thread-74793] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:51:32.227 [DEBUG] [Thread-74793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:51:32.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:51:32.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:51:32.283 [DEBUG] [Thread-74793] [transport.py] [_log()] userauth is OK
2025-12-12T18:51:32.283 [DEBUG] [Thread-74793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:51:32.284 [DEBUG] [Thread-74793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:51:32.284 [DEBUG] [Thread-74793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:51:32.284 [DEBUG] [Thread-74793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:51:32.303 [INFO] [Thread-74793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:51:32.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:51:32.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:51:33.116 [DEBUG] [Thread-74793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:51:33.116 [DEBUG] [Thread-74793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:51:33.164 [DEBUG] [Thread-74793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:51:33.164 [DEBUG] [Thread-74793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:51:33.173 [DEBUG] [Thread-74793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:51:33.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:51:33.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:51:33.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:51:33.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:51:33.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:51:33.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:51:33.207 [DEBUG] [Thread-74793] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:51:46.724 [DEBUG] [Thread-74795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:01.053 [DEBUG] [Thread-74796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:01.768 [DEBUG] [Thread-74797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:52:03.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:52:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:52:03.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 51, 33), 17.61, 29.71, 0.0, 44.46, 15.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:52:03.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:51:33
2025-12-12T18:52:04.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:52:04.183 [DEBUG] [Thread-74798] [transport.py] [_log()] starting thread (client mode): 0xf57719f0
2025-12-12T18:52:04.183 [DEBUG] [Thread-74798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:52:04.203 [DEBUG] [Thread-74798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:52:04.203 [INFO] [Thread-74798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] client lang: <none>
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] server lang: <none>
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] kex follows: False
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] Compression: none
2025-12-12T18:52:04.207 [DEBUG] [Thread-74798] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:52:04.224 [DEBUG] [Thread-74798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:52:04.224 [DEBUG] [Thread-74798] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:52:04.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:52:04.225 [DEBUG] [Thread-74798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:52:04.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:52:04.227 [DEBUG] [Thread-74798] [transport.py] [_log()] userauth is OK
2025-12-12T18:52:04.228 [DEBUG] [Thread-74798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:52:04.228 [DEBUG] [Thread-74798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:52:04.228 [DEBUG] [Thread-74798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:52:04.228 [DEBUG] [Thread-74798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:52:04.252 [INFO] [Thread-74798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:52:04.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:52:04.901 [DEBUG] [Thread-74798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:52:04.901 [DEBUG] [Thread-74798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:52:04.902 [DEBUG] [Thread-74798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:52:04.942 [DEBUG] [Thread-74798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:52:04.942 [DEBUG] [Thread-74798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:52:04.945 [DEBUG] [Thread-74798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:52:04.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:52:04.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:52:04.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:52:04.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:52:04.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:52:04.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:52:04.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:52:04.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:52:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:52:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.702186 -999.00  +15.10  38.89     37   +0.50 1 1 2 1 1   887    0 10.81 -83.05 ----- 40.8 38.9 310.2 52.5 16.7 -27.6 17.1 -27.1 17.3 -26.0 17.4 -26.4
2025-12-12T18:52:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:52:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:52:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.702186
2025-12-12T18:52:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:52:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:52:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:52:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:52:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:52:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:51:33', tmtdew=17.61, humidity=29.71, cloud=0.0, wind=44.46, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:51:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:52:04.968 [DEBUG] [Thread-74798] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:52:05.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:52:05.074 [DEBUG] [Thread-74801] [transport.py] [_log()] starting thread (client mode): 0xf81c1750
2025-12-12T18:52:05.074 [DEBUG] [Thread-74801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:52:05.089 [DEBUG] [Thread-74801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:52:05.089 [INFO] [Thread-74801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:52:05.097 [DEBUG] [Thread-74801] [transport.py] [_log()] client lang: <none>
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] server lang: <none>
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] kex follows: False
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] Compression: none
2025-12-12T18:52:05.098 [DEBUG] [Thread-74801] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:52:05.160 [DEBUG] [Thread-74801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:52:05.161 [DEBUG] [Thread-74801] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:52:05.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:52:05.162 [DEBUG] [Thread-74801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:52:05.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:52:05.217 [DEBUG] [Thread-74801] [transport.py] [_log()] userauth is OK
2025-12-12T18:52:05.217 [DEBUG] [Thread-74801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:52:05.217 [DEBUG] [Thread-74801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:52:05.217 [DEBUG] [Thread-74801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:52:05.218 [DEBUG] [Thread-74801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:52:05.236 [INFO] [Thread-74801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:52:05.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:52:05.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:52:06.025 [DEBUG] [Thread-74801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:52:06.025 [DEBUG] [Thread-74801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:52:06.073 [DEBUG] [Thread-74801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:52:06.073 [DEBUG] [Thread-74801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:52:06.081 [DEBUG] [Thread-74801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:52:06.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:52:06.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:52:06.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:52:06.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:52:06.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:52:06.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:52:06.114 [DEBUG] [Thread-74801] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:52:16.803 [DEBUG] [Thread-74803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:30.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:30.125 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:31.846 [DEBUG] [Thread-74804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:52:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:52:36.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:52:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 52, 5), 17.09, 30.72, 0.0, 45.96, 15.13, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:52:05
2025-12-12T18:52:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:52:37.112 [DEBUG] [Thread-74805] [transport.py] [_log()] starting thread (client mode): 0xf5700040
2025-12-12T18:52:37.112 [DEBUG] [Thread-74805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:52:37.132 [DEBUG] [Thread-74805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:52:37.132 [INFO] [Thread-74805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:52:37.135 [DEBUG] [Thread-74805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:52:37.135 [DEBUG] [Thread-74805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:52:37.135 [DEBUG] [Thread-74805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] client lang: <none>
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] server lang: <none>
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] kex follows: False
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:52:37.136 [DEBUG] [Thread-74805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:52:37.137 [DEBUG] [Thread-74805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:52:37.137 [DEBUG] [Thread-74805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:52:37.137 [DEBUG] [Thread-74805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:52:37.137 [DEBUG] [Thread-74805] [transport.py] [_log()] Compression: none
2025-12-12T18:52:37.137 [DEBUG] [Thread-74805] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:52:37.154 [DEBUG] [Thread-74805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:52:37.155 [DEBUG] [Thread-74805] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:52:37.155 [DEBUG] [Thread-74805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:52:37.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:52:37.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:52:37.157 [DEBUG] [Thread-74805] [transport.py] [_log()] userauth is OK
2025-12-12T18:52:37.158 [DEBUG] [Thread-74805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:52:37.158 [DEBUG] [Thread-74805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:52:37.158 [DEBUG] [Thread-74805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:52:37.158 [DEBUG] [Thread-74805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:52:37.174 [INFO] [Thread-74805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:52:37.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:52:37.958 [DEBUG] [Thread-74805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:52:37.958 [DEBUG] [Thread-74805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:52:37.958 [DEBUG] [Thread-74805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:52:37.999 [DEBUG] [Thread-74805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:52:37.999 [DEBUG] [Thread-74805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:52:38.001 [DEBUG] [Thread-74805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:52:38.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:52:38.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:52:38.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:52:38.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:52:38.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:52:38.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:52:38.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:52:38.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:52:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:52:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.702881 -999.00  +15.10  39.41     36   +0.40 1 1 2 1 1   887    0 11.68 -55.54 ----- 44.7 39.4 311.6 48.0 16.7 -27.3 17.0 -26.8 17.2 -24.5 17.4 -26.3
2025-12-12T18:52:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:52:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:52:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.702881
2025-12-12T18:52:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:52:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:52:38.025 [DEBUG] [Thread-74805] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:52:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:52:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:52:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:52:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:52:05', tmtdew=17.09, humidity=30.72, cloud=0.0, wind=45.96, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:52:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:52:38.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:52:38.115 [DEBUG] [Thread-74808] [transport.py] [_log()] starting thread (client mode): 0xf5770b80
2025-12-12T18:52:38.115 [DEBUG] [Thread-74808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:52:38.129 [DEBUG] [Thread-74808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:52:38.129 [INFO] [Thread-74808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] client lang: <none>
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] server lang: <none>
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] kex follows: False
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] Compression: none
2025-12-12T18:52:38.137 [DEBUG] [Thread-74808] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:52:38.193 [DEBUG] [Thread-74808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:52:38.193 [DEBUG] [Thread-74808] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:52:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:52:38.193 [DEBUG] [Thread-74808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:52:38.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:52:38.254 [DEBUG] [Thread-74808] [transport.py] [_log()] userauth is OK
2025-12-12T18:52:38.254 [DEBUG] [Thread-74808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:52:38.254 [DEBUG] [Thread-74808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:52:38.254 [DEBUG] [Thread-74808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:52:38.254 [DEBUG] [Thread-74808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:52:38.268 [INFO] [Thread-74808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:52:38.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:52:38.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:52:39.095 [DEBUG] [Thread-74808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:52:39.095 [DEBUG] [Thread-74808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:52:39.142 [DEBUG] [Thread-74808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:52:39.142 [DEBUG] [Thread-74808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:52:39.151 [DEBUG] [Thread-74808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:52:39.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:52:39.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:52:39.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:52:39.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:52:39.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:52:39.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:52:39.183 [DEBUG] [Thread-74808] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:52:46.874 [DEBUG] [Thread-74810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:01.106 [DEBUG] [Thread-74811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:01.920 [DEBUG] [Thread-74812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:53:09.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:53:09.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:53:09.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 52, 37), 16.73, 31.57, 0.0, 51.33, 14.98, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:53:09.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:52:37
2025-12-12T18:53:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:53:10.206 [DEBUG] [Thread-74813] [transport.py] [_log()] starting thread (client mode): 0xf575e620
2025-12-12T18:53:10.206 [DEBUG] [Thread-74813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:53:10.226 [DEBUG] [Thread-74813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:53:10.226 [INFO] [Thread-74813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] client lang: <none>
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] server lang: <none>
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] kex follows: False
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] Compression: none
2025-12-12T18:53:10.230 [DEBUG] [Thread-74813] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:53:10.245 [DEBUG] [Thread-74813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:53:10.245 [DEBUG] [Thread-74813] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:53:10.245 [DEBUG] [Thread-74813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:53:10.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:53:10.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:53:10.246 [DEBUG] [Thread-74813] [transport.py] [_log()] userauth is OK
2025-12-12T18:53:10.246 [DEBUG] [Thread-74813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:53:10.246 [DEBUG] [Thread-74813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:53:10.246 [DEBUG] [Thread-74813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:53:10.246 [DEBUG] [Thread-74813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:53:10.255 [INFO] [Thread-74813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:53:10.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:53:10.889 [DEBUG] [Thread-74813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:53:10.889 [DEBUG] [Thread-74813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:53:10.890 [DEBUG] [Thread-74813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:53:10.930 [DEBUG] [Thread-74813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:53:10.931 [DEBUG] [Thread-74813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:53:10.932 [DEBUG] [Thread-74813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:53:10.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:53:10.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:53:10.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:53:10.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:53:10.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:53:10.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:53:10.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.703228 -999.00  +14.90  47.28     37   +0.40 1 1 2 1 1   887    0 12.14 -40.03 ----- 35.8 47.3 307.0 53.9 16.6 -27.7 16.9 -27.4 17.1 -25.2 17.2 -26.7
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.703228
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:53:10.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:52:37', tmtdew=16.73, humidity=31.57, cloud=0.0, wind=51.33, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:52:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:53:10.951 [DEBUG] [Thread-74813] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:53:11.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:53:11.036 [DEBUG] [Thread-74816] [transport.py] [_log()] starting thread (client mode): 0xf578a7a0
2025-12-12T18:53:11.036 [DEBUG] [Thread-74816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:53:11.050 [DEBUG] [Thread-74816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:53:11.050 [INFO] [Thread-74816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] client lang: <none>
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] server lang: <none>
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] kex follows: False
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] Compression: none
2025-12-12T18:53:11.057 [DEBUG] [Thread-74816] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:53:11.114 [DEBUG] [Thread-74816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:53:11.114 [DEBUG] [Thread-74816] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:53:11.114 [DEBUG] [Thread-74816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:53:11.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:53:11.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:53:11.171 [DEBUG] [Thread-74816] [transport.py] [_log()] userauth is OK
2025-12-12T18:53:11.171 [DEBUG] [Thread-74816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:53:11.171 [DEBUG] [Thread-74816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:53:11.171 [DEBUG] [Thread-74816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:53:11.172 [DEBUG] [Thread-74816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:53:11.185 [INFO] [Thread-74816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:53:11.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:53:11.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:53:12.036 [DEBUG] [Thread-74816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:53:12.036 [DEBUG] [Thread-74816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:53:12.084 [DEBUG] [Thread-74816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:53:12.084 [DEBUG] [Thread-74816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:53:12.092 [DEBUG] [Thread-74816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:53:12.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:53:12.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:53:12.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:53:12.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:53:12.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:53:12.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:53:12.123 [DEBUG] [Thread-74816] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:53:16.948 [DEBUG] [Thread-74818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:30.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:30.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:31.995 [DEBUG] [Thread-74819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:53:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:53:42.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:53:42.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:53:42.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 53, 9), 16.59, 31.88, 0.0, 47.37, 14.89, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:53:42.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:53:09
2025-12-12T18:53:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:53:43.167 [DEBUG] [Thread-74820] [transport.py] [_log()] starting thread (client mode): 0xf8157730
2025-12-12T18:53:43.167 [DEBUG] [Thread-74820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:53:43.187 [DEBUG] [Thread-74820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:53:43.188 [INFO] [Thread-74820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:43.191 [DEBUG] [Thread-74820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] client lang: <none>
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] server lang: <none>
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] kex follows: False
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] Compression: none
2025-12-12T18:53:43.192 [DEBUG] [Thread-74820] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:53:43.204 [DEBUG] [Thread-74820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:53:43.204 [DEBUG] [Thread-74820] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:53:43.204 [DEBUG] [Thread-74820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:53:43.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:53:43.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:53:43.248 [DEBUG] [Thread-74820] [transport.py] [_log()] userauth is OK
2025-12-12T18:53:43.248 [DEBUG] [Thread-74820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:53:43.248 [DEBUG] [Thread-74820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:53:43.249 [DEBUG] [Thread-74820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:53:43.249 [DEBUG] [Thread-74820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:53:43.279 [INFO] [Thread-74820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:53:43.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:53:44.067 [DEBUG] [Thread-74820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:53:44.067 [DEBUG] [Thread-74820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:53:44.068 [DEBUG] [Thread-74820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:53:44.109 [DEBUG] [Thread-74820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:53:44.109 [DEBUG] [Thread-74820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:53:44.111 [DEBUG] [Thread-74820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:53:44.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:53:44.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:53:44.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:53:44.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:53:44.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:53:44.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:53:44.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:53:44.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:53:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:53:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.703575 -999.00  +14.90  41.31     37   +0.70 1 1 2 1 1   887    0 12.42 -31.22 ----- 38.7 41.3 305.0 59.6 16.6 -27.7 16.9 -27.3 17.1 -25.4 17.2 -26.1
2025-12-12T18:53:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:53:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:53:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.703575
2025-12-12T18:53:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:53:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:53:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:53:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:53:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:53:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:53:09', tmtdew=16.59, humidity=31.88, cloud=0.0, wind=47.37, temperature=14.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:53:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:53:44.131 [DEBUG] [Thread-74820] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:53:44.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:53:44.216 [DEBUG] [Thread-74823] [transport.py] [_log()] starting thread (client mode): 0xf5703760
2025-12-12T18:53:44.217 [DEBUG] [Thread-74823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:53:44.231 [DEBUG] [Thread-74823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:53:44.231 [INFO] [Thread-74823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] client lang: <none>
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] server lang: <none>
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] kex follows: False
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] Compression: none
2025-12-12T18:53:44.239 [DEBUG] [Thread-74823] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:53:44.297 [DEBUG] [Thread-74823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:53:44.297 [DEBUG] [Thread-74823] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:53:44.298 [DEBUG] [Thread-74823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:53:44.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:53:44.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:53:44.353 [DEBUG] [Thread-74823] [transport.py] [_log()] userauth is OK
2025-12-12T18:53:44.353 [DEBUG] [Thread-74823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:53:44.353 [DEBUG] [Thread-74823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:53:44.353 [DEBUG] [Thread-74823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:53:44.353 [DEBUG] [Thread-74823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:53:44.372 [INFO] [Thread-74823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:53:44.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:53:44.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:53:45.191 [DEBUG] [Thread-74823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:53:45.191 [DEBUG] [Thread-74823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:53:45.239 [DEBUG] [Thread-74823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:53:45.240 [DEBUG] [Thread-74823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:53:45.252 [DEBUG] [Thread-74823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:53:45.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:53:45.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:53:45.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:53:45.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:53:45.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:53:45.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:53:45.291 [DEBUG] [Thread-74823] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:53:47.023 [DEBUG] [Thread-74825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:01.168 [DEBUG] [Thread-74826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:02.059 [DEBUG] [Thread-74827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:15.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:54:15.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:54:15.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:54:16.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 53, 41), 16.08, 33.18, 0.0, 46.51, 14.88, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:54:16.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:53:41
2025-12-12T18:54:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:54:16.316 [DEBUG] [Thread-74828] [transport.py] [_log()] starting thread (client mode): 0xf813e260
2025-12-12T18:54:16.316 [DEBUG] [Thread-74828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:54:16.335 [DEBUG] [Thread-74828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:54:16.336 [INFO] [Thread-74828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:54:16.339 [DEBUG] [Thread-74828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] client lang: <none>
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] server lang: <none>
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] kex follows: False
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] Compression: none
2025-12-12T18:54:16.340 [DEBUG] [Thread-74828] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:54:16.358 [DEBUG] [Thread-74828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:54:16.359 [DEBUG] [Thread-74828] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:54:16.359 [DEBUG] [Thread-74828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:54:16.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:54:16.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:54:16.362 [DEBUG] [Thread-74828] [transport.py] [_log()] userauth is OK
2025-12-12T18:54:16.362 [DEBUG] [Thread-74828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:54:16.362 [DEBUG] [Thread-74828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:54:16.362 [DEBUG] [Thread-74828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:54:16.363 [DEBUG] [Thread-74828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:54:16.385 [INFO] [Thread-74828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:54:16.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:54:17.019 [DEBUG] [Thread-74828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:54:17.019 [DEBUG] [Thread-74828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:54:17.020 [DEBUG] [Thread-74828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:54:17.060 [DEBUG] [Thread-74828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:54:17.060 [DEBUG] [Thread-74828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:54:17.063 [DEBUG] [Thread-74828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:54:17.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:54:17.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:54:17.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:54:17.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:54:17.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:54:17.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:54:17.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:54:17.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:54:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:54:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.703922 -999.00  +14.90  40.08     38   +0.80 1 1 2 1 1   887    0 12.84 -20.57 ----- 41.1 40.1 317.0 48.5 16.6 -27.6 16.9 -26.8 17.0 -25.8 17.2 -26.3
2025-12-12T18:54:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:54:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:54:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.703922
2025-12-12T18:54:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:54:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:54:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:54:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:54:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:54:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:53:41', tmtdew=16.08, humidity=33.18, cloud=0.0, wind=46.51, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:53:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:54:17.090 [DEBUG] [Thread-74828] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:54:17.093 [DEBUG] [Thread-74831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:17.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:54:17.188 [DEBUG] [Thread-74832] [transport.py] [_log()] starting thread (client mode): 0xfabc74c0
2025-12-12T18:54:17.189 [DEBUG] [Thread-74832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:54:17.207 [DEBUG] [Thread-74832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:54:17.207 [INFO] [Thread-74832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:54:17.215 [DEBUG] [Thread-74832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:54:17.215 [DEBUG] [Thread-74832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:54:17.215 [DEBUG] [Thread-74832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:54:17.215 [DEBUG] [Thread-74832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:17.215 [DEBUG] [Thread-74832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] client lang: <none>
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] server lang: <none>
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] kex follows: False
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] Compression: none
2025-12-12T18:54:17.216 [DEBUG] [Thread-74832] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:54:17.274 [DEBUG] [Thread-74832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:54:17.274 [DEBUG] [Thread-74832] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:54:17.275 [DEBUG] [Thread-74832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:54:17.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:54:17.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:54:17.330 [DEBUG] [Thread-74832] [transport.py] [_log()] userauth is OK
2025-12-12T18:54:17.330 [DEBUG] [Thread-74832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:54:17.330 [DEBUG] [Thread-74832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:54:17.330 [DEBUG] [Thread-74832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:54:17.330 [DEBUG] [Thread-74832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:54:17.349 [INFO] [Thread-74832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:54:17.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:54:17.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:54:18.176 [DEBUG] [Thread-74832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:54:18.176 [DEBUG] [Thread-74832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:54:18.224 [DEBUG] [Thread-74832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:54:18.224 [DEBUG] [Thread-74832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:54:18.233 [DEBUG] [Thread-74832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:54:18.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:54:18.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:54:18.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:54:18.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:54:18.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:54:18.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:54:18.271 [DEBUG] [Thread-74832] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:54:30.407 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:30.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:32.132 [DEBUG] [Thread-74834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:47.157 [DEBUG] [Thread-74835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:54:48.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:54:48.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:54:48.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:54:48.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 54, 13), 16.05, 33.21, 0.0, 43.44, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:54:48.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:54:13
2025-12-12T18:54:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:54:49.251 [DEBUG] [Thread-74836] [transport.py] [_log()] starting thread (client mode): 0xfabc6a70
2025-12-12T18:54:49.251 [DEBUG] [Thread-74836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:54:49.271 [DEBUG] [Thread-74836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:54:49.271 [INFO] [Thread-74836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] client lang: <none>
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] server lang: <none>
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] kex follows: False
2025-12-12T18:54:49.275 [DEBUG] [Thread-74836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:54:49.276 [DEBUG] [Thread-74836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:54:49.276 [DEBUG] [Thread-74836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:54:49.276 [DEBUG] [Thread-74836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:54:49.276 [DEBUG] [Thread-74836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:54:49.276 [DEBUG] [Thread-74836] [transport.py] [_log()] Compression: none
2025-12-12T18:54:49.276 [DEBUG] [Thread-74836] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:54:49.293 [DEBUG] [Thread-74836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:54:49.294 [DEBUG] [Thread-74836] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:54:49.294 [DEBUG] [Thread-74836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:54:49.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:54:49.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:54:49.296 [DEBUG] [Thread-74836] [transport.py] [_log()] userauth is OK
2025-12-12T18:54:49.296 [DEBUG] [Thread-74836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:54:49.296 [DEBUG] [Thread-74836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:54:49.296 [DEBUG] [Thread-74836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:54:49.296 [DEBUG] [Thread-74836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:54:49.314 [INFO] [Thread-74836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:54:49.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:54:50.118 [DEBUG] [Thread-74836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:54:50.119 [DEBUG] [Thread-74836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:54:50.119 [DEBUG] [Thread-74836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:54:50.160 [DEBUG] [Thread-74836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:54:50.160 [DEBUG] [Thread-74836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:54:50.164 [DEBUG] [Thread-74836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:54:50.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:54:50.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:54:50.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:54:50.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:54:50.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:54:50.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:54:50.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:54:50.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:54:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:54:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.704269 -999.00  +15.10  34.80     38   +1.00 1 1 2 1 1   887    0 13.01 -10.81 ----- 41.3 34.8 313.2 44.0 16.6 -26.9 16.8 -27.0 17.1 -24.0 17.1 -26.0
2025-12-12T18:54:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:54:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:54:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.704269
2025-12-12T18:54:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:54:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:54:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:54:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:54:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:54:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:54:13', tmtdew=16.05, humidity=33.21, cloud=0.0, wind=43.44, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:54:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:54:50.192 [DEBUG] [Thread-74836] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:54:50.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:54:50.288 [DEBUG] [Thread-74839] [transport.py] [_log()] starting thread (client mode): 0xf5772710
2025-12-12T18:54:50.288 [DEBUG] [Thread-74839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:54:50.303 [DEBUG] [Thread-74839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:54:50.303 [INFO] [Thread-74839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:54:50.310 [DEBUG] [Thread-74839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:54:50.310 [DEBUG] [Thread-74839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:54:50.310 [DEBUG] [Thread-74839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] client lang: <none>
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] server lang: <none>
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] kex follows: False
2025-12-12T18:54:50.311 [DEBUG] [Thread-74839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:54:50.312 [DEBUG] [Thread-74839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:54:50.312 [DEBUG] [Thread-74839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:54:50.312 [DEBUG] [Thread-74839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:54:50.312 [DEBUG] [Thread-74839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:54:50.312 [DEBUG] [Thread-74839] [transport.py] [_log()] Compression: none
2025-12-12T18:54:50.312 [DEBUG] [Thread-74839] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:54:50.367 [DEBUG] [Thread-74839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:54:50.367 [DEBUG] [Thread-74839] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:54:50.368 [DEBUG] [Thread-74839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:54:50.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:54:50.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:54:50.423 [DEBUG] [Thread-74839] [transport.py] [_log()] userauth is OK
2025-12-12T18:54:50.423 [DEBUG] [Thread-74839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:54:50.423 [DEBUG] [Thread-74839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:54:50.424 [DEBUG] [Thread-74839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:54:50.424 [DEBUG] [Thread-74839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:54:50.446 [INFO] [Thread-74839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:54:50.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:54:50.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:54:51.298 [DEBUG] [Thread-74839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:54:51.298 [DEBUG] [Thread-74839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:54:51.346 [DEBUG] [Thread-74839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:54:51.346 [DEBUG] [Thread-74839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:54:51.355 [DEBUG] [Thread-74839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:54:51.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:54:51.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:54:51.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:54:51.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:54:51.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:54:51.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:54:51.389 [DEBUG] [Thread-74839] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:55:01.220 [DEBUG] [Thread-74841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:02.187 [DEBUG] [Thread-74842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:17.230 [DEBUG] [Thread-74843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:21.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:55:21.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:55:21.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:55:22.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 55, 18), 15.7, 34.19, 0.0, 49.9, 14.74, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:55:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:55:18
2025-12-12T18:55:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:55:22.380 [DEBUG] [Thread-74844] [transport.py] [_log()] starting thread (client mode): 0xf8155480
2025-12-12T18:55:22.380 [DEBUG] [Thread-74844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:55:22.400 [DEBUG] [Thread-74844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:55:22.400 [INFO] [Thread-74844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:55:22.403 [DEBUG] [Thread-74844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:55:22.403 [DEBUG] [Thread-74844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:55:22.403 [DEBUG] [Thread-74844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:55:22.403 [DEBUG] [Thread-74844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:22.403 [DEBUG] [Thread-74844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] client lang: <none>
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] server lang: <none>
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] kex follows: False
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] Compression: none
2025-12-12T18:55:22.404 [DEBUG] [Thread-74844] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:55:22.421 [DEBUG] [Thread-74844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:55:22.422 [DEBUG] [Thread-74844] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:55:22.422 [DEBUG] [Thread-74844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:55:22.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:55:22.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:55:22.425 [DEBUG] [Thread-74844] [transport.py] [_log()] userauth is OK
2025-12-12T18:55:22.425 [DEBUG] [Thread-74844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:55:22.425 [DEBUG] [Thread-74844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:55:22.425 [DEBUG] [Thread-74844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:55:22.425 [DEBUG] [Thread-74844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:55:22.443 [INFO] [Thread-74844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:55:22.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:55:23.083 [DEBUG] [Thread-74844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:55:23.083 [DEBUG] [Thread-74844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:55:23.083 [DEBUG] [Thread-74844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:55:23.125 [DEBUG] [Thread-74844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:55:23.125 [DEBUG] [Thread-74844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:55:23.128 [DEBUG] [Thread-74844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:55:23.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:55:23.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:55:23.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:55:23.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:55:23.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:55:23.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:55:23.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:55:23.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.704617 -999.00  +15.10  38.02     38   +1.10 1 1 2 1 1   887    0 13.17 -2.69 ----- 44.5 38.0 307.4 49.2 16.6 -27.3 16.8 -26.8 17.1 -24.5 17.2 -26.0
2025-12-12T18:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:55:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.704617
2025-12-12T18:55:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:55:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:55:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:55:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:55:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:55:23.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:55:18', tmtdew=15.7, humidity=34.19, cloud=0.0, wind=49.9, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:54:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:55:23.153 [DEBUG] [Thread-74844] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:55:23.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:55:23.250 [DEBUG] [Thread-74847] [transport.py] [_log()] starting thread (client mode): 0xf813dab0
2025-12-12T18:55:23.250 [DEBUG] [Thread-74847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:55:23.265 [DEBUG] [Thread-74847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:55:23.265 [INFO] [Thread-74847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:55:23.272 [DEBUG] [Thread-74847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:55:23.272 [DEBUG] [Thread-74847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:55:23.272 [DEBUG] [Thread-74847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] client lang: <none>
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] server lang: <none>
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] kex follows: False
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] Compression: none
2025-12-12T18:55:23.273 [DEBUG] [Thread-74847] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:55:23.332 [DEBUG] [Thread-74847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:55:23.332 [DEBUG] [Thread-74847] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:55:23.333 [DEBUG] [Thread-74847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:55:23.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:55:23.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:55:23.389 [DEBUG] [Thread-74847] [transport.py] [_log()] userauth is OK
2025-12-12T18:55:23.389 [DEBUG] [Thread-74847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:55:23.389 [DEBUG] [Thread-74847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:55:23.389 [DEBUG] [Thread-74847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:55:23.389 [DEBUG] [Thread-74847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:55:23.411 [INFO] [Thread-74847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:55:23.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:55:23.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:55:24.254 [DEBUG] [Thread-74847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:55:24.254 [DEBUG] [Thread-74847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:55:24.302 [DEBUG] [Thread-74847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:55:24.302 [DEBUG] [Thread-74847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:55:24.310 [DEBUG] [Thread-74847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:55:24.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:55: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')
2025-12-12T18:55:24.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:55:24.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:55:24.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:55:24.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:55:24.345 [DEBUG] [Thread-74847] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:55:30.553 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:30.554 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:32.262 [DEBUG] [Thread-74849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:47.309 [DEBUG] [Thread-74850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:55:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:55:54.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:55:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:55:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 55, 50), 15.55, 34.58, 0.0, 45.08, 14.91, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:55:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:55:50
2025-12-12T18:55:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:55:55.322 [DEBUG] [Thread-74851] [transport.py] [_log()] starting thread (client mode): 0xf578b490
2025-12-12T18:55:55.322 [DEBUG] [Thread-74851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:55:55.343 [DEBUG] [Thread-74851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:55:55.343 [INFO] [Thread-74851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:55:55.346 [DEBUG] [Thread-74851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:55:55.346 [DEBUG] [Thread-74851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] client lang: <none>
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] server lang: <none>
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] kex follows: False
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:55:55.347 [DEBUG] [Thread-74851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:55:55.348 [DEBUG] [Thread-74851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:55:55.348 [DEBUG] [Thread-74851] [transport.py] [_log()] Compression: none
2025-12-12T18:55:55.348 [DEBUG] [Thread-74851] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:55:55.366 [DEBUG] [Thread-74851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:55:55.366 [DEBUG] [Thread-74851] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:55:55.367 [DEBUG] [Thread-74851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:55:55.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:55:55.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:55:55.370 [DEBUG] [Thread-74851] [transport.py] [_log()] userauth is OK
2025-12-12T18:55:55.370 [DEBUG] [Thread-74851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:55:55.370 [DEBUG] [Thread-74851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:55:55.370 [DEBUG] [Thread-74851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:55:55.370 [DEBUG] [Thread-74851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:55:55.411 [INFO] [Thread-74851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:55:55.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:55:56.280 [DEBUG] [Thread-74851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:55:56.281 [DEBUG] [Thread-74851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:55:56.281 [DEBUG] [Thread-74851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:55:56.322 [DEBUG] [Thread-74851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:55:56.322 [DEBUG] [Thread-74851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:55:56.325 [DEBUG] [Thread-74851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:55:56.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:55:56.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:55:56.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:55:56.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:55:56.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:55:56.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:55:56.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:55:56.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:55:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:55:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.704964 -999.00  +14.60  54.71     40   +1.30 1 1 2 1 1   887    0 13.29 1.65 ----- 52.1 54.7 312.2 63.0 16.4 -27.9 16.8 -27.3 16.9 -27.9 17.0 -25.9
2025-12-12T18:55:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:55:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:55:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.704964
2025-12-12T18:55:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:55:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:55:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:55:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:55:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:55:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:55:50', tmtdew=15.55, humidity=34.58, cloud=0.0, wind=45.08, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:55:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:55:56.353 [DEBUG] [Thread-74851] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:55:56.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:55:56.449 [DEBUG] [Thread-74854] [transport.py] [_log()] starting thread (client mode): 0xf81c3c70
2025-12-12T18:55:56.449 [DEBUG] [Thread-74854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:55:56.464 [DEBUG] [Thread-74854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:55:56.464 [INFO] [Thread-74854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:55:56.472 [DEBUG] [Thread-74854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:55:56.472 [DEBUG] [Thread-74854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:55:56.472 [DEBUG] [Thread-74854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:55:56.472 [DEBUG] [Thread-74854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:56.472 [DEBUG] [Thread-74854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:55:56.472 [DEBUG] [Thread-74854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] client lang: <none>
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] server lang: <none>
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] kex follows: False
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:55:56.473 [DEBUG] [Thread-74854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:55:56.474 [DEBUG] [Thread-74854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:55:56.474 [DEBUG] [Thread-74854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:55:56.474 [DEBUG] [Thread-74854] [transport.py] [_log()] Compression: none
2025-12-12T18:55:56.474 [DEBUG] [Thread-74854] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:55:56.529 [DEBUG] [Thread-74854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:55:56.529 [DEBUG] [Thread-74854] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:55:56.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:55:56.530 [DEBUG] [Thread-74854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:55:56.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:55:56.585 [DEBUG] [Thread-74854] [transport.py] [_log()] userauth is OK
2025-12-12T18:55:56.585 [DEBUG] [Thread-74854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:55:56.585 [DEBUG] [Thread-74854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:55:56.585 [DEBUG] [Thread-74854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:55:56.586 [DEBUG] [Thread-74854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:55:56.604 [INFO] [Thread-74854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:55:56.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:55:56.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:55:57.437 [DEBUG] [Thread-74854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:55:57.437 [DEBUG] [Thread-74854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:55:57.485 [DEBUG] [Thread-74854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:55:57.485 [DEBUG] [Thread-74854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:55:57.494 [DEBUG] [Thread-74854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:55:57.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:55:57.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:55:57.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:55:57.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:55:57.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:55:57.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:55:57.529 [DEBUG] [Thread-74854] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:56:01.271 [DEBUG] [Thread-74856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:56:02.338 [DEBUG] [Thread-74857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:56:17.395 [DEBUG] [Thread-74858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:56:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:56:27.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:56:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:56:28.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 56, 22), 16.01, 33.47, 0.0, 47.16, 14.83, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:56:28.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:56:22
2025-12-12T18:56:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:56:28.502 [DEBUG] [Thread-74859] [transport.py] [_log()] starting thread (client mode): 0xf57887c0
2025-12-12T18:56:28.502 [DEBUG] [Thread-74859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:56:28.522 [DEBUG] [Thread-74859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:56:28.522 [INFO] [Thread-74859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:56:28.525 [DEBUG] [Thread-74859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] client lang: <none>
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] server lang: <none>
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] kex follows: False
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:56:28.526 [DEBUG] [Thread-74859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:56:28.527 [DEBUG] [Thread-74859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:56:28.527 [DEBUG] [Thread-74859] [transport.py] [_log()] Compression: none
2025-12-12T18:56:28.527 [DEBUG] [Thread-74859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:56:28.544 [DEBUG] [Thread-74859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:56:28.545 [DEBUG] [Thread-74859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:56:28.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:56:28.546 [DEBUG] [Thread-74859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:56:28.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:56:28.549 [DEBUG] [Thread-74859] [transport.py] [_log()] userauth is OK
2025-12-12T18:56:28.549 [DEBUG] [Thread-74859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:56:28.549 [DEBUG] [Thread-74859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:56:28.550 [DEBUG] [Thread-74859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:56:28.550 [DEBUG] [Thread-74859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:56:28.572 [INFO] [Thread-74859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:56:28.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:56:29.188 [DEBUG] [Thread-74859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:56:29.188 [DEBUG] [Thread-74859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:56:29.188 [DEBUG] [Thread-74859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:56:29.230 [DEBUG] [Thread-74859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:56:29.230 [DEBUG] [Thread-74859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:56:29.233 [DEBUG] [Thread-74859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:56:29.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:56:29.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:56:29.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:56:29.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:56:29.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:56:29.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:56:29.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:56:29.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:56:29.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:56:29.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.705311 -999.00  +14.50  44.23     40   +1.30 1 1 2 1 1   887    0 13.30 3.28 ----- 44.9 44.2 310.6 61.9 16.4 -27.2 16.6 -27.1 16.8 -25.5 17.0 -26.3
2025-12-12T18:56:29.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:56:29.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:56:29.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.705311
2025-12-12T18:56:29.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:56:29.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:56:29.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:56:29.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:56:29.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:56:29.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:56:22', tmtdew=16.01, humidity=33.47, cloud=0.0, wind=47.16, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:55:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:56:29.257 [DEBUG] [Thread-74859] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:56:29.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:56:29.364 [DEBUG] [Thread-74862] [transport.py] [_log()] starting thread (client mode): 0xf5788670
2025-12-12T18:56:29.364 [DEBUG] [Thread-74862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:56:29.378 [DEBUG] [Thread-74862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:56:29.378 [INFO] [Thread-74862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:56:29.386 [DEBUG] [Thread-74862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] client lang: <none>
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] server lang: <none>
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] kex follows: False
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:56:29.387 [DEBUG] [Thread-74862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:56:29.388 [DEBUG] [Thread-74862] [transport.py] [_log()] Compression: none
2025-12-12T18:56:29.388 [DEBUG] [Thread-74862] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:56:29.446 [DEBUG] [Thread-74862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:56:29.447 [DEBUG] [Thread-74862] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:56:29.448 [DEBUG] [Thread-74862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:56:29.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:56:29.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:56:29.502 [DEBUG] [Thread-74862] [transport.py] [_log()] userauth is OK
2025-12-12T18:56:29.502 [DEBUG] [Thread-74862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:56:29.502 [DEBUG] [Thread-74862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:56:29.503 [DEBUG] [Thread-74862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:56:29.503 [DEBUG] [Thread-74862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:56:29.521 [INFO] [Thread-74862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:56:29.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:56:29.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:56:30.359 [DEBUG] [Thread-74862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:56:30.359 [DEBUG] [Thread-74862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:56:30.407 [DEBUG] [Thread-74862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:56:30.407 [DEBUG] [Thread-74862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:56:30.416 [DEBUG] [Thread-74862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:56:30.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:56:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:56:30.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:56:30.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:56:30.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:56:30.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:56:30.451 [DEBUG] [Thread-74862] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:56:30.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:56:30.696 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:56:32.422 [DEBUG] [Thread-74864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:56:47.466 [DEBUG] [Thread-74865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:00.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:57:00.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:57:00.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:57:01.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 56, 54), 15.84, 33.75, 0.0, 47.94, 14.73, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:57:01.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:56:54
2025-12-12T18:57:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:57:01.328 [DEBUG] [Thread-74866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:01.420 [DEBUG] [Thread-74867] [transport.py] [_log()] starting thread (client mode): 0xf81e66b0
2025-12-12T18:57:01.420 [DEBUG] [Thread-74867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:57:01.440 [DEBUG] [Thread-74867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:57:01.440 [INFO] [Thread-74867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:57:01.443 [DEBUG] [Thread-74867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:57:01.443 [DEBUG] [Thread-74867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:57:01.443 [DEBUG] [Thread-74867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:57:01.443 [DEBUG] [Thread-74867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:01.443 [DEBUG] [Thread-74867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] client lang: <none>
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] server lang: <none>
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] kex follows: False
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] Compression: none
2025-12-12T18:57:01.444 [DEBUG] [Thread-74867] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:57:01.459 [DEBUG] [Thread-74867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:57:01.459 [DEBUG] [Thread-74867] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:57:01.459 [DEBUG] [Thread-74867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:57:01.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:57:01.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:57:01.460 [DEBUG] [Thread-74867] [transport.py] [_log()] userauth is OK
2025-12-12T18:57:01.460 [DEBUG] [Thread-74867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:57:01.460 [DEBUG] [Thread-74867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:57:01.460 [DEBUG] [Thread-74867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:57:01.460 [DEBUG] [Thread-74867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:57:01.470 [INFO] [Thread-74867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:57:01.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:57:02.236 [DEBUG] [Thread-74867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:57:02.236 [DEBUG] [Thread-74867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:57:02.237 [DEBUG] [Thread-74867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:57:02.278 [DEBUG] [Thread-74867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:57:02.278 [DEBUG] [Thread-74867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:57:02.279 [DEBUG] [Thread-74867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:57:02.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:57:02.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:57:02.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:57:02.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:57:02.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:57:02.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:57:02.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.705659 -999.00  +14.70  37.40     40   +1.30 1 1 2 1 1   887    0 13.45 3.87 ----- 40.7 37.4 298.6 51.5 16.4 -27.0 16.6 -26.7 16.9 -24.6 17.0 -25.6
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.705659
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:57:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:56:54', tmtdew=15.84, humidity=33.75, cloud=0.0, wind=47.94, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:56:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:57:02.297 [DEBUG] [Thread-74867] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:57:02.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:57:02.384 [DEBUG] [Thread-74870] [transport.py] [_log()] starting thread (client mode): 0xf574e530
2025-12-12T18:57:02.384 [DEBUG] [Thread-74870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:57:02.398 [DEBUG] [Thread-74870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:57:02.398 [INFO] [Thread-74870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] client lang: <none>
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] server lang: <none>
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] kex follows: False
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] Compression: none
2025-12-12T18:57:02.406 [DEBUG] [Thread-74870] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:57:02.461 [DEBUG] [Thread-74870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:57:02.461 [DEBUG] [Thread-74870] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:57:02.461 [DEBUG] [Thread-74870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:57:02.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:57:02.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:57:02.494 [DEBUG] [Thread-74872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:02.518 [DEBUG] [Thread-74870] [transport.py] [_log()] userauth is OK
2025-12-12T18:57:02.519 [DEBUG] [Thread-74870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:57:02.519 [DEBUG] [Thread-74870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:57:02.519 [DEBUG] [Thread-74870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:57:02.519 [DEBUG] [Thread-74870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:57:02.533 [INFO] [Thread-74870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:57:02.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:57:02.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:57:03.346 [DEBUG] [Thread-74870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:57:03.346 [DEBUG] [Thread-74870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:57:03.394 [DEBUG] [Thread-74870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:57:03.394 [DEBUG] [Thread-74870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:57:03.402 [DEBUG] [Thread-74870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:57:03.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:57:03.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:57:03.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:57:03.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:57:03.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:57:03.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:57:03.434 [DEBUG] [Thread-74870] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:57:17.537 [DEBUG] [Thread-74873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:30.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:30.838 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:32.565 [DEBUG] [Thread-74874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:57:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:57:33.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:57:33.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:57:34.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 57, 26), 15.58, 34.33, 0.0, 45.79, 14.68, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:57:34.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:57:26
2025-12-12T18:57:34.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:57:34.430 [DEBUG] [Thread-74875] [transport.py] [_log()] starting thread (client mode): 0xf575ef20
2025-12-12T18:57:34.430 [DEBUG] [Thread-74875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:57:34.451 [DEBUG] [Thread-74875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:57:34.451 [INFO] [Thread-74875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:57:34.454 [DEBUG] [Thread-74875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:57:34.454 [DEBUG] [Thread-74875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:57:34.454 [DEBUG] [Thread-74875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:57:34.454 [DEBUG] [Thread-74875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] client lang: <none>
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] server lang: <none>
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] kex follows: False
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:57:34.455 [DEBUG] [Thread-74875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:57:34.456 [DEBUG] [Thread-74875] [transport.py] [_log()] Compression: none
2025-12-12T18:57:34.456 [DEBUG] [Thread-74875] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:57:34.473 [DEBUG] [Thread-74875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:57:34.474 [DEBUG] [Thread-74875] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:57:34.475 [DEBUG] [Thread-74875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:57:34.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:57:34.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:57:34.477 [DEBUG] [Thread-74875] [transport.py] [_log()] userauth is OK
2025-12-12T18:57:34.478 [DEBUG] [Thread-74875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:57:34.478 [DEBUG] [Thread-74875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:57:34.478 [DEBUG] [Thread-74875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:57:34.478 [DEBUG] [Thread-74875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:57:34.502 [INFO] [Thread-74875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:57:34.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:57:35.138 [DEBUG] [Thread-74875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:57:35.139 [DEBUG] [Thread-74875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:57:35.139 [DEBUG] [Thread-74875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:57:35.180 [DEBUG] [Thread-74875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:57:35.180 [DEBUG] [Thread-74875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:57:35.183 [DEBUG] [Thread-74875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:57:35.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:57:35.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:57:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:57:35.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:57:35.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:57:35.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:57:35.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:57:35.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:57:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:57:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.706006 -999.00  +14.60  49.41     41   +1.50 1 1 2 1 1   887    0 13.34 3.47 ----- 51.7 49.4 315.2 57.0 16.3 -27.1 16.6 -26.9 16.8 -25.4 17.0 -26.2
2025-12-12T18:57:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:57:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:57:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.706006
2025-12-12T18:57:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:57:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:57:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:57:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:57:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:57:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:57:26', tmtdew=15.58, humidity=34.33, cloud=0.0, wind=45.79, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:56:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:57:35.208 [DEBUG] [Thread-74875] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:57:35.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:57:35.305 [DEBUG] [Thread-74878] [transport.py] [_log()] starting thread (client mode): 0xf574e050
2025-12-12T18:57:35.305 [DEBUG] [Thread-74878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:57:35.319 [DEBUG] [Thread-74878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:57:35.320 [INFO] [Thread-74878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:57:35.327 [DEBUG] [Thread-74878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:57:35.327 [DEBUG] [Thread-74878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:57:35.327 [DEBUG] [Thread-74878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:57:35.327 [DEBUG] [Thread-74878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] client lang: <none>
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] server lang: <none>
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] kex follows: False
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] Compression: none
2025-12-12T18:57:35.328 [DEBUG] [Thread-74878] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:57:35.387 [DEBUG] [Thread-74878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:57:35.387 [DEBUG] [Thread-74878] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:57:35.388 [DEBUG] [Thread-74878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:57:35.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:57:35.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:57:35.444 [DEBUG] [Thread-74878] [transport.py] [_log()] userauth is OK
2025-12-12T18:57:35.444 [DEBUG] [Thread-74878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:57:35.444 [DEBUG] [Thread-74878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:57:35.444 [DEBUG] [Thread-74878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:57:35.444 [DEBUG] [Thread-74878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:57:35.463 [INFO] [Thread-74878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:57:35.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:57:35.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:57:36.299 [DEBUG] [Thread-74878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:57:36.300 [DEBUG] [Thread-74878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:57:36.348 [DEBUG] [Thread-74878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:57:36.348 [DEBUG] [Thread-74878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:57:36.357 [DEBUG] [Thread-74878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:57:36.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:57:36.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:57:36.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:57:36.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:57:36.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:57:36.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:57:36.394 [DEBUG] [Thread-74878] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:57:47.596 [DEBUG] [Thread-74880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:01.383 [DEBUG] [Thread-74881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:02.639 [DEBUG] [Thread-74882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:58:06.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:58:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:58:07.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 57, 58), 15.59, 34.1, 0.0, 42.42, 14.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:58:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:57:58
2025-12-12T18:58:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:58:07.374 [DEBUG] [Thread-74883] [transport.py] [_log()] starting thread (client mode): 0xf81c1000
2025-12-12T18:58:07.374 [DEBUG] [Thread-74883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:58:07.396 [DEBUG] [Thread-74883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:58:07.396 [INFO] [Thread-74883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] client lang: <none>
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] server lang: <none>
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] kex follows: False
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:58:07.399 [DEBUG] [Thread-74883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:58:07.400 [DEBUG] [Thread-74883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:58:07.400 [DEBUG] [Thread-74883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:58:07.400 [DEBUG] [Thread-74883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:58:07.400 [DEBUG] [Thread-74883] [transport.py] [_log()] Compression: none
2025-12-12T18:58:07.400 [DEBUG] [Thread-74883] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:58:07.420 [DEBUG] [Thread-74883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:58:07.420 [DEBUG] [Thread-74883] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:58:07.421 [DEBUG] [Thread-74883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:58:07.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:58:07.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:58:07.423 [DEBUG] [Thread-74883] [transport.py] [_log()] userauth is OK
2025-12-12T18:58:07.423 [DEBUG] [Thread-74883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:58:07.423 [DEBUG] [Thread-74883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:58:07.423 [DEBUG] [Thread-74883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:58:07.423 [DEBUG] [Thread-74883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:58:07.445 [INFO] [Thread-74883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:58:07.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:58:08.273 [DEBUG] [Thread-74883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:58:08.273 [DEBUG] [Thread-74883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:58:08.274 [DEBUG] [Thread-74883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:58:08.314 [DEBUG] [Thread-74883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:58:08.314 [DEBUG] [Thread-74883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:58:08.317 [DEBUG] [Thread-74883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:58:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:58:08.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:58:08.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:58:08.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:58:08.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:58:08.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:58:08.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:58:08.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:58:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:58:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.706700 -999.00  +14.30  43.28     42   +1.60 1 1 2 1 1   887    0 13.35 0.62 ----- 52.9 43.3 312.8 62.2 16.2 -26.7 16.4 -26.9 16.6 -24.2 16.8 -25.5
2025-12-12T18:58:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:58:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:58:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.706700
2025-12-12T18:58:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:58:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:58:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:58:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:58:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:58:08.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:57:58', tmtdew=15.59, humidity=34.1, cloud=0.0, wind=42.42, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:57:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:58:08.343 [DEBUG] [Thread-74883] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:58:08.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:58:08.439 [DEBUG] [Thread-74886] [transport.py] [_log()] starting thread (client mode): 0xf5771330
2025-12-12T18:58:08.439 [DEBUG] [Thread-74886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:58:08.458 [DEBUG] [Thread-74886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:58:08.458 [INFO] [Thread-74886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] client lang: <none>
2025-12-12T18:58:08.466 [DEBUG] [Thread-74886] [transport.py] [_log()] server lang: <none>
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] kex follows: False
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] Compression: none
2025-12-12T18:58:08.467 [DEBUG] [Thread-74886] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:58:08.524 [DEBUG] [Thread-74886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:58:08.524 [DEBUG] [Thread-74886] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:58:08.525 [DEBUG] [Thread-74886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:58:08.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:58:08.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:58:08.580 [DEBUG] [Thread-74886] [transport.py] [_log()] userauth is OK
2025-12-12T18:58:08.580 [DEBUG] [Thread-74886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:58:08.581 [DEBUG] [Thread-74886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:58:08.581 [DEBUG] [Thread-74886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:58:08.581 [DEBUG] [Thread-74886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:58:08.600 [INFO] [Thread-74886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:58:08.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:58:08.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:58:09.461 [DEBUG] [Thread-74886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:58:09.461 [DEBUG] [Thread-74886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:58:09.509 [DEBUG] [Thread-74886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:58:09.509 [DEBUG] [Thread-74886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:58:09.518 [DEBUG] [Thread-74886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:58:09.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:58:09.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:58:09.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:58:09.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:58:09.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:58:09.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:58:09.552 [DEBUG] [Thread-74886] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:58:17.666 [DEBUG] [Thread-74888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:30.988 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:30.989 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:32.702 [DEBUG] [Thread-74889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:58:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:58:39.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:58:39.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:58:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 58, 30), 15.59, 34.11, 0.0, 40.78, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:58:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:58:30
2025-12-12T18:58:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:58:40.538 [DEBUG] [Thread-74890] [transport.py] [_log()] starting thread (client mode): 0xf574ce20
2025-12-12T18:58:40.538 [DEBUG] [Thread-74890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:58:40.558 [DEBUG] [Thread-74890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:58:40.558 [INFO] [Thread-74890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:58:40.561 [DEBUG] [Thread-74890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:58:40.561 [DEBUG] [Thread-74890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:58:40.561 [DEBUG] [Thread-74890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:58:40.561 [DEBUG] [Thread-74890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:40.561 [DEBUG] [Thread-74890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] client lang: <none>
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] server lang: <none>
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] kex follows: False
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] Compression: none
2025-12-12T18:58:40.562 [DEBUG] [Thread-74890] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:58:40.579 [DEBUG] [Thread-74890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:58:40.580 [DEBUG] [Thread-74890] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:58:40.580 [DEBUG] [Thread-74890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:58:40.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:58:40.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:58:40.582 [DEBUG] [Thread-74890] [transport.py] [_log()] userauth is OK
2025-12-12T18:58:40.582 [DEBUG] [Thread-74890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:58:40.582 [DEBUG] [Thread-74890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:58:40.582 [DEBUG] [Thread-74890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:58:40.582 [DEBUG] [Thread-74890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:58:40.603 [INFO] [Thread-74890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:58:40.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:58:41.191 [DEBUG] [Thread-74890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:58:41.192 [DEBUG] [Thread-74890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:58:41.192 [DEBUG] [Thread-74890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:58:41.233 [DEBUG] [Thread-74890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:58:41.233 [DEBUG] [Thread-74890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:58:41.236 [DEBUG] [Thread-74890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:58:41.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:58:41.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:58:41.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:58:41.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:58:41.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:58:41.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:58:41.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:58:41.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:58:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:58:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.707047 -999.00  +14.40  47.68     41   +1.50 1 1 2 1 1   887    0 13.38 -0.09 ----- 44.2 47.7 313.0 56.2 16.1 -27.0 16.4 -26.2 16.6 -23.9 16.7 -25.7
2025-12-12T18:58:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:58:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:58:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.707047
2025-12-12T18:58:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:58:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:58:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:58:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:58:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:58:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:58:30', tmtdew=15.59, humidity=34.11, cloud=0.0, wind=40.78, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:58:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:58:41.264 [DEBUG] [Thread-74890] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:58:41.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:58:41.368 [DEBUG] [Thread-74893] [transport.py] [_log()] starting thread (client mode): 0xf574c970
2025-12-12T18:58:41.368 [DEBUG] [Thread-74893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:58:41.382 [DEBUG] [Thread-74893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:58:41.383 [INFO] [Thread-74893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] client lang: <none>
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] server lang: <none>
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] kex follows: False
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] Compression: none
2025-12-12T18:58:41.390 [DEBUG] [Thread-74893] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:58:41.449 [DEBUG] [Thread-74893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:58:41.450 [DEBUG] [Thread-74893] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:58:41.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:58:41.451 [DEBUG] [Thread-74893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:58:41.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:58:41.505 [DEBUG] [Thread-74893] [transport.py] [_log()] userauth is OK
2025-12-12T18:58:41.505 [DEBUG] [Thread-74893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:58:41.505 [DEBUG] [Thread-74893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:58:41.506 [DEBUG] [Thread-74893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:58:41.506 [DEBUG] [Thread-74893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:58:41.524 [INFO] [Thread-74893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:58:41.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:58:41.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:58:42.365 [DEBUG] [Thread-74893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:58:42.365 [DEBUG] [Thread-74893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:58:42.413 [DEBUG] [Thread-74893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:58:42.413 [DEBUG] [Thread-74893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:58:42.422 [DEBUG] [Thread-74893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:58:42.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:58:42.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:58:42.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:58:42.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:58:42.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:58:42.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:58:42.457 [DEBUG] [Thread-74893] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:58:47.734 [DEBUG] [Thread-74895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:01.436 [DEBUG] [Thread-74896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:02.783 [DEBUG] [Thread-74897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:59:12.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:59:12.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:59:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 59, 2), 15.61, 34.05, 0.0, 44.04, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T18:59:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:59:02
2025-12-12T18:59:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:59:13.454 [DEBUG] [Thread-74898] [transport.py] [_log()] starting thread (client mode): 0xf574f2b0
2025-12-12T18:59:13.454 [DEBUG] [Thread-74898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:59:13.475 [DEBUG] [Thread-74898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:59:13.475 [INFO] [Thread-74898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:59:13.478 [DEBUG] [Thread-74898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:59:13.478 [DEBUG] [Thread-74898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:59:13.478 [DEBUG] [Thread-74898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:59:13.478 [DEBUG] [Thread-74898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] client lang: <none>
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] server lang: <none>
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] kex follows: False
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] Compression: none
2025-12-12T18:59:13.479 [DEBUG] [Thread-74898] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:59:13.496 [DEBUG] [Thread-74898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:59:13.497 [DEBUG] [Thread-74898] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:59:13.497 [DEBUG] [Thread-74898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:59:13.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:59:13.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:59:13.499 [DEBUG] [Thread-74898] [transport.py] [_log()] userauth is OK
2025-12-12T18:59:13.499 [DEBUG] [Thread-74898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:59:13.499 [DEBUG] [Thread-74898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:59:13.499 [DEBUG] [Thread-74898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:59:13.499 [DEBUG] [Thread-74898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:59:13.518 [INFO] [Thread-74898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:59:13.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:59:14.319 [DEBUG] [Thread-74898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:59:14.319 [DEBUG] [Thread-74898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:59:14.320 [DEBUG] [Thread-74898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:59:14.360 [DEBUG] [Thread-74898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:59:14.360 [DEBUG] [Thread-74898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:59:14.363 [DEBUG] [Thread-74898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:59:14.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:59:14.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:59:14.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:59:14.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:59:14.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:59:14.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:59:14.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:59:14.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:59:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:59:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.707394 -999.00  +14.60  30.13     40   +1.30 1 1 2 1 1   887    0 13.33 1.00 ----- 42.2 30.1 311.6 47.3 16.1 -26.4 16.4 -26.4 16.6 -23.9 16.7 -25.6
2025-12-12T18:59:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:59:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:59:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.707394
2025-12-12T18:59:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:59:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:59:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:59:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:59:14.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:59:14.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:59:02', tmtdew=15.61, humidity=34.05, cloud=0.0, wind=44.04, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:58:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:59:14.388 [DEBUG] [Thread-74898] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:59:14.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:59:14.485 [DEBUG] [Thread-74901] [transport.py] [_log()] starting thread (client mode): 0xfabc59c0
2025-12-12T18:59:14.485 [DEBUG] [Thread-74901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:59:14.500 [DEBUG] [Thread-74901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:59:14.500 [INFO] [Thread-74901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:59:14.509 [DEBUG] [Thread-74901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:59:14.509 [DEBUG] [Thread-74901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:59:14.509 [DEBUG] [Thread-74901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:59:14.509 [DEBUG] [Thread-74901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:14.509 [DEBUG] [Thread-74901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] client lang: <none>
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] server lang: <none>
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] kex follows: False
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] Compression: none
2025-12-12T18:59:14.510 [DEBUG] [Thread-74901] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:59:14.565 [DEBUG] [Thread-74901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:59:14.566 [DEBUG] [Thread-74901] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:59:14.566 [DEBUG] [Thread-74901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:59:14.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:59:14.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:59:14.622 [DEBUG] [Thread-74901] [transport.py] [_log()] userauth is OK
2025-12-12T18:59:14.622 [DEBUG] [Thread-74901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:59:14.622 [DEBUG] [Thread-74901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:59:14.622 [DEBUG] [Thread-74901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:59:14.623 [DEBUG] [Thread-74901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:59:14.642 [INFO] [Thread-74901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:59:14.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:59:14.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:59:15.469 [DEBUG] [Thread-74901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:59:15.469 [DEBUG] [Thread-74901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:59:15.517 [DEBUG] [Thread-74901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:59:15.517 [DEBUG] [Thread-74901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:59:15.526 [DEBUG] [Thread-74901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:59:15.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:59:15.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:59: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
2025-12-12T18:59:15.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:59:15.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:59:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:59:15.561 [DEBUG] [Thread-74901] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:59:17.809 [DEBUG] [Thread-74903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:31.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:31.131 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:32.857 [DEBUG] [Thread-74904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T18:59:45.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T18:59:45.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T18:59:46.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 18, 59, 34), 15.93, 33.61, 0.0, 51.91, 14.61, 0, 0, 0, 2, 1, 0),)
2025-12-12T18:59:46.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 18:59:34
2025-12-12T18:59:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T18:59:46.526 [DEBUG] [Thread-74905] [transport.py] [_log()] starting thread (client mode): 0xfabc6a10
2025-12-12T18:59:46.526 [DEBUG] [Thread-74905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:59:46.547 [DEBUG] [Thread-74905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T18:59:46.547 [INFO] [Thread-74905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] client lang: <none>
2025-12-12T18:59:46.550 [DEBUG] [Thread-74905] [transport.py] [_log()] server lang: <none>
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] kex follows: False
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] Compression: none
2025-12-12T18:59:46.551 [DEBUG] [Thread-74905] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:59:46.568 [DEBUG] [Thread-74905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:59:46.569 [DEBUG] [Thread-74905] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:59:46.569 [DEBUG] [Thread-74905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T18:59:46.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T18:59:46.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:59:46.571 [DEBUG] [Thread-74905] [transport.py] [_log()] userauth is OK
2025-12-12T18:59:46.571 [DEBUG] [Thread-74905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:59:46.571 [DEBUG] [Thread-74905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:59:46.571 [DEBUG] [Thread-74905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T18:59:46.571 [DEBUG] [Thread-74905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:59:46.594 [INFO] [Thread-74905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:59:46.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:59:47.208 [DEBUG] [Thread-74905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:59:47.209 [DEBUG] [Thread-74905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:59:47.209 [DEBUG] [Thread-74905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T18:59:47.250 [DEBUG] [Thread-74905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:59:47.250 [DEBUG] [Thread-74905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:59:47.252 [DEBUG] [Thread-74905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:59:47.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:59:47.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T18:59:47.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T18:59:47.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T18:59:47.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:59:47.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T18:59:47.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:59:47.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:59:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T18:59:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.707742 -999.00  +14.60  41.11     39   +1.00 1 1 2 1 1   887    0 13.27 3.64 ----- 43.3 41.1 315.6 49.7 16.1 -27.0 16.4 -26.4 16.5 -25.7 16.6 -25.8
2025-12-12T18:59:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T18:59:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T18:59:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.707742
2025-12-12T18:59:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T18:59:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T18:59:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T18:59:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T18:59:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T18:59:47.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T18:59:34', tmtdew=15.93, humidity=33.61, cloud=0.0, wind=51.91, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:59:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T18:59:47.278 [DEBUG] [Thread-74905] [transport.py] [_log()] EOF in transport thread
2025-12-12T18:59:47.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T18:59:47.372 [DEBUG] [Thread-74908] [transport.py] [_log()] starting thread (client mode): 0xf813f130
2025-12-12T18:59:47.372 [DEBUG] [Thread-74908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T18:59:47.386 [DEBUG] [Thread-74908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T18:59:47.386 [INFO] [Thread-74908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:47.394 [DEBUG] [Thread-74908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] client lang: <none>
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] server lang: <none>
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] kex follows: False
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T18:59:47.395 [DEBUG] [Thread-74908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T18:59:47.396 [DEBUG] [Thread-74908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T18:59:47.396 [DEBUG] [Thread-74908] [transport.py] [_log()] Compression: none
2025-12-12T18:59:47.396 [DEBUG] [Thread-74908] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T18:59:47.451 [DEBUG] [Thread-74908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T18:59:47.452 [DEBUG] [Thread-74908] [transport.py] [_log()] Switch to new keys ...
2025-12-12T18:59:47.452 [DEBUG] [Thread-74908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T18:59:47.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T18:59:47.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T18:59:47.506 [DEBUG] [Thread-74908] [transport.py] [_log()] userauth is OK
2025-12-12T18:59:47.506 [DEBUG] [Thread-74908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T18:59:47.507 [DEBUG] [Thread-74908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T18:59:47.507 [DEBUG] [Thread-74908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T18:59:47.507 [DEBUG] [Thread-74908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T18:59:47.523 [INFO] [Thread-74908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T18:59:47.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T18:59:47.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T18:59:47.882 [DEBUG] [Thread-74910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T18:59:48.370 [DEBUG] [Thread-74908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T18:59:48.370 [DEBUG] [Thread-74908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T18:59:48.417 [DEBUG] [Thread-74908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T18:59:48.418 [DEBUG] [Thread-74908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T18:59:48.426 [DEBUG] [Thread-74908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T18:59:48.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T18:59:48.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T18:59:48.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T18:59:48.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T18:59:48.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T18:59:48.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T18:59:48.460 [DEBUG] [Thread-74908] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:00:01.498 [DEBUG] [Thread-74911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:02.928 [DEBUG] [Thread-74912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:17.959 [DEBUG] [Thread-74913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:00:18.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:00:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:00:19.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 0, 6), 15.94, 33.62, 0.0, 49.76, 14.69, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:00:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:00:06
2025-12-12T19:00:19.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:00:19.434 [DEBUG] [Thread-74914] [transport.py] [_log()] starting thread (client mode): 0xf5797610
2025-12-12T19:00:19.434 [DEBUG] [Thread-74914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:00:19.449 [DEBUG] [Thread-74914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:00:19.449 [INFO] [Thread-74914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:00:19.452 [DEBUG] [Thread-74914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:00:19.452 [DEBUG] [Thread-74914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] client lang: <none>
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] server lang: <none>
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] kex follows: False
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] Compression: none
2025-12-12T19:00:19.453 [DEBUG] [Thread-74914] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:00:19.474 [DEBUG] [Thread-74914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:00:19.474 [DEBUG] [Thread-74914] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:00:19.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:00:19.476 [DEBUG] [Thread-74914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:00:19.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:00:19.478 [DEBUG] [Thread-74914] [transport.py] [_log()] userauth is OK
2025-12-12T19:00:19.479 [DEBUG] [Thread-74914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:00:19.479 [DEBUG] [Thread-74914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:00:19.479 [DEBUG] [Thread-74914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:00:19.479 [DEBUG] [Thread-74914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:00:19.500 [INFO] [Thread-74914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:00:19.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:00:20.146 [DEBUG] [Thread-74914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:00:20.146 [DEBUG] [Thread-74914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:00:20.147 [DEBUG] [Thread-74914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:00:20.187 [DEBUG] [Thread-74914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:00:20.187 [DEBUG] [Thread-74914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:00:20.190 [DEBUG] [Thread-74914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:00:20.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:00:20.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:00:20.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:00:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:00:20.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:00:20.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:00:20.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:00:20.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:00:20.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:00:20.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.708089 -999.00  +14.30  47.20     39   +0.50 1 1 2 1 1   887    0 13.42 8.26 ----- 46.5 47.2 311.4 61.4 16.0 -26.9 16.3 -26.9 16.4 -24.4 16.6 -25.8
2025-12-12T19:00:20.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:00:20.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:00:20.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.708089
2025-12-12T19:00:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:00:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:00:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:00:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:00:20.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:00:20.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:00:06', tmtdew=15.94, humidity=33.62, cloud=0.0, wind=49.76, temperature=14.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T16:59:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:00:20.215 [DEBUG] [Thread-74914] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:00:20.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:00:20.311 [DEBUG] [Thread-74917] [transport.py] [_log()] starting thread (client mode): 0xf57971f0
2025-12-12T19:00:20.311 [DEBUG] [Thread-74917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:00:20.330 [DEBUG] [Thread-74917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:00:20.331 [INFO] [Thread-74917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:00:20.341 [DEBUG] [Thread-74917] [transport.py] [_log()] client lang: <none>
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] server lang: <none>
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] kex follows: False
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] Compression: none
2025-12-12T19:00:20.342 [DEBUG] [Thread-74917] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:00:20.401 [DEBUG] [Thread-74917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:00:20.401 [DEBUG] [Thread-74917] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:00:20.401 [DEBUG] [Thread-74917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:00:20.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:00:20.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:00:20.460 [DEBUG] [Thread-74917] [transport.py] [_log()] userauth is OK
2025-12-12T19:00:20.460 [DEBUG] [Thread-74917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:00:20.460 [DEBUG] [Thread-74917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:00:20.460 [DEBUG] [Thread-74917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:00:20.460 [DEBUG] [Thread-74917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:00:20.480 [INFO] [Thread-74917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:00:20.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:00:20.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:00:21.314 [DEBUG] [Thread-74917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:00:21.314 [DEBUG] [Thread-74917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:00:21.362 [DEBUG] [Thread-74917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:00:21.362 [DEBUG] [Thread-74917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:00:21.371 [DEBUG] [Thread-74917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:00:21.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:00:21.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:00:21.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:00:21.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:00:21.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:00:21.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:00:21.405 [DEBUG] [Thread-74917] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:00:31.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:31.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:32.988 [DEBUG] [Thread-74919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:48.024 [DEBUG] [Thread-74920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:00:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:00:51.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:00:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:00:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 0, 38), 16.09, 33.0, 0.0, 46.24, 14.69, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:00:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:00:38
2025-12-12T19:00:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:00:52.427 [DEBUG] [Thread-74921] [transport.py] [_log()] starting thread (client mode): 0xf574f550
2025-12-12T19:00:52.427 [DEBUG] [Thread-74921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:00:52.440 [DEBUG] [Thread-74921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:00:52.440 [INFO] [Thread-74921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] client lang: <none>
2025-12-12T19:00:52.443 [DEBUG] [Thread-74921] [transport.py] [_log()] server lang: <none>
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] kex follows: False
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] Compression: none
2025-12-12T19:00:52.444 [DEBUG] [Thread-74921] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:00:52.460 [DEBUG] [Thread-74921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:00:52.460 [DEBUG] [Thread-74921] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:00:52.460 [DEBUG] [Thread-74921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:00:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:00:52.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:00:52.461 [DEBUG] [Thread-74921] [transport.py] [_log()] userauth is OK
2025-12-12T19:00:52.461 [DEBUG] [Thread-74921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:00:52.461 [DEBUG] [Thread-74921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:00:52.461 [DEBUG] [Thread-74921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:00:52.461 [DEBUG] [Thread-74921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:00:52.476 [INFO] [Thread-74921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:00:52.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:00:53.128 [DEBUG] [Thread-74921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:00:53.128 [DEBUG] [Thread-74921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:00:53.128 [DEBUG] [Thread-74921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:00:53.170 [DEBUG] [Thread-74921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:00:53.170 [DEBUG] [Thread-74921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:00:53.172 [DEBUG] [Thread-74921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:00:53.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:00:53.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:00:53.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:00:53.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:00:53.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:00:53.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:00:53.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:00:53.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:00:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:00:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.708436 -999.00  +14.50  44.20     38   +0.60 1 1 2 1 1   887    0 13.91 15.20 ----- 36.8 44.2 312.4 51.4 16.0 -26.6 16.3 -26.3 16.4 -24.8 16.6 -25.5
2025-12-12T19:00:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:00:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:00:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.708436
2025-12-12T19:00:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:00:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:00:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:00:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:00:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:00:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:00:38', tmtdew=16.09, humidity=33.0, cloud=0.0, wind=46.24, temperature=14.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:00:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:00:53.193 [DEBUG] [Thread-74921] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:00:53.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:00:53.297 [DEBUG] [Thread-74924] [transport.py] [_log()] starting thread (client mode): 0xf574f790
2025-12-12T19:00:53.297 [DEBUG] [Thread-74924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:00:53.311 [DEBUG] [Thread-74924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:00:53.312 [INFO] [Thread-74924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] client lang: <none>
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] server lang: <none>
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] kex follows: False
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] Compression: none
2025-12-12T19:00:53.319 [DEBUG] [Thread-74924] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:00:53.375 [DEBUG] [Thread-74924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:00:53.375 [DEBUG] [Thread-74924] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:00:53.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:00:53.375 [DEBUG] [Thread-74924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:00:53.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:00:53.432 [DEBUG] [Thread-74924] [transport.py] [_log()] userauth is OK
2025-12-12T19:00:53.432 [DEBUG] [Thread-74924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:00:53.432 [DEBUG] [Thread-74924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:00:53.432 [DEBUG] [Thread-74924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:00:53.432 [DEBUG] [Thread-74924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:00:53.447 [INFO] [Thread-74924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:00:53.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:00:53.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:00:54.269 [DEBUG] [Thread-74924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:00:54.269 [DEBUG] [Thread-74924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:00:54.317 [DEBUG] [Thread-74924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:00:54.317 [DEBUG] [Thread-74924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:00:54.326 [DEBUG] [Thread-74924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:00:54.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:00:54.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:00:54.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:00:54.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:00:54.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:00:54.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:00:54.358 [DEBUG] [Thread-74924] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:01:01.559 [DEBUG] [Thread-74926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:03.046 [DEBUG] [Thread-74927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:18.088 [DEBUG] [Thread-74928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:01:24.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:01:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:01:25.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 1, 10), 15.99, 33.18, 0.0, 44.43, 14.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:01:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:01:10
2025-12-12T19:01:25.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:01:25.338 [DEBUG] [Thread-74929] [transport.py] [_log()] starting thread (client mode): 0xf813f5b0
2025-12-12T19:01:25.338 [DEBUG] [Thread-74929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:01:25.359 [DEBUG] [Thread-74929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:01:25.359 [INFO] [Thread-74929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:01:25.362 [DEBUG] [Thread-74929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] client lang: <none>
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] server lang: <none>
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] kex follows: False
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:01:25.363 [DEBUG] [Thread-74929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:01:25.364 [DEBUG] [Thread-74929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:01:25.364 [DEBUG] [Thread-74929] [transport.py] [_log()] Compression: none
2025-12-12T19:01:25.364 [DEBUG] [Thread-74929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:01:25.382 [DEBUG] [Thread-74929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:01:25.382 [DEBUG] [Thread-74929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:01:25.383 [DEBUG] [Thread-74929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:01:25.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:01:25.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:01:25.385 [DEBUG] [Thread-74929] [transport.py] [_log()] userauth is OK
2025-12-12T19:01:25.385 [DEBUG] [Thread-74929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:01:25.385 [DEBUG] [Thread-74929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:01:25.385 [DEBUG] [Thread-74929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:01:25.385 [DEBUG] [Thread-74929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:01:25.403 [INFO] [Thread-74929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:01:25.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:01:26.169 [DEBUG] [Thread-74929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:01:26.169 [DEBUG] [Thread-74929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:01:26.169 [DEBUG] [Thread-74929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:01:26.210 [DEBUG] [Thread-74929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:01:26.210 [DEBUG] [Thread-74929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:01:26.212 [DEBUG] [Thread-74929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:01:26.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:01:26.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:01:26.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:01:26.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:01:26.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:01:26.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:01:26.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:01:26.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:01:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:01:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.708783 -999.00  +14.60  37.17     38   +0.50 1 1 2 1 1   887    0 13.66 19.91 ----- 38.2 37.2 323.0 48.4 16.0 -26.4 16.3 -26.3 16.4 -24.1 16.6 -25.3
2025-12-12T19:01:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:01:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:01:26.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.708783
2025-12-12T19:01:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:01:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:01:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:01:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:01:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:01:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:01:10', tmtdew=15.99, humidity=33.18, cloud=0.0, wind=44.43, temperature=14.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:00:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:01:26.237 [DEBUG] [Thread-74929] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:01:26.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:01:26.324 [DEBUG] [Thread-74932] [transport.py] [_log()] starting thread (client mode): 0xf5788df0
2025-12-12T19:01:26.324 [DEBUG] [Thread-74932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:01:26.341 [DEBUG] [Thread-74932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:01:26.342 [INFO] [Thread-74932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:01:26.349 [DEBUG] [Thread-74932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:01:26.349 [DEBUG] [Thread-74932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:01:26.349 [DEBUG] [Thread-74932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:01:26.349 [DEBUG] [Thread-74932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] client lang: <none>
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] server lang: <none>
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] kex follows: False
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:01:26.350 [DEBUG] [Thread-74932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:01:26.351 [DEBUG] [Thread-74932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:01:26.351 [DEBUG] [Thread-74932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:01:26.351 [DEBUG] [Thread-74932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:01:26.351 [DEBUG] [Thread-74932] [transport.py] [_log()] Compression: none
2025-12-12T19:01:26.351 [DEBUG] [Thread-74932] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:01:26.409 [DEBUG] [Thread-74932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:01:26.410 [DEBUG] [Thread-74932] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:01:26.411 [DEBUG] [Thread-74932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:01:26.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:01:26.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:01:26.464 [DEBUG] [Thread-74932] [transport.py] [_log()] userauth is OK
2025-12-12T19:01:26.465 [DEBUG] [Thread-74932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:01:26.465 [DEBUG] [Thread-74932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:01:26.465 [DEBUG] [Thread-74932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:01:26.465 [DEBUG] [Thread-74932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:01:26.486 [INFO] [Thread-74932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:01:26.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:01:26.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:01:27.361 [DEBUG] [Thread-74932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:01:27.361 [DEBUG] [Thread-74932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:01:27.408 [DEBUG] [Thread-74932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:01:27.409 [DEBUG] [Thread-74932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:01:27.417 [DEBUG] [Thread-74932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:01:27.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:01:27.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:01:27.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:01:27.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:01:27.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:01:27.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:01:27.450 [DEBUG] [Thread-74932] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:01:31.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:31.415 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:33.123 [DEBUG] [Thread-74934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:48.159 [DEBUG] [Thread-74935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:01:57.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:01:57.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:01:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:01:58.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 1, 42), 15.67, 33.86, 0.0, 46.49, 14.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:01:58.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:01:42
2025-12-12T19:01:58.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:01:58.400 [DEBUG] [Thread-74936] [transport.py] [_log()] starting thread (client mode): 0xf574fc70
2025-12-12T19:01:58.400 [DEBUG] [Thread-74936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:01:58.418 [DEBUG] [Thread-74936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:01:58.418 [INFO] [Thread-74936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] client lang: <none>
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] server lang: <none>
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] kex follows: False
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:01:58.422 [DEBUG] [Thread-74936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:01:58.423 [DEBUG] [Thread-74936] [transport.py] [_log()] Compression: none
2025-12-12T19:01:58.423 [DEBUG] [Thread-74936] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:01:58.443 [DEBUG] [Thread-74936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:01:58.443 [DEBUG] [Thread-74936] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:01:58.444 [DEBUG] [Thread-74936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:01:58.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:01:58.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:01:58.446 [DEBUG] [Thread-74936] [transport.py] [_log()] userauth is OK
2025-12-12T19:01:58.446 [DEBUG] [Thread-74936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:01:58.446 [DEBUG] [Thread-74936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:01:58.446 [DEBUG] [Thread-74936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:01:58.446 [DEBUG] [Thread-74936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:01:58.481 [INFO] [Thread-74936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:01:58.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:01:59.124 [DEBUG] [Thread-74936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:01:59.124 [DEBUG] [Thread-74936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:01:59.124 [DEBUG] [Thread-74936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:01:59.165 [DEBUG] [Thread-74936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:01:59.165 [DEBUG] [Thread-74936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:01:59.168 [DEBUG] [Thread-74936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:01:59.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:01:59.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:01:59.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:01:59.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:01:59.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:01:59.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:01:59.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:01:59.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:01:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:01:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.709131 -999.00  +14.70  30.31     38   +0.80 1 1 2 1 1   887    0 13.75 23.58 ----- 38.1 30.3 314.2 47.0 16.0 -26.6 16.3 -26.0 16.4 -24.5 16.6 -25.4
2025-12-12T19:01:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:01:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:01:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.709131
2025-12-12T19:01:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:01:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:01:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:01:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:01:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:01:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:01:42', tmtdew=15.67, humidity=33.86, cloud=0.0, wind=46.49, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:01:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:01:59.193 [DEBUG] [Thread-74936] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:01:59.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:01:59.290 [DEBUG] [Thread-74939] [transport.py] [_log()] starting thread (client mode): 0xf574d900
2025-12-12T19:01:59.290 [DEBUG] [Thread-74939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:01:59.305 [DEBUG] [Thread-74939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:01:59.305 [INFO] [Thread-74939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:01:59.313 [DEBUG] [Thread-74939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:01:59.313 [DEBUG] [Thread-74939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:01:59.313 [DEBUG] [Thread-74939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:01:59.313 [DEBUG] [Thread-74939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:59.313 [DEBUG] [Thread-74939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:01:59.313 [DEBUG] [Thread-74939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] client lang: <none>
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] server lang: <none>
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] kex follows: False
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] Compression: none
2025-12-12T19:01:59.314 [DEBUG] [Thread-74939] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:01:59.373 [DEBUG] [Thread-74939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:01:59.373 [DEBUG] [Thread-74939] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:01:59.374 [DEBUG] [Thread-74939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:01:59.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:01:59.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:01:59.429 [DEBUG] [Thread-74939] [transport.py] [_log()] userauth is OK
2025-12-12T19:01:59.430 [DEBUG] [Thread-74939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:01:59.430 [DEBUG] [Thread-74939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:01:59.430 [DEBUG] [Thread-74939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:01:59.430 [DEBUG] [Thread-74939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:01:59.450 [INFO] [Thread-74939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:01:59.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:01:59.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:02:00.282 [DEBUG] [Thread-74939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:02:00.282 [DEBUG] [Thread-74939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:02:00.330 [DEBUG] [Thread-74939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:02:00.330 [DEBUG] [Thread-74939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:02:00.339 [DEBUG] [Thread-74939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:02:00.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:02:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:02:00.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:02:00.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:02:00.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:02:00.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:02:00.373 [DEBUG] [Thread-74939] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:02:01.612 [DEBUG] [Thread-74941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:02:03.194 [DEBUG] [Thread-74942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:02:18.238 [DEBUG] [Thread-74943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:02:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:02:30.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:02: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
2025-12-12T19:02:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 2, 14), 15.62, 33.98, 0.0, 46.26, 14.51, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:02:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:02:14
2025-12-12T19:02:31.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:02:31.346 [DEBUG] [Thread-74944] [transport.py] [_log()] starting thread (client mode): 0xf81e67d0
2025-12-12T19:02:31.346 [DEBUG] [Thread-74944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:02:31.366 [DEBUG] [Thread-74944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:02:31.366 [INFO] [Thread-74944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:02:31.369 [DEBUG] [Thread-74944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:02:31.369 [DEBUG] [Thread-74944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:02:31.369 [DEBUG] [Thread-74944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:02:31.369 [DEBUG] [Thread-74944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] client lang: <none>
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] server lang: <none>
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] kex follows: False
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] Compression: none
2025-12-12T19:02:31.370 [DEBUG] [Thread-74944] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:02:31.385 [DEBUG] [Thread-74944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:02:31.385 [DEBUG] [Thread-74944] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:02:31.386 [DEBUG] [Thread-74944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:02:31.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:02:31.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:02:31.387 [DEBUG] [Thread-74944] [transport.py] [_log()] userauth is OK
2025-12-12T19:02:31.387 [DEBUG] [Thread-74944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:02:31.387 [DEBUG] [Thread-74944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:02:31.388 [DEBUG] [Thread-74944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:02:31.388 [DEBUG] [Thread-74944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:02:31.422 [INFO] [Thread-74944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:02:31.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:02:31.555 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:02:31.556 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:02:32.189 [DEBUG] [Thread-74944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:02:32.189 [DEBUG] [Thread-74944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:02:32.189 [DEBUG] [Thread-74944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:02:32.230 [DEBUG] [Thread-74944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:02:32.230 [DEBUG] [Thread-74944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:02:32.232 [DEBUG] [Thread-74944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:02:32.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:02:32.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:02:32.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:02:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:02:32.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:02:32.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:02:32.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.709478 -999.00  +14.40  49.15     39   +0.70 1 1 2 1 1   887    0 13.91 25.14 ----- 44.5 49.1 315.8 55.8 16.0 -27.0 16.2 -27.0 16.4 -25.3 16.6 -26.1
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.709478
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:02:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:02:14', tmtdew=15.62, humidity=33.98, cloud=0.0, wind=46.26, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:01:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:02:32.250 [DEBUG] [Thread-74944] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:02:32.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:02:32.334 [DEBUG] [Thread-74947] [transport.py] [_log()] starting thread (client mode): 0xf81e6e30
2025-12-12T19:02:32.334 [DEBUG] [Thread-74947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:02:32.349 [DEBUG] [Thread-74947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:02:32.349 [INFO] [Thread-74947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] client lang: <none>
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] server lang: <none>
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] kex follows: False
2025-12-12T19:02:32.357 [DEBUG] [Thread-74947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:02:32.358 [DEBUG] [Thread-74947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:02:32.358 [DEBUG] [Thread-74947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:02:32.358 [DEBUG] [Thread-74947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:02:32.358 [DEBUG] [Thread-74947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:02:32.358 [DEBUG] [Thread-74947] [transport.py] [_log()] Compression: none
2025-12-12T19:02:32.358 [DEBUG] [Thread-74947] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:02:32.413 [DEBUG] [Thread-74947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:02:32.414 [DEBUG] [Thread-74947] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:02:32.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:02:32.415 [DEBUG] [Thread-74947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:02:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:02:32.469 [DEBUG] [Thread-74947] [transport.py] [_log()] userauth is OK
2025-12-12T19:02:32.470 [DEBUG] [Thread-74947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:02:32.470 [DEBUG] [Thread-74947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:02:32.470 [DEBUG] [Thread-74947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:02:32.470 [DEBUG] [Thread-74947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:02:32.488 [INFO] [Thread-74947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:02:32.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:02:32.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:02:33.269 [DEBUG] [Thread-74949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:02:33.331 [DEBUG] [Thread-74947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:02:33.331 [DEBUG] [Thread-74947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:02:33.379 [DEBUG] [Thread-74947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:02:33.379 [DEBUG] [Thread-74947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:02:33.387 [DEBUG] [Thread-74947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:02:33.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:02:33.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:02:33.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:02:33.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:02:33.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:02:33.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:02:33.422 [DEBUG] [Thread-74947] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:02:48.308 [DEBUG] [Thread-74950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:01.664 [DEBUG] [Thread-74951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:03.334 [DEBUG] [Thread-74952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:03.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:03:03.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:03:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:03:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 2, 46), 15.41, 34.88, 0.0, 48.04, 14.48, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:03:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:02:46
2025-12-12T19:03:04.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:03:04.393 [DEBUG] [Thread-74953] [transport.py] [_log()] starting thread (client mode): 0xf813f610
2025-12-12T19:03:04.393 [DEBUG] [Thread-74953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:03:04.413 [DEBUG] [Thread-74953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:03:04.413 [INFO] [Thread-74953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] client lang: <none>
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] server lang: <none>
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] kex follows: False
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:03:04.416 [DEBUG] [Thread-74953] [transport.py] [_log()] Compression: none
2025-12-12T19:03:04.417 [DEBUG] [Thread-74953] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:03:04.433 [DEBUG] [Thread-74953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:03:04.434 [DEBUG] [Thread-74953] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:03:04.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:03:04.435 [DEBUG] [Thread-74953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:03:04.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:03:04.436 [DEBUG] [Thread-74953] [transport.py] [_log()] userauth is OK
2025-12-12T19:03:04.436 [DEBUG] [Thread-74953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:03:04.437 [DEBUG] [Thread-74953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:03:04.437 [DEBUG] [Thread-74953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:03:04.437 [DEBUG] [Thread-74953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:03:04.455 [INFO] [Thread-74953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:03:04.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:03:05.049 [DEBUG] [Thread-74953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:03:05.049 [DEBUG] [Thread-74953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:03:05.049 [DEBUG] [Thread-74953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:03:05.090 [DEBUG] [Thread-74953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:03:05.090 [DEBUG] [Thread-74953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:03:05.093 [DEBUG] [Thread-74953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:03:05.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:03:05.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:03:05.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:03:05.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:03:05.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:03:05.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:03:05.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:03:05.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:03:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:03:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.710172 -999.00  +14.20  43.27     40   +1.00 1 1 2 1 1   887    0 14.33 26.94 ----- 41.4 43.3 309.2 56.1 15.9 -26.7 16.1 -26.4 16.2 -24.3 16.3 -25.4
2025-12-12T19:03:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:03:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:03:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.710172
2025-12-12T19:03:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:03:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:03:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:03:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:03:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:03:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:02:46', tmtdew=15.41, humidity=34.88, cloud=0.0, wind=48.04, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:02:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:03:05.117 [DEBUG] [Thread-74953] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:03:05.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:03:05.213 [DEBUG] [Thread-74956] [transport.py] [_log()] starting thread (client mode): 0xf574dbd0
2025-12-12T19:03:05.214 [DEBUG] [Thread-74956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:03:05.228 [DEBUG] [Thread-74956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:03:05.228 [INFO] [Thread-74956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] client lang: <none>
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] server lang: <none>
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] kex follows: False
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:03:05.236 [DEBUG] [Thread-74956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:03:05.237 [DEBUG] [Thread-74956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:03:05.237 [DEBUG] [Thread-74956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:03:05.237 [DEBUG] [Thread-74956] [transport.py] [_log()] Compression: none
2025-12-12T19:03:05.237 [DEBUG] [Thread-74956] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:03:05.299 [DEBUG] [Thread-74956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:03:05.299 [DEBUG] [Thread-74956] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:03:05.299 [DEBUG] [Thread-74956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:03:05.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:03:05.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:03:05.354 [DEBUG] [Thread-74956] [transport.py] [_log()] userauth is OK
2025-12-12T19:03:05.355 [DEBUG] [Thread-74956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:03:05.355 [DEBUG] [Thread-74956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:03:05.355 [DEBUG] [Thread-74956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:03:05.355 [DEBUG] [Thread-74956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:03:05.373 [INFO] [Thread-74956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:03:05.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:03:05.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:03:06.203 [DEBUG] [Thread-74956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:03:06.203 [DEBUG] [Thread-74956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:03:06.251 [DEBUG] [Thread-74956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:03:06.251 [DEBUG] [Thread-74956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:03:06.260 [DEBUG] [Thread-74956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:03:06.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:03:06.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:03:06.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:03:06.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:03:06.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:03:06.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:03:06.294 [DEBUG] [Thread-74956] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:03:18.364 [DEBUG] [Thread-74958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:31.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:31.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:33.405 [DEBUG] [Thread-74959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:03:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:03:36.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:03: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
2025-12-12T19:03:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 3, 18), 15.35, 34.99, 0.0, 45.15, 14.4, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:03:36.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:03:18
2025-12-12T19:03:37.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:03:37.270 [DEBUG] [Thread-74960] [transport.py] [_log()] starting thread (client mode): 0xf5788370
2025-12-12T19:03:37.270 [DEBUG] [Thread-74960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:03:37.293 [DEBUG] [Thread-74960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:03:37.293 [INFO] [Thread-74960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] client lang: <none>
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] server lang: <none>
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] kex follows: False
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:03:37.297 [DEBUG] [Thread-74960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:03:37.298 [DEBUG] [Thread-74960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:03:37.298 [DEBUG] [Thread-74960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:03:37.298 [DEBUG] [Thread-74960] [transport.py] [_log()] Compression: none
2025-12-12T19:03:37.298 [DEBUG] [Thread-74960] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:03:37.316 [DEBUG] [Thread-74960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:03:37.316 [DEBUG] [Thread-74960] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:03:37.317 [DEBUG] [Thread-74960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:03:37.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:03:37.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:03:37.319 [DEBUG] [Thread-74960] [transport.py] [_log()] userauth is OK
2025-12-12T19:03:37.319 [DEBUG] [Thread-74960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:03:37.319 [DEBUG] [Thread-74960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:03:37.319 [DEBUG] [Thread-74960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:03:37.319 [DEBUG] [Thread-74960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:03:37.344 [INFO] [Thread-74960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:03:37.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:03:37.987 [DEBUG] [Thread-74960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:03:37.987 [DEBUG] [Thread-74960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:03:37.988 [DEBUG] [Thread-74960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:03:38.028 [DEBUG] [Thread-74960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:03:38.028 [DEBUG] [Thread-74960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:03:38.030 [DEBUG] [Thread-74960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:03:38.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:03:38.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:03:38.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:03:38.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:03:38.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:03:38.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:03:38.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:03:38.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:03:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:03:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.710519 -999.00  +14.20  45.70     40   +1.00 1 1 2 1 1   887    0 14.19 30.35 ----- 44.7 45.7 312.8 57.0 15.8 -26.7 16.0 -26.4 16.2 -25.5 16.3 -25.6
2025-12-12T19:03:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:03:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:03:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.710519
2025-12-12T19:03:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:03:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:03:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:03:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:03:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:03:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:03:18', tmtdew=15.35, humidity=34.99, cloud=0.0, wind=45.15, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:03:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:03:38.054 [DEBUG] [Thread-74960] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:03:38.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:03:38.150 [DEBUG] [Thread-74963] [transport.py] [_log()] starting thread (client mode): 0xf574cc70
2025-12-12T19:03:38.150 [DEBUG] [Thread-74963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:03:38.167 [DEBUG] [Thread-74963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:03:38.167 [INFO] [Thread-74963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:03:38.177 [DEBUG] [Thread-74963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:03:38.178 [DEBUG] [Thread-74963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] client lang: <none>
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] server lang: <none>
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] kex follows: False
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:03:38.179 [DEBUG] [Thread-74963] [transport.py] [_log()] Compression: none
2025-12-12T19:03:38.180 [DEBUG] [Thread-74963] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:03:38.244 [DEBUG] [Thread-74963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:03:38.244 [DEBUG] [Thread-74963] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:03:38.245 [DEBUG] [Thread-74963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:03:38.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:03:38.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:03:38.309 [DEBUG] [Thread-74963] [transport.py] [_log()] userauth is OK
2025-12-12T19:03:38.309 [DEBUG] [Thread-74963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:03:38.309 [DEBUG] [Thread-74963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:03:38.309 [DEBUG] [Thread-74963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:03:38.309 [DEBUG] [Thread-74963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:03:38.332 [INFO] [Thread-74963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:03:38.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:03:38.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:03:39.171 [DEBUG] [Thread-74963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:03:39.171 [DEBUG] [Thread-74963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:03:39.218 [DEBUG] [Thread-74963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:03:39.219 [DEBUG] [Thread-74963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:03:39.227 [DEBUG] [Thread-74963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:03:39.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:03:39.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:03:39.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:03:39.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:03:39.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:03:39.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:03:39.262 [DEBUG] [Thread-74963] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:03:48.434 [DEBUG] [Thread-74965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:01.713 [DEBUG] [Thread-74966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:03.487 [DEBUG] [Thread-74967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:09.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:04:09.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:04:09.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:04:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 3, 50), 15.24, 35.19, 0.0, 47.96, 14.56, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:04:09.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:03:50
2025-12-12T19:04:10.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:04:10.268 [DEBUG] [Thread-74968] [transport.py] [_log()] starting thread (client mode): 0xf81e6c20
2025-12-12T19:04:10.268 [DEBUG] [Thread-74968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:04:10.287 [DEBUG] [Thread-74968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:04:10.287 [INFO] [Thread-74968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] client lang: <none>
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] server lang: <none>
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] kex follows: False
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] Compression: none
2025-12-12T19:04:10.290 [DEBUG] [Thread-74968] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:04:10.307 [DEBUG] [Thread-74968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:04:10.308 [DEBUG] [Thread-74968] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:04:10.308 [DEBUG] [Thread-74968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:04:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:04:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:04:10.310 [DEBUG] [Thread-74968] [transport.py] [_log()] userauth is OK
2025-12-12T19:04:10.311 [DEBUG] [Thread-74968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:04:10.311 [DEBUG] [Thread-74968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:04:10.311 [DEBUG] [Thread-74968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:04:10.311 [DEBUG] [Thread-74968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:04:10.334 [INFO] [Thread-74968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:04:10.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:04:10.985 [DEBUG] [Thread-74968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:04:10.985 [DEBUG] [Thread-74968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:04:10.985 [DEBUG] [Thread-74968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:04:11.026 [DEBUG] [Thread-74968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:04:11.026 [DEBUG] [Thread-74968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:04:11.029 [DEBUG] [Thread-74968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:04:11.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:04:11.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:04:11.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:04:11.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:04:11.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:04:11.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:04:11.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:04:11.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:04:11.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:04:11.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.710867 -999.00  +14.30  40.69     40   +1.10 1 1 2 1 1   887    0 14.31 32.34 ----- 42.1 40.7 316.0 55.4 15.8 -26.5 15.9 -26.7 16.2 -24.3 16.3 -25.5
2025-12-12T19:04:11.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:04:11.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:04:11.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.710867
2025-12-12T19:04:11.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:04:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:04:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:04:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:04:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:04:11.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:03:50', tmtdew=15.24, humidity=35.19, cloud=0.0, wind=47.96, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:03:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:04:11.055 [DEBUG] [Thread-74968] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:04:11.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:04:11.151 [DEBUG] [Thread-74971] [transport.py] [_log()] starting thread (client mode): 0xf57003a0
2025-12-12T19:04:11.151 [DEBUG] [Thread-74971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:04:11.166 [DEBUG] [Thread-74971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:04:11.166 [INFO] [Thread-74971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:04:11.174 [DEBUG] [Thread-74971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] client lang: <none>
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] server lang: <none>
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] kex follows: False
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] Compression: none
2025-12-12T19:04:11.175 [DEBUG] [Thread-74971] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:04:11.231 [DEBUG] [Thread-74971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:04:11.232 [DEBUG] [Thread-74971] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:04:11.232 [DEBUG] [Thread-74971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:04:11.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:04:11.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:04:11.287 [DEBUG] [Thread-74971] [transport.py] [_log()] userauth is OK
2025-12-12T19:04:11.287 [DEBUG] [Thread-74971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:04:11.287 [DEBUG] [Thread-74971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:04:11.288 [DEBUG] [Thread-74971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:04:11.288 [DEBUG] [Thread-74971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:04:11.305 [INFO] [Thread-74971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:04:11.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:04:11.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:04:12.130 [DEBUG] [Thread-74971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:04:12.130 [DEBUG] [Thread-74971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:04:12.178 [DEBUG] [Thread-74971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:04:12.178 [DEBUG] [Thread-74971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:04:12.186 [DEBUG] [Thread-74971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:04:12.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:04:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:04:12.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:04:12.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:04:12.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:04:12.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:04:12.221 [DEBUG] [Thread-74971] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:04:18.520 [DEBUG] [Thread-74973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:31.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:31.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:33.566 [DEBUG] [Thread-74974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:04:42.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:04:42.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:04:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:04:42.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 4, 22), 15.14, 35.44, 0.0, 50.14, 14.6, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:04:42.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:04:22
2025-12-12T19:04:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:04:43.247 [DEBUG] [Thread-74975] [transport.py] [_log()] starting thread (client mode): 0xf813cd30
2025-12-12T19:04:43.247 [DEBUG] [Thread-74975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:04:43.266 [DEBUG] [Thread-74975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:04:43.266 [INFO] [Thread-74975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] client lang: <none>
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] server lang: <none>
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] kex follows: False
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] Compression: none
2025-12-12T19:04:43.270 [DEBUG] [Thread-74975] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:04:43.285 [DEBUG] [Thread-74975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:04:43.286 [DEBUG] [Thread-74975] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:04:43.286 [DEBUG] [Thread-74975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:04:43.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:04:43.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:04:43.287 [DEBUG] [Thread-74975] [transport.py] [_log()] userauth is OK
2025-12-12T19:04:43.287 [DEBUG] [Thread-74975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:04:43.287 [DEBUG] [Thread-74975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:04:43.287 [DEBUG] [Thread-74975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:04:43.287 [DEBUG] [Thread-74975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:04:43.299 [INFO] [Thread-74975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:04:43.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:04:43.959 [DEBUG] [Thread-74975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:04:43.959 [DEBUG] [Thread-74975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:04:43.959 [DEBUG] [Thread-74975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:04:44.000 [DEBUG] [Thread-74975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:04:44.000 [DEBUG] [Thread-74975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:04:44.002 [DEBUG] [Thread-74975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:04:44.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:04:44.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:04:44.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:04:44.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:04:44.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:04:44.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:04:44.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:04:44.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:04:44.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.711214 -999.00  +14.20  50.02     41   +1.30 1 1 2 1 1   887    0 14.20 31.60 ----- 47.0 50.0 311.2 55.4 15.8 -27.1 16.0 -26.8 16.1 -26.5 16.2 -25.7
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.711214
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:04:44.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:04:22', tmtdew=15.14, humidity=35.44, cloud=0.0, wind=50.14, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:04:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:04:44.021 [DEBUG] [Thread-74975] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:04:44.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:04:44.110 [DEBUG] [Thread-74978] [transport.py] [_log()] starting thread (client mode): 0xf813e530
2025-12-12T19:04:44.110 [DEBUG] [Thread-74978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:04:44.124 [DEBUG] [Thread-74978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:04:44.124 [INFO] [Thread-74978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] client lang: <none>
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] server lang: <none>
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] kex follows: False
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] Compression: none
2025-12-12T19:04:44.132 [DEBUG] [Thread-74978] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:04:44.190 [DEBUG] [Thread-74978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:04:44.190 [DEBUG] [Thread-74978] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:04:44.191 [DEBUG] [Thread-74978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:04:44.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:04:44.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:04:44.247 [DEBUG] [Thread-74978] [transport.py] [_log()] userauth is OK
2025-12-12T19:04:44.247 [DEBUG] [Thread-74978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:04:44.248 [DEBUG] [Thread-74978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:04:44.248 [DEBUG] [Thread-74978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:04:44.248 [DEBUG] [Thread-74978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:04:44.261 [INFO] [Thread-74978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:04:44.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:04:44.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:04:45.079 [DEBUG] [Thread-74978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:04:45.079 [DEBUG] [Thread-74978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:04:45.126 [DEBUG] [Thread-74978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:04:45.126 [DEBUG] [Thread-74978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:04:45.134 [DEBUG] [Thread-74978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:04:45.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:04: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')
2025-12-12T19:04:45.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:04:45.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:04:45.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:04:45.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:04:45.166 [DEBUG] [Thread-74978] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:04:48.599 [DEBUG] [Thread-74980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:01.766 [DEBUG] [Thread-74981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:03.643 [DEBUG] [Thread-74982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:05:15.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:05:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:05:15.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 4, 54), 14.86, 35.99, 0.0, 43.44, 14.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:05:15.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:04:54
2025-12-12T19:05:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:05:16.138 [DEBUG] [Thread-74983] [transport.py] [_log()] starting thread (client mode): 0xf813f010
2025-12-12T19:05:16.139 [DEBUG] [Thread-74983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:05:16.158 [DEBUG] [Thread-74983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:05:16.158 [INFO] [Thread-74983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:05:16.159 [DEBUG] [Thread-74983] [transport.py] [_log()] client lang: <none>
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] server lang: <none>
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] kex follows: False
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] Compression: none
2025-12-12T19:05:16.160 [DEBUG] [Thread-74983] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:05:16.172 [DEBUG] [Thread-74983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:05:16.173 [DEBUG] [Thread-74983] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:05:16.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:05:16.174 [DEBUG] [Thread-74983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:05:16.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:05:16.175 [DEBUG] [Thread-74983] [transport.py] [_log()] userauth is OK
2025-12-12T19:05:16.175 [DEBUG] [Thread-74983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:05:16.175 [DEBUG] [Thread-74983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:05:16.175 [DEBUG] [Thread-74983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:05:16.175 [DEBUG] [Thread-74983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:05:16.210 [INFO] [Thread-74983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:05:16.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:05:16.880 [DEBUG] [Thread-74983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:05:16.880 [DEBUG] [Thread-74983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:05:16.880 [DEBUG] [Thread-74983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:05:16.921 [DEBUG] [Thread-74983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:05:16.921 [DEBUG] [Thread-74983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:05:16.924 [DEBUG] [Thread-74983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:05:16.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:05:16.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:05:16.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:05:16.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:05:16.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:05:16.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:05:16.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:05:16.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:05:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:05:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.711561 -999.00  +14.20  34.81     41   +1.40 1 1 2 1 1   887    0 14.44 34.74 ----- 34.4 34.8 300.2 57.0 15.8 -26.7 15.9 -26.8 16.1 -24.5 16.2 -25.5
2025-12-12T19:05:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:05:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:05:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.711561
2025-12-12T19:05:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:05:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:05:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:05:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:05:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:05:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:04:54', tmtdew=14.86, humidity=35.99, cloud=0.0, wind=43.44, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:04:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:05:16.949 [DEBUG] [Thread-74983] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:05:17.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:05:17.040 [DEBUG] [Thread-74986] [transport.py] [_log()] starting thread (client mode): 0xf8156050
2025-12-12T19:05:17.040 [DEBUG] [Thread-74986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:05:17.055 [DEBUG] [Thread-74986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:05:17.055 [INFO] [Thread-74986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:05:17.062 [DEBUG] [Thread-74986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:05:17.062 [DEBUG] [Thread-74986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] client lang: <none>
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] server lang: <none>
2025-12-12T19:05:17.063 [DEBUG] [Thread-74986] [transport.py] [_log()] kex follows: False
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] Compression: none
2025-12-12T19:05:17.064 [DEBUG] [Thread-74986] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:05:17.120 [DEBUG] [Thread-74986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:05:17.120 [DEBUG] [Thread-74986] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:05:17.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:05:17.121 [DEBUG] [Thread-74986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:05:17.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:05:17.176 [DEBUG] [Thread-74986] [transport.py] [_log()] userauth is OK
2025-12-12T19:05:17.176 [DEBUG] [Thread-74986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:05:17.176 [DEBUG] [Thread-74986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:05:17.176 [DEBUG] [Thread-74986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:05:17.176 [DEBUG] [Thread-74986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:05:17.198 [INFO] [Thread-74986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:05:17.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:05:17.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:05:18.026 [DEBUG] [Thread-74986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:05:18.026 [DEBUG] [Thread-74986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:05:18.073 [DEBUG] [Thread-74986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:05:18.073 [DEBUG] [Thread-74986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:05:18.082 [DEBUG] [Thread-74986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:05:18.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:05:18.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:05:18.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:05:18.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:05:18.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:05:18.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:05:18.119 [DEBUG] [Thread-74986] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:05:18.671 [DEBUG] [Thread-74988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:31.981 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:31.982 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:33.713 [DEBUG] [Thread-74989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:05:48.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:05:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:05:48.743 [DEBUG] [Thread-74990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:05:48.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 5, 26), 14.7, 36.39, 0.0, 46.16, 14.35, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:05:48.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:05:26
2025-12-12T19:05:48.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:05:49.104 [DEBUG] [Thread-74991] [transport.py] [_log()] starting thread (client mode): 0xf8155de0
2025-12-12T19:05:49.104 [DEBUG] [Thread-74991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:05:49.124 [DEBUG] [Thread-74991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:05:49.124 [INFO] [Thread-74991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:05:49.127 [DEBUG] [Thread-74991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:05:49.127 [DEBUG] [Thread-74991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] client lang: <none>
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] server lang: <none>
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] kex follows: False
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] Compression: none
2025-12-12T19:05:49.128 [DEBUG] [Thread-74991] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:05:49.147 [DEBUG] [Thread-74991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:05:49.147 [DEBUG] [Thread-74991] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:05:49.148 [DEBUG] [Thread-74991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:05:49.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:05:49.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:05:49.150 [DEBUG] [Thread-74991] [transport.py] [_log()] userauth is OK
2025-12-12T19:05:49.150 [DEBUG] [Thread-74991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:05:49.150 [DEBUG] [Thread-74991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:05:49.150 [DEBUG] [Thread-74991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:05:49.151 [DEBUG] [Thread-74991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:05:49.174 [INFO] [Thread-74991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:05:49.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:05:49.806 [DEBUG] [Thread-74991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:05:49.806 [DEBUG] [Thread-74991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:05:49.806 [DEBUG] [Thread-74991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:05:49.847 [DEBUG] [Thread-74991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:05:49.847 [DEBUG] [Thread-74991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:05:49.849 [DEBUG] [Thread-74991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:05:49.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:05:49.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:05:49.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:05:49.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:05:49.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:05:49.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:05:49.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:05:49.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:05:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:05:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.711908 -999.00  +14.10  53.78     42   +1.60 1 1 2 1 1   887    0 14.08 35.32 ----- 41.7 53.8 310.6 57.6 15.7 -26.8 15.9 -27.1 16.0 -24.5 16.1 -25.2
2025-12-12T19:05:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:05:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:05:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.711908
2025-12-12T19:05:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:05:49.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:05:49.870 [DEBUG] [Thread-74991] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:05:49.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:05:49.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:05:49.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:05:49.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:05:26', tmtdew=14.7, humidity=36.39, cloud=0.0, wind=46.16, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:05:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:05:49.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:05:49.968 [DEBUG] [Thread-74994] [transport.py] [_log()] starting thread (client mode): 0xf81e5990
2025-12-12T19:05:49.968 [DEBUG] [Thread-74994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:05:49.982 [DEBUG] [Thread-74994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:05:49.982 [INFO] [Thread-74994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] client lang: <none>
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] server lang: <none>
2025-12-12T19:05:49.990 [DEBUG] [Thread-74994] [transport.py] [_log()] kex follows: False
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] Compression: none
2025-12-12T19:05:49.991 [DEBUG] [Thread-74994] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:05:50.053 [DEBUG] [Thread-74994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:05:50.053 [DEBUG] [Thread-74994] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:05:50.054 [DEBUG] [Thread-74994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:05:50.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:05:50.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:05:50.109 [DEBUG] [Thread-74994] [transport.py] [_log()] userauth is OK
2025-12-12T19:05:50.109 [DEBUG] [Thread-74994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:05:50.109 [DEBUG] [Thread-74994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:05:50.109 [DEBUG] [Thread-74994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:05:50.109 [DEBUG] [Thread-74994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:05:50.128 [INFO] [Thread-74994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:05:50.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:05:50.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:05:50.977 [DEBUG] [Thread-74994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:05:50.977 [DEBUG] [Thread-74994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:05:51.025 [DEBUG] [Thread-74994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:05:51.025 [DEBUG] [Thread-74994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:05:51.034 [DEBUG] [Thread-74994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:05:51.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:05:51.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:05:51.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:05:51.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:05:51.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:05:51.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:05:51.069 [DEBUG] [Thread-74994] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:06:01.815 [DEBUG] [Thread-74996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:03.769 [DEBUG] [Thread-74997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:18.810 [DEBUG] [Thread-74998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:21.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:06:21.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:06:21.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:06:21.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 5, 58), 14.55, 37.04, 0.0, 47.25, 14.41, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:06:21.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:05:58
2025-12-12T19:06:21.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:06:22.016 [DEBUG] [Thread-74999] [transport.py] [_log()] starting thread (client mode): 0xf5701150
2025-12-12T19:06:22.016 [DEBUG] [Thread-74999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:06:22.036 [DEBUG] [Thread-74999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:06:22.036 [INFO] [Thread-74999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:06:22.039 [DEBUG] [Thread-74999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:06:22.039 [DEBUG] [Thread-74999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] client lang: <none>
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] server lang: <none>
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] kex follows: False
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] Compression: none
2025-12-12T19:06:22.040 [DEBUG] [Thread-74999] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:06:22.058 [DEBUG] [Thread-74999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:06:22.059 [DEBUG] [Thread-74999] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:06:22.059 [DEBUG] [Thread-74999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:06:22.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:06:22.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:06:22.061 [DEBUG] [Thread-74999] [transport.py] [_log()] userauth is OK
2025-12-12T19:06:22.061 [DEBUG] [Thread-74999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:06:22.061 [DEBUG] [Thread-74999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:06:22.061 [DEBUG] [Thread-74999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:06:22.061 [DEBUG] [Thread-74999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:06:22.086 [INFO] [Thread-74999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:06:22.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:06:22.741 [DEBUG] [Thread-74999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:06:22.741 [DEBUG] [Thread-74999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:06:22.741 [DEBUG] [Thread-74999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:06:22.782 [DEBUG] [Thread-74999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:06:22.782 [DEBUG] [Thread-74999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:06:22.785 [DEBUG] [Thread-74999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:06:22.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:06:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:06:22.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:06:22.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:06:22.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:06:22.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:06:22.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:06:22.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:06:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:06:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.712255 -999.00  +14.10  53.29     42   +1.50 1 1 2 1 1   887    0 14.48 37.98 ----- 57.0 53.3 311.2 59.2 15.7 -26.9 15.8 -26.7 16.0 -24.6 16.1 -25.4
2025-12-12T19:06:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:06:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:06:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.712255
2025-12-12T19:06:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:06:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:06:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:06:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:06:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:06:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:05:58', tmtdew=14.55, humidity=37.04, cloud=0.0, wind=47.25, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:05:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:06:22.809 [DEBUG] [Thread-74999] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:06:22.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:06:22.902 [DEBUG] [Thread-75002] [transport.py] [_log()] starting thread (client mode): 0xf5789600
2025-12-12T19:06:22.902 [DEBUG] [Thread-75002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:06:22.917 [DEBUG] [Thread-75002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:06:22.917 [INFO] [Thread-75002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:06:22.924 [DEBUG] [Thread-75002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] client lang: <none>
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] server lang: <none>
2025-12-12T19:06:22.925 [DEBUG] [Thread-75002] [transport.py] [_log()] kex follows: False
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] Compression: none
2025-12-12T19:06:22.926 [DEBUG] [Thread-75002] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:06:22.980 [DEBUG] [Thread-75002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:06:22.981 [DEBUG] [Thread-75002] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:06:22.981 [DEBUG] [Thread-75002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:06:22.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:06:22.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:06:23.037 [DEBUG] [Thread-75002] [transport.py] [_log()] userauth is OK
2025-12-12T19:06:23.037 [DEBUG] [Thread-75002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:06:23.037 [DEBUG] [Thread-75002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:06:23.038 [DEBUG] [Thread-75002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:06:23.038 [DEBUG] [Thread-75002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:06:23.060 [INFO] [Thread-75002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:06:23.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:06:23.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:06:23.912 [DEBUG] [Thread-75002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:06:23.912 [DEBUG] [Thread-75002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:06:23.960 [DEBUG] [Thread-75002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:06:23.960 [DEBUG] [Thread-75002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:06:23.969 [DEBUG] [Thread-75002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:06:23.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:06:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:06:23.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:06:23.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:06:23.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:06:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:06:24.007 [DEBUG] [Thread-75002] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:06:32.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:32.124 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:33.839 [DEBUG] [Thread-75004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:48.883 [DEBUG] [Thread-75005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:06:54.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:06:54.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:06:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:06:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 6, 30), 14.5, 37.15, 0.0, 43.33, 14.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:06:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:06:30
2025-12-12T19:06:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:06:54.981 [DEBUG] [Thread-75006] [transport.py] [_log()] starting thread (client mode): 0xf5701750
2025-12-12T19:06:54.981 [DEBUG] [Thread-75006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:06:55.002 [DEBUG] [Thread-75006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:06:55.002 [INFO] [Thread-75006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] client lang: <none>
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] server lang: <none>
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] kex follows: False
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:06:55.005 [DEBUG] [Thread-75006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:06:55.006 [DEBUG] [Thread-75006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:06:55.006 [DEBUG] [Thread-75006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:06:55.006 [DEBUG] [Thread-75006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:06:55.006 [DEBUG] [Thread-75006] [transport.py] [_log()] Compression: none
2025-12-12T19:06:55.006 [DEBUG] [Thread-75006] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:06:55.024 [DEBUG] [Thread-75006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:06:55.024 [DEBUG] [Thread-75006] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:06:55.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:06:55.026 [DEBUG] [Thread-75006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:06:55.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:06:55.027 [DEBUG] [Thread-75006] [transport.py] [_log()] userauth is OK
2025-12-12T19:06:55.028 [DEBUG] [Thread-75006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:06:55.028 [DEBUG] [Thread-75006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:06:55.028 [DEBUG] [Thread-75006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:06:55.028 [DEBUG] [Thread-75006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:06:55.057 [INFO] [Thread-75006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:06:55.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:06:55.637 [DEBUG] [Thread-75006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:06:55.637 [DEBUG] [Thread-75006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:06:55.638 [DEBUG] [Thread-75006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:06:55.678 [DEBUG] [Thread-75006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:06:55.678 [DEBUG] [Thread-75006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:06:55.681 [DEBUG] [Thread-75006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:06:55.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:06:55.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:06:55.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:06:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:06:55.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:06:55.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:06:55.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:06:55.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:06:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:06:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.712603 -999.00  +14.00  40.06     42   +1.50 1 1 2 1 1   887    0 14.08 35.59 ----- 43.5 40.1 312.8 60.9 15.6 -26.5 15.8 -26.8 15.9 -24.2 16.0 -25.8
2025-12-12T19:06:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:06:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:06:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.712603
2025-12-12T19:06:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:06:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:06:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:06:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:06:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:06:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:06:30', tmtdew=14.5, humidity=37.15, cloud=0.0, wind=43.33, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:06:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:06:55.700 [DEBUG] [Thread-75006] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:06:55.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:06:55.797 [DEBUG] [Thread-75009] [transport.py] [_log()] starting thread (client mode): 0xf57730d0
2025-12-12T19:06:55.797 [DEBUG] [Thread-75009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:06:55.811 [DEBUG] [Thread-75009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:06:55.811 [INFO] [Thread-75009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:55.819 [DEBUG] [Thread-75009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] client lang: <none>
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] server lang: <none>
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] kex follows: False
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] Compression: none
2025-12-12T19:06:55.820 [DEBUG] [Thread-75009] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:06:55.878 [DEBUG] [Thread-75009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:06:55.878 [DEBUG] [Thread-75009] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:06:55.879 [DEBUG] [Thread-75009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:06:55.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:06:55.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:06:55.937 [DEBUG] [Thread-75009] [transport.py] [_log()] userauth is OK
2025-12-12T19:06:55.938 [DEBUG] [Thread-75009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:06:55.938 [DEBUG] [Thread-75009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:06:55.938 [DEBUG] [Thread-75009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:06:55.938 [DEBUG] [Thread-75009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:06:55.958 [INFO] [Thread-75009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:06:55.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:06:55.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:06:56.772 [DEBUG] [Thread-75009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:06:56.772 [DEBUG] [Thread-75009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:06:56.820 [DEBUG] [Thread-75009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:06:56.821 [DEBUG] [Thread-75009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:06:56.830 [DEBUG] [Thread-75009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:06:56.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:06:56.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:06:56.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:06:56.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:06:56.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:06:56.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:06:56.864 [DEBUG] [Thread-75009] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:07:01.877 [DEBUG] [Thread-75011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:03.920 [DEBUG] [Thread-75012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:18.950 [DEBUG] [Thread-75013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:07:26.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:07:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:07:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 7, 2), 14.51, 37.09, 0.0, 41.69, 14.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:07:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:07:02
2025-12-12T19:07:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:07:27.855 [DEBUG] [Thread-75014] [transport.py] [_log()] starting thread (client mode): 0xf5772ec0
2025-12-12T19:07:27.855 [DEBUG] [Thread-75014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:07:27.874 [DEBUG] [Thread-75014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:07:27.874 [INFO] [Thread-75014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:07:27.877 [DEBUG] [Thread-75014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:07:27.877 [DEBUG] [Thread-75014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] client lang: <none>
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] server lang: <none>
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] kex follows: False
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] Compression: none
2025-12-12T19:07:27.878 [DEBUG] [Thread-75014] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:07:27.895 [DEBUG] [Thread-75014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:07:27.896 [DEBUG] [Thread-75014] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:07:27.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:07:27.897 [DEBUG] [Thread-75014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:07:27.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:07:27.898 [DEBUG] [Thread-75014] [transport.py] [_log()] userauth is OK
2025-12-12T19:07:27.898 [DEBUG] [Thread-75014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:07:27.899 [DEBUG] [Thread-75014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:07:27.899 [DEBUG] [Thread-75014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:07:27.899 [DEBUG] [Thread-75014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:07:27.916 [INFO] [Thread-75014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:07:27.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:07:28.545 [DEBUG] [Thread-75014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:07:28.546 [DEBUG] [Thread-75014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:07:28.546 [DEBUG] [Thread-75014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:07:28.587 [DEBUG] [Thread-75014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:07:28.587 [DEBUG] [Thread-75014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:07:28.590 [DEBUG] [Thread-75014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:07:28.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:07:28.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:07:28.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:07:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:07:28.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:07:28.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:07:28.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:07:28.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:07:28.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:07:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.712950 -999.00  +13.90  52.75     42   +1.30 1 1 2 1 1   887    0 14.31 37.76 ----- 41.3 52.8 313.2 58.7 15.6 -26.7 15.7 -26.5 15.8 -24.4 16.0 -25.4
2025-12-12T19:07:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:07:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:07:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.712950
2025-12-12T19:07:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:07:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:07:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:07:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:07:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:07:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:07:02', tmtdew=14.51, humidity=37.09, cloud=0.0, wind=41.69, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:06:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:07:28.613 [DEBUG] [Thread-75014] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:07:28.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:07:28.705 [DEBUG] [Thread-75017] [transport.py] [_log()] starting thread (client mode): 0xf57021d0
2025-12-12T19:07:28.705 [DEBUG] [Thread-75017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:07:28.720 [DEBUG] [Thread-75017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:07:28.720 [INFO] [Thread-75017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:07:28.728 [DEBUG] [Thread-75017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] client lang: <none>
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] server lang: <none>
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] kex follows: False
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] Compression: none
2025-12-12T19:07:28.729 [DEBUG] [Thread-75017] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:07:28.785 [DEBUG] [Thread-75017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:07:28.786 [DEBUG] [Thread-75017] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:07:28.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:07:28.787 [DEBUG] [Thread-75017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:07:28.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:07:28.842 [DEBUG] [Thread-75017] [transport.py] [_log()] userauth is OK
2025-12-12T19:07:28.842 [DEBUG] [Thread-75017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:07:28.842 [DEBUG] [Thread-75017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:07:28.842 [DEBUG] [Thread-75017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:07:28.842 [DEBUG] [Thread-75017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:07:28.863 [INFO] [Thread-75017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:07:28.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:07:28.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:07:29.710 [DEBUG] [Thread-75017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:07:29.710 [DEBUG] [Thread-75017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:07:29.757 [DEBUG] [Thread-75017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:07:29.757 [DEBUG] [Thread-75017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:07:29.766 [DEBUG] [Thread-75017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:07:29.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:07:29.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:07:29.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:07:29.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:07:29.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:07:29.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:07:29.799 [DEBUG] [Thread-75017] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:07:32.266 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:32.267 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:33.978 [DEBUG] [Thread-75019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:49.018 [DEBUG] [Thread-75020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:07:59.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:07:59.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:07:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:08:00.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 7, 34), 14.62, 36.69, 0.0, 46.81, 14.33, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:08:00.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:07:34
2025-12-12T19:08:00.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:08:00.784 [DEBUG] [Thread-75021] [transport.py] [_log()] starting thread (client mode): 0xf813d450
2025-12-12T19:08:00.785 [DEBUG] [Thread-75021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:08:00.803 [DEBUG] [Thread-75021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:08:00.803 [INFO] [Thread-75021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] client lang: <none>
2025-12-12T19:08:00.806 [DEBUG] [Thread-75021] [transport.py] [_log()] server lang: <none>
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] kex follows: False
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] Compression: none
2025-12-12T19:08:00.807 [DEBUG] [Thread-75021] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:08:00.821 [DEBUG] [Thread-75021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:08:00.821 [DEBUG] [Thread-75021] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:08:00.822 [DEBUG] [Thread-75021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:08:00.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:08:00.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:08:00.823 [DEBUG] [Thread-75021] [transport.py] [_log()] userauth is OK
2025-12-12T19:08:00.823 [DEBUG] [Thread-75021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:08:00.823 [DEBUG] [Thread-75021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:08:00.823 [DEBUG] [Thread-75021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:08:00.823 [DEBUG] [Thread-75021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:08:00.839 [INFO] [Thread-75021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:08:00.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:08:01.477 [DEBUG] [Thread-75021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:08:01.477 [DEBUG] [Thread-75021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:08:01.478 [DEBUG] [Thread-75021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:08:01.518 [DEBUG] [Thread-75021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:08:01.518 [DEBUG] [Thread-75021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:08:01.521 [DEBUG] [Thread-75021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:08:01.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:08:01.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:08:01.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:08:01.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:08:01.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:08:01.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:08:01.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:08:01.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:08:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:08:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.713297 -999.00  +13.80  43.09     42   +1.30 1 1 2 1 1   887    0 14.31 33.26 ----- 45.1 43.1 310.8 54.6 15.5 -26.6 15.7 -26.5 15.8 -24.5 15.9 -25.3
2025-12-12T19:08:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:08:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:08:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.713297
2025-12-12T19:08:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:08:01.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:08:01.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:08:01.545 [DEBUG] [Thread-75021] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:08:01.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:08:01.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:08:01.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:07:34', tmtdew=14.62, humidity=36.69, cloud=0.0, wind=46.81, temperature=14.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:07:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:08:01.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:08:01.663 [DEBUG] [Thread-75024] [transport.py] [_log()] starting thread (client mode): 0xf81c3130
2025-12-12T19:08:01.663 [DEBUG] [Thread-75024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:08:01.677 [DEBUG] [Thread-75024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:08:01.677 [INFO] [Thread-75024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] client lang: <none>
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] server lang: <none>
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] kex follows: False
2025-12-12T19:08:01.685 [DEBUG] [Thread-75024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:08:01.686 [DEBUG] [Thread-75024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:08:01.686 [DEBUG] [Thread-75024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:08:01.686 [DEBUG] [Thread-75024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:08:01.686 [DEBUG] [Thread-75024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:08:01.686 [DEBUG] [Thread-75024] [transport.py] [_log()] Compression: none
2025-12-12T19:08:01.686 [DEBUG] [Thread-75024] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:08:01.743 [DEBUG] [Thread-75024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:08:01.743 [DEBUG] [Thread-75024] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:08:01.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:08:01.744 [DEBUG] [Thread-75024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:08:01.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:08:01.798 [DEBUG] [Thread-75024] [transport.py] [_log()] userauth is OK
2025-12-12T19:08:01.798 [DEBUG] [Thread-75024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:08:01.799 [DEBUG] [Thread-75024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:08:01.799 [DEBUG] [Thread-75024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:08:01.799 [DEBUG] [Thread-75024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:08:01.818 [INFO] [Thread-75024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:08:01.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:08:01.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:08:01.928 [DEBUG] [Thread-75026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:08:02.674 [DEBUG] [Thread-75024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:08:02.674 [DEBUG] [Thread-75024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:08:02.721 [DEBUG] [Thread-75024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:08:02.722 [DEBUG] [Thread-75024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:08:02.731 [DEBUG] [Thread-75024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:08:02.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:08:02.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:08:02.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:08:02.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:08:02.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:08:02.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:08:02.767 [DEBUG] [Thread-75024] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:08:04.054 [DEBUG] [Thread-75027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:08:19.101 [DEBUG] [Thread-75028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:08:32.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:08:32.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:08:32.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:08:32.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:08:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:08:33.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 8, 6), 14.5, 37.0, 0.0, 42.77, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:08:33.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:08:06
2025-12-12T19:08:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:08:33.779 [DEBUG] [Thread-75029] [transport.py] [_log()] starting thread (client mode): 0xf574fc40
2025-12-12T19:08:33.779 [DEBUG] [Thread-75029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:08:33.799 [DEBUG] [Thread-75029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:08:33.799 [INFO] [Thread-75029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:08:33.802 [DEBUG] [Thread-75029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:08:33.802 [DEBUG] [Thread-75029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:08:33.802 [DEBUG] [Thread-75029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] client lang: <none>
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] server lang: <none>
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] kex follows: False
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] Compression: none
2025-12-12T19:08:33.803 [DEBUG] [Thread-75029] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:08:33.820 [DEBUG] [Thread-75029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:08:33.820 [DEBUG] [Thread-75029] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:08:33.820 [DEBUG] [Thread-75029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:08:33.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:08:33.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:08:33.821 [DEBUG] [Thread-75029] [transport.py] [_log()] userauth is OK
2025-12-12T19:08:33.821 [DEBUG] [Thread-75029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:08:33.821 [DEBUG] [Thread-75029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:08:33.821 [DEBUG] [Thread-75029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:08:33.821 [DEBUG] [Thread-75029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:08:33.830 [INFO] [Thread-75029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:08:33.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:08:34.133 [DEBUG] [Thread-75031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:08:34.459 [DEBUG] [Thread-75029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:08:34.459 [DEBUG] [Thread-75029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:08:34.459 [DEBUG] [Thread-75029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:08:34.501 [DEBUG] [Thread-75029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:08:34.501 [DEBUG] [Thread-75029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:08:34.503 [DEBUG] [Thread-75029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:08:34.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:08:34.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:08:34.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:08:34.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:08:34.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:08:34.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:08:34.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:08:34.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:08:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:08:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.713992 -999.00  +14.00  42.24     42   +1.50 1 1 2 1 1   887    0 14.04 31.26 ----- 39.5 42.2 327.6 54.0 15.5 -26.3 15.6 -26.3 15.8 -24.3 15.9 -25.3
2025-12-12T19:08:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:08:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:08:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.713992
2025-12-12T19:08:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:08:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:08:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:08:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:08:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:08:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:08:06', tmtdew=14.5, humidity=37.0, cloud=0.0, wind=42.77, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:08:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:08:34.520 [DEBUG] [Thread-75029] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:08:34.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:08:34.606 [DEBUG] [Thread-75033] [transport.py] [_log()] starting thread (client mode): 0xf81e5c00
2025-12-12T19:08:34.606 [DEBUG] [Thread-75033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:08:34.620 [DEBUG] [Thread-75033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:08:34.620 [INFO] [Thread-75033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] client lang: <none>
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] server lang: <none>
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] kex follows: False
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] Compression: none
2025-12-12T19:08:34.628 [DEBUG] [Thread-75033] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:08:34.689 [DEBUG] [Thread-75033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:08:34.690 [DEBUG] [Thread-75033] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:08:34.690 [DEBUG] [Thread-75033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:08:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:08:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:08:34.746 [DEBUG] [Thread-75033] [transport.py] [_log()] userauth is OK
2025-12-12T19:08:34.747 [DEBUG] [Thread-75033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:08:34.747 [DEBUG] [Thread-75033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:08:34.747 [DEBUG] [Thread-75033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:08:34.747 [DEBUG] [Thread-75033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:08:34.760 [INFO] [Thread-75033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:08:34.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:08:34.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:08:35.605 [DEBUG] [Thread-75033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:08:35.605 [DEBUG] [Thread-75033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:08:35.652 [DEBUG] [Thread-75033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:08:35.652 [DEBUG] [Thread-75033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:08:35.661 [DEBUG] [Thread-75033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:08:35.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:08:35.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:08:35.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:08:35.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:08:35.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:08:35.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:08:35.692 [DEBUG] [Thread-75033] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:08:49.160 [DEBUG] [Thread-75035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:01.982 [DEBUG] [Thread-75036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:04.216 [DEBUG] [Thread-75037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:09:05.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:09:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:09:06.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 8, 38), 14.34, 37.53, 0.0, 43.53, 14.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:09:06.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:08:38
2025-12-12T19:09:06.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:09:06.673 [DEBUG] [Thread-75038] [transport.py] [_log()] starting thread (client mode): 0xf578b760
2025-12-12T19:09:06.673 [DEBUG] [Thread-75038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:09:06.694 [DEBUG] [Thread-75038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:09:06.694 [INFO] [Thread-75038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] client lang: <none>
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] server lang: <none>
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] kex follows: False
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:09:06.697 [DEBUG] [Thread-75038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:09:06.698 [DEBUG] [Thread-75038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:09:06.698 [DEBUG] [Thread-75038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:09:06.698 [DEBUG] [Thread-75038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:09:06.698 [DEBUG] [Thread-75038] [transport.py] [_log()] Compression: none
2025-12-12T19:09:06.698 [DEBUG] [Thread-75038] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:09:06.714 [DEBUG] [Thread-75038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:09:06.715 [DEBUG] [Thread-75038] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:09:06.715 [DEBUG] [Thread-75038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:09:06.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:09:06.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:09:06.717 [DEBUG] [Thread-75038] [transport.py] [_log()] userauth is OK
2025-12-12T19:09:06.717 [DEBUG] [Thread-75038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:09:06.717 [DEBUG] [Thread-75038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:09:06.717 [DEBUG] [Thread-75038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:09:06.717 [DEBUG] [Thread-75038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:09:06.733 [INFO] [Thread-75038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:09:06.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:09:07.389 [DEBUG] [Thread-75038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:09:07.389 [DEBUG] [Thread-75038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:09:07.389 [DEBUG] [Thread-75038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:09:07.430 [DEBUG] [Thread-75038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:09:07.430 [DEBUG] [Thread-75038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:09:07.433 [DEBUG] [Thread-75038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:09:07.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:09:07.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:09:07.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:09:07.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:09:07.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:09:07.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:09:07.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:09:07.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.714339 -999.00  +14.00  34.07     42   +1.50 1 1 2 1 1   887    0 13.86 29.43 ----- 43.0 34.1 319.2 50.7 15.5 -26.7 15.6 -26.3 15.7 -24.1 15.8 -25.2
2025-12-12T19:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.714339
2025-12-12T19:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:09:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:09:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:09:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:09:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:09:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:08:38', tmtdew=14.34, humidity=37.53, cloud=0.0, wind=43.53, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:08:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:09:07.457 [DEBUG] [Thread-75038] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:09:07.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:09:07.553 [DEBUG] [Thread-75041] [transport.py] [_log()] starting thread (client mode): 0xf5703a60
2025-12-12T19:09:07.553 [DEBUG] [Thread-75041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:09:07.568 [DEBUG] [Thread-75041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:09:07.568 [INFO] [Thread-75041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:09:07.576 [DEBUG] [Thread-75041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:09:07.576 [DEBUG] [Thread-75041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:09:07.576 [DEBUG] [Thread-75041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] client lang: <none>
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] server lang: <none>
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] kex follows: False
2025-12-12T19:09:07.577 [DEBUG] [Thread-75041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:09:07.578 [DEBUG] [Thread-75041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:09:07.578 [DEBUG] [Thread-75041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:09:07.578 [DEBUG] [Thread-75041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:09:07.578 [DEBUG] [Thread-75041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:09:07.578 [DEBUG] [Thread-75041] [transport.py] [_log()] Compression: none
2025-12-12T19:09:07.578 [DEBUG] [Thread-75041] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:09:07.635 [DEBUG] [Thread-75041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:09:07.636 [DEBUG] [Thread-75041] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:09:07.637 [DEBUG] [Thread-75041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:09:07.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:09:07.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:09:07.691 [DEBUG] [Thread-75041] [transport.py] [_log()] userauth is OK
2025-12-12T19:09:07.691 [DEBUG] [Thread-75041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:09:07.692 [DEBUG] [Thread-75041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:09:07.692 [DEBUG] [Thread-75041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:09:07.692 [DEBUG] [Thread-75041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:09:07.715 [INFO] [Thread-75041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:09:07.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:09:07.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:09:08.566 [DEBUG] [Thread-75041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:09:08.566 [DEBUG] [Thread-75041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:09:08.614 [DEBUG] [Thread-75041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:09:08.614 [DEBUG] [Thread-75041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:09:08.623 [DEBUG] [Thread-75041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:09:08.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:09: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')
2025-12-12T19:09: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') -> 00000000
2025-12-12T19:09:08.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:09:08.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:09:08.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:09:08.658 [DEBUG] [Thread-75041] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:09:19.249 [DEBUG] [Thread-75043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:32.547 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:32.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:34.294 [DEBUG] [Thread-75044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:09:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:09:38.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:09:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:09:39.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 9, 11), 14.33, 37.55, 0.0, 40.19, 14.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:09:39.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:09:11
2025-12-12T19:09:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:09:39.609 [DEBUG] [Thread-75045] [transport.py] [_log()] starting thread (client mode): 0xf57723b0
2025-12-12T19:09:39.609 [DEBUG] [Thread-75045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:09:39.630 [DEBUG] [Thread-75045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:09:39.630 [INFO] [Thread-75045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:39.633 [DEBUG] [Thread-75045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] client lang: <none>
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] server lang: <none>
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] kex follows: False
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] Compression: none
2025-12-12T19:09:39.634 [DEBUG] [Thread-75045] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:09:39.652 [DEBUG] [Thread-75045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:09:39.652 [DEBUG] [Thread-75045] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:09:39.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:09:39.654 [DEBUG] [Thread-75045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:09:39.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:09:39.656 [DEBUG] [Thread-75045] [transport.py] [_log()] userauth is OK
2025-12-12T19:09:39.656 [DEBUG] [Thread-75045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:09:39.656 [DEBUG] [Thread-75045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:09:39.656 [DEBUG] [Thread-75045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:09:39.656 [DEBUG] [Thread-75045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:09:39.679 [INFO] [Thread-75045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:09:39.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:09:40.321 [DEBUG] [Thread-75045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:09:40.322 [DEBUG] [Thread-75045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:09:40.322 [DEBUG] [Thread-75045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:09:40.363 [DEBUG] [Thread-75045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:09:40.363 [DEBUG] [Thread-75045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:09:40.366 [DEBUG] [Thread-75045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:09:40.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:09:40.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:09:40.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:09:40.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:09:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:09:40.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:09:40.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:09:40.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:09:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:09:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.714686 -999.00  +14.10  34.51     42   +1.50 1 1 2 1 1   887    0 13.93 25.57 ----- 36.0 34.5 321.2 44.8 15.4 -26.3 15.6 -26.2 15.7 -24.0 15.8 -25.4
2025-12-12T19:09:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:09:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:09:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.714686
2025-12-12T19:09:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:09:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:09:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:09:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:09:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:09:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:09:11', tmtdew=14.33, humidity=37.55, cloud=0.0, wind=40.19, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:09:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:09:40.392 [DEBUG] [Thread-75045] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:09:40.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:09:40.489 [DEBUG] [Thread-75048] [transport.py] [_log()] starting thread (client mode): 0xfabc6470
2025-12-12T19:09:40.489 [DEBUG] [Thread-75048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:09:40.504 [DEBUG] [Thread-75048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:09:40.504 [INFO] [Thread-75048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:09:40.511 [DEBUG] [Thread-75048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:09:40.511 [DEBUG] [Thread-75048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:09:40.511 [DEBUG] [Thread-75048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:09:40.511 [DEBUG] [Thread-75048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:40.511 [DEBUG] [Thread-75048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] client lang: <none>
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] server lang: <none>
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] kex follows: False
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] Compression: none
2025-12-12T19:09:40.512 [DEBUG] [Thread-75048] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:09:40.574 [DEBUG] [Thread-75048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:09:40.575 [DEBUG] [Thread-75048] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:09:40.575 [DEBUG] [Thread-75048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:09:40.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:09:40.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:09:40.631 [DEBUG] [Thread-75048] [transport.py] [_log()] userauth is OK
2025-12-12T19:09:40.632 [DEBUG] [Thread-75048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:09:40.632 [DEBUG] [Thread-75048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:09:40.632 [DEBUG] [Thread-75048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:09:40.632 [DEBUG] [Thread-75048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:09:40.651 [INFO] [Thread-75048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:09:40.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:09:40.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:09:41.460 [DEBUG] [Thread-75048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:09:41.461 [DEBUG] [Thread-75048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:09:41.509 [DEBUG] [Thread-75048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:09:41.509 [DEBUG] [Thread-75048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:09:41.518 [DEBUG] [Thread-75048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:09:41.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:09:41.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:09:41.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:09:41.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:09:41.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:09:41.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:09:41.553 [DEBUG] [Thread-75048] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:09:49.323 [DEBUG] [Thread-75050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:02.028 [DEBUG] [Thread-75051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:04.375 [DEBUG] [Thread-75052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:11.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:10:11.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:10:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:10:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 9, 43), 14.34, 37.52, 0.0, 38.29, 14.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:10:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:09:43
2025-12-12T19:10:12.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:10:12.521 [DEBUG] [Thread-75053] [transport.py] [_log()] starting thread (client mode): 0xf57a7730
2025-12-12T19:10:12.521 [DEBUG] [Thread-75053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:10:12.542 [DEBUG] [Thread-75053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:10:12.542 [INFO] [Thread-75053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] client lang: <none>
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] server lang: <none>
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] kex follows: False
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:10:12.546 [DEBUG] [Thread-75053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:10:12.547 [DEBUG] [Thread-75053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:10:12.547 [DEBUG] [Thread-75053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:10:12.547 [DEBUG] [Thread-75053] [transport.py] [_log()] Compression: none
2025-12-12T19:10:12.547 [DEBUG] [Thread-75053] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:10:12.566 [DEBUG] [Thread-75053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:10:12.567 [DEBUG] [Thread-75053] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:10:12.567 [DEBUG] [Thread-75053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:10:12.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:10:12.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:10:12.569 [DEBUG] [Thread-75053] [transport.py] [_log()] userauth is OK
2025-12-12T19:10:12.569 [DEBUG] [Thread-75053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:10:12.570 [DEBUG] [Thread-75053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:10:12.570 [DEBUG] [Thread-75053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:10:12.570 [DEBUG] [Thread-75053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:10:12.594 [INFO] [Thread-75053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:10:12.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:10:13.618 [DEBUG] [Thread-75053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:10:13.618 [DEBUG] [Thread-75053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:10:13.618 [DEBUG] [Thread-75053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:10:13.659 [DEBUG] [Thread-75053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:10:13.659 [DEBUG] [Thread-75053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:10:13.662 [DEBUG] [Thread-75053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:10:13.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:10:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:10:13.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:10:13.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:10:13.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:10:13.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:10:13.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:10:13.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:10:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:10:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.715033 -999.00  +14.10  38.62     42   +1.50 1 1 2 1 1   887    0 13.81 20.15 ----- 52.0 38.6 317.4 44.8 15.4 -26.4 15.6 -26.3 15.7 -24.3 15.8 -25.3
2025-12-12T19:10:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:10:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:10:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.715033
2025-12-12T19:10:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:10:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:10:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:10:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:10:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:10:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:09:43', tmtdew=14.34, humidity=37.52, cloud=0.0, wind=38.29, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:09:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:10:13.692 [DEBUG] [Thread-75053] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:10:13.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:10:13.788 [DEBUG] [Thread-75056] [transport.py] [_log()] starting thread (client mode): 0xf57a7910
2025-12-12T19:10:13.788 [DEBUG] [Thread-75056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:10:13.803 [DEBUG] [Thread-75056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:10:13.803 [INFO] [Thread-75056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:10:13.810 [DEBUG] [Thread-75056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:10:13.810 [DEBUG] [Thread-75056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:10:13.810 [DEBUG] [Thread-75056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] client lang: <none>
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] server lang: <none>
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] kex follows: False
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] Compression: none
2025-12-12T19:10:13.811 [DEBUG] [Thread-75056] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:10:13.868 [DEBUG] [Thread-75056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:10:13.869 [DEBUG] [Thread-75056] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:10:13.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:10:13.870 [DEBUG] [Thread-75056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:10:13.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:10:13.924 [DEBUG] [Thread-75056] [transport.py] [_log()] userauth is OK
2025-12-12T19:10:13.924 [DEBUG] [Thread-75056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:10:13.924 [DEBUG] [Thread-75056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:10:13.924 [DEBUG] [Thread-75056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:10:13.924 [DEBUG] [Thread-75056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:10:13.943 [INFO] [Thread-75056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:10:13.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:10:13.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:10:14.829 [DEBUG] [Thread-75056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:10:14.829 [DEBUG] [Thread-75056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:10:14.880 [DEBUG] [Thread-75056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:10:14.880 [DEBUG] [Thread-75056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:10:14.890 [DEBUG] [Thread-75056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:10:14.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:10:14.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:10:14.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:10:14.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:10:14.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:10:14.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:10:14.925 [DEBUG] [Thread-75056] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:10:19.414 [DEBUG] [Thread-75058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:32.689 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:32.689 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:34.452 [DEBUG] [Thread-75059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:10:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:10:44.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:10:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:10:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 10, 15), 14.33, 37.57, 0.0, 39.24, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:10:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:10:15
2025-12-12T19:10:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:10:45.916 [DEBUG] [Thread-75060] [transport.py] [_log()] starting thread (client mode): 0xf57a7520
2025-12-12T19:10:45.916 [DEBUG] [Thread-75060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:10:45.935 [DEBUG] [Thread-75060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:10:45.935 [INFO] [Thread-75060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:10:45.938 [DEBUG] [Thread-75060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] client lang: <none>
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] server lang: <none>
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] kex follows: False
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] Compression: none
2025-12-12T19:10:45.939 [DEBUG] [Thread-75060] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:10:45.960 [DEBUG] [Thread-75060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:10:45.960 [DEBUG] [Thread-75060] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:10:45.961 [DEBUG] [Thread-75060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:10:45.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:10:45.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:10:45.963 [DEBUG] [Thread-75060] [transport.py] [_log()] userauth is OK
2025-12-12T19:10:45.963 [DEBUG] [Thread-75060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:10:45.963 [DEBUG] [Thread-75060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:10:45.963 [DEBUG] [Thread-75060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:10:45.963 [DEBUG] [Thread-75060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:10:45.999 [INFO] [Thread-75060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:10:45.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:10:46.625 [DEBUG] [Thread-75060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:10:46.625 [DEBUG] [Thread-75060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:10:46.626 [DEBUG] [Thread-75060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:10:46.666 [DEBUG] [Thread-75060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:10:46.666 [DEBUG] [Thread-75060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:10:46.669 [DEBUG] [Thread-75060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:10:46.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:10:46.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:10:46.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:10:46.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:10:46.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:10:46.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:10:46.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:10:46.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:10:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:10:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.715380 -999.00  +14.00  38.26     43   +1.70 1 1 2 1 1   887    0 13.67 14.31 ----- 40.7 38.3 315.6 56.7 15.4 -26.4 15.6 -26.4 15.7 -24.9 15.8 -25.5
2025-12-12T19:10:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:10:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:10:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.715380
2025-12-12T19:10:46.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:10:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:10:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:10:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:10:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:10:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:10:15', tmtdew=14.33, humidity=37.57, cloud=0.0, wind=39.24, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:10:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:10:46.696 [DEBUG] [Thread-75060] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:10:46.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:10:46.793 [DEBUG] [Thread-75063] [transport.py] [_log()] starting thread (client mode): 0xf57a7c70
2025-12-12T19:10:46.793 [DEBUG] [Thread-75063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:10:46.807 [DEBUG] [Thread-75063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:10:46.808 [INFO] [Thread-75063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:10:46.815 [DEBUG] [Thread-75063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:10:46.815 [DEBUG] [Thread-75063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] client lang: <none>
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] server lang: <none>
2025-12-12T19:10:46.816 [DEBUG] [Thread-75063] [transport.py] [_log()] kex follows: False
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] Compression: none
2025-12-12T19:10:46.817 [DEBUG] [Thread-75063] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:10:46.872 [DEBUG] [Thread-75063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:10:46.872 [DEBUG] [Thread-75063] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:10:46.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:10:46.874 [DEBUG] [Thread-75063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:10:46.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:10:46.928 [DEBUG] [Thread-75063] [transport.py] [_log()] userauth is OK
2025-12-12T19:10:46.928 [DEBUG] [Thread-75063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:10:46.929 [DEBUG] [Thread-75063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:10:46.929 [DEBUG] [Thread-75063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:10:46.929 [DEBUG] [Thread-75063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:10:46.947 [INFO] [Thread-75063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:10:46.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:10:46.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:10:47.806 [DEBUG] [Thread-75063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:10:47.806 [DEBUG] [Thread-75063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:10:47.853 [DEBUG] [Thread-75063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:10:47.853 [DEBUG] [Thread-75063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:10:47.862 [DEBUG] [Thread-75063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:10:47.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:10:47.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:10:47.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:10:47.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:10:47.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:10:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:10:47.894 [DEBUG] [Thread-75063] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:10:49.477 [DEBUG] [Thread-75065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:02.089 [DEBUG] [Thread-75066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:04.523 [DEBUG] [Thread-75067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:11:17.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:11:17.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:11:18.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 10, 47), 14.27, 37.32, 0.0, 38.36, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:11:18.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:10:47
2025-12-12T19:11:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:11:18.883 [DEBUG] [Thread-75068] [transport.py] [_log()] starting thread (client mode): 0xf81c26b0
2025-12-12T19:11:18.883 [DEBUG] [Thread-75068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:11:18.903 [DEBUG] [Thread-75068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:11:18.903 [INFO] [Thread-75068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] client lang: <none>
2025-12-12T19:11:18.907 [DEBUG] [Thread-75068] [transport.py] [_log()] server lang: <none>
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] kex follows: False
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] Compression: none
2025-12-12T19:11:18.908 [DEBUG] [Thread-75068] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:11:18.926 [DEBUG] [Thread-75068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:11:18.927 [DEBUG] [Thread-75068] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:11:18.927 [DEBUG] [Thread-75068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:11:18.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:11:18.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:11:18.929 [DEBUG] [Thread-75068] [transport.py] [_log()] userauth is OK
2025-12-12T19:11:18.929 [DEBUG] [Thread-75068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:11:18.929 [DEBUG] [Thread-75068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:11:18.929 [DEBUG] [Thread-75068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:11:18.929 [DEBUG] [Thread-75068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:11:18.965 [INFO] [Thread-75068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:11:18.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:11:19.553 [DEBUG] [Thread-75070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:19.572 [DEBUG] [Thread-75068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:11:19.572 [DEBUG] [Thread-75068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:11:19.572 [DEBUG] [Thread-75068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:11:19.613 [DEBUG] [Thread-75068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:11:19.613 [DEBUG] [Thread-75068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:11:19.615 [DEBUG] [Thread-75068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:11:19.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:11:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:11:19.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:11:19.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:11:19.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:11:19.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:11:19.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.715728 -999.00  +13.90  46.50     43   +1.60 1 1 2 1 1   887    0 13.32 8.46 ----- 53.2 46.5 310.6 57.9 15.4 -26.3 15.5 -26.0 15.7 -24.0 15.8 -25.1
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.715728
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:11:19.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:10:47', tmtdew=14.27, humidity=37.32, cloud=0.0, wind=38.36, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:10:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:11:19.632 [DEBUG] [Thread-75068] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:11:19.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:11:19.718 [DEBUG] [Thread-75072] [transport.py] [_log()] starting thread (client mode): 0xfabc5e10
2025-12-12T19:11:19.718 [DEBUG] [Thread-75072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:11:19.732 [DEBUG] [Thread-75072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:11:19.732 [INFO] [Thread-75072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:11:19.739 [DEBUG] [Thread-75072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] client lang: <none>
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] server lang: <none>
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] kex follows: False
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] Compression: none
2025-12-12T19:11:19.740 [DEBUG] [Thread-75072] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:11:19.796 [DEBUG] [Thread-75072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:11:19.796 [DEBUG] [Thread-75072] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:11:19.796 [DEBUG] [Thread-75072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:11:19.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:11:19.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:11:19.852 [DEBUG] [Thread-75072] [transport.py] [_log()] userauth is OK
2025-12-12T19:11:19.852 [DEBUG] [Thread-75072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:11:19.852 [DEBUG] [Thread-75072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:11:19.852 [DEBUG] [Thread-75072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:11:19.853 [DEBUG] [Thread-75072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:11:19.870 [INFO] [Thread-75072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:11:19.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:11:19.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:11:20.710 [DEBUG] [Thread-75072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:11:20.710 [DEBUG] [Thread-75072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:11:20.758 [DEBUG] [Thread-75072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:11:20.758 [DEBUG] [Thread-75072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:11:20.766 [DEBUG] [Thread-75072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:11:20.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:11:20.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:11:20.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:11:20.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:11:20.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:11:20.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:11:20.798 [DEBUG] [Thread-75072] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:11:32.829 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:32.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:34.579 [DEBUG] [Thread-75074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:49.623 [DEBUG] [Thread-75075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:11:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:11:50.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:11:50.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:11:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 11, 19), 14.28, 37.34, 0.0, 36.4, 14.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:11:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:11:19
2025-12-12T19:11:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:11:51.839 [DEBUG] [Thread-75076] [transport.py] [_log()] starting thread (client mode): 0xf81c2170
2025-12-12T19:11:51.839 [DEBUG] [Thread-75076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:11:51.858 [DEBUG] [Thread-75076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:11:51.859 [INFO] [Thread-75076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] client lang: <none>
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] server lang: <none>
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] kex follows: False
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:11:51.862 [DEBUG] [Thread-75076] [transport.py] [_log()] Compression: none
2025-12-12T19:11:51.863 [DEBUG] [Thread-75076] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:11:51.878 [DEBUG] [Thread-75076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:11:51.878 [DEBUG] [Thread-75076] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:11:51.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:11:51.878 [DEBUG] [Thread-75076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:11:51.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:11:51.879 [DEBUG] [Thread-75076] [transport.py] [_log()] userauth is OK
2025-12-12T19:11:51.879 [DEBUG] [Thread-75076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:11:51.879 [DEBUG] [Thread-75076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:11:51.879 [DEBUG] [Thread-75076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:11:51.879 [DEBUG] [Thread-75076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:11:51.898 [INFO] [Thread-75076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:11:51.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:11:52.530 [DEBUG] [Thread-75076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:11:52.530 [DEBUG] [Thread-75076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:11:52.530 [DEBUG] [Thread-75076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:11:52.571 [DEBUG] [Thread-75076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:11:52.571 [DEBUG] [Thread-75076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:11:52.573 [DEBUG] [Thread-75076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:11:52.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:11:52.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:11:52.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:11:52.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:11:52.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:11:52.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:11:52.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:11:52.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:11:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:11:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.716075 -999.00  +13.90  43.99     43   +1.80 1 1 2 1 1   887    0 13.49 1.07 ----- 42.8 44.0 309.6 53.3 15.4 -26.2 15.5 -26.2 15.6 -24.5 15.8 -24.9
2025-12-12T19:11:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:11:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:11:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.716075
2025-12-12T19:11:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:11:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:11:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:11:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:11:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:11:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:11:19', tmtdew=14.28, humidity=37.34, cloud=0.0, wind=36.4, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:11:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:11:52.593 [DEBUG] [Thread-75076] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:11:52.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:11:52.679 [DEBUG] [Thread-75079] [transport.py] [_log()] starting thread (client mode): 0xf81e45b0
2025-12-12T19:11:52.679 [DEBUG] [Thread-75079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:11:52.694 [DEBUG] [Thread-75079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:11:52.694 [INFO] [Thread-75079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] client lang: <none>
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] server lang: <none>
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] kex follows: False
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] Compression: none
2025-12-12T19:11:52.703 [DEBUG] [Thread-75079] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:11:52.759 [DEBUG] [Thread-75079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:11:52.759 [DEBUG] [Thread-75079] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:11:52.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:11:52.759 [DEBUG] [Thread-75079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:11:52.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:11:52.816 [DEBUG] [Thread-75079] [transport.py] [_log()] userauth is OK
2025-12-12T19:11:52.816 [DEBUG] [Thread-75079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:11:52.816 [DEBUG] [Thread-75079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:11:52.817 [DEBUG] [Thread-75079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:11:52.817 [DEBUG] [Thread-75079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:11:52.831 [INFO] [Thread-75079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:11:52.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:11:52.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:11:53.688 [DEBUG] [Thread-75079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:11:53.688 [DEBUG] [Thread-75079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:11:53.736 [DEBUG] [Thread-75079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:11:53.736 [DEBUG] [Thread-75079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:11:53.745 [DEBUG] [Thread-75079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:11:53.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:11:53.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:11:53.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:11:53.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:11:53.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:11:53.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:11:53.779 [DEBUG] [Thread-75079] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:12:02.141 [DEBUG] [Thread-75081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:04.653 [DEBUG] [Thread-75082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:19.706 [DEBUG] [Thread-75083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:12:23.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:12:23.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:12:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 11, 51), 14.14, 38.05, 0.0, 43.77, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:12:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:11:51
2025-12-12T19:12:24.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:12:24.816 [DEBUG] [Thread-75084] [transport.py] [_log()] starting thread (client mode): 0xfabc7670
2025-12-12T19:12:24.816 [DEBUG] [Thread-75084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:12:24.838 [DEBUG] [Thread-75084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:12:24.838 [INFO] [Thread-75084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] client lang: <none>
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] server lang: <none>
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] kex follows: False
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] Compression: none
2025-12-12T19:12:24.841 [DEBUG] [Thread-75084] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:12:24.856 [DEBUG] [Thread-75084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:12:24.856 [DEBUG] [Thread-75084] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:12:24.856 [DEBUG] [Thread-75084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:12:24.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:12:24.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:12:24.857 [DEBUG] [Thread-75084] [transport.py] [_log()] userauth is OK
2025-12-12T19:12:24.857 [DEBUG] [Thread-75084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:12:24.857 [DEBUG] [Thread-75084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:12:24.857 [DEBUG] [Thread-75084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:12:24.857 [DEBUG] [Thread-75084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:12:24.868 [INFO] [Thread-75084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:12:24.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:12:25.484 [DEBUG] [Thread-75084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:12:25.485 [DEBUG] [Thread-75084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:12:25.485 [DEBUG] [Thread-75084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:12:25.526 [DEBUG] [Thread-75084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:12:25.526 [DEBUG] [Thread-75084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:12:25.528 [DEBUG] [Thread-75084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:12:25.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:12:25.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:12:25.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:12:25.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:12:25.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:12:25.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:12:25.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.716422 -999.00  +13.80  44.40     43   +1.70 1 1 2 1 1   887    0 12.64 -7.07 ----- 45.2 44.4 314.6 55.1 15.3 -26.4 15.5 -26.4 15.5 -25.4 15.7 -25.4
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.716422
2025-12-12T19:12:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:12:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:12:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:12:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:12:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:12:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:11:51', tmtdew=14.14, humidity=38.05, cloud=0.0, wind=43.77, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:11:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:12:25.546 [DEBUG] [Thread-75084] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:12:25.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:12:25.631 [DEBUG] [Thread-75087] [transport.py] [_log()] starting thread (client mode): 0xf81c3a30
2025-12-12T19:12:25.631 [DEBUG] [Thread-75087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:12:25.646 [DEBUG] [Thread-75087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:12:25.646 [INFO] [Thread-75087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:25.653 [DEBUG] [Thread-75087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] client lang: <none>
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] server lang: <none>
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] kex follows: False
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] Compression: none
2025-12-12T19:12:25.654 [DEBUG] [Thread-75087] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:12:25.711 [DEBUG] [Thread-75087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:12:25.711 [DEBUG] [Thread-75087] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:12:25.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:12:25.712 [DEBUG] [Thread-75087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:12:25.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:12:25.769 [DEBUG] [Thread-75087] [transport.py] [_log()] userauth is OK
2025-12-12T19:12:25.769 [DEBUG] [Thread-75087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:12:25.769 [DEBUG] [Thread-75087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:12:25.769 [DEBUG] [Thread-75087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:12:25.769 [DEBUG] [Thread-75087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:12:25.783 [INFO] [Thread-75087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:12:25.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:12:25.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:12:26.644 [DEBUG] [Thread-75087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:12:26.644 [DEBUG] [Thread-75087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:12:26.692 [DEBUG] [Thread-75087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:12:26.692 [DEBUG] [Thread-75087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:12:26.700 [DEBUG] [Thread-75087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:12:26.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:12:26.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:12:26.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:12:26.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:12:26.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:12:26.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:12:26.731 [DEBUG] [Thread-75087] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:12:32.970 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:32.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:34.735 [DEBUG] [Thread-75089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:49.779 [DEBUG] [Thread-75090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:12:56.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:12:56.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:12:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:12:57.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 12, 23), 14.11, 38.12, 0.0, 41.18, 14.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:12:57.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:12:23
2025-12-12T19:12:57.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:12:57.765 [DEBUG] [Thread-75091] [transport.py] [_log()] starting thread (client mode): 0xf81e6e30
2025-12-12T19:12:57.765 [DEBUG] [Thread-75091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:12:57.785 [DEBUG] [Thread-75091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:12:57.785 [INFO] [Thread-75091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] client lang: <none>
2025-12-12T19:12:57.789 [DEBUG] [Thread-75091] [transport.py] [_log()] server lang: <none>
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] kex follows: False
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] Compression: none
2025-12-12T19:12:57.790 [DEBUG] [Thread-75091] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:12:57.807 [DEBUG] [Thread-75091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:12:57.807 [DEBUG] [Thread-75091] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:12:57.808 [DEBUG] [Thread-75091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:12:57.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:12:57.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:12:57.810 [DEBUG] [Thread-75091] [transport.py] [_log()] userauth is OK
2025-12-12T19:12:57.811 [DEBUG] [Thread-75091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:12:57.811 [DEBUG] [Thread-75091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:12:57.811 [DEBUG] [Thread-75091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:12:57.811 [DEBUG] [Thread-75091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:12:57.847 [INFO] [Thread-75091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:12:57.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:12:58.492 [DEBUG] [Thread-75091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:12:58.492 [DEBUG] [Thread-75091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:12:58.493 [DEBUG] [Thread-75091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:12:58.533 [DEBUG] [Thread-75091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:12:58.533 [DEBUG] [Thread-75091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:12:58.536 [DEBUG] [Thread-75091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:12:58.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:12:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:12:58.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:12:58.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:12:58.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:12:58.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:12:58.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:12:58.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:12:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:12:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.716769 -999.00  +13.90  37.14     43   +1.80 1 1 2 1 1   887    0 12.58 -15.52 ----- 41.3 37.1 310.0 46.6 15.3 -26.1 15.4 -26.1 15.5 -23.5 15.7 -24.9
2025-12-12T19:12:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:12:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:12:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.716769
2025-12-12T19:12:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:12:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:12:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:12:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:12:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:12:58.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:12:23', tmtdew=14.11, humidity=38.12, cloud=0.0, wind=41.18, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:12:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:12:58.562 [DEBUG] [Thread-75091] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:12:58.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:12:58.658 [DEBUG] [Thread-75094] [transport.py] [_log()] starting thread (client mode): 0xf81e66e0
2025-12-12T19:12:58.658 [DEBUG] [Thread-75094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:12:58.673 [DEBUG] [Thread-75094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:12:58.673 [INFO] [Thread-75094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:12:58.680 [DEBUG] [Thread-75094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:12:58.680 [DEBUG] [Thread-75094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:12:58.680 [DEBUG] [Thread-75094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:12:58.680 [DEBUG] [Thread-75094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:58.680 [DEBUG] [Thread-75094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] client lang: <none>
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] server lang: <none>
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] kex follows: False
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] Compression: none
2025-12-12T19:12:58.681 [DEBUG] [Thread-75094] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:12:58.738 [DEBUG] [Thread-75094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:12:58.738 [DEBUG] [Thread-75094] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:12:58.739 [DEBUG] [Thread-75094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:12:58.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:12:58.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:12:58.793 [DEBUG] [Thread-75094] [transport.py] [_log()] userauth is OK
2025-12-12T19:12:58.794 [DEBUG] [Thread-75094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:12:58.794 [DEBUG] [Thread-75094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:12:58.794 [DEBUG] [Thread-75094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:12:58.794 [DEBUG] [Thread-75094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:12:58.812 [INFO] [Thread-75094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:12:58.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:12:58.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:12:59.647 [DEBUG] [Thread-75094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:12:59.647 [DEBUG] [Thread-75094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:12:59.694 [DEBUG] [Thread-75094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:12:59.695 [DEBUG] [Thread-75094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:12:59.703 [DEBUG] [Thread-75094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:12:59.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:12:59.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:12:59.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:12:59.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:12:59.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:12:59.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:12:59.743 [DEBUG] [Thread-75094] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:13:02.194 [DEBUG] [Thread-75096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:13:04.804 [DEBUG] [Thread-75097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:13:19.857 [DEBUG] [Thread-75098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:13:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:13:29.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:13:29.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:13:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 13, 27), 14.0, 38.13, 0.0, 37.1, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:13:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:13:27
2025-12-12T19:13:30.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:13:30.743 [DEBUG] [Thread-75099] [transport.py] [_log()] starting thread (client mode): 0xf81e5f60
2025-12-12T19:13:30.743 [DEBUG] [Thread-75099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:13:30.763 [DEBUG] [Thread-75099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:13:30.763 [INFO] [Thread-75099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:13:30.766 [DEBUG] [Thread-75099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] client lang: <none>
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] server lang: <none>
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] kex follows: False
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:13:30.767 [DEBUG] [Thread-75099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:13:30.768 [DEBUG] [Thread-75099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:13:30.768 [DEBUG] [Thread-75099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:13:30.768 [DEBUG] [Thread-75099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:13:30.768 [DEBUG] [Thread-75099] [transport.py] [_log()] Compression: none
2025-12-12T19:13:30.768 [DEBUG] [Thread-75099] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:13:30.785 [DEBUG] [Thread-75099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:13:30.785 [DEBUG] [Thread-75099] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:13:30.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:13:30.786 [DEBUG] [Thread-75099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:13:30.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:13:30.788 [DEBUG] [Thread-75099] [transport.py] [_log()] userauth is OK
2025-12-12T19:13:30.788 [DEBUG] [Thread-75099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:13:30.788 [DEBUG] [Thread-75099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:13:30.788 [DEBUG] [Thread-75099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:13:30.788 [DEBUG] [Thread-75099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:13:30.812 [INFO] [Thread-75099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:13:30.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:13:31.459 [DEBUG] [Thread-75099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:13:31.459 [DEBUG] [Thread-75099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:13:31.459 [DEBUG] [Thread-75099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:13:31.501 [DEBUG] [Thread-75099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:13:31.501 [DEBUG] [Thread-75099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:13:31.503 [DEBUG] [Thread-75099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:13:31.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:13:31.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:13:31.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:13:31.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:13:31.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:13:31.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:13:31.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.717116 -999.00  +14.00  38.40     43   +1.90 1 1 2 1 1   887    0 12.07 -24.67 ----- 42.1 38.4 312.8 45.2 15.3 -26.0 15.5 -26.0 15.5 -23.7 15.7 -25.1
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.717116
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:13:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:13:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:13:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:13:27', tmtdew=14.0, humidity=38.13, cloud=0.0, wind=37.1, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:12:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:13:31.527 [DEBUG] [Thread-75099] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:13:31.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:13:31.612 [DEBUG] [Thread-75102] [transport.py] [_log()] starting thread (client mode): 0xf81547c0
2025-12-12T19:13:31.612 [DEBUG] [Thread-75102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:13:31.627 [DEBUG] [Thread-75102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:13:31.627 [INFO] [Thread-75102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] client lang: <none>
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] server lang: <none>
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] kex follows: False
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:13:31.635 [DEBUG] [Thread-75102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:13:31.636 [DEBUG] [Thread-75102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:13:31.636 [DEBUG] [Thread-75102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:13:31.636 [DEBUG] [Thread-75102] [transport.py] [_log()] Compression: none
2025-12-12T19:13:31.636 [DEBUG] [Thread-75102] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:13:31.694 [DEBUG] [Thread-75102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:13:31.695 [DEBUG] [Thread-75102] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:13:31.695 [DEBUG] [Thread-75102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:13:31.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:13:31.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:13:31.750 [DEBUG] [Thread-75102] [transport.py] [_log()] userauth is OK
2025-12-12T19:13:31.750 [DEBUG] [Thread-75102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:13:31.750 [DEBUG] [Thread-75102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:13:31.750 [DEBUG] [Thread-75102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:13:31.751 [DEBUG] [Thread-75102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:13:31.770 [INFO] [Thread-75102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:13:31.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:13:31.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:13:32.616 [DEBUG] [Thread-75102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:13:32.616 [DEBUG] [Thread-75102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:13:32.663 [DEBUG] [Thread-75102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:13:32.663 [DEBUG] [Thread-75102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:13:32.672 [DEBUG] [Thread-75102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:13:32.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:13:32.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:13:32.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:13:32.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:13:32.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:13:32.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:13:32.703 [DEBUG] [Thread-75102] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:13:33.112 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:13:33.113 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:13:34.889 [DEBUG] [Thread-75104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:13:49.932 [DEBUG] [Thread-75105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:02.245 [DEBUG] [Thread-75106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:14:02.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:14:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:14:03.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 13, 59), 13.96, 38.22, 0.0, 40.56, 14.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:14:03.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:13:59
2025-12-12T19:14:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:14:03.701 [DEBUG] [Thread-75107] [transport.py] [_log()] starting thread (client mode): 0xf5772f20
2025-12-12T19:14:03.701 [DEBUG] [Thread-75107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:14:03.722 [DEBUG] [Thread-75107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:14:03.722 [INFO] [Thread-75107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] client lang: <none>
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] server lang: <none>
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] kex follows: False
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] Compression: none
2025-12-12T19:14:03.725 [DEBUG] [Thread-75107] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:14:03.741 [DEBUG] [Thread-75107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:14:03.742 [DEBUG] [Thread-75107] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:14:03.742 [DEBUG] [Thread-75107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:14:03.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:14:03.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:14:03.746 [DEBUG] [Thread-75107] [transport.py] [_log()] userauth is OK
2025-12-12T19:14:03.746 [DEBUG] [Thread-75107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:14:03.746 [DEBUG] [Thread-75107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:14:03.746 [DEBUG] [Thread-75107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:14:03.746 [DEBUG] [Thread-75107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:14:03.771 [INFO] [Thread-75107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:14:03.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:14:04.399 [DEBUG] [Thread-75107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:14:04.399 [DEBUG] [Thread-75107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:14:04.399 [DEBUG] [Thread-75107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:14:04.440 [DEBUG] [Thread-75107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:14:04.440 [DEBUG] [Thread-75107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:14:04.444 [DEBUG] [Thread-75107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:14:04.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:14:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:14:04.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:14:04.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:14:04.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:14:04.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:14:04.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:14:04.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:14:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:14:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.717811 -999.00  +14.10  40.18     43   +1.90 1 1 2 1 1   887    0 11.52 -51.63 ----- 44.9 40.2 311.6 45.7 15.3 -26.5 15.4 -25.9 15.6 -24.5 15.7 -25.1
2025-12-12T19:14:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:14:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:14:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.717811
2025-12-12T19:14:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:14:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:14:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:14:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:14:04.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:14:04.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:13:59', tmtdew=13.96, humidity=38.22, cloud=0.0, wind=40.56, temperature=14.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:13:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:14:04.474 [DEBUG] [Thread-75107] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:14:04.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:14:04.571 [DEBUG] [Thread-75110] [transport.py] [_log()] starting thread (client mode): 0xf81e4fa0
2025-12-12T19:14:04.571 [DEBUG] [Thread-75110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:14:04.585 [DEBUG] [Thread-75110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:14:04.585 [INFO] [Thread-75110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] client lang: <none>
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] server lang: <none>
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] kex follows: False
2025-12-12T19:14:04.593 [DEBUG] [Thread-75110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:14:04.594 [DEBUG] [Thread-75110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:14:04.594 [DEBUG] [Thread-75110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:14:04.594 [DEBUG] [Thread-75110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:14:04.594 [DEBUG] [Thread-75110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:14:04.594 [DEBUG] [Thread-75110] [transport.py] [_log()] Compression: none
2025-12-12T19:14:04.594 [DEBUG] [Thread-75110] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:14:04.650 [DEBUG] [Thread-75110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:14:04.651 [DEBUG] [Thread-75110] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:14:04.651 [DEBUG] [Thread-75110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:14:04.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:14:04.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:14:04.706 [DEBUG] [Thread-75110] [transport.py] [_log()] userauth is OK
2025-12-12T19:14:04.706 [DEBUG] [Thread-75110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:14:04.706 [DEBUG] [Thread-75110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:14:04.706 [DEBUG] [Thread-75110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:14:04.706 [DEBUG] [Thread-75110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:14:04.721 [INFO] [Thread-75110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:14:04.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:14:04.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:14:04.960 [DEBUG] [Thread-75112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:05.556 [DEBUG] [Thread-75110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:14:05.557 [DEBUG] [Thread-75110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:14:05.605 [DEBUG] [Thread-75110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:14:05.605 [DEBUG] [Thread-75110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:14:05.614 [DEBUG] [Thread-75110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:14:05.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:14:05.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:14:05.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:14:05.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:14:05.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:14:05.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:14:05.648 [DEBUG] [Thread-75110] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:14:20.001 [DEBUG] [Thread-75113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:33.253 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:33.254 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:35.029 [DEBUG] [Thread-75114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:14:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:14:35.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:14:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:14:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 14, 31), 13.88, 38.43, 0.0, 39.27, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:14:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:14:31
2025-12-12T19:14:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:14:36.628 [DEBUG] [Thread-75115] [transport.py] [_log()] starting thread (client mode): 0xfabc6680
2025-12-12T19:14:36.628 [DEBUG] [Thread-75115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:14:36.649 [DEBUG] [Thread-75115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:14:36.649 [INFO] [Thread-75115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] client lang: <none>
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] server lang: <none>
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] kex follows: False
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:14:36.653 [DEBUG] [Thread-75115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:14:36.654 [DEBUG] [Thread-75115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:14:36.654 [DEBUG] [Thread-75115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:14:36.654 [DEBUG] [Thread-75115] [transport.py] [_log()] Compression: none
2025-12-12T19:14:36.654 [DEBUG] [Thread-75115] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:14:36.670 [DEBUG] [Thread-75115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:14:36.670 [DEBUG] [Thread-75115] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:14:36.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:14:36.671 [DEBUG] [Thread-75115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:14:36.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:14:36.673 [DEBUG] [Thread-75115] [transport.py] [_log()] userauth is OK
2025-12-12T19:14:36.673 [DEBUG] [Thread-75115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:14:36.674 [DEBUG] [Thread-75115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:14:36.674 [DEBUG] [Thread-75115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:14:36.674 [DEBUG] [Thread-75115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:14:36.698 [INFO] [Thread-75115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:14:36.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:14:37.343 [DEBUG] [Thread-75115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:14:37.343 [DEBUG] [Thread-75115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:14:37.343 [DEBUG] [Thread-75115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:14:37.384 [DEBUG] [Thread-75115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:14:37.384 [DEBUG] [Thread-75115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:14:37.387 [DEBUG] [Thread-75115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:14:37.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:14:37.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:14:37.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:14:37.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:14:37.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:14:37.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:14:37.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:14:37.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:14:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:14:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.718158 -999.00  +13.90  33.47     43   +1.70 1 1 2 1 1   887    0 11.27 -60.92 ----- 42.8 33.5 330.0 49.4 15.2 -26.6 15.4 -26.6 15.5 -24.0 15.6 -25.4
2025-12-12T19:14:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:14:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:14:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.718158
2025-12-12T19:14:37.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:14:37.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:14:37.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:14:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:14:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:14:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:14:31', tmtdew=13.88, humidity=38.43, cloud=0.0, wind=39.27, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:14:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:14:37.414 [DEBUG] [Thread-75115] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:14:37.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:14:37.511 [DEBUG] [Thread-75118] [transport.py] [_log()] starting thread (client mode): 0xf81e7490
2025-12-12T19:14:37.511 [DEBUG] [Thread-75118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:14:37.525 [DEBUG] [Thread-75118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:14:37.526 [INFO] [Thread-75118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:14:37.533 [DEBUG] [Thread-75118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:14:37.533 [DEBUG] [Thread-75118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] client lang: <none>
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] server lang: <none>
2025-12-12T19:14:37.534 [DEBUG] [Thread-75118] [transport.py] [_log()] kex follows: False
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] Compression: none
2025-12-12T19:14:37.535 [DEBUG] [Thread-75118] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:14:37.594 [DEBUG] [Thread-75118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:14:37.594 [DEBUG] [Thread-75118] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:14:37.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:14:37.595 [DEBUG] [Thread-75118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:14:37.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:14:37.650 [DEBUG] [Thread-75118] [transport.py] [_log()] userauth is OK
2025-12-12T19:14:37.650 [DEBUG] [Thread-75118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:14:37.651 [DEBUG] [Thread-75118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:14:37.651 [DEBUG] [Thread-75118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:14:37.651 [DEBUG] [Thread-75118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:14:37.669 [INFO] [Thread-75118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:14:37.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:14:37.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:14:38.484 [DEBUG] [Thread-75118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:14:38.484 [DEBUG] [Thread-75118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:14:38.532 [DEBUG] [Thread-75118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:14:38.533 [DEBUG] [Thread-75118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:14:38.541 [DEBUG] [Thread-75118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:14:38.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:14:38.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:14:38.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:14:38.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:14:38.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:14:38.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:14:38.575 [DEBUG] [Thread-75118] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:14:50.055 [DEBUG] [Thread-75120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:02.292 [DEBUG] [Thread-75121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:05.091 [DEBUG] [Thread-75122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:15:08.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:15:08.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:15:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 15, 3), 13.9, 38.37, 0.0, 38.59, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:15:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:15:03
2025-12-12T19:15:09.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:15:09.550 [DEBUG] [Thread-75123] [transport.py] [_log()] starting thread (client mode): 0xf81e4a90
2025-12-12T19:15:09.550 [DEBUG] [Thread-75123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:15:09.570 [DEBUG] [Thread-75123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:15:09.571 [INFO] [Thread-75123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] client lang: <none>
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] server lang: <none>
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] kex follows: False
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:15:09.574 [DEBUG] [Thread-75123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:15:09.575 [DEBUG] [Thread-75123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:15:09.575 [DEBUG] [Thread-75123] [transport.py] [_log()] Compression: none
2025-12-12T19:15:09.575 [DEBUG] [Thread-75123] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:15:09.590 [DEBUG] [Thread-75123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:15:09.591 [DEBUG] [Thread-75123] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:15:09.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:15:09.591 [DEBUG] [Thread-75123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:15:09.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:15:09.593 [DEBUG] [Thread-75123] [transport.py] [_log()] userauth is OK
2025-12-12T19:15:09.593 [DEBUG] [Thread-75123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:15:09.593 [DEBUG] [Thread-75123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:15:09.593 [DEBUG] [Thread-75123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:15:09.594 [DEBUG] [Thread-75123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:15:09.618 [INFO] [Thread-75123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:15:09.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:15:10.440 [DEBUG] [Thread-75123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:15:10.440 [DEBUG] [Thread-75123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:15:10.441 [DEBUG] [Thread-75123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:15:10.481 [DEBUG] [Thread-75123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:15:10.482 [DEBUG] [Thread-75123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:15:10.483 [DEBUG] [Thread-75123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:15:10.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:15:10.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:15:10.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:15:10.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:15:10.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:15:10.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:15:10.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:15:10.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:15:10.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:15:10.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.718505 -999.00  +13.80  35.28     43   +1.60 1 1 2 1 1   887    0 10.66 -68.53 ----- 31.4 35.3 326.4 48.4 15.2 -26.2 15.4 -26.5 15.4 -24.0 15.6 -25.2
2025-12-12T19:15:10.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:15:10.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:15:10.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.718505
2025-12-12T19:15:10.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:15:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:15:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:15:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:15:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:15:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:15:03', tmtdew=13.9, humidity=38.37, cloud=0.0, wind=38.59, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:14:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:15:10.503 [DEBUG] [Thread-75123] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:15:10.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:15:10.602 [DEBUG] [Thread-75126] [transport.py] [_log()] starting thread (client mode): 0xf57a7280
2025-12-12T19:15:10.602 [DEBUG] [Thread-75126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:15:10.620 [DEBUG] [Thread-75126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:15:10.620 [INFO] [Thread-75126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] client lang: <none>
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] server lang: <none>
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] kex follows: False
2025-12-12T19:15:10.628 [DEBUG] [Thread-75126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:15:10.629 [DEBUG] [Thread-75126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:15:10.629 [DEBUG] [Thread-75126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:15:10.629 [DEBUG] [Thread-75126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:15:10.629 [DEBUG] [Thread-75126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:15:10.629 [DEBUG] [Thread-75126] [transport.py] [_log()] Compression: none
2025-12-12T19:15:10.629 [DEBUG] [Thread-75126] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:15:10.688 [DEBUG] [Thread-75126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:15:10.688 [DEBUG] [Thread-75126] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:15:10.689 [DEBUG] [Thread-75126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:15:10.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:15:10.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:15:10.748 [DEBUG] [Thread-75126] [transport.py] [_log()] userauth is OK
2025-12-12T19:15:10.748 [DEBUG] [Thread-75126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:15:10.748 [DEBUG] [Thread-75126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:15:10.748 [DEBUG] [Thread-75126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:15:10.748 [DEBUG] [Thread-75126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:15:10.767 [INFO] [Thread-75126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:15:10.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:15:10.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:15:11.569 [DEBUG] [Thread-75126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:15:11.569 [DEBUG] [Thread-75126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:15:11.617 [DEBUG] [Thread-75126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:15:11.617 [DEBUG] [Thread-75126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:15:11.628 [DEBUG] [Thread-75126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:15:11.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:15:11.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:15:11.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:15:11.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:15:11.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:15:11.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:15:11.665 [DEBUG] [Thread-75126] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:15:20.121 [DEBUG] [Thread-75128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:33.393 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:33.394 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:35.176 [DEBUG] [Thread-75129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:15:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:15:41.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:15:41.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
2025-12-12T19:15:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 15, 35), 14.21, 37.72, 0.0, 41.23, 14.03, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:15:42.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:15:35
2025-12-12T19:15:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:15:42.644 [DEBUG] [Thread-75130] [transport.py] [_log()] starting thread (client mode): 0xf57015a0
2025-12-12T19:15:42.644 [DEBUG] [Thread-75130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:15:42.660 [DEBUG] [Thread-75130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:15:42.660 [INFO] [Thread-75130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] client lang: <none>
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] server lang: <none>
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] kex follows: False
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] Compression: none
2025-12-12T19:15:42.663 [DEBUG] [Thread-75130] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:15:42.680 [DEBUG] [Thread-75130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:15:42.680 [DEBUG] [Thread-75130] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:15:42.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:15:42.681 [DEBUG] [Thread-75130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:15:42.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:15:42.682 [DEBUG] [Thread-75130] [transport.py] [_log()] userauth is OK
2025-12-12T19:15:42.682 [DEBUG] [Thread-75130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:15:42.682 [DEBUG] [Thread-75130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:15:42.682 [DEBUG] [Thread-75130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:15:42.682 [DEBUG] [Thread-75130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:15:42.712 [INFO] [Thread-75130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:15:42.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:15:43.320 [DEBUG] [Thread-75130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:15:43.321 [DEBUG] [Thread-75130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:15:43.321 [DEBUG] [Thread-75130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:15:43.362 [DEBUG] [Thread-75130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:15:43.362 [DEBUG] [Thread-75130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:15:43.364 [DEBUG] [Thread-75130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:15:43.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:15:43.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:15:43.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:15:43.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:15:43.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:15:43.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:15:43.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.718853 -999.00  +13.90  35.89     43   +1.50 1 1 2 1 1   887    0 10.71 -83.27 ----- 29.9 35.9 315.2 43.1 15.2 -26.2 15.4 -26.0 15.5 -23.9 15.6 -25.2
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.718853
2025-12-12T19:15:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:15:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:15:35', tmtdew=14.21, humidity=37.72, cloud=0.0, wind=41.23, temperature=14.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:15:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:15:43.388 [DEBUG] [Thread-75130] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:15:43.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:15:43.473 [DEBUG] [Thread-75133] [transport.py] [_log()] starting thread (client mode): 0xf81e4a30
2025-12-12T19:15:43.473 [DEBUG] [Thread-75133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:15:43.487 [DEBUG] [Thread-75133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:15:43.487 [INFO] [Thread-75133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] client lang: <none>
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] server lang: <none>
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] kex follows: False
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:15:43.495 [DEBUG] [Thread-75133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:15:43.496 [DEBUG] [Thread-75133] [transport.py] [_log()] Compression: none
2025-12-12T19:15:43.496 [DEBUG] [Thread-75133] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:15:43.554 [DEBUG] [Thread-75133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:15:43.555 [DEBUG] [Thread-75133] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:15:43.555 [DEBUG] [Thread-75133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:15:43.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:15:43.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:15:43.611 [DEBUG] [Thread-75133] [transport.py] [_log()] userauth is OK
2025-12-12T19:15:43.611 [DEBUG] [Thread-75133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:15:43.611 [DEBUG] [Thread-75133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:15:43.611 [DEBUG] [Thread-75133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:15:43.612 [DEBUG] [Thread-75133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:15:43.632 [INFO] [Thread-75133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:15:43.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:15:43.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:15:44.446 [DEBUG] [Thread-75133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:15:44.446 [DEBUG] [Thread-75133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:15:44.494 [DEBUG] [Thread-75133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:15:44.494 [DEBUG] [Thread-75133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:15:44.503 [DEBUG] [Thread-75133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:15:44.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:15:44.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:15:44.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:15:44.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:15:44.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:15:44.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:15:44.537 [DEBUG] [Thread-75133] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:15:50.202 [DEBUG] [Thread-75135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:02.343 [DEBUG] [Thread-75136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:05.252 [DEBUG] [Thread-75137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:16:14.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:16:14.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:16:15.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 16, 7), 14.26, 37.58, 0.0, 41.88, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:16:15.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:16:07
2025-12-12T19:16:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:16:15.509 [DEBUG] [Thread-75138] [transport.py] [_log()] starting thread (client mode): 0xf57027a0
2025-12-12T19:16:15.510 [DEBUG] [Thread-75138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:16:15.531 [DEBUG] [Thread-75138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:16:15.531 [INFO] [Thread-75138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] client lang: <none>
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] server lang: <none>
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] kex follows: False
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:16:15.533 [DEBUG] [Thread-75138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:16:15.534 [DEBUG] [Thread-75138] [transport.py] [_log()] Compression: none
2025-12-12T19:16:15.534 [DEBUG] [Thread-75138] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:16:15.552 [DEBUG] [Thread-75138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:16:15.552 [DEBUG] [Thread-75138] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:16:15.553 [DEBUG] [Thread-75138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:16:15.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:16:15.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:16:15.555 [DEBUG] [Thread-75138] [transport.py] [_log()] userauth is OK
2025-12-12T19:16:15.555 [DEBUG] [Thread-75138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:16:15.555 [DEBUG] [Thread-75138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:16:15.555 [DEBUG] [Thread-75138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:16:15.555 [DEBUG] [Thread-75138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:16:15.579 [INFO] [Thread-75138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:16:15.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:16:16.235 [DEBUG] [Thread-75138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:16:16.235 [DEBUG] [Thread-75138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:16:16.236 [DEBUG] [Thread-75138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:16:16.277 [DEBUG] [Thread-75138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:16:16.277 [DEBUG] [Thread-75138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:16:16.280 [DEBUG] [Thread-75138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:16:16.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:16:16.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:16:16.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:16:16.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:16:16.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:16:16.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:16:16.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.719200 -999.00  +14.10  34.78     42   +1.50 1 1 2 1 1   887    0 10.45 -88.80 ----- 41.7 34.8 329.7 38.8 15.2 -26.8 15.4 -26.0 15.4 -24.6 15.6 -25.1
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.719200
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:16:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:16:07', tmtdew=14.26, humidity=37.58, cloud=0.0, wind=41.88, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:15:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:16:16.305 [DEBUG] [Thread-75138] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:16:16.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:16:16.390 [DEBUG] [Thread-75141] [transport.py] [_log()] starting thread (client mode): 0xf81e6260
2025-12-12T19:16:16.390 [DEBUG] [Thread-75141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:16:16.408 [DEBUG] [Thread-75141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:16:16.408 [INFO] [Thread-75141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] client lang: <none>
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] server lang: <none>
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] kex follows: False
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] Compression: none
2025-12-12T19:16:16.416 [DEBUG] [Thread-75141] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:16:16.474 [DEBUG] [Thread-75141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:16:16.474 [DEBUG] [Thread-75141] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:16:16.474 [DEBUG] [Thread-75141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:16:16.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:16:16.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:16:16.531 [DEBUG] [Thread-75141] [transport.py] [_log()] userauth is OK
2025-12-12T19:16:16.531 [DEBUG] [Thread-75141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:16:16.531 [DEBUG] [Thread-75141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:16:16.531 [DEBUG] [Thread-75141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:16:16.531 [DEBUG] [Thread-75141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:16:16.546 [INFO] [Thread-75141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:16:16.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:16:16.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:16:17.372 [DEBUG] [Thread-75141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:16:17.372 [DEBUG] [Thread-75141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:16:17.420 [DEBUG] [Thread-75141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:16:17.421 [DEBUG] [Thread-75141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:16:17.429 [DEBUG] [Thread-75141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:16:17.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:16:17.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:16:17.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:16:17.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:16:17.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:16:17.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:16:17.460 [DEBUG] [Thread-75141] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:16:20.279 [DEBUG] [Thread-75143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:33.535 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:33.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:35.314 [DEBUG] [Thread-75144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:16:47.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:16:47.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:16:48.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 16, 39), 14.23, 37.65, 0.0, 41.62, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:16:48.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:16:39
2025-12-12T19:16:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:16:48.426 [DEBUG] [Thread-75145] [transport.py] [_log()] starting thread (client mode): 0xf57014b0
2025-12-12T19:16:48.426 [DEBUG] [Thread-75145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:16:48.447 [DEBUG] [Thread-75145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:16:48.447 [INFO] [Thread-75145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:16:48.448 [DEBUG] [Thread-75145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:16:48.448 [DEBUG] [Thread-75145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] client lang: <none>
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] server lang: <none>
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] kex follows: False
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] Compression: none
2025-12-12T19:16:48.449 [DEBUG] [Thread-75145] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:16:48.460 [DEBUG] [Thread-75145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:16:48.461 [DEBUG] [Thread-75145] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:16:48.461 [DEBUG] [Thread-75145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:16:48.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:16:48.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:16:48.463 [DEBUG] [Thread-75145] [transport.py] [_log()] userauth is OK
2025-12-12T19:16:48.463 [DEBUG] [Thread-75145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:16:48.463 [DEBUG] [Thread-75145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:16:48.463 [DEBUG] [Thread-75145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:16:48.463 [DEBUG] [Thread-75145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:16:48.481 [INFO] [Thread-75145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:16:48.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:16:49.105 [DEBUG] [Thread-75145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:16:49.105 [DEBUG] [Thread-75145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:16:49.105 [DEBUG] [Thread-75145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:16:49.146 [DEBUG] [Thread-75145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:16:49.146 [DEBUG] [Thread-75145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:16:49.149 [DEBUG] [Thread-75145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:16:49.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:16:49.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:16:49.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:16:49.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:16:49.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:16:49.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:16:49.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:16:49.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:16:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:16:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.719547 -999.00  +13.90  41.34     42   +1.30 1 1 2 1 1   887    0 9.93 -91.46 ----- 40.4 41.3 310.4 47.5 15.2 -26.6 15.3 -26.2 15.3 -25.1 15.5 -25.1
2025-12-12T19:16:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:16:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:16:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.719547
2025-12-12T19:16:49.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:16:49.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:16:49.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:16:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:16:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:16:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:16:39', tmtdew=14.23, humidity=37.65, cloud=0.0, wind=41.62, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:16:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:16:49.174 [DEBUG] [Thread-75145] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:16:49.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:16:49.269 [DEBUG] [Thread-75148] [transport.py] [_log()] starting thread (client mode): 0xf5700730
2025-12-12T19:16:49.269 [DEBUG] [Thread-75148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:16:49.283 [DEBUG] [Thread-75148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:16:49.283 [INFO] [Thread-75148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:16:49.290 [DEBUG] [Thread-75148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:16:49.290 [DEBUG] [Thread-75148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:16:49.290 [DEBUG] [Thread-75148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:16:49.290 [DEBUG] [Thread-75148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] client lang: <none>
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] server lang: <none>
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] kex follows: False
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:16:49.291 [DEBUG] [Thread-75148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:16:49.292 [DEBUG] [Thread-75148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:16:49.292 [DEBUG] [Thread-75148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:16:49.292 [DEBUG] [Thread-75148] [transport.py] [_log()] Compression: none
2025-12-12T19:16:49.292 [DEBUG] [Thread-75148] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:16:49.347 [DEBUG] [Thread-75148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:16:49.348 [DEBUG] [Thread-75148] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:16:49.348 [DEBUG] [Thread-75148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:16:49.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:16:49.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:16:49.403 [DEBUG] [Thread-75148] [transport.py] [_log()] userauth is OK
2025-12-12T19:16:49.404 [DEBUG] [Thread-75148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:16:49.404 [DEBUG] [Thread-75148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:16:49.404 [DEBUG] [Thread-75148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:16:49.404 [DEBUG] [Thread-75148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:16:49.432 [INFO] [Thread-75148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:16:49.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:16:49.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:16:50.273 [DEBUG] [Thread-75148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:16:50.274 [DEBUG] [Thread-75148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:16:50.322 [DEBUG] [Thread-75148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:16:50.322 [DEBUG] [Thread-75148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:16:50.331 [DEBUG] [Thread-75148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:16:50.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:16:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:16:50.343 [DEBUG] [Thread-75150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:16:50.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:16:50.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:16:50.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:16:50.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:16:50.365 [DEBUG] [Thread-75148] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:17:02.404 [DEBUG] [Thread-75151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:05.395 [DEBUG] [Thread-75152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:20.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:17:20.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:17:20.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:17:20.425 [DEBUG] [Thread-75153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:21.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 17, 11), 14.17, 37.78, 0.0, 42.64, 13.93, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:17:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:17:11
2025-12-12T19:17:21.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:17:21.312 [DEBUG] [Thread-75154] [transport.py] [_log()] starting thread (client mode): 0xf81e5990
2025-12-12T19:17:21.312 [DEBUG] [Thread-75154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:17:21.334 [DEBUG] [Thread-75154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:17:21.334 [INFO] [Thread-75154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] client lang: <none>
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] server lang: <none>
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] kex follows: False
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] Compression: none
2025-12-12T19:17:21.338 [DEBUG] [Thread-75154] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:17:21.354 [DEBUG] [Thread-75154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:17:21.355 [DEBUG] [Thread-75154] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:17:21.355 [DEBUG] [Thread-75154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:17:21.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:17:21.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:17:21.357 [DEBUG] [Thread-75154] [transport.py] [_log()] userauth is OK
2025-12-12T19:17:21.357 [DEBUG] [Thread-75154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:17:21.357 [DEBUG] [Thread-75154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:17:21.358 [DEBUG] [Thread-75154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:17:21.358 [DEBUG] [Thread-75154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:17:21.384 [INFO] [Thread-75154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:17:21.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:17:22.001 [DEBUG] [Thread-75154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:17:22.001 [DEBUG] [Thread-75154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:17:22.001 [DEBUG] [Thread-75154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:17:22.042 [DEBUG] [Thread-75154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:17:22.042 [DEBUG] [Thread-75154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:17:22.045 [DEBUG] [Thread-75154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:17:22.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:17:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:17:22.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:17:22.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:17:22.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:17:22.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:17:22.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:17:22.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.719894 -999.00  +13.80  32.23     42   +1.40 1 1 2 1 1   887    0 9.68 -104.13 ----- 39.4 32.2 324.4 46.0 15.2 -26.6 15.2 -26.4 15.2 -26.1 15.4 -25.4
2025-12-12T19:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:17:22.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.719894
2025-12-12T19:17:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:17:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:17:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:17:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:17:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:17:22.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:17:11', tmtdew=14.17, humidity=37.78, cloud=0.0, wind=42.64, temperature=13.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:16:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:17:22.071 [DEBUG] [Thread-75154] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:17:22.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:17:22.167 [DEBUG] [Thread-75157] [transport.py] [_log()] starting thread (client mode): 0xf5702b90
2025-12-12T19:17:22.167 [DEBUG] [Thread-75157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:17:22.182 [DEBUG] [Thread-75157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:17:22.182 [INFO] [Thread-75157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:17:22.189 [DEBUG] [Thread-75157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:17:22.190 [DEBUG] [Thread-75157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] client lang: <none>
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] server lang: <none>
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] kex follows: False
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:17:22.191 [DEBUG] [Thread-75157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:17:22.192 [DEBUG] [Thread-75157] [transport.py] [_log()] Compression: none
2025-12-12T19:17:22.192 [DEBUG] [Thread-75157] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:17:22.247 [DEBUG] [Thread-75157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:17:22.247 [DEBUG] [Thread-75157] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:17:22.248 [DEBUG] [Thread-75157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:17:22.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:17:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:17:22.304 [DEBUG] [Thread-75157] [transport.py] [_log()] userauth is OK
2025-12-12T19:17:22.304 [DEBUG] [Thread-75157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:17:22.304 [DEBUG] [Thread-75157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:17:22.304 [DEBUG] [Thread-75157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:17:22.304 [DEBUG] [Thread-75157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:17:22.328 [INFO] [Thread-75157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:17:22.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:17:22.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:17:23.161 [DEBUG] [Thread-75157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:17:23.161 [DEBUG] [Thread-75157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:17:23.209 [DEBUG] [Thread-75157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:17:23.209 [DEBUG] [Thread-75157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:17:23.218 [DEBUG] [Thread-75157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:17:23.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:17:23.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:17:23.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:17:23.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:17:23.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:17:23.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:17:23.253 [DEBUG] [Thread-75157] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:17:33.674 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:33.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:35.449 [DEBUG] [Thread-75159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:50.493 [DEBUG] [Thread-75160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:17:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:17:53.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:17:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:17:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 17, 43), 13.9, 38.11, 0.0, 45.93, 13.62, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:17:53.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:17:43
2025-12-12T19:17:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:17:54.205 [DEBUG] [Thread-75161] [transport.py] [_log()] starting thread (client mode): 0xf5772800
2025-12-12T19:17:54.205 [DEBUG] [Thread-75161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:17:54.226 [DEBUG] [Thread-75161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:17:54.226 [INFO] [Thread-75161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:17:54.229 [DEBUG] [Thread-75161] [transport.py] [_log()] client lang: <none>
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] server lang: <none>
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] kex follows: False
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] Compression: none
2025-12-12T19:17:54.230 [DEBUG] [Thread-75161] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:17:54.248 [DEBUG] [Thread-75161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:17:54.249 [DEBUG] [Thread-75161] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:17:54.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:17:54.250 [DEBUG] [Thread-75161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:17:54.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:17:54.252 [DEBUG] [Thread-75161] [transport.py] [_log()] userauth is OK
2025-12-12T19:17:54.252 [DEBUG] [Thread-75161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:17:54.252 [DEBUG] [Thread-75161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:17:54.252 [DEBUG] [Thread-75161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:17:54.252 [DEBUG] [Thread-75161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:17:54.276 [INFO] [Thread-75161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:17:54.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:17:54.836 [DEBUG] [Thread-75161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:17:54.837 [DEBUG] [Thread-75161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:17:54.837 [DEBUG] [Thread-75161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:17:54.878 [DEBUG] [Thread-75161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:17:54.878 [DEBUG] [Thread-75161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:17:54.881 [DEBUG] [Thread-75161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:17:54.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:17:54.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:17:54.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:17:54.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:17:54.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:17:54.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:17:54.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:17:54.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.720241 -999.00  +13.80  22.95     42   +1.30 1 1 1 1 1   887    0 9.46 -114.83 ----- 29.5 22.9 321.2 44.8 15.1 -26.4 15.2 -26.5 15.1 -24.4 15.3 -25.4
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.720241
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:17:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:17:43', tmtdew=13.9, humidity=38.11, cloud=0.0, wind=45.93, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:17:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:17:54.902 [DEBUG] [Thread-75161] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:17:54.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:18:02.455 [DEBUG] [Thread-75164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:18:05.524 [DEBUG] [Thread-75165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:18:20.576 [DEBUG] [Thread-75166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:18:33.813 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:18:33.815 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:18:35.607 [DEBUG] [Thread-75167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:18:50.636 [DEBUG] [Thread-75168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:02.515 [DEBUG] [Thread-75169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:05.665 [DEBUG] [Thread-75170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:20.699 [DEBUG] [Thread-75171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:33.956 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:33.957 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:35.724 [DEBUG] [Thread-75172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:19:50.760 [DEBUG] [Thread-75173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:02.577 [DEBUG] [Thread-75174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:05.791 [DEBUG] [Thread-75175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:08.426 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T19:20:20.817 [DEBUG] [Thread-75176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:34.096 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:34.097 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:35.846 [DEBUG] [Thread-75177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:20:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:20:38.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:20:38.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:20:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 20, 23), 13.61, 39.5, 0.0, 40.63, 13.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:20:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:20:23
2025-12-12T19:20:39.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:20:39.429 [DEBUG] [Thread-75178] [transport.py] [_log()] starting thread (client mode): 0xf5795390
2025-12-12T19:20:39.429 [DEBUG] [Thread-75178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:20:39.450 [DEBUG] [Thread-75178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:20:39.450 [INFO] [Thread-75178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:20:39.453 [DEBUG] [Thread-75178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:20:39.453 [DEBUG] [Thread-75178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:20:39.453 [DEBUG] [Thread-75178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:20:39.453 [DEBUG] [Thread-75178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] client lang: <none>
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] server lang: <none>
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] kex follows: False
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] Compression: none
2025-12-12T19:20:39.454 [DEBUG] [Thread-75178] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:20:39.472 [DEBUG] [Thread-75178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:20:39.473 [DEBUG] [Thread-75178] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:20:39.473 [DEBUG] [Thread-75178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:20:39.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:20:39.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:20:39.475 [DEBUG] [Thread-75178] [transport.py] [_log()] userauth is OK
2025-12-12T19:20:39.476 [DEBUG] [Thread-75178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:20:39.476 [DEBUG] [Thread-75178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:20:39.476 [DEBUG] [Thread-75178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:20:39.476 [DEBUG] [Thread-75178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:20:39.499 [INFO] [Thread-75178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:20:39.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:20:40.148 [DEBUG] [Thread-75178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:20:40.148 [DEBUG] [Thread-75178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:20:40.148 [DEBUG] [Thread-75178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:20:40.189 [DEBUG] [Thread-75178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:20:40.189 [DEBUG] [Thread-75178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:20:40.192 [DEBUG] [Thread-75178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:20:40.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:20:40.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:20:40.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:20:40.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:20:40.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:20:40.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:20:40.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:20:40.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:20:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:20:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.722324 -999.00  +13.50  35.82     44   +1.50 1 1 2 1 1   887    0 9.71 -103.54 ----- 35.5 35.8 317.4 43.7 14.8 -26.0 14.8 -26.1 14.4 -24.5 14.8 -25.0
2025-12-12T19:20:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:20:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:20:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.722324
2025-12-12T19:20:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:20:40.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:20:40.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:20:40.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:20:40.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:20:40.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:20:23', tmtdew=13.61, humidity=39.5, cloud=0.0, wind=40.63, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:20:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:20:40.218 [DEBUG] [Thread-75178] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:20:40.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:20:40.315 [DEBUG] [Thread-75181] [transport.py] [_log()] starting thread (client mode): 0xf575f160
2025-12-12T19:20:40.315 [DEBUG] [Thread-75181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:20:40.330 [DEBUG] [Thread-75181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:20:40.330 [INFO] [Thread-75181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:20:40.337 [DEBUG] [Thread-75181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] client lang: <none>
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] server lang: <none>
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] kex follows: False
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] Compression: none
2025-12-12T19:20:40.338 [DEBUG] [Thread-75181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:20:40.396 [DEBUG] [Thread-75181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:20:40.397 [DEBUG] [Thread-75181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:20:40.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:20:40.398 [DEBUG] [Thread-75181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:20:40.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:20:40.453 [DEBUG] [Thread-75181] [transport.py] [_log()] userauth is OK
2025-12-12T19:20:40.454 [DEBUG] [Thread-75181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:20:40.454 [DEBUG] [Thread-75181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:20:40.454 [DEBUG] [Thread-75181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:20:40.454 [DEBUG] [Thread-75181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:20:40.472 [INFO] [Thread-75181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:20:40.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:20:40.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:20:41.298 [DEBUG] [Thread-75181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:20:41.298 [DEBUG] [Thread-75181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:20:41.346 [DEBUG] [Thread-75181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:20:41.346 [DEBUG] [Thread-75181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:20:41.355 [DEBUG] [Thread-75181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:20:41.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:20: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')
2025-12-12T19:20: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
2025-12-12T19:20:41.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:20:41.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:20:41.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:20:41.388 [DEBUG] [Thread-75181] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:20:50.873 [DEBUG] [Thread-75183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:02.629 [DEBUG] [Thread-75184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:05.907 [DEBUG] [Thread-75185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:11.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:21:11.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:21:11.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:21:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 20, 55), 13.53, 39.6, 0.0, 38.07, 13.62, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:21:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:20:55
2025-12-12T19:21:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:21:12.382 [DEBUG] [Thread-75186] [transport.py] [_log()] starting thread (client mode): 0xf81c0550
2025-12-12T19:21:12.382 [DEBUG] [Thread-75186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:21:12.401 [DEBUG] [Thread-75186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:21:12.401 [INFO] [Thread-75186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:21:12.404 [DEBUG] [Thread-75186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] client lang: <none>
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] server lang: <none>
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] kex follows: False
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:21:12.405 [DEBUG] [Thread-75186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:21:12.406 [DEBUG] [Thread-75186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:21:12.406 [DEBUG] [Thread-75186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:21:12.406 [DEBUG] [Thread-75186] [transport.py] [_log()] Compression: none
2025-12-12T19:21:12.406 [DEBUG] [Thread-75186] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:21:12.424 [DEBUG] [Thread-75186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:21:12.425 [DEBUG] [Thread-75186] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:21:12.426 [DEBUG] [Thread-75186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:21:12.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:21:12.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:21:12.428 [DEBUG] [Thread-75186] [transport.py] [_log()] userauth is OK
2025-12-12T19:21:12.428 [DEBUG] [Thread-75186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:21:12.429 [DEBUG] [Thread-75186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:21:12.429 [DEBUG] [Thread-75186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:21:12.429 [DEBUG] [Thread-75186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:21:12.453 [INFO] [Thread-75186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:21:12.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:21:13.095 [DEBUG] [Thread-75186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:21:13.095 [DEBUG] [Thread-75186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:21:13.095 [DEBUG] [Thread-75186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:21:13.136 [DEBUG] [Thread-75186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:21:13.136 [DEBUG] [Thread-75186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:21:13.139 [DEBUG] [Thread-75186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:21:13.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:21:13.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:21:13.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:21:13.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:21:13.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:21:13.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:21:13.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:21:13.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:21:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:21:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.722672 -999.00  +13.50  41.70     44   +1.60 1 1 2 1 1   887    0 9.49 -111.49 ----- 43.8 41.7 323.2 54.0 14.8 -26.0 14.7 -25.9 14.4 -24.2 14.7 -24.8
2025-12-12T19:21:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:21:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:21:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.722672
2025-12-12T19:21:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:21:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:21:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:21:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:21:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:21:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:20:55', tmtdew=13.53, humidity=39.6, cloud=0.0, wind=38.07, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:20:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:21:13.163 [DEBUG] [Thread-75186] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:21:13.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:21:13.258 [DEBUG] [Thread-75189] [transport.py] [_log()] starting thread (client mode): 0xf574e500
2025-12-12T19:21:13.258 [DEBUG] [Thread-75189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:21:13.273 [DEBUG] [Thread-75189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:21:13.273 [INFO] [Thread-75189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:21:13.281 [DEBUG] [Thread-75189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:21:13.281 [DEBUG] [Thread-75189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:21:13.281 [DEBUG] [Thread-75189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] client lang: <none>
2025-12-12T19:21:13.282 [DEBUG] [Thread-75189] [transport.py] [_log()] server lang: <none>
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] kex follows: False
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] Compression: none
2025-12-12T19:21:13.283 [DEBUG] [Thread-75189] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:21:13.341 [DEBUG] [Thread-75189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:21:13.341 [DEBUG] [Thread-75189] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:21:13.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:21:13.342 [DEBUG] [Thread-75189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:21:13.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:21:13.397 [DEBUG] [Thread-75189] [transport.py] [_log()] userauth is OK
2025-12-12T19:21:13.398 [DEBUG] [Thread-75189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:21:13.398 [DEBUG] [Thread-75189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:21:13.398 [DEBUG] [Thread-75189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:21:13.398 [DEBUG] [Thread-75189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:21:13.417 [INFO] [Thread-75189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:21:13.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:21:13.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:21:14.236 [DEBUG] [Thread-75189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:21:14.236 [DEBUG] [Thread-75189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:21:14.284 [DEBUG] [Thread-75189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:21:14.284 [DEBUG] [Thread-75189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:21:14.293 [DEBUG] [Thread-75189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:21:14.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:21:14.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:21:14.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:21:14.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:21:14.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:21:14.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:21:14.327 [DEBUG] [Thread-75189] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:21:20.935 [DEBUG] [Thread-75191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:34.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:34.240 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:35.981 [DEBUG] [Thread-75192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:21:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:21:44.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:21:44.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:21:45.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 21, 27), 13.49, 39.66, 0.0, 38.85, 13.54, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:21:45.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:21:27
2025-12-12T19:21:45.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:21:45.285 [DEBUG] [Thread-75193] [transport.py] [_log()] starting thread (client mode): 0xf8156260
2025-12-12T19:21:45.286 [DEBUG] [Thread-75193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:21:45.305 [DEBUG] [Thread-75193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:21:45.305 [INFO] [Thread-75193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:21:45.308 [DEBUG] [Thread-75193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:21:45.308 [DEBUG] [Thread-75193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] client lang: <none>
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] server lang: <none>
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] kex follows: False
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] Compression: none
2025-12-12T19:21:45.309 [DEBUG] [Thread-75193] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:21:45.318 [DEBUG] [Thread-75193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:21:45.318 [DEBUG] [Thread-75193] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:21:45.319 [DEBUG] [Thread-75193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:21:45.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:21:45.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:21:45.320 [DEBUG] [Thread-75193] [transport.py] [_log()] userauth is OK
2025-12-12T19:21:45.320 [DEBUG] [Thread-75193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:21:45.320 [DEBUG] [Thread-75193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:21:45.321 [DEBUG] [Thread-75193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:21:45.321 [DEBUG] [Thread-75193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:21:45.338 [INFO] [Thread-75193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:21:45.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:21:45.942 [DEBUG] [Thread-75193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:21:45.943 [DEBUG] [Thread-75193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:21:45.943 [DEBUG] [Thread-75193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:21:45.984 [DEBUG] [Thread-75193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:21:45.984 [DEBUG] [Thread-75193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:21:45.987 [DEBUG] [Thread-75193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:21:45.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:21:45.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:21:46.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:21:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:21:46.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:21:46.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:21:46.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:21:46.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:21:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:21:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.723019 -999.00  +13.40  33.72     44   +1.60 1 1 2 1 1   887    0 9.48 -103.66 ----- 37.1 33.7 324.4 54.1 14.7 -26.1 14.7 -25.8 14.4 -23.9 14.7 -24.8
2025-12-12T19:21:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:21:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:21:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.723019
2025-12-12T19:21:46.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:21:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:21:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:21:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:21:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:21:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:21:27', tmtdew=13.49, humidity=39.66, cloud=0.0, wind=38.85, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:21:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:21:46.011 [DEBUG] [Thread-75193] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:21:46.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:21:46.109 [DEBUG] [Thread-75196] [transport.py] [_log()] starting thread (client mode): 0xf5797e20
2025-12-12T19:21:46.109 [DEBUG] [Thread-75196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:21:46.124 [DEBUG] [Thread-75196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:21:46.124 [INFO] [Thread-75196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:21:46.132 [DEBUG] [Thread-75196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] client lang: <none>
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] server lang: <none>
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] kex follows: False
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:21:46.133 [DEBUG] [Thread-75196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:21:46.134 [DEBUG] [Thread-75196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:21:46.134 [DEBUG] [Thread-75196] [transport.py] [_log()] Compression: none
2025-12-12T19:21:46.134 [DEBUG] [Thread-75196] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:21:46.190 [DEBUG] [Thread-75196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:21:46.191 [DEBUG] [Thread-75196] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:21:46.191 [DEBUG] [Thread-75196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:21:46.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:21:46.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:21:46.246 [DEBUG] [Thread-75196] [transport.py] [_log()] userauth is OK
2025-12-12T19:21:46.246 [DEBUG] [Thread-75196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:21:46.246 [DEBUG] [Thread-75196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:21:46.246 [DEBUG] [Thread-75196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:21:46.246 [DEBUG] [Thread-75196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:21:46.267 [INFO] [Thread-75196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:21:46.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:21:46.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:21:47.188 [DEBUG] [Thread-75196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:21:47.188 [DEBUG] [Thread-75196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:21:47.236 [DEBUG] [Thread-75196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:21:47.236 [DEBUG] [Thread-75196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:21:47.245 [DEBUG] [Thread-75196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:21:47.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:21:47.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:21:47.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:21:47.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:21:47.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:21:47.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:21:47.280 [DEBUG] [Thread-75196] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:21:51.011 [DEBUG] [Thread-75198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:02.693 [DEBUG] [Thread-75199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:06.060 [DEBUG] [Thread-75200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:17.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:22:17.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:22:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 21, 59), 13.46, 39.63, 0.0, 39.33, 13.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:22:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:21:59
2025-12-12T19:22:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:22:18.287 [DEBUG] [Thread-75201] [transport.py] [_log()] starting thread (client mode): 0xf8154a60
2025-12-12T19:22:18.287 [DEBUG] [Thread-75201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:22:18.308 [DEBUG] [Thread-75201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:22:18.308 [INFO] [Thread-75201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:22:18.311 [DEBUG] [Thread-75201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:22:18.311 [DEBUG] [Thread-75201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] client lang: <none>
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] server lang: <none>
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] kex follows: False
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:22:18.312 [DEBUG] [Thread-75201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:22:18.313 [DEBUG] [Thread-75201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:22:18.313 [DEBUG] [Thread-75201] [transport.py] [_log()] Compression: none
2025-12-12T19:22:18.313 [DEBUG] [Thread-75201] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:22:18.330 [DEBUG] [Thread-75201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:22:18.331 [DEBUG] [Thread-75201] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:22:18.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:22:18.332 [DEBUG] [Thread-75201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:22:18.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:22:18.334 [DEBUG] [Thread-75201] [transport.py] [_log()] userauth is OK
2025-12-12T19:22:18.334 [DEBUG] [Thread-75201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:22:18.334 [DEBUG] [Thread-75201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:22:18.334 [DEBUG] [Thread-75201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:22:18.334 [DEBUG] [Thread-75201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:22:18.358 [INFO] [Thread-75201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:22:18.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:22:19.001 [DEBUG] [Thread-75201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:22:19.001 [DEBUG] [Thread-75201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:22:19.001 [DEBUG] [Thread-75201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:22:19.042 [DEBUG] [Thread-75201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:22:19.042 [DEBUG] [Thread-75201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:22:19.045 [DEBUG] [Thread-75201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:22:19.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:22:19.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:22:19.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:22:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:22:19.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:22:19.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:22:19.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:22:19.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:22:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:22:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.723366 -999.00  +13.40  37.48     44   +1.60 1 1 2 1 1   887    0 9.79 -100.24 ----- 32.3 37.5 330.2 45.0 14.7 -26.1 14.6 -25.8 14.3 -24.3 14.6 -24.8
2025-12-12T19:22:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:22:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:22:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.723366
2025-12-12T19:22:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:22:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:22:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:22:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:22:19.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:22:19.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:21:59', tmtdew=13.46, humidity=39.63, cloud=0.0, wind=39.33, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:21:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:22:19.070 [DEBUG] [Thread-75201] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:22:19.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:22:19.168 [DEBUG] [Thread-75204] [transport.py] [_log()] starting thread (client mode): 0xf813f8b0
2025-12-12T19:22:19.168 [DEBUG] [Thread-75204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:22:19.183 [DEBUG] [Thread-75204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:22:19.183 [INFO] [Thread-75204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:22:19.190 [DEBUG] [Thread-75204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:22:19.191 [DEBUG] [Thread-75204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] client lang: <none>
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] server lang: <none>
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] kex follows: False
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:22:19.192 [DEBUG] [Thread-75204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:22:19.193 [DEBUG] [Thread-75204] [transport.py] [_log()] Compression: none
2025-12-12T19:22:19.193 [DEBUG] [Thread-75204] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:22:19.249 [DEBUG] [Thread-75204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:22:19.250 [DEBUG] [Thread-75204] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:22:19.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:22:19.251 [DEBUG] [Thread-75204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:22:19.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:22:19.306 [DEBUG] [Thread-75204] [transport.py] [_log()] userauth is OK
2025-12-12T19:22:19.306 [DEBUG] [Thread-75204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:22:19.306 [DEBUG] [Thread-75204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:22:19.306 [DEBUG] [Thread-75204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:22:19.306 [DEBUG] [Thread-75204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:22:19.325 [INFO] [Thread-75204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:22:19.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:22:19.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:22:20.239 [DEBUG] [Thread-75204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:22:20.239 [DEBUG] [Thread-75204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:22:20.287 [DEBUG] [Thread-75204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:22:20.287 [DEBUG] [Thread-75204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:22:20.296 [DEBUG] [Thread-75204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:22:20.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:22:20.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:22:20.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:22:20.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:22:20.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:22:20.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:22:20.329 [DEBUG] [Thread-75204] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:22:21.088 [DEBUG] [Thread-75206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:34.383 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:34.384 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:36.131 [DEBUG] [Thread-75207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:50.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:22:50.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:22:50.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
2025-12-12T19:22:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 22, 31), 13.43, 39.7, 0.0, 42.56, 13.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:22:51.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:22:31
2025-12-12T19:22:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:22:51.161 [DEBUG] [Thread-75208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:22:51.295 [DEBUG] [Thread-75209] [transport.py] [_log()] starting thread (client mode): 0xf813d7e0
2025-12-12T19:22:51.295 [DEBUG] [Thread-75209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:22:51.316 [DEBUG] [Thread-75209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:22:51.316 [INFO] [Thread-75209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] client lang: <none>
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] server lang: <none>
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] kex follows: False
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:22:51.320 [DEBUG] [Thread-75209] [transport.py] [_log()] Compression: none
2025-12-12T19:22:51.321 [DEBUG] [Thread-75209] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:22:51.336 [DEBUG] [Thread-75209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:22:51.336 [DEBUG] [Thread-75209] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:22:51.336 [DEBUG] [Thread-75209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:22:51.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:22:51.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:22:51.337 [DEBUG] [Thread-75209] [transport.py] [_log()] userauth is OK
2025-12-12T19:22:51.337 [DEBUG] [Thread-75209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:22:51.338 [DEBUG] [Thread-75209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:22:51.338 [DEBUG] [Thread-75209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:22:51.338 [DEBUG] [Thread-75209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:22:51.349 [INFO] [Thread-75209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:22:51.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:22:51.999 [DEBUG] [Thread-75209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:22:51.999 [DEBUG] [Thread-75209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:22:51.999 [DEBUG] [Thread-75209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:22:52.040 [DEBUG] [Thread-75209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:22:52.040 [DEBUG] [Thread-75209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:22:52.043 [DEBUG] [Thread-75209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:22:52.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:22:52.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:22:52.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:22:52.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:22:52.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:22:52.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:22:52.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:22:52.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:22:52.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:22:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.723714 -999.00  +13.40  36.41     44   +1.60 1 1 2 1 1   887    0 9.83 -101.41 ----- 39.8 36.4 310.6 47.8 14.6 -26.1 14.5 -26.0 14.2 -23.8 14.5 -24.5
2025-12-12T19:22:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:22:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:22:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.723714
2025-12-12T19:22:52.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:22:52.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:22:52.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:22:52.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:22:52.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:22:52.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:22:31', tmtdew=13.43, humidity=39.7, cloud=0.0, wind=42.56, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:22:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:22:52.066 [DEBUG] [Thread-75209] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:22:52.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:22:52.162 [DEBUG] [Thread-75212] [transport.py] [_log()] starting thread (client mode): 0xf5795120
2025-12-12T19:22:52.162 [DEBUG] [Thread-75212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:22:52.177 [DEBUG] [Thread-75212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:22:52.177 [INFO] [Thread-75212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:22:52.184 [DEBUG] [Thread-75212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:22:52.184 [DEBUG] [Thread-75212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] client lang: <none>
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] server lang: <none>
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] kex follows: False
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:22:52.185 [DEBUG] [Thread-75212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:22:52.186 [DEBUG] [Thread-75212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:22:52.186 [DEBUG] [Thread-75212] [transport.py] [_log()] Compression: none
2025-12-12T19:22:52.186 [DEBUG] [Thread-75212] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:22:52.248 [DEBUG] [Thread-75212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:22:52.248 [DEBUG] [Thread-75212] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:22:52.249 [DEBUG] [Thread-75212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:22:52.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:22:52.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:22:52.307 [DEBUG] [Thread-75212] [transport.py] [_log()] userauth is OK
2025-12-12T19:22:52.308 [DEBUG] [Thread-75212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:22:52.308 [DEBUG] [Thread-75212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:22:52.308 [DEBUG] [Thread-75212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:22:52.308 [DEBUG] [Thread-75212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:22:52.329 [INFO] [Thread-75212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:22:52.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:22:52.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:22:53.150 [DEBUG] [Thread-75212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:22:53.151 [DEBUG] [Thread-75212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:22:53.202 [DEBUG] [Thread-75212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:22:53.202 [DEBUG] [Thread-75212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:22:53.214 [DEBUG] [Thread-75212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:22:53.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:22:53.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:22:53.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:22:53.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:22:53.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:22:53.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:22:53.259 [DEBUG] [Thread-75212] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:23:02.760 [DEBUG] [Thread-75214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:06.195 [DEBUG] [Thread-75215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:21.228 [DEBUG] [Thread-75216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:23:23.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:23:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:23:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 23, 4), 13.39, 39.81, 0.0, 39.98, 13.42, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:23:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:23:04
2025-12-12T19:23:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:23:24.303 [DEBUG] [Thread-75217] [transport.py] [_log()] starting thread (client mode): 0xf813cbe0
2025-12-12T19:23:24.304 [DEBUG] [Thread-75217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:23:24.323 [DEBUG] [Thread-75217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:23:24.324 [INFO] [Thread-75217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:23:24.326 [DEBUG] [Thread-75217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] client lang: <none>
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] server lang: <none>
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] kex follows: False
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] Compression: none
2025-12-12T19:23:24.327 [DEBUG] [Thread-75217] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:23:24.344 [DEBUG] [Thread-75217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:23:24.344 [DEBUG] [Thread-75217] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:23:24.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:23:24.344 [DEBUG] [Thread-75217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:23:24.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:23:24.345 [DEBUG] [Thread-75217] [transport.py] [_log()] userauth is OK
2025-12-12T19:23:24.345 [DEBUG] [Thread-75217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:23:24.345 [DEBUG] [Thread-75217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:23:24.345 [DEBUG] [Thread-75217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:23:24.345 [DEBUG] [Thread-75217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:23:24.361 [INFO] [Thread-75217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:23:24.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:23:24.963 [DEBUG] [Thread-75217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:23:24.963 [DEBUG] [Thread-75217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:23:24.964 [DEBUG] [Thread-75217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:23:25.005 [DEBUG] [Thread-75217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:23:25.005 [DEBUG] [Thread-75217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:23:25.007 [DEBUG] [Thread-75217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:23:25.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:23:25.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:23:25.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:23:25.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:23:25.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:23:25.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:23:25.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.724061 -999.00  +13.50  36.06     44   +1.50 1 1 2 1 1   887    0 9.64 -98.09 ----- 33.1 36.1 308.2 45.6 14.6 -25.9 14.4 -25.6 14.2 -23.9 14.5 -24.5
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.724061
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:23:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:23:04', tmtdew=13.39, humidity=39.81, cloud=0.0, wind=39.98, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:22:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:23:25.026 [DEBUG] [Thread-75217] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:23:25.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:23:25.111 [DEBUG] [Thread-75220] [transport.py] [_log()] starting thread (client mode): 0xf813c640
2025-12-12T19:23:25.111 [DEBUG] [Thread-75220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:23:25.126 [DEBUG] [Thread-75220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:23:25.126 [INFO] [Thread-75220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] client lang: <none>
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] server lang: <none>
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] kex follows: False
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] Compression: none
2025-12-12T19:23:25.136 [DEBUG] [Thread-75220] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:23:25.193 [DEBUG] [Thread-75220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:23:25.193 [DEBUG] [Thread-75220] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:23:25.193 [DEBUG] [Thread-75220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:23:25.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:23:25.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:23:25.250 [DEBUG] [Thread-75220] [transport.py] [_log()] userauth is OK
2025-12-12T19:23:25.250 [DEBUG] [Thread-75220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:23:25.250 [DEBUG] [Thread-75220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:23:25.250 [DEBUG] [Thread-75220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:23:25.250 [DEBUG] [Thread-75220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:23:25.267 [INFO] [Thread-75220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:23:25.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:23:25.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:23:26.092 [DEBUG] [Thread-75220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:23:26.092 [DEBUG] [Thread-75220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:23:26.139 [DEBUG] [Thread-75220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:23:26.140 [DEBUG] [Thread-75220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:23:26.148 [DEBUG] [Thread-75220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:23:26.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:23:26.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:23:26.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:23:26.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:23:26.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:23:26.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:23:26.180 [DEBUG] [Thread-75220] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:23:34.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:34.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:36.258 [DEBUG] [Thread-75222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:51.312 [DEBUG] [Thread-75223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:23:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:23:56.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:23:56.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:23:56.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 23, 36), 13.39, 39.94, 0.0, 37.18, 13.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:23:56.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:23:36
2025-12-12T19:23:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:23:57.174 [DEBUG] [Thread-75224] [transport.py] [_log()] starting thread (client mode): 0xf813e3b0
2025-12-12T19:23:57.174 [DEBUG] [Thread-75224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:23:57.193 [DEBUG] [Thread-75224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:23:57.194 [INFO] [Thread-75224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] client lang: <none>
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] server lang: <none>
2025-12-12T19:23:57.197 [DEBUG] [Thread-75224] [transport.py] [_log()] kex follows: False
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] Compression: none
2025-12-12T19:23:57.198 [DEBUG] [Thread-75224] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:23:57.212 [DEBUG] [Thread-75224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:23:57.213 [DEBUG] [Thread-75224] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:23:57.213 [DEBUG] [Thread-75224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:23:57.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:23:57.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:23:57.213 [DEBUG] [Thread-75224] [transport.py] [_log()] userauth is OK
2025-12-12T19:23:57.213 [DEBUG] [Thread-75224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:23:57.213 [DEBUG] [Thread-75224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:23:57.213 [DEBUG] [Thread-75224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:23:57.214 [DEBUG] [Thread-75224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:23:57.228 [INFO] [Thread-75224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:23:57.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:23:57.857 [DEBUG] [Thread-75224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:23:57.857 [DEBUG] [Thread-75224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:23:57.858 [DEBUG] [Thread-75224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:23:57.899 [DEBUG] [Thread-75224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:23:57.899 [DEBUG] [Thread-75224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:23:57.901 [DEBUG] [Thread-75224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:23:57.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:23:57.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:23:57.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:23:57.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:23:57.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:23:57.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:23:57.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:23:57.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:23:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:23:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.724408 -999.00  +13.40  50.26     44   +1.60 1 1 2 1 1   887    0 9.75 -95.23 ----- 46.6 50.3 315.0 54.0 14.6 -25.8 14.4 -25.7 14.1 -23.9 14.4 -24.7
2025-12-12T19:23:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:23:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:23:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.724408
2025-12-12T19:23:57.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:23:57.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:23:57.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:23:57.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:23:57.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:23:57.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:23:36', tmtdew=13.39, humidity=39.94, cloud=0.0, wind=37.18, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:23:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:23:57.925 [DEBUG] [Thread-75224] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:23:58.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:23:58.022 [DEBUG] [Thread-75227] [transport.py] [_log()] starting thread (client mode): 0xf5797700
2025-12-12T19:23:58.022 [DEBUG] [Thread-75227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:23:58.036 [DEBUG] [Thread-75227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:23:58.037 [INFO] [Thread-75227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] client lang: <none>
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] server lang: <none>
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] kex follows: False
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:23:58.044 [DEBUG] [Thread-75227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:23:58.045 [DEBUG] [Thread-75227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:23:58.045 [DEBUG] [Thread-75227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:23:58.045 [DEBUG] [Thread-75227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:23:58.045 [DEBUG] [Thread-75227] [transport.py] [_log()] Compression: none
2025-12-12T19:23:58.045 [DEBUG] [Thread-75227] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:23:58.103 [DEBUG] [Thread-75227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:23:58.104 [DEBUG] [Thread-75227] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:23:58.104 [DEBUG] [Thread-75227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:23:58.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:23:58.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:23:58.160 [DEBUG] [Thread-75227] [transport.py] [_log()] userauth is OK
2025-12-12T19:23:58.160 [DEBUG] [Thread-75227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:23:58.160 [DEBUG] [Thread-75227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:23:58.160 [DEBUG] [Thread-75227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:23:58.160 [DEBUG] [Thread-75227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:23:58.181 [INFO] [Thread-75227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:23:58.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:23:58.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:23:58.996 [DEBUG] [Thread-75227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:23:58.996 [DEBUG] [Thread-75227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:23:59.044 [DEBUG] [Thread-75227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:23:59.044 [DEBUG] [Thread-75227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:23:59.053 [DEBUG] [Thread-75227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:23:59.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:23:59.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:23:59.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:23:59.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:23:59.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:23:59.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:23:59.088 [DEBUG] [Thread-75227] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:24:02.805 [DEBUG] [Thread-75229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:24:06.339 [DEBUG] [Thread-75230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:24:21.385 [DEBUG] [Thread-75231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:24:29.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:24:29.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:24:29.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:24:29.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 24, 8), 13.39, 39.94, 0.0, 38.3, 13.49, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:24:29.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:24:08
2025-12-12T19:24:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:24:30.066 [DEBUG] [Thread-75232] [transport.py] [_log()] starting thread (client mode): 0xf813dde0
2025-12-12T19:24:30.066 [DEBUG] [Thread-75232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:24:30.086 [DEBUG] [Thread-75232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:24:30.086 [INFO] [Thread-75232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:24:30.089 [DEBUG] [Thread-75232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:24:30.089 [DEBUG] [Thread-75232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:24:30.089 [DEBUG] [Thread-75232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:24:30.089 [DEBUG] [Thread-75232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:24:30.089 [DEBUG] [Thread-75232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] client lang: <none>
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] server lang: <none>
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] kex follows: False
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] Compression: none
2025-12-12T19:24:30.090 [DEBUG] [Thread-75232] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:24:30.106 [DEBUG] [Thread-75232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:24:30.106 [DEBUG] [Thread-75232] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:24:30.107 [DEBUG] [Thread-75232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:24:30.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:24:30.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:24:30.108 [DEBUG] [Thread-75232] [transport.py] [_log()] userauth is OK
2025-12-12T19:24:30.108 [DEBUG] [Thread-75232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:24:30.108 [DEBUG] [Thread-75232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:24:30.108 [DEBUG] [Thread-75232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:24:30.108 [DEBUG] [Thread-75232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:24:30.122 [INFO] [Thread-75232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:24:30.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:24:30.744 [DEBUG] [Thread-75232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:24:30.744 [DEBUG] [Thread-75232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:24:30.744 [DEBUG] [Thread-75232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:24:30.785 [DEBUG] [Thread-75232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:24:30.785 [DEBUG] [Thread-75232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:24:30.788 [DEBUG] [Thread-75232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:24:30.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:24:30.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:24:30.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:24:30.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:24:30.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:24:30.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:24:30.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:24:30.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:24:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:24:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.725102 -999.00  +13.20  47.22     45   +1.70 1 1 2 1 1   886    0 10.07 -83.60 ----- 48.0 47.2 310.8 54.6 14.5 -26.0 14.4 -26.0 14.0 -24.3 14.4 -24.8
2025-12-12T19:24:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:24:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:24:30.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.725102
2025-12-12T19:24:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:24:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:24:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:24:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:24:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:24:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:24:08', tmtdew=13.39, humidity=39.94, cloud=0.0, wind=38.3, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:24:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:24:30.814 [DEBUG] [Thread-75232] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:24:30.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:24:30.922 [DEBUG] [Thread-75235] [transport.py] [_log()] starting thread (client mode): 0xf813c070
2025-12-12T19:24:30.922 [DEBUG] [Thread-75235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:24:30.936 [DEBUG] [Thread-75235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:24:30.936 [INFO] [Thread-75235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] client lang: <none>
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] server lang: <none>
2025-12-12T19:24:30.944 [DEBUG] [Thread-75235] [transport.py] [_log()] kex follows: False
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] Compression: none
2025-12-12T19:24:30.945 [DEBUG] [Thread-75235] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:24:31.001 [DEBUG] [Thread-75235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:24:31.002 [DEBUG] [Thread-75235] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:24:31.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:24:31.003 [DEBUG] [Thread-75235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:24:31.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:24:31.058 [DEBUG] [Thread-75235] [transport.py] [_log()] userauth is OK
2025-12-12T19:24:31.058 [DEBUG] [Thread-75235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:24:31.058 [DEBUG] [Thread-75235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:24:31.058 [DEBUG] [Thread-75235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:24:31.058 [DEBUG] [Thread-75235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:24:31.077 [INFO] [Thread-75235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:24:31.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:24:31.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:24:31.946 [DEBUG] [Thread-75235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:24:31.946 [DEBUG] [Thread-75235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:24:31.995 [DEBUG] [Thread-75235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:24:31.995 [DEBUG] [Thread-75235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:24:32.004 [DEBUG] [Thread-75235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:24:32.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:24:32.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:24: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') -> 00000000
2025-12-12T19:24:32.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:24:32.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:24:32.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:24:32.037 [DEBUG] [Thread-75235] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:24:34.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:24:34.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:24:36.415 [DEBUG] [Thread-75237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:24:51.456 [DEBUG] [Thread-75238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:02.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:25:02.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:25:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:25:02.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 24, 40), 13.19, 40.43, 0.0, 38.2, 13.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:25:02.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:24:40
2025-12-12T19:25:02.846 [DEBUG] [Thread-75239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:25:03.021 [DEBUG] [Thread-75240] [transport.py] [_log()] starting thread (client mode): 0xf813ffd0
2025-12-12T19:25:03.021 [DEBUG] [Thread-75240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:25:03.042 [DEBUG] [Thread-75240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:25:03.042 [INFO] [Thread-75240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:25:03.045 [DEBUG] [Thread-75240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] client lang: <none>
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] server lang: <none>
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] kex follows: False
2025-12-12T19:25:03.046 [DEBUG] [Thread-75240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:25:03.047 [DEBUG] [Thread-75240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:25:03.047 [DEBUG] [Thread-75240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:25:03.047 [DEBUG] [Thread-75240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:25:03.047 [DEBUG] [Thread-75240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:25:03.047 [DEBUG] [Thread-75240] [transport.py] [_log()] Compression: none
2025-12-12T19:25:03.047 [DEBUG] [Thread-75240] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:25:03.066 [DEBUG] [Thread-75240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:25:03.067 [DEBUG] [Thread-75240] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:25:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:25:03.068 [DEBUG] [Thread-75240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:25:03.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:25:03.070 [DEBUG] [Thread-75240] [transport.py] [_log()] userauth is OK
2025-12-12T19:25:03.070 [DEBUG] [Thread-75240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:25:03.070 [DEBUG] [Thread-75240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:25:03.070 [DEBUG] [Thread-75240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:25:03.070 [DEBUG] [Thread-75240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:25:03.089 [INFO] [Thread-75240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:25:03.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:25:03.789 [DEBUG] [Thread-75240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:25:03.790 [DEBUG] [Thread-75240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:25:03.790 [DEBUG] [Thread-75240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:25:03.831 [DEBUG] [Thread-75240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:25:03.831 [DEBUG] [Thread-75240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:25:03.834 [DEBUG] [Thread-75240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:25:03.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:25:03.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:25:03.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:25:03.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:25:03.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:25:03.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:25:03.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:25:03.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:25:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:25:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.725450 -999.00  +13.20  47.11     45   +1.80 1 1 2 1 1   886    0 9.82 -86.59 ----- 43.0 47.1 311.0 50.6 14.4 -26.2 14.3 -25.7 13.9 -23.7 14.3 -24.9
2025-12-12T19:25:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:25:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:25:03.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.725450
2025-12-12T19:25:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:25:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:25:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:25:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:25:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:25:03.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:24:40', tmtdew=13.19, humidity=40.43, cloud=0.0, wind=38.2, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:24:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:25:03.861 [DEBUG] [Thread-75240] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:25:03.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:25:03.958 [DEBUG] [Thread-75243] [transport.py] [_log()] starting thread (client mode): 0xf574d930
2025-12-12T19:25:03.958 [DEBUG] [Thread-75243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:25:03.977 [DEBUG] [Thread-75243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:25:03.977 [INFO] [Thread-75243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:25:03.984 [DEBUG] [Thread-75243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:25:03.984 [DEBUG] [Thread-75243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] client lang: <none>
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] server lang: <none>
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] kex follows: False
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:25:03.985 [DEBUG] [Thread-75243] [transport.py] [_log()] Compression: none
2025-12-12T19:25:03.986 [DEBUG] [Thread-75243] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:25:04.043 [DEBUG] [Thread-75243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:25:04.043 [DEBUG] [Thread-75243] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:25:04.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:25:04.044 [DEBUG] [Thread-75243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:25:04.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:25:04.100 [DEBUG] [Thread-75243] [transport.py] [_log()] userauth is OK
2025-12-12T19:25:04.100 [DEBUG] [Thread-75243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:25:04.100 [DEBUG] [Thread-75243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:25:04.100 [DEBUG] [Thread-75243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:25:04.100 [DEBUG] [Thread-75243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:25:04.119 [INFO] [Thread-75243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:25:04.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:25:04.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:25:05.003 [DEBUG] [Thread-75243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:25:05.003 [DEBUG] [Thread-75243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:25:05.051 [DEBUG] [Thread-75243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:25:05.051 [DEBUG] [Thread-75243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:25:05.060 [DEBUG] [Thread-75243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:25:05.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:25:05.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:25:05.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:25:05.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:25:05.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:25:05.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:25:05.100 [DEBUG] [Thread-75243] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:25:06.487 [DEBUG] [Thread-75245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:21.544 [DEBUG] [Thread-75246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:34.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:34.823 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:25:35.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:25:35.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:25:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 25, 12), 13.04, 40.88, 0.0, 42.05, 13.37, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:25:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:25:12
2025-12-12T19:25:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:25:36.093 [DEBUG] [Thread-75247] [transport.py] [_log()] starting thread (client mode): 0xf574cfa0
2025-12-12T19:25:36.093 [DEBUG] [Thread-75247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:25:36.113 [DEBUG] [Thread-75247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:25:36.113 [INFO] [Thread-75247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] client lang: <none>
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] server lang: <none>
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] kex follows: False
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:25:36.117 [DEBUG] [Thread-75247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:25:36.118 [DEBUG] [Thread-75247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:25:36.118 [DEBUG] [Thread-75247] [transport.py] [_log()] Compression: none
2025-12-12T19:25:36.118 [DEBUG] [Thread-75247] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:25:36.135 [DEBUG] [Thread-75247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:25:36.135 [DEBUG] [Thread-75247] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:25:36.136 [DEBUG] [Thread-75247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:25:36.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:25:36.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:25:36.138 [DEBUG] [Thread-75247] [transport.py] [_log()] userauth is OK
2025-12-12T19:25:36.138 [DEBUG] [Thread-75247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:25:36.138 [DEBUG] [Thread-75247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:25:36.138 [DEBUG] [Thread-75247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:25:36.138 [DEBUG] [Thread-75247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:25:36.174 [INFO] [Thread-75247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:25:36.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:25:36.571 [DEBUG] [Thread-75249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:25:36.783 [DEBUG] [Thread-75247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:25:36.784 [DEBUG] [Thread-75247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:25:36.784 [DEBUG] [Thread-75247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:25:36.825 [DEBUG] [Thread-75247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:25:36.825 [DEBUG] [Thread-75247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:25:36.827 [DEBUG] [Thread-75247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:25:36.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:25:36.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:25:36.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:25:36.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:25:36.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:25:36.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:25:36.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:25:36.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:25:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:25:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.725797 -999.00  +13.20  34.33     45   +1.80 1 1 2 1 1   886    0 9.97 -85.47 ----- 35.5 34.3 303.8 46.2 14.3 -25.7 14.3 -25.4 13.9 -23.7 14.3 -24.6
2025-12-12T19:25:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:25:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:25:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.725797
2025-12-12T19:25:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:25:36.849 [DEBUG] [Thread-75247] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:25:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:25:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:25:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:25:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:25:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:25:12', tmtdew=13.04, humidity=40.88, cloud=0.0, wind=42.05, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:25:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:25:36.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:25:36.946 [DEBUG] [Thread-75251] [transport.py] [_log()] starting thread (client mode): 0xf578b460
2025-12-12T19:25:36.946 [DEBUG] [Thread-75251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:25:36.961 [DEBUG] [Thread-75251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:25:36.961 [INFO] [Thread-75251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:25:36.968 [DEBUG] [Thread-75251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] client lang: <none>
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] server lang: <none>
2025-12-12T19:25:36.969 [DEBUG] [Thread-75251] [transport.py] [_log()] kex follows: False
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] Compression: none
2025-12-12T19:25:36.970 [DEBUG] [Thread-75251] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:25:37.025 [DEBUG] [Thread-75251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:25:37.026 [DEBUG] [Thread-75251] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:25:37.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:25:37.026 [DEBUG] [Thread-75251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:25:37.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:25:37.082 [DEBUG] [Thread-75251] [transport.py] [_log()] userauth is OK
2025-12-12T19:25:37.082 [DEBUG] [Thread-75251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:25:37.082 [DEBUG] [Thread-75251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:25:37.082 [DEBUG] [Thread-75251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:25:37.082 [DEBUG] [Thread-75251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:25:37.100 [INFO] [Thread-75251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:25:37.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:25:37.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:25:37.944 [DEBUG] [Thread-75251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:25:37.944 [DEBUG] [Thread-75251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:25:37.992 [DEBUG] [Thread-75251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:25:37.992 [DEBUG] [Thread-75251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:25:38.001 [DEBUG] [Thread-75251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:25:38.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:25:38.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:25:38.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:25:38.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:25:38.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:25:38.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:25:38.035 [DEBUG] [Thread-75251] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:25:51.602 [DEBUG] [Thread-75253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:02.899 [DEBUG] [Thread-75254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:06.657 [DEBUG] [Thread-75255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:08.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:26:08.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:26:08.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:26:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 25, 44), 12.89, 41.16, 0.0, 33.96, 13.32, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:26:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:25:44
2025-12-12T19:26:08.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:26:09.044 [DEBUG] [Thread-75256] [transport.py] [_log()] starting thread (client mode): 0xf813fca0
2025-12-12T19:26:09.044 [DEBUG] [Thread-75256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:26:09.065 [DEBUG] [Thread-75256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:26:09.065 [INFO] [Thread-75256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:26:09.069 [DEBUG] [Thread-75256] [transport.py] [_log()] client lang: <none>
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] server lang: <none>
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] kex follows: False
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] Compression: none
2025-12-12T19:26:09.070 [DEBUG] [Thread-75256] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:26:09.088 [DEBUG] [Thread-75256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:26:09.089 [DEBUG] [Thread-75256] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:26:09.089 [DEBUG] [Thread-75256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:26:09.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:26:09.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:26:09.091 [DEBUG] [Thread-75256] [transport.py] [_log()] userauth is OK
2025-12-12T19:26:09.091 [DEBUG] [Thread-75256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:26:09.092 [DEBUG] [Thread-75256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:26:09.092 [DEBUG] [Thread-75256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:26:09.092 [DEBUG] [Thread-75256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:26:09.109 [INFO] [Thread-75256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:26:09.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:26:09.726 [DEBUG] [Thread-75256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:26:09.726 [DEBUG] [Thread-75256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:26:09.726 [DEBUG] [Thread-75256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:26:09.767 [DEBUG] [Thread-75256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:26:09.767 [DEBUG] [Thread-75256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:26:09.769 [DEBUG] [Thread-75256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:26:09.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:26:09.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:26:09.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:26:09.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:26:09.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:26:09.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:26:09.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:26:09.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:26:09.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:26:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.726144 -999.00  +13.20  38.17     46   +1.90 1 1 2 1 1   886    0 10.06 -83.59 ----- 30.3 38.2 321.4 44.3 14.3 -25.9 14.2 -25.5 13.9 -23.7 14.2 -24.7
2025-12-12T19:26:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:26:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:26:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.726144
2025-12-12T19:26:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:26:09.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:26:09.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:26:09.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:26:09.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:26:09.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:25:44', tmtdew=12.89, humidity=41.16, cloud=0.0, wind=33.96, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:25:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:26:09.789 [DEBUG] [Thread-75256] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:26:09.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:26:09.887 [DEBUG] [Thread-75259] [transport.py] [_log()] starting thread (client mode): 0xf5797ee0
2025-12-12T19:26:09.887 [DEBUG] [Thread-75259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:26:09.901 [DEBUG] [Thread-75259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:26:09.901 [INFO] [Thread-75259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:26:09.909 [DEBUG] [Thread-75259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] client lang: <none>
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] server lang: <none>
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] kex follows: False
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] Compression: none
2025-12-12T19:26:09.910 [DEBUG] [Thread-75259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:26:09.967 [DEBUG] [Thread-75259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:26:09.968 [DEBUG] [Thread-75259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:26:09.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:26:09.969 [DEBUG] [Thread-75259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:26:09.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:26:10.024 [DEBUG] [Thread-75259] [transport.py] [_log()] userauth is OK
2025-12-12T19:26:10.024 [DEBUG] [Thread-75259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:26:10.024 [DEBUG] [Thread-75259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:26:10.024 [DEBUG] [Thread-75259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:26:10.024 [DEBUG] [Thread-75259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:26:10.043 [INFO] [Thread-75259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:26:10.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:26:10.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:26:10.894 [DEBUG] [Thread-75259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:26:10.894 [DEBUG] [Thread-75259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:26:10.942 [DEBUG] [Thread-75259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:26:10.942 [DEBUG] [Thread-75259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:26:10.951 [DEBUG] [Thread-75259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:26:10.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:26:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:26:10.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:26:10.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:26:10.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:26:10.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:26:10.985 [DEBUG] [Thread-75259] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:26:21.686 [DEBUG] [Thread-75261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:34.962 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:34.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:36.729 [DEBUG] [Thread-75262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:26:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:26:41.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:26:41.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:26:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 26, 16), 12.87, 41.21, 0.0, 30.38, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:26:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:26:16
2025-12-12T19:26:41.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:26:41.983 [DEBUG] [Thread-75263] [transport.py] [_log()] starting thread (client mode): 0xf575c640
2025-12-12T19:26:41.983 [DEBUG] [Thread-75263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:26:42.003 [DEBUG] [Thread-75263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:26:42.003 [INFO] [Thread-75263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:26:42.013 [DEBUG] [Thread-75263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:26:42.013 [DEBUG] [Thread-75263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:26:42.013 [DEBUG] [Thread-75263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:26:42.013 [DEBUG] [Thread-75263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] client lang: <none>
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] server lang: <none>
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] kex follows: False
2025-12-12T19:26:42.014 [DEBUG] [Thread-75263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:26:42.015 [DEBUG] [Thread-75263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:26:42.015 [DEBUG] [Thread-75263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:26:42.015 [DEBUG] [Thread-75263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:26:42.015 [DEBUG] [Thread-75263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:26:42.015 [DEBUG] [Thread-75263] [transport.py] [_log()] Compression: none
2025-12-12T19:26:42.015 [DEBUG] [Thread-75263] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:26:42.035 [DEBUG] [Thread-75263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:26:42.036 [DEBUG] [Thread-75263] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:26:42.037 [DEBUG] [Thread-75263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:26:42.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:26:42.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:26:42.039 [DEBUG] [Thread-75263] [transport.py] [_log()] userauth is OK
2025-12-12T19:26:42.039 [DEBUG] [Thread-75263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:26:42.039 [DEBUG] [Thread-75263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:26:42.039 [DEBUG] [Thread-75263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:26:42.039 [DEBUG] [Thread-75263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:26:42.064 [INFO] [Thread-75263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:26:42.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:26:42.709 [DEBUG] [Thread-75263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:26:42.709 [DEBUG] [Thread-75263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:26:42.710 [DEBUG] [Thread-75263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:26:42.752 [DEBUG] [Thread-75263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:26:42.752 [DEBUG] [Thread-75263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:26:42.754 [DEBUG] [Thread-75263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:26:42.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:26:42.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:26:42.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:26:42.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:26:42.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:26:42.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:26:42.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:26:42.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:26:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:26:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.726491 -999.00  +13.20  40.87     46   +2.00 1 1 2 1 1   886    0 10.08 -81.84 ----- 41.6 40.9 310.4 46.4 14.3 -25.8 14.2 -25.8 13.8 -23.9 14.2 -24.6
2025-12-12T19:26:42.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:26:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:26:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.726491
2025-12-12T19:26:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:26:42.779 [DEBUG] [Thread-75263] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:26:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:26:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:26:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:26:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:26:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:26:16', tmtdew=12.87, humidity=41.21, cloud=0.0, wind=30.38, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:26:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:26:42.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:26:42.892 [DEBUG] [Thread-75266] [transport.py] [_log()] starting thread (client mode): 0xf81e4e50
2025-12-12T19:26:42.893 [DEBUG] [Thread-75266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:26:42.907 [DEBUG] [Thread-75266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:26:42.907 [INFO] [Thread-75266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] client lang: <none>
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] server lang: <none>
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] kex follows: False
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] Compression: none
2025-12-12T19:26:42.915 [DEBUG] [Thread-75266] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:26:42.974 [DEBUG] [Thread-75266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:26:42.974 [DEBUG] [Thread-75266] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:26:42.975 [DEBUG] [Thread-75266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:26:42.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:26:42.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:26:43.030 [DEBUG] [Thread-75266] [transport.py] [_log()] userauth is OK
2025-12-12T19:26:43.031 [DEBUG] [Thread-75266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:26:43.031 [DEBUG] [Thread-75266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:26:43.031 [DEBUG] [Thread-75266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:26:43.031 [DEBUG] [Thread-75266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:26:43.053 [INFO] [Thread-75266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:26:43.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:26:43.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:26:43.932 [DEBUG] [Thread-75266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:26:43.932 [DEBUG] [Thread-75266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:26:43.980 [DEBUG] [Thread-75266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:26:43.980 [DEBUG] [Thread-75266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:26:43.989 [DEBUG] [Thread-75266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:26:43.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:26:43.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:26:44.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:26:44.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:26:44.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:26:44.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:26:44.024 [DEBUG] [Thread-75266] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:26:51.757 [DEBUG] [Thread-75268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:02.972 [DEBUG] [Thread-75269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:06.799 [DEBUG] [Thread-75270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:27:14.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:27:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:27:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 26, 48), 12.78, 41.82, 0.0, 36.88, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:27:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:26:48
2025-12-12T19:27:14.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:27:15.060 [DEBUG] [Thread-75271] [transport.py] [_log()] starting thread (client mode): 0xf813c400
2025-12-12T19:27:15.060 [DEBUG] [Thread-75271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:27:15.081 [DEBUG] [Thread-75271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:27:15.081 [INFO] [Thread-75271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] client lang: <none>
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] server lang: <none>
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] kex follows: False
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] Compression: none
2025-12-12T19:27:15.085 [DEBUG] [Thread-75271] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:27:15.104 [DEBUG] [Thread-75271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:27:15.104 [DEBUG] [Thread-75271] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:27:15.104 [DEBUG] [Thread-75271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:27:15.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:27:15.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:27:15.105 [DEBUG] [Thread-75271] [transport.py] [_log()] userauth is OK
2025-12-12T19:27:15.105 [DEBUG] [Thread-75271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:27:15.105 [DEBUG] [Thread-75271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:27:15.105 [DEBUG] [Thread-75271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:27:15.105 [DEBUG] [Thread-75271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:27:15.120 [INFO] [Thread-75271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:27:15.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:27:15.782 [DEBUG] [Thread-75271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:27:15.782 [DEBUG] [Thread-75271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:27:15.782 [DEBUG] [Thread-75271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:27:15.823 [DEBUG] [Thread-75271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:27:15.823 [DEBUG] [Thread-75271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:27:15.825 [DEBUG] [Thread-75271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:27:15.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:27:15.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:27:15.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:27:15.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:27:15.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:27:15.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:27:15.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.726839 -999.00  +13.10  41.49     47   +2.10 1 1 2 1 1   886    0 9.87 -87.86 ----- 47.0 41.5 315.2 52.5 14.3 -25.9 14.1 -25.6 13.7 -23.8 14.1 -24.4
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.726839
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:27:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:26:48', tmtdew=12.78, humidity=41.82, cloud=0.0, wind=36.88, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:26:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:27:15.844 [DEBUG] [Thread-75271] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:27:15.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:27:15.933 [DEBUG] [Thread-75274] [transport.py] [_log()] starting thread (client mode): 0xf574c6a0
2025-12-12T19:27:15.933 [DEBUG] [Thread-75274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:27:15.947 [DEBUG] [Thread-75274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:27:15.947 [INFO] [Thread-75274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:27:15.954 [DEBUG] [Thread-75274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:27:15.954 [DEBUG] [Thread-75274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:27:15.954 [DEBUG] [Thread-75274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:27:15.954 [DEBUG] [Thread-75274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] client lang: <none>
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] server lang: <none>
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] kex follows: False
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] Compression: none
2025-12-12T19:27:15.955 [DEBUG] [Thread-75274] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:27:16.011 [DEBUG] [Thread-75274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:27:16.011 [DEBUG] [Thread-75274] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:27:16.011 [DEBUG] [Thread-75274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:27:16.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:27:16.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:27:16.068 [DEBUG] [Thread-75274] [transport.py] [_log()] userauth is OK
2025-12-12T19:27:16.068 [DEBUG] [Thread-75274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:27:16.068 [DEBUG] [Thread-75274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:27:16.068 [DEBUG] [Thread-75274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:27:16.068 [DEBUG] [Thread-75274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:27:16.082 [INFO] [Thread-75274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:27:16.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:27:16.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:27:16.934 [DEBUG] [Thread-75274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:27:16.934 [DEBUG] [Thread-75274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:27:16.982 [DEBUG] [Thread-75274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:27:16.982 [DEBUG] [Thread-75274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:27:16.990 [DEBUG] [Thread-75274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:27:16.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:27:16.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:27:17.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:27:17.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:27:17.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:27:17.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:27:17.024 [DEBUG] [Thread-75274] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:27:21.821 [DEBUG] [Thread-75276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:35.101 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:35.103 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:36.855 [DEBUG] [Thread-75277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:27:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:27:47.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:27:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:27:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 27, 20), 12.77, 41.86, 0.0, 37.6, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:27:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:27:20
2025-12-12T19:27:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:27:48.021 [DEBUG] [Thread-75278] [transport.py] [_log()] starting thread (client mode): 0xf578add0
2025-12-12T19:27:48.021 [DEBUG] [Thread-75278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:27:48.041 [DEBUG] [Thread-75278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:27:48.041 [INFO] [Thread-75278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:27:48.044 [DEBUG] [Thread-75278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] client lang: <none>
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] server lang: <none>
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] kex follows: False
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] Compression: none
2025-12-12T19:27:48.045 [DEBUG] [Thread-75278] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:27:48.064 [DEBUG] [Thread-75278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:27:48.064 [DEBUG] [Thread-75278] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:27:48.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:27:48.066 [DEBUG] [Thread-75278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:27:48.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:27:48.067 [DEBUG] [Thread-75278] [transport.py] [_log()] userauth is OK
2025-12-12T19:27:48.067 [DEBUG] [Thread-75278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:27:48.067 [DEBUG] [Thread-75278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:27:48.067 [DEBUG] [Thread-75278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:27:48.068 [DEBUG] [Thread-75278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:27:48.090 [INFO] [Thread-75278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:27:48.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:27:48.683 [DEBUG] [Thread-75278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:27:48.684 [DEBUG] [Thread-75278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:27:48.684 [DEBUG] [Thread-75278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:27:48.725 [DEBUG] [Thread-75278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:27:48.725 [DEBUG] [Thread-75278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:27:48.727 [DEBUG] [Thread-75278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:27:48.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:27:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:27:48.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:27:48.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:27:48.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:27:48.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:27:48.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:27:48.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.727186 -999.00  +13.00  46.84     47   +2.20 1 1 2 1 1   886    0 9.84 -87.21 ----- 50.9 46.8 309.4 57.5 14.2 -26.0 14.0 -25.5 13.7 -23.6 14.0 -24.3
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.727186
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:27:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:27:20', tmtdew=12.77, humidity=41.86, cloud=0.0, wind=37.6, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:27:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:27:48.745 [DEBUG] [Thread-75278] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:27:48.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:27:48.828 [DEBUG] [Thread-75281] [transport.py] [_log()] starting thread (client mode): 0xf5700550
2025-12-12T19:27:48.828 [DEBUG] [Thread-75281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:27:48.843 [DEBUG] [Thread-75281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:27:48.843 [INFO] [Thread-75281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:27:48.851 [DEBUG] [Thread-75281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:27:48.852 [DEBUG] [Thread-75281] [transport.py] [_log()] client lang: <none>
2025-12-12T19:27:48.852 [DEBUG] [Thread-75281] [transport.py] [_log()] server lang: <none>
2025-12-12T19:27:48.852 [DEBUG] [Thread-75281] [transport.py] [_log()] kex follows: False
2025-12-12T19:27:48.852 [DEBUG] [Thread-75281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:27:48.852 [DEBUG] [Thread-75281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:27:48.852 [DEBUG] [Thread-75281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:27:48.853 [DEBUG] [Thread-75281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:27:48.853 [DEBUG] [Thread-75281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:27:48.853 [DEBUG] [Thread-75281] [transport.py] [_log()] Compression: none
2025-12-12T19:27:48.853 [DEBUG] [Thread-75281] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:27:48.907 [DEBUG] [Thread-75281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:27:48.908 [DEBUG] [Thread-75281] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:27:48.908 [DEBUG] [Thread-75281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:27:48.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:27:48.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:27:48.963 [DEBUG] [Thread-75281] [transport.py] [_log()] userauth is OK
2025-12-12T19:27:48.963 [DEBUG] [Thread-75281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:27:48.963 [DEBUG] [Thread-75281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:27:48.963 [DEBUG] [Thread-75281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:27:48.963 [DEBUG] [Thread-75281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:27:48.976 [INFO] [Thread-75281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:27:48.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:27:48.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:27:49.812 [DEBUG] [Thread-75281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:27:49.812 [DEBUG] [Thread-75281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:27:49.859 [DEBUG] [Thread-75281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:27:49.860 [DEBUG] [Thread-75281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:27:49.868 [DEBUG] [Thread-75281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:27:49.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:27:49.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:27:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:27:49.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:27:49.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:27:49.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:27:49.902 [DEBUG] [Thread-75281] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:27:51.883 [DEBUG] [Thread-75283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:03.042 [DEBUG] [Thread-75284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:06.918 [DEBUG] [Thread-75285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:28:19.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:28:19.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:28:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 27, 52), 12.33, 42.94, 0.0, 45.11, 13.21, 0, 0, 0, 2, 1, 0),)
2025-12-12T19:28:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:27:52
2025-12-12T19:28:20.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:28:20.877 [DEBUG] [Thread-75286] [transport.py] [_log()] starting thread (client mode): 0xf578bf70
2025-12-12T19:28:20.878 [DEBUG] [Thread-75286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:28:20.897 [DEBUG] [Thread-75286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:28:20.898 [INFO] [Thread-75286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] client lang: <none>
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] server lang: <none>
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] kex follows: False
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] Compression: none
2025-12-12T19:28:20.901 [DEBUG] [Thread-75286] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:28:20.918 [DEBUG] [Thread-75286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:28:20.918 [DEBUG] [Thread-75286] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:28:20.919 [DEBUG] [Thread-75286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:28:20.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:28:20.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:28:20.920 [DEBUG] [Thread-75286] [transport.py] [_log()] userauth is OK
2025-12-12T19:28:20.920 [DEBUG] [Thread-75286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:28:20.920 [DEBUG] [Thread-75286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:28:20.921 [DEBUG] [Thread-75286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:28:20.921 [DEBUG] [Thread-75286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:28:20.956 [INFO] [Thread-75286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:28:20.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:28:21.593 [DEBUG] [Thread-75286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:28:21.593 [DEBUG] [Thread-75286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:28:21.594 [DEBUG] [Thread-75286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:28:21.634 [DEBUG] [Thread-75286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:28:21.634 [DEBUG] [Thread-75286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:28:21.637 [DEBUG] [Thread-75286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:28:21.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:28:21.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:28:21.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:28:21.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:28:21.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:28:21.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:28:21.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:28:21.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:28:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:28:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.727533 -999.00  +12.90  50.08     48   +2.20 1 1 2 1 1   886    0 9.40 -89.36 ----- 45.3 50.1 313.2 55.9 14.2 -25.8 14.0 -25.6 13.7 -24.0 14.0 -24.3
2025-12-12T19:28:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:28:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:28:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.727533
2025-12-12T19:28:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:28:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:28:21.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:28:21.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:28:21.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:28:21.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:27:52', tmtdew=12.33, humidity=42.94, cloud=0.0, wind=45.11, temperature=13.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:27:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:28:21.662 [DEBUG] [Thread-75286] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:28:21.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:28:21.758 [DEBUG] [Thread-75289] [transport.py] [_log()] starting thread (client mode): 0xf575c760
2025-12-12T19:28:21.758 [DEBUG] [Thread-75289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:28:21.772 [DEBUG] [Thread-75289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:28:21.772 [INFO] [Thread-75289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:21.780 [DEBUG] [Thread-75289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] client lang: <none>
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] server lang: <none>
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] kex follows: False
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] Compression: none
2025-12-12T19:28:21.781 [DEBUG] [Thread-75289] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:28:21.837 [DEBUG] [Thread-75289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:28:21.838 [DEBUG] [Thread-75289] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:28:21.839 [DEBUG] [Thread-75289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:28:21.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:28:21.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:28:21.894 [DEBUG] [Thread-75289] [transport.py] [_log()] userauth is OK
2025-12-12T19:28:21.894 [DEBUG] [Thread-75289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:28:21.894 [DEBUG] [Thread-75289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:28:21.894 [DEBUG] [Thread-75289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:28:21.894 [DEBUG] [Thread-75289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:28:21.912 [INFO] [Thread-75289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:28:21.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:28:21.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:28:21.951 [DEBUG] [Thread-75291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:22.754 [DEBUG] [Thread-75289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:28:22.755 [DEBUG] [Thread-75289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:28:22.803 [DEBUG] [Thread-75289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:28:22.803 [DEBUG] [Thread-75289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:28:22.812 [DEBUG] [Thread-75289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:28:22.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:28:22.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:28:22.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:28:22.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:28:22.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:28:22.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:28:22.846 [DEBUG] [Thread-75289] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:28:35.244 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:35.245 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:36.994 [DEBUG] [Thread-75292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:52.024 [DEBUG] [Thread-75293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:28:52.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:28:52.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:28:52.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:28:53.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 28, 24), 12.24, 43.2, 0.0, 41.43, 13.16, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:28:53.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:28:24
2025-12-12T19:28:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:28:53.839 [DEBUG] [Thread-75294] [transport.py] [_log()] starting thread (client mode): 0xf5789180
2025-12-12T19:28:53.839 [DEBUG] [Thread-75294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:28:53.860 [DEBUG] [Thread-75294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:28:53.860 [INFO] [Thread-75294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:28:53.863 [DEBUG] [Thread-75294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:28:53.863 [DEBUG] [Thread-75294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:28:53.863 [DEBUG] [Thread-75294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:28:53.863 [DEBUG] [Thread-75294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] client lang: <none>
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] server lang: <none>
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] kex follows: False
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] Compression: none
2025-12-12T19:28:53.864 [DEBUG] [Thread-75294] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:28:53.881 [DEBUG] [Thread-75294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:28:53.882 [DEBUG] [Thread-75294] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:28:53.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:28:53.883 [DEBUG] [Thread-75294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:28:53.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:28:53.885 [DEBUG] [Thread-75294] [transport.py] [_log()] userauth is OK
2025-12-12T19:28:53.885 [DEBUG] [Thread-75294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:28:53.885 [DEBUG] [Thread-75294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:28:53.885 [DEBUG] [Thread-75294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:28:53.885 [DEBUG] [Thread-75294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:28:53.909 [INFO] [Thread-75294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:28:53.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:28:54.557 [DEBUG] [Thread-75294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:28:54.557 [DEBUG] [Thread-75294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:28:54.557 [DEBUG] [Thread-75294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:28:54.598 [DEBUG] [Thread-75294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:28:54.598 [DEBUG] [Thread-75294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:28:54.601 [DEBUG] [Thread-75294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:28:54.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:28:54.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:28:54.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:28:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:28:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:28:54.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:28:54.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:28:54.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:28:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:28:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.727880 -999.00  +12.90  39.90     48   +2.30 1 1 2 1 1   885    0 9.35 -94.94 ----- 35.0 39.9 309.8 57.4 14.1 -25.7 14.0 -25.5 13.7 -23.5 13.9 -24.4
2025-12-12T19:28:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:28:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:28:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.727880
2025-12-12T19:28:54.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:28:54.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:28:54.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:28:54.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:28:54.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:28:54.626 [DEBUG] [Thread-75294] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:28:54.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:28:24', tmtdew=12.24, humidity=43.2, cloud=0.0, wind=41.43, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:28:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:28:54.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:28:54.724 [DEBUG] [Thread-75297] [transport.py] [_log()] starting thread (client mode): 0xf81e5e10
2025-12-12T19:28:54.724 [DEBUG] [Thread-75297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:28:54.739 [DEBUG] [Thread-75297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:28:54.739 [INFO] [Thread-75297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:28:54.746 [DEBUG] [Thread-75297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:28:54.746 [DEBUG] [Thread-75297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] client lang: <none>
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] server lang: <none>
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] kex follows: False
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] Compression: none
2025-12-12T19:28:54.747 [DEBUG] [Thread-75297] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:28:54.808 [DEBUG] [Thread-75297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:28:54.809 [DEBUG] [Thread-75297] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:28:54.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:28:54.810 [DEBUG] [Thread-75297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:28:54.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:28:54.864 [DEBUG] [Thread-75297] [transport.py] [_log()] userauth is OK
2025-12-12T19:28:54.865 [DEBUG] [Thread-75297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:28:54.865 [DEBUG] [Thread-75297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:28:54.865 [DEBUG] [Thread-75297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:28:54.865 [DEBUG] [Thread-75297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:28:54.883 [INFO] [Thread-75297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:28:54.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:28:54.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:28:55.767 [DEBUG] [Thread-75297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:28:55.768 [DEBUG] [Thread-75297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:28:55.816 [DEBUG] [Thread-75297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:28:55.816 [DEBUG] [Thread-75297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:28:55.825 [DEBUG] [Thread-75297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:28:55.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:28:55.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:28:55.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:28:55.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:28:55.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:28:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:28:55.861 [DEBUG] [Thread-75297] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:29:03.105 [DEBUG] [Thread-75299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:07.053 [DEBUG] [Thread-75300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:22.098 [DEBUG] [Thread-75301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:25.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:29:25.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:29:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:29:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 28, 56), 12.11, 43.78, 0.0, 34.69, 13.11, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:29:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:28:56
2025-12-12T19:29:26.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:29:26.829 [DEBUG] [Thread-75302] [transport.py] [_log()] starting thread (client mode): 0xf813f5b0
2025-12-12T19:29:26.829 [DEBUG] [Thread-75302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:29:26.849 [DEBUG] [Thread-75302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:29:26.849 [INFO] [Thread-75302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] client lang: <none>
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] server lang: <none>
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] kex follows: False
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:29:26.853 [DEBUG] [Thread-75302] [transport.py] [_log()] Compression: none
2025-12-12T19:29:26.854 [DEBUG] [Thread-75302] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:29:26.864 [DEBUG] [Thread-75302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:29:26.864 [DEBUG] [Thread-75302] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:29:26.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:29:26.866 [DEBUG] [Thread-75302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:29:26.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:29:26.867 [DEBUG] [Thread-75302] [transport.py] [_log()] userauth is OK
2025-12-12T19:29:26.867 [DEBUG] [Thread-75302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:29:26.867 [DEBUG] [Thread-75302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:29:26.867 [DEBUG] [Thread-75302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:29:26.867 [DEBUG] [Thread-75302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:29:26.883 [INFO] [Thread-75302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:29:26.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:29:27.514 [DEBUG] [Thread-75302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:29:27.514 [DEBUG] [Thread-75302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:29:27.515 [DEBUG] [Thread-75302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:29:27.555 [DEBUG] [Thread-75302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:29:27.555 [DEBUG] [Thread-75302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:29:27.558 [DEBUG] [Thread-75302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:29:27.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:29:27.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:29:27.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:29:27.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:29:27.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:29:27.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:29:27.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:29:27.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:29:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:29:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.728227 -999.00  +12.90  37.84     49   +2.50 1 1 2 1 1   885    0 9.29 -101.63 ----- 40.2 37.8 315.6 49.2 14.1 -25.8 13.9 -25.5 13.5 -24.3 13.9 -24.5
2025-12-12T19:29:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:29:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:29:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.728227
2025-12-12T19:29:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:29:27.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:29:27.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:29:27.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:29:27.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:29:27.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:28:56', tmtdew=12.11, humidity=43.78, cloud=0.0, wind=34.69, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:28:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:29:27.587 [DEBUG] [Thread-75302] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:29:27.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:29:27.684 [DEBUG] [Thread-75305] [transport.py] [_log()] starting thread (client mode): 0xf81c0d90
2025-12-12T19:29:27.684 [DEBUG] [Thread-75305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:29:27.699 [DEBUG] [Thread-75305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:29:27.699 [INFO] [Thread-75305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:29:27.707 [DEBUG] [Thread-75305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:29:27.708 [DEBUG] [Thread-75305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:29:27.708 [DEBUG] [Thread-75305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:29:27.708 [DEBUG] [Thread-75305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:29:27.708 [DEBUG] [Thread-75305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:29:27.708 [DEBUG] [Thread-75305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:29:27.708 [DEBUG] [Thread-75305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] client lang: <none>
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] server lang: <none>
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] kex follows: False
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] Compression: none
2025-12-12T19:29:27.709 [DEBUG] [Thread-75305] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:29:27.767 [DEBUG] [Thread-75305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:29:27.768 [DEBUG] [Thread-75305] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:29:27.768 [DEBUG] [Thread-75305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:29:27.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:29:27.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:29:27.823 [DEBUG] [Thread-75305] [transport.py] [_log()] userauth is OK
2025-12-12T19:29:27.823 [DEBUG] [Thread-75305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:29:27.823 [DEBUG] [Thread-75305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:29:27.823 [DEBUG] [Thread-75305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:29:27.823 [DEBUG] [Thread-75305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:29:27.842 [INFO] [Thread-75305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:29:27.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:29:27.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:29:28.689 [DEBUG] [Thread-75305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:29:28.689 [DEBUG] [Thread-75305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:29:28.738 [DEBUG] [Thread-75305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:29:28.739 [DEBUG] [Thread-75305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:29:28.747 [DEBUG] [Thread-75305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:29:28.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:29:28.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:29:28.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:29:28.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:29:28.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:29:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:29:28.778 [DEBUG] [Thread-75305] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:29:35.385 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:35.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:37.131 [DEBUG] [Thread-75307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:52.181 [DEBUG] [Thread-75308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:29:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:29:58.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:29:58.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:29:59.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 29, 28), 12.08, 43.88, 0.0, 32.22, 13.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:29:59.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:29:28
2025-12-12T19:29:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:29:59.752 [DEBUG] [Thread-75309] [transport.py] [_log()] starting thread (client mode): 0xf8157340
2025-12-12T19:29:59.752 [DEBUG] [Thread-75309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:29:59.775 [DEBUG] [Thread-75309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:29:59.775 [INFO] [Thread-75309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:29:59.778 [DEBUG] [Thread-75309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] client lang: <none>
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] server lang: <none>
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] kex follows: False
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:29:59.779 [DEBUG] [Thread-75309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:29:59.780 [DEBUG] [Thread-75309] [transport.py] [_log()] Compression: none
2025-12-12T19:29:59.780 [DEBUG] [Thread-75309] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:29:59.799 [DEBUG] [Thread-75309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:29:59.800 [DEBUG] [Thread-75309] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:29:59.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:29:59.800 [DEBUG] [Thread-75309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:29:59.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:29:59.802 [DEBUG] [Thread-75309] [transport.py] [_log()] userauth is OK
2025-12-12T19:29:59.803 [DEBUG] [Thread-75309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:29:59.803 [DEBUG] [Thread-75309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:29:59.803 [DEBUG] [Thread-75309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:29:59.803 [DEBUG] [Thread-75309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:29:59.838 [INFO] [Thread-75309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:29:59.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:30:00.501 [DEBUG] [Thread-75309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:30:00.501 [DEBUG] [Thread-75309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:30:00.502 [DEBUG] [Thread-75309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:30:00.542 [DEBUG] [Thread-75309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:30:00.542 [DEBUG] [Thread-75309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:30:00.545 [DEBUG] [Thread-75309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:30:00.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:30:00.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:30:00.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:30:00.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:30:00.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:30:00.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:30:00.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:30:00.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:30:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:30:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.728922 -999.00  +12.70  43.42     50   +2.60 1 1 2 1 1   885    0 8.62 -104.55 ----- 42.5 43.4 310.8 51.8 13.9 -25.8 13.8 -25.6 13.5 -23.7 13.8 -24.5
2025-12-12T19:30:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:30:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:30:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.728922
2025-12-12T19:30:00.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:30:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:30:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:30:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:30:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:30:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:29:28', tmtdew=12.08, humidity=43.88, cloud=0.0, wind=32.22, temperature=13.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:29:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:30:00.570 [DEBUG] [Thread-75309] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:30:00.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:30:00.672 [DEBUG] [Thread-75312] [transport.py] [_log()] starting thread (client mode): 0xf574ef50
2025-12-12T19:30:00.672 [DEBUG] [Thread-75312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:30:00.686 [DEBUG] [Thread-75312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:30:00.686 [INFO] [Thread-75312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] client lang: <none>
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] server lang: <none>
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] kex follows: False
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] Compression: none
2025-12-12T19:30:00.694 [DEBUG] [Thread-75312] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:30:00.753 [DEBUG] [Thread-75312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:30:00.753 [DEBUG] [Thread-75312] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:30:00.753 [DEBUG] [Thread-75312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:30:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:30:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:30:00.810 [DEBUG] [Thread-75312] [transport.py] [_log()] userauth is OK
2025-12-12T19:30:00.810 [DEBUG] [Thread-75312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:30:00.810 [DEBUG] [Thread-75312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:30:00.810 [DEBUG] [Thread-75312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:30:00.810 [DEBUG] [Thread-75312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:30:00.824 [INFO] [Thread-75312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:30:00.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:30:00.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:30:01.692 [DEBUG] [Thread-75312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:30:01.693 [DEBUG] [Thread-75312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:30:01.741 [DEBUG] [Thread-75312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:30:01.741 [DEBUG] [Thread-75312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:30:01.749 [DEBUG] [Thread-75312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:30:01.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:30:01.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:30:01.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:30:01.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:30:01.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:30:01.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:30:01.780 [DEBUG] [Thread-75312] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:30:03.158 [DEBUG] [Thread-75314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:30:07.211 [DEBUG] [Thread-75315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:30:22.259 [DEBUG] [Thread-75316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:30:31.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:30:31.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:30:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:30:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 29, 28), 12.08, 43.88, 0.0, 32.22, 13.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:30:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:29:28
2025-12-12T19:30:32.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:30:32.817 [DEBUG] [Thread-75317] [transport.py] [_log()] starting thread (client mode): 0xf81e6f50
2025-12-12T19:30:32.817 [DEBUG] [Thread-75317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:30:32.837 [DEBUG] [Thread-75317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:30:32.837 [INFO] [Thread-75317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:30:32.840 [DEBUG] [Thread-75317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:30:32.840 [DEBUG] [Thread-75317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:30:32.840 [DEBUG] [Thread-75317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] client lang: <none>
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] server lang: <none>
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] kex follows: False
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] Compression: none
2025-12-12T19:30:32.841 [DEBUG] [Thread-75317] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:30:32.853 [DEBUG] [Thread-75317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:30:32.854 [DEBUG] [Thread-75317] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:30:32.854 [DEBUG] [Thread-75317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:30:32.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:30:32.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:30:32.855 [DEBUG] [Thread-75317] [transport.py] [_log()] userauth is OK
2025-12-12T19:30:32.855 [DEBUG] [Thread-75317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:30:32.855 [DEBUG] [Thread-75317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:30:32.855 [DEBUG] [Thread-75317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:30:32.855 [DEBUG] [Thread-75317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:30:32.863 [INFO] [Thread-75317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:30:32.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:30:33.474 [DEBUG] [Thread-75317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:30:33.474 [DEBUG] [Thread-75317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:30:33.474 [DEBUG] [Thread-75317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:30:33.514 [DEBUG] [Thread-75317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:30:33.514 [DEBUG] [Thread-75317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:30:33.516 [DEBUG] [Thread-75317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:30:33.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:30:33.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:30:33.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:30:33.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:30:33.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:30:33.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:30:33.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.729269 -999.00  +12.70  37.12     50   +2.60 1 1 2 1 1   884    0 8.71 -112.50 ----- 33.4 37.1 315.6 52.0 13.8 -25.6 13.7 -25.4 13.4 -23.2 13.7 -24.4
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.729269
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:30:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:29:28', tmtdew=12.08, humidity=43.88, cloud=0.0, wind=32.22, temperature=13.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:30:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:30:33.535 [DEBUG] [Thread-75317] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:30:33.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:30:33.621 [DEBUG] [Thread-75320] [transport.py] [_log()] starting thread (client mode): 0xf57a7a30
2025-12-12T19:30:33.621 [DEBUG] [Thread-75320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:30:33.636 [DEBUG] [Thread-75320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:30:33.637 [INFO] [Thread-75320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] client lang: <none>
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] server lang: <none>
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] kex follows: False
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] Compression: none
2025-12-12T19:30:33.644 [DEBUG] [Thread-75320] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:30:33.700 [DEBUG] [Thread-75320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:30:33.700 [DEBUG] [Thread-75320] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:30:33.700 [DEBUG] [Thread-75320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:30:33.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:30:33.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:30:33.757 [DEBUG] [Thread-75320] [transport.py] [_log()] userauth is OK
2025-12-12T19:30:33.757 [DEBUG] [Thread-75320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:30:33.757 [DEBUG] [Thread-75320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:30:33.757 [DEBUG] [Thread-75320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:30:33.757 [DEBUG] [Thread-75320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:30:33.770 [INFO] [Thread-75320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:30:33.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:30:33.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:30:34.601 [DEBUG] [Thread-75320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:30:34.601 [DEBUG] [Thread-75320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:30:34.649 [DEBUG] [Thread-75320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:30:34.650 [DEBUG] [Thread-75320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:30:34.658 [DEBUG] [Thread-75320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:30:34.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:30:34.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:30:34.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:30:34.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:30:34.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:30:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:30:34.691 [DEBUG] [Thread-75320] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:30:35.526 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:30:35.527 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:30:37.286 [DEBUG] [Thread-75322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:30:52.337 [DEBUG] [Thread-75323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:03.210 [DEBUG] [Thread-75324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:31:04.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:31:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:31:05.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 30, 32), 11.79, 44.65, 0.0, 36.72, 12.99, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:31:05.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:30:32
2025-12-12T19:31:05.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:31:05.787 [DEBUG] [Thread-75325] [transport.py] [_log()] starting thread (client mode): 0xf574e920
2025-12-12T19:31:05.787 [DEBUG] [Thread-75325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:31:05.808 [DEBUG] [Thread-75325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:31:05.808 [INFO] [Thread-75325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:31:05.811 [DEBUG] [Thread-75325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] client lang: <none>
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] server lang: <none>
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] kex follows: False
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] Compression: none
2025-12-12T19:31:05.812 [DEBUG] [Thread-75325] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:31:05.829 [DEBUG] [Thread-75325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:31:05.829 [DEBUG] [Thread-75325] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:31:05.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:31:05.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:31:05.829 [DEBUG] [Thread-75325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:31:05.830 [DEBUG] [Thread-75325] [transport.py] [_log()] userauth is OK
2025-12-12T19:31:05.830 [DEBUG] [Thread-75325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:31:05.830 [DEBUG] [Thread-75325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:31:05.830 [DEBUG] [Thread-75325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:31:05.830 [DEBUG] [Thread-75325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:31:05.841 [INFO] [Thread-75325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:31:05.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:31:06.463 [DEBUG] [Thread-75325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:31:06.463 [DEBUG] [Thread-75325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:31:06.463 [DEBUG] [Thread-75325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:31:06.504 [DEBUG] [Thread-75325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:31:06.504 [DEBUG] [Thread-75325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:31:06.506 [DEBUG] [Thread-75325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:31:06.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:31:06.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:31:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:31:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:31:06.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:31:06.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:31:06.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:31:06.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:31:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:31:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.729616 -999.00  +12.70  39.97     50   +2.60 1 1 2 1 1   884    0 8.15 -119.77 ----- 35.3 40.0 310.4 48.9 13.8 -25.4 -999.0 -999.0 13.4 -23.2 13.7 -24.1
2025-12-12T19:31:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:31:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:31:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.729616
2025-12-12T19:31:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:31:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:31:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:31:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:31:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:31:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:30:32', tmtdew=11.79, humidity=44.65, cloud=0.0, wind=36.72, temperature=12.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:30:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:31:06.522 [DEBUG] [Thread-75325] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:31:06.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:31:06.611 [DEBUG] [Thread-75328] [transport.py] [_log()] starting thread (client mode): 0xf5700580
2025-12-12T19:31:06.611 [DEBUG] [Thread-75328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:31:06.626 [DEBUG] [Thread-75328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:31:06.626 [INFO] [Thread-75328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:31:06.633 [DEBUG] [Thread-75328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] client lang: <none>
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] server lang: <none>
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] kex follows: False
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] Compression: none
2025-12-12T19:31:06.634 [DEBUG] [Thread-75328] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:31:06.690 [DEBUG] [Thread-75328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:31:06.691 [DEBUG] [Thread-75328] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:31:06.691 [DEBUG] [Thread-75328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:31:06.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:31:06.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:31:06.747 [DEBUG] [Thread-75328] [transport.py] [_log()] userauth is OK
2025-12-12T19:31:06.747 [DEBUG] [Thread-75328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:31:06.748 [DEBUG] [Thread-75328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:31:06.748 [DEBUG] [Thread-75328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:31:06.748 [DEBUG] [Thread-75328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:31:06.762 [INFO] [Thread-75328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:31:06.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:31:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:31:07.366 [DEBUG] [Thread-75330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:07.640 [DEBUG] [Thread-75328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:31:07.640 [DEBUG] [Thread-75328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:31:07.689 [DEBUG] [Thread-75328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:31:07.689 [DEBUG] [Thread-75328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:31:07.697 [DEBUG] [Thread-75328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:31:07.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:31:07.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:31:07.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
2025-12-12T19:31:07.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:31:07.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:31:07.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:31:07.730 [DEBUG] [Thread-75328] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:31:22.402 [DEBUG] [Thread-75331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:35.667 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:35.668 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:37.430 [DEBUG] [Thread-75332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:31:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:31:37.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:31:37.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:31:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 31, 4), 11.73, 44.83, 0.0, 41.64, 12.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:31:38.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:31:04
2025-12-12T19:31:38.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:31:38.783 [DEBUG] [Thread-75333] [transport.py] [_log()] starting thread (client mode): 0xf574fc10
2025-12-12T19:31:38.783 [DEBUG] [Thread-75333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:31:38.800 [DEBUG] [Thread-75333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:31:38.800 [INFO] [Thread-75333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] client lang: <none>
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] server lang: <none>
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] kex follows: False
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] Compression: none
2025-12-12T19:31:38.802 [DEBUG] [Thread-75333] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:31:38.810 [DEBUG] [Thread-75333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:31:38.810 [DEBUG] [Thread-75333] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:31:38.810 [DEBUG] [Thread-75333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:31:38.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:31:38.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:31:38.811 [DEBUG] [Thread-75333] [transport.py] [_log()] userauth is OK
2025-12-12T19:31:38.811 [DEBUG] [Thread-75333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:31:38.811 [DEBUG] [Thread-75333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:31:38.811 [DEBUG] [Thread-75333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:31:38.811 [DEBUG] [Thread-75333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:31:38.820 [INFO] [Thread-75333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:31:38.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:31:39.468 [DEBUG] [Thread-75333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:31:39.469 [DEBUG] [Thread-75333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:31:39.469 [DEBUG] [Thread-75333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:31:39.510 [DEBUG] [Thread-75333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:31:39.510 [DEBUG] [Thread-75333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:31:39.512 [DEBUG] [Thread-75333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:31:39.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:31:39.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:31:39.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:31:39.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:31:39.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:31:39.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:31:39.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.729963 -999.00  +12.80  32.10     50   +2.60 1 1 2 1 1   884    0 7.84 -125.12 ----- 33.1 32.1 312.6 47.7 13.8 -25.4 13.7 -25.0 13.4 -23.5 13.7 -24.0
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.729963
2025-12-12T19:31:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:31:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:31:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:31:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:31:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:31:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:31:04', tmtdew=11.73, humidity=44.83, cloud=0.0, wind=41.64, temperature=12.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:31:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:31:39.534 [DEBUG] [Thread-75333] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:31:39.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:31:39.616 [DEBUG] [Thread-75336] [transport.py] [_log()] starting thread (client mode): 0xf8156fe0
2025-12-12T19:31:39.616 [DEBUG] [Thread-75336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:31:39.631 [DEBUG] [Thread-75336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:31:39.631 [INFO] [Thread-75336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:31:39.639 [DEBUG] [Thread-75336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] client lang: <none>
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] server lang: <none>
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] kex follows: False
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] Compression: none
2025-12-12T19:31:39.640 [DEBUG] [Thread-75336] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:31:39.698 [DEBUG] [Thread-75336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:31:39.699 [DEBUG] [Thread-75336] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:31:39.699 [DEBUG] [Thread-75336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:31:39.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:31:39.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:31:39.754 [DEBUG] [Thread-75336] [transport.py] [_log()] userauth is OK
2025-12-12T19:31:39.755 [DEBUG] [Thread-75336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:31:39.755 [DEBUG] [Thread-75336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:31:39.755 [DEBUG] [Thread-75336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:31:39.755 [DEBUG] [Thread-75336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:31:39.768 [INFO] [Thread-75336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:31:39.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:31:39.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:31:40.594 [DEBUG] [Thread-75336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:31:40.594 [DEBUG] [Thread-75336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:31:40.643 [DEBUG] [Thread-75336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:31:40.643 [DEBUG] [Thread-75336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:31:40.652 [DEBUG] [Thread-75336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:31:40.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:31: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')
2025-12-12T19:31:40.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:31:40.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:31:40.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:31:40.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:31:40.686 [DEBUG] [Thread-75336] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:31:52.456 [DEBUG] [Thread-75338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:03.270 [DEBUG] [Thread-75339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:07.501 [DEBUG] [Thread-75340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:32:10.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:32:10.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:32:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 31, 36), 11.52, 45.51, 0.0, 41.83, 12.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:32:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:31:36
2025-12-12T19:32:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:32:11.675 [DEBUG] [Thread-75341] [transport.py] [_log()] starting thread (client mode): 0xf57a7490
2025-12-12T19:32:11.675 [DEBUG] [Thread-75341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:32:11.695 [DEBUG] [Thread-75341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:32:11.695 [INFO] [Thread-75341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:32:11.698 [DEBUG] [Thread-75341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:32:11.698 [DEBUG] [Thread-75341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:32:11.698 [DEBUG] [Thread-75341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:32:11.698 [DEBUG] [Thread-75341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] client lang: <none>
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] server lang: <none>
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] kex follows: False
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] Compression: none
2025-12-12T19:32:11.699 [DEBUG] [Thread-75341] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:32:11.717 [DEBUG] [Thread-75341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:32:11.717 [DEBUG] [Thread-75341] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:32:11.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:32:11.718 [DEBUG] [Thread-75341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:32:11.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:32:11.760 [DEBUG] [Thread-75341] [transport.py] [_log()] userauth is OK
2025-12-12T19:32:11.760 [DEBUG] [Thread-75341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:32:11.761 [DEBUG] [Thread-75341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:32:11.761 [DEBUG] [Thread-75341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:32:11.761 [DEBUG] [Thread-75341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:32:11.792 [INFO] [Thread-75341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:32:11.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:32:12.409 [DEBUG] [Thread-75341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:32:12.410 [DEBUG] [Thread-75341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:32:12.410 [DEBUG] [Thread-75341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:32:12.451 [DEBUG] [Thread-75341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:32:12.451 [DEBUG] [Thread-75341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:32:12.454 [DEBUG] [Thread-75341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:32:12.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:32:12.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:32:12.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:32:12.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:32:12.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:32:12.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:32:12.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:32:12.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:32:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:32:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.730311 -999.00  +12.80  33.58     50   +2.70 1 1 2 1 1   883    0 7.87 -135.90 ----- 28.9 33.6 320.0 48.1 13.8 -25.3 13.6 -24.8 13.3 -23.2 13.7 -24.1
2025-12-12T19:32:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:32:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:32:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.730311
2025-12-12T19:32:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:32:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:32:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:32:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:32:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:32:12.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:31:36', tmtdew=11.52, humidity=45.51, cloud=0.0, wind=41.83, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:31:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:32:12.475 [DEBUG] [Thread-75341] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:32:12.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:32:12.573 [DEBUG] [Thread-75344] [transport.py] [_log()] starting thread (client mode): 0xf575c880
2025-12-12T19:32:12.573 [DEBUG] [Thread-75344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:32:12.590 [DEBUG] [Thread-75344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:32:12.590 [INFO] [Thread-75344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:12.598 [DEBUG] [Thread-75344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] client lang: <none>
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] server lang: <none>
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] kex follows: False
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:32:12.599 [DEBUG] [Thread-75344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:32:12.600 [DEBUG] [Thread-75344] [transport.py] [_log()] Compression: none
2025-12-12T19:32:12.600 [DEBUG] [Thread-75344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:32:12.658 [DEBUG] [Thread-75344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:32:12.659 [DEBUG] [Thread-75344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:32:12.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:32:12.660 [DEBUG] [Thread-75344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:32:12.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:32:12.720 [DEBUG] [Thread-75344] [transport.py] [_log()] userauth is OK
2025-12-12T19:32:12.721 [DEBUG] [Thread-75344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:32:12.721 [DEBUG] [Thread-75344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:32:12.721 [DEBUG] [Thread-75344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:32:12.721 [DEBUG] [Thread-75344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:32:12.741 [INFO] [Thread-75344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:32:12.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:32:12.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:32:13.629 [DEBUG] [Thread-75344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:32:13.629 [DEBUG] [Thread-75344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:32:13.677 [DEBUG] [Thread-75344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:32:13.677 [DEBUG] [Thread-75344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:32:13.686 [DEBUG] [Thread-75344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:32:13.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:32: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')
2025-12-12T19:32: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
2025-12-12T19:32:13.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:32:13.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:32:13.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:32:13.722 [DEBUG] [Thread-75344] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:32:22.532 [DEBUG] [Thread-75346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:35.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:35.809 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:37.571 [DEBUG] [Thread-75347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:32:43.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:32:43.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:32:43.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:32:44.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 32, 40), 11.29, 45.94, 0.0, 43.3, 12.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:32:44.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:32:40
2025-12-12T19:32:44.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:32:44.701 [DEBUG] [Thread-75348] [transport.py] [_log()] starting thread (client mode): 0xf57000d0
2025-12-12T19:32:44.701 [DEBUG] [Thread-75348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:32:44.717 [DEBUG] [Thread-75348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:32:44.717 [INFO] [Thread-75348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:32:44.720 [DEBUG] [Thread-75348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:32:44.720 [DEBUG] [Thread-75348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] client lang: <none>
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] server lang: <none>
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] kex follows: False
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] Compression: none
2025-12-12T19:32:44.721 [DEBUG] [Thread-75348] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:32:44.731 [DEBUG] [Thread-75348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:32:44.732 [DEBUG] [Thread-75348] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:32:44.733 [DEBUG] [Thread-75348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:32:44.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:32:44.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:32:44.734 [DEBUG] [Thread-75348] [transport.py] [_log()] userauth is OK
2025-12-12T19:32:44.735 [DEBUG] [Thread-75348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:32:44.735 [DEBUG] [Thread-75348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:32:44.735 [DEBUG] [Thread-75348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:32:44.735 [DEBUG] [Thread-75348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:32:44.755 [INFO] [Thread-75348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:32:44.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:32:45.375 [DEBUG] [Thread-75348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:32:45.376 [DEBUG] [Thread-75348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:32:45.376 [DEBUG] [Thread-75348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:32:45.417 [DEBUG] [Thread-75348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:32:45.417 [DEBUG] [Thread-75348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:32:45.419 [DEBUG] [Thread-75348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:32:45.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:32:45.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:32:45.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:32:45.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:32:45.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:32:45.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:32:45.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:32:45.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:32:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:32:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.730658 -999.00  +12.90  29.41     50   +2.80 1 1 1 1 1   883    0 7.63 -131.51 ----- 42.2 29.4 317.4 40.9 13.7 -25.3 13.6 -24.9 13.3 -23.4 13.6 -24.1
2025-12-12T19:32:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:32:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:32:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.730658
2025-12-12T19:32:45.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:32:45.442 [DEBUG] [Thread-75348] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:32:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:32:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:32:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:32:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:32:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:32:40', tmtdew=11.29, humidity=45.94, cloud=0.0, wind=43.3, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:32:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:32:45.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:32:45.541 [DEBUG] [Thread-75351] [transport.py] [_log()] starting thread (client mode): 0xf575e5c0
2025-12-12T19:32:45.542 [DEBUG] [Thread-75351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:32:45.560 [DEBUG] [Thread-75351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:32:45.560 [INFO] [Thread-75351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:32:45.567 [DEBUG] [Thread-75351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] client lang: <none>
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] server lang: <none>
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] kex follows: False
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:32:45.568 [DEBUG] [Thread-75351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:32:45.569 [DEBUG] [Thread-75351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:32:45.569 [DEBUG] [Thread-75351] [transport.py] [_log()] Compression: none
2025-12-12T19:32:45.569 [DEBUG] [Thread-75351] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:32:45.625 [DEBUG] [Thread-75351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:32:45.625 [DEBUG] [Thread-75351] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:32:45.626 [DEBUG] [Thread-75351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:32:45.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:32:45.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:32:45.681 [DEBUG] [Thread-75351] [transport.py] [_log()] userauth is OK
2025-12-12T19:32:45.681 [DEBUG] [Thread-75351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:32:45.681 [DEBUG] [Thread-75351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:32:45.681 [DEBUG] [Thread-75351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:32:45.681 [DEBUG] [Thread-75351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:32:45.700 [INFO] [Thread-75351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:32:45.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:32:45.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:32:46.599 [DEBUG] [Thread-75351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:32:46.599 [DEBUG] [Thread-75351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:32:46.647 [DEBUG] [Thread-75351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:32:46.647 [DEBUG] [Thread-75351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:32:46.656 [DEBUG] [Thread-75351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:32:46.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:32:46.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:32:46.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:32:46.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:32:46.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:32:46.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:32:46.690 [DEBUG] [Thread-75351] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:32:52.600 [DEBUG] [Thread-75353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:03.317 [DEBUG] [Thread-75354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:07.642 [DEBUG] [Thread-75355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:33:16.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:33:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:33:17.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 33, 12), 11.2, 46.26, 0.0, 43.03, 12.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:33:17.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:33:12
2025-12-12T19:33:17.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:33:17.657 [DEBUG] [Thread-75356] [transport.py] [_log()] starting thread (client mode): 0xf813c820
2025-12-12T19:33:17.658 [DEBUG] [Thread-75356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:33:17.678 [DEBUG] [Thread-75356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:33:17.678 [INFO] [Thread-75356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] client lang: <none>
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] server lang: <none>
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] kex follows: False
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] Compression: none
2025-12-12T19:33:17.681 [DEBUG] [Thread-75356] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:33:17.700 [DEBUG] [Thread-75356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:33:17.701 [DEBUG] [Thread-75356] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:33:17.701 [DEBUG] [Thread-75356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:33:17.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:33:17.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:33:17.703 [DEBUG] [Thread-75356] [transport.py] [_log()] userauth is OK
2025-12-12T19:33:17.703 [DEBUG] [Thread-75356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:33:17.703 [DEBUG] [Thread-75356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:33:17.704 [DEBUG] [Thread-75356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:33:17.704 [DEBUG] [Thread-75356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:33:17.738 [INFO] [Thread-75356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:33:17.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:33:18.371 [DEBUG] [Thread-75356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:33:18.371 [DEBUG] [Thread-75356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:33:18.371 [DEBUG] [Thread-75356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:33:18.412 [DEBUG] [Thread-75356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:33:18.412 [DEBUG] [Thread-75356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:33:18.415 [DEBUG] [Thread-75356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:33:18.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:33:18.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:33:18.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:33:18.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:33:18.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:33:18.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:33:18.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:33:18.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:33:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:33:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.731005 -999.00  +12.70  46.01     50   +2.80 1 1 2 1 1   882    0 7.42 -143.08 ----- 36.5 46.0 311.2 55.4 13.7 -25.6 13.6 -25.1 13.3 -23.4 13.6 -24.1
2025-12-12T19:33:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:33:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:33:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.731005
2025-12-12T19:33:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:33:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:33:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:33:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:33:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:33:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:33:12', tmtdew=11.2, humidity=46.26, cloud=0.0, wind=43.03, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:32:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:33:18.440 [DEBUG] [Thread-75356] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:33:18.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:33:18.536 [DEBUG] [Thread-75359] [transport.py] [_log()] starting thread (client mode): 0xf57a7880
2025-12-12T19:33:18.536 [DEBUG] [Thread-75359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:33:18.550 [DEBUG] [Thread-75359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:33:18.550 [INFO] [Thread-75359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:18.558 [DEBUG] [Thread-75359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] client lang: <none>
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] server lang: <none>
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] kex follows: False
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] Compression: none
2025-12-12T19:33:18.559 [DEBUG] [Thread-75359] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:33:18.616 [DEBUG] [Thread-75359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:33:18.616 [DEBUG] [Thread-75359] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:33:18.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:33:18.617 [DEBUG] [Thread-75359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:33:18.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:33:18.672 [DEBUG] [Thread-75359] [transport.py] [_log()] userauth is OK
2025-12-12T19:33:18.672 [DEBUG] [Thread-75359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:33:18.672 [DEBUG] [Thread-75359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:33:18.672 [DEBUG] [Thread-75359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:33:18.673 [DEBUG] [Thread-75359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:33:18.691 [INFO] [Thread-75359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:33:18.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:33:18.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:33:19.537 [DEBUG] [Thread-75359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:33:19.537 [DEBUG] [Thread-75359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:33:19.585 [DEBUG] [Thread-75359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:33:19.585 [DEBUG] [Thread-75359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:33:19.594 [DEBUG] [Thread-75359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:33:19.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:33:19.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:33:19.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:33:19.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:33:19.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:33:19.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:33:19.629 [DEBUG] [Thread-75359] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:33:22.670 [DEBUG] [Thread-75361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:35.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:35.951 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:37.712 [DEBUG] [Thread-75362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:33:49.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:33:49.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:33:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:33:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 33, 44), 11.14, 46.42, 0.0, 44.3, 12.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:33:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:33:44
2025-12-12T19:33:50.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:33:50.602 [DEBUG] [Thread-75363] [transport.py] [_log()] starting thread (client mode): 0xf5796620
2025-12-12T19:33:50.603 [DEBUG] [Thread-75363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:33:50.617 [DEBUG] [Thread-75363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:33:50.617 [INFO] [Thread-75363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] client lang: <none>
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] server lang: <none>
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] kex follows: False
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] Compression: none
2025-12-12T19:33:50.621 [DEBUG] [Thread-75363] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:33:50.636 [DEBUG] [Thread-75363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:33:50.637 [DEBUG] [Thread-75363] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:33:50.637 [DEBUG] [Thread-75363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:33:50.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:33:50.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:33:50.639 [DEBUG] [Thread-75363] [transport.py] [_log()] userauth is OK
2025-12-12T19:33:50.639 [DEBUG] [Thread-75363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:33:50.639 [DEBUG] [Thread-75363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:33:50.639 [DEBUG] [Thread-75363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:33:50.639 [DEBUG] [Thread-75363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:33:50.657 [INFO] [Thread-75363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:33:50.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:33:51.335 [DEBUG] [Thread-75363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:33:51.335 [DEBUG] [Thread-75363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:33:51.335 [DEBUG] [Thread-75363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:33:51.376 [DEBUG] [Thread-75363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:33:51.376 [DEBUG] [Thread-75363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:33:51.379 [DEBUG] [Thread-75363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:33:51.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:33:51.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:33:51.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:33:51.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:33:51.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:33:51.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:33:51.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:33:51.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:33:51.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:33:51.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.731352 -999.00  +12.80  33.76     50   +2.80 1 1 2 1 1   882    0 7.15 -149.73 ----- 33.3 33.8 314.6 46.0 13.7 -25.3 13.6 -25.0 13.2 -23.3 13.6 -24.0
2025-12-12T19:33:51.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:33:51.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:33:51.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.731352
2025-12-12T19:33:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:33:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:33:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:33:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:33:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:33:51.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:33:44', tmtdew=11.14, humidity=46.42, cloud=0.0, wind=44.3, temperature=12.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:33:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:33:51.406 [DEBUG] [Thread-75363] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:33:51.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:33:51.505 [DEBUG] [Thread-75366] [transport.py] [_log()] starting thread (client mode): 0xf57978e0
2025-12-12T19:33:51.505 [DEBUG] [Thread-75366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:33:51.520 [DEBUG] [Thread-75366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:33:51.520 [INFO] [Thread-75366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:51.528 [DEBUG] [Thread-75366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] client lang: <none>
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] server lang: <none>
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] kex follows: False
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] Compression: none
2025-12-12T19:33:51.529 [DEBUG] [Thread-75366] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:33:51.587 [DEBUG] [Thread-75366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:33:51.588 [DEBUG] [Thread-75366] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:33:51.588 [DEBUG] [Thread-75366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:33:51.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:33:51.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:33:51.644 [DEBUG] [Thread-75366] [transport.py] [_log()] userauth is OK
2025-12-12T19:33:51.644 [DEBUG] [Thread-75366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:33:51.644 [DEBUG] [Thread-75366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:33:51.644 [DEBUG] [Thread-75366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:33:51.644 [DEBUG] [Thread-75366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:33:51.662 [INFO] [Thread-75366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:33:51.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:33:51.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:33:52.513 [DEBUG] [Thread-75366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:33:52.513 [DEBUG] [Thread-75366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:33:52.561 [DEBUG] [Thread-75366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:33:52.561 [DEBUG] [Thread-75366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:33:52.570 [DEBUG] [Thread-75366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:33:52.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:33:52.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:33:52.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:33:52.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:33:52.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:33:52.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:33:52.603 [DEBUG] [Thread-75366] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:33:52.741 [DEBUG] [Thread-75368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:03.495 [DEBUG] [Thread-75369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:07.787 [DEBUG] [Thread-75370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:34:22.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:34:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:34:22.814 [DEBUG] [Thread-75371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:23.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 34, 16), 11.12, 46.52, 0.0, 43.14, 12.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:34:23.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:34:16
2025-12-12T19:34:23.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:34:23.582 [DEBUG] [Thread-75372] [transport.py] [_log()] starting thread (client mode): 0xfabc7670
2025-12-12T19:34:23.582 [DEBUG] [Thread-75372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:34:23.603 [DEBUG] [Thread-75372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:34:23.604 [INFO] [Thread-75372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:34:23.606 [DEBUG] [Thread-75372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] client lang: <none>
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] server lang: <none>
2025-12-12T19:34:23.607 [DEBUG] [Thread-75372] [transport.py] [_log()] kex follows: False
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] Compression: none
2025-12-12T19:34:23.608 [DEBUG] [Thread-75372] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:34:23.618 [DEBUG] [Thread-75372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:34:23.619 [DEBUG] [Thread-75372] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:34:23.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:34:23.620 [DEBUG] [Thread-75372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:34:23.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:34:23.622 [DEBUG] [Thread-75372] [transport.py] [_log()] userauth is OK
2025-12-12T19:34:23.622 [DEBUG] [Thread-75372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:34:23.622 [DEBUG] [Thread-75372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:34:23.623 [DEBUG] [Thread-75372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:34:23.623 [DEBUG] [Thread-75372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:34:23.646 [INFO] [Thread-75372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:34:23.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:34:24.282 [DEBUG] [Thread-75372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:34:24.282 [DEBUG] [Thread-75372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:34:24.282 [DEBUG] [Thread-75372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:34:24.323 [DEBUG] [Thread-75372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:34:24.323 [DEBUG] [Thread-75372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:34:24.326 [DEBUG] [Thread-75372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:34:24.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:34:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:34:24.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:34:24.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:34:24.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:34:24.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:34:24.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:34:24.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:34:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:34:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.731700 -999.00  +12.80  42.99     50   +2.80 1 1 2 1 1   881    0 6.87 -154.05 ----- 40.8 43.0 311.6 45.6 13.7 -25.3 13.6 -25.0 13.2 -23.4 13.5 -23.9
2025-12-12T19:34:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:34:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:34:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.731700
2025-12-12T19:34:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:34:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:34:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:34:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:34:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:34:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:34:16', tmtdew=11.12, humidity=46.52, cloud=0.0, wind=43.14, temperature=12.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:33:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:34:24.351 [DEBUG] [Thread-75372] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:34:24.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:34:24.457 [DEBUG] [Thread-75375] [transport.py] [_log()] starting thread (client mode): 0xf57706a0
2025-12-12T19:34:24.458 [DEBUG] [Thread-75375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:34:24.473 [DEBUG] [Thread-75375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:34:24.473 [INFO] [Thread-75375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:24.482 [DEBUG] [Thread-75375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] client lang: <none>
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] server lang: <none>
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] kex follows: False
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] Compression: none
2025-12-12T19:34:24.483 [DEBUG] [Thread-75375] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:34:24.539 [DEBUG] [Thread-75375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:34:24.539 [DEBUG] [Thread-75375] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:34:24.540 [DEBUG] [Thread-75375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:34:24.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:34:24.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:34:24.595 [DEBUG] [Thread-75375] [transport.py] [_log()] userauth is OK
2025-12-12T19:34:24.595 [DEBUG] [Thread-75375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:34:24.596 [DEBUG] [Thread-75375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:34:24.596 [DEBUG] [Thread-75375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:34:24.596 [DEBUG] [Thread-75375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:34:24.614 [INFO] [Thread-75375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:34:24.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:34:24.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:34:25.442 [DEBUG] [Thread-75375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:34:25.442 [DEBUG] [Thread-75375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:34:25.491 [DEBUG] [Thread-75375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:34:25.491 [DEBUG] [Thread-75375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:34:25.499 [DEBUG] [Thread-75375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:34:25.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:34:25.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:34:25.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:34:25.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:34:25.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:34:25.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:34:25.534 [DEBUG] [Thread-75375] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:34:37.845 [DEBUG] [Thread-75377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:41.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:41.862 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:52.887 [DEBUG] [Thread-75378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:34:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:34:55.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:34:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:34:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 34, 48), 10.91, 47.21, 0.0, 39.47, 12.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:34:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:34:48
2025-12-12T19:34:56.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:34:56.565 [DEBUG] [Thread-75379] [transport.py] [_log()] starting thread (client mode): 0xf57a7220
2025-12-12T19:34:56.565 [DEBUG] [Thread-75379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:34:56.580 [DEBUG] [Thread-75379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:34:56.580 [INFO] [Thread-75379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] client lang: <none>
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] server lang: <none>
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] kex follows: False
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] Compression: none
2025-12-12T19:34:56.582 [DEBUG] [Thread-75379] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:34:56.592 [DEBUG] [Thread-75379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:34:56.593 [DEBUG] [Thread-75379] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:34:56.593 [DEBUG] [Thread-75379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:34:56.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:34:56.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:34:56.593 [DEBUG] [Thread-75379] [transport.py] [_log()] userauth is OK
2025-12-12T19:34:56.593 [DEBUG] [Thread-75379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:34:56.594 [DEBUG] [Thread-75379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:34:56.594 [DEBUG] [Thread-75379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:34:56.594 [DEBUG] [Thread-75379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:34:56.602 [INFO] [Thread-75379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:34:56.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:34:57.243 [DEBUG] [Thread-75379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:34:57.243 [DEBUG] [Thread-75379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:34:57.243 [DEBUG] [Thread-75379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:34:57.284 [DEBUG] [Thread-75379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:34:57.284 [DEBUG] [Thread-75379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:34:57.286 [DEBUG] [Thread-75379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:34:57.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:34:57.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:34:57.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:34:57.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:34:57.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:34:57.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:34:57.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.732047 -999.00  +12.70  41.85     51   +2.90 1 1 2 1 1   881    0 6.64 -164.07 ----- 44.9 41.9 315.2 48.4 13.6 -25.1 13.5 -25.0 13.2 -23.1 13.5 -24.0
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.732047
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:34:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:34:48', tmtdew=10.91, humidity=47.21, cloud=0.0, wind=39.47, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:34:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:34:57.303 [DEBUG] [Thread-75379] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:34:57.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:34:57.389 [DEBUG] [Thread-75382] [transport.py] [_log()] starting thread (client mode): 0xf81c1360
2025-12-12T19:34:57.389 [DEBUG] [Thread-75382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:34:57.404 [DEBUG] [Thread-75382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:34:57.405 [INFO] [Thread-75382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] client lang: <none>
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] server lang: <none>
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] kex follows: False
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] Compression: none
2025-12-12T19:34:57.412 [DEBUG] [Thread-75382] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:34:57.468 [DEBUG] [Thread-75382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:34:57.469 [DEBUG] [Thread-75382] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:34:57.469 [DEBUG] [Thread-75382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:34:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:34:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:34:57.526 [DEBUG] [Thread-75382] [transport.py] [_log()] userauth is OK
2025-12-12T19:34:57.526 [DEBUG] [Thread-75382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:34:57.526 [DEBUG] [Thread-75382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:34:57.526 [DEBUG] [Thread-75382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:34:57.526 [DEBUG] [Thread-75382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:34:57.540 [INFO] [Thread-75382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:34:57.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:34:57.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:34:58.376 [DEBUG] [Thread-75382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:34:58.376 [DEBUG] [Thread-75382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:34:58.424 [DEBUG] [Thread-75382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:34:58.424 [DEBUG] [Thread-75382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:34:58.433 [DEBUG] [Thread-75382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:34:58.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:34:58.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:34:58.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:34:58.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:34:58.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:34:58.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:34:58.464 [DEBUG] [Thread-75382] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:35:03.570 [DEBUG] [Thread-75384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:35:07.918 [DEBUG] [Thread-75385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:35:22.969 [DEBUG] [Thread-75386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:35:28.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:35:28.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:35:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:35:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 35, 20), 10.9, 47.22, 0.0, 40.16, 12.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:35:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:35:20
2025-12-12T19:35:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:35:29.436 [DEBUG] [Thread-75387] [transport.py] [_log()] starting thread (client mode): 0xf57a71f0
2025-12-12T19:35:29.436 [DEBUG] [Thread-75387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:35:29.456 [DEBUG] [Thread-75387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:35:29.456 [INFO] [Thread-75387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:35:29.459 [DEBUG] [Thread-75387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:35:29.459 [DEBUG] [Thread-75387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] client lang: <none>
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] server lang: <none>
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] kex follows: False
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] Compression: none
2025-12-12T19:35:29.460 [DEBUG] [Thread-75387] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:35:29.476 [DEBUG] [Thread-75387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:35:29.477 [DEBUG] [Thread-75387] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:35:29.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:35:29.478 [DEBUG] [Thread-75387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:35:29.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:35:29.480 [DEBUG] [Thread-75387] [transport.py] [_log()] userauth is OK
2025-12-12T19:35:29.480 [DEBUG] [Thread-75387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:35:29.480 [DEBUG] [Thread-75387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:35:29.480 [DEBUG] [Thread-75387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:35:29.480 [DEBUG] [Thread-75387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:35:29.504 [INFO] [Thread-75387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:35:29.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:35:30.130 [DEBUG] [Thread-75387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:35:30.130 [DEBUG] [Thread-75387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:35:30.130 [DEBUG] [Thread-75387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:35:30.171 [DEBUG] [Thread-75387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:35:30.171 [DEBUG] [Thread-75387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:35:30.174 [DEBUG] [Thread-75387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:35:30.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:35:30.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:35:30.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:35:30.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:35:30.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:35:30.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:35:30.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:35:30.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:35:30.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:35:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.732741 -999.00  +12.80  30.22     51   +3.10 1 1 2 1 1   879    0 6.07 -178.59 ----- 29.4 30.2 322.6 42.2 13.6 -25.1 13.5 -24.8 13.2 -22.7 13.4 -23.7
2025-12-12T19:35:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:35:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:35:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.732741
2025-12-12T19:35:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:35:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:35:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:35:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:35:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:35:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:35:20', tmtdew=10.9, humidity=47.22, cloud=0.0, wind=40.16, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:35:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:35:30.199 [DEBUG] [Thread-75387] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:35:30.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:35:30.293 [DEBUG] [Thread-75390] [transport.py] [_log()] starting thread (client mode): 0xf57a7550
2025-12-12T19:35:30.293 [DEBUG] [Thread-75390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:35:30.308 [DEBUG] [Thread-75390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:35:30.308 [INFO] [Thread-75390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] client lang: <none>
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] server lang: <none>
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] kex follows: False
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:35:30.316 [DEBUG] [Thread-75390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:35:30.317 [DEBUG] [Thread-75390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:35:30.317 [DEBUG] [Thread-75390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:35:30.317 [DEBUG] [Thread-75390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:35:30.317 [DEBUG] [Thread-75390] [transport.py] [_log()] Compression: none
2025-12-12T19:35:30.317 [DEBUG] [Thread-75390] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:35:30.373 [DEBUG] [Thread-75390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:35:30.374 [DEBUG] [Thread-75390] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:35:30.374 [DEBUG] [Thread-75390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:35:30.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:35:30.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:35:30.429 [DEBUG] [Thread-75390] [transport.py] [_log()] userauth is OK
2025-12-12T19:35:30.429 [DEBUG] [Thread-75390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:35:30.429 [DEBUG] [Thread-75390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:35:30.430 [DEBUG] [Thread-75390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:35:30.430 [DEBUG] [Thread-75390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:35:30.449 [INFO] [Thread-75390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:35:30.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:35:30.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:35:31.298 [DEBUG] [Thread-75390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:35:31.299 [DEBUG] [Thread-75390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:35:31.345 [DEBUG] [Thread-75390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:35:31.345 [DEBUG] [Thread-75390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:35:31.354 [DEBUG] [Thread-75390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:35:31.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:35:31.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:35:31.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:35:31.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:35:31.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:35:31.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:35:31.386 [DEBUG] [Thread-75390] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:35:37.994 [DEBUG] [Thread-75392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:35:49.870 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:35:49.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:35:53.027 [DEBUG] [Thread-75393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:36:01.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:36: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
2025-12-12T19:36:02.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 35, 53), 10.85, 47.42, 0.0, 35.52, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:36:02.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:35:53
2025-12-12T19:36:02.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:36:02.363 [DEBUG] [Thread-75394] [transport.py] [_log()] starting thread (client mode): 0xf5772ad0
2025-12-12T19:36:02.363 [DEBUG] [Thread-75394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:36:02.383 [DEBUG] [Thread-75394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:36:02.384 [INFO] [Thread-75394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] client lang: <none>
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] server lang: <none>
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] kex follows: False
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:36:02.387 [DEBUG] [Thread-75394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:36:02.388 [DEBUG] [Thread-75394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:36:02.388 [DEBUG] [Thread-75394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:36:02.388 [DEBUG] [Thread-75394] [transport.py] [_log()] Compression: none
2025-12-12T19:36:02.388 [DEBUG] [Thread-75394] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:36:02.404 [DEBUG] [Thread-75394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:36:02.405 [DEBUG] [Thread-75394] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:36:02.405 [DEBUG] [Thread-75394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:36:02.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:36:02.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:36:02.449 [DEBUG] [Thread-75394] [transport.py] [_log()] userauth is OK
2025-12-12T19:36:02.449 [DEBUG] [Thread-75394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:36:02.449 [DEBUG] [Thread-75394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:36:02.449 [DEBUG] [Thread-75394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:36:02.449 [DEBUG] [Thread-75394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:36:02.481 [INFO] [Thread-75394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:36:02.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:36:03.180 [DEBUG] [Thread-75394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:36:03.180 [DEBUG] [Thread-75394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:36:03.180 [DEBUG] [Thread-75394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:36:03.221 [DEBUG] [Thread-75394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:36:03.221 [DEBUG] [Thread-75394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:36:03.224 [DEBUG] [Thread-75394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:36:03.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:36:03.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:36:03.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:36:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:36:03.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:36:03.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:36:03.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:36:03.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:36:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:36:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.733088 -999.00  +12.70  34.89     52   +3.10 1 1 2 1 1   879    0 5.25 -200.03 ----- 34.9 34.9 310.6 41.8 13.6 -25.0 13.5 -24.9 13.2 -22.8 13.4 -23.8
2025-12-12T19:36:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:36:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:36:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.733088
2025-12-12T19:36:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:36:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:36:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:36:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:36:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:36:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:35:53', tmtdew=10.85, humidity=47.42, cloud=0.0, wind=35.52, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:35:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:36:03.251 [DEBUG] [Thread-75394] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:36:03.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:36:03.350 [DEBUG] [Thread-75397] [transport.py] [_log()] starting thread (client mode): 0xf8154970
2025-12-12T19:36:03.350 [DEBUG] [Thread-75397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:36:03.365 [DEBUG] [Thread-75397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:36:03.365 [INFO] [Thread-75397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:36:03.372 [DEBUG] [Thread-75397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] client lang: <none>
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] server lang: <none>
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] kex follows: False
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:36:03.373 [DEBUG] [Thread-75397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:36:03.374 [DEBUG] [Thread-75397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:36:03.374 [DEBUG] [Thread-75397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:36:03.374 [DEBUG] [Thread-75397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:36:03.374 [DEBUG] [Thread-75397] [transport.py] [_log()] Compression: none
2025-12-12T19:36:03.374 [DEBUG] [Thread-75397] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:36:03.432 [DEBUG] [Thread-75397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:36:03.433 [DEBUG] [Thread-75397] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:36:03.433 [DEBUG] [Thread-75397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:36:03.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:36:03.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:36:03.493 [DEBUG] [Thread-75397] [transport.py] [_log()] userauth is OK
2025-12-12T19:36:03.493 [DEBUG] [Thread-75397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:36:03.493 [DEBUG] [Thread-75397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:36:03.493 [DEBUG] [Thread-75397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:36:03.493 [DEBUG] [Thread-75397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:36:03.511 [INFO] [Thread-75397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:36:03.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:36:03.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:36:03.650 [DEBUG] [Thread-75399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:04.358 [DEBUG] [Thread-75397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:36:04.359 [DEBUG] [Thread-75397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:36:04.407 [DEBUG] [Thread-75397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:36:04.407 [DEBUG] [Thread-75397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:36:04.415 [DEBUG] [Thread-75397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:36:04.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:36:04.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:36:04.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:36:04.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:36:04.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:36:04.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:36:04.450 [DEBUG] [Thread-75397] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:36:08.062 [DEBUG] [Thread-75400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:23.108 [DEBUG] [Thread-75401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:34.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:36:34.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:36:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:36:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 36, 25), 10.86, 47.39, 0.0, 38.04, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:36:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:36:25
2025-12-12T19:36:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:36:35.445 [DEBUG] [Thread-75402] [transport.py] [_log()] starting thread (client mode): 0xf57700a0
2025-12-12T19:36:35.445 [DEBUG] [Thread-75402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:36:35.465 [DEBUG] [Thread-75402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:36:35.465 [INFO] [Thread-75402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:36:35.468 [DEBUG] [Thread-75402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:36:35.468 [DEBUG] [Thread-75402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] client lang: <none>
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] server lang: <none>
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] kex follows: False
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:36:35.469 [DEBUG] [Thread-75402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:36:35.470 [DEBUG] [Thread-75402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:36:35.470 [DEBUG] [Thread-75402] [transport.py] [_log()] Compression: none
2025-12-12T19:36:35.470 [DEBUG] [Thread-75402] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:36:35.490 [DEBUG] [Thread-75402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:36:35.491 [DEBUG] [Thread-75402] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:36:35.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:36:35.492 [DEBUG] [Thread-75402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:36:35.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:36:35.494 [DEBUG] [Thread-75402] [transport.py] [_log()] userauth is OK
2025-12-12T19:36:35.494 [DEBUG] [Thread-75402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:36:35.494 [DEBUG] [Thread-75402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:36:35.494 [DEBUG] [Thread-75402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:36:35.494 [DEBUG] [Thread-75402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:36:35.518 [INFO] [Thread-75402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:36:35.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:36:36.196 [DEBUG] [Thread-75402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:36:36.196 [DEBUG] [Thread-75402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:36:36.197 [DEBUG] [Thread-75402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:36:36.238 [DEBUG] [Thread-75402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:36:36.238 [DEBUG] [Thread-75402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:36:36.241 [DEBUG] [Thread-75402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:36:36.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:36:36.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:36:36.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:36:36.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:36:36.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:36:36.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:36:36.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:36:36.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:36:36.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:36:36.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.733436 -999.00  +12.60  41.59     52   +3.10 1 1 2 1 1   878    0 5.24 -198.83 ----- 35.1 41.6 310.0 45.1 13.5 -25.1 13.3 -24.8 13.1 -23.1 13.3 -23.8
2025-12-12T19:36:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:36:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:36:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.733436
2025-12-12T19:36:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:36:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:36:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:36:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:36:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:36:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:36:25', tmtdew=10.86, humidity=47.39, cloud=0.0, wind=38.04, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:36:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:36:36.267 [DEBUG] [Thread-75402] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:36:36.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:36:36.364 [DEBUG] [Thread-75405] [transport.py] [_log()] starting thread (client mode): 0xf57a7940
2025-12-12T19:36:36.364 [DEBUG] [Thread-75405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:36:36.379 [DEBUG] [Thread-75405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:36:36.379 [INFO] [Thread-75405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] client lang: <none>
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] server lang: <none>
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] kex follows: False
2025-12-12T19:36:36.387 [DEBUG] [Thread-75405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:36:36.388 [DEBUG] [Thread-75405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:36:36.388 [DEBUG] [Thread-75405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:36:36.388 [DEBUG] [Thread-75405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:36:36.388 [DEBUG] [Thread-75405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:36:36.388 [DEBUG] [Thread-75405] [transport.py] [_log()] Compression: none
2025-12-12T19:36:36.388 [DEBUG] [Thread-75405] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:36:36.444 [DEBUG] [Thread-75405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:36:36.444 [DEBUG] [Thread-75405] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:36:36.445 [DEBUG] [Thread-75405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:36:36.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:36:36.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:36:36.500 [DEBUG] [Thread-75405] [transport.py] [_log()] userauth is OK
2025-12-12T19:36:36.500 [DEBUG] [Thread-75405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:36:36.500 [DEBUG] [Thread-75405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:36:36.500 [DEBUG] [Thread-75405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:36:36.500 [DEBUG] [Thread-75405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:36:36.519 [INFO] [Thread-75405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:36:36.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:36:36.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:36:37.324 [DEBUG] [Thread-75405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:36:37.324 [DEBUG] [Thread-75405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:36:37.372 [DEBUG] [Thread-75405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:36:37.372 [DEBUG] [Thread-75405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:36:37.381 [DEBUG] [Thread-75405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:36:37.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:36:37.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:36:37.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:36:37.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:36:37.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:36:37.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:36:37.416 [DEBUG] [Thread-75405] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:36:38.137 [DEBUG] [Thread-75407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:53.182 [DEBUG] [Thread-75408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:55.697 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:36:55.698 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:37:03.722 [DEBUG] [Thread-75409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:37:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:37:07.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:37:07.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:37:08.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 36, 57), 10.81, 47.87, 0.0, 33.89, 12.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:37:08.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:36:57
2025-12-12T19:37:08.205 [DEBUG] [Thread-75410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:37:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:37:08.394 [DEBUG] [Thread-75411] [transport.py] [_log()] starting thread (client mode): 0xfabc7f70
2025-12-12T19:37:08.394 [DEBUG] [Thread-75411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:37:08.414 [DEBUG] [Thread-75411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:37:08.414 [INFO] [Thread-75411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:37:08.417 [DEBUG] [Thread-75411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] client lang: <none>
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] server lang: <none>
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] kex follows: False
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:37:08.418 [DEBUG] [Thread-75411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:37:08.419 [DEBUG] [Thread-75411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:37:08.419 [DEBUG] [Thread-75411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:37:08.419 [DEBUG] [Thread-75411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:37:08.419 [DEBUG] [Thread-75411] [transport.py] [_log()] Compression: none
2025-12-12T19:37:08.419 [DEBUG] [Thread-75411] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:37:08.432 [DEBUG] [Thread-75411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:37:08.432 [DEBUG] [Thread-75411] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:37:08.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:37:08.433 [DEBUG] [Thread-75411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:37:08.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:37:08.435 [DEBUG] [Thread-75411] [transport.py] [_log()] userauth is OK
2025-12-12T19:37:08.435 [DEBUG] [Thread-75411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:37:08.435 [DEBUG] [Thread-75411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:37:08.435 [DEBUG] [Thread-75411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:37:08.435 [DEBUG] [Thread-75411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:37:08.453 [INFO] [Thread-75411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:37:08.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:37:09.206 [DEBUG] [Thread-75411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:37:09.206 [DEBUG] [Thread-75411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:37:09.206 [DEBUG] [Thread-75411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:37:09.247 [DEBUG] [Thread-75411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:37:09.247 [DEBUG] [Thread-75411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:37:09.250 [DEBUG] [Thread-75411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:37:09.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:37:09.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:37:09.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:37:09.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:37:09.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:37:09.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:37:09.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:37:09.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:37:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:37:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.733783 -999.00  +12.60  36.99     52   +3.10 1 1 2 1 1   877    0 5.30 -197.33 ----- 36.8 37.0 310.2 47.0 13.5 -25.1 13.4 -24.8 13.1 -22.9 13.4 -23.9
2025-12-12T19:37:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:37:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:37:09.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.733783
2025-12-12T19:37:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:37:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:37:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:37:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:37:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:37:09.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:36:57', tmtdew=10.81, humidity=47.87, cloud=0.0, wind=33.89, temperature=12.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:36:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:37:09.275 [DEBUG] [Thread-75411] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:37:09.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:37:09.377 [DEBUG] [Thread-75414] [transport.py] [_log()] starting thread (client mode): 0xf57a6aa0
2025-12-12T19:37:09.377 [DEBUG] [Thread-75414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:37:09.393 [DEBUG] [Thread-75414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:37:09.393 [INFO] [Thread-75414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:37:09.404 [DEBUG] [Thread-75414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:37:09.404 [DEBUG] [Thread-75414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] client lang: <none>
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] server lang: <none>
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] kex follows: False
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] Compression: none
2025-12-12T19:37:09.405 [DEBUG] [Thread-75414] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:37:09.458 [DEBUG] [Thread-75414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:37:09.459 [DEBUG] [Thread-75414] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:37:09.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:37:09.460 [DEBUG] [Thread-75414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:37:09.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:37:09.515 [DEBUG] [Thread-75414] [transport.py] [_log()] userauth is OK
2025-12-12T19:37:09.516 [DEBUG] [Thread-75414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:37:09.516 [DEBUG] [Thread-75414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:37:09.516 [DEBUG] [Thread-75414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:37:09.516 [DEBUG] [Thread-75414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:37:09.538 [INFO] [Thread-75414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:37:09.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:37:09.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:37:10.403 [DEBUG] [Thread-75414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:37:10.403 [DEBUG] [Thread-75414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:37:10.451 [DEBUG] [Thread-75414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:37:10.451 [DEBUG] [Thread-75414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:37:10.459 [DEBUG] [Thread-75414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:37:10.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:37:10.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:37:10.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:37:10.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:37:10.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:37:10.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:37:10.494 [DEBUG] [Thread-75414] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:37:23.232 [DEBUG] [Thread-75416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:37:38.279 [DEBUG] [Thread-75417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:37:40.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:37:40.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:37:40.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:37:41.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 37, 29), 10.84, 47.77, 0.0, 32.36, 12.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:37:41.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:37:29
2025-12-12T19:37:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:37:41.460 [DEBUG] [Thread-75418] [transport.py] [_log()] starting thread (client mode): 0xf81c0d90
2025-12-12T19:37:41.461 [DEBUG] [Thread-75418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:37:41.482 [DEBUG] [Thread-75418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:37:41.482 [INFO] [Thread-75418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] client lang: <none>
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] server lang: <none>
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] kex follows: False
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:37:41.486 [DEBUG] [Thread-75418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:37:41.487 [DEBUG] [Thread-75418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:37:41.487 [DEBUG] [Thread-75418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:37:41.487 [DEBUG] [Thread-75418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:37:41.487 [DEBUG] [Thread-75418] [transport.py] [_log()] Compression: none
2025-12-12T19:37:41.487 [DEBUG] [Thread-75418] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:37:41.504 [DEBUG] [Thread-75418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:37:41.504 [DEBUG] [Thread-75418] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:37:41.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:37:41.505 [DEBUG] [Thread-75418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:37:41.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:37:41.507 [DEBUG] [Thread-75418] [transport.py] [_log()] userauth is OK
2025-12-12T19:37:41.508 [DEBUG] [Thread-75418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:37:41.508 [DEBUG] [Thread-75418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:37:41.508 [DEBUG] [Thread-75418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:37:41.508 [DEBUG] [Thread-75418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:37:41.532 [INFO] [Thread-75418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:37:41.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:37:42.177 [DEBUG] [Thread-75418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:37:42.177 [DEBUG] [Thread-75418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:37:42.178 [DEBUG] [Thread-75418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:37:42.219 [DEBUG] [Thread-75418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:37:42.219 [DEBUG] [Thread-75418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:37:42.222 [DEBUG] [Thread-75418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:37:42.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:37:42.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:37:42.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:37:42.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:37:42.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:37:42.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:37:42.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:37:42.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:37:42.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:37:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.734130 -999.00  +12.60  37.17     52   +3.20 1 1 2 1 1   876    0 5.60 -195.90 ----- 29.4 37.2 314.6 48.2 13.5 -25.2 13.3 -24.8 13.0 -23.0 13.3 -23.8
2025-12-12T19:37:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:37:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:37:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.734130
2025-12-12T19:37:42.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:37:42.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:37:42.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:37:42.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:37:42.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:37:42.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:37:29', tmtdew=10.84, humidity=47.77, cloud=0.0, wind=32.36, temperature=12.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:37:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:37:42.246 [DEBUG] [Thread-75418] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:37:42.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:37:42.345 [DEBUG] [Thread-75421] [transport.py] [_log()] starting thread (client mode): 0xf81e4580
2025-12-12T19:37:42.345 [DEBUG] [Thread-75421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:37:42.363 [DEBUG] [Thread-75421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:37:42.364 [INFO] [Thread-75421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:37:42.371 [DEBUG] [Thread-75421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:37:42.371 [DEBUG] [Thread-75421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:37:42.371 [DEBUG] [Thread-75421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:37:42.371 [DEBUG] [Thread-75421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] client lang: <none>
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] server lang: <none>
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] kex follows: False
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:37:42.372 [DEBUG] [Thread-75421] [transport.py] [_log()] Compression: none
2025-12-12T19:37:42.373 [DEBUG] [Thread-75421] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:37:42.431 [DEBUG] [Thread-75421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:37:42.432 [DEBUG] [Thread-75421] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:37:42.432 [DEBUG] [Thread-75421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:37:42.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:37:42.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:37:42.487 [DEBUG] [Thread-75421] [transport.py] [_log()] userauth is OK
2025-12-12T19:37:42.487 [DEBUG] [Thread-75421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:37:42.487 [DEBUG] [Thread-75421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:37:42.487 [DEBUG] [Thread-75421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:37:42.487 [DEBUG] [Thread-75421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:37:42.506 [INFO] [Thread-75421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:37:42.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:37:42.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:37:43.354 [DEBUG] [Thread-75421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:37:43.354 [DEBUG] [Thread-75421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:37:43.406 [DEBUG] [Thread-75421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:37:43.406 [DEBUG] [Thread-75421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:37:43.415 [DEBUG] [Thread-75421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:37:43.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:37:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:37:43.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:37:43.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:37:43.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:37:43.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:37:43.449 [DEBUG] [Thread-75421] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:37:53.313 [DEBUG] [Thread-75423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:01.331 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:01.332 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:03.793 [DEBUG] [Thread-75424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:08.354 [DEBUG] [Thread-75425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:13.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:38:13.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:38:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:38:14.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 38, 1), 10.82, 47.84, 0.0, 33.86, 12.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:38:14.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:38:01
2025-12-12T19:38:14.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:38:14.409 [DEBUG] [Thread-75426] [transport.py] [_log()] starting thread (client mode): 0xf81c0cd0
2025-12-12T19:38:14.409 [DEBUG] [Thread-75426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:38:14.429 [DEBUG] [Thread-75426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:38:14.429 [INFO] [Thread-75426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:38:14.431 [DEBUG] [Thread-75426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:38:14.431 [DEBUG] [Thread-75426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] client lang: <none>
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] server lang: <none>
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] kex follows: False
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:38:14.432 [DEBUG] [Thread-75426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:38:14.433 [DEBUG] [Thread-75426] [transport.py] [_log()] Compression: none
2025-12-12T19:38:14.433 [DEBUG] [Thread-75426] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:38:14.443 [DEBUG] [Thread-75426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:38:14.444 [DEBUG] [Thread-75426] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:38:14.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:38:14.445 [DEBUG] [Thread-75426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:38:14.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:38:14.448 [DEBUG] [Thread-75426] [transport.py] [_log()] userauth is OK
2025-12-12T19:38:14.448 [DEBUG] [Thread-75426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:38:14.448 [DEBUG] [Thread-75426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:38:14.449 [DEBUG] [Thread-75426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:38:14.449 [DEBUG] [Thread-75426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:38:14.492 [INFO] [Thread-75426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:38:14.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:38:15.193 [DEBUG] [Thread-75426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:38:15.194 [DEBUG] [Thread-75426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:38:15.194 [DEBUG] [Thread-75426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:38:15.235 [DEBUG] [Thread-75426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:38:15.235 [DEBUG] [Thread-75426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:38:15.238 [DEBUG] [Thread-75426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:38:15.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:38:15.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:38:15.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:38:15.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:38:15.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:38:15.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:38:15.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:38:15.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:38:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:38:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.734477 -999.00  +12.50  40.94     52   +3.10 1 1 2 1 1   875    0 5.22 -194.18 ----- 38.4 40.9 316.8 48.7 13.5 -25.1 13.3 -24.9 13.0 -22.8 13.3 -23.8
2025-12-12T19:38:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:38:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:38:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.734477
2025-12-12T19:38:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:38:15.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:38:15.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:38:15.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:38:15.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:38:15.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:38:01', tmtdew=10.82, humidity=47.84, cloud=0.0, wind=33.86, temperature=12.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:37:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:38:15.264 [DEBUG] [Thread-75426] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:38:15.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:38:15.361 [DEBUG] [Thread-75429] [transport.py] [_log()] starting thread (client mode): 0xf5701a20
2025-12-12T19:38:15.361 [DEBUG] [Thread-75429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:38:15.376 [DEBUG] [Thread-75429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:38:15.376 [INFO] [Thread-75429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:15.384 [DEBUG] [Thread-75429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] client lang: <none>
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] server lang: <none>
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] kex follows: False
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:38:15.385 [DEBUG] [Thread-75429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:38:15.386 [DEBUG] [Thread-75429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:38:15.386 [DEBUG] [Thread-75429] [transport.py] [_log()] Compression: none
2025-12-12T19:38:15.386 [DEBUG] [Thread-75429] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:38:15.443 [DEBUG] [Thread-75429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:38:15.444 [DEBUG] [Thread-75429] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:38:15.444 [DEBUG] [Thread-75429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:38:15.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:38:15.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:38:15.499 [DEBUG] [Thread-75429] [transport.py] [_log()] userauth is OK
2025-12-12T19:38:15.499 [DEBUG] [Thread-75429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:38:15.499 [DEBUG] [Thread-75429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:38:15.499 [DEBUG] [Thread-75429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:38:15.499 [DEBUG] [Thread-75429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:38:15.520 [INFO] [Thread-75429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:38:15.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:38:15.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:38:16.369 [DEBUG] [Thread-75429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:38:16.369 [DEBUG] [Thread-75429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:38:16.417 [DEBUG] [Thread-75429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:38:16.417 [DEBUG] [Thread-75429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:38:16.426 [DEBUG] [Thread-75429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:38:16.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:38:16.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:38:16.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:38:16.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:38:16.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:38:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:38:16.460 [DEBUG] [Thread-75429] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:38:23.381 [DEBUG] [Thread-75431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:38.425 [DEBUG] [Thread-75432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:38:46.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:38:46.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:38:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:38:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 38, 33), 10.81, 47.78, 0.0, 40.22, 13.02, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:38:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:38:33
2025-12-12T19:38:47.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:38:47.470 [DEBUG] [Thread-75433] [transport.py] [_log()] starting thread (client mode): 0xf5703e50
2025-12-12T19:38:47.471 [DEBUG] [Thread-75433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:38:47.490 [DEBUG] [Thread-75433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:38:47.490 [INFO] [Thread-75433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:38:47.493 [DEBUG] [Thread-75433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:38:47.493 [DEBUG] [Thread-75433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:38:47.493 [DEBUG] [Thread-75433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:38:47.493 [DEBUG] [Thread-75433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:47.493 [DEBUG] [Thread-75433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:47.493 [DEBUG] [Thread-75433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] client lang: <none>
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] server lang: <none>
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] kex follows: False
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] Compression: none
2025-12-12T19:38:47.494 [DEBUG] [Thread-75433] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:38:47.514 [DEBUG] [Thread-75433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:38:47.514 [DEBUG] [Thread-75433] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:38:47.514 [DEBUG] [Thread-75433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:38:47.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:38:47.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:38:47.515 [DEBUG] [Thread-75433] [transport.py] [_log()] userauth is OK
2025-12-12T19:38:47.515 [DEBUG] [Thread-75433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:38:47.515 [DEBUG] [Thread-75433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:38:47.515 [DEBUG] [Thread-75433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:38:47.515 [DEBUG] [Thread-75433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:38:47.529 [INFO] [Thread-75433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:38:47.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:38:48.167 [DEBUG] [Thread-75433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:38:48.167 [DEBUG] [Thread-75433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:38:48.167 [DEBUG] [Thread-75433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:38:48.209 [DEBUG] [Thread-75433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:38:48.209 [DEBUG] [Thread-75433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:38:48.211 [DEBUG] [Thread-75433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:38:48.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:38:48.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:38:48.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:38:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:38:48.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:38:48.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:38:48.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.734824 -999.00  +12.60  31.23     52   +3.20 1 1 2 1 1   874    0 5.37 -192.18 ----- 37.4 31.2 310.8 42.3 13.4 -25.0 13.3 -24.7 13.0 -22.7 13.3 -23.8
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.734824
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:38:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:38:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:38:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:38:33', tmtdew=10.81, humidity=47.78, cloud=0.0, wind=40.22, temperature=13.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:38:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:38:48.232 [DEBUG] [Thread-75433] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:38:48.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:38:48.318 [DEBUG] [Thread-75436] [transport.py] [_log()] starting thread (client mode): 0xf578ad70
2025-12-12T19:38:48.319 [DEBUG] [Thread-75436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:38:48.333 [DEBUG] [Thread-75436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:38:48.333 [INFO] [Thread-75436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] client lang: <none>
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] server lang: <none>
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] kex follows: False
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] Compression: none
2025-12-12T19:38:48.341 [DEBUG] [Thread-75436] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:38:48.397 [DEBUG] [Thread-75436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:38:48.397 [DEBUG] [Thread-75436] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:38:48.397 [DEBUG] [Thread-75436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:38:48.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:38:48.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:38:48.454 [DEBUG] [Thread-75436] [transport.py] [_log()] userauth is OK
2025-12-12T19:38:48.454 [DEBUG] [Thread-75436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:38:48.454 [DEBUG] [Thread-75436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:38:48.454 [DEBUG] [Thread-75436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:38:48.454 [DEBUG] [Thread-75436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:38:48.470 [INFO] [Thread-75436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:38:48.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:38:48.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:38:49.331 [DEBUG] [Thread-75436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:38:49.331 [DEBUG] [Thread-75436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:38:49.378 [DEBUG] [Thread-75436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:38:49.378 [DEBUG] [Thread-75436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:38:49.387 [DEBUG] [Thread-75436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:38:49.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:38:49.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:38:49.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:38:49.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:38:49.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:38:49.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:38:49.418 [DEBUG] [Thread-75436] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:38:53.454 [DEBUG] [Thread-75438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:03.873 [DEBUG] [Thread-75439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:07.234 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:07.235 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:08.507 [DEBUG] [Thread-75440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:19.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:39:19.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:39:19.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:39:20.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 39, 5), 10.73, 47.96, 0.0, 37.0, 12.73, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:39:20.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:39:05
2025-12-12T19:39:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:39:20.419 [DEBUG] [Thread-75441] [transport.py] [_log()] starting thread (client mode): 0xf5772020
2025-12-12T19:39:20.419 [DEBUG] [Thread-75441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:39:20.439 [DEBUG] [Thread-75441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:39:20.439 [INFO] [Thread-75441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:39:20.442 [DEBUG] [Thread-75441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:39:20.442 [DEBUG] [Thread-75441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] client lang: <none>
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] server lang: <none>
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] kex follows: False
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:39:20.443 [DEBUG] [Thread-75441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:39:20.444 [DEBUG] [Thread-75441] [transport.py] [_log()] Compression: none
2025-12-12T19:39:20.444 [DEBUG] [Thread-75441] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:39:20.462 [DEBUG] [Thread-75441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:39:20.463 [DEBUG] [Thread-75441] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:39:20.463 [DEBUG] [Thread-75441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:39:20.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:39:20.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:39:20.465 [DEBUG] [Thread-75441] [transport.py] [_log()] userauth is OK
2025-12-12T19:39:20.465 [DEBUG] [Thread-75441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:39:20.465 [DEBUG] [Thread-75441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:39:20.465 [DEBUG] [Thread-75441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:39:20.465 [DEBUG] [Thread-75441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:39:20.489 [INFO] [Thread-75441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:39:20.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:39:21.235 [DEBUG] [Thread-75441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:39:21.235 [DEBUG] [Thread-75441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:39:21.236 [DEBUG] [Thread-75441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:39:21.277 [DEBUG] [Thread-75441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:39:21.277 [DEBUG] [Thread-75441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:39:21.282 [DEBUG] [Thread-75441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:39:21.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:39:21.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:39:21.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:39:21.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:39:21.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:39:21.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:39:21.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:39:21.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:39:21.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:39:21.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.735172 -999.00  +12.50  30.32     52   +3.20 1 1 2 1 1   872    0 5.50 -176.69 ----- 31.2 30.3 320.2 44.9 13.4 -25.0 13.3 -24.6 12.9 -22.8 13.3 -23.6
2025-12-12T19:39:21.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:39:21.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:39:21.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.735172
2025-12-12T19:39:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:39:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:39:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:39:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:39:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:39:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:39:05', tmtdew=10.73, humidity=47.96, cloud=0.0, wind=37.0, temperature=12.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:38:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:39:21.310 [DEBUG] [Thread-75441] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:39:21.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:39:21.408 [DEBUG] [Thread-75444] [transport.py] [_log()] starting thread (client mode): 0xf8154f40
2025-12-12T19:39:21.408 [DEBUG] [Thread-75444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:39:21.422 [DEBUG] [Thread-75444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:39:21.422 [INFO] [Thread-75444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:39:21.429 [DEBUG] [Thread-75444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] client lang: <none>
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] server lang: <none>
2025-12-12T19:39:21.430 [DEBUG] [Thread-75444] [transport.py] [_log()] kex follows: False
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] Compression: none
2025-12-12T19:39:21.431 [DEBUG] [Thread-75444] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:39:21.489 [DEBUG] [Thread-75444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:39:21.490 [DEBUG] [Thread-75444] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:39:21.490 [DEBUG] [Thread-75444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:39:21.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:39:21.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:39:21.549 [DEBUG] [Thread-75444] [transport.py] [_log()] userauth is OK
2025-12-12T19:39:21.549 [DEBUG] [Thread-75444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:39:21.550 [DEBUG] [Thread-75444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:39:21.550 [DEBUG] [Thread-75444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:39:21.550 [DEBUG] [Thread-75444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:39:21.572 [INFO] [Thread-75444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:39:21.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:39:21.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:39:22.377 [DEBUG] [Thread-75444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:39:22.377 [DEBUG] [Thread-75444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:39:22.425 [DEBUG] [Thread-75444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:39:22.425 [DEBUG] [Thread-75444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:39:22.434 [DEBUG] [Thread-75444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:39:22.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:39:22.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:39:22.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:39:22.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:39:22.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:39:22.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:39:22.467 [DEBUG] [Thread-75444] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:39:23.542 [DEBUG] [Thread-75446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:38.584 [DEBUG] [Thread-75447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:52.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:39:52.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:39:52.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:39:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 39, 37), 10.76, 48.02, 0.0, 36.89, 12.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:39:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:39:37
2025-12-12T19:39:53.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:39:53.464 [DEBUG] [Thread-75448] [transport.py] [_log()] starting thread (client mode): 0xf57a7c40
2025-12-12T19:39:53.465 [DEBUG] [Thread-75448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:39:53.485 [DEBUG] [Thread-75448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:39:53.485 [INFO] [Thread-75448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] client lang: <none>
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] server lang: <none>
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] kex follows: False
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] Compression: none
2025-12-12T19:39:53.489 [DEBUG] [Thread-75448] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:39:53.507 [DEBUG] [Thread-75448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:39:53.508 [DEBUG] [Thread-75448] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:39:53.508 [DEBUG] [Thread-75448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:39:53.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:39:53.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:39:53.510 [DEBUG] [Thread-75448] [transport.py] [_log()] userauth is OK
2025-12-12T19:39:53.511 [DEBUG] [Thread-75448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:39:53.511 [DEBUG] [Thread-75448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:39:53.511 [DEBUG] [Thread-75448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:39:53.511 [DEBUG] [Thread-75448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:39:53.536 [INFO] [Thread-75448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:39:53.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:39:53.611 [DEBUG] [Thread-75450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:39:54.188 [DEBUG] [Thread-75448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:39:54.188 [DEBUG] [Thread-75448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:39:54.189 [DEBUG] [Thread-75448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:39:54.229 [DEBUG] [Thread-75448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:39:54.229 [DEBUG] [Thread-75448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:39:54.232 [DEBUG] [Thread-75448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:39:54.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:39:54.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:39:54.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:39:54.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:39:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:39:54.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:39:54.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:39:54.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:39:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:39:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.735519 -999.00  +12.60  34.45     52   +3.10 1 1 2 1 1   871    0 5.70 -176.01 ----- 35.0 34.5 310.2 41.3 13.4 -24.8 13.3 -24.5 12.9 -22.6 13.3 -23.6
2025-12-12T19:39:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:39:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:39:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.735519
2025-12-12T19:39:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:39:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:39:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:39:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:39:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:39:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:39:37', tmtdew=10.76, humidity=48.02, cloud=0.0, wind=36.89, temperature=12.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:39:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:39:54.258 [DEBUG] [Thread-75448] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:39:54.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:39:54.357 [DEBUG] [Thread-75452] [transport.py] [_log()] starting thread (client mode): 0xf81e4640
2025-12-12T19:39:54.357 [DEBUG] [Thread-75452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:39:54.371 [DEBUG] [Thread-75452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:39:54.371 [INFO] [Thread-75452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:39:54.379 [DEBUG] [Thread-75452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] client lang: <none>
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] server lang: <none>
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] kex follows: False
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] Compression: none
2025-12-12T19:39:54.380 [DEBUG] [Thread-75452] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:39:54.436 [DEBUG] [Thread-75452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:39:54.437 [DEBUG] [Thread-75452] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:39:54.437 [DEBUG] [Thread-75452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:39:54.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:39:54.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:39:54.493 [DEBUG] [Thread-75452] [transport.py] [_log()] userauth is OK
2025-12-12T19:39:54.493 [DEBUG] [Thread-75452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:39:54.493 [DEBUG] [Thread-75452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:39:54.493 [DEBUG] [Thread-75452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:39:54.493 [DEBUG] [Thread-75452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:39:54.512 [INFO] [Thread-75452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:39:54.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:39:54.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:39:55.329 [DEBUG] [Thread-75452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:39:55.329 [DEBUG] [Thread-75452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:39:55.377 [DEBUG] [Thread-75452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:39:55.377 [DEBUG] [Thread-75452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:39:55.386 [DEBUG] [Thread-75452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:39:55.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:39:55.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:39:55.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:39:55.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:39:55.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:39:55.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:39:55.419 [DEBUG] [Thread-75452] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:40:03.947 [DEBUG] [Thread-75454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:08.638 [DEBUG] [Thread-75455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:12.741 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:12.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:23.675 [DEBUG] [Thread-75456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:25.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:40:25.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:40:25.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:40:26.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 40, 9), 10.71, 48.2, 0.0, 37.05, 12.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:40:26.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:40:09
2025-12-12T19:40:26.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:40:26.411 [DEBUG] [Thread-75457] [transport.py] [_log()] starting thread (client mode): 0xf813d6c0
2025-12-12T19:40:26.411 [DEBUG] [Thread-75457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:40:26.431 [DEBUG] [Thread-75457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:40:26.431 [INFO] [Thread-75457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] client lang: <none>
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] server lang: <none>
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] kex follows: False
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] Compression: none
2025-12-12T19:40:26.435 [DEBUG] [Thread-75457] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:40:26.452 [DEBUG] [Thread-75457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:40:26.453 [DEBUG] [Thread-75457] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:40:26.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:40:26.454 [DEBUG] [Thread-75457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:40:26.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:40:26.457 [DEBUG] [Thread-75457] [transport.py] [_log()] userauth is OK
2025-12-12T19:40:26.457 [DEBUG] [Thread-75457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:40:26.457 [DEBUG] [Thread-75457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:40:26.457 [DEBUG] [Thread-75457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:40:26.457 [DEBUG] [Thread-75457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:40:26.472 [INFO] [Thread-75457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:40:26.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:40:27.239 [DEBUG] [Thread-75457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:40:27.239 [DEBUG] [Thread-75457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:40:27.239 [DEBUG] [Thread-75457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:40:27.281 [DEBUG] [Thread-75457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:40:27.281 [DEBUG] [Thread-75457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:40:27.285 [DEBUG] [Thread-75457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:40:27.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:40:27.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:40:27.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:40:27.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:40:27.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:40:27.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:40:27.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:40:27.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:40:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:40:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.736213 -999.00  +12.60  31.99     52   +3.10 1 1 2 1 1   868    0 6.27 -156.89 ----- 34.6 32.0 317.2 38.5 13.3 -25.0 13.3 -24.7 12.9 -22.9 13.2 -23.6
2025-12-12T19:40:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:40:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:40:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.736213
2025-12-12T19:40:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:40:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:40:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:40:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:40:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:40:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:40:09', tmtdew=10.71, humidity=48.2, cloud=0.0, wind=37.05, temperature=12.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:40:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:40:27.304 [DEBUG] [Thread-75457] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:40:27.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:40:27.398 [DEBUG] [Thread-75460] [transport.py] [_log()] starting thread (client mode): 0xf575faf0
2025-12-12T19:40:27.399 [DEBUG] [Thread-75460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:40:27.414 [DEBUG] [Thread-75460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:40:27.414 [INFO] [Thread-75460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] client lang: <none>
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] server lang: <none>
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] kex follows: False
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:40:27.422 [DEBUG] [Thread-75460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:40:27.423 [DEBUG] [Thread-75460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:40:27.423 [DEBUG] [Thread-75460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:40:27.423 [DEBUG] [Thread-75460] [transport.py] [_log()] Compression: none
2025-12-12T19:40:27.423 [DEBUG] [Thread-75460] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:40:27.481 [DEBUG] [Thread-75460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:40:27.481 [DEBUG] [Thread-75460] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:40:27.482 [DEBUG] [Thread-75460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:40:27.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:40:27.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:40:27.537 [DEBUG] [Thread-75460] [transport.py] [_log()] userauth is OK
2025-12-12T19:40:27.537 [DEBUG] [Thread-75460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:40:27.537 [DEBUG] [Thread-75460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:40:27.537 [DEBUG] [Thread-75460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:40:27.537 [DEBUG] [Thread-75460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:40:27.557 [INFO] [Thread-75460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:40:27.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:40:27.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:40:28.417 [DEBUG] [Thread-75460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:40:28.418 [DEBUG] [Thread-75460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:40:28.466 [DEBUG] [Thread-75460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:40:28.466 [DEBUG] [Thread-75460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:40:28.475 [DEBUG] [Thread-75460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:40:28.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:40:28.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:40:28.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:40:28.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:40:28.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:40:28.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:40:28.509 [DEBUG] [Thread-75460] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:40:38.710 [DEBUG] [Thread-75462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:53.758 [DEBUG] [Thread-75463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:40:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:40:58.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:40:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:40:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 40, 41), 10.65, 48.04, 0.0, 32.15, 12.63, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:40:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:40:41
2025-12-12T19:40:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:40:59.489 [DEBUG] [Thread-75464] [transport.py] [_log()] starting thread (client mode): 0xf57010c0
2025-12-12T19:40:59.489 [DEBUG] [Thread-75464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:40:59.510 [DEBUG] [Thread-75464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:40:59.510 [INFO] [Thread-75464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] client lang: <none>
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] server lang: <none>
2025-12-12T19:40:59.513 [DEBUG] [Thread-75464] [transport.py] [_log()] kex follows: False
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] Compression: none
2025-12-12T19:40:59.514 [DEBUG] [Thread-75464] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:40:59.534 [DEBUG] [Thread-75464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:40:59.535 [DEBUG] [Thread-75464] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:40:59.535 [DEBUG] [Thread-75464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:40:59.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:40:59.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:40:59.537 [DEBUG] [Thread-75464] [transport.py] [_log()] userauth is OK
2025-12-12T19:40:59.537 [DEBUG] [Thread-75464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:40:59.538 [DEBUG] [Thread-75464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:40:59.538 [DEBUG] [Thread-75464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:40:59.538 [DEBUG] [Thread-75464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:40:59.561 [INFO] [Thread-75464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:40:59.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:41:00.219 [DEBUG] [Thread-75464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:41:00.219 [DEBUG] [Thread-75464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:41:00.219 [DEBUG] [Thread-75464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:41:00.260 [DEBUG] [Thread-75464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:41:00.260 [DEBUG] [Thread-75464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:41:00.263 [DEBUG] [Thread-75464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:41:00.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:41:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:41:00.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:41:00.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:41:00.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:41:00.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:41:00.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:41:00.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:41:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:41:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.736561 -999.00  +12.50  43.12     52   +3.10 1 1 2 1 1   866    0 6.17 -158.31 ----- 43.6 43.1 308.0 48.6 13.4 -24.7 13.3 -24.5 13.0 -22.7 13.2 -23.8
2025-12-12T19:41:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:41:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:41:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.736561
2025-12-12T19:41:00.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:41:00.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:41:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:41:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:41:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:41:00.288 [DEBUG] [Thread-75464] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:41:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:40:41', tmtdew=10.65, humidity=48.04, cloud=0.0, wind=32.15, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:40:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:41:00.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:41:00.382 [DEBUG] [Thread-75467] [transport.py] [_log()] starting thread (client mode): 0xf5700d00
2025-12-12T19:41:00.382 [DEBUG] [Thread-75467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:41:00.396 [DEBUG] [Thread-75467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:41:00.396 [INFO] [Thread-75467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] client lang: <none>
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] server lang: <none>
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] kex follows: False
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:41:00.404 [DEBUG] [Thread-75467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:41:00.405 [DEBUG] [Thread-75467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:41:00.405 [DEBUG] [Thread-75467] [transport.py] [_log()] Compression: none
2025-12-12T19:41:00.405 [DEBUG] [Thread-75467] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:41:00.464 [DEBUG] [Thread-75467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:41:00.464 [DEBUG] [Thread-75467] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:41:00.465 [DEBUG] [Thread-75467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:41:00.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:41:00.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:41:00.520 [DEBUG] [Thread-75467] [transport.py] [_log()] userauth is OK
2025-12-12T19:41:00.520 [DEBUG] [Thread-75467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:41:00.520 [DEBUG] [Thread-75467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:41:00.520 [DEBUG] [Thread-75467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:41:00.521 [DEBUG] [Thread-75467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:41:00.538 [INFO] [Thread-75467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:41:00.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:41:00.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:41:01.377 [DEBUG] [Thread-75467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:41:01.378 [DEBUG] [Thread-75467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:41:01.426 [DEBUG] [Thread-75467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:41:01.426 [DEBUG] [Thread-75467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:41:01.435 [DEBUG] [Thread-75467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:41:01.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:41:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:41:01.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:41:01.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:41:01.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:41:01.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:41:01.469 [DEBUG] [Thread-75467] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:41:04.026 [DEBUG] [Thread-75469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:41:08.790 [DEBUG] [Thread-75470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:41:17.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:41:17.761 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:41:23.830 [DEBUG] [Thread-75471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:41:31.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:41:31.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:41:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:41:32.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 41, 13), 10.64, 48.09, 0.0, 31.97, 12.65, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:41:32.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:41:13
2025-12-12T19:41:32.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:41:32.443 [DEBUG] [Thread-75472] [transport.py] [_log()] starting thread (client mode): 0xf5700100
2025-12-12T19:41:32.443 [DEBUG] [Thread-75472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:41:32.457 [DEBUG] [Thread-75472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:41:32.457 [INFO] [Thread-75472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] client lang: <none>
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] server lang: <none>
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] kex follows: False
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] Compression: none
2025-12-12T19:41:32.458 [DEBUG] [Thread-75472] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:41:32.480 [DEBUG] [Thread-75472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:41:32.480 [DEBUG] [Thread-75472] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:41:32.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:41:32.481 [DEBUG] [Thread-75472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:41:32.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:41:32.482 [DEBUG] [Thread-75472] [transport.py] [_log()] userauth is OK
2025-12-12T19:41:32.482 [DEBUG] [Thread-75472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:41:32.482 [DEBUG] [Thread-75472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:41:32.482 [DEBUG] [Thread-75472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:41:32.482 [DEBUG] [Thread-75472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:41:32.495 [INFO] [Thread-75472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:41:32.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:41:33.169 [DEBUG] [Thread-75472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:41:33.170 [DEBUG] [Thread-75472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:41:33.170 [DEBUG] [Thread-75472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:41:33.211 [DEBUG] [Thread-75472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:41:33.211 [DEBUG] [Thread-75472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:41:33.213 [DEBUG] [Thread-75472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:41:33.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:41:33.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:41:33.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:41:33.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:41:33.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:41:33.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:41:33.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:41:33.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:41:33.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:41:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.736908 -999.00  +12.40  42.10     53   +3.20 1 1 2 1 1   864    0 6.11 -160.46 ----- 42.1 42.1 315.2 48.4 13.3 -25.1 13.2 -24.6 12.9 -23.0 13.2 -23.6
2025-12-12T19:41:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:41:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:41:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.736908
2025-12-12T19:41:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:41:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:41:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:41:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:41:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:41:33.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:41:13', tmtdew=10.64, humidity=48.09, cloud=0.0, wind=31.97, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:41:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:41:33.238 [DEBUG] [Thread-75472] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:41:33.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:41:33.334 [DEBUG] [Thread-75475] [transport.py] [_log()] starting thread (client mode): 0xf574fc70
2025-12-12T19:41:33.334 [DEBUG] [Thread-75475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:41:33.349 [DEBUG] [Thread-75475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:41:33.349 [INFO] [Thread-75475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:41:33.356 [DEBUG] [Thread-75475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:41:33.356 [DEBUG] [Thread-75475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:41:33.356 [DEBUG] [Thread-75475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] client lang: <none>
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] server lang: <none>
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] kex follows: False
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] Compression: none
2025-12-12T19:41:33.357 [DEBUG] [Thread-75475] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:41:33.419 [DEBUG] [Thread-75475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:41:33.420 [DEBUG] [Thread-75475] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:41:33.420 [DEBUG] [Thread-75475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:41:33.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:41:33.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:41:33.476 [DEBUG] [Thread-75475] [transport.py] [_log()] userauth is OK
2025-12-12T19:41:33.476 [DEBUG] [Thread-75475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:41:33.476 [DEBUG] [Thread-75475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:41:33.476 [DEBUG] [Thread-75475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:41:33.476 [DEBUG] [Thread-75475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:41:33.495 [INFO] [Thread-75475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:41:33.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:41:33.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:41:34.330 [DEBUG] [Thread-75475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:41:34.330 [DEBUG] [Thread-75475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:41:34.378 [DEBUG] [Thread-75475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:41:34.378 [DEBUG] [Thread-75475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:41:34.387 [DEBUG] [Thread-75475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:41:34.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:41:34.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:41:34.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:41:34.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:41:34.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:41:34.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:41:34.421 [DEBUG] [Thread-75475] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:41:38.856 [DEBUG] [Thread-75477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:41:53.901 [DEBUG] [Thread-75478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:04.095 [DEBUG] [Thread-75479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:42:04.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:42:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:42:05.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 41, 45), 10.6, 48.72, 0.0, 39.79, 12.61, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:42:05.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:41:45
2025-12-12T19:42:05.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:42:05.415 [DEBUG] [Thread-75480] [transport.py] [_log()] starting thread (client mode): 0xf57014b0
2025-12-12T19:42:05.415 [DEBUG] [Thread-75480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:42:05.436 [DEBUG] [Thread-75480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:42:05.436 [INFO] [Thread-75480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:05.437 [DEBUG] [Thread-75480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] client lang: <none>
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] server lang: <none>
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] kex follows: False
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] Compression: none
2025-12-12T19:42:05.438 [DEBUG] [Thread-75480] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:42:05.446 [DEBUG] [Thread-75480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:42:05.446 [DEBUG] [Thread-75480] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:42:05.447 [DEBUG] [Thread-75480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:42:05.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:42:05.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:42:05.448 [DEBUG] [Thread-75480] [transport.py] [_log()] userauth is OK
2025-12-12T19:42:05.448 [DEBUG] [Thread-75480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:42:05.448 [DEBUG] [Thread-75480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:42:05.448 [DEBUG] [Thread-75480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:42:05.448 [DEBUG] [Thread-75480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:42:05.463 [INFO] [Thread-75480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:42:05.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:42:06.107 [DEBUG] [Thread-75480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:42:06.107 [DEBUG] [Thread-75480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:42:06.107 [DEBUG] [Thread-75480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:42:06.148 [DEBUG] [Thread-75480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:42:06.148 [DEBUG] [Thread-75480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:42:06.151 [DEBUG] [Thread-75480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:42:06.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:42:06.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:42:06.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:42:06.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:42:06.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:42:06.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:42:06.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:42:06.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:42:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:42:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.737255 -999.00  +12.40  35.75     53   +3.30 1 1 2 1 1   861    0 6.18 -148.96 ----- 36.8 35.8 320.6 47.6 13.3 -24.9 13.2 -24.5 12.9 -22.8 13.2 -23.6
2025-12-12T19:42:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:42:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:42:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.737255
2025-12-12T19:42:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:42:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:42:06.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:42:06.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:42:06.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:42:06.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:41:45', tmtdew=10.6, humidity=48.72, cloud=0.0, wind=39.79, temperature=12.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:41:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:42:06.176 [DEBUG] [Thread-75480] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:42:06.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:42:06.273 [DEBUG] [Thread-75483] [transport.py] [_log()] starting thread (client mode): 0xf5770700
2025-12-12T19:42:06.273 [DEBUG] [Thread-75483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:42:06.288 [DEBUG] [Thread-75483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:42:06.289 [INFO] [Thread-75483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:42:06.296 [DEBUG] [Thread-75483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:42:06.296 [DEBUG] [Thread-75483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:42:06.296 [DEBUG] [Thread-75483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] client lang: <none>
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] server lang: <none>
2025-12-12T19:42:06.297 [DEBUG] [Thread-75483] [transport.py] [_log()] kex follows: False
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] Compression: none
2025-12-12T19:42:06.298 [DEBUG] [Thread-75483] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:42:06.354 [DEBUG] [Thread-75483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:42:06.354 [DEBUG] [Thread-75483] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:42:06.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:42:06.355 [DEBUG] [Thread-75483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:42:06.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:42:06.412 [DEBUG] [Thread-75483] [transport.py] [_log()] userauth is OK
2025-12-12T19:42:06.413 [DEBUG] [Thread-75483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:42:06.413 [DEBUG] [Thread-75483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:42:06.413 [DEBUG] [Thread-75483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:42:06.413 [DEBUG] [Thread-75483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:42:06.436 [INFO] [Thread-75483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:42:06.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:42:06.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:42:07.294 [DEBUG] [Thread-75483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:42:07.294 [DEBUG] [Thread-75483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:42:07.342 [DEBUG] [Thread-75483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:42:07.342 [DEBUG] [Thread-75483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:42:07.351 [DEBUG] [Thread-75483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:42:07.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:42:07.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:42:07.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:42:07.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:42:07.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:42:07.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:42:07.385 [DEBUG] [Thread-75483] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:42:08.929 [DEBUG] [Thread-75485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:23.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:23.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:23.982 [DEBUG] [Thread-75486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:42:37.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:42:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:42:38.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 42, 17), 10.58, 48.79, 0.0, 40.1, 12.61, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:42:38.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:42:17
2025-12-12T19:42:38.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:42:38.424 [DEBUG] [Thread-75487] [transport.py] [_log()] starting thread (client mode): 0xf81e7f70
2025-12-12T19:42:38.424 [DEBUG] [Thread-75487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:42:38.443 [DEBUG] [Thread-75487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:42:38.443 [INFO] [Thread-75487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] client lang: <none>
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] server lang: <none>
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] kex follows: False
2025-12-12T19:42:38.450 [DEBUG] [Thread-75487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:42:38.451 [DEBUG] [Thread-75487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:42:38.451 [DEBUG] [Thread-75487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:42:38.451 [DEBUG] [Thread-75487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:42:38.451 [DEBUG] [Thread-75487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:42:38.451 [DEBUG] [Thread-75487] [transport.py] [_log()] Compression: none
2025-12-12T19:42:38.451 [DEBUG] [Thread-75487] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:42:38.463 [DEBUG] [Thread-75487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:42:38.463 [DEBUG] [Thread-75487] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:42:38.463 [DEBUG] [Thread-75487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:42:38.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:42:38.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:42:38.467 [DEBUG] [Thread-75487] [transport.py] [_log()] userauth is OK
2025-12-12T19:42:38.467 [DEBUG] [Thread-75487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:42:38.467 [DEBUG] [Thread-75487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:42:38.467 [DEBUG] [Thread-75487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:42:38.467 [DEBUG] [Thread-75487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:42:38.477 [INFO] [Thread-75487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:42:38.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:42:39.012 [DEBUG] [Thread-75489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:42:39.131 [DEBUG] [Thread-75487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:42:39.131 [DEBUG] [Thread-75487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:42:39.132 [DEBUG] [Thread-75487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:42:39.173 [DEBUG] [Thread-75487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:42:39.173 [DEBUG] [Thread-75487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:42:39.175 [DEBUG] [Thread-75487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:42:39.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:42:39.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:42:39.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:42:39.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:42:39.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:42:39.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:42:39.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.737602 -999.00  +12.50  27.27     53   +3.30 1 1 1 1 1   859    0 5.93 -157.92 ----- 27.6 27.3 319.8 38.8 13.2 -24.7 13.2 -24.3 12.9 -22.6 13.1 -23.3
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.737602
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:42:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:42:17', tmtdew=10.58, humidity=48.79, cloud=0.0, wind=40.1, temperature=12.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:42:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:42:39.197 [DEBUG] [Thread-75487] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:42:39.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:42:39.285 [DEBUG] [Thread-75491] [transport.py] [_log()] starting thread (client mode): 0xf81e7d90
2025-12-12T19:42:39.285 [DEBUG] [Thread-75491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:42:39.300 [DEBUG] [Thread-75491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:42:39.300 [INFO] [Thread-75491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] client lang: <none>
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] server lang: <none>
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] kex follows: False
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] Compression: none
2025-12-12T19:42:39.307 [DEBUG] [Thread-75491] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:42:39.369 [DEBUG] [Thread-75491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:42:39.369 [DEBUG] [Thread-75491] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:42:39.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:42:39.370 [DEBUG] [Thread-75491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:42:39.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:42:39.427 [DEBUG] [Thread-75491] [transport.py] [_log()] userauth is OK
2025-12-12T19:42:39.427 [DEBUG] [Thread-75491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:42:39.427 [DEBUG] [Thread-75491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:42:39.427 [DEBUG] [Thread-75491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:42:39.427 [DEBUG] [Thread-75491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:42:39.441 [INFO] [Thread-75491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:42:39.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:42:39.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:42:40.270 [DEBUG] [Thread-75491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:42:40.270 [DEBUG] [Thread-75491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:42:40.318 [DEBUG] [Thread-75491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:42:40.318 [DEBUG] [Thread-75491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:42:40.327 [DEBUG] [Thread-75491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:42:40.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:42:40.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:42:40.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:42:40.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:42:40.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:42:40.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:42:40.358 [DEBUG] [Thread-75491] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:42:54.037 [DEBUG] [Thread-75493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:04.170 [DEBUG] [Thread-75494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:09.081 [DEBUG] [Thread-75495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:10.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:43:10.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:43:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:43:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 42, 49), 10.39, 48.92, 0.0, 38.08, 12.6, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:43:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:42:49
2025-12-12T19:43:11.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:43:11.337 [DEBUG] [Thread-75496] [transport.py] [_log()] starting thread (client mode): 0xf574c4c0
2025-12-12T19:43:11.337 [DEBUG] [Thread-75496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:43:11.353 [DEBUG] [Thread-75496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:43:11.354 [INFO] [Thread-75496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] client lang: <none>
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] server lang: <none>
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] kex follows: False
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] Compression: none
2025-12-12T19:43:11.357 [DEBUG] [Thread-75496] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:43:11.375 [DEBUG] [Thread-75496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:43:11.375 [DEBUG] [Thread-75496] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:43:11.376 [DEBUG] [Thread-75496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:43:11.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:43:11.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:43:11.378 [DEBUG] [Thread-75496] [transport.py] [_log()] userauth is OK
2025-12-12T19:43:11.378 [DEBUG] [Thread-75496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:43:11.378 [DEBUG] [Thread-75496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:43:11.378 [DEBUG] [Thread-75496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:43:11.378 [DEBUG] [Thread-75496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:43:11.405 [INFO] [Thread-75496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:43:11.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:43:12.011 [DEBUG] [Thread-75496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:43:12.012 [DEBUG] [Thread-75496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:43:12.012 [DEBUG] [Thread-75496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:43:12.054 [DEBUG] [Thread-75496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:43:12.054 [DEBUG] [Thread-75496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:43:12.056 [DEBUG] [Thread-75496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:43:12.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:43:12.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:43:12.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:43:12.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:43:12.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:43:12.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:43:12.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:43:12.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:43:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:43:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.737949 -999.00  +12.50  34.79     53   +3.30 1 1 2 1 1   856    0 5.47 -169.09 ----- 31.6 34.8 322.8 42.0 13.2 -24.7 13.2 -24.4 12.8 -22.5 13.1 -23.5
2025-12-12T19:43:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:43:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:43:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.737949
2025-12-12T19:43:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:43:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:43:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:43:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:43:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:43:12.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:42:49', tmtdew=10.39, humidity=48.92, cloud=0.0, wind=38.08, temperature=12.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:42:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:43:12.088 [DEBUG] [Thread-75496] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:43:12.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:43:12.184 [DEBUG] [Thread-75499] [transport.py] [_log()] starting thread (client mode): 0xf5797460
2025-12-12T19:43:12.184 [DEBUG] [Thread-75499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:43:12.199 [DEBUG] [Thread-75499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:43:12.200 [INFO] [Thread-75499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:12.207 [DEBUG] [Thread-75499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] client lang: <none>
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] server lang: <none>
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] kex follows: False
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] Compression: none
2025-12-12T19:43:12.208 [DEBUG] [Thread-75499] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:43:12.269 [DEBUG] [Thread-75499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:43:12.270 [DEBUG] [Thread-75499] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:43:12.270 [DEBUG] [Thread-75499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:43:12.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:43:12.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:43:12.327 [DEBUG] [Thread-75499] [transport.py] [_log()] userauth is OK
2025-12-12T19:43:12.327 [DEBUG] [Thread-75499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:43:12.327 [DEBUG] [Thread-75499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:43:12.327 [DEBUG] [Thread-75499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:43:12.327 [DEBUG] [Thread-75499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:43:12.346 [INFO] [Thread-75499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:43:12.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:43:12.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:43:13.185 [DEBUG] [Thread-75499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:43:13.185 [DEBUG] [Thread-75499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:43:13.233 [DEBUG] [Thread-75499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:43:13.233 [DEBUG] [Thread-75499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:43:13.242 [DEBUG] [Thread-75499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:43:13.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:43:13.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:43:13.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:43:13.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:43:13.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:43:13.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:43:13.276 [DEBUG] [Thread-75499] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:43:24.106 [DEBUG] [Thread-75501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:30.074 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:30.076 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:39.152 [DEBUG] [Thread-75502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:43:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:43:43.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:43:43.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:43:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 43, 22), 10.36, 49.02, 0.0, 36.79, 12.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:43:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:43:22
2025-12-12T19:43:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:43:44.248 [DEBUG] [Thread-75503] [transport.py] [_log()] starting thread (client mode): 0xf5770760
2025-12-12T19:43:44.248 [DEBUG] [Thread-75503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:43:44.269 [DEBUG] [Thread-75503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:43:44.269 [INFO] [Thread-75503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:43:44.271 [DEBUG] [Thread-75503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:43:44.271 [DEBUG] [Thread-75503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] client lang: <none>
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] server lang: <none>
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] kex follows: False
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:43:44.272 [DEBUG] [Thread-75503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:43:44.273 [DEBUG] [Thread-75503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:43:44.273 [DEBUG] [Thread-75503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:43:44.273 [DEBUG] [Thread-75503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:43:44.273 [DEBUG] [Thread-75503] [transport.py] [_log()] Compression: none
2025-12-12T19:43:44.273 [DEBUG] [Thread-75503] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:43:44.292 [DEBUG] [Thread-75503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:43:44.293 [DEBUG] [Thread-75503] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:43:44.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:43:44.294 [DEBUG] [Thread-75503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:43:44.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:43:44.296 [DEBUG] [Thread-75503] [transport.py] [_log()] userauth is OK
2025-12-12T19:43:44.296 [DEBUG] [Thread-75503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:43:44.296 [DEBUG] [Thread-75503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:43:44.296 [DEBUG] [Thread-75503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:43:44.296 [DEBUG] [Thread-75503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:43:44.321 [INFO] [Thread-75503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:43:44.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:43:45.022 [DEBUG] [Thread-75503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:43:45.023 [DEBUG] [Thread-75503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:43:45.023 [DEBUG] [Thread-75503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:43:45.064 [DEBUG] [Thread-75503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:43:45.064 [DEBUG] [Thread-75503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:43:45.067 [DEBUG] [Thread-75503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:43:45.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:43:45.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:43:45.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:43:45.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:43:45.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:43:45.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:43:45.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:43:45.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:43:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:43:45.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.738297 -999.00  +12.50  33.13     53   +3.40 1 1 2 1 1   853    0 5.40 -166.89 ----- 34.4 33.1 325.6 41.5 13.2 -24.7 13.2 -24.3 12.9 -22.6 13.1 -23.8
2025-12-12T19:43:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:43:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:43:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.738297
2025-12-12T19:43:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:43:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:43:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:43:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:43:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:43:45.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:43:22', tmtdew=10.36, humidity=49.02, cloud=0.0, wind=36.79, temperature=12.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:43:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:43:45.100 [DEBUG] [Thread-75503] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:43:45.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:43:45.189 [DEBUG] [Thread-75506] [transport.py] [_log()] starting thread (client mode): 0xf813e320
2025-12-12T19:43:45.190 [DEBUG] [Thread-75506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:43:45.204 [DEBUG] [Thread-75506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:43:45.204 [INFO] [Thread-75506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] client lang: <none>
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] server lang: <none>
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] kex follows: False
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:43:45.212 [DEBUG] [Thread-75506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:43:45.213 [DEBUG] [Thread-75506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:43:45.213 [DEBUG] [Thread-75506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:43:45.213 [DEBUG] [Thread-75506] [transport.py] [_log()] Compression: none
2025-12-12T19:43:45.213 [DEBUG] [Thread-75506] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:43:45.270 [DEBUG] [Thread-75506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:43:45.270 [DEBUG] [Thread-75506] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:43:45.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:43:45.271 [DEBUG] [Thread-75506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:43:45.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:43:45.326 [DEBUG] [Thread-75506] [transport.py] [_log()] userauth is OK
2025-12-12T19:43:45.326 [DEBUG] [Thread-75506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:43:45.327 [DEBUG] [Thread-75506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:43:45.327 [DEBUG] [Thread-75506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:43:45.327 [DEBUG] [Thread-75506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:43:45.345 [INFO] [Thread-75506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:43:45.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:43:45.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:43:46.188 [DEBUG] [Thread-75506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:43:46.188 [DEBUG] [Thread-75506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:43:46.236 [DEBUG] [Thread-75506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:43:46.236 [DEBUG] [Thread-75506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:43:46.245 [DEBUG] [Thread-75506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:43:46.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:43:46.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:43:46.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:43:46.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:43:46.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:43:46.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:43:46.279 [DEBUG] [Thread-75506] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:43:54.181 [DEBUG] [Thread-75508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:04.247 [DEBUG] [Thread-75509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:09.229 [DEBUG] [Thread-75510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:16.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:44:16.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:44:16.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:44:16.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 43, 54), 10.29, 49.6, 0.0, 40.35, 12.53, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:44:16.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:43:54
2025-12-12T19:44:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:44:17.256 [DEBUG] [Thread-75511] [transport.py] [_log()] starting thread (client mode): 0xf5797c40
2025-12-12T19:44:17.256 [DEBUG] [Thread-75511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:44:17.277 [DEBUG] [Thread-75511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:44:17.277 [INFO] [Thread-75511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:44:17.280 [DEBUG] [Thread-75511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:44:17.280 [DEBUG] [Thread-75511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:44:17.280 [DEBUG] [Thread-75511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:44:17.280 [DEBUG] [Thread-75511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:17.280 [DEBUG] [Thread-75511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:17.280 [DEBUG] [Thread-75511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] client lang: <none>
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] server lang: <none>
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] kex follows: False
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] Compression: none
2025-12-12T19:44:17.281 [DEBUG] [Thread-75511] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:44:17.300 [DEBUG] [Thread-75511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:44:17.301 [DEBUG] [Thread-75511] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:44:17.301 [DEBUG] [Thread-75511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:44:17.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:44:17.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:44:17.303 [DEBUG] [Thread-75511] [transport.py] [_log()] userauth is OK
2025-12-12T19:44:17.304 [DEBUG] [Thread-75511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:44:17.304 [DEBUG] [Thread-75511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:44:17.304 [DEBUG] [Thread-75511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:44:17.304 [DEBUG] [Thread-75511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:44:17.339 [INFO] [Thread-75511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:44:17.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:44:17.967 [DEBUG] [Thread-75511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:44:17.967 [DEBUG] [Thread-75511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:44:17.967 [DEBUG] [Thread-75511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:44:18.008 [DEBUG] [Thread-75511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:44:18.008 [DEBUG] [Thread-75511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:44:18.011 [DEBUG] [Thread-75511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:44:18.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:44:18.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:44:18.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:44:18.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:44:18.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:44:18.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:44:18.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:44:18.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:44:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:44:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.738644 -999.00  +12.40  37.90     54   +3.30 1 1 2 1 1   850    0 5.39 -170.05 ----- 30.8 37.9 312.0 45.6 13.2 -24.8 13.1 -24.5 12.8 -22.7 13.1 -23.6
2025-12-12T19:44:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:44:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:44:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.738644
2025-12-12T19:44:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:44:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:44:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:44:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:44:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:44:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:43:54', tmtdew=10.29, humidity=49.6, cloud=0.0, wind=40.35, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:43:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:44:18.037 [DEBUG] [Thread-75511] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:44:18.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:44:18.135 [DEBUG] [Thread-75514] [transport.py] [_log()] starting thread (client mode): 0xf57700a0
2025-12-12T19:44:18.135 [DEBUG] [Thread-75514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:44:18.150 [DEBUG] [Thread-75514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:44:18.150 [INFO] [Thread-75514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:44:18.158 [DEBUG] [Thread-75514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:44:18.158 [DEBUG] [Thread-75514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:44:18.158 [DEBUG] [Thread-75514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:44:18.158 [DEBUG] [Thread-75514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:18.158 [DEBUG] [Thread-75514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:18.158 [DEBUG] [Thread-75514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] client lang: <none>
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] server lang: <none>
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] kex follows: False
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:44:18.159 [DEBUG] [Thread-75514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:44:18.160 [DEBUG] [Thread-75514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:44:18.160 [DEBUG] [Thread-75514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:44:18.160 [DEBUG] [Thread-75514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:44:18.160 [DEBUG] [Thread-75514] [transport.py] [_log()] Compression: none
2025-12-12T19:44:18.160 [DEBUG] [Thread-75514] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:44:18.219 [DEBUG] [Thread-75514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:44:18.219 [DEBUG] [Thread-75514] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:44:18.220 [DEBUG] [Thread-75514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:44:18.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:44:18.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:44:18.276 [DEBUG] [Thread-75514] [transport.py] [_log()] userauth is OK
2025-12-12T19:44:18.276 [DEBUG] [Thread-75514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:44:18.276 [DEBUG] [Thread-75514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:44:18.277 [DEBUG] [Thread-75514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:44:18.277 [DEBUG] [Thread-75514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:44:18.296 [INFO] [Thread-75514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:44:18.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:44:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:44:19.135 [DEBUG] [Thread-75514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:44:19.135 [DEBUG] [Thread-75514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:44:19.184 [DEBUG] [Thread-75514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:44:19.184 [DEBUG] [Thread-75514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:44:19.193 [DEBUG] [Thread-75514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:44:19.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:44:19.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:44:19.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:44:19.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:44:19.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:44:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:44:19.227 [DEBUG] [Thread-75514] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:44:24.258 [DEBUG] [Thread-75516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:36.259 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:36.260 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:39.308 [DEBUG] [Thread-75517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:44:49.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:44:49.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:44:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:44:49.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 44, 26), 10.18, 49.97, 0.0, 40.95, 12.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:44:49.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:44:26
2025-12-12T19:44:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:44:50.205 [DEBUG] [Thread-75518] [transport.py] [_log()] starting thread (client mode): 0xf574f6a0
2025-12-12T19:44:50.205 [DEBUG] [Thread-75518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:44:50.226 [DEBUG] [Thread-75518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:44:50.226 [INFO] [Thread-75518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:44:50.229 [DEBUG] [Thread-75518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:44:50.229 [DEBUG] [Thread-75518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:44:50.229 [DEBUG] [Thread-75518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:44:50.229 [DEBUG] [Thread-75518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:50.229 [DEBUG] [Thread-75518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:50.229 [DEBUG] [Thread-75518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] client lang: <none>
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] server lang: <none>
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] kex follows: False
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] Compression: none
2025-12-12T19:44:50.230 [DEBUG] [Thread-75518] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:44:50.247 [DEBUG] [Thread-75518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:44:50.247 [DEBUG] [Thread-75518] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:44:50.248 [DEBUG] [Thread-75518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:44:50.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:44:50.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:44:50.250 [DEBUG] [Thread-75518] [transport.py] [_log()] userauth is OK
2025-12-12T19:44:50.250 [DEBUG] [Thread-75518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:44:50.250 [DEBUG] [Thread-75518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:44:50.250 [DEBUG] [Thread-75518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:44:50.250 [DEBUG] [Thread-75518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:44:50.267 [INFO] [Thread-75518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:44:50.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:44:51.001 [DEBUG] [Thread-75518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:44:51.001 [DEBUG] [Thread-75518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:44:51.002 [DEBUG] [Thread-75518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:44:51.042 [DEBUG] [Thread-75518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:44:51.042 [DEBUG] [Thread-75518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:44:51.044 [DEBUG] [Thread-75518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:44:51.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:44:51.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:44:51.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:44:51.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:44:51.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:44:51.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:44:51.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:44:51.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:44:51.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:44:51.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.738991 -999.00  +12.40  28.22     54   +3.40 1 1 1 1 1   847    0 5.44 -166.87 ----- 29.9 28.2 310.1 45.3 13.2 -24.7 13.1 -24.3 12.8 -22.6 13.1 -23.4
2025-12-12T19:44:51.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:44:51.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:44:51.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.738991
2025-12-12T19:44:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:44:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:44:51.067 [DEBUG] [Thread-75518] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:44:51.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:44:51.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:44:51.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:44:51.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:44:26', tmtdew=10.18, humidity=49.97, cloud=0.0, wind=40.95, temperature=12.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:44:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:44:51.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:44:51.160 [DEBUG] [Thread-75521] [transport.py] [_log()] starting thread (client mode): 0xf5701300
2025-12-12T19:44:51.160 [DEBUG] [Thread-75521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:44:51.175 [DEBUG] [Thread-75521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:44:51.175 [INFO] [Thread-75521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:44:51.182 [DEBUG] [Thread-75521] [transport.py] [_log()] client lang: <none>
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] server lang: <none>
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] kex follows: False
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] Compression: none
2025-12-12T19:44:51.183 [DEBUG] [Thread-75521] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:44:51.245 [DEBUG] [Thread-75521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:44:51.246 [DEBUG] [Thread-75521] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:44:51.246 [DEBUG] [Thread-75521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:44:51.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:44:51.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:44:51.302 [DEBUG] [Thread-75521] [transport.py] [_log()] userauth is OK
2025-12-12T19:44:51.302 [DEBUG] [Thread-75521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:44:51.302 [DEBUG] [Thread-75521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:44:51.302 [DEBUG] [Thread-75521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:44:51.302 [DEBUG] [Thread-75521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:44:51.325 [INFO] [Thread-75521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:44:51.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:44:51.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:44:52.133 [DEBUG] [Thread-75521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:44:52.134 [DEBUG] [Thread-75521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:44:52.182 [DEBUG] [Thread-75521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:44:52.182 [DEBUG] [Thread-75521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:44:52.191 [DEBUG] [Thread-75521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:44:52.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:44:52.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:44:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:44:52.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:44:52.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:44:52.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:44:52.226 [DEBUG] [Thread-75521] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:44:54.339 [DEBUG] [Thread-75523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:04.333 [DEBUG] [Thread-75524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:09.383 [DEBUG] [Thread-75525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:22.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:45:22.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:45:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:45:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 44, 58), 10.03, 50.17, 0.0, 40.11, 12.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:45:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:44:58
2025-12-12T19:45:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:45:23.192 [DEBUG] [Thread-75526] [transport.py] [_log()] starting thread (client mode): 0xf5795a80
2025-12-12T19:45:23.192 [DEBUG] [Thread-75526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:45:23.212 [DEBUG] [Thread-75526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:45:23.212 [INFO] [Thread-75526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:23.215 [DEBUG] [Thread-75526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] client lang: <none>
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] server lang: <none>
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] kex follows: False
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] Compression: none
2025-12-12T19:45:23.216 [DEBUG] [Thread-75526] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:45:23.235 [DEBUG] [Thread-75526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:45:23.236 [DEBUG] [Thread-75526] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:45:23.236 [DEBUG] [Thread-75526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:45:23.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:45:23.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:45:23.238 [DEBUG] [Thread-75526] [transport.py] [_log()] userauth is OK
2025-12-12T19:45:23.238 [DEBUG] [Thread-75526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:45:23.238 [DEBUG] [Thread-75526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:45:23.239 [DEBUG] [Thread-75526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:45:23.239 [DEBUG] [Thread-75526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:45:23.263 [INFO] [Thread-75526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:45:23.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:45:23.920 [DEBUG] [Thread-75526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:45:23.920 [DEBUG] [Thread-75526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:45:23.921 [DEBUG] [Thread-75526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:45:23.961 [DEBUG] [Thread-75526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:45:23.961 [DEBUG] [Thread-75526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:45:23.964 [DEBUG] [Thread-75526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:45:23.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:45:23.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:45:23.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:45:23.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:45:23.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:45:23.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:45:23.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:45:23.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:45:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:45:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.739338 -999.00  +12.30  48.58     55   +3.50 1 1 2 1 1   843    0 5.49 -162.06 ----- 47.0 48.6 311.4 50.8 13.2 -24.8 13.1 -24.5 12.8 -22.6 13.1 -23.5
2025-12-12T19:45:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:45:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:45:23.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.739338
2025-12-12T19:45:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:45:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:45:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:45:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:45:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:45:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:44:58', tmtdew=10.03, humidity=50.17, cloud=0.0, wind=40.11, temperature=12.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:44:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:45:23.993 [DEBUG] [Thread-75526] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:45:24.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:45:24.089 [DEBUG] [Thread-75529] [transport.py] [_log()] starting thread (client mode): 0xf5797610
2025-12-12T19:45:24.089 [DEBUG] [Thread-75529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:45:24.105 [DEBUG] [Thread-75529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:45:24.105 [INFO] [Thread-75529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:45:24.112 [DEBUG] [Thread-75529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:45:24.112 [DEBUG] [Thread-75529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:45:24.112 [DEBUG] [Thread-75529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:45:24.112 [DEBUG] [Thread-75529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] client lang: <none>
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] server lang: <none>
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] kex follows: False
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] Compression: none
2025-12-12T19:45:24.113 [DEBUG] [Thread-75529] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:45:24.169 [DEBUG] [Thread-75529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:45:24.170 [DEBUG] [Thread-75529] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:45:24.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:45:24.171 [DEBUG] [Thread-75529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:45:24.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:45:24.230 [DEBUG] [Thread-75529] [transport.py] [_log()] userauth is OK
2025-12-12T19:45:24.231 [DEBUG] [Thread-75529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:45:24.231 [DEBUG] [Thread-75529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:45:24.231 [DEBUG] [Thread-75529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:45:24.231 [DEBUG] [Thread-75529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:45:24.254 [INFO] [Thread-75529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:45:24.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:45:24.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:45:24.414 [DEBUG] [Thread-75531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:25.104 [DEBUG] [Thread-75529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:45:25.104 [DEBUG] [Thread-75529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:45:25.152 [DEBUG] [Thread-75529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:45:25.152 [DEBUG] [Thread-75529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:45:25.161 [DEBUG] [Thread-75529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:45:25.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:45:25.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:45:25.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:45:25.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:45:25.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:45:25.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:45:25.194 [DEBUG] [Thread-75529] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:45:39.457 [DEBUG] [Thread-75532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:41.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:41.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:54.484 [DEBUG] [Thread-75533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:45:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:45:55.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:45:55.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
2025-12-12T19:45:55.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 45, 30), 9.97, 50.37, 0.0, 43.74, 12.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:45:55.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:45:30
2025-12-12T19:45:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:45:56.193 [DEBUG] [Thread-75534] [transport.py] [_log()] starting thread (client mode): 0xfabc6f20
2025-12-12T19:45:56.193 [DEBUG] [Thread-75534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:45:56.213 [DEBUG] [Thread-75534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:45:56.213 [INFO] [Thread-75534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] client lang: <none>
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] server lang: <none>
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] kex follows: False
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] Compression: none
2025-12-12T19:45:56.217 [DEBUG] [Thread-75534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:45:56.236 [DEBUG] [Thread-75534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:45:56.236 [DEBUG] [Thread-75534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:45:56.237 [DEBUG] [Thread-75534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:45:56.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:45:56.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:45:56.237 [DEBUG] [Thread-75534] [transport.py] [_log()] userauth is OK
2025-12-12T19:45:56.237 [DEBUG] [Thread-75534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:45:56.237 [DEBUG] [Thread-75534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:45:56.237 [DEBUG] [Thread-75534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:45:56.238 [DEBUG] [Thread-75534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:45:56.257 [INFO] [Thread-75534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:45:56.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:45:57.028 [DEBUG] [Thread-75534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:45:57.028 [DEBUG] [Thread-75534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:45:57.029 [DEBUG] [Thread-75534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:45:57.069 [DEBUG] [Thread-75534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:45:57.069 [DEBUG] [Thread-75534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:45:57.071 [DEBUG] [Thread-75534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:45:57.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:45:57.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:45:57.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:45:57.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:45:57.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:45:57.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:45:57.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:45:57.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:45:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:45:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.740033 -999.00  +12.20  38.66     55   +3.60 1 1 2 1 1   834    0 5.18 -168.37 ----- 33.3 38.7 310.4 45.7 13.1 -24.9 13.1 -24.5 12.7 -22.9 13.0 -23.4
2025-12-12T19:45:57.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:45:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:45:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.740033
2025-12-12T19:45:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:45:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:45:57.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:45:57.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:45:57.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:45:57.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:45:30', tmtdew=9.97, humidity=50.37, cloud=0.0, wind=43.74, temperature=12.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:45:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:45:57.095 [DEBUG] [Thread-75534] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:45:57.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:45:57.193 [DEBUG] [Thread-75537] [transport.py] [_log()] starting thread (client mode): 0xf575e800
2025-12-12T19:45:57.193 [DEBUG] [Thread-75537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:45:57.208 [DEBUG] [Thread-75537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:45:57.209 [INFO] [Thread-75537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:45:57.216 [DEBUG] [Thread-75537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:45:57.216 [DEBUG] [Thread-75537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:45:57.216 [DEBUG] [Thread-75537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:45:57.216 [DEBUG] [Thread-75537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:57.216 [DEBUG] [Thread-75537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] client lang: <none>
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] server lang: <none>
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] kex follows: False
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] Compression: none
2025-12-12T19:45:57.217 [DEBUG] [Thread-75537] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:45:57.273 [DEBUG] [Thread-75537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:45:57.274 [DEBUG] [Thread-75537] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:45:57.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:45:57.274 [DEBUG] [Thread-75537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:45:57.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:45:57.330 [DEBUG] [Thread-75537] [transport.py] [_log()] userauth is OK
2025-12-12T19:45:57.330 [DEBUG] [Thread-75537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:45:57.330 [DEBUG] [Thread-75537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:45:57.330 [DEBUG] [Thread-75537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:45:57.330 [DEBUG] [Thread-75537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:45:57.350 [INFO] [Thread-75537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:45:57.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:45:57.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:45:58.187 [DEBUG] [Thread-75537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:45:58.187 [DEBUG] [Thread-75537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:45:58.236 [DEBUG] [Thread-75537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:45:58.236 [DEBUG] [Thread-75537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:45:58.245 [DEBUG] [Thread-75537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:45:58.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:45:58.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:45:58.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:45:58.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:45:58.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:45:58.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:45:58.278 [DEBUG] [Thread-75537] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:46:04.404 [DEBUG] [Thread-75539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:46:09.513 [DEBUG] [Thread-75540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:46:24.558 [DEBUG] [Thread-75541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:46:28.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:46:28.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:46:28.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:46:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 46, 2), 9.94, 50.45, 0.0, 41.11, 12.41, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:46:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:46:02
2025-12-12T19:46:29.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:46:29.271 [DEBUG] [Thread-75542] [transport.py] [_log()] starting thread (client mode): 0xf5795b70
2025-12-12T19:46:29.271 [DEBUG] [Thread-75542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:46:29.291 [DEBUG] [Thread-75542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:46:29.291 [INFO] [Thread-75542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] client lang: <none>
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] server lang: <none>
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] kex follows: False
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:46:29.294 [DEBUG] [Thread-75542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:46:29.295 [DEBUG] [Thread-75542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:46:29.295 [DEBUG] [Thread-75542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:46:29.295 [DEBUG] [Thread-75542] [transport.py] [_log()] Compression: none
2025-12-12T19:46:29.295 [DEBUG] [Thread-75542] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:46:29.308 [DEBUG] [Thread-75542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:46:29.308 [DEBUG] [Thread-75542] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:46:29.309 [DEBUG] [Thread-75542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:46:29.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:46:29.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:46:29.310 [DEBUG] [Thread-75542] [transport.py] [_log()] userauth is OK
2025-12-12T19:46:29.310 [DEBUG] [Thread-75542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:46:29.310 [DEBUG] [Thread-75542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:46:29.310 [DEBUG] [Thread-75542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:46:29.310 [DEBUG] [Thread-75542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:46:29.340 [INFO] [Thread-75542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:46:29.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:46:29.966 [DEBUG] [Thread-75542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:46:29.966 [DEBUG] [Thread-75542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:46:29.966 [DEBUG] [Thread-75542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:46:30.007 [DEBUG] [Thread-75542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:46:30.007 [DEBUG] [Thread-75542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:46:30.009 [DEBUG] [Thread-75542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:46:30.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:46:30.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:46:30.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:46:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:46:30.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:46:30.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:46:30.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.740380 -999.00  +12.10  43.18     56   +3.60 1 1 2 1 1   830    0 4.99 -177.77 ----- 39.6 43.2 310.2 49.5 13.1 -24.7 12.9 -24.5 12.7 -22.6 12.9 -23.4
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.740380
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:46:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:46:02', tmtdew=9.94, humidity=50.45, cloud=0.0, wind=41.11, temperature=12.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:46:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:46:30.030 [DEBUG] [Thread-75542] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:46:30.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:46:30.115 [DEBUG] [Thread-75545] [transport.py] [_log()] starting thread (client mode): 0xf5797880
2025-12-12T19:46:30.115 [DEBUG] [Thread-75545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:46:30.131 [DEBUG] [Thread-75545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:46:30.131 [INFO] [Thread-75545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] client lang: <none>
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] server lang: <none>
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] kex follows: False
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] Compression: none
2025-12-12T19:46:30.139 [DEBUG] [Thread-75545] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:46:30.200 [DEBUG] [Thread-75545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:46:30.200 [DEBUG] [Thread-75545] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:46:30.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:46:30.200 [DEBUG] [Thread-75545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:46:30.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:46:30.259 [DEBUG] [Thread-75545] [transport.py] [_log()] userauth is OK
2025-12-12T19:46:30.259 [DEBUG] [Thread-75545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:46:30.259 [DEBUG] [Thread-75545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:46:30.259 [DEBUG] [Thread-75545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:46:30.259 [DEBUG] [Thread-75545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:46:30.273 [INFO] [Thread-75545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:46:30.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:46:30.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:46:31.117 [DEBUG] [Thread-75545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:46:31.117 [DEBUG] [Thread-75545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:46:31.164 [DEBUG] [Thread-75545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:46:31.164 [DEBUG] [Thread-75545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:46:31.173 [DEBUG] [Thread-75545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:46:31.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:46: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')
2025-12-12T19:46:31.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
2025-12-12T19:46:31.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:46:31.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:46:31.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:46:31.205 [DEBUG] [Thread-75545] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:46:39.587 [DEBUG] [Thread-75547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:46:46.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:46:46.718 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:46:54.642 [DEBUG] [Thread-75548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:47:01.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:47:01.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:47:01.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 46, 34), 9.75, 51.43, 0.0, 35.06, 12.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:47:01.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:46:34
2025-12-12T19:47:02.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:47:02.197 [DEBUG] [Thread-75549] [transport.py] [_log()] starting thread (client mode): 0xf574e500
2025-12-12T19:47:02.197 [DEBUG] [Thread-75549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:47:02.217 [DEBUG] [Thread-75549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:47:02.217 [INFO] [Thread-75549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:47:02.218 [DEBUG] [Thread-75549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:47:02.218 [DEBUG] [Thread-75549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:47:02.218 [DEBUG] [Thread-75549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:47:02.218 [DEBUG] [Thread-75549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] client lang: <none>
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] server lang: <none>
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] kex follows: False
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] Compression: none
2025-12-12T19:47:02.219 [DEBUG] [Thread-75549] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:47:02.232 [DEBUG] [Thread-75549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:47:02.232 [DEBUG] [Thread-75549] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:47:02.233 [DEBUG] [Thread-75549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:47:02.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:47:02.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:47:02.235 [DEBUG] [Thread-75549] [transport.py] [_log()] userauth is OK
2025-12-12T19:47:02.235 [DEBUG] [Thread-75549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:47:02.235 [DEBUG] [Thread-75549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:47:02.235 [DEBUG] [Thread-75549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:47:02.235 [DEBUG] [Thread-75549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:47:02.258 [INFO] [Thread-75549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:47:02.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:47:03.013 [DEBUG] [Thread-75549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:47:03.013 [DEBUG] [Thread-75549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:47:03.013 [DEBUG] [Thread-75549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:47:03.054 [DEBUG] [Thread-75549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:47:03.054 [DEBUG] [Thread-75549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:47:03.057 [DEBUG] [Thread-75549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:47:03.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:47:03.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:47:03.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:47:03.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:47:03.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:47:03.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:47:03.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:47:03.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:47:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:47:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.740727 -999.00  +12.10  33.57     56   +3.60 1 1 2 1 1   824    0 5.14 -170.52 ----- 34.2 33.6 317.4 44.4 13.0 -24.7 12.9 -24.4 12.6 -22.7 12.9 -23.5
2025-12-12T19:47:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:47:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:47:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.740727
2025-12-12T19:47:03.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:47:03.083 [DEBUG] [Thread-75549] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:47:03.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:47:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:47:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:47:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:47:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:46:34', tmtdew=9.75, humidity=51.43, cloud=0.0, wind=35.06, temperature=12.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:46:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:47:03.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:47:03.188 [DEBUG] [Thread-75552] [transport.py] [_log()] starting thread (client mode): 0xf578b1c0
2025-12-12T19:47:03.189 [DEBUG] [Thread-75552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:47:03.202 [DEBUG] [Thread-75552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:47:03.203 [INFO] [Thread-75552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:47:03.210 [DEBUG] [Thread-75552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:47:03.211 [DEBUG] [Thread-75552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] client lang: <none>
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] server lang: <none>
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] kex follows: False
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] Compression: none
2025-12-12T19:47:03.212 [DEBUG] [Thread-75552] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:47:03.267 [DEBUG] [Thread-75552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:47:03.267 [DEBUG] [Thread-75552] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:47:03.267 [DEBUG] [Thread-75552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:47:03.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:47:03.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:47:03.328 [DEBUG] [Thread-75552] [transport.py] [_log()] userauth is OK
2025-12-12T19:47:03.328 [DEBUG] [Thread-75552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:47:03.328 [DEBUG] [Thread-75552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:47:03.328 [DEBUG] [Thread-75552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:47:03.328 [DEBUG] [Thread-75552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:47:03.348 [INFO] [Thread-75552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:47:03.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:47:03.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:47:04.167 [DEBUG] [Thread-75552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:47:04.168 [DEBUG] [Thread-75552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:47:04.216 [DEBUG] [Thread-75552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:47:04.216 [DEBUG] [Thread-75552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:47:04.227 [DEBUG] [Thread-75552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:47:04.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:47:04.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:47:04.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:47:04.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:47:04.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:47:04.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:47:04.266 [DEBUG] [Thread-75552] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:47:04.484 [DEBUG] [Thread-75554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:09.669 [DEBUG] [Thread-75555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:24.703 [DEBUG] [Thread-75556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:47:34.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:47:34.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:47:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 47, 6), 9.76, 51.38, 0.0, 36.21, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:47:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:47:06
2025-12-12T19:47:35.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:47:35.232 [DEBUG] [Thread-75557] [transport.py] [_log()] starting thread (client mode): 0xf574cc70
2025-12-12T19:47:35.232 [DEBUG] [Thread-75557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:47:35.252 [DEBUG] [Thread-75557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:47:35.252 [INFO] [Thread-75557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:47:35.255 [DEBUG] [Thread-75557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:47:35.255 [DEBUG] [Thread-75557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:47:35.255 [DEBUG] [Thread-75557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] client lang: <none>
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] server lang: <none>
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] kex follows: False
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] Compression: none
2025-12-12T19:47:35.256 [DEBUG] [Thread-75557] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:47:35.273 [DEBUG] [Thread-75557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:47:35.273 [DEBUG] [Thread-75557] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:47:35.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:47:35.274 [DEBUG] [Thread-75557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:47:35.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:47:35.276 [DEBUG] [Thread-75557] [transport.py] [_log()] userauth is OK
2025-12-12T19:47:35.277 [DEBUG] [Thread-75557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:47:35.277 [DEBUG] [Thread-75557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:47:35.277 [DEBUG] [Thread-75557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:47:35.277 [DEBUG] [Thread-75557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:47:35.300 [INFO] [Thread-75557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:47:35.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:47:35.945 [DEBUG] [Thread-75557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:47:35.945 [DEBUG] [Thread-75557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:47:35.945 [DEBUG] [Thread-75557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:47:35.986 [DEBUG] [Thread-75557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:47:35.986 [DEBUG] [Thread-75557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:47:35.989 [DEBUG] [Thread-75557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:47:36.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:47:36.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:47:36.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:47:36.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:47:36.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:47:36.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:47:36.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:47:36.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:47:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:47:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.741074 -999.00  +12.20  32.04     55   +3.60 1 1 2 1 1   819    0 4.71 -181.96 ----- 33.8 32.0 315.4 43.5 13.0 -24.7 12.9 -24.4 12.6 -22.5 12.9 -23.4
2025-12-12T19:47:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:47:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:47:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.741074
2025-12-12T19:47:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:47:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:47:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:47:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:47:36.015 [DEBUG] [Thread-75557] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:47:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:47:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:47:06', tmtdew=9.76, humidity=51.38, cloud=0.0, wind=36.21, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:47:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:47:36.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:47:36.112 [DEBUG] [Thread-75560] [transport.py] [_log()] starting thread (client mode): 0xf574f220
2025-12-12T19:47:36.112 [DEBUG] [Thread-75560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:47:36.126 [DEBUG] [Thread-75560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:47:36.126 [INFO] [Thread-75560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] client lang: <none>
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] server lang: <none>
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] kex follows: False
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:47:36.134 [DEBUG] [Thread-75560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:47:36.135 [DEBUG] [Thread-75560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:47:36.135 [DEBUG] [Thread-75560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:47:36.135 [DEBUG] [Thread-75560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:47:36.135 [DEBUG] [Thread-75560] [transport.py] [_log()] Compression: none
2025-12-12T19:47:36.135 [DEBUG] [Thread-75560] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:47:36.192 [DEBUG] [Thread-75560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:47:36.193 [DEBUG] [Thread-75560] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:47:36.193 [DEBUG] [Thread-75560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:47:36.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:47:36.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:47:36.248 [DEBUG] [Thread-75560] [transport.py] [_log()] userauth is OK
2025-12-12T19:47:36.248 [DEBUG] [Thread-75560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:47:36.249 [DEBUG] [Thread-75560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:47:36.249 [DEBUG] [Thread-75560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:47:36.249 [DEBUG] [Thread-75560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:47:36.267 [INFO] [Thread-75560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:47:36.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:47:36.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:47:37.113 [DEBUG] [Thread-75560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:47:37.113 [DEBUG] [Thread-75560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:47:37.161 [DEBUG] [Thread-75560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:47:37.161 [DEBUG] [Thread-75560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:47:37.170 [DEBUG] [Thread-75560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:47:37.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:47:37.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:47:37.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
2025-12-12T19:47:37.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:47:37.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:47:37.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:47:37.204 [DEBUG] [Thread-75560] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:47:39.730 [DEBUG] [Thread-75562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:54.766 [DEBUG] [Thread-75563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:55.315 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:47:55.316 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:04.570 [DEBUG] [Thread-75564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:48:07.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:48:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:48:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 47, 38), 9.69, 51.48, 0.0, 38.18, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:48:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:47:38
2025-12-12T19:48:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:48:08.180 [DEBUG] [Thread-75565] [transport.py] [_log()] starting thread (client mode): 0xf57952d0
2025-12-12T19:48:08.180 [DEBUG] [Thread-75565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:48:08.199 [DEBUG] [Thread-75565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:48:08.199 [INFO] [Thread-75565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:48:08.202 [DEBUG] [Thread-75565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] client lang: <none>
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] server lang: <none>
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] kex follows: False
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:48:08.203 [DEBUG] [Thread-75565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:48:08.204 [DEBUG] [Thread-75565] [transport.py] [_log()] Compression: none
2025-12-12T19:48:08.204 [DEBUG] [Thread-75565] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:48:08.221 [DEBUG] [Thread-75565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:48:08.221 [DEBUG] [Thread-75565] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:48:08.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:48:08.222 [DEBUG] [Thread-75565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:48:08.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:48:08.224 [DEBUG] [Thread-75565] [transport.py] [_log()] userauth is OK
2025-12-12T19:48:08.224 [DEBUG] [Thread-75565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:48:08.225 [DEBUG] [Thread-75565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:48:08.225 [DEBUG] [Thread-75565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:48:08.225 [DEBUG] [Thread-75565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:48:08.248 [INFO] [Thread-75565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:48:08.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:48:08.974 [DEBUG] [Thread-75565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:48:08.974 [DEBUG] [Thread-75565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:48:08.974 [DEBUG] [Thread-75565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:48:09.015 [DEBUG] [Thread-75565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:48:09.015 [DEBUG] [Thread-75565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:48:09.018 [DEBUG] [Thread-75565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:48:09.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:48:09.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:48:09.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:48:09.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:48:09.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:48:09.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:48:09.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:48:09.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:48:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:48:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.741421 -999.00  +12.10  40.91     56   +3.60 1 1 2 1 1   813    0 4.03 -194.47 ----- 45.7 40.9 309.0 55.0 13.0 -24.6 12.9 -24.5 12.6 -22.7 12.8 -23.3
2025-12-12T19:48:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:48:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:48:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.741421
2025-12-12T19:48:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:48:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:48:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:48:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:48:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:48:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:47:38', tmtdew=9.69, humidity=51.48, cloud=0.0, wind=38.18, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:47:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:48:09.044 [DEBUG] [Thread-75565] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:48:09.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:48:09.138 [DEBUG] [Thread-75568] [transport.py] [_log()] starting thread (client mode): 0xf813c820
2025-12-12T19:48:09.138 [DEBUG] [Thread-75568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:48:09.153 [DEBUG] [Thread-75568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:48:09.154 [INFO] [Thread-75568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:09.165 [DEBUG] [Thread-75568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] client lang: <none>
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] server lang: <none>
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] kex follows: False
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:48:09.166 [DEBUG] [Thread-75568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:48:09.167 [DEBUG] [Thread-75568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:48:09.167 [DEBUG] [Thread-75568] [transport.py] [_log()] Compression: none
2025-12-12T19:48:09.167 [DEBUG] [Thread-75568] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:48:09.220 [DEBUG] [Thread-75568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:48:09.221 [DEBUG] [Thread-75568] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:48:09.221 [DEBUG] [Thread-75568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:48:09.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:48:09.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:48:09.276 [DEBUG] [Thread-75568] [transport.py] [_log()] userauth is OK
2025-12-12T19:48:09.277 [DEBUG] [Thread-75568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:48:09.277 [DEBUG] [Thread-75568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:48:09.277 [DEBUG] [Thread-75568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:48:09.277 [DEBUG] [Thread-75568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:48:09.296 [INFO] [Thread-75568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:48:09.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:48:09.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:48:09.794 [DEBUG] [Thread-75570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:10.127 [DEBUG] [Thread-75568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:48:10.127 [DEBUG] [Thread-75568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:48:10.175 [DEBUG] [Thread-75568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:48:10.175 [DEBUG] [Thread-75568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:48:10.184 [DEBUG] [Thread-75568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:48:10.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:48:10.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:48:10.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:48:10.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:48:10.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:48:10.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:48:10.220 [DEBUG] [Thread-75568] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:48:24.846 [DEBUG] [Thread-75571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:39.876 [DEBUG] [Thread-75572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:40.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:48:40.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:48:40.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:48:40.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 48, 10), 9.66, 51.58, 0.0, 36.61, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:48:40.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:48:10
2025-12-12T19:48:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:48:41.163 [DEBUG] [Thread-75573] [transport.py] [_log()] starting thread (client mode): 0xfabc5cc0
2025-12-12T19:48:41.163 [DEBUG] [Thread-75573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:48:41.182 [DEBUG] [Thread-75573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:48:41.182 [INFO] [Thread-75573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] client lang: <none>
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] server lang: <none>
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] kex follows: False
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] Compression: none
2025-12-12T19:48:41.186 [DEBUG] [Thread-75573] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:48:41.202 [DEBUG] [Thread-75573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:48:41.203 [DEBUG] [Thread-75573] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:48:41.203 [DEBUG] [Thread-75573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:48:41.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:48:41.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:48:41.205 [DEBUG] [Thread-75573] [transport.py] [_log()] userauth is OK
2025-12-12T19:48:41.205 [DEBUG] [Thread-75573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:48:41.205 [DEBUG] [Thread-75573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:48:41.205 [DEBUG] [Thread-75573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:48:41.205 [DEBUG] [Thread-75573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:48:41.219 [INFO] [Thread-75573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:48:41.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:48:41.822 [DEBUG] [Thread-75573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:48:41.822 [DEBUG] [Thread-75573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:48:41.823 [DEBUG] [Thread-75573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:48:41.863 [DEBUG] [Thread-75573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:48:41.863 [DEBUG] [Thread-75573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:48:41.866 [DEBUG] [Thread-75573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:48:41.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:48:41.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:48:41.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:48:41.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:48:41.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:48:41.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:48:41.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:48:41.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:48:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:48:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.741769 -999.00  +12.20  38.34     56   +3.70 1 1 2 1 1   806    0 4.31 -187.15 ----- 35.9 38.3 312.6 43.0 12.9 -24.5 12.9 -24.4 12.5 -22.5 12.8 -23.6
2025-12-12T19:48:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:48:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:48:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.741769
2025-12-12T19:48:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:48:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:48:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:48:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:48:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:48:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:48:10', tmtdew=9.66, humidity=51.58, cloud=0.0, wind=36.61, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:48:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:48:41.891 [DEBUG] [Thread-75573] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:48:41.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:48:41.986 [DEBUG] [Thread-75576] [transport.py] [_log()] starting thread (client mode): 0xf81e5f90
2025-12-12T19:48:41.986 [DEBUG] [Thread-75576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:48:42.001 [DEBUG] [Thread-75576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:48:42.001 [INFO] [Thread-75576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:48:42.008 [DEBUG] [Thread-75576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:48:42.008 [DEBUG] [Thread-75576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:48:42.008 [DEBUG] [Thread-75576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:48:42.008 [DEBUG] [Thread-75576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:42.008 [DEBUG] [Thread-75576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:48:42.008 [DEBUG] [Thread-75576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] client lang: <none>
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] server lang: <none>
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] kex follows: False
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] Compression: none
2025-12-12T19:48:42.009 [DEBUG] [Thread-75576] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:48:42.068 [DEBUG] [Thread-75576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:48:42.068 [DEBUG] [Thread-75576] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:48:42.069 [DEBUG] [Thread-75576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:48:42.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:48:42.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:48:42.124 [DEBUG] [Thread-75576] [transport.py] [_log()] userauth is OK
2025-12-12T19:48:42.124 [DEBUG] [Thread-75576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:48:42.125 [DEBUG] [Thread-75576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:48:42.125 [DEBUG] [Thread-75576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:48:42.125 [DEBUG] [Thread-75576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:48:42.142 [INFO] [Thread-75576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:48:42.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:48:42.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:48:42.970 [DEBUG] [Thread-75576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:48:42.970 [DEBUG] [Thread-75576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:48:43.017 [DEBUG] [Thread-75576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:48:43.018 [DEBUG] [Thread-75576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:48:43.026 [DEBUG] [Thread-75576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:48:43.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:48: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')
2025-12-12T19:48:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:48:43.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:48:43.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:48:43.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:48:43.065 [DEBUG] [Thread-75576] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:48:54.906 [DEBUG] [Thread-75578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:59.948 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:48:59.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:49:04.638 [DEBUG] [Thread-75579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:49:09.952 [DEBUG] [Thread-75580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:49:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:49:13.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:49:13.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:49:13.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 48, 42), 9.63, 51.68, 0.0, 35.75, 12.27, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:49:13.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:48:42
2025-12-12T19:49:13.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:49:14.037 [DEBUG] [Thread-75581] [transport.py] [_log()] starting thread (client mode): 0xf81e5990
2025-12-12T19:49:14.037 [DEBUG] [Thread-75581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:49:14.058 [DEBUG] [Thread-75581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:49:14.058 [INFO] [Thread-75581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] client lang: <none>
2025-12-12T19:49:14.061 [DEBUG] [Thread-75581] [transport.py] [_log()] server lang: <none>
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] kex follows: False
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] Compression: none
2025-12-12T19:49:14.062 [DEBUG] [Thread-75581] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:49:14.080 [DEBUG] [Thread-75581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:49:14.081 [DEBUG] [Thread-75581] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:49:14.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:49:14.082 [DEBUG] [Thread-75581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:49:14.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:49:14.084 [DEBUG] [Thread-75581] [transport.py] [_log()] userauth is OK
2025-12-12T19:49:14.085 [DEBUG] [Thread-75581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:49:14.085 [DEBUG] [Thread-75581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:49:14.085 [DEBUG] [Thread-75581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:49:14.085 [DEBUG] [Thread-75581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:49:14.105 [INFO] [Thread-75581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:49:14.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:49:14.838 [DEBUG] [Thread-75581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:49:14.838 [DEBUG] [Thread-75581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:49:14.838 [DEBUG] [Thread-75581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:49:14.879 [DEBUG] [Thread-75581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:49:14.879 [DEBUG] [Thread-75581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:49:14.881 [DEBUG] [Thread-75581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:49:14.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:49:14.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:49:14.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:49:14.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:49:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:49:14.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:49:14.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:49:14.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:49:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:49:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.742116 -999.00  +12.10  37.62     56   +3.70 1 1 2 1 1   799    0 4.42 -182.61 ----- 32.0 37.6 312.2 43.5 12.9 -24.7 12.8 -24.3 12.5 -22.5 12.9 -23.4
2025-12-12T19:49:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:49:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:49:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.742116
2025-12-12T19:49:14.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:49:14.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:49:14.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:49:14.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:49:14.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:49:14.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:48:42', tmtdew=9.63, humidity=51.68, cloud=0.0, wind=35.75, temperature=12.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:48:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:49:14.905 [DEBUG] [Thread-75581] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:49:14.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:49:15.002 [DEBUG] [Thread-75584] [transport.py] [_log()] starting thread (client mode): 0xf575cbe0
2025-12-12T19:49:15.002 [DEBUG] [Thread-75584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:49:15.017 [DEBUG] [Thread-75584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:49:15.018 [INFO] [Thread-75584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:49:15.025 [DEBUG] [Thread-75584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:49:15.025 [DEBUG] [Thread-75584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:49:15.025 [DEBUG] [Thread-75584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] client lang: <none>
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] server lang: <none>
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] kex follows: False
2025-12-12T19:49:15.026 [DEBUG] [Thread-75584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:49:15.027 [DEBUG] [Thread-75584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:49:15.027 [DEBUG] [Thread-75584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:49:15.027 [DEBUG] [Thread-75584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:49:15.027 [DEBUG] [Thread-75584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:49:15.027 [DEBUG] [Thread-75584] [transport.py] [_log()] Compression: none
2025-12-12T19:49:15.027 [DEBUG] [Thread-75584] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:49:15.084 [DEBUG] [Thread-75584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:49:15.085 [DEBUG] [Thread-75584] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:49:15.085 [DEBUG] [Thread-75584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:49:15.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:49:15.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:49:15.140 [DEBUG] [Thread-75584] [transport.py] [_log()] userauth is OK
2025-12-12T19:49:15.140 [DEBUG] [Thread-75584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:49:15.140 [DEBUG] [Thread-75584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:49:15.140 [DEBUG] [Thread-75584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:49:15.141 [DEBUG] [Thread-75584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:49:15.163 [INFO] [Thread-75584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:49:15.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:49:15.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:49:15.989 [DEBUG] [Thread-75584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:49:15.989 [DEBUG] [Thread-75584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:49:16.038 [DEBUG] [Thread-75584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:49:16.038 [DEBUG] [Thread-75584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:49:16.046 [DEBUG] [Thread-75584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:49:16.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:49:16.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:49:16.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:49:16.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:49:16.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:49:16.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:49:16.078 [DEBUG] [Thread-75584] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:49:24.981 [DEBUG] [Thread-75586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:49:40.026 [DEBUG] [Thread-75587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:49:46.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:49:46.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:49:46.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:49:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 49, 14), 9.61, 51.76, 0.0, 33.7, 12.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:49:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:49:14
2025-12-12T19:49:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:49:47.077 [DEBUG] [Thread-75588] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T19:49:47.077 [DEBUG] [Thread-75588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:49:47.097 [DEBUG] [Thread-75588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:49:47.097 [INFO] [Thread-75588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] client lang: <none>
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] server lang: <none>
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] kex follows: False
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] Compression: none
2025-12-12T19:49:47.100 [DEBUG] [Thread-75588] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:49:47.118 [DEBUG] [Thread-75588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:49:47.118 [DEBUG] [Thread-75588] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:49:47.118 [DEBUG] [Thread-75588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:49:47.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:49:47.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:49:47.119 [DEBUG] [Thread-75588] [transport.py] [_log()] userauth is OK
2025-12-12T19:49:47.119 [DEBUG] [Thread-75588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:49:47.119 [DEBUG] [Thread-75588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:49:47.119 [DEBUG] [Thread-75588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:49:47.119 [DEBUG] [Thread-75588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:49:47.129 [INFO] [Thread-75588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:49:47.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:49:47.743 [DEBUG] [Thread-75588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:49:47.743 [DEBUG] [Thread-75588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:49:47.743 [DEBUG] [Thread-75588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:49:47.785 [DEBUG] [Thread-75588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:49:47.785 [DEBUG] [Thread-75588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:49:47.787 [DEBUG] [Thread-75588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:49:47.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:49:47.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:49:47.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:49:47.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:49:47.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:49:47.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:49:47.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.742463 -999.00  +12.20  36.90     56   +3.80 1 1 2 1 1   792    0 5.05 -165.06 ----- 32.2 36.9 320.8 42.0 12.9 -24.6 12.8 -24.4 12.5 -22.4 12.8 -23.5
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.742463
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:49:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:49:14', tmtdew=9.61, humidity=51.76, cloud=0.0, wind=33.7, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:49:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:49:47.807 [DEBUG] [Thread-75588] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:49:47.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:49:47.894 [DEBUG] [Thread-75591] [transport.py] [_log()] starting thread (client mode): 0xf813c4f0
2025-12-12T19:49:47.894 [DEBUG] [Thread-75591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:49:47.909 [DEBUG] [Thread-75591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:49:47.909 [INFO] [Thread-75591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] client lang: <none>
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] server lang: <none>
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] kex follows: False
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] Compression: none
2025-12-12T19:49:47.918 [DEBUG] [Thread-75591] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:49:47.976 [DEBUG] [Thread-75591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:49:47.976 [DEBUG] [Thread-75591] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:49:47.976 [DEBUG] [Thread-75591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:49:47.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:49:47.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:49:48.031 [DEBUG] [Thread-75591] [transport.py] [_log()] userauth is OK
2025-12-12T19:49:48.031 [DEBUG] [Thread-75591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:49:48.031 [DEBUG] [Thread-75591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:49:48.031 [DEBUG] [Thread-75591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:49:48.031 [DEBUG] [Thread-75591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:49:48.046 [INFO] [Thread-75591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:49:48.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:49:48.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:49:48.883 [DEBUG] [Thread-75591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:49:48.883 [DEBUG] [Thread-75591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:49:48.931 [DEBUG] [Thread-75591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:49:48.931 [DEBUG] [Thread-75591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:49:48.940 [DEBUG] [Thread-75591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:49:48.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:49:48.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:49:48.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:49:48.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:49:48.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:49:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:49:48.971 [DEBUG] [Thread-75591] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:49:55.055 [DEBUG] [Thread-75593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:04.714 [DEBUG] [Thread-75594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:06.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:06.021 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:10.100 [DEBUG] [Thread-75595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:50:18.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:50:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:50:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 49, 46), 9.52, 52.41, 0.0, 41.94, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:50:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:49:46
2025-12-12T19:50:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:50:20.004 [DEBUG] [Thread-75596] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-12T19:50:20.004 [DEBUG] [Thread-75596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:50:20.024 [DEBUG] [Thread-75596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:50:20.024 [INFO] [Thread-75596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] client lang: <none>
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] server lang: <none>
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] kex follows: False
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] Compression: none
2025-12-12T19:50:20.026 [DEBUG] [Thread-75596] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:50:20.037 [DEBUG] [Thread-75596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:50:20.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:50:20.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] userauth is OK
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:50:20.038 [DEBUG] [Thread-75596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:50:20.047 [INFO] [Thread-75596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:50:20.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:50:20.878 [DEBUG] [Thread-75596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:50:20.878 [DEBUG] [Thread-75596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:50:20.878 [DEBUG] [Thread-75596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:50:20.920 [DEBUG] [Thread-75596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:50:20.920 [DEBUG] [Thread-75596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:50:20.922 [DEBUG] [Thread-75596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:50:20.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:50:20.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:50:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:50:20.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:50:20.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:50:20.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:50:20.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:50:20.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:50:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:50:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.742810 -999.00  +12.10  46.36     56   +3.80 1 1 2 1 1   784    0 4.42 -180.98 ----- 49.5 46.4 315.4 51.1 12.9 -24.5 12.8 -24.2 12.5 -22.4 12.8 -23.5
2025-12-12T19:50:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:50:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:50:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.742810
2025-12-12T19:50:20.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:50:20.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:50:20.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:50:20.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:50:20.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:50:20.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:49:46', tmtdew=9.52, humidity=52.41, cloud=0.0, wind=41.94, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:49:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:50:20.940 [DEBUG] [Thread-75596] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:50:21.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:50:21.027 [DEBUG] [Thread-75599] [transport.py] [_log()] starting thread (client mode): 0xf578b490
2025-12-12T19:50:21.027 [DEBUG] [Thread-75599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:50:21.042 [DEBUG] [Thread-75599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:50:21.042 [INFO] [Thread-75599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:50:21.049 [DEBUG] [Thread-75599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:50:21.049 [DEBUG] [Thread-75599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:50:21.049 [DEBUG] [Thread-75599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:50:21.049 [DEBUG] [Thread-75599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:21.049 [DEBUG] [Thread-75599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] client lang: <none>
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] server lang: <none>
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] kex follows: False
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] Compression: none
2025-12-12T19:50:21.050 [DEBUG] [Thread-75599] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:50:21.106 [DEBUG] [Thread-75599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:50:21.106 [DEBUG] [Thread-75599] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:50:21.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:50:21.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:50:21.107 [DEBUG] [Thread-75599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:50:21.164 [DEBUG] [Thread-75599] [transport.py] [_log()] userauth is OK
2025-12-12T19:50:21.164 [DEBUG] [Thread-75599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:50:21.164 [DEBUG] [Thread-75599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:50:21.164 [DEBUG] [Thread-75599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:50:21.164 [DEBUG] [Thread-75599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:50:21.182 [INFO] [Thread-75599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:50:21.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:50:21.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:50:22.046 [DEBUG] [Thread-75599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:50:22.047 [DEBUG] [Thread-75599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:50:22.094 [DEBUG] [Thread-75599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:50:22.095 [DEBUG] [Thread-75599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:50:22.103 [DEBUG] [Thread-75599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:50:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:50:22.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:50:22.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:50:22.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:50:22.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:50:22.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:50:22.135 [DEBUG] [Thread-75599] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:50:25.129 [DEBUG] [Thread-75601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:40.170 [DEBUG] [Thread-75602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:50:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:50:52.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:50:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:50:52.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 50, 18), 9.49, 52.48, 0.0, 40.92, 12.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:50:52.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:50:18
2025-12-12T19:50:53.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:50:53.155 [DEBUG] [Thread-75603] [transport.py] [_log()] starting thread (client mode): 0xf575ca00
2025-12-12T19:50:53.155 [DEBUG] [Thread-75603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:50:53.174 [DEBUG] [Thread-75603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:50:53.174 [INFO] [Thread-75603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:50:53.177 [DEBUG] [Thread-75603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] client lang: <none>
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] server lang: <none>
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] kex follows: False
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] Compression: none
2025-12-12T19:50:53.178 [DEBUG] [Thread-75603] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:50:53.193 [DEBUG] [Thread-75603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:50:53.193 [DEBUG] [Thread-75603] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:50:53.193 [DEBUG] [Thread-75603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:50:53.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:50:53.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:50:53.194 [DEBUG] [Thread-75603] [transport.py] [_log()] userauth is OK
2025-12-12T19:50:53.194 [DEBUG] [Thread-75603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:50:53.194 [DEBUG] [Thread-75603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:50:53.194 [DEBUG] [Thread-75603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:50:53.194 [DEBUG] [Thread-75603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:50:53.204 [INFO] [Thread-75603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:50:53.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:50:53.832 [DEBUG] [Thread-75603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:50:53.832 [DEBUG] [Thread-75603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:50:53.832 [DEBUG] [Thread-75603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:50:53.874 [DEBUG] [Thread-75603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:50:53.874 [DEBUG] [Thread-75603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:50:53.877 [DEBUG] [Thread-75603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:50:53.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:50:53.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:50:53.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:50:53.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:50:53.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:50:53.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:50:53.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:50:53.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:50:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:50:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.743505 -999.00  +12.20  32.44     57   +3.90 1 1 2 1 1   766    0 4.50 -170.53 ----- 38.0 32.4 325.6 37.4 12.9 -24.5 12.8 -24.2 12.5 -22.5 12.8 -23.3
2025-12-12T19:50:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:50:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:50:53.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.743505
2025-12-12T19:50:53.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:50:53.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:50:53.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:50:53.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:50:53.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:50:53.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:50:18', tmtdew=9.49, humidity=52.48, cloud=0.0, wind=40.92, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:50:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:50:53.905 [DEBUG] [Thread-75603] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:50:54.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:50:54.013 [DEBUG] [Thread-75606] [transport.py] [_log()] starting thread (client mode): 0xf5797ee0
2025-12-12T19:50:54.013 [DEBUG] [Thread-75606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:50:54.029 [DEBUG] [Thread-75606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:50:54.029 [INFO] [Thread-75606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:50:54.037 [DEBUG] [Thread-75606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:50:54.037 [DEBUG] [Thread-75606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:50:54.037 [DEBUG] [Thread-75606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:50:54.037 [DEBUG] [Thread-75606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:54.037 [DEBUG] [Thread-75606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:50:54.037 [DEBUG] [Thread-75606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] client lang: <none>
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] server lang: <none>
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] kex follows: False
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] Compression: none
2025-12-12T19:50:54.038 [DEBUG] [Thread-75606] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:50:54.095 [DEBUG] [Thread-75606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:50:54.096 [DEBUG] [Thread-75606] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:50:54.096 [DEBUG] [Thread-75606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:50:54.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:50:54.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:50:54.151 [DEBUG] [Thread-75606] [transport.py] [_log()] userauth is OK
2025-12-12T19:50:54.152 [DEBUG] [Thread-75606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:50:54.152 [DEBUG] [Thread-75606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:50:54.152 [DEBUG] [Thread-75606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:50:54.152 [DEBUG] [Thread-75606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:50:54.171 [INFO] [Thread-75606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:50:54.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:50:54.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:50:55.018 [DEBUG] [Thread-75606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:50:55.018 [DEBUG] [Thread-75606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:50:55.066 [DEBUG] [Thread-75606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:50:55.066 [DEBUG] [Thread-75606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:50:55.075 [DEBUG] [Thread-75606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:50:55.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:50:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:50:55.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:50:55.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:50:55.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:50:55.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:50:55.109 [DEBUG] [Thread-75606] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:50:55.201 [DEBUG] [Thread-75608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:04.782 [DEBUG] [Thread-75609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:10.248 [DEBUG] [Thread-75610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:11.606 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:11.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:51:25.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:51:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:51:25.276 [DEBUG] [Thread-75611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 50, 51), 9.36, 52.63, 0.0, 43.12, 12.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:51:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:50:51
2025-12-12T19:51:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:51:26.095 [DEBUG] [Thread-75612] [transport.py] [_log()] starting thread (client mode): 0xf57a7850
2025-12-12T19:51:26.095 [DEBUG] [Thread-75612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:51:26.105 [DEBUG] [Thread-75612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:51:26.106 [INFO] [Thread-75612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] client lang: <none>
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] server lang: <none>
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] kex follows: False
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] Compression: none
2025-12-12T19:51:26.107 [DEBUG] [Thread-75612] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:51:26.124 [DEBUG] [Thread-75612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:51:26.125 [DEBUG] [Thread-75612] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:51:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:51:26.126 [DEBUG] [Thread-75612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:51:26.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:51:26.128 [DEBUG] [Thread-75612] [transport.py] [_log()] userauth is OK
2025-12-12T19:51:26.128 [DEBUG] [Thread-75612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:51:26.129 [DEBUG] [Thread-75612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:51:26.129 [DEBUG] [Thread-75612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:51:26.129 [DEBUG] [Thread-75612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:51:26.142 [INFO] [Thread-75612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:51:26.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:51:26.776 [DEBUG] [Thread-75612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:51:26.776 [DEBUG] [Thread-75612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:51:26.777 [DEBUG] [Thread-75612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:51:26.819 [DEBUG] [Thread-75612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:51:26.819 [DEBUG] [Thread-75612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:51:26.821 [DEBUG] [Thread-75612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:51:26.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:51:26.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:51:26.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:51:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:51:26.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:51:26.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:51:26.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:51:26.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:51:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:51:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.743852 -999.00  +12.10  36.63     57   +3.90 1 1 2 1 1   756    0 4.33 -180.30 ----- 32.2 36.6 323.4 40.5 12.9 -24.7 12.8 -24.3 12.4 -22.6 12.8 -23.4
2025-12-12T19:51:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:51:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:51:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.743852
2025-12-12T19:51:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:51:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:51:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:51:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:51:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:51:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:50:51', tmtdew=9.36, humidity=52.63, cloud=0.0, wind=43.12, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:51:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:51:26.844 [DEBUG] [Thread-75612] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:51:26.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:51:26.937 [DEBUG] [Thread-75615] [transport.py] [_log()] starting thread (client mode): 0xf5703fd0
2025-12-12T19:51:26.938 [DEBUG] [Thread-75615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:51:26.953 [DEBUG] [Thread-75615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:51:26.953 [INFO] [Thread-75615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:51:26.960 [DEBUG] [Thread-75615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] client lang: <none>
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] server lang: <none>
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] kex follows: False
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] Compression: none
2025-12-12T19:51:26.961 [DEBUG] [Thread-75615] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:51:27.019 [DEBUG] [Thread-75615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:51:27.020 [DEBUG] [Thread-75615] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:51:27.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:51:27.021 [DEBUG] [Thread-75615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:51:27.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:51:27.075 [DEBUG] [Thread-75615] [transport.py] [_log()] userauth is OK
2025-12-12T19:51:27.076 [DEBUG] [Thread-75615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:51:27.076 [DEBUG] [Thread-75615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:51:27.076 [DEBUG] [Thread-75615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:51:27.076 [DEBUG] [Thread-75615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:51:27.095 [INFO] [Thread-75615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:51:27.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:51:27.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:51:27.965 [DEBUG] [Thread-75615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:51:27.965 [DEBUG] [Thread-75615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:51:28.013 [DEBUG] [Thread-75615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:51:28.013 [DEBUG] [Thread-75615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:51:28.022 [DEBUG] [Thread-75615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:51:28.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:51:28.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:51:28.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:51:28.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:51:28.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:51:28.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:51:28.056 [DEBUG] [Thread-75615] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:51:40.303 [DEBUG] [Thread-75617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:55.339 [DEBUG] [Thread-75618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:51:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:51:58.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:51:58.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:51:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 51, 55), 9.23, 53.23, 0.0, 37.44, 12.22, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:51:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:51:55
2025-12-12T19:51:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:51:59.044 [DEBUG] [Thread-75619] [transport.py] [_log()] starting thread (client mode): 0xf575ef20
2025-12-12T19:51:59.044 [DEBUG] [Thread-75619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:51:59.064 [DEBUG] [Thread-75619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:51:59.064 [INFO] [Thread-75619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] client lang: <none>
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] server lang: <none>
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] kex follows: False
2025-12-12T19:51:59.068 [DEBUG] [Thread-75619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:51:59.069 [DEBUG] [Thread-75619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:51:59.069 [DEBUG] [Thread-75619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:51:59.069 [DEBUG] [Thread-75619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:51:59.069 [DEBUG] [Thread-75619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:51:59.069 [DEBUG] [Thread-75619] [transport.py] [_log()] Compression: none
2025-12-12T19:51:59.069 [DEBUG] [Thread-75619] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:51:59.087 [DEBUG] [Thread-75619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:51:59.087 [DEBUG] [Thread-75619] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:51:59.088 [DEBUG] [Thread-75619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:51:59.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:51:59.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:51:59.090 [DEBUG] [Thread-75619] [transport.py] [_log()] userauth is OK
2025-12-12T19:51:59.091 [DEBUG] [Thread-75619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:51:59.091 [DEBUG] [Thread-75619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:51:59.091 [DEBUG] [Thread-75619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:51:59.091 [DEBUG] [Thread-75619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:51:59.115 [INFO] [Thread-75619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:51:59.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:51:59.739 [DEBUG] [Thread-75619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:51:59.739 [DEBUG] [Thread-75619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:51:59.740 [DEBUG] [Thread-75619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:51:59.782 [DEBUG] [Thread-75619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:51:59.782 [DEBUG] [Thread-75619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:51:59.786 [DEBUG] [Thread-75619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:51:59.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:51:59.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:51:59.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:51:59.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:51:59.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:51:59.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:51:59.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:51:59.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:51:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:51:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.744199 -999.00  +12.10  33.49     57   +4.00 1 1 2 1 1   745    0 4.13 -185.93 ----- 35.4 33.5 312.6 45.6 12.8 -24.4 12.8 -24.0 12.4 -22.1 12.8 -23.4
2025-12-12T19:51:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:51:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:51:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.744199
2025-12-12T19:51:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:51:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:51:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:51:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:51:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:51:59.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:51:55', tmtdew=9.23, humidity=53.23, cloud=0.0, wind=37.44, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:51:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:51:59.807 [DEBUG] [Thread-75619] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:51:59.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:51:59.903 [DEBUG] [Thread-75622] [transport.py] [_log()] starting thread (client mode): 0xf5788eb0
2025-12-12T19:51:59.903 [DEBUG] [Thread-75622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:51:59.918 [DEBUG] [Thread-75622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:51:59.918 [INFO] [Thread-75622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:59.925 [DEBUG] [Thread-75622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] client lang: <none>
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] server lang: <none>
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] kex follows: False
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] Compression: none
2025-12-12T19:51:59.926 [DEBUG] [Thread-75622] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:51:59.982 [DEBUG] [Thread-75622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:51:59.982 [DEBUG] [Thread-75622] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:51:59.983 [DEBUG] [Thread-75622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:51:59.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:51:59.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:52:00.039 [DEBUG] [Thread-75622] [transport.py] [_log()] userauth is OK
2025-12-12T19:52:00.039 [DEBUG] [Thread-75622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:52:00.039 [DEBUG] [Thread-75622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:52:00.039 [DEBUG] [Thread-75622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:52:00.039 [DEBUG] [Thread-75622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:52:00.060 [INFO] [Thread-75622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:52:00.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:52:00.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:52:00.904 [DEBUG] [Thread-75622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:52:00.904 [DEBUG] [Thread-75622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:52:00.952 [DEBUG] [Thread-75622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:52:00.952 [DEBUG] [Thread-75622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:52:00.960 [DEBUG] [Thread-75622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:52:00.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:52:00.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:52:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:52:00.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:52:00.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:52:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:52:00.994 [DEBUG] [Thread-75622] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:52:04.862 [DEBUG] [Thread-75624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:52:10.367 [DEBUG] [Thread-75625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:52:17.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:52:17.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:52:25.412 [DEBUG] [Thread-75626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:52:30.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:52:30.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:52:30.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:52:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 52, 27), 9.13, 53.59, 0.0, 37.51, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:52:31.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:52:27
2025-12-12T19:52:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:52:31.953 [DEBUG] [Thread-75627] [transport.py] [_log()] starting thread (client mode): 0xf578a5f0
2025-12-12T19:52:31.953 [DEBUG] [Thread-75627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:52:31.962 [DEBUG] [Thread-75627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:52:31.962 [INFO] [Thread-75627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] client lang: <none>
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] server lang: <none>
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] kex follows: False
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] Compression: none
2025-12-12T19:52:31.964 [DEBUG] [Thread-75627] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:52:31.971 [DEBUG] [Thread-75627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:52:31.972 [DEBUG] [Thread-75627] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:52:31.972 [DEBUG] [Thread-75627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:52:31.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:52:31.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:52:31.972 [DEBUG] [Thread-75627] [transport.py] [_log()] userauth is OK
2025-12-12T19:52:31.973 [DEBUG] [Thread-75627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:52:31.973 [DEBUG] [Thread-75627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:52:31.973 [DEBUG] [Thread-75627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:52:31.973 [DEBUG] [Thread-75627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:52:31.983 [INFO] [Thread-75627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:52:31.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:52:32.608 [DEBUG] [Thread-75627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:52:32.608 [DEBUG] [Thread-75627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:52:32.608 [DEBUG] [Thread-75627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:52:32.650 [DEBUG] [Thread-75627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:52:32.650 [DEBUG] [Thread-75627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:52:32.652 [DEBUG] [Thread-75627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:52:32.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:52:32.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:52:32.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:52:32.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:52:32.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:52:32.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:52:32.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:52:32.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.744546 -999.00  +12.10  28.97     57   +4.00 1 1 1 1 1   734    0 3.85 -191.68 ----- 28.2 29.0 322.4 39.3 12.9 -24.5 12.7 -24.2 12.4 -22.5 12.8 -23.2
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.744546
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:52:32.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:52:27', tmtdew=9.13, humidity=53.59, cloud=0.0, wind=37.51, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:52:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:52:32.674 [DEBUG] [Thread-75627] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:52:32.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:52:32.762 [DEBUG] [Thread-75630] [transport.py] [_log()] starting thread (client mode): 0xf578bfd0
2025-12-12T19:52:32.762 [DEBUG] [Thread-75630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:52:32.776 [DEBUG] [Thread-75630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:52:32.776 [INFO] [Thread-75630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] client lang: <none>
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] server lang: <none>
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] kex follows: False
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:52:32.784 [DEBUG] [Thread-75630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:52:32.785 [DEBUG] [Thread-75630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:52:32.785 [DEBUG] [Thread-75630] [transport.py] [_log()] Compression: none
2025-12-12T19:52:32.785 [DEBUG] [Thread-75630] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:52:32.842 [DEBUG] [Thread-75630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:52:32.843 [DEBUG] [Thread-75630] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:52:32.843 [DEBUG] [Thread-75630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:52:32.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:52:32.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:52:32.898 [DEBUG] [Thread-75630] [transport.py] [_log()] userauth is OK
2025-12-12T19:52:32.899 [DEBUG] [Thread-75630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:52:32.899 [DEBUG] [Thread-75630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:52:32.899 [DEBUG] [Thread-75630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:52:32.899 [DEBUG] [Thread-75630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:52:32.921 [INFO] [Thread-75630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:52:32.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:52:32.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:52:33.752 [DEBUG] [Thread-75630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:52:33.752 [DEBUG] [Thread-75630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:52:33.800 [DEBUG] [Thread-75630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:52:33.800 [DEBUG] [Thread-75630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:52:33.809 [DEBUG] [Thread-75630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:52:33.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:52:33.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:52:33.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:52:33.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:52:33.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:52:33.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:52:33.844 [DEBUG] [Thread-75630] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:52:40.440 [DEBUG] [Thread-75632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:52:55.482 [DEBUG] [Thread-75633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:53:03.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:53:03.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:53:04.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 52, 59), 9.09, 53.74, 0.0, 38.32, 12.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:53:04.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:52:59
2025-12-12T19:53:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:53:04.798 [DEBUG] [Thread-75634] [transport.py] [_log()] starting thread (client mode): 0xf81e6f50
2025-12-12T19:53:04.798 [DEBUG] [Thread-75634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:53:04.817 [DEBUG] [Thread-75634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:53:04.817 [INFO] [Thread-75634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] client lang: <none>
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] server lang: <none>
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] kex follows: False
2025-12-12T19:53:04.821 [DEBUG] [Thread-75634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:53:04.822 [DEBUG] [Thread-75634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:53:04.822 [DEBUG] [Thread-75634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:53:04.822 [DEBUG] [Thread-75634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:53:04.822 [DEBUG] [Thread-75634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:53:04.822 [DEBUG] [Thread-75634] [transport.py] [_log()] Compression: none
2025-12-12T19:53:04.822 [DEBUG] [Thread-75634] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:53:04.838 [DEBUG] [Thread-75634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:53:04.839 [DEBUG] [Thread-75634] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:53:04.839 [DEBUG] [Thread-75634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:53:04.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:53:04.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:53:04.841 [DEBUG] [Thread-75634] [transport.py] [_log()] userauth is OK
2025-12-12T19:53:04.842 [DEBUG] [Thread-75634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:53:04.842 [DEBUG] [Thread-75634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:53:04.842 [DEBUG] [Thread-75634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:53:04.842 [DEBUG] [Thread-75634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:53:04.865 [INFO] [Thread-75634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:53:04.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:53:04.937 [DEBUG] [Thread-75636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:05.515 [DEBUG] [Thread-75634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:53:05.515 [DEBUG] [Thread-75634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:53:05.515 [DEBUG] [Thread-75634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:53:05.556 [DEBUG] [Thread-75634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:53:05.556 [DEBUG] [Thread-75634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:53:05.559 [DEBUG] [Thread-75634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:53:05.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:53:05.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:53:05.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:53:05.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:53:05.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:53:05.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:53:05.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:53:05.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:53:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:53:05.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.744894 -999.00  +12.10  35.78     57   +4.00 1 1 2 1 1   722    0 2.63 -225.01 ----- 36.9 35.8 313.2 39.7 12.8 -24.2 12.7 -24.0 12.4 -22.1 12.7 -23.0
2025-12-12T19:53:05.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:53:05.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:53:05.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.744894
2025-12-12T19:53:05.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:53:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:53:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:53:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:53:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:53:05.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:52:59', tmtdew=9.09, humidity=53.74, cloud=0.0, wind=38.32, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:52:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:53:05.585 [DEBUG] [Thread-75634] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:53:05.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:53:05.682 [DEBUG] [Thread-75638] [transport.py] [_log()] starting thread (client mode): 0xf57a6d10
2025-12-12T19:53:05.682 [DEBUG] [Thread-75638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:53:05.697 [DEBUG] [Thread-75638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:53:05.697 [INFO] [Thread-75638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:53:05.705 [DEBUG] [Thread-75638] [transport.py] [_log()] client lang: <none>
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] server lang: <none>
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] kex follows: False
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] Compression: none
2025-12-12T19:53:05.706 [DEBUG] [Thread-75638] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:53:05.763 [DEBUG] [Thread-75638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:53:05.763 [DEBUG] [Thread-75638] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:53:05.764 [DEBUG] [Thread-75638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:53:05.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:53:05.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:53:05.818 [DEBUG] [Thread-75638] [transport.py] [_log()] userauth is OK
2025-12-12T19:53:05.818 [DEBUG] [Thread-75638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:53:05.818 [DEBUG] [Thread-75638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:53:05.818 [DEBUG] [Thread-75638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:53:05.818 [DEBUG] [Thread-75638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:53:05.832 [INFO] [Thread-75638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:53:05.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:53:05.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:53:06.694 [DEBUG] [Thread-75638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:53:06.694 [DEBUG] [Thread-75638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:53:06.742 [DEBUG] [Thread-75638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:53:06.742 [DEBUG] [Thread-75638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:53:06.751 [DEBUG] [Thread-75638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:53:06.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:53:06.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:53:06.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:53:06.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:53:06.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:53:06.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:53:06.786 [DEBUG] [Thread-75638] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:53:10.506 [DEBUG] [Thread-75640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:24.257 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:24.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:25.549 [DEBUG] [Thread-75641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:53:36.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:53:36.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:53:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 53, 31), 9.05, 53.88, 0.0, 36.19, 12.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:53:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:53:31
2025-12-12T19:53:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:53:37.797 [DEBUG] [Thread-75642] [transport.py] [_log()] starting thread (client mode): 0xf57a7640
2025-12-12T19:53:37.797 [DEBUG] [Thread-75642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:53:37.819 [DEBUG] [Thread-75642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:53:37.819 [INFO] [Thread-75642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:53:37.822 [DEBUG] [Thread-75642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] client lang: <none>
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] server lang: <none>
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] kex follows: False
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] Compression: none
2025-12-12T19:53:37.823 [DEBUG] [Thread-75642] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:53:37.838 [DEBUG] [Thread-75642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:53:37.838 [DEBUG] [Thread-75642] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:53:37.838 [DEBUG] [Thread-75642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:53:37.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:53:37.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:53:37.839 [DEBUG] [Thread-75642] [transport.py] [_log()] userauth is OK
2025-12-12T19:53:37.839 [DEBUG] [Thread-75642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:53:37.839 [DEBUG] [Thread-75642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:53:37.839 [DEBUG] [Thread-75642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:53:37.839 [DEBUG] [Thread-75642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:53:37.849 [INFO] [Thread-75642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:53:37.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:53:38.427 [DEBUG] [Thread-75642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:53:38.427 [DEBUG] [Thread-75642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:53:38.427 [DEBUG] [Thread-75642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:53:38.468 [DEBUG] [Thread-75642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:53:38.468 [DEBUG] [Thread-75642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:53:38.470 [DEBUG] [Thread-75642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:53:38.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:53:38.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:53:38.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:53:38.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:53:38.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:53:38.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:53:38.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.745241 -999.00  +12.10  29.57     58   +4.00 1 1 1 1 1   709    0 3.57 -191.91 ----- 26.4 29.6 314.6 41.3 12.8 -24.4 12.7 -24.1 12.4 -22.3 12.7 -23.1
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.745241
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:53:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:53:31', tmtdew=9.05, humidity=53.88, cloud=0.0, wind=36.19, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:53:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:53:38.488 [DEBUG] [Thread-75642] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:53:38.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:53:38.571 [DEBUG] [Thread-75645] [transport.py] [_log()] starting thread (client mode): 0xf8155900
2025-12-12T19:53:38.571 [DEBUG] [Thread-75645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:53:38.586 [DEBUG] [Thread-75645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:53:38.586 [INFO] [Thread-75645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] client lang: <none>
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] server lang: <none>
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] kex follows: False
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] Compression: none
2025-12-12T19:53:38.594 [DEBUG] [Thread-75645] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:53:38.649 [DEBUG] [Thread-75645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:53:38.649 [DEBUG] [Thread-75645] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:53:38.649 [DEBUG] [Thread-75645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:53:38.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:53:38.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:53:38.706 [DEBUG] [Thread-75645] [transport.py] [_log()] userauth is OK
2025-12-12T19:53:38.706 [DEBUG] [Thread-75645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:53:38.706 [DEBUG] [Thread-75645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:53:38.706 [DEBUG] [Thread-75645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:53:38.706 [DEBUG] [Thread-75645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:53:38.720 [INFO] [Thread-75645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:53:38.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:53:38.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:53:39.569 [DEBUG] [Thread-75645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:53:39.569 [DEBUG] [Thread-75645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:53:39.618 [DEBUG] [Thread-75645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:53:39.618 [DEBUG] [Thread-75645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:53:39.627 [DEBUG] [Thread-75645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:53:39.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:53:39.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:53:39.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:53:39.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:53:39.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:53:39.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:53:39.662 [DEBUG] [Thread-75645] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:53:40.577 [DEBUG] [Thread-75647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:53:55.620 [DEBUG] [Thread-75648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:05.011 [DEBUG] [Thread-75650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:54:09.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:54:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:54:10.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 54, 3), 9.09, 53.74, 0.0, 37.81, 12.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:54:10.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:54:03
2025-12-12T19:54:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:54:10.646 [DEBUG] [Thread-75651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:10.649 [DEBUG] [Thread-75652] [transport.py] [_log()] starting thread (client mode): 0xf81c0e80
2025-12-12T19:54:10.650 [DEBUG] [Thread-75652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:54:10.669 [DEBUG] [Thread-75652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:54:10.669 [INFO] [Thread-75652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:54:10.672 [DEBUG] [Thread-75652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] client lang: <none>
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] server lang: <none>
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] kex follows: False
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:54:10.673 [DEBUG] [Thread-75652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:54:10.674 [DEBUG] [Thread-75652] [transport.py] [_log()] Compression: none
2025-12-12T19:54:10.674 [DEBUG] [Thread-75652] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:54:10.690 [DEBUG] [Thread-75652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:54:10.691 [DEBUG] [Thread-75652] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:54:10.691 [DEBUG] [Thread-75652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:54:10.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:54:10.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:54:10.693 [DEBUG] [Thread-75652] [transport.py] [_log()] userauth is OK
2025-12-12T19:54:10.694 [DEBUG] [Thread-75652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:54:10.694 [DEBUG] [Thread-75652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:54:10.694 [DEBUG] [Thread-75652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:54:10.694 [DEBUG] [Thread-75652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:54:10.713 [INFO] [Thread-75652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:54:10.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:54:11.332 [DEBUG] [Thread-75652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:54:11.332 [DEBUG] [Thread-75652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:54:11.332 [DEBUG] [Thread-75652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:54:11.372 [DEBUG] [Thread-75652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:54:11.373 [DEBUG] [Thread-75652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:54:11.375 [DEBUG] [Thread-75652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:54:11.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:54:11.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:54:11.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:54:11.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:54:11.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:54:11.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:54:11.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:54:11.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:54:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:54:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.745588 -999.00  +12.10  36.19     58   +4.10 1 2 2 1 1   696    0 3.69 -182.22 ----- 31.0 36.2 318.4 39.1 12.8 -24.3 12.7 -23.8 12.4 -22.2 12.7 -23.0
2025-12-12T19:54:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:54:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:54:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.745588
2025-12-12T19:54:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:54:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:54:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:54:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:54:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T19:54:11.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:54:03', tmtdew=9.09, humidity=53.74, cloud=0.0, wind=37.81, temperature=12.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:53:38.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:54:11.394 [DEBUG] [Thread-75652] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:54:11.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:54:11.481 [DEBUG] [Thread-75655] [transport.py] [_log()] starting thread (client mode): 0xf81c12a0
2025-12-12T19:54:11.481 [DEBUG] [Thread-75655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:54:11.495 [DEBUG] [Thread-75655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:54:11.495 [INFO] [Thread-75655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] client lang: <none>
2025-12-12T19:54:11.503 [DEBUG] [Thread-75655] [transport.py] [_log()] server lang: <none>
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] kex follows: False
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] Compression: none
2025-12-12T19:54:11.504 [DEBUG] [Thread-75655] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:54:11.562 [DEBUG] [Thread-75655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:54:11.562 [DEBUG] [Thread-75655] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:54:11.563 [DEBUG] [Thread-75655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:54:11.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:54:11.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:54:11.618 [DEBUG] [Thread-75655] [transport.py] [_log()] userauth is OK
2025-12-12T19:54:11.618 [DEBUG] [Thread-75655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:54:11.618 [DEBUG] [Thread-75655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:54:11.618 [DEBUG] [Thread-75655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:54:11.619 [DEBUG] [Thread-75655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:54:11.637 [INFO] [Thread-75655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:54:11.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:54:11.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:54:12.489 [DEBUG] [Thread-75655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:54:12.489 [DEBUG] [Thread-75655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:54:12.536 [DEBUG] [Thread-75655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:54:12.536 [DEBUG] [Thread-75655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:54:12.544 [DEBUG] [Thread-75655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:54:12.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:54:12.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:54:12.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:54:12.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:54:12.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:54:12.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:54:12.575 [DEBUG] [Thread-75655] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:54:25.674 [DEBUG] [Thread-75657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:30.135 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:30.136 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:40.720 [DEBUG] [Thread-75658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:54:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:54:42.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:54:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:54:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 54, 35), 9.09, 53.74, 0.0, 36.59, 12.23, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:54:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:54:35
2025-12-12T19:54:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:54:43.547 [DEBUG] [Thread-75659] [transport.py] [_log()] starting thread (client mode): 0xf5702f50
2025-12-12T19:54:43.547 [DEBUG] [Thread-75659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:54:43.562 [DEBUG] [Thread-75659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:54:43.562 [INFO] [Thread-75659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] client lang: <none>
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] server lang: <none>
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] kex follows: False
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] Compression: none
2025-12-12T19:54:43.565 [DEBUG] [Thread-75659] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:54:43.581 [DEBUG] [Thread-75659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:54:43.581 [DEBUG] [Thread-75659] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:54:43.581 [DEBUG] [Thread-75659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:54:43.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:54:43.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:54:43.582 [DEBUG] [Thread-75659] [transport.py] [_log()] userauth is OK
2025-12-12T19:54:43.582 [DEBUG] [Thread-75659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:54:43.582 [DEBUG] [Thread-75659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:54:43.582 [DEBUG] [Thread-75659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:54:43.582 [DEBUG] [Thread-75659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:54:43.592 [INFO] [Thread-75659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:54:43.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:54:44.181 [DEBUG] [Thread-75659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:54:44.181 [DEBUG] [Thread-75659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:54:44.182 [DEBUG] [Thread-75659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:54:44.223 [DEBUG] [Thread-75659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:54:44.223 [DEBUG] [Thread-75659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:54:44.226 [DEBUG] [Thread-75659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:54:44.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:54:44.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:54:44.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:54:44.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:54:44.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:54:44.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:54:44.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:54:44.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:54:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:54:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.745935 -999.00  +12.10  25.78     57   +4.00 1 1 1 1 1   682    0 3.79 -177.70 ----- 31.1 25.8 311.8 38.0 12.8 -24.3 12.7 -24.0 12.3 -22.1 12.7 -23.0
2025-12-12T19:54:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:54:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:54:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.745935
2025-12-12T19:54:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:54:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:54:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:54:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:54:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:54:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:54:35', tmtdew=9.09, humidity=53.74, cloud=0.0, wind=36.59, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:54:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:54:44.246 [DEBUG] [Thread-75659] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:54:44.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:54:44.342 [DEBUG] [Thread-75662] [transport.py] [_log()] starting thread (client mode): 0xf57a7640
2025-12-12T19:54:44.342 [DEBUG] [Thread-75662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:54:44.356 [DEBUG] [Thread-75662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:54:44.356 [INFO] [Thread-75662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:54:44.364 [DEBUG] [Thread-75662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] client lang: <none>
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] server lang: <none>
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] kex follows: False
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] Compression: none
2025-12-12T19:54:44.365 [DEBUG] [Thread-75662] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:54:44.421 [DEBUG] [Thread-75662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:54:44.422 [DEBUG] [Thread-75662] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:54:44.422 [DEBUG] [Thread-75662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:54:44.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:54:44.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:54:44.478 [DEBUG] [Thread-75662] [transport.py] [_log()] userauth is OK
2025-12-12T19:54:44.478 [DEBUG] [Thread-75662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:54:44.478 [DEBUG] [Thread-75662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:54:44.478 [DEBUG] [Thread-75662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:54:44.478 [DEBUG] [Thread-75662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:54:44.499 [INFO] [Thread-75662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:54:44.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:54:44.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:54:45.360 [DEBUG] [Thread-75662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:54:45.360 [DEBUG] [Thread-75662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:54:45.408 [DEBUG] [Thread-75662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:54:45.408 [DEBUG] [Thread-75662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:54:45.417 [DEBUG] [Thread-75662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:54:45.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:54:45.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:54:45.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:54:45.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:54:45.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:54:45.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:54:45.452 [DEBUG] [Thread-75662] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:54:55.746 [DEBUG] [Thread-75664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:05.078 [DEBUG] [Thread-75665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:10.787 [DEBUG] [Thread-75666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:15.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:55:15.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:55:15.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:55:16.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 55, 7), 9.09, 53.73, 0.0, 37.78, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:55:16.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:55:07
2025-12-12T19:55:16.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:55:16.433 [DEBUG] [Thread-75667] [transport.py] [_log()] starting thread (client mode): 0xf57f3e50
2025-12-12T19:55:16.433 [DEBUG] [Thread-75667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:55:16.452 [DEBUG] [Thread-75667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:55:16.452 [INFO] [Thread-75667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:55:16.455 [DEBUG] [Thread-75667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] client lang: <none>
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] server lang: <none>
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] kex follows: False
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] Compression: none
2025-12-12T19:55:16.456 [DEBUG] [Thread-75667] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:55:16.472 [DEBUG] [Thread-75667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:55:16.473 [DEBUG] [Thread-75667] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:55:16.473 [DEBUG] [Thread-75667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:55:16.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:55:16.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:55:16.475 [DEBUG] [Thread-75667] [transport.py] [_log()] userauth is OK
2025-12-12T19:55:16.475 [DEBUG] [Thread-75667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:55:16.475 [DEBUG] [Thread-75667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:55:16.475 [DEBUG] [Thread-75667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:55:16.475 [DEBUG] [Thread-75667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:55:16.489 [INFO] [Thread-75667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:55:16.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:55:17.121 [DEBUG] [Thread-75667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:55:17.121 [DEBUG] [Thread-75667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:55:17.121 [DEBUG] [Thread-75667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:55:17.162 [DEBUG] [Thread-75667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:55:17.162 [DEBUG] [Thread-75667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:55:17.164 [DEBUG] [Thread-75667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:55:17.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:55:17.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:55:17.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:55:17.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:55:17.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:55:17.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:55:17.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:55:17.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:55:17.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:55:17.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.746282 -999.00  +12.00  38.17     58   +4.10 1 1 2 1 1   668    0 3.50 -182.66 ----- 39.6 38.2 317.4 45.1 12.8 -24.2 12.7 -24.1 12.3 -22.2 12.7 -23.0
2025-12-12T19:55:17.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:55:17.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:55:17.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.746282
2025-12-12T19:55:17.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:55:17.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:55:17.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:55:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:55:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:55:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:55:07', tmtdew=9.09, humidity=53.73, cloud=0.0, wind=37.78, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:54:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:55:17.190 [DEBUG] [Thread-75667] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:55:17.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:55:17.282 [DEBUG] [Thread-75670] [transport.py] [_log()] starting thread (client mode): 0xf81e7fa0
2025-12-12T19:55:17.283 [DEBUG] [Thread-75670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:55:17.297 [DEBUG] [Thread-75670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:55:17.297 [INFO] [Thread-75670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:55:17.304 [DEBUG] [Thread-75670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:55:17.304 [DEBUG] [Thread-75670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:55:17.304 [DEBUG] [Thread-75670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:55:17.304 [DEBUG] [Thread-75670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] client lang: <none>
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] server lang: <none>
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] kex follows: False
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] Compression: none
2025-12-12T19:55:17.305 [DEBUG] [Thread-75670] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:55:17.365 [DEBUG] [Thread-75670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:55:17.366 [DEBUG] [Thread-75670] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:55:17.366 [DEBUG] [Thread-75670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:55:17.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:55:17.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:55:17.421 [DEBUG] [Thread-75670] [transport.py] [_log()] userauth is OK
2025-12-12T19:55:17.422 [DEBUG] [Thread-75670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:55:17.422 [DEBUG] [Thread-75670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:55:17.422 [DEBUG] [Thread-75670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:55:17.422 [DEBUG] [Thread-75670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:55:17.436 [INFO] [Thread-75670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:55:17.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:55:17.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:55:18.268 [DEBUG] [Thread-75670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:55:18.268 [DEBUG] [Thread-75670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:55:18.315 [DEBUG] [Thread-75670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:55:18.316 [DEBUG] [Thread-75670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:55:18.324 [DEBUG] [Thread-75670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:55:18.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:55:18.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:55:18.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:55:18.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:55:18.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:55:18.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:55:18.358 [DEBUG] [Thread-75670] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:55:25.817 [DEBUG] [Thread-75672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:38.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:38.047 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:40.856 [DEBUG] [Thread-75673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:55:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:55:48.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:55:48.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:55:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 55, 39), 8.97, 54.33, 0.0, 34.3, 12.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:55:49.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:55:39
2025-12-12T19:55:49.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:55:49.345 [DEBUG] [Thread-75674] [transport.py] [_log()] starting thread (client mode): 0xf57f2740
2025-12-12T19:55:49.345 [DEBUG] [Thread-75674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:55:49.365 [DEBUG] [Thread-75674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:55:49.365 [INFO] [Thread-75674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] client lang: <none>
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] server lang: <none>
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] kex follows: False
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:55:49.368 [DEBUG] [Thread-75674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:55:49.369 [DEBUG] [Thread-75674] [transport.py] [_log()] Compression: none
2025-12-12T19:55:49.369 [DEBUG] [Thread-75674] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:55:49.385 [DEBUG] [Thread-75674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:55:49.386 [DEBUG] [Thread-75674] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:55:49.386 [DEBUG] [Thread-75674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:55:49.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:55:49.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:55:49.388 [DEBUG] [Thread-75674] [transport.py] [_log()] userauth is OK
2025-12-12T19:55:49.388 [DEBUG] [Thread-75674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:55:49.389 [DEBUG] [Thread-75674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:55:49.389 [DEBUG] [Thread-75674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:55:49.389 [DEBUG] [Thread-75674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:55:49.412 [INFO] [Thread-75674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:55:49.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:55:50.048 [DEBUG] [Thread-75674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:55:50.048 [DEBUG] [Thread-75674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:55:50.049 [DEBUG] [Thread-75674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:55:50.090 [DEBUG] [Thread-75674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:55:50.090 [DEBUG] [Thread-75674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:55:50.093 [DEBUG] [Thread-75674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:55:50.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:55:50.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:55:50.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:55:50.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:55:50.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:55:50.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:55:50.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:55:50.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:55:50.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:55:50.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.746630 -999.00  +11.90  30.69     59   +4.10 1 1 2 1 1   652    0 4.01 -179.65 ----- 27.4 30.7 320.6 42.7 12.8 -24.3 12.7 -24.1 12.3 -22.3 12.7 -23.2
2025-12-12T19:55:50.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:55:50.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:55:50.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.746630
2025-12-12T19:55:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:55:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:55:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:55:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:55:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:55:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:55:39', tmtdew=8.97, humidity=54.33, cloud=0.0, wind=34.3, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:55:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:55:50.115 [DEBUG] [Thread-75674] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:55:50.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:55:50.211 [DEBUG] [Thread-75677] [transport.py] [_log()] starting thread (client mode): 0xf8155930
2025-12-12T19:55:50.211 [DEBUG] [Thread-75677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:55:50.226 [DEBUG] [Thread-75677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:55:50.226 [INFO] [Thread-75677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:55:50.234 [DEBUG] [Thread-75677] [transport.py] [_log()] client lang: <none>
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] server lang: <none>
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] kex follows: False
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] Compression: none
2025-12-12T19:55:50.235 [DEBUG] [Thread-75677] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:55:50.299 [DEBUG] [Thread-75677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:55:50.300 [DEBUG] [Thread-75677] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:55:50.300 [DEBUG] [Thread-75677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:55:50.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:55:50.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:55:50.358 [DEBUG] [Thread-75677] [transport.py] [_log()] userauth is OK
2025-12-12T19:55:50.358 [DEBUG] [Thread-75677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:55:50.358 [DEBUG] [Thread-75677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:55:50.358 [DEBUG] [Thread-75677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:55:50.358 [DEBUG] [Thread-75677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:55:50.384 [INFO] [Thread-75677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:55:50.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:55:50.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:55:51.244 [DEBUG] [Thread-75677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:55:51.244 [DEBUG] [Thread-75677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:55:51.295 [DEBUG] [Thread-75677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:55:51.295 [DEBUG] [Thread-75677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:55:51.304 [DEBUG] [Thread-75677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:55:51.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:55:51.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:55:51.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:55:51.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:55:51.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:55:51.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:55:51.340 [DEBUG] [Thread-75677] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:55:55.887 [DEBUG] [Thread-75679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:05.143 [DEBUG] [Thread-75680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:10.932 [DEBUG] [Thread-75681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:21.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:56:21.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:56:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 56, 11), 8.95, 54.41, 0.0, 33.26, 12.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:56:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:56:11
2025-12-12T19:56:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:56:22.334 [DEBUG] [Thread-75682] [transport.py] [_log()] starting thread (client mode): 0xf57f2ce0
2025-12-12T19:56:22.334 [DEBUG] [Thread-75682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:56:22.353 [DEBUG] [Thread-75682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:56:22.353 [INFO] [Thread-75682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] client lang: <none>
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] server lang: <none>
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] kex follows: False
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:56:22.354 [DEBUG] [Thread-75682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:56:22.355 [DEBUG] [Thread-75682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:56:22.355 [DEBUG] [Thread-75682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:56:22.355 [DEBUG] [Thread-75682] [transport.py] [_log()] Compression: none
2025-12-12T19:56:22.355 [DEBUG] [Thread-75682] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:56:22.363 [DEBUG] [Thread-75682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:56:22.364 [DEBUG] [Thread-75682] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:56:22.364 [DEBUG] [Thread-75682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:56:22.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:56:22.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:56:22.366 [DEBUG] [Thread-75682] [transport.py] [_log()] userauth is OK
2025-12-12T19:56:22.366 [DEBUG] [Thread-75682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:56:22.366 [DEBUG] [Thread-75682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:56:22.367 [DEBUG] [Thread-75682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:56:22.367 [DEBUG] [Thread-75682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:56:22.385 [INFO] [Thread-75682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:56:22.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:56:23.026 [DEBUG] [Thread-75682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:56:23.026 [DEBUG] [Thread-75682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:56:23.026 [DEBUG] [Thread-75682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:56:23.067 [DEBUG] [Thread-75682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:56:23.068 [DEBUG] [Thread-75682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:56:23.071 [DEBUG] [Thread-75682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:56:23.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:56:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:56:23.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:56:23.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:56:23.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:56:23.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:56:23.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:56:23.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:56:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:56:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.747324 -999.00  +12.00  33.65     58   +4.20 1 1 2 1 1   620    0 3.57 -178.16 ----- 37.3 33.6 325.2 42.9 12.8 -24.3 12.6 -24.0 12.3 -22.2 12.6 -22.9
2025-12-12T19:56:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:56:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:56:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.747324
2025-12-12T19:56:23.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:56:23.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:56:23.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:56:23.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:56:23.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:56:23.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:56:11', tmtdew=8.95, humidity=54.41, cloud=0.0, wind=33.26, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:56:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:56:23.095 [DEBUG] [Thread-75682] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:56:23.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:56:23.192 [DEBUG] [Thread-75685] [transport.py] [_log()] starting thread (client mode): 0xf57f1930
2025-12-12T19:56:23.192 [DEBUG] [Thread-75685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:56:23.207 [DEBUG] [Thread-75685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:56:23.207 [INFO] [Thread-75685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:56:23.214 [DEBUG] [Thread-75685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:56:23.215 [DEBUG] [Thread-75685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] client lang: <none>
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] server lang: <none>
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] kex follows: False
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] Compression: none
2025-12-12T19:56:23.216 [DEBUG] [Thread-75685] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:56:23.273 [DEBUG] [Thread-75685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:56:23.274 [DEBUG] [Thread-75685] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:56:23.274 [DEBUG] [Thread-75685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:56:23.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:56:23.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:56:23.329 [DEBUG] [Thread-75685] [transport.py] [_log()] userauth is OK
2025-12-12T19:56:23.330 [DEBUG] [Thread-75685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:56:23.330 [DEBUG] [Thread-75685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:56:23.330 [DEBUG] [Thread-75685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:56:23.330 [DEBUG] [Thread-75685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:56:23.356 [INFO] [Thread-75685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:56:23.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:56:23.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:56:24.185 [DEBUG] [Thread-75685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:56:24.186 [DEBUG] [Thread-75685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:56:24.234 [DEBUG] [Thread-75685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:56:24.234 [DEBUG] [Thread-75685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:56:24.244 [DEBUG] [Thread-75685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:56:24.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:56:24.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:56:24.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:56:24.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:56:24.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:56:24.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:56:24.292 [DEBUG] [Thread-75685] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:56:25.958 [DEBUG] [Thread-75687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:41.006 [DEBUG] [Thread-75688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:43.384 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:43.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:54.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:56:54.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:56:54.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:56:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 56, 43), 8.87, 54.51, 0.0, 31.28, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:56:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:56:43
2025-12-12T19:56:55.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:56:55.256 [DEBUG] [Thread-75689] [transport.py] [_log()] starting thread (client mode): 0xf81c0640
2025-12-12T19:56:55.256 [DEBUG] [Thread-75689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:56:55.277 [DEBUG] [Thread-75689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:56:55.278 [INFO] [Thread-75689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] client lang: <none>
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] server lang: <none>
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] kex follows: False
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:56:55.281 [DEBUG] [Thread-75689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:56:55.282 [DEBUG] [Thread-75689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:56:55.282 [DEBUG] [Thread-75689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:56:55.282 [DEBUG] [Thread-75689] [transport.py] [_log()] Compression: none
2025-12-12T19:56:55.282 [DEBUG] [Thread-75689] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:56:55.299 [DEBUG] [Thread-75689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:56:55.300 [DEBUG] [Thread-75689] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:56:55.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:56:55.300 [DEBUG] [Thread-75689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:56:55.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:56:55.302 [DEBUG] [Thread-75689] [transport.py] [_log()] userauth is OK
2025-12-12T19:56:55.303 [DEBUG] [Thread-75689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:56:55.303 [DEBUG] [Thread-75689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:56:55.303 [DEBUG] [Thread-75689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:56:55.303 [DEBUG] [Thread-75689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:56:55.326 [INFO] [Thread-75689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:56:55.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:56:55.941 [DEBUG] [Thread-75689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:56:55.941 [DEBUG] [Thread-75689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:56:55.941 [DEBUG] [Thread-75689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:56:55.982 [DEBUG] [Thread-75689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:56:55.982 [DEBUG] [Thread-75689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:56:55.985 [DEBUG] [Thread-75689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:56:55.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:56:55.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:56:56.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:56:56.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:56:56.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:56:56.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:56:56.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:56:56.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:56:56.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:56:56.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.747672 -999.00  +12.00  28.48     58   +4.20 1 1 1 1 1   602    0 3.82 -172.02 ----- 28.2 28.5 317.2 35.9 12.8 -24.3 12.6 -24.0 12.3 -22.3 12.6 -23.0
2025-12-12T19:56:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:56:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:56:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.747672
2025-12-12T19:56:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:56:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:56:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:56:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:56:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:56:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:56:43', tmtdew=8.87, humidity=54.51, cloud=0.0, wind=31.28, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:56:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:56:56.010 [DEBUG] [Thread-75689] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:56:56.032 [DEBUG] [Thread-75692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:56:56.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:56:56.105 [DEBUG] [Thread-75693] [transport.py] [_log()] starting thread (client mode): 0xfabc4fa0
2025-12-12T19:56:56.105 [DEBUG] [Thread-75693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:56:56.120 [DEBUG] [Thread-75693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:56:56.120 [INFO] [Thread-75693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:56:56.127 [DEBUG] [Thread-75693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:56:56.127 [DEBUG] [Thread-75693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:56:56.127 [DEBUG] [Thread-75693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] client lang: <none>
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] server lang: <none>
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] kex follows: False
2025-12-12T19:56:56.128 [DEBUG] [Thread-75693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:56:56.129 [DEBUG] [Thread-75693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:56:56.129 [DEBUG] [Thread-75693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:56:56.129 [DEBUG] [Thread-75693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:56:56.129 [DEBUG] [Thread-75693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:56:56.129 [DEBUG] [Thread-75693] [transport.py] [_log()] Compression: none
2025-12-12T19:56:56.129 [DEBUG] [Thread-75693] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:56:56.185 [DEBUG] [Thread-75693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:56:56.186 [DEBUG] [Thread-75693] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:56:56.186 [DEBUG] [Thread-75693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:56:56.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:56:56.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:56:56.241 [DEBUG] [Thread-75693] [transport.py] [_log()] userauth is OK
2025-12-12T19:56:56.242 [DEBUG] [Thread-75693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:56:56.242 [DEBUG] [Thread-75693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:56:56.242 [DEBUG] [Thread-75693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:56:56.242 [DEBUG] [Thread-75693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:56:56.261 [INFO] [Thread-75693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:56:56.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:56:56.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:56:57.105 [DEBUG] [Thread-75693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:56:57.105 [DEBUG] [Thread-75693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:56:57.153 [DEBUG] [Thread-75693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:56:57.153 [DEBUG] [Thread-75693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:56:57.161 [DEBUG] [Thread-75693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:56:57.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:56:57.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:56:57.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:56:57.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:56:57.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:56:57.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:56:57.195 [DEBUG] [Thread-75693] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:57:05.199 [DEBUG] [Thread-75695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:57:11.067 [DEBUG] [Thread-75696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:57:26.096 [DEBUG] [Thread-75697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:57:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:57:27.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:57:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:57:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 57, 15), 8.83, 54.64, 0.0, 33.68, 12.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:57:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:57:15
2025-12-12T19:57:28.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:57:28.191 [DEBUG] [Thread-75698] [transport.py] [_log()] starting thread (client mode): 0xf81c2fb0
2025-12-12T19:57:28.191 [DEBUG] [Thread-75698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:57:28.212 [DEBUG] [Thread-75698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:57:28.212 [INFO] [Thread-75698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] client lang: <none>
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] server lang: <none>
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] kex follows: False
2025-12-12T19:57:28.215 [DEBUG] [Thread-75698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:57:28.216 [DEBUG] [Thread-75698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:57:28.216 [DEBUG] [Thread-75698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:57:28.216 [DEBUG] [Thread-75698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:57:28.216 [DEBUG] [Thread-75698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:57:28.216 [DEBUG] [Thread-75698] [transport.py] [_log()] Compression: none
2025-12-12T19:57:28.216 [DEBUG] [Thread-75698] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:57:28.231 [DEBUG] [Thread-75698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:57:28.231 [DEBUG] [Thread-75698] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:57:28.231 [DEBUG] [Thread-75698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:57:28.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:57:28.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:57:28.232 [DEBUG] [Thread-75698] [transport.py] [_log()] userauth is OK
2025-12-12T19:57:28.232 [DEBUG] [Thread-75698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:57:28.232 [DEBUG] [Thread-75698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:57:28.232 [DEBUG] [Thread-75698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:57:28.232 [DEBUG] [Thread-75698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:57:28.250 [INFO] [Thread-75698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:57:28.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:57:28.892 [DEBUG] [Thread-75698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:57:28.893 [DEBUG] [Thread-75698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:57:28.893 [DEBUG] [Thread-75698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:57:28.934 [DEBUG] [Thread-75698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:57:28.934 [DEBUG] [Thread-75698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:57:28.936 [DEBUG] [Thread-75698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:57:28.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:57:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:57:28.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:57:28.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:57:28.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:57:28.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.748019 -999.00  +11.90  35.14     59   +4.20 1 1 2 1 1   585    0 4.76 -141.41 ----- 38.5 35.1 315.8 43.2 12.7 -24.2 12.6 -24.1 12.3 -22.2 12.6 -23.2
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:57:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.748019
2025-12-12T19:57:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:57:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:57:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:57:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:57:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-12T19:57:28.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:57:15', tmtdew=8.83, humidity=54.64, cloud=0.0, wind=33.68, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:57:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:57:28.954 [DEBUG] [Thread-75698] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:57:29.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:57:29.040 [DEBUG] [Thread-75701] [transport.py] [_log()] starting thread (client mode): 0xf81c0c40
2025-12-12T19:57:29.040 [DEBUG] [Thread-75701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:57:29.054 [DEBUG] [Thread-75701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:57:29.054 [INFO] [Thread-75701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] client lang: <none>
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] server lang: <none>
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] kex follows: False
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:57:29.065 [DEBUG] [Thread-75701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:57:29.066 [DEBUG] [Thread-75701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:57:29.066 [DEBUG] [Thread-75701] [transport.py] [_log()] Compression: none
2025-12-12T19:57:29.066 [DEBUG] [Thread-75701] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:57:29.120 [DEBUG] [Thread-75701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:57:29.121 [DEBUG] [Thread-75701] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:57:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:57:29.121 [DEBUG] [Thread-75701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:57:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:57:29.178 [DEBUG] [Thread-75701] [transport.py] [_log()] userauth is OK
2025-12-12T19:57:29.178 [DEBUG] [Thread-75701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:57:29.178 [DEBUG] [Thread-75701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:57:29.178 [DEBUG] [Thread-75701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:57:29.178 [DEBUG] [Thread-75701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:57:29.193 [INFO] [Thread-75701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:57:29.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:57:29.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:57:30.036 [DEBUG] [Thread-75701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:57:30.036 [DEBUG] [Thread-75701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:57:30.083 [DEBUG] [Thread-75701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:57:30.084 [DEBUG] [Thread-75701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:57:30.095 [DEBUG] [Thread-75701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:57:30.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:57:30.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:57:30.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:57:30.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:57:30.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:57:30.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:57:30.127 [DEBUG] [Thread-75701] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:57:41.125 [DEBUG] [Thread-75703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:57:49.592 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:57:49.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:57:56.171 [DEBUG] [Thread-75704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:00.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:58:00.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:58:00.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:58:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 57, 47), 8.79, 54.79, 0.0, 34.95, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:58:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:57:47
2025-12-12T19:58:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:58:01.104 [DEBUG] [Thread-75705] [transport.py] [_log()] starting thread (client mode): 0xf578a980
2025-12-12T19:58:01.104 [DEBUG] [Thread-75705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:58:01.123 [DEBUG] [Thread-75705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:58:01.123 [INFO] [Thread-75705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:58:01.126 [DEBUG] [Thread-75705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] client lang: <none>
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] server lang: <none>
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] kex follows: False
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] Compression: none
2025-12-12T19:58:01.127 [DEBUG] [Thread-75705] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:58:01.142 [DEBUG] [Thread-75705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:58:01.142 [DEBUG] [Thread-75705] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:58:01.142 [DEBUG] [Thread-75705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:58:01.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:58:01.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:58:01.143 [DEBUG] [Thread-75705] [transport.py] [_log()] userauth is OK
2025-12-12T19:58:01.143 [DEBUG] [Thread-75705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:58:01.143 [DEBUG] [Thread-75705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:58:01.143 [DEBUG] [Thread-75705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:58:01.143 [DEBUG] [Thread-75705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:58:01.154 [INFO] [Thread-75705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:58:01.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:58:01.779 [DEBUG] [Thread-75705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:58:01.779 [DEBUG] [Thread-75705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:58:01.780 [DEBUG] [Thread-75705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:58:01.820 [DEBUG] [Thread-75705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:58:01.820 [DEBUG] [Thread-75705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:58:01.823 [DEBUG] [Thread-75705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:58:01.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:58:01.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:58:01.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:58:01.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:58:01.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:58:01.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:58:01.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:58:01.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:58:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:58:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.748366 -999.00  +11.90  36.09     59   +4.20 1 2 2 1 1   566    0 4.41 -150.31 ----- 35.3 36.1 314.2 45.7 12.7 -24.2 12.6 -24.0 12.2 -22.0 12.6 -23.1
2025-12-12T19:58:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:58:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:58:01.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.748366
2025-12-12T19:58:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:58:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:58:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:58:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:58:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T19:58:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:57:47', tmtdew=8.79, humidity=54.79, cloud=0.0, wind=34.95, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:57:38.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:58:01.848 [DEBUG] [Thread-75705] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:58:01.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:58:01.945 [DEBUG] [Thread-75708] [transport.py] [_log()] starting thread (client mode): 0xf575d8d0
2025-12-12T19:58:01.945 [DEBUG] [Thread-75708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:58:01.960 [DEBUG] [Thread-75708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:58:01.960 [INFO] [Thread-75708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:01.968 [DEBUG] [Thread-75708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] client lang: <none>
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] server lang: <none>
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] kex follows: False
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:58:01.969 [DEBUG] [Thread-75708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:58:01.970 [DEBUG] [Thread-75708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:58:01.970 [DEBUG] [Thread-75708] [transport.py] [_log()] Compression: none
2025-12-12T19:58:01.970 [DEBUG] [Thread-75708] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:58:02.030 [DEBUG] [Thread-75708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:58:02.031 [DEBUG] [Thread-75708] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:58:02.031 [DEBUG] [Thread-75708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:58:02.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:58:02.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:58:02.086 [DEBUG] [Thread-75708] [transport.py] [_log()] userauth is OK
2025-12-12T19:58:02.087 [DEBUG] [Thread-75708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:58:02.087 [DEBUG] [Thread-75708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:58:02.087 [DEBUG] [Thread-75708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:58:02.087 [DEBUG] [Thread-75708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:58:02.106 [INFO] [Thread-75708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:58:02.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:58:02.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:58:02.984 [DEBUG] [Thread-75708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:58:02.985 [DEBUG] [Thread-75708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:58:03.033 [DEBUG] [Thread-75708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:58:03.033 [DEBUG] [Thread-75708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:58:03.042 [DEBUG] [Thread-75708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:58:03.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:58:03.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:58:03.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:58:03.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:58:03.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:58:03.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:58:03.076 [DEBUG] [Thread-75708] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:58:05.256 [DEBUG] [Thread-75710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:11.198 [DEBUG] [Thread-75711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:26.237 [DEBUG] [Thread-75712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:33.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:58:33.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:58:33.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:58:33.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 58, 19), 8.81, 54.76, 0.0, 36.45, 12.17, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:58:33.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:58:19
2025-12-12T19:58:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:58:34.071 [DEBUG] [Thread-75713] [transport.py] [_log()] starting thread (client mode): 0xf57f3790
2025-12-12T19:58:34.072 [DEBUG] [Thread-75713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:58:34.093 [DEBUG] [Thread-75713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:58:34.093 [INFO] [Thread-75713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] client lang: <none>
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] server lang: <none>
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] kex follows: False
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:58:34.096 [DEBUG] [Thread-75713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:58:34.097 [DEBUG] [Thread-75713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:58:34.097 [DEBUG] [Thread-75713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:58:34.097 [DEBUG] [Thread-75713] [transport.py] [_log()] Compression: none
2025-12-12T19:58:34.097 [DEBUG] [Thread-75713] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:58:34.115 [DEBUG] [Thread-75713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:58:34.116 [DEBUG] [Thread-75713] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:58:34.116 [DEBUG] [Thread-75713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:58:34.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:58:34.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:58:34.118 [DEBUG] [Thread-75713] [transport.py] [_log()] userauth is OK
2025-12-12T19:58:34.118 [DEBUG] [Thread-75713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:58:34.118 [DEBUG] [Thread-75713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:58:34.119 [DEBUG] [Thread-75713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:58:34.119 [DEBUG] [Thread-75713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:58:34.143 [INFO] [Thread-75713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:58:34.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:58:34.764 [DEBUG] [Thread-75713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:58:34.764 [DEBUG] [Thread-75713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:58:34.764 [DEBUG] [Thread-75713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:58:34.805 [DEBUG] [Thread-75713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:58:34.805 [DEBUG] [Thread-75713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:58:34.808 [DEBUG] [Thread-75713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:58:34.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:58:34.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:58:34.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:58:34.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:58:34.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:58:34.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:58:34.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:58:34.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:58:34.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:58:34.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.748713 -999.00  +11.90  34.07     59   +4.20 1 2 2 1 1   547    0 4.86 -135.09 ----- 37.2 34.1 318.6 44.5 12.6 -24.2 12.6 -23.8 12.2 -22.2 12.6 -23.0
2025-12-12T19:58:34.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:58:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:58:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.748713
2025-12-12T19:58:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:58:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:58:34.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:58:34.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:58:34.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T19:58:34.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:58:19', tmtdew=8.81, humidity=54.76, cloud=0.0, wind=36.45, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:58:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:58:34.837 [DEBUG] [Thread-75713] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:58:34.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:58:34.933 [DEBUG] [Thread-75716] [transport.py] [_log()] starting thread (client mode): 0xf57f3070
2025-12-12T19:58:34.934 [DEBUG] [Thread-75716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:58:34.948 [DEBUG] [Thread-75716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:58:34.949 [INFO] [Thread-75716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] client lang: <none>
2025-12-12T19:58:34.956 [DEBUG] [Thread-75716] [transport.py] [_log()] server lang: <none>
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] kex follows: False
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] Compression: none
2025-12-12T19:58:34.957 [DEBUG] [Thread-75716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:58:35.014 [DEBUG] [Thread-75716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:58:35.015 [DEBUG] [Thread-75716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:58:35.015 [DEBUG] [Thread-75716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:58:35.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:58:35.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:58:35.071 [DEBUG] [Thread-75716] [transport.py] [_log()] userauth is OK
2025-12-12T19:58:35.071 [DEBUG] [Thread-75716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:58:35.071 [DEBUG] [Thread-75716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:58:35.071 [DEBUG] [Thread-75716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:58:35.071 [DEBUG] [Thread-75716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:58:35.091 [INFO] [Thread-75716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:58:35.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:58:35.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:58:35.949 [DEBUG] [Thread-75716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:58:35.949 [DEBUG] [Thread-75716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:58:35.997 [DEBUG] [Thread-75716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:58:35.997 [DEBUG] [Thread-75716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:58:36.006 [DEBUG] [Thread-75716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:58:36.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:58:36.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:58:36.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:58:36.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:58:36.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:58:36.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:58:36.041 [DEBUG] [Thread-75716] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:58:41.271 [DEBUG] [Thread-75718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:56.322 [DEBUG] [Thread-75719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:58.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:58:58.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:05.315 [DEBUG] [Thread-75720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:59:06.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:59:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:59:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 58, 52), 8.8, 54.76, 0.0, 34.58, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:59:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:58:52
2025-12-12T19:59:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:59:07.037 [DEBUG] [Thread-75721] [transport.py] [_log()] starting thread (client mode): 0xf8154130
2025-12-12T19:59:07.037 [DEBUG] [Thread-75721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:59:07.057 [DEBUG] [Thread-75721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:59:07.058 [INFO] [Thread-75721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] client lang: <none>
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] server lang: <none>
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] kex follows: False
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:59:07.061 [DEBUG] [Thread-75721] [transport.py] [_log()] Compression: none
2025-12-12T19:59:07.062 [DEBUG] [Thread-75721] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:59:07.077 [DEBUG] [Thread-75721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:59:07.077 [DEBUG] [Thread-75721] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:59:07.078 [DEBUG] [Thread-75721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:59:07.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:59:07.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:59:07.079 [DEBUG] [Thread-75721] [transport.py] [_log()] userauth is OK
2025-12-12T19:59:07.079 [DEBUG] [Thread-75721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:59:07.079 [DEBUG] [Thread-75721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:59:07.079 [DEBUG] [Thread-75721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:59:07.079 [DEBUG] [Thread-75721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:59:07.096 [INFO] [Thread-75721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:59:07.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:59:07.777 [DEBUG] [Thread-75721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:59:07.777 [DEBUG] [Thread-75721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:59:07.777 [DEBUG] [Thread-75721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:59:07.818 [DEBUG] [Thread-75721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:59:07.818 [DEBUG] [Thread-75721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:59:07.820 [DEBUG] [Thread-75721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:59:07.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:59:07.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:59:07.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:59:07.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:59:07.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:59:07.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:59:07.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:59:07.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:59:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:59:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.749060 -999.00  +11.90  30.96     59   +4.20 1 2 2 1 1   528    0 4.45 -139.14 ----- 30.6 31.0 310.6 38.4 12.7 -24.2 12.5 -23.8 12.2 -22.1 12.6 -23.0
2025-12-12T19:59:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:59:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:59:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.749060
2025-12-12T19:59:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:59:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:59:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:59:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:59:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T19:59:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:58:52', tmtdew=8.8, humidity=54.76, cloud=0.0, wind=34.58, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:58:38.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:59:07.851 [DEBUG] [Thread-75721] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:59:07.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:59:07.948 [DEBUG] [Thread-75724] [transport.py] [_log()] starting thread (client mode): 0xf81c1000
2025-12-12T19:59:07.948 [DEBUG] [Thread-75724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:59:07.963 [DEBUG] [Thread-75724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:59:07.963 [INFO] [Thread-75724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:59:07.970 [DEBUG] [Thread-75724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:59:07.970 [DEBUG] [Thread-75724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] client lang: <none>
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] server lang: <none>
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] kex follows: False
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] Compression: none
2025-12-12T19:59:07.971 [DEBUG] [Thread-75724] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:59:08.030 [DEBUG] [Thread-75724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:59:08.031 [DEBUG] [Thread-75724] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:59:08.031 [DEBUG] [Thread-75724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:59:08.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:59:08.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:59:08.087 [DEBUG] [Thread-75724] [transport.py] [_log()] userauth is OK
2025-12-12T19:59:08.087 [DEBUG] [Thread-75724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:59:08.087 [DEBUG] [Thread-75724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:59:08.087 [DEBUG] [Thread-75724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:59:08.087 [DEBUG] [Thread-75724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:59:08.107 [INFO] [Thread-75724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:59:08.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:59:08.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:59:08.956 [DEBUG] [Thread-75724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:59:08.956 [DEBUG] [Thread-75724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:59:09.004 [DEBUG] [Thread-75724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:59:09.004 [DEBUG] [Thread-75724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:59:09.013 [DEBUG] [Thread-75724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:59:09.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:59:09.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:59:09.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:59:09.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:59:09.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:59:09.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:59:09.047 [DEBUG] [Thread-75724] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:59:11.352 [DEBUG] [Thread-75726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:26.391 [DEBUG] [Thread-75727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:39.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T19:59:39.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T19:59:39.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T19:59:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 59, 24), 8.78, 54.84, 0.0, 33.66, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-12T19:59:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:59:24
2025-12-12T19:59:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T19:59:40.027 [DEBUG] [Thread-75728] [transport.py] [_log()] starting thread (client mode): 0xfabc6470
2025-12-12T19:59:40.028 [DEBUG] [Thread-75728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:59:40.048 [DEBUG] [Thread-75728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T19:59:40.048 [INFO] [Thread-75728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] client lang: <none>
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] server lang: <none>
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] kex follows: False
2025-12-12T19:59:40.051 [DEBUG] [Thread-75728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:59:40.052 [DEBUG] [Thread-75728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:59:40.052 [DEBUG] [Thread-75728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:59:40.052 [DEBUG] [Thread-75728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:59:40.052 [DEBUG] [Thread-75728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:59:40.052 [DEBUG] [Thread-75728] [transport.py] [_log()] Compression: none
2025-12-12T19:59:40.052 [DEBUG] [Thread-75728] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:59:40.067 [DEBUG] [Thread-75728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:59:40.068 [DEBUG] [Thread-75728] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:59:40.068 [DEBUG] [Thread-75728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T19:59:40.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T19:59:40.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:59:40.109 [DEBUG] [Thread-75728] [transport.py] [_log()] userauth is OK
2025-12-12T19:59:40.109 [DEBUG] [Thread-75728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:59:40.109 [DEBUG] [Thread-75728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:59:40.109 [DEBUG] [Thread-75728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T19:59:40.109 [DEBUG] [Thread-75728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:59:40.143 [INFO] [Thread-75728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:59:40.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:59:40.815 [DEBUG] [Thread-75728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:59:40.815 [DEBUG] [Thread-75728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:59:40.816 [DEBUG] [Thread-75728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T19:59:40.856 [DEBUG] [Thread-75728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:59:40.856 [DEBUG] [Thread-75728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:59:40.859 [DEBUG] [Thread-75728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:59:40.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:59:40.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T19:59:40.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T19:59:40.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T19:59:40.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:59:40.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T19:59:40.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:59:40.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:59:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T19:59:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.749407 -999.00  +11.90  29.46     59   +4.20 1 2 1 1 1   509    0 4.44 -145.93 ----- 26.6 29.5 325.0 39.7 12.7 -24.1 12.6 -23.7 12.2 -22.0 12.5 -22.9
2025-12-12T19:59:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T19:59:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T19:59:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.749407
2025-12-12T19:59:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T19:59:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T19:59:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T19:59:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T19:59:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T19:59:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:59:24', tmtdew=8.78, humidity=54.84, cloud=0.0, wind=33.66, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:59:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T19:59:40.881 [DEBUG] [Thread-75728] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:59:40.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T19:59:40.977 [DEBUG] [Thread-75731] [transport.py] [_log()] starting thread (client mode): 0xf5703430
2025-12-12T19:59:40.977 [DEBUG] [Thread-75731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T19:59:40.992 [DEBUG] [Thread-75731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T19:59:40.992 [INFO] [Thread-75731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T19:59:40.999 [DEBUG] [Thread-75731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T19:59:40.999 [DEBUG] [Thread-75731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T19:59:40.999 [DEBUG] [Thread-75731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T19:59:40.999 [DEBUG] [Thread-75731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:40.999 [DEBUG] [Thread-75731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] client lang: <none>
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] server lang: <none>
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] kex follows: False
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] Compression: none
2025-12-12T19:59:41.000 [DEBUG] [Thread-75731] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T19:59:41.058 [DEBUG] [Thread-75731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T19:59:41.059 [DEBUG] [Thread-75731] [transport.py] [_log()] Switch to new keys ...
2025-12-12T19:59:41.059 [DEBUG] [Thread-75731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T19:59:41.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T19:59:41.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T19:59:41.112 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:41.115 [DEBUG] [Thread-75731] [transport.py] [_log()] userauth is OK
2025-12-12T19:59:41.115 [DEBUG] [Thread-75731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T19:59:41.115 [DEBUG] [Thread-75731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T19:59:41.115 [DEBUG] [Thread-75731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T19:59:41.115 [DEBUG] [Thread-75731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T19:59:41.133 [INFO] [Thread-75731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T19:59:41.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T19:59:41.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T19:59:41.422 [DEBUG] [Thread-75733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:41.955 [DEBUG] [Thread-75731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T19:59:41.956 [DEBUG] [Thread-75731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T19:59:42.004 [DEBUG] [Thread-75731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T19:59:42.004 [DEBUG] [Thread-75731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T19:59:42.013 [DEBUG] [Thread-75731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T19:59:42.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T19:59:42.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T19:59:42.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T19:59:42.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T19:59:42.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T19:59:42.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T19:59:42.047 [DEBUG] [Thread-75731] [transport.py] [_log()] EOF in transport thread
2025-12-12T19:59:47.265 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T19:59:56.462 [DEBUG] [Thread-75734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:04.006 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:04.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:05.368 [DEBUG] [Thread-75735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:11.487 [DEBUG] [Thread-75736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:00:12.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:00:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:00:12.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 19, 59, 56), 8.79, 54.81, 0.0, 34.92, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:00:12.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 19:59:56
2025-12-12T20:00:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:00:13.042 [DEBUG] [Thread-75737] [transport.py] [_log()] starting thread (client mode): 0xf5788670
2025-12-12T20:00:13.042 [DEBUG] [Thread-75737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:00:13.061 [DEBUG] [Thread-75737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:00:13.061 [INFO] [Thread-75737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:00:13.064 [DEBUG] [Thread-75737] [transport.py] [_log()] client lang: <none>
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] server lang: <none>
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] kex follows: False
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] Compression: none
2025-12-12T20:00:13.065 [DEBUG] [Thread-75737] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:00:13.083 [DEBUG] [Thread-75737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:00:13.083 [DEBUG] [Thread-75737] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:00:13.084 [DEBUG] [Thread-75737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:00:13.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:00:13.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:00:13.085 [DEBUG] [Thread-75737] [transport.py] [_log()] userauth is OK
2025-12-12T20:00:13.086 [DEBUG] [Thread-75737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:00:13.086 [DEBUG] [Thread-75737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:00:13.086 [DEBUG] [Thread-75737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:00:13.086 [DEBUG] [Thread-75737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:00:13.106 [INFO] [Thread-75737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:00:13.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:00:14.166 [DEBUG] [Thread-75737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:00:14.166 [DEBUG] [Thread-75737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:00:14.166 [DEBUG] [Thread-75737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:00:14.208 [DEBUG] [Thread-75737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:00:14.208 [DEBUG] [Thread-75737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:00:14.211 [DEBUG] [Thread-75737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:00:14.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:00:14.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:00:14.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:00:14.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:00:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:00:14.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:00:14.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:00:14.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:00:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:00:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.749755 -999.00  +12.00  33.03     59   +4.30 1 2 2 1 1   489    0 4.58 -133.30 ----- 31.1 33.0 315.8 45.2 12.7 -24.2 12.5 -23.7 12.2 -21.9 12.6 -22.8
2025-12-12T20:00:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:00:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:00:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.749755
2025-12-12T20:00:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:00:14.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:00:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:00:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:00:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:00:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T19:59:56', tmtdew=8.79, humidity=54.81, cloud=0.0, wind=34.92, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T17:59:38.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:00:14.239 [DEBUG] [Thread-75737] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:00:14.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:00:14.335 [DEBUG] [Thread-75740] [transport.py] [_log()] starting thread (client mode): 0xf575c1c0
2025-12-12T20:00:14.336 [DEBUG] [Thread-75740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:00:14.350 [DEBUG] [Thread-75740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:00:14.350 [INFO] [Thread-75740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:00:14.358 [DEBUG] [Thread-75740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:00:14.358 [DEBUG] [Thread-75740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:00:14.358 [DEBUG] [Thread-75740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:00:14.358 [DEBUG] [Thread-75740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:14.358 [DEBUG] [Thread-75740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:14.358 [DEBUG] [Thread-75740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] client lang: <none>
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] server lang: <none>
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] kex follows: False
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] Compression: none
2025-12-12T20:00:14.359 [DEBUG] [Thread-75740] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:00:14.418 [DEBUG] [Thread-75740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:00:14.419 [DEBUG] [Thread-75740] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:00:14.419 [DEBUG] [Thread-75740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:00:14.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:00:14.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:00:14.478 [DEBUG] [Thread-75740] [transport.py] [_log()] userauth is OK
2025-12-12T20:00:14.478 [DEBUG] [Thread-75740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:00:14.478 [DEBUG] [Thread-75740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:00:14.479 [DEBUG] [Thread-75740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:00:14.479 [DEBUG] [Thread-75740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:00:14.497 [INFO] [Thread-75740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:00:14.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:00:14.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:00:14.691 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:15.339 [DEBUG] [Thread-75740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:00:15.339 [DEBUG] [Thread-75740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:00:15.387 [DEBUG] [Thread-75740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:00:15.387 [DEBUG] [Thread-75740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:00:15.396 [DEBUG] [Thread-75740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:00:15.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:00:15.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:00:15.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:00:15.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:00:15.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:00:15.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:00:15.431 [DEBUG] [Thread-75740] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:00:26.516 [DEBUG] [Thread-75742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:40.081 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:41.561 [DEBUG] [Thread-75743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:45.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:00:45.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:00:45.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:00:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 0, 28), 8.76, 54.91, 0.0, 33.81, 12.09, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:00:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:00:28
2025-12-12T20:00:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:00:46.420 [DEBUG] [Thread-75744] [transport.py] [_log()] starting thread (client mode): 0xf575cbe0
2025-12-12T20:00:46.420 [DEBUG] [Thread-75744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:00:46.440 [DEBUG] [Thread-75744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:00:46.440 [INFO] [Thread-75744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] client lang: <none>
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] server lang: <none>
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] kex follows: False
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] Compression: none
2025-12-12T20:00:46.442 [DEBUG] [Thread-75744] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:00:46.462 [DEBUG] [Thread-75744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:00:46.462 [DEBUG] [Thread-75744] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:00:46.462 [DEBUG] [Thread-75744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:00:46.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:00:46.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:00:46.464 [DEBUG] [Thread-75744] [transport.py] [_log()] userauth is OK
2025-12-12T20:00:46.465 [DEBUG] [Thread-75744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:00:46.465 [DEBUG] [Thread-75744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:00:46.465 [DEBUG] [Thread-75744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:00:46.465 [DEBUG] [Thread-75744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:00:46.488 [INFO] [Thread-75744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:00:46.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:00:47.145 [DEBUG] [Thread-75744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:00:47.145 [DEBUG] [Thread-75744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:00:47.145 [DEBUG] [Thread-75744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:00:47.186 [DEBUG] [Thread-75744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:00:47.186 [DEBUG] [Thread-75744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:00:47.189 [DEBUG] [Thread-75744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:00:47.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:00:47.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:00:47.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:00:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:00:47.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:00:47.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:00:47.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:00:47.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:00:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:00:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.750102 -999.00  +11.90  35.57     59   +4.30 1 2 2 1 1   469    0 4.72 -131.40 ----- 29.8 35.6 318.2 40.5 12.6 -24.0 12.5 -23.7 12.2 -21.9 12.5 -22.8
2025-12-12T20:00:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:00:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:00:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.750102
2025-12-12T20:00:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:00:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:00:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:00:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:00:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:00:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:00:28', tmtdew=8.76, humidity=54.91, cloud=0.0, wind=33.81, temperature=12.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:00:08.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:00:47.219 [DEBUG] [Thread-75744] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:00:47.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:00:47.317 [DEBUG] [Thread-75747] [transport.py] [_log()] starting thread (client mode): 0xf5771e40
2025-12-12T20:00:47.317 [DEBUG] [Thread-75747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:00:47.332 [DEBUG] [Thread-75747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:00:47.332 [INFO] [Thread-75747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:00:47.339 [DEBUG] [Thread-75747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:00:47.339 [DEBUG] [Thread-75747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] client lang: <none>
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] server lang: <none>
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] kex follows: False
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] Compression: none
2025-12-12T20:00:47.340 [DEBUG] [Thread-75747] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:00:47.399 [DEBUG] [Thread-75747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:00:47.399 [DEBUG] [Thread-75747] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:00:47.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:00:47.400 [DEBUG] [Thread-75747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:00:47.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:00:47.459 [DEBUG] [Thread-75747] [transport.py] [_log()] userauth is OK
2025-12-12T20:00:47.459 [DEBUG] [Thread-75747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:00:47.459 [DEBUG] [Thread-75747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:00:47.460 [DEBUG] [Thread-75747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:00:47.460 [DEBUG] [Thread-75747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:00:47.479 [INFO] [Thread-75747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:00:47.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:00:47.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:00:48.315 [DEBUG] [Thread-75747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:00:48.315 [DEBUG] [Thread-75747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:00:48.363 [DEBUG] [Thread-75747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:00:48.363 [DEBUG] [Thread-75747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:00:48.372 [DEBUG] [Thread-75747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:00:48.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:00:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:00:48.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:00:48.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:00:48.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:00:48.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:00:48.405 [DEBUG] [Thread-75747] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:00:50.667 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:56.586 [DEBUG] [Thread-75749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:00:56.818 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:05.433 [DEBUG] [Thread-75750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:11.627 [DEBUG] [Thread-75751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:12.600 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:12.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:01:18.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:01:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:01:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 0, 28), 8.71, 55.41, 0.0, 35.61, 12.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:01:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:00:28
2025-12-12T20:01:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:01:19.409 [DEBUG] [Thread-75752] [transport.py] [_log()] starting thread (client mode): 0xf57f3bb0
2025-12-12T20:01:19.409 [DEBUG] [Thread-75752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:01:19.430 [DEBUG] [Thread-75752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:01:19.430 [INFO] [Thread-75752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] client lang: <none>
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] server lang: <none>
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] kex follows: False
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:01:19.433 [DEBUG] [Thread-75752] [transport.py] [_log()] Compression: none
2025-12-12T20:01:19.434 [DEBUG] [Thread-75752] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:01:19.452 [DEBUG] [Thread-75752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:01:19.452 [DEBUG] [Thread-75752] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:01:19.452 [DEBUG] [Thread-75752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:01:19.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:01:19.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:01:19.453 [DEBUG] [Thread-75752] [transport.py] [_log()] userauth is OK
2025-12-12T20:01:19.453 [DEBUG] [Thread-75752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:01:19.453 [DEBUG] [Thread-75752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:01:19.453 [DEBUG] [Thread-75752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:01:19.453 [DEBUG] [Thread-75752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:01:19.462 [INFO] [Thread-75752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:01:19.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:01:20.103 [DEBUG] [Thread-75752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:01:20.103 [DEBUG] [Thread-75752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:01:20.103 [DEBUG] [Thread-75752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:01:20.143 [DEBUG] [Thread-75752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:01:20.144 [DEBUG] [Thread-75752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:01:20.146 [DEBUG] [Thread-75752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:01:20.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:01:20.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:01:20.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:01:20.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:01:20.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:01:20.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:01:20.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.750796 -999.00  +12.00  31.06     59   +4.30 1 2 2 1 1   429    0 4.65 -129.26 ----- 30.3 31.1 334.0 34.3 12.6 -24.0 12.4 -23.5 12.2 -21.5 12.6 -22.3
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.750796
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:01:20.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:00:28', tmtdew=8.71, humidity=55.41, cloud=0.0, wind=35.61, temperature=12.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:01:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:01:20.165 [DEBUG] [Thread-75752] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:01:20.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:01:20.253 [DEBUG] [Thread-75755] [transport.py] [_log()] starting thread (client mode): 0xf8155810
2025-12-12T20:01:20.253 [DEBUG] [Thread-75755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:01:20.267 [DEBUG] [Thread-75755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:01:20.268 [INFO] [Thread-75755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] client lang: <none>
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] server lang: <none>
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] kex follows: False
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] Compression: none
2025-12-12T20:01:20.275 [DEBUG] [Thread-75755] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:01:20.330 [DEBUG] [Thread-75755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:01:20.330 [DEBUG] [Thread-75755] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:01:20.331 [DEBUG] [Thread-75755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:01:20.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:01:20.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:01:20.387 [DEBUG] [Thread-75755] [transport.py] [_log()] userauth is OK
2025-12-12T20:01:20.387 [DEBUG] [Thread-75755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:01:20.387 [DEBUG] [Thread-75755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:01:20.387 [DEBUG] [Thread-75755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:01:20.387 [DEBUG] [Thread-75755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:01:20.401 [INFO] [Thread-75755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:01:20.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:01:20.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:01:21.256 [DEBUG] [Thread-75755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:01:21.256 [DEBUG] [Thread-75755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:01:21.299 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:21.304 [DEBUG] [Thread-75755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:01:21.304 [DEBUG] [Thread-75755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:01:21.312 [DEBUG] [Thread-75755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:01:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:01:21.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:01: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') -> 00000000
2025-12-12T20:01:21.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:01:21.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:01:21.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:01:21.343 [DEBUG] [Thread-75755] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:01:26.656 [DEBUG] [Thread-75757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:41.707 [DEBUG] [Thread-75758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:44.735 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:51.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:01:51.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:01:51.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:01:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 1, 32), 8.68, 55.54, 0.0, 38.15, 12.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:01:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:01:32
2025-12-12T20:01:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:01:52.325 [DEBUG] [Thread-75759] [transport.py] [_log()] starting thread (client mode): 0xf81c0d90
2025-12-12T20:01:52.325 [DEBUG] [Thread-75759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:01:52.347 [DEBUG] [Thread-75759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:01:52.347 [INFO] [Thread-75759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:52.350 [DEBUG] [Thread-75759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] client lang: <none>
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] server lang: <none>
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] kex follows: False
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] Compression: none
2025-12-12T20:01:52.351 [DEBUG] [Thread-75759] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:01:52.367 [DEBUG] [Thread-75759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:01:52.368 [DEBUG] [Thread-75759] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:01:52.368 [DEBUG] [Thread-75759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:01:52.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:01:52.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:01:52.371 [DEBUG] [Thread-75759] [transport.py] [_log()] userauth is OK
2025-12-12T20:01:52.371 [DEBUG] [Thread-75759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:01:52.371 [DEBUG] [Thread-75759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:01:52.371 [DEBUG] [Thread-75759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:01:52.371 [DEBUG] [Thread-75759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:01:52.395 [INFO] [Thread-75759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:01:52.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:01:53.075 [DEBUG] [Thread-75759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:01:53.076 [DEBUG] [Thread-75759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:01:53.076 [DEBUG] [Thread-75759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:01:53.118 [DEBUG] [Thread-75759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:01:53.118 [DEBUG] [Thread-75759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:01:53.121 [DEBUG] [Thread-75759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:01:53.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:01:53.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:01:53.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:01:53.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:01:53.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:01:53.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:01:53.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:01:53.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:01:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:01:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.751144 -999.00  +12.00  26.26     59   +4.30 1 2 1 1 1   409    0 4.20 -136.40 ----- 35.0 26.3 315.2 34.2 12.6 -23.9 12.4 -23.4 12.2 -21.1 12.5 -22.0
2025-12-12T20:01:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:01:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:01:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.751144
2025-12-12T20:01:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:01:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:01:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:01:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:01:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:01:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:01:32', tmtdew=8.68, humidity=55.54, cloud=0.0, wind=38.15, temperature=12.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:01:38.842', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:01:53.146 [DEBUG] [Thread-75759] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:01:53.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:01:53.253 [DEBUG] [Thread-75762] [transport.py] [_log()] starting thread (client mode): 0xf81c31f0
2025-12-12T20:01:53.253 [DEBUG] [Thread-75762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:01:53.267 [DEBUG] [Thread-75762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:01:53.268 [INFO] [Thread-75762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:01:53.275 [DEBUG] [Thread-75762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:01:53.275 [DEBUG] [Thread-75762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:01:53.275 [DEBUG] [Thread-75762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] client lang: <none>
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] server lang: <none>
2025-12-12T20:01:53.276 [DEBUG] [Thread-75762] [transport.py] [_log()] kex follows: False
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] Compression: none
2025-12-12T20:01:53.277 [DEBUG] [Thread-75762] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:01:53.335 [DEBUG] [Thread-75762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:01:53.336 [DEBUG] [Thread-75762] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:01:53.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:01:53.337 [DEBUG] [Thread-75762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:01:53.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:01:53.392 [DEBUG] [Thread-75762] [transport.py] [_log()] userauth is OK
2025-12-12T20:01:53.392 [DEBUG] [Thread-75762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:01:53.392 [DEBUG] [Thread-75762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:01:53.392 [DEBUG] [Thread-75762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:01:53.392 [DEBUG] [Thread-75762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:01:53.414 [INFO] [Thread-75762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:01:53.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:01:53.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:01:54.269 [DEBUG] [Thread-75762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:01:54.269 [DEBUG] [Thread-75762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:01:54.316 [DEBUG] [Thread-75762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:01:54.316 [DEBUG] [Thread-75762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:01:54.325 [DEBUG] [Thread-75762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:01:54.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:01:54.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:01:54.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:01:54.343 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:01:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:01:54.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:01:54.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:01:54.359 [DEBUG] [Thread-75762] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:01:56.734 [DEBUG] [Thread-75764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:00.505 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:05.486 [DEBUG] [Thread-75765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:11.775 [DEBUG] [Thread-75766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:19.264 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:19.265 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:23.989 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:02:24.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:02:24.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:02:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 2, 4), 8.66, 55.61, 0.0, 38.66, 12.02, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:02:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:02:04
2025-12-12T20:02:25.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:02:25.353 [DEBUG] [Thread-75767] [transport.py] [_log()] starting thread (client mode): 0xf575e650
2025-12-12T20:02:25.353 [DEBUG] [Thread-75767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:02:25.373 [DEBUG] [Thread-75767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:02:25.373 [INFO] [Thread-75767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] client lang: <none>
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] server lang: <none>
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] kex follows: False
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:02:25.377 [DEBUG] [Thread-75767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:02:25.378 [DEBUG] [Thread-75767] [transport.py] [_log()] Compression: none
2025-12-12T20:02:25.378 [DEBUG] [Thread-75767] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:02:25.394 [DEBUG] [Thread-75767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:02:25.394 [DEBUG] [Thread-75767] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:02:25.395 [DEBUG] [Thread-75767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:02:25.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:02:25.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:02:25.397 [DEBUG] [Thread-75767] [transport.py] [_log()] userauth is OK
2025-12-12T20:02:25.397 [DEBUG] [Thread-75767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:02:25.397 [DEBUG] [Thread-75767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:02:25.397 [DEBUG] [Thread-75767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:02:25.397 [DEBUG] [Thread-75767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:02:25.414 [INFO] [Thread-75767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:02:25.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:02:26.062 [DEBUG] [Thread-75767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:02:26.063 [DEBUG] [Thread-75767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:02:26.063 [DEBUG] [Thread-75767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:02:26.104 [DEBUG] [Thread-75767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:02:26.104 [DEBUG] [Thread-75767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:02:26.108 [DEBUG] [Thread-75767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:02:26.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:02:26.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:02:26.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:02:26.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:02:26.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:02:26.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:02:26.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:02:26.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:02:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:02:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.751491 -999.00  +11.90  37.89     60   +4.40 1 2 2 1 1   390    0 4.27 -141.00 ----- 41.4 37.9 321.8 45.2 12.6 -23.7 12.5 -23.5 12.2 -21.0 12.5 -21.7
2025-12-12T20:02:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:02:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:02:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.751491
2025-12-12T20:02:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:02:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:02:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:02:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:02:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:02:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:02:04', tmtdew=8.66, humidity=55.61, cloud=0.0, wind=38.66, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:02:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:02:26.139 [DEBUG] [Thread-75767] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:02:26.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:02:26.235 [DEBUG] [Thread-75770] [transport.py] [_log()] starting thread (client mode): 0xf574d8a0
2025-12-12T20:02:26.236 [DEBUG] [Thread-75770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:02:26.251 [DEBUG] [Thread-75770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:02:26.251 [INFO] [Thread-75770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:02:26.258 [DEBUG] [Thread-75770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:02:26.258 [DEBUG] [Thread-75770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:02:26.258 [DEBUG] [Thread-75770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:02:26.258 [DEBUG] [Thread-75770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] client lang: <none>
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] server lang: <none>
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] kex follows: False
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:02:26.259 [DEBUG] [Thread-75770] [transport.py] [_log()] Compression: none
2025-12-12T20:02:26.260 [DEBUG] [Thread-75770] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:02:26.315 [DEBUG] [Thread-75770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:02:26.316 [DEBUG] [Thread-75770] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:02:26.316 [DEBUG] [Thread-75770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:02:26.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:02:26.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:02:26.372 [DEBUG] [Thread-75770] [transport.py] [_log()] userauth is OK
2025-12-12T20:02:26.372 [DEBUG] [Thread-75770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:02:26.372 [DEBUG] [Thread-75770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:02:26.372 [DEBUG] [Thread-75770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:02:26.372 [DEBUG] [Thread-75770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:02:26.395 [INFO] [Thread-75770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:02:26.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:02:26.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:02:26.806 [DEBUG] [Thread-75772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:27.255 [DEBUG] [Thread-75770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:02:27.255 [DEBUG] [Thread-75770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:02:27.303 [DEBUG] [Thread-75770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:02:27.303 [DEBUG] [Thread-75770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:02:27.312 [DEBUG] [Thread-75770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:02:27.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:02:27.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:02:27.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:02:27.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:02:27.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:02:27.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:02:27.346 [DEBUG] [Thread-75770] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:02:41.845 [DEBUG] [Thread-75773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:47.508 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:56.017 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:56.870 [DEBUG] [Thread-75774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:02:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:02:57.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:02:57.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:02:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 2, 36), 8.47, 56.27, 0.0, 41.27, 12.04, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:02:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:02:36
2025-12-12T20:02:58.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:02:58.328 [DEBUG] [Thread-75775] [transport.py] [_log()] starting thread (client mode): 0xf57f2470
2025-12-12T20:02:58.328 [DEBUG] [Thread-75775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:02:58.347 [DEBUG] [Thread-75775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:02:58.347 [INFO] [Thread-75775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] client lang: <none>
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] server lang: <none>
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] kex follows: False
2025-12-12T20:02:58.351 [DEBUG] [Thread-75775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:02:58.352 [DEBUG] [Thread-75775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:02:58.352 [DEBUG] [Thread-75775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:02:58.352 [DEBUG] [Thread-75775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:02:58.352 [DEBUG] [Thread-75775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:02:58.352 [DEBUG] [Thread-75775] [transport.py] [_log()] Compression: none
2025-12-12T20:02:58.352 [DEBUG] [Thread-75775] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:02:58.370 [DEBUG] [Thread-75775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:02:58.371 [DEBUG] [Thread-75775] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:02:58.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:02:58.372 [DEBUG] [Thread-75775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:02:58.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:02:58.373 [DEBUG] [Thread-75775] [transport.py] [_log()] userauth is OK
2025-12-12T20:02:58.374 [DEBUG] [Thread-75775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:02:58.374 [DEBUG] [Thread-75775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:02:58.374 [DEBUG] [Thread-75775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:02:58.374 [DEBUG] [Thread-75775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:02:58.409 [INFO] [Thread-75775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:02:58.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:02:59.040 [DEBUG] [Thread-75775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:02:59.040 [DEBUG] [Thread-75775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:02:59.040 [DEBUG] [Thread-75775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:02:59.081 [DEBUG] [Thread-75775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:02:59.081 [DEBUG] [Thread-75775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:02:59.084 [DEBUG] [Thread-75775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:02:59.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:02:59.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:02:59.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:02:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:02:59.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:02:59.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:02:59.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:02:59.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:02:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:02:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.751838 -999.00  +11.90  36.09     60   +4.50 1 2 2 1 1   370    0 4.29 -135.93 ----- 30.5 36.1 311.4 54.2 12.6 -23.8 12.5 -23.5 12.2 -21.3 12.5 -21.6
2025-12-12T20:02:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:02:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:02:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.751838
2025-12-12T20:02:59.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:02:59.108 [DEBUG] [Thread-75775] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:02:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:02:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:02:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:02:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:02:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:02:36', tmtdew=8.47, humidity=56.27, cloud=0.0, wind=41.27, temperature=12.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:02:38.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:02:59.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:02:59.206 [DEBUG] [Thread-75778] [transport.py] [_log()] starting thread (client mode): 0xf5703f40
2025-12-12T20:02:59.206 [DEBUG] [Thread-75778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:02:59.222 [DEBUG] [Thread-75778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:02:59.222 [INFO] [Thread-75778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:02:59.229 [DEBUG] [Thread-75778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:02:59.229 [DEBUG] [Thread-75778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:02:59.229 [DEBUG] [Thread-75778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:02:59.229 [DEBUG] [Thread-75778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] client lang: <none>
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] server lang: <none>
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] kex follows: False
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] Compression: none
2025-12-12T20:02:59.230 [DEBUG] [Thread-75778] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:02:59.287 [DEBUG] [Thread-75778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:02:59.288 [DEBUG] [Thread-75778] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:02:59.288 [DEBUG] [Thread-75778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:02:59.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:02:59.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:02:59.344 [DEBUG] [Thread-75778] [transport.py] [_log()] userauth is OK
2025-12-12T20:02:59.344 [DEBUG] [Thread-75778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:02:59.344 [DEBUG] [Thread-75778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:02:59.344 [DEBUG] [Thread-75778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:02:59.344 [DEBUG] [Thread-75778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:02:59.363 [INFO] [Thread-75778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:02:59.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:02:59.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:03:00.234 [DEBUG] [Thread-75778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:03:00.235 [DEBUG] [Thread-75778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:03:00.283 [DEBUG] [Thread-75778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:03:00.283 [DEBUG] [Thread-75778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:03:00.292 [DEBUG] [Thread-75778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:03:00.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:03:00.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:03:00.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:03:00.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:03:00.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:03:00.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:03:00.327 [DEBUG] [Thread-75778] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:03:02.121 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:05.552 [DEBUG] [Thread-75780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:11.904 [DEBUG] [Thread-75781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:25.587 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:26.949 [DEBUG] [Thread-75782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:27.781 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:27.782 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:30.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:03:30.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:03:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:03:31.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 3, 8), 8.46, 56.31, 0.0, 42.89, 12.0, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:03:31.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:03:08
2025-12-12T20:03:31.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:03:31.296 [DEBUG] [Thread-75783] [transport.py] [_log()] starting thread (client mode): 0xf57944f0
2025-12-12T20:03:31.296 [DEBUG] [Thread-75783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:03:31.315 [DEBUG] [Thread-75783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:03:31.316 [INFO] [Thread-75783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] client lang: <none>
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] server lang: <none>
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] kex follows: False
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:03:31.317 [DEBUG] [Thread-75783] [transport.py] [_log()] Compression: none
2025-12-12T20:03:31.318 [DEBUG] [Thread-75783] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:03:31.332 [DEBUG] [Thread-75783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:03:31.333 [DEBUG] [Thread-75783] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:03:31.333 [DEBUG] [Thread-75783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:03:31.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:03:31.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:03:31.335 [DEBUG] [Thread-75783] [transport.py] [_log()] userauth is OK
2025-12-12T20:03:31.335 [DEBUG] [Thread-75783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:03:31.335 [DEBUG] [Thread-75783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:03:31.335 [DEBUG] [Thread-75783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:03:31.335 [DEBUG] [Thread-75783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:03:31.354 [INFO] [Thread-75783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:03:31.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:03:31.979 [DEBUG] [Thread-75783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:03:31.979 [DEBUG] [Thread-75783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:03:31.979 [DEBUG] [Thread-75783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:03:32.020 [DEBUG] [Thread-75783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:03:32.020 [DEBUG] [Thread-75783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:03:32.023 [DEBUG] [Thread-75783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:03:32.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:03:32.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:03:32.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:03:32.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:03:32.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:03:32.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:03:32.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:03:32.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:03:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:03:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.752185 -999.00  +11.90  33.64     60   +4.40 1 2 2 1 1   351    0 4.55 -127.76 ----- 46.5 33.6 317.8 41.5 12.6 -23.7 12.5 -23.5 12.2 -21.6 12.5 -21.7
2025-12-12T20:03:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:03:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:03:32.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.752185
2025-12-12T20:03:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:03:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:03:32.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:03:32.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:03:32.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:03:32.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:03:08', tmtdew=8.46, humidity=56.31, cloud=0.0, wind=42.89, temperature=12.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:03:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:03:32.050 [DEBUG] [Thread-75783] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:03:32.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:03:32.143 [DEBUG] [Thread-75786] [transport.py] [_log()] starting thread (client mode): 0xf57f2fb0
2025-12-12T20:03:32.143 [DEBUG] [Thread-75786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:03:32.158 [DEBUG] [Thread-75786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:03:32.158 [INFO] [Thread-75786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:03:32.166 [DEBUG] [Thread-75786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] client lang: <none>
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] server lang: <none>
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] kex follows: False
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] Compression: none
2025-12-12T20:03:32.167 [DEBUG] [Thread-75786] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:03:32.222 [DEBUG] [Thread-75786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:03:32.223 [DEBUG] [Thread-75786] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:03:32.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:03:32.223 [DEBUG] [Thread-75786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:03:32.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:03:32.280 [DEBUG] [Thread-75786] [transport.py] [_log()] userauth is OK
2025-12-12T20:03:32.280 [DEBUG] [Thread-75786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:03:32.280 [DEBUG] [Thread-75786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:03:32.280 [DEBUG] [Thread-75786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:03:32.280 [DEBUG] [Thread-75786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:03:32.294 [INFO] [Thread-75786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:03:32.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:03:32.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:03:33.123 [DEBUG] [Thread-75786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:03:33.123 [DEBUG] [Thread-75786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:03:33.171 [DEBUG] [Thread-75786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:03:33.171 [DEBUG] [Thread-75786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:03:33.179 [DEBUG] [Thread-75786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:03:33.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:03:33.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:03:33.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:03:33.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:03:33.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:03:33.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:03:33.214 [DEBUG] [Thread-75786] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:03:41.980 [DEBUG] [Thread-75788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:49.001 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:56.366 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:03:57.016 [DEBUG] [Thread-75789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:02.475 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:03.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:04:03.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:04:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:04:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 3, 40), 8.46, 56.29, 0.0, 42.22, 11.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:04:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:03:40
2025-12-12T20:04:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:04:04.194 [DEBUG] [Thread-75790] [transport.py] [_log()] starting thread (client mode): 0xf57a7ac0
2025-12-12T20:04:04.194 [DEBUG] [Thread-75790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:04:04.214 [DEBUG] [Thread-75790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:04:04.214 [INFO] [Thread-75790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] client lang: <none>
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] server lang: <none>
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] kex follows: False
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:04:04.217 [DEBUG] [Thread-75790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:04:04.218 [DEBUG] [Thread-75790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:04:04.218 [DEBUG] [Thread-75790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:04:04.218 [DEBUG] [Thread-75790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:04:04.218 [DEBUG] [Thread-75790] [transport.py] [_log()] Compression: none
2025-12-12T20:04:04.218 [DEBUG] [Thread-75790] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:04:04.236 [DEBUG] [Thread-75790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:04:04.237 [DEBUG] [Thread-75790] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:04:04.237 [DEBUG] [Thread-75790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:04:04.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:04:04.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:04:04.239 [DEBUG] [Thread-75790] [transport.py] [_log()] userauth is OK
2025-12-12T20:04:04.239 [DEBUG] [Thread-75790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:04:04.239 [DEBUG] [Thread-75790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:04:04.239 [DEBUG] [Thread-75790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:04:04.239 [DEBUG] [Thread-75790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:04:04.261 [INFO] [Thread-75790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:04:04.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:04:04.916 [DEBUG] [Thread-75790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:04:04.916 [DEBUG] [Thread-75790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:04:04.916 [DEBUG] [Thread-75790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:04:04.957 [DEBUG] [Thread-75790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:04:04.957 [DEBUG] [Thread-75790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:04:04.959 [DEBUG] [Thread-75790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:04:04.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:04:04.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:04:04.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:04:04.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:04:04.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:04:04.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:04:04.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:04:04.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:04:04.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:04:04.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.752532 -999.00  +11.80  37.45     60   +4.40 1 2 2 1 1   332    0 4.53 -126.12 ----- 37.0 37.5 322.6 48.2 12.6 -23.6 12.4 -23.5 12.1 -21.6 12.5 -22.0
2025-12-12T20:04:04.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:04:04.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:04:04.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.752532
2025-12-12T20:04:04.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:04:04.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:04:04.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:04:04.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:04:04.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:04:04.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:03:40', tmtdew=8.46, humidity=56.29, cloud=0.0, wind=42.22, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:03:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:04:04.982 [DEBUG] [Thread-75790] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:04:05.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:04:05.079 [DEBUG] [Thread-75793] [transport.py] [_log()] starting thread (client mode): 0xf5703c10
2025-12-12T20:04:05.079 [DEBUG] [Thread-75793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:04:05.093 [DEBUG] [Thread-75793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:04:05.093 [INFO] [Thread-75793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:04:05.102 [DEBUG] [Thread-75793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:04:05.102 [DEBUG] [Thread-75793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] client lang: <none>
2025-12-12T20:04:05.103 [DEBUG] [Thread-75793] [transport.py] [_log()] server lang: <none>
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] kex follows: False
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] Compression: none
2025-12-12T20:04:05.104 [DEBUG] [Thread-75793] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:04:05.164 [DEBUG] [Thread-75793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:04:05.164 [DEBUG] [Thread-75793] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:04:05.165 [DEBUG] [Thread-75793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:04:05.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:04:05.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:04:05.221 [DEBUG] [Thread-75793] [transport.py] [_log()] userauth is OK
2025-12-12T20:04:05.221 [DEBUG] [Thread-75793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:04:05.221 [DEBUG] [Thread-75793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:04:05.221 [DEBUG] [Thread-75793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:04:05.222 [DEBUG] [Thread-75793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:04:05.250 [INFO] [Thread-75793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:04:05.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:04:05.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:04:05.610 [DEBUG] [Thread-75795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:06.098 [DEBUG] [Thread-75793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:04:06.098 [DEBUG] [Thread-75793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:04:06.145 [DEBUG] [Thread-75793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:04:06.146 [DEBUG] [Thread-75793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:04:06.155 [DEBUG] [Thread-75793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:04:06.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:04:06.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')
2025-12-12T20:04:06.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:04:06.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:04:06.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:04:06.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:04:06.190 [DEBUG] [Thread-75793] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:04:12.047 [DEBUG] [Thread-75796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:25.928 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:27.090 [DEBUG] [Thread-75797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:32.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:32.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:04:36.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:04:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:04:36.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 4, 12), 8.47, 56.26, 0.0, 40.83, 11.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:04:36.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:04:12
2025-12-12T20:04:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:04:37.174 [DEBUG] [Thread-75798] [transport.py] [_log()] starting thread (client mode): 0xf8156ce0
2025-12-12T20:04:37.174 [DEBUG] [Thread-75798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:04:37.197 [DEBUG] [Thread-75798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:04:37.197 [INFO] [Thread-75798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] client lang: <none>
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] server lang: <none>
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] kex follows: False
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] Compression: none
2025-12-12T20:04:37.200 [DEBUG] [Thread-75798] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:04:37.218 [DEBUG] [Thread-75798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:04:37.218 [DEBUG] [Thread-75798] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:04:37.218 [DEBUG] [Thread-75798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:04:37.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:04:37.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:04:37.219 [DEBUG] [Thread-75798] [transport.py] [_log()] userauth is OK
2025-12-12T20:04:37.219 [DEBUG] [Thread-75798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:04:37.219 [DEBUG] [Thread-75798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:04:37.219 [DEBUG] [Thread-75798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:04:37.219 [DEBUG] [Thread-75798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:04:37.228 [INFO] [Thread-75798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:04:37.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:04:37.875 [DEBUG] [Thread-75798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:04:37.875 [DEBUG] [Thread-75798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:04:37.875 [DEBUG] [Thread-75798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:04:37.917 [DEBUG] [Thread-75798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:04:37.917 [DEBUG] [Thread-75798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:04:37.919 [DEBUG] [Thread-75798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:04:37.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:04:37.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:04:37.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:04:37.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:04:37.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:04:37.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:04:37.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.752880 -999.00  +11.80  27.20     60   +4.40 1 2 1 1 1   314    0 4.50 -128.18 ----- 30.1 27.2 322.8 34.3 12.6 -23.8 12.5 -23.4 12.1 -21.6 12.4 -22.1
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.752880
2025-12-12T20:04:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:04:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:04:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:04:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:04:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:04:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:04:12', tmtdew=8.47, humidity=56.26, cloud=0.0, wind=40.83, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:04:08.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:04:37.938 [DEBUG] [Thread-75798] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:04:38.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:04:38.024 [DEBUG] [Thread-75801] [transport.py] [_log()] starting thread (client mode): 0xf5700d00
2025-12-12T20:04:38.024 [DEBUG] [Thread-75801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:04:38.038 [DEBUG] [Thread-75801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:04:38.039 [INFO] [Thread-75801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] client lang: <none>
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] server lang: <none>
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] kex follows: False
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] Compression: none
2025-12-12T20:04:38.046 [DEBUG] [Thread-75801] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:04:38.103 [DEBUG] [Thread-75801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:04:38.103 [DEBUG] [Thread-75801] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:04:38.103 [DEBUG] [Thread-75801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:04:38.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:04:38.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:04:38.161 [DEBUG] [Thread-75801] [transport.py] [_log()] userauth is OK
2025-12-12T20:04:38.161 [DEBUG] [Thread-75801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:04:38.161 [DEBUG] [Thread-75801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:04:38.161 [DEBUG] [Thread-75801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:04:38.161 [DEBUG] [Thread-75801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:04:38.175 [INFO] [Thread-75801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:04:38.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:04:38.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:04:39.052 [DEBUG] [Thread-75801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:04:39.052 [DEBUG] [Thread-75801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:04:39.101 [DEBUG] [Thread-75801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:04:39.101 [DEBUG] [Thread-75801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:04:39.110 [DEBUG] [Thread-75801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:04:39.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:04:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:04:39.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:04:39.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:04:39.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:04:39.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:04:39.145 [DEBUG] [Thread-75801] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:04:42.122 [DEBUG] [Thread-75803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:49.314 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:04:57.164 [DEBUG] [Thread-75804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:05.664 [DEBUG] [Thread-75805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:05:09.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:05:09.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:05:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 4, 44), 8.4, 56.34, 0.0, 36.75, 11.97, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:05:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:04:44
2025-12-12T20:05:09.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:05:10.135 [DEBUG] [Thread-75806] [transport.py] [_log()] starting thread (client mode): 0xf81c2fb0
2025-12-12T20:05:10.135 [DEBUG] [Thread-75806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:05:10.157 [DEBUG] [Thread-75806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:05:10.157 [INFO] [Thread-75806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:05:10.159 [DEBUG] [Thread-75806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:05:10.159 [DEBUG] [Thread-75806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:05:10.159 [DEBUG] [Thread-75806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:05:10.159 [DEBUG] [Thread-75806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:10.159 [DEBUG] [Thread-75806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:10.159 [DEBUG] [Thread-75806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] client lang: <none>
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] server lang: <none>
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] kex follows: False
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] Compression: none
2025-12-12T20:05:10.160 [DEBUG] [Thread-75806] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:05:10.174 [DEBUG] [Thread-75806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:05:10.175 [DEBUG] [Thread-75806] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:05:10.175 [DEBUG] [Thread-75806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:05:10.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:05:10.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:05:10.177 [DEBUG] [Thread-75806] [transport.py] [_log()] userauth is OK
2025-12-12T20:05:10.178 [DEBUG] [Thread-75806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:05:10.178 [DEBUG] [Thread-75806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:05:10.178 [DEBUG] [Thread-75806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:05:10.178 [DEBUG] [Thread-75806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:05:10.193 [INFO] [Thread-75806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:05:10.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:05:10.985 [DEBUG] [Thread-75806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:05:10.986 [DEBUG] [Thread-75806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:05:10.986 [DEBUG] [Thread-75806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:05:11.026 [DEBUG] [Thread-75806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:05:11.026 [DEBUG] [Thread-75806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:05:11.029 [DEBUG] [Thread-75806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:05:11.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:05:11.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:05:11.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:05:11.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:05:11.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:05:11.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:05:11.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:05:11.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:05:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:05:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.753227 -999.00  +11.90  28.44     60   +4.40 1 2 1 1 1   296    0 4.47 -130.13 ----- 39.5 28.4 331.4 35.2 12.5 -23.6 12.4 -23.5 12.2 -21.6 12.5 -22.2
2025-12-12T20:05:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:05:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:05:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.753227
2025-12-12T20:05:11.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:05:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:05:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:05:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:05:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:05:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:04:44', tmtdew=8.4, humidity=56.34, cloud=0.0, wind=36.75, temperature=11.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:04:38.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:05:11.058 [DEBUG] [Thread-75806] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:05:11.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:05:11.160 [DEBUG] [Thread-75809] [transport.py] [_log()] starting thread (client mode): 0xf813e740
2025-12-12T20:05:11.160 [DEBUG] [Thread-75809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:05:11.180 [DEBUG] [Thread-75809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:05:11.181 [INFO] [Thread-75809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:05:11.189 [DEBUG] [Thread-75809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:05:11.189 [DEBUG] [Thread-75809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:05:11.189 [DEBUG] [Thread-75809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:05:11.189 [DEBUG] [Thread-75809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:11.189 [DEBUG] [Thread-75809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:11.189 [DEBUG] [Thread-75809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] client lang: <none>
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] server lang: <none>
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] kex follows: False
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] Compression: none
2025-12-12T20:05:11.190 [DEBUG] [Thread-75809] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:05:11.248 [DEBUG] [Thread-75809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:05:11.249 [DEBUG] [Thread-75809] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:05:11.249 [DEBUG] [Thread-75809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:05:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:05:11.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:05:11.305 [DEBUG] [Thread-75809] [transport.py] [_log()] userauth is OK
2025-12-12T20:05:11.305 [DEBUG] [Thread-75809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:05:11.305 [DEBUG] [Thread-75809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:05:11.305 [DEBUG] [Thread-75809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:05:11.305 [DEBUG] [Thread-75809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:05:11.324 [INFO] [Thread-75809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:05:11.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:05:11.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:05:12.192 [DEBUG] [Thread-75811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:12.198 [DEBUG] [Thread-75809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:05:12.198 [DEBUG] [Thread-75809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:05:12.247 [DEBUG] [Thread-75809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:05:12.247 [DEBUG] [Thread-75809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:05:12.255 [DEBUG] [Thread-75809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:05:12.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:05:12.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:05:12.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:05:12.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:05:12.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:05:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:05:12.287 [DEBUG] [Thread-75809] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:05:17.499 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:22.544 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:27.225 [DEBUG] [Thread-75812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:38.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:38.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:42.258 [DEBUG] [Thread-75813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:42.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:05:42.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:05:42.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:05:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 5, 16), 8.38, 56.42, 0.0, 37.83, 11.97, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:05:43.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:05:16
2025-12-12T20:05:43.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:05:43.281 [DEBUG] [Thread-75814] [transport.py] [_log()] starting thread (client mode): 0xf8155360
2025-12-12T20:05:43.281 [DEBUG] [Thread-75814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:05:43.304 [DEBUG] [Thread-75814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:05:43.304 [INFO] [Thread-75814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] client lang: <none>
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] server lang: <none>
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] kex follows: False
2025-12-12T20:05:43.308 [DEBUG] [Thread-75814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:05:43.309 [DEBUG] [Thread-75814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:05:43.309 [DEBUG] [Thread-75814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:05:43.309 [DEBUG] [Thread-75814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:05:43.309 [DEBUG] [Thread-75814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:05:43.309 [DEBUG] [Thread-75814] [transport.py] [_log()] Compression: none
2025-12-12T20:05:43.309 [DEBUG] [Thread-75814] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:05:43.326 [DEBUG] [Thread-75814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:05:43.327 [DEBUG] [Thread-75814] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:05:43.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:05:43.328 [DEBUG] [Thread-75814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:05:43.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:05:43.330 [DEBUG] [Thread-75814] [transport.py] [_log()] userauth is OK
2025-12-12T20:05:43.330 [DEBUG] [Thread-75814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:05:43.330 [DEBUG] [Thread-75814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:05:43.330 [DEBUG] [Thread-75814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:05:43.330 [DEBUG] [Thread-75814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:05:43.348 [INFO] [Thread-75814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:05:43.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:05:43.986 [DEBUG] [Thread-75814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:05:43.986 [DEBUG] [Thread-75814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:05:43.986 [DEBUG] [Thread-75814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:05:44.027 [DEBUG] [Thread-75814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:05:44.027 [DEBUG] [Thread-75814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:05:44.030 [DEBUG] [Thread-75814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:05:44.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:05:44.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:05:44.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:05:44.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:05:44.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:05:44.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:05:44.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:05:44.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:05:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:05:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.753574 -999.00  +11.90  27.10     60   +4.50 1 2 1 1 1   278    0 4.34 -128.88 ----- 32.9 27.1 340.8 42.7 12.5 -23.6 12.4 -23.3 12.2 -21.3 12.4 -22.4
2025-12-12T20:05:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:05:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:05:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.753574
2025-12-12T20:05:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:05:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:05:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:05:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:05:44.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:05:44.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:05:16', tmtdew=8.38, humidity=56.42, cloud=0.0, wind=37.83, temperature=11.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:05:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:05:44.056 [DEBUG] [Thread-75814] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:05:44.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:05:44.158 [DEBUG] [Thread-75817] [transport.py] [_log()] starting thread (client mode): 0xf81c0f40
2025-12-12T20:05:44.158 [DEBUG] [Thread-75817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:05:44.173 [DEBUG] [Thread-75817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:05:44.173 [INFO] [Thread-75817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:05:44.180 [DEBUG] [Thread-75817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:05:44.180 [DEBUG] [Thread-75817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:05:44.180 [DEBUG] [Thread-75817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:05:44.180 [DEBUG] [Thread-75817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:44.180 [DEBUG] [Thread-75817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] client lang: <none>
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] server lang: <none>
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] kex follows: False
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] Compression: none
2025-12-12T20:05:44.181 [DEBUG] [Thread-75817] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:05:44.240 [DEBUG] [Thread-75817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:05:44.240 [DEBUG] [Thread-75817] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:05:44.241 [DEBUG] [Thread-75817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:05:44.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:05:44.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:05:44.296 [DEBUG] [Thread-75817] [transport.py] [_log()] userauth is OK
2025-12-12T20:05:44.296 [DEBUG] [Thread-75817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:05:44.297 [DEBUG] [Thread-75817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:05:44.297 [DEBUG] [Thread-75817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:05:44.297 [DEBUG] [Thread-75817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:05:44.317 [INFO] [Thread-75817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:05:44.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:05:44.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:05:45.206 [DEBUG] [Thread-75817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:05:45.206 [DEBUG] [Thread-75817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:05:45.254 [DEBUG] [Thread-75817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:05:45.254 [DEBUG] [Thread-75817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:05:45.263 [DEBUG] [Thread-75817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:05:45.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:05:45.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:05:45.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:05:45.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:05:45.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:05:45.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:05:45.298 [DEBUG] [Thread-75817] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:05:45.922 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:05:57.284 [DEBUG] [Thread-75819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:05.721 [DEBUG] [Thread-75820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:09.413 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:12.338 [DEBUG] [Thread-75821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:14.847 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:06:15.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:06:15.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:06:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 5, 48), 8.3, 56.7, 0.0, 35.01, 11.94, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:06:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:05:48
2025-12-12T20:06:16.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:06:16.292 [DEBUG] [Thread-75822] [transport.py] [_log()] starting thread (client mode): 0xf81c1150
2025-12-12T20:06:16.293 [DEBUG] [Thread-75822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:06:16.313 [DEBUG] [Thread-75822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:06:16.313 [INFO] [Thread-75822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] client lang: <none>
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] server lang: <none>
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] kex follows: False
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] Compression: none
2025-12-12T20:06:16.316 [DEBUG] [Thread-75822] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:06:16.334 [DEBUG] [Thread-75822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:06:16.335 [DEBUG] [Thread-75822] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:06:16.335 [DEBUG] [Thread-75822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:06:16.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:06:16.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:06:16.337 [DEBUG] [Thread-75822] [transport.py] [_log()] userauth is OK
2025-12-12T20:06:16.337 [DEBUG] [Thread-75822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:06:16.337 [DEBUG] [Thread-75822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:06:16.337 [DEBUG] [Thread-75822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:06:16.337 [DEBUG] [Thread-75822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:06:16.360 [INFO] [Thread-75822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:06:16.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:06:16.933 [DEBUG] [Thread-75822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:06:16.933 [DEBUG] [Thread-75822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:06:16.934 [DEBUG] [Thread-75822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:06:16.974 [DEBUG] [Thread-75822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:06:16.974 [DEBUG] [Thread-75822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:06:16.977 [DEBUG] [Thread-75822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:06:16.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:06:16.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:06:16.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:06:16.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:06:17.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:06:17.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:06:17.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:06:17.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:06:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:06:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.753921 -999.00  +11.80  32.85     61   +4.60 1 2 2 1 1   262    0 4.13 -133.66 ----- 30.4 32.9 323.0 43.0 12.6 -23.7 12.4 -23.2 12.1 -21.3 12.4 -22.3
2025-12-12T20:06:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:06:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:06:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.753921
2025-12-12T20:06:17.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:06:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:06:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:06:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:06:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:06:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:05:48', tmtdew=8.3, humidity=56.7, cloud=0.0, wind=35.01, temperature=11.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:05:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:06:17.005 [DEBUG] [Thread-75822] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:06:17.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:06:17.101 [DEBUG] [Thread-75825] [transport.py] [_log()] starting thread (client mode): 0xf574e110
2025-12-12T20:06:17.101 [DEBUG] [Thread-75825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:06:17.121 [DEBUG] [Thread-75825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:06:17.121 [INFO] [Thread-75825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] client lang: <none>
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] server lang: <none>
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] kex follows: False
2025-12-12T20:06:17.129 [DEBUG] [Thread-75825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:06:17.130 [DEBUG] [Thread-75825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:06:17.130 [DEBUG] [Thread-75825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:06:17.130 [DEBUG] [Thread-75825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:06:17.130 [DEBUG] [Thread-75825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:06:17.130 [DEBUG] [Thread-75825] [transport.py] [_log()] Compression: none
2025-12-12T20:06:17.130 [DEBUG] [Thread-75825] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:06:17.189 [DEBUG] [Thread-75825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:06:17.189 [DEBUG] [Thread-75825] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:06:17.189 [DEBUG] [Thread-75825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:06:17.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:06:17.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:06:17.248 [DEBUG] [Thread-75825] [transport.py] [_log()] userauth is OK
2025-12-12T20:06:17.249 [DEBUG] [Thread-75825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:06:17.249 [DEBUG] [Thread-75825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:06:17.249 [DEBUG] [Thread-75825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:06:17.249 [DEBUG] [Thread-75825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:06:17.267 [INFO] [Thread-75825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:06:17.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:06:17.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:06:18.136 [DEBUG] [Thread-75825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:06:18.137 [DEBUG] [Thread-75825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:06:18.185 [DEBUG] [Thread-75825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:06:18.185 [DEBUG] [Thread-75825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:06:18.193 [DEBUG] [Thread-75825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:06:18.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:06:18.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:06:18.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:06:18.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:06:18.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:06:18.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:06:18.227 [DEBUG] [Thread-75825] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:06:19.934 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:27.367 [DEBUG] [Thread-75827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:42.409 [DEBUG] [Thread-75828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:43.389 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:06:48.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:06:48.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:06:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 6, 20), 8.28, 56.79, 0.0, 34.71, 11.92, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:06:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:06:20
2025-12-12T20:06:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:06:49.209 [DEBUG] [Thread-75829] [transport.py] [_log()] starting thread (client mode): 0xf81c3fd0
2025-12-12T20:06:49.209 [DEBUG] [Thread-75829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:06:49.229 [DEBUG] [Thread-75829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:06:49.229 [INFO] [Thread-75829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:06:49.232 [DEBUG] [Thread-75829] [transport.py] [_log()] client lang: <none>
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] server lang: <none>
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] kex follows: False
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] Compression: none
2025-12-12T20:06:49.233 [DEBUG] [Thread-75829] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:06:49.250 [DEBUG] [Thread-75829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:06:49.250 [DEBUG] [Thread-75829] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:06:49.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:06:49.251 [DEBUG] [Thread-75829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:06:49.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:06:49.253 [DEBUG] [Thread-75829] [transport.py] [_log()] userauth is OK
2025-12-12T20:06:49.253 [DEBUG] [Thread-75829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:06:49.253 [DEBUG] [Thread-75829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:06:49.254 [DEBUG] [Thread-75829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:06:49.254 [DEBUG] [Thread-75829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:06:49.272 [INFO] [Thread-75829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:06:49.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:06:49.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:49.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:06:49.881 [DEBUG] [Thread-75829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:06:49.881 [DEBUG] [Thread-75829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:06:49.881 [DEBUG] [Thread-75829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:06:49.922 [DEBUG] [Thread-75829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:06:49.922 [DEBUG] [Thread-75829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:06:49.925 [DEBUG] [Thread-75829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:06:49.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:06:49.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:06:49.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:06:49.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:06:49.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:06:49.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:06:49.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:06:49.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:06:49.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:06:49.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.754616 -999.00  +11.80  32.54     61   +4.60 1 2 2 1 1   230    0 4.24 -130.61 ----- 28.5 32.5 321.6 41.7 12.5 -23.6 12.4 -23.1 12.1 -21.3 12.4 -22.1
2025-12-12T20:06:49.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:06:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:06:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.754616
2025-12-12T20:06:49.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:06:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:06:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:06:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:06:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:06:49.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:06:20', tmtdew=8.28, humidity=56.79, cloud=0.0, wind=34.71, temperature=11.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:06:38.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:06:49.952 [DEBUG] [Thread-75829] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:06:50.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:06:50.050 [DEBUG] [Thread-75832] [transport.py] [_log()] starting thread (client mode): 0xf81e5cf0
2025-12-12T20:06:50.050 [DEBUG] [Thread-75832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:06:50.065 [DEBUG] [Thread-75832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:06:50.065 [INFO] [Thread-75832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:06:50.072 [DEBUG] [Thread-75832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] client lang: <none>
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] server lang: <none>
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] kex follows: False
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:06:50.073 [DEBUG] [Thread-75832] [transport.py] [_log()] Compression: none
2025-12-12T20:06:50.074 [DEBUG] [Thread-75832] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:06:50.137 [DEBUG] [Thread-75832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:06:50.137 [DEBUG] [Thread-75832] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:06:50.138 [DEBUG] [Thread-75832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:06:50.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:06:50.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:06:50.192 [DEBUG] [Thread-75832] [transport.py] [_log()] userauth is OK
2025-12-12T20:06:50.193 [DEBUG] [Thread-75832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:06:50.193 [DEBUG] [Thread-75832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:06:50.193 [DEBUG] [Thread-75832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:06:50.193 [DEBUG] [Thread-75832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:06:50.211 [INFO] [Thread-75832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:06:50.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:06:50.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:06:51.075 [DEBUG] [Thread-75832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:06:51.075 [DEBUG] [Thread-75832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:06:51.122 [DEBUG] [Thread-75832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:06:51.123 [DEBUG] [Thread-75832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:06:51.131 [DEBUG] [Thread-75832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:06:51.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:06:51.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:06:51.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:06:51.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:06:51.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:06:51.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:06:51.180 [DEBUG] [Thread-75832] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:06:57.438 [DEBUG] [Thread-75834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:05.799 [DEBUG] [Thread-75835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:06.838 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:12.482 [DEBUG] [Thread-75836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:21.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:07:21.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:07:21.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:07:21.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 6, 52), 8.21, 57.37, 0.0, 37.11, 11.92, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:07:21.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:06:52
2025-12-12T20:07:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:07:22.173 [DEBUG] [Thread-75837] [transport.py] [_log()] starting thread (client mode): 0xf813f070
2025-12-12T20:07:22.173 [DEBUG] [Thread-75837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:07:22.193 [DEBUG] [Thread-75837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:07:22.193 [INFO] [Thread-75837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:07:22.196 [DEBUG] [Thread-75837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:07:22.196 [DEBUG] [Thread-75837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] client lang: <none>
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] server lang: <none>
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] kex follows: False
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] Compression: none
2025-12-12T20:07:22.197 [DEBUG] [Thread-75837] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:07:22.214 [DEBUG] [Thread-75837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:07:22.215 [DEBUG] [Thread-75837] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:07:22.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:07:22.217 [DEBUG] [Thread-75837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:07:22.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:07:22.218 [DEBUG] [Thread-75837] [transport.py] [_log()] userauth is OK
2025-12-12T20:07:22.219 [DEBUG] [Thread-75837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:07:22.219 [DEBUG] [Thread-75837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:07:22.219 [DEBUG] [Thread-75837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:07:22.219 [DEBUG] [Thread-75837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:07:22.242 [INFO] [Thread-75837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:07:22.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:07:22.877 [DEBUG] [Thread-75837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:07:22.877 [DEBUG] [Thread-75837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:07:22.878 [DEBUG] [Thread-75837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:07:22.920 [DEBUG] [Thread-75837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:07:22.920 [DEBUG] [Thread-75837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:07:22.923 [DEBUG] [Thread-75837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:07:22.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:07:22.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:07:22.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:07:22.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:07:22.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:07:22.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:07:22.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:07:22.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:07:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:07:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.754963 -999.00  +11.80  31.49     61   +4.70 1 2 2 1 1   215    0 4.05 -134.02 ----- 26.4 31.5 333.4 36.9 12.5 -23.7 12.4 -23.4 12.1 -21.5 12.4 -22.4
2025-12-12T20:07:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:07:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:07:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.754963
2025-12-12T20:07:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:07:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:07:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:07:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:07:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:07:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:06:52', tmtdew=8.21, humidity=57.37, cloud=0.0, wind=37.11, temperature=11.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:07:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:07:22.947 [DEBUG] [Thread-75837] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:07:23.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:07:23.045 [DEBUG] [Thread-75840] [transport.py] [_log()] starting thread (client mode): 0xf81e5990
2025-12-12T20:07:23.045 [DEBUG] [Thread-75840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:07:23.060 [DEBUG] [Thread-75840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:07:23.060 [INFO] [Thread-75840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] client lang: <none>
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] server lang: <none>
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] kex follows: False
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:07:23.068 [DEBUG] [Thread-75840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:07:23.069 [DEBUG] [Thread-75840] [transport.py] [_log()] Compression: none
2025-12-12T20:07:23.069 [DEBUG] [Thread-75840] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:07:23.129 [DEBUG] [Thread-75840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:07:23.129 [DEBUG] [Thread-75840] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:07:23.130 [DEBUG] [Thread-75840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:07:23.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:07:23.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:07:23.186 [DEBUG] [Thread-75840] [transport.py] [_log()] userauth is OK
2025-12-12T20:07:23.186 [DEBUG] [Thread-75840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:07:23.195 [DEBUG] [Thread-75840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:07:23.195 [DEBUG] [Thread-75840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:07:23.195 [DEBUG] [Thread-75840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:07:23.215 [INFO] [Thread-75840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:07:23.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:07:23.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:07:24.067 [DEBUG] [Thread-75840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:07:24.067 [DEBUG] [Thread-75840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:07:24.115 [DEBUG] [Thread-75840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:07:24.115 [DEBUG] [Thread-75840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:07:24.124 [DEBUG] [Thread-75840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:07:24.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:07:24.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:07:24.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:07:24.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:07:24.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:07:24.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:07:24.159 [DEBUG] [Thread-75840] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:07:27.509 [DEBUG] [Thread-75842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:42.556 [DEBUG] [Thread-75843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:07:54.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:07:54.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:07:54.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 7, 24), 8.14, 57.62, 0.0, 35.52, 11.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:07:54.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:07:24
2025-12-12T20:07:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:07:55.128 [DEBUG] [Thread-75844] [transport.py] [_log()] starting thread (client mode): 0xf813e380
2025-12-12T20:07:55.128 [DEBUG] [Thread-75844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:07:55.149 [DEBUG] [Thread-75844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:07:55.149 [INFO] [Thread-75844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:55.152 [DEBUG] [Thread-75844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] client lang: <none>
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] server lang: <none>
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] kex follows: False
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] Compression: none
2025-12-12T20:07:55.153 [DEBUG] [Thread-75844] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:07:55.169 [DEBUG] [Thread-75844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:07:55.170 [DEBUG] [Thread-75844] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:07:55.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:07:55.180 [DEBUG] [Thread-75844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:07:55.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:07:55.181 [DEBUG] [Thread-75844] [transport.py] [_log()] userauth is OK
2025-12-12T20:07:55.182 [DEBUG] [Thread-75844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:07:55.182 [DEBUG] [Thread-75844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:07:55.182 [DEBUG] [Thread-75844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:07:55.182 [DEBUG] [Thread-75844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:07:55.207 [INFO] [Thread-75844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:07:55.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:07:55.873 [DEBUG] [Thread-75844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:07:55.873 [DEBUG] [Thread-75844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:07:55.873 [DEBUG] [Thread-75844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:07:55.914 [DEBUG] [Thread-75844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:07:55.914 [DEBUG] [Thread-75844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:07:55.917 [DEBUG] [Thread-75844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:07:55.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:07:55.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:07:55.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:07:55.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:07:55.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:07:55.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:07:55.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:07:55.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:07:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:07:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.755310 -999.00  +11.80  29.84     61   +4.70 1 2 1 1 1   201    0 3.82 -142.12 ----- 28.0 29.8 325.2 37.9 12.5 -23.6 12.4 -23.3 12.1 -21.3 12.4 -22.5
2025-12-12T20:07:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:07:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:07:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.755310
2025-12-12T20:07:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:07:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:07:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:07:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:07:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:07:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:07:24', tmtdew=8.14, humidity=57.62, cloud=0.0, wind=35.52, temperature=11.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:07:38.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:07:55.941 [DEBUG] [Thread-75844] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:07:56.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:07:56.038 [DEBUG] [Thread-75847] [transport.py] [_log()] starting thread (client mode): 0xf574cd60
2025-12-12T20:07:56.038 [DEBUG] [Thread-75847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:07:56.052 [DEBUG] [Thread-75847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:07:56.052 [INFO] [Thread-75847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] client lang: <none>
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] server lang: <none>
2025-12-12T20:07:56.060 [DEBUG] [Thread-75847] [transport.py] [_log()] kex follows: False
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] Compression: none
2025-12-12T20:07:56.061 [DEBUG] [Thread-75847] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:07:56.116 [DEBUG] [Thread-75847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:07:56.116 [DEBUG] [Thread-75847] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:07:56.117 [DEBUG] [Thread-75847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:07:56.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:07:56.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:07:56.172 [DEBUG] [Thread-75847] [transport.py] [_log()] userauth is OK
2025-12-12T20:07:56.172 [DEBUG] [Thread-75847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:07:56.173 [DEBUG] [Thread-75847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:07:56.173 [DEBUG] [Thread-75847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:07:56.173 [DEBUG] [Thread-75847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:07:56.192 [INFO] [Thread-75847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:07:56.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:07:56.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:07:56.270 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:56.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:07:57.006 [DEBUG] [Thread-75847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:07:57.006 [DEBUG] [Thread-75847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:07:57.054 [DEBUG] [Thread-75847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:07:57.054 [DEBUG] [Thread-75847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:07:57.062 [DEBUG] [Thread-75847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:07:57.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:07:57.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:07:57.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:07:57.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:07:57.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:07:57.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:07:57.095 [DEBUG] [Thread-75847] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:07:57.583 [DEBUG] [Thread-75849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:05.857 [DEBUG] [Thread-75850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:12.617 [DEBUG] [Thread-75851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:22.831 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:08:27.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:08:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:08:27.646 [DEBUG] [Thread-75852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 7, 56), 8.04, 57.67, 0.0, 37.78, 11.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:08:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:07:56
2025-12-12T20:08:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:08:28.135 [DEBUG] [Thread-75853] [transport.py] [_log()] starting thread (client mode): 0xf575c100
2025-12-12T20:08:28.135 [DEBUG] [Thread-75853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:08:28.156 [DEBUG] [Thread-75853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:08:28.156 [INFO] [Thread-75853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] client lang: <none>
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] server lang: <none>
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] kex follows: False
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] Compression: none
2025-12-12T20:08:28.160 [DEBUG] [Thread-75853] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:08:28.178 [DEBUG] [Thread-75853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:08:28.178 [DEBUG] [Thread-75853] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:08:28.178 [DEBUG] [Thread-75853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:08:28.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:08:28.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:08:28.179 [DEBUG] [Thread-75853] [transport.py] [_log()] userauth is OK
2025-12-12T20:08:28.179 [DEBUG] [Thread-75853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:08:28.180 [DEBUG] [Thread-75853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:08:28.180 [DEBUG] [Thread-75853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:08:28.180 [DEBUG] [Thread-75853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:08:28.190 [INFO] [Thread-75853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:08:28.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:08:28.841 [DEBUG] [Thread-75853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:08:28.841 [DEBUG] [Thread-75853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:08:28.841 [DEBUG] [Thread-75853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:08:28.882 [DEBUG] [Thread-75853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:08:28.882 [DEBUG] [Thread-75853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:08:28.885 [DEBUG] [Thread-75853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:08:28.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:08:28.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:08:28.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:08:28.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:08:28.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:08:28.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:08:28.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.755657 -999.00  +11.80  31.08     62   +4.70 1 2 2 1 1   187    0 3.93 -137.09 ----- 29.6 31.1 327.2 38.1 12.5 -23.5 12.4 -23.1 12.1 -21.2 12.4 -22.2
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.755657
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:08:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:07:56', tmtdew=8.04, humidity=57.67, cloud=0.0, wind=37.78, temperature=11.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:08:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:08:28.908 [DEBUG] [Thread-75853] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:08:28.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:08:28.987 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:28.993 [DEBUG] [Thread-75856] [transport.py] [_log()] starting thread (client mode): 0xf813f640
2025-12-12T20:08:28.993 [DEBUG] [Thread-75856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:08:29.008 [DEBUG] [Thread-75856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:08:29.008 [INFO] [Thread-75856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] client lang: <none>
2025-12-12T20:08:29.015 [DEBUG] [Thread-75856] [transport.py] [_log()] server lang: <none>
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] kex follows: False
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] Compression: none
2025-12-12T20:08:29.016 [DEBUG] [Thread-75856] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:08:29.071 [DEBUG] [Thread-75856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:08:29.071 [DEBUG] [Thread-75856] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:08:29.071 [DEBUG] [Thread-75856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:08:29.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:08:29.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:08:29.128 [DEBUG] [Thread-75856] [transport.py] [_log()] userauth is OK
2025-12-12T20:08:29.128 [DEBUG] [Thread-75856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:08:29.128 [DEBUG] [Thread-75856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:08:29.128 [DEBUG] [Thread-75856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:08:29.128 [DEBUG] [Thread-75856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:08:29.142 [INFO] [Thread-75856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:08:29.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:08:29.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:08:30.022 [DEBUG] [Thread-75856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:08:30.023 [DEBUG] [Thread-75856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:08:30.070 [DEBUG] [Thread-75856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:08:30.071 [DEBUG] [Thread-75856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:08:30.079 [DEBUG] [Thread-75856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:08:30.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:08:30.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:08:30.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:08:30.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:08:30.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:08:30.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:08:30.110 [DEBUG] [Thread-75856] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:08:39.373 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:42.673 [DEBUG] [Thread-75858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:48.750 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:57.727 [DEBUG] [Thread-75859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:08:59.313 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:00.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:09:00.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:09:00.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:09:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 8, 28), 8.05, 57.6, 0.0, 39.79, 11.87, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:09:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:08:28
2025-12-12T20:09:00.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:09:01.126 [DEBUG] [Thread-75860] [transport.py] [_log()] starting thread (client mode): 0xf813f4c0
2025-12-12T20:09:01.126 [DEBUG] [Thread-75860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:09:01.146 [DEBUG] [Thread-75860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:09:01.146 [INFO] [Thread-75860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:09:01.149 [DEBUG] [Thread-75860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:09:01.149 [DEBUG] [Thread-75860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:09:01.149 [DEBUG] [Thread-75860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:09:01.149 [DEBUG] [Thread-75860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] client lang: <none>
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] server lang: <none>
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] kex follows: False
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] Compression: none
2025-12-12T20:09:01.150 [DEBUG] [Thread-75860] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:09:01.168 [DEBUG] [Thread-75860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:09:01.169 [DEBUG] [Thread-75860] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:09:01.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:09:01.169 [DEBUG] [Thread-75860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:09:01.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:09:01.170 [DEBUG] [Thread-75860] [transport.py] [_log()] userauth is OK
2025-12-12T20:09:01.170 [DEBUG] [Thread-75860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:09:01.170 [DEBUG] [Thread-75860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:09:01.170 [DEBUG] [Thread-75860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:09:01.170 [DEBUG] [Thread-75860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:09:01.189 [INFO] [Thread-75860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:09:01.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:09:01.834 [DEBUG] [Thread-75860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:09:01.834 [DEBUG] [Thread-75860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:09:01.834 [DEBUG] [Thread-75860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:09:01.875 [DEBUG] [Thread-75860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:09:01.875 [DEBUG] [Thread-75860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:09:01.877 [DEBUG] [Thread-75860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:09:01.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:09:01.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:09:01.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:09:01.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:09:01.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:09:01.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:09:01.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:09:01.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:09:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:09:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.756005 -999.00  +11.80  32.08     61   +4.70 1 2 2 1 1   174    0 3.92 -138.03 ----- 28.4 32.1 319.6 39.1 12.5 -23.5 12.4 -23.1 12.1 -21.1 12.4 -22.1
2025-12-12T20:09:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:09:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.756005
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:09:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:08:28', tmtdew=8.05, humidity=57.6, cloud=0.0, wind=39.79, temperature=11.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:08:38.832', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:09:01.889 [DEBUG] [Thread-75860] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:09:01.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:09:01.974 [DEBUG] [Thread-75863] [transport.py] [_log()] starting thread (client mode): 0xf575cdf0
2025-12-12T20:09:01.974 [DEBUG] [Thread-75863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:09:01.991 [DEBUG] [Thread-75863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:09:01.991 [INFO] [Thread-75863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] client lang: <none>
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] server lang: <none>
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] kex follows: False
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] Compression: none
2025-12-12T20:09:01.999 [DEBUG] [Thread-75863] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:09:02.055 [DEBUG] [Thread-75863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:09:02.055 [DEBUG] [Thread-75863] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:09:02.055 [DEBUG] [Thread-75863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:09:02.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:09:02.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:09:02.112 [DEBUG] [Thread-75863] [transport.py] [_log()] userauth is OK
2025-12-12T20:09:02.112 [DEBUG] [Thread-75863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:09:02.112 [DEBUG] [Thread-75863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:09:02.112 [DEBUG] [Thread-75863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:09:02.112 [DEBUG] [Thread-75863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:09:02.126 [INFO] [Thread-75863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:09:02.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:09:02.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:09:02.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:02.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:02.969 [DEBUG] [Thread-75863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:09:02.969 [DEBUG] [Thread-75863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:09:03.016 [DEBUG] [Thread-75863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:09:03.016 [DEBUG] [Thread-75863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:09:03.024 [DEBUG] [Thread-75863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:09:03.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:09:03.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:09:03.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:09:03.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:09:03.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:09:03.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:09:03.055 [DEBUG] [Thread-75863] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:09:05.462 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:05.916 [DEBUG] [Thread-75865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:12.750 [DEBUG] [Thread-75866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:13.847 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:21.247 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:27.788 [DEBUG] [Thread-75867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:31.605 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:33.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:09:33.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:09:33.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:09:33.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 9), 8.0, 58.1, 0.0, 33.95, 11.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:09:33.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:09:00
2025-12-12T20:09:33.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:09:34.108 [DEBUG] [Thread-75868] [transport.py] [_log()] starting thread (client mode): 0xf81e5960
2025-12-12T20:09:34.108 [DEBUG] [Thread-75868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:09:34.128 [DEBUG] [Thread-75868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:09:34.128 [INFO] [Thread-75868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] client lang: <none>
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] server lang: <none>
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] kex follows: False
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] Compression: none
2025-12-12T20:09:34.131 [DEBUG] [Thread-75868] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:09:34.147 [DEBUG] [Thread-75868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:09:34.147 [DEBUG] [Thread-75868] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:09:34.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:09:34.147 [DEBUG] [Thread-75868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:09:34.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:09:34.148 [DEBUG] [Thread-75868] [transport.py] [_log()] userauth is OK
2025-12-12T20:09:34.148 [DEBUG] [Thread-75868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:09:34.148 [DEBUG] [Thread-75868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:09:34.148 [DEBUG] [Thread-75868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:09:34.148 [DEBUG] [Thread-75868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:09:34.164 [INFO] [Thread-75868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:09:34.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:09:34.769 [DEBUG] [Thread-75868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:09:34.769 [DEBUG] [Thread-75868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:09:34.770 [DEBUG] [Thread-75868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:09:34.811 [DEBUG] [Thread-75868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:09:34.811 [DEBUG] [Thread-75868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:09:34.813 [DEBUG] [Thread-75868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:09:34.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:09:34.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:09:34.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:09:34.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:09:34.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:09:34.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:09:34.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.756352 -999.00  +11.80  30.00     62   +4.80 1 2 2 1 1   162    0 4.15 -122.55 ----- 30.5 30.0 333.2 40.5 12.5 -23.5 12.4 -23.1 12.1 -21.1 12.4 -22.2
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.756352
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:09:34.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:09:00', tmtdew=8.0, humidity=58.1, cloud=0.0, wind=33.95, temperature=11.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:09:08.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:09:34.829 [DEBUG] [Thread-75868] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:09:34.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:09:34.915 [DEBUG] [Thread-75871] [transport.py] [_log()] starting thread (client mode): 0xf813cc40
2025-12-12T20:09:34.915 [DEBUG] [Thread-75871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:09:34.930 [DEBUG] [Thread-75871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:09:34.930 [INFO] [Thread-75871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] client lang: <none>
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] server lang: <none>
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] kex follows: False
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] Compression: none
2025-12-12T20:09:34.938 [DEBUG] [Thread-75871] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:09:34.995 [DEBUG] [Thread-75871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:09:34.995 [DEBUG] [Thread-75871] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:09:34.995 [DEBUG] [Thread-75871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:09:34.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:09:34.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:09:35.053 [DEBUG] [Thread-75871] [transport.py] [_log()] userauth is OK
2025-12-12T20:09:35.053 [DEBUG] [Thread-75871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:09:35.053 [DEBUG] [Thread-75871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:09:35.053 [DEBUG] [Thread-75871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:09:35.053 [DEBUG] [Thread-75871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:09:35.067 [INFO] [Thread-75871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:09:35.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:09:35.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:09:35.897 [DEBUG] [Thread-75871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:09:35.897 [DEBUG] [Thread-75871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:09:35.945 [DEBUG] [Thread-75871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:09:35.945 [DEBUG] [Thread-75871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:09:35.954 [DEBUG] [Thread-75871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:09:35.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:09:35.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:09:35.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:09:35.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:09:35.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:09:35.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:09:35.989 [DEBUG] [Thread-75871] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:09:37.718 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:42.815 [DEBUG] [Thread-75873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:45.145 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:52.518 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:09:57.865 [DEBUG] [Thread-75874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:00.059 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:05.984 [DEBUG] [Thread-75875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:10:06.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:10:06.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:10:06.146 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 9, 32), 7.95, 58.32, 0.0, 31.48, 11.84, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:10:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:09:32
2025-12-12T20:10:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:10:07.039 [DEBUG] [Thread-75876] [transport.py] [_log()] starting thread (client mode): 0xf81e5c00
2025-12-12T20:10:07.039 [DEBUG] [Thread-75876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:10:07.061 [DEBUG] [Thread-75876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:10:07.061 [INFO] [Thread-75876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:10:07.064 [DEBUG] [Thread-75876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:10:07.064 [DEBUG] [Thread-75876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:10:07.064 [DEBUG] [Thread-75876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:10:07.064 [DEBUG] [Thread-75876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:07.064 [DEBUG] [Thread-75876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] client lang: <none>
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] server lang: <none>
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] kex follows: False
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] Compression: none
2025-12-12T20:10:07.065 [DEBUG] [Thread-75876] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:10:07.081 [DEBUG] [Thread-75876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:10:07.081 [DEBUG] [Thread-75876] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:10:07.081 [DEBUG] [Thread-75876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:10:07.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:10:07.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:10:07.082 [DEBUG] [Thread-75876] [transport.py] [_log()] userauth is OK
2025-12-12T20:10:07.082 [DEBUG] [Thread-75876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:10:07.083 [DEBUG] [Thread-75876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:10:07.083 [DEBUG] [Thread-75876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:10:07.083 [DEBUG] [Thread-75876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:10:07.099 [INFO] [Thread-75876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:10:07.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:10:08.053 [DEBUG] [Thread-75876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:10:08.053 [DEBUG] [Thread-75876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:10:08.053 [DEBUG] [Thread-75876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:10:08.094 [DEBUG] [Thread-75876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:10:08.094 [DEBUG] [Thread-75876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:10:08.097 [DEBUG] [Thread-75876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:10:08.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:10:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:10:08.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:10:08.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:10:08.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:10:08.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:10:08.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:10:08.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:10:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:10:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.756699 -999.00  +11.80  37.24     62   +4.70 1 2 2 1 1   151    0 4.39 -116.77 ----- 30.8 37.2 333.2 43.2 12.5 -23.3 12.3 -23.0 12.1 -20.8 12.4 -21.7
2025-12-12T20:10:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:10:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:10:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.756699
2025-12-12T20:10:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:10:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:10:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:10:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:10:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:10:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:09:32', tmtdew=7.95, humidity=58.32, cloud=0.0, wind=31.48, temperature=11.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:09:38.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:10:08.121 [DEBUG] [Thread-75876] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:10:08.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:10:08.218 [DEBUG] [Thread-75879] [transport.py] [_log()] starting thread (client mode): 0xf574f790
2025-12-12T20:10:08.218 [DEBUG] [Thread-75879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:10:08.233 [DEBUG] [Thread-75879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:10:08.233 [INFO] [Thread-75879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:10:08.240 [DEBUG] [Thread-75879] [transport.py] [_log()] client lang: <none>
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] server lang: <none>
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] kex follows: False
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] Compression: none
2025-12-12T20:10:08.241 [DEBUG] [Thread-75879] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:10:08.296 [DEBUG] [Thread-75879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:10:08.296 [DEBUG] [Thread-75879] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:10:08.297 [DEBUG] [Thread-75879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:10:08.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:10:08.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:10:08.352 [DEBUG] [Thread-75879] [transport.py] [_log()] userauth is OK
2025-12-12T20:10:08.353 [DEBUG] [Thread-75879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:10:08.353 [DEBUG] [Thread-75879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:10:08.353 [DEBUG] [Thread-75879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:10:08.353 [DEBUG] [Thread-75879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:10:08.371 [INFO] [Thread-75879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:10:08.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:10:08.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:10:09.030 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:09.032 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:09.236 [DEBUG] [Thread-75879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:10:09.236 [DEBUG] [Thread-75879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:10:09.284 [DEBUG] [Thread-75879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:10:09.284 [DEBUG] [Thread-75879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:10:09.293 [DEBUG] [Thread-75879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:10:09.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:10:09.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:10:09.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:10:09.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:10:09.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:10:09.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:10:09.328 [DEBUG] [Thread-75879] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:10:12.893 [DEBUG] [Thread-75881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:13.539 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:20.947 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:27.933 [DEBUG] [Thread-75882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:28.401 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:34.503 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:39.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:10:39.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:10:39.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:10:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 10, 36), 7.95, 58.02, 0.0, 36.95, 11.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:10:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:10:36
2025-12-12T20:10:40.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:10:40.316 [DEBUG] [Thread-75883] [transport.py] [_log()] starting thread (client mode): 0xf57a63e0
2025-12-12T20:10:40.316 [DEBUG] [Thread-75883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:10:40.337 [DEBUG] [Thread-75883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:10:40.337 [INFO] [Thread-75883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] client lang: <none>
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] server lang: <none>
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] kex follows: False
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:10:40.340 [DEBUG] [Thread-75883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:10:40.341 [DEBUG] [Thread-75883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:10:40.341 [DEBUG] [Thread-75883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:10:40.341 [DEBUG] [Thread-75883] [transport.py] [_log()] Compression: none
2025-12-12T20:10:40.341 [DEBUG] [Thread-75883] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:10:40.361 [DEBUG] [Thread-75883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:10:40.361 [DEBUG] [Thread-75883] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:10:40.362 [DEBUG] [Thread-75883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:10:40.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:10:40.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:10:40.364 [DEBUG] [Thread-75883] [transport.py] [_log()] userauth is OK
2025-12-12T20:10:40.364 [DEBUG] [Thread-75883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:10:40.364 [DEBUG] [Thread-75883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:10:40.364 [DEBUG] [Thread-75883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:10:40.364 [DEBUG] [Thread-75883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:10:40.389 [INFO] [Thread-75883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:10:40.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:10:41.029 [DEBUG] [Thread-75883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:10:41.029 [DEBUG] [Thread-75883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:10:41.030 [DEBUG] [Thread-75883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:10:41.071 [DEBUG] [Thread-75883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:10:41.071 [DEBUG] [Thread-75883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:10:41.074 [DEBUG] [Thread-75883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:10:41.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:10:41.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:10:41.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:10:41.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:10:41.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:10:41.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:10:41.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:10:41.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:10:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:10:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.757046 -999.00  +11.80  33.39     62   +4.80 1 2 2 1 1   140    0 4.60 -106.97 ----- 28.4 33.4 336.2 36.5 12.5 -23.5 12.3 -22.9 12.1 -21.0 12.4 -21.8
2025-12-12T20:10:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:10:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:10:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.757046
2025-12-12T20:10:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:10:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:10:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:10:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:10:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:10:41.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:10:36', tmtdew=7.95, humidity=58.02, cloud=0.0, wind=36.95, temperature=11.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:10:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:10:41.101 [DEBUG] [Thread-75883] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:10:41.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:10:41.206 [DEBUG] [Thread-75886] [transport.py] [_log()] starting thread (client mode): 0xf5770c40
2025-12-12T20:10:41.206 [DEBUG] [Thread-75886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:10:41.220 [DEBUG] [Thread-75886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:10:41.221 [INFO] [Thread-75886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:10:41.228 [DEBUG] [Thread-75886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:10:41.228 [DEBUG] [Thread-75886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:10:41.228 [DEBUG] [Thread-75886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:10:41.228 [DEBUG] [Thread-75886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:41.228 [DEBUG] [Thread-75886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:10:41.228 [DEBUG] [Thread-75886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] client lang: <none>
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] server lang: <none>
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] kex follows: False
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] Compression: none
2025-12-12T20:10:41.229 [DEBUG] [Thread-75886] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:10:41.288 [DEBUG] [Thread-75886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:10:41.288 [DEBUG] [Thread-75886] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:10:41.289 [DEBUG] [Thread-75886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:10:41.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:10:41.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:10:41.346 [DEBUG] [Thread-75886] [transport.py] [_log()] userauth is OK
2025-12-12T20:10:41.346 [DEBUG] [Thread-75886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:10:41.346 [DEBUG] [Thread-75886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:10:41.347 [DEBUG] [Thread-75886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:10:41.347 [DEBUG] [Thread-75886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:10:41.368 [INFO] [Thread-75886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:10:41.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:10:41.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:10:41.931 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:42.217 [DEBUG] [Thread-75886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:10:42.217 [DEBUG] [Thread-75886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:10:42.265 [DEBUG] [Thread-75886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:10:42.265 [DEBUG] [Thread-75886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:10:42.274 [DEBUG] [Thread-75886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:10:42.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:10:42.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:10:42.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
2025-12-12T20:10:42.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:10:42.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:10:42.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:10:42.308 [DEBUG] [Thread-75886] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:10:42.957 [DEBUG] [Thread-75888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:49.301 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:10:58.002 [DEBUG] [Thread-75889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:00.998 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:06.044 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:06.057 [DEBUG] [Thread-75890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:12.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:11:12.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:11:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:11:13.029 [DEBUG] [Thread-75891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:13.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 11, 9), 7.94, 58.07, 0.0, 37.55, 11.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:11:13.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:11:09
2025-12-12T20:11:13.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:11:13.311 [DEBUG] [Thread-75892] [transport.py] [_log()] starting thread (client mode): 0xf5773190
2025-12-12T20:11:13.311 [DEBUG] [Thread-75892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:11:13.332 [DEBUG] [Thread-75892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:11:13.332 [INFO] [Thread-75892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] client lang: <none>
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] server lang: <none>
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] kex follows: False
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] Compression: none
2025-12-12T20:11:13.335 [DEBUG] [Thread-75892] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:11:13.352 [DEBUG] [Thread-75892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:11:13.352 [DEBUG] [Thread-75892] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:11:13.352 [DEBUG] [Thread-75892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:11:13.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:11:13.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:11:13.354 [DEBUG] [Thread-75892] [transport.py] [_log()] userauth is OK
2025-12-12T20:11:13.354 [DEBUG] [Thread-75892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:11:13.355 [DEBUG] [Thread-75892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:11:13.355 [DEBUG] [Thread-75892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:11:13.355 [DEBUG] [Thread-75892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:11:13.376 [INFO] [Thread-75892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:11:13.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:11:13.398 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:14.044 [DEBUG] [Thread-75892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:11:14.044 [DEBUG] [Thread-75892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:11:14.045 [DEBUG] [Thread-75892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:11:14.085 [DEBUG] [Thread-75892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:11:14.085 [DEBUG] [Thread-75892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:11:14.087 [DEBUG] [Thread-75892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:11:14.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:11:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:11:14.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:11:14.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:11:14.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:11:14.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:11:14.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:11:14.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.757393 -999.00  +11.80  29.74     62   +4.80 1 2 1 1 1   130    0 4.61 -107.46 ----- 29.5 29.7 331.8 35.6 12.5 -23.4 12.3 -22.8 12.1 -21.1 12.4 -21.8
2025-12-12T20:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.757393
2025-12-12T20:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:11:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:11:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:11:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:11:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:11:14.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:11:09', tmtdew=7.94, humidity=58.07, cloud=0.0, wind=37.55, temperature=11.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:10:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:11:14.112 [DEBUG] [Thread-75892] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:11:14.173 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:14.174 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:14.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:11:14.208 [DEBUG] [Thread-75895] [transport.py] [_log()] starting thread (client mode): 0xf813d7e0
2025-12-12T20:11:14.208 [DEBUG] [Thread-75895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:11:14.222 [DEBUG] [Thread-75895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:11:14.222 [INFO] [Thread-75895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:11:14.230 [DEBUG] [Thread-75895] [transport.py] [_log()] client lang: <none>
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] server lang: <none>
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] kex follows: False
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] Compression: none
2025-12-12T20:11:14.231 [DEBUG] [Thread-75895] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:11:14.292 [DEBUG] [Thread-75895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:11:14.293 [DEBUG] [Thread-75895] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:11:14.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:11:14.294 [DEBUG] [Thread-75895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:11:14.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:11:14.349 [DEBUG] [Thread-75895] [transport.py] [_log()] userauth is OK
2025-12-12T20:11:14.349 [DEBUG] [Thread-75895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:11:14.349 [DEBUG] [Thread-75895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:11:14.349 [DEBUG] [Thread-75895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:11:14.349 [DEBUG] [Thread-75895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:11:14.370 [INFO] [Thread-75895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:11:14.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:11:14.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:11:15.228 [DEBUG] [Thread-75895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:11:15.228 [DEBUG] [Thread-75895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:11:15.276 [DEBUG] [Thread-75895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:11:15.276 [DEBUG] [Thread-75895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:11:15.285 [DEBUG] [Thread-75895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:11:15.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:11:15.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:11:15.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:11:15.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:11:15.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:11:15.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:11:15.320 [DEBUG] [Thread-75895] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:11:20.789 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:25.292 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:28.059 [DEBUG] [Thread-75897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:30.429 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:37.835 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:43.100 [DEBUG] [Thread-75898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:45.241 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:11:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:11:45.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:11:45.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:11:46.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 11, 41), 7.83, 58.57, 0.0, 37.88, 11.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:11:46.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:11:41
2025-12-12T20:11:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:11:46.342 [DEBUG] [Thread-75899] [transport.py] [_log()] starting thread (client mode): 0xf81e5270
2025-12-12T20:11:46.342 [DEBUG] [Thread-75899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:11:46.363 [DEBUG] [Thread-75899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:11:46.363 [INFO] [Thread-75899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] client lang: <none>
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] server lang: <none>
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] kex follows: False
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] Compression: none
2025-12-12T20:11:46.366 [DEBUG] [Thread-75899] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:11:46.384 [DEBUG] [Thread-75899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:11:46.384 [DEBUG] [Thread-75899] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:11:46.384 [DEBUG] [Thread-75899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:11:46.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:11:46.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:11:46.385 [DEBUG] [Thread-75899] [transport.py] [_log()] userauth is OK
2025-12-12T20:11:46.385 [DEBUG] [Thread-75899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:11:46.385 [DEBUG] [Thread-75899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:11:46.385 [DEBUG] [Thread-75899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:11:46.385 [DEBUG] [Thread-75899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:11:46.394 [INFO] [Thread-75899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:11:46.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:11:47.040 [DEBUG] [Thread-75899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:11:47.040 [DEBUG] [Thread-75899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:11:47.040 [DEBUG] [Thread-75899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:11:47.080 [DEBUG] [Thread-75899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:11:47.081 [DEBUG] [Thread-75899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:11:47.083 [DEBUG] [Thread-75899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:11:47.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:11:47.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:11:47.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:11:47.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:11:47.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:11:47.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:11:47.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.757741 -999.00  +11.80  30.17     62   +4.80 1 2 2 1 1   120    0 4.38 -109.58 ----- 26.3 30.2 320.0 35.4 12.5 -23.4 12.3 -23.1 12.1 -21.1 12.4 -21.8
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.757741
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:11:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:11:41', tmtdew=7.83, humidity=58.57, cloud=0.0, wind=37.88, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:11:08.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:11:47.102 [DEBUG] [Thread-75899] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:11:47.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:11:47.188 [DEBUG] [Thread-75902] [transport.py] [_log()] starting thread (client mode): 0xf574e950
2025-12-12T20:11:47.188 [DEBUG] [Thread-75902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:11:47.206 [DEBUG] [Thread-75902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:11:47.206 [INFO] [Thread-75902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] client lang: <none>
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] server lang: <none>
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] kex follows: False
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] Compression: none
2025-12-12T20:11:47.214 [DEBUG] [Thread-75902] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:11:47.271 [DEBUG] [Thread-75902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:11:47.271 [DEBUG] [Thread-75902] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:11:47.272 [DEBUG] [Thread-75902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:11:47.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:11:47.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:11:47.328 [DEBUG] [Thread-75902] [transport.py] [_log()] userauth is OK
2025-12-12T20:11:47.328 [DEBUG] [Thread-75902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:11:47.328 [DEBUG] [Thread-75902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:11:47.329 [DEBUG] [Thread-75902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:11:47.329 [DEBUG] [Thread-75902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:11:47.346 [INFO] [Thread-75902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:11:47.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:11:47.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:11:48.207 [DEBUG] [Thread-75902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:11:48.208 [DEBUG] [Thread-75902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:11:48.256 [DEBUG] [Thread-75902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:11:48.256 [DEBUG] [Thread-75902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:11:48.265 [DEBUG] [Thread-75902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:11:48.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:11:48.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:11:48.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:11:48.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:11:48.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:11:48.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:11:48.299 [DEBUG] [Thread-75902] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:11:58.127 [DEBUG] [Thread-75904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:06.134 [DEBUG] [Thread-75905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:13.179 [DEBUG] [Thread-75906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:18.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:12:18.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:12:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:12:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 12, 13), 7.81, 58.68, 0.0, 36.29, 11.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:12:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:12:13
2025-12-12T20:12:19.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:12:19.295 [DEBUG] [Thread-75907] [transport.py] [_log()] starting thread (client mode): 0xf5797e50
2025-12-12T20:12:19.295 [DEBUG] [Thread-75907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:12:19.316 [DEBUG] [Thread-75907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:12:19.316 [INFO] [Thread-75907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:12:19.319 [DEBUG] [Thread-75907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:12:19.319 [DEBUG] [Thread-75907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:12:19.319 [DEBUG] [Thread-75907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:12:19.319 [DEBUG] [Thread-75907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:19.319 [DEBUG] [Thread-75907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] client lang: <none>
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] server lang: <none>
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] kex follows: False
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] Compression: none
2025-12-12T20:12:19.320 [DEBUG] [Thread-75907] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:12:19.338 [DEBUG] [Thread-75907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:12:19.338 [DEBUG] [Thread-75907] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:12:19.339 [DEBUG] [Thread-75907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:12:19.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:12:19.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:12:19.341 [DEBUG] [Thread-75907] [transport.py] [_log()] userauth is OK
2025-12-12T20:12:19.341 [DEBUG] [Thread-75907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:12:19.341 [DEBUG] [Thread-75907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:12:19.341 [DEBUG] [Thread-75907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:12:19.341 [DEBUG] [Thread-75907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:12:19.356 [INFO] [Thread-75907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:12:19.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:12:19.593 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:19.594 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:19.948 [DEBUG] [Thread-75907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:12:19.949 [DEBUG] [Thread-75907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:12:19.949 [DEBUG] [Thread-75907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:12:19.990 [DEBUG] [Thread-75907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:12:19.990 [DEBUG] [Thread-75907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:12:19.993 [DEBUG] [Thread-75907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:12:20.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:12:20.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:12:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:12:20.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:12:20.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:12:20.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:12:20.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:12:20.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:12:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:12:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.758435 -999.00  +11.70  27.53     62   +4.90 1 2 1 1 1   103    0 4.66 -102.72 ----- 33.5 27.5 314.4 38.7 12.4 -23.2 12.4 -23.0 12.1 -20.5 12.4 -21.5
2025-12-12T20:12:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:12:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:12:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.758435
2025-12-12T20:12:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:12:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:12:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:12:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:12:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:12:20.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:12:13', tmtdew=7.81, humidity=58.68, cloud=0.0, wind=36.29, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:12:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:12:20.018 [DEBUG] [Thread-75907] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:12:20.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:12:20.114 [DEBUG] [Thread-75910] [transport.py] [_log()] starting thread (client mode): 0xf813cf40
2025-12-12T20:12:20.114 [DEBUG] [Thread-75910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:12:20.129 [DEBUG] [Thread-75910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:12:20.129 [INFO] [Thread-75910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:12:20.137 [DEBUG] [Thread-75910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:12:20.137 [DEBUG] [Thread-75910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:12:20.137 [DEBUG] [Thread-75910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:12:20.137 [DEBUG] [Thread-75910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] client lang: <none>
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] server lang: <none>
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] kex follows: False
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] Compression: none
2025-12-12T20:12:20.138 [DEBUG] [Thread-75910] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:12:20.196 [DEBUG] [Thread-75910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:12:20.197 [DEBUG] [Thread-75910] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:12:20.197 [DEBUG] [Thread-75910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:12:20.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:12:20.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:12:20.253 [DEBUG] [Thread-75910] [transport.py] [_log()] userauth is OK
2025-12-12T20:12:20.253 [DEBUG] [Thread-75910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:12:20.253 [DEBUG] [Thread-75910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:12:20.253 [DEBUG] [Thread-75910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:12:20.253 [DEBUG] [Thread-75910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:12:20.272 [INFO] [Thread-75910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:12:20.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:12:20.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:12:21.120 [DEBUG] [Thread-75910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:12:21.120 [DEBUG] [Thread-75910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:12:21.167 [DEBUG] [Thread-75910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:12:21.167 [DEBUG] [Thread-75910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:12:21.176 [DEBUG] [Thread-75910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:12:21.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:12:21.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:12:21.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:12:21.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:12:21.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:12:21.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:12:21.208 [DEBUG] [Thread-75910] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:12:28.205 [DEBUG] [Thread-75912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:43.250 [DEBUG] [Thread-75913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:12:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:12:51.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:12:51.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:12:51.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 12, 45), 7.79, 58.73, 0.0, 38.22, 11.77, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:12:51.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:12:45
2025-12-12T20:12:52.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:12:52.198 [DEBUG] [Thread-75914] [transport.py] [_log()] starting thread (client mode): 0xf81e48e0
2025-12-12T20:12:52.198 [DEBUG] [Thread-75914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:12:52.220 [DEBUG] [Thread-75914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:12:52.220 [INFO] [Thread-75914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:12:52.223 [DEBUG] [Thread-75914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:12:52.223 [DEBUG] [Thread-75914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:12:52.223 [DEBUG] [Thread-75914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] client lang: <none>
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] server lang: <none>
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] kex follows: False
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:12:52.224 [DEBUG] [Thread-75914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:12:52.225 [DEBUG] [Thread-75914] [transport.py] [_log()] Compression: none
2025-12-12T20:12:52.225 [DEBUG] [Thread-75914] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:12:52.242 [DEBUG] [Thread-75914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:12:52.242 [DEBUG] [Thread-75914] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:12:52.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:12:52.243 [DEBUG] [Thread-75914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:12:52.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:12:52.246 [DEBUG] [Thread-75914] [transport.py] [_log()] userauth is OK
2025-12-12T20:12:52.246 [DEBUG] [Thread-75914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:12:52.246 [DEBUG] [Thread-75914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:12:52.246 [DEBUG] [Thread-75914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:12:52.246 [DEBUG] [Thread-75914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:12:52.271 [INFO] [Thread-75914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:12:52.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:12:52.923 [DEBUG] [Thread-75914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:12:52.923 [DEBUG] [Thread-75914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:12:52.924 [DEBUG] [Thread-75914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:12:52.964 [DEBUG] [Thread-75914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:12:52.964 [DEBUG] [Thread-75914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:12:52.966 [DEBUG] [Thread-75914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:12:52.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:12:52.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:12:52.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:12:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:12:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:12:52.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:12:52.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:12:52.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:12:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:12:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.758782 -999.00  +11.70  33.54     62   +4.90 1 2 2 1 1    95    0 4.56 -103.89 ----- 33.7 33.5 312.2 38.8 12.4 -23.2 12.3 -22.7 12.1 -20.2 12.4 -21.0
2025-12-12T20:12:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:12:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:12:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.758782
2025-12-12T20:12:52.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:12:52.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:12:52.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:12:52.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:12:52.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:12:52.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:12:45', tmtdew=7.79, humidity=58.73, cloud=0.0, wind=38.22, temperature=11.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:12:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:12:52.991 [DEBUG] [Thread-75914] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:12:53.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:12:53.086 [DEBUG] [Thread-75917] [transport.py] [_log()] starting thread (client mode): 0xf5770730
2025-12-12T20:12:53.086 [DEBUG] [Thread-75917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:12:53.100 [DEBUG] [Thread-75917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:12:53.101 [INFO] [Thread-75917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:53.108 [DEBUG] [Thread-75917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] client lang: <none>
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] server lang: <none>
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] kex follows: False
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] Compression: none
2025-12-12T20:12:53.109 [DEBUG] [Thread-75917] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:12:53.164 [DEBUG] [Thread-75917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:12:53.165 [DEBUG] [Thread-75917] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:12:53.165 [DEBUG] [Thread-75917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:12:53.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:12:53.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:12:53.221 [DEBUG] [Thread-75917] [transport.py] [_log()] userauth is OK
2025-12-12T20:12:53.221 [DEBUG] [Thread-75917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:12:53.221 [DEBUG] [Thread-75917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:12:53.221 [DEBUG] [Thread-75917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:12:53.221 [DEBUG] [Thread-75917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:12:53.243 [INFO] [Thread-75917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:12:53.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:12:53.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:12:54.073 [DEBUG] [Thread-75917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:12:54.073 [DEBUG] [Thread-75917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:12:54.121 [DEBUG] [Thread-75917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:12:54.121 [DEBUG] [Thread-75917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:12:54.130 [DEBUG] [Thread-75917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:12:54.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:12:54.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:12:54.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:12:54.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:12:54.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:12:54.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:12:54.165 [DEBUG] [Thread-75917] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:12:58.281 [DEBUG] [Thread-75919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:06.213 [DEBUG] [Thread-75920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:13.322 [DEBUG] [Thread-75921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:17.760 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:20.804 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:13:24.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:13:24.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:13:24.464 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:24.465 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 13, 17), 7.76, 58.85, 0.0, 36.93, 11.77, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:13:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:13:17
2025-12-12T20:13:24.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:13:25.138 [DEBUG] [Thread-75922] [transport.py] [_log()] starting thread (client mode): 0xf81e72b0
2025-12-12T20:13:25.138 [DEBUG] [Thread-75922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:13:25.159 [DEBUG] [Thread-75922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:13:25.160 [INFO] [Thread-75922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] client lang: <none>
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] server lang: <none>
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] kex follows: False
2025-12-12T20:13:25.163 [DEBUG] [Thread-75922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:13:25.164 [DEBUG] [Thread-75922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:13:25.164 [DEBUG] [Thread-75922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:13:25.164 [DEBUG] [Thread-75922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:13:25.164 [DEBUG] [Thread-75922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:13:25.164 [DEBUG] [Thread-75922] [transport.py] [_log()] Compression: none
2025-12-12T20:13:25.164 [DEBUG] [Thread-75922] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:13:25.175 [DEBUG] [Thread-75922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:13:25.175 [DEBUG] [Thread-75922] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:13:25.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:13:25.176 [DEBUG] [Thread-75922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:13:25.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:13:25.178 [DEBUG] [Thread-75922] [transport.py] [_log()] userauth is OK
2025-12-12T20:13:25.178 [DEBUG] [Thread-75922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:13:25.179 [DEBUG] [Thread-75922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:13:25.179 [DEBUG] [Thread-75922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:13:25.179 [DEBUG] [Thread-75922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:13:25.203 [INFO] [Thread-75922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:13:25.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:13:25.860 [DEBUG] [Thread-75922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:13:25.860 [DEBUG] [Thread-75922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:13:25.860 [DEBUG] [Thread-75922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:13:25.901 [DEBUG] [Thread-75922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:13:25.901 [DEBUG] [Thread-75922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:13:25.904 [DEBUG] [Thread-75922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:13:25.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:13:25.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:13:25.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:13:25.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:13:25.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:13:25.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:13:25.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:13:25.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:13:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:13:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.759129 -999.00  +11.70  28.28     63   +4.90 1 2 1 1 1    88    0 4.15 -114.86 ----- 36.4 28.3 319.0 42.3 12.4 -23.1 12.3 -22.6 12.1 -19.8 12.4 -20.5
2025-12-12T20:13:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:13:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:13:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.759129
2025-12-12T20:13:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:13:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:13:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:13:25.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:13:25.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:13:25.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:13:17', tmtdew=7.76, humidity=58.85, cloud=0.0, wind=36.93, temperature=11.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:13:08.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:13:25.931 [DEBUG] [Thread-75922] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:13:26.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:13:26.030 [DEBUG] [Thread-75925] [transport.py] [_log()] starting thread (client mode): 0xf5703f40
2025-12-12T20:13:26.030 [DEBUG] [Thread-75925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:13:26.045 [DEBUG] [Thread-75925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:13:26.045 [INFO] [Thread-75925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:13:26.052 [DEBUG] [Thread-75925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:13:26.052 [DEBUG] [Thread-75925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:13:26.052 [DEBUG] [Thread-75925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] client lang: <none>
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] server lang: <none>
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] kex follows: False
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] Compression: none
2025-12-12T20:13:26.053 [DEBUG] [Thread-75925] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:13:26.113 [DEBUG] [Thread-75925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:13:26.113 [DEBUG] [Thread-75925] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:13:26.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:13:26.114 [DEBUG] [Thread-75925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:13:26.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:13:26.169 [DEBUG] [Thread-75925] [transport.py] [_log()] userauth is OK
2025-12-12T20:13:26.169 [DEBUG] [Thread-75925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:13:26.169 [DEBUG] [Thread-75925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:13:26.169 [DEBUG] [Thread-75925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:13:26.169 [DEBUG] [Thread-75925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:13:26.188 [INFO] [Thread-75925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:13:26.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:13:26.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:13:27.041 [DEBUG] [Thread-75925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:13:27.042 [DEBUG] [Thread-75925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:13:27.090 [DEBUG] [Thread-75925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:13:27.090 [DEBUG] [Thread-75925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:13:27.099 [DEBUG] [Thread-75925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:13:27.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:13:27.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:13:27.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:13:27.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:13:27.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:13:27.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:13:27.135 [DEBUG] [Thread-75925] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:13:28.348 [DEBUG] [Thread-75927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:43.387 [DEBUG] [Thread-75928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:49.197 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:13:57.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:13:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:13:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 13, 49), 7.72, 59.02, 0.0, 35.09, 11.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:13:57.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:13:49
2025-12-12T20:13:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:13:58.107 [DEBUG] [Thread-75929] [transport.py] [_log()] starting thread (client mode): 0xf574ec50
2025-12-12T20:13:58.107 [DEBUG] [Thread-75929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:13:58.130 [DEBUG] [Thread-75929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:13:58.130 [INFO] [Thread-75929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:13:58.132 [DEBUG] [Thread-75929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:13:58.132 [DEBUG] [Thread-75929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] client lang: <none>
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] server lang: <none>
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] kex follows: False
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:13:58.133 [DEBUG] [Thread-75929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:13:58.134 [DEBUG] [Thread-75929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:13:58.134 [DEBUG] [Thread-75929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:13:58.134 [DEBUG] [Thread-75929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:13:58.134 [DEBUG] [Thread-75929] [transport.py] [_log()] Compression: none
2025-12-12T20:13:58.134 [DEBUG] [Thread-75929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:13:58.151 [DEBUG] [Thread-75929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:13:58.152 [DEBUG] [Thread-75929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:13:58.152 [DEBUG] [Thread-75929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:13:58.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:13:58.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:13:58.154 [DEBUG] [Thread-75929] [transport.py] [_log()] userauth is OK
2025-12-12T20:13:58.154 [DEBUG] [Thread-75929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:13:58.154 [DEBUG] [Thread-75929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:13:58.154 [DEBUG] [Thread-75929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:13:58.154 [DEBUG] [Thread-75929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:13:58.172 [INFO] [Thread-75929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:13:58.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:13:58.417 [DEBUG] [Thread-75931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:13:58.738 [DEBUG] [Thread-75929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:13:58.738 [DEBUG] [Thread-75929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:13:58.739 [DEBUG] [Thread-75929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:13:58.780 [DEBUG] [Thread-75929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:13:58.780 [DEBUG] [Thread-75929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:13:58.783 [DEBUG] [Thread-75929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:13:58.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:13:58.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:13:58.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:13:58.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:13:58.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:13:58.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:13:58.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:13:58.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:13:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:13:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.759477 -999.00  +11.70  22.55     63   +4.90 1 2 1 1 1    81    0 4.30 -106.08 ----- 23.8 22.6 323.0 37.0 12.5 -22.6 12.3 -22.2 12.1 -19.7 12.4 -20.3
2025-12-12T20:13:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:13:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:13:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.759477
2025-12-12T20:13:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:13:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:13:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:13:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:13:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:13:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:13:49', tmtdew=7.72, humidity=59.02, cloud=0.0, wind=35.09, temperature=11.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:13:38.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:13:58.812 [DEBUG] [Thread-75929] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:13:58.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:13:58.912 [DEBUG] [Thread-75933] [transport.py] [_log()] starting thread (client mode): 0xf57713c0
2025-12-12T20:13:58.912 [DEBUG] [Thread-75933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:13:58.928 [DEBUG] [Thread-75933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:13:58.928 [INFO] [Thread-75933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:13:58.935 [DEBUG] [Thread-75933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:13:58.935 [DEBUG] [Thread-75933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] client lang: <none>
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] server lang: <none>
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] kex follows: False
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] Compression: none
2025-12-12T20:13:58.936 [DEBUG] [Thread-75933] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:13:58.992 [DEBUG] [Thread-75933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:13:58.992 [DEBUG] [Thread-75933] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:13:58.993 [DEBUG] [Thread-75933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:13:58.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:13:58.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:13:59.048 [DEBUG] [Thread-75933] [transport.py] [_log()] userauth is OK
2025-12-12T20:13:59.049 [DEBUG] [Thread-75933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:13:59.049 [DEBUG] [Thread-75933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:13:59.049 [DEBUG] [Thread-75933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:13:59.049 [DEBUG] [Thread-75933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:13:59.071 [INFO] [Thread-75933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:13:59.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:13:59.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:13:59.904 [DEBUG] [Thread-75933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:13:59.904 [DEBUG] [Thread-75933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:13:59.953 [DEBUG] [Thread-75933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:13:59.953 [DEBUG] [Thread-75933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:13:59.963 [DEBUG] [Thread-75933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:13:59.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:13:59.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:13:59.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:13:59.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:13:59.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:13:59.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:13:59.998 [DEBUG] [Thread-75933] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:14:06.269 [DEBUG] [Thread-75935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:13.447 [DEBUG] [Thread-75936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:16.590 [DEBUG] [Thread-75649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:28.500 [DEBUG] [Thread-75937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:29.760 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:29.761 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:30.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:14:30.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:14:30.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:14:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 14, 21), 7.71, 59.1, 0.0, 32.62, 11.86, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:14:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:14:21
2025-12-12T20:14:30.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:14:30.960 [DEBUG] [Thread-75938] [transport.py] [_log()] starting thread (client mode): 0xf578b760
2025-12-12T20:14:30.960 [DEBUG] [Thread-75938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:14:30.981 [DEBUG] [Thread-75938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:14:30.982 [INFO] [Thread-75938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] client lang: <none>
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] server lang: <none>
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] kex follows: False
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] Compression: none
2025-12-12T20:14:30.984 [DEBUG] [Thread-75938] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:14:30.999 [DEBUG] [Thread-75938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:14:31.000 [DEBUG] [Thread-75938] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:14:31.000 [DEBUG] [Thread-75938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:14:31.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:14:31.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:14:31.003 [DEBUG] [Thread-75938] [transport.py] [_log()] userauth is OK
2025-12-12T20:14:31.003 [DEBUG] [Thread-75938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:14:31.003 [DEBUG] [Thread-75938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:14:31.003 [DEBUG] [Thread-75938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:14:31.004 [DEBUG] [Thread-75938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:14:31.027 [INFO] [Thread-75938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:14:31.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:14:31.649 [DEBUG] [Thread-75938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:14:31.650 [DEBUG] [Thread-75938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:14:31.650 [DEBUG] [Thread-75938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:14:31.691 [DEBUG] [Thread-75938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:14:31.691 [DEBUG] [Thread-75938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:14:31.694 [DEBUG] [Thread-75938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:14:31.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:14:31.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:14:31.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:14:31.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:14:31.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:14:31.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:14:31.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:14:31.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:14:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:14:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.759824 -999.00  +11.80  33.39     63   +5.00 1 2 2 1 1    75    0 4.55 -102.18 ----- 30.5 33.4 330.9 40.9 12.5 -22.8 12.3 -22.2 12.0 -19.7 12.4 -20.3
2025-12-12T20:14:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:14:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:14:31.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.759824
2025-12-12T20:14:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:14:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:14:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:14:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:14:31.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:14:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:14:21', tmtdew=7.71, humidity=59.1, cloud=0.0, wind=32.62, temperature=11.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:14:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:14:31.719 [DEBUG] [Thread-75938] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:14:31.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:14:31.814 [DEBUG] [Thread-75941] [transport.py] [_log()] starting thread (client mode): 0xf578a6b0
2025-12-12T20:14:31.815 [DEBUG] [Thread-75941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:14:31.831 [DEBUG] [Thread-75941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:14:31.831 [INFO] [Thread-75941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:14:31.839 [DEBUG] [Thread-75941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] client lang: <none>
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] server lang: <none>
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] kex follows: False
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] Compression: none
2025-12-12T20:14:31.840 [DEBUG] [Thread-75941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:14:31.898 [DEBUG] [Thread-75941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:14:31.898 [DEBUG] [Thread-75941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:14:31.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:14:31.899 [DEBUG] [Thread-75941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:14:31.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:14:31.961 [DEBUG] [Thread-75941] [transport.py] [_log()] userauth is OK
2025-12-12T20:14:31.961 [DEBUG] [Thread-75941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:14:31.962 [DEBUG] [Thread-75941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:14:31.962 [DEBUG] [Thread-75941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:14:31.962 [DEBUG] [Thread-75941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:14:31.989 [INFO] [Thread-75941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:14:31.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:14:31.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:14:32.878 [DEBUG] [Thread-75941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:14:32.878 [DEBUG] [Thread-75941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:14:32.925 [DEBUG] [Thread-75941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:14:32.926 [DEBUG] [Thread-75941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:14:32.934 [DEBUG] [Thread-75941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:14:32.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:14:32.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:14:32.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:14:32.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:14:32.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:14:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:14:32.966 [DEBUG] [Thread-75941] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:14:43.531 [DEBUG] [Thread-75943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:14:58.574 [DEBUG] [Thread-75944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:02.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:15:02.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:15:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:15:03.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 14, 53), 7.66, 59.07, 0.0, 40.48, 11.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:15:03.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:14:53
2025-12-12T20:15:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:15:03.961 [DEBUG] [Thread-75945] [transport.py] [_log()] starting thread (client mode): 0xf57a73a0
2025-12-12T20:15:03.961 [DEBUG] [Thread-75945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:15:03.981 [DEBUG] [Thread-75945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:15:03.981 [INFO] [Thread-75945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:15:03.984 [DEBUG] [Thread-75945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:15:03.984 [DEBUG] [Thread-75945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:15:03.984 [DEBUG] [Thread-75945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:15:03.984 [DEBUG] [Thread-75945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] client lang: <none>
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] server lang: <none>
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] kex follows: False
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] Compression: none
2025-12-12T20:15:03.985 [DEBUG] [Thread-75945] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:15:04.004 [DEBUG] [Thread-75945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:15:04.004 [DEBUG] [Thread-75945] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:15:04.004 [DEBUG] [Thread-75945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:15:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:15:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:15:04.006 [DEBUG] [Thread-75945] [transport.py] [_log()] userauth is OK
2025-12-12T20:15:04.007 [DEBUG] [Thread-75945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:15:04.007 [DEBUG] [Thread-75945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:15:04.007 [DEBUG] [Thread-75945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:15:04.007 [DEBUG] [Thread-75945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:15:04.029 [INFO] [Thread-75945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:15:04.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:15:04.889 [DEBUG] [Thread-75945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:15:04.889 [DEBUG] [Thread-75945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:15:04.889 [DEBUG] [Thread-75945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:15:04.930 [DEBUG] [Thread-75945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:15:04.930 [DEBUG] [Thread-75945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:15:04.933 [DEBUG] [Thread-75945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:15:04.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:15:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:15:04.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:15:04.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:15:04.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:15:04.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:15:04.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:15:04.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:15:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:15:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.760171 -999.00  +11.80  26.93     63   +5.00 1 2 1 1 1    69    0 4.76 -92.45 ----- 29.6 26.9 316.6 46.6 12.4 -22.7 12.3 -22.6 12.1 -19.5 12.4 -19.9
2025-12-12T20:15:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:15:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:15:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.760171
2025-12-12T20:15:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:15:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:15:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:15:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:15:04.965 [DEBUG] [Thread-75945] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:15:04.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:15:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:14:53', tmtdew=7.66, humidity=59.07, cloud=0.0, wind=40.48, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:14:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:15:05.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:15:05.074 [DEBUG] [Thread-75948] [transport.py] [_log()] starting thread (client mode): 0xf57736a0
2025-12-12T20:15:05.074 [DEBUG] [Thread-75948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:15:05.089 [DEBUG] [Thread-75948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:15:05.089 [INFO] [Thread-75948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:15:05.096 [DEBUG] [Thread-75948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] client lang: <none>
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] server lang: <none>
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] kex follows: False
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] Compression: none
2025-12-12T20:15:05.097 [DEBUG] [Thread-75948] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:15:05.152 [DEBUG] [Thread-75948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:15:05.153 [DEBUG] [Thread-75948] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:15:05.153 [DEBUG] [Thread-75948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:15:05.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:15:05.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:15:05.208 [DEBUG] [Thread-75948] [transport.py] [_log()] userauth is OK
2025-12-12T20:15:05.209 [DEBUG] [Thread-75948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:15:05.209 [DEBUG] [Thread-75948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:15:05.209 [DEBUG] [Thread-75948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:15:05.209 [DEBUG] [Thread-75948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:15:05.228 [INFO] [Thread-75948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:15:05.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:15:05.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:15:06.074 [DEBUG] [Thread-75948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:15:06.075 [DEBUG] [Thread-75948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:15:06.122 [DEBUG] [Thread-75948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:15:06.123 [DEBUG] [Thread-75948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:15:06.132 [DEBUG] [Thread-75948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:15:06.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:15:06.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:15:06.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:15:06.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:15:06.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:15:06.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:15:06.165 [DEBUG] [Thread-75948] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:15:06.345 [DEBUG] [Thread-75950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:13.602 [DEBUG] [Thread-75951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:28.645 [DEBUG] [Thread-75952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:35.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:35.153 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:15:36.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:15:36.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
2025-12-12T20:15:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 15, 25), 7.66, 59.08, 0.0, 39.42, 11.82, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:15:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:15:25
2025-12-12T20:15:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:15:37.207 [DEBUG] [Thread-75953] [transport.py] [_log()] starting thread (client mode): 0xf5770100
2025-12-12T20:15:37.207 [DEBUG] [Thread-75953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:15:37.227 [DEBUG] [Thread-75953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:15:37.227 [INFO] [Thread-75953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] client lang: <none>
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] server lang: <none>
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] kex follows: False
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] Compression: none
2025-12-12T20:15:37.231 [DEBUG] [Thread-75953] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:15:37.247 [DEBUG] [Thread-75953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:15:37.248 [DEBUG] [Thread-75953] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:15:37.248 [DEBUG] [Thread-75953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:15:37.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:15:37.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:15:37.249 [DEBUG] [Thread-75953] [transport.py] [_log()] userauth is OK
2025-12-12T20:15:37.249 [DEBUG] [Thread-75953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:15:37.249 [DEBUG] [Thread-75953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:15:37.249 [DEBUG] [Thread-75953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:15:37.249 [DEBUG] [Thread-75953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:15:37.258 [INFO] [Thread-75953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:15:37.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:15:37.876 [DEBUG] [Thread-75953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:15:37.876 [DEBUG] [Thread-75953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:15:37.876 [DEBUG] [Thread-75953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:15:37.916 [DEBUG] [Thread-75953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:15:37.917 [DEBUG] [Thread-75953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:15:37.919 [DEBUG] [Thread-75953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:15:37.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:15:37.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:15:37.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:15:37.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:15:37.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:15:37.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:15:37.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.760518 -999.00  +11.70  35.79     63   +5.00 1 2 2 1 1    64    0 4.81 -89.14 ----- 34.3 35.8 321.6 51.2 12.4 -22.3 12.3 -22.2 12.1 -18.9 12.4 -19.1
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.760518
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:15:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:15:25', tmtdew=7.66, humidity=59.08, cloud=0.0, wind=39.42, temperature=11.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:15:08.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:15:37.939 [DEBUG] [Thread-75953] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:15:38.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:15:38.023 [DEBUG] [Thread-75956] [transport.py] [_log()] starting thread (client mode): 0xf5700d00
2025-12-12T20:15:38.023 [DEBUG] [Thread-75956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:15:38.037 [DEBUG] [Thread-75956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:15:38.037 [INFO] [Thread-75956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:15:38.044 [DEBUG] [Thread-75956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] client lang: <none>
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] server lang: <none>
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] kex follows: False
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] Compression: none
2025-12-12T20:15:38.045 [DEBUG] [Thread-75956] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:15:38.103 [DEBUG] [Thread-75956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:15:38.103 [DEBUG] [Thread-75956] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:15:38.103 [DEBUG] [Thread-75956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:15:38.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:15:38.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:15:38.161 [DEBUG] [Thread-75956] [transport.py] [_log()] userauth is OK
2025-12-12T20:15:38.161 [DEBUG] [Thread-75956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:15:38.161 [DEBUG] [Thread-75956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:15:38.161 [DEBUG] [Thread-75956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:15:38.161 [DEBUG] [Thread-75956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:15:38.177 [INFO] [Thread-75956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:15:38.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:15:38.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:15:39.008 [DEBUG] [Thread-75956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:15:39.008 [DEBUG] [Thread-75956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:15:39.055 [DEBUG] [Thread-75956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:15:39.055 [DEBUG] [Thread-75956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:15:39.064 [DEBUG] [Thread-75956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:15:39.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:15:39.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:15:39.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:15:39.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:15:39.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:15:39.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:15:39.096 [DEBUG] [Thread-75956] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:15:43.672 [DEBUG] [Thread-75958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:15:58.716 [DEBUG] [Thread-75959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:06.402 [DEBUG] [Thread-75960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:16:09.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:16:09.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:16:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 15, 57), 7.6, 59.63, 0.0, 39.15, 11.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:16:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:15:57
2025-12-12T20:16:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:16:10.084 [DEBUG] [Thread-75961] [transport.py] [_log()] starting thread (client mode): 0xf57f34c0
2025-12-12T20:16:10.084 [DEBUG] [Thread-75961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:16:10.104 [DEBUG] [Thread-75961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:16:10.104 [INFO] [Thread-75961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:16:10.107 [DEBUG] [Thread-75961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:16:10.107 [DEBUG] [Thread-75961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:16:10.107 [DEBUG] [Thread-75961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] client lang: <none>
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] server lang: <none>
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] kex follows: False
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:16:10.108 [DEBUG] [Thread-75961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:16:10.109 [DEBUG] [Thread-75961] [transport.py] [_log()] Compression: none
2025-12-12T20:16:10.109 [DEBUG] [Thread-75961] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:16:10.127 [DEBUG] [Thread-75961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:16:10.128 [DEBUG] [Thread-75961] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:16:10.128 [DEBUG] [Thread-75961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:16:10.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:16:10.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:16:10.131 [DEBUG] [Thread-75961] [transport.py] [_log()] userauth is OK
2025-12-12T20:16:10.131 [DEBUG] [Thread-75961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:16:10.131 [DEBUG] [Thread-75961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:16:10.131 [DEBUG] [Thread-75961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:16:10.132 [DEBUG] [Thread-75961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:16:10.155 [INFO] [Thread-75961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:16:10.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:16:10.800 [DEBUG] [Thread-75961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:16:10.800 [DEBUG] [Thread-75961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:16:10.801 [DEBUG] [Thread-75961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:16:10.841 [DEBUG] [Thread-75961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:16:10.841 [DEBUG] [Thread-75961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:16:10.844 [DEBUG] [Thread-75961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:16:10.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:16:10.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:16:10.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:16:10.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:16:10.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:16:10.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:16:10.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:16:10.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:16:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:16:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.760866 -999.00  +11.70  33.68     64   +5.10 1 2 2 1 1    59    0 4.72 -89.90 ----- 35.2 33.7 329.5 48.5 12.4 -22.4 12.3 -22.1 12.1 -19.2 12.4 -19.4
2025-12-12T20:16:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:16:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:16:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.760866
2025-12-12T20:16:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:16:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:16:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:16:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:16:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:16:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:15:57', tmtdew=7.6, humidity=59.63, cloud=0.0, wind=39.15, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:15:38.822', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:16:10.872 [DEBUG] [Thread-75961] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:16:10.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:16:10.969 [DEBUG] [Thread-75964] [transport.py] [_log()] starting thread (client mode): 0xf81c31f0
2025-12-12T20:16:10.969 [DEBUG] [Thread-75964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:16:10.984 [DEBUG] [Thread-75964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:16:10.984 [INFO] [Thread-75964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:16:10.992 [DEBUG] [Thread-75964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:16:10.992 [DEBUG] [Thread-75964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:16:10.992 [DEBUG] [Thread-75964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] client lang: <none>
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] server lang: <none>
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] kex follows: False
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] Compression: none
2025-12-12T20:16:10.993 [DEBUG] [Thread-75964] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:16:11.048 [DEBUG] [Thread-75964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:16:11.049 [DEBUG] [Thread-75964] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:16:11.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:16:11.050 [DEBUG] [Thread-75964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:16:11.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:16:11.105 [DEBUG] [Thread-75964] [transport.py] [_log()] userauth is OK
2025-12-12T20:16:11.105 [DEBUG] [Thread-75964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:16:11.105 [DEBUG] [Thread-75964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:16:11.105 [DEBUG] [Thread-75964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:16:11.105 [DEBUG] [Thread-75964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:16:11.124 [INFO] [Thread-75964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:16:11.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:16:11.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:16:11.972 [DEBUG] [Thread-75964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:16:11.972 [DEBUG] [Thread-75964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:16:12.020 [DEBUG] [Thread-75964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:16:12.020 [DEBUG] [Thread-75964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:16:12.029 [DEBUG] [Thread-75964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:16:12.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:16:12.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:16:12.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:16:12.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:16:12.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:16:12.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:16:12.064 [DEBUG] [Thread-75964] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:16:13.746 [DEBUG] [Thread-75966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:28.800 [DEBUG] [Thread-75967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:41.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:41.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:42.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:16:42.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:16:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:16:42.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 16, 29), 7.55, 59.81, 0.0, 38.25, 11.72, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:16:42.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:16:29
2025-12-12T20:16:42.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:16:43.064 [DEBUG] [Thread-75968] [transport.py] [_log()] starting thread (client mode): 0xf5773700
2025-12-12T20:16:43.064 [DEBUG] [Thread-75968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:16:43.085 [DEBUG] [Thread-75968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:16:43.085 [INFO] [Thread-75968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] client lang: <none>
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] server lang: <none>
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] kex follows: False
2025-12-12T20:16:43.088 [DEBUG] [Thread-75968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:16:43.089 [DEBUG] [Thread-75968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:16:43.089 [DEBUG] [Thread-75968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:16:43.089 [DEBUG] [Thread-75968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:16:43.089 [DEBUG] [Thread-75968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:16:43.089 [DEBUG] [Thread-75968] [transport.py] [_log()] Compression: none
2025-12-12T20:16:43.089 [DEBUG] [Thread-75968] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:16:43.105 [DEBUG] [Thread-75968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:16:43.106 [DEBUG] [Thread-75968] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:16:43.107 [DEBUG] [Thread-75968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:16:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:16:43.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:16:43.110 [DEBUG] [Thread-75968] [transport.py] [_log()] userauth is OK
2025-12-12T20:16:43.110 [DEBUG] [Thread-75968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:16:43.110 [DEBUG] [Thread-75968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:16:43.110 [DEBUG] [Thread-75968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:16:43.110 [DEBUG] [Thread-75968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:16:43.135 [INFO] [Thread-75968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:16:43.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:16:43.792 [DEBUG] [Thread-75968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:16:43.792 [DEBUG] [Thread-75968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:16:43.792 [DEBUG] [Thread-75968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:16:43.828 [DEBUG] [Thread-75970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:16:43.833 [DEBUG] [Thread-75968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:16:43.833 [DEBUG] [Thread-75968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:16:43.836 [DEBUG] [Thread-75968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:16:43.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:16:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:16:43.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:16:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:16:43.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:16:43.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:16:43.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:16:43.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:16:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:16:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.761213 -999.00  +11.60  36.26     64   +5.10 1 2 2 1 1    54    0 4.60 -94.73 ----- 39.2 36.3 310.4 40.1 12.5 -22.5 12.3 -22.5 12.0 -19.5 12.4 -19.4
2025-12-12T20:16:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:16:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:16:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.761213
2025-12-12T20:16:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:16:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:16:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:16:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:16:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:16:43.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:16:29', tmtdew=7.55, humidity=59.81, cloud=0.0, wind=38.25, temperature=11.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:16:08.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:16:43.860 [DEBUG] [Thread-75968] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:16:43.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:16:43.956 [DEBUG] [Thread-75972] [transport.py] [_log()] starting thread (client mode): 0xf5701ae0
2025-12-12T20:16:43.956 [DEBUG] [Thread-75972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:16:43.971 [DEBUG] [Thread-75972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:16:43.971 [INFO] [Thread-75972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] client lang: <none>
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] server lang: <none>
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] kex follows: False
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:16:43.979 [DEBUG] [Thread-75972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:16:43.980 [DEBUG] [Thread-75972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:16:43.980 [DEBUG] [Thread-75972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:16:43.980 [DEBUG] [Thread-75972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:16:43.980 [DEBUG] [Thread-75972] [transport.py] [_log()] Compression: none
2025-12-12T20:16:43.980 [DEBUG] [Thread-75972] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:16:44.036 [DEBUG] [Thread-75972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:16:44.037 [DEBUG] [Thread-75972] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:16:44.038 [DEBUG] [Thread-75972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:16:44.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:16:44.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:16:44.093 [DEBUG] [Thread-75972] [transport.py] [_log()] userauth is OK
2025-12-12T20:16:44.093 [DEBUG] [Thread-75972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:16:44.093 [DEBUG] [Thread-75972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:16:44.093 [DEBUG] [Thread-75972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:16:44.093 [DEBUG] [Thread-75972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:16:44.111 [INFO] [Thread-75972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:16:44.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:16:44.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:16:44.952 [DEBUG] [Thread-75972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:16:44.953 [DEBUG] [Thread-75972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:16:45.001 [DEBUG] [Thread-75972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:16:45.001 [DEBUG] [Thread-75972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:16:45.010 [DEBUG] [Thread-75972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:16:45.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:16:45.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:16:45.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:16:45.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:16:45.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:16:45.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:16:45.045 [DEBUG] [Thread-75972] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:16:58.856 [DEBUG] [Thread-75974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:06.461 [DEBUG] [Thread-75975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:13.894 [DEBUG] [Thread-75976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:15.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:17:15.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:17:15.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:17:15.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 17, 1), 7.56, 59.76, 0.0, 40.25, 11.67, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:17:15.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:17:01
2025-12-12T20:17:15.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:17:15.998 [DEBUG] [Thread-75977] [transport.py] [_log()] starting thread (client mode): 0xf57e2fb0
2025-12-12T20:17:15.998 [DEBUG] [Thread-75977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:17:16.018 [DEBUG] [Thread-75977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:17:16.019 [INFO] [Thread-75977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] client lang: <none>
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] server lang: <none>
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] kex follows: False
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:17:16.022 [DEBUG] [Thread-75977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:17:16.023 [DEBUG] [Thread-75977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:17:16.023 [DEBUG] [Thread-75977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:17:16.023 [DEBUG] [Thread-75977] [transport.py] [_log()] Compression: none
2025-12-12T20:17:16.023 [DEBUG] [Thread-75977] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:17:16.038 [DEBUG] [Thread-75977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:17:16.039 [DEBUG] [Thread-75977] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:17:16.039 [DEBUG] [Thread-75977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:17:16.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:17:16.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:17:16.041 [DEBUG] [Thread-75977] [transport.py] [_log()] userauth is OK
2025-12-12T20:17:16.041 [DEBUG] [Thread-75977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:17:16.041 [DEBUG] [Thread-75977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:17:16.041 [DEBUG] [Thread-75977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:17:16.041 [DEBUG] [Thread-75977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:17:16.056 [INFO] [Thread-75977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:17:16.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:17:16.671 [DEBUG] [Thread-75977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:17:16.671 [DEBUG] [Thread-75977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:17:16.680 [DEBUG] [Thread-75977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:17:16.712 [DEBUG] [Thread-75977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:17:16.712 [DEBUG] [Thread-75977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:17:16.715 [DEBUG] [Thread-75977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:17:16.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:17:16.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:17:16.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:17:16.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:17:16.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:17:16.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:17:16.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:17:16.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:17:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:17:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.761907 -999.00  +11.60  31.62     64   +5.10 1 2 2 1 1    46    0 4.48 -94.08 ----- 33.2 31.6 331.2 45.4 12.4 -22.2 12.3 -22.2 12.0 -18.8 12.4 -18.7
2025-12-12T20:17:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:17:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:17:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.761907
2025-12-12T20:17:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:17:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:17:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:17:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:17:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:17:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:17:01', tmtdew=7.56, humidity=59.76, cloud=0.0, wind=40.25, temperature=11.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:17:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:17:16.741 [DEBUG] [Thread-75977] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:17:16.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:17:16.837 [DEBUG] [Thread-75980] [transport.py] [_log()] starting thread (client mode): 0xf5700910
2025-12-12T20:17:16.837 [DEBUG] [Thread-75980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:17:16.852 [DEBUG] [Thread-75980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:17:16.852 [INFO] [Thread-75980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:16.860 [DEBUG] [Thread-75980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] client lang: <none>
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] server lang: <none>
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] kex follows: False
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:17:16.861 [DEBUG] [Thread-75980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:17:16.862 [DEBUG] [Thread-75980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:17:16.862 [DEBUG] [Thread-75980] [transport.py] [_log()] Compression: none
2025-12-12T20:17:16.862 [DEBUG] [Thread-75980] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:17:16.916 [DEBUG] [Thread-75980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:17:16.917 [DEBUG] [Thread-75980] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:17:16.917 [DEBUG] [Thread-75980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:17:16.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:17:16.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:17:16.973 [DEBUG] [Thread-75980] [transport.py] [_log()] userauth is OK
2025-12-12T20:17:16.973 [DEBUG] [Thread-75980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:17:16.973 [DEBUG] [Thread-75980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:17:16.973 [DEBUG] [Thread-75980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:17:16.973 [DEBUG] [Thread-75980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:17:16.992 [INFO] [Thread-75980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:17:16.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:17:16.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:17:17.815 [DEBUG] [Thread-75980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:17:17.816 [DEBUG] [Thread-75980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:17:17.864 [DEBUG] [Thread-75980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:17:17.864 [DEBUG] [Thread-75980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:17:17.873 [DEBUG] [Thread-75980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:17:17.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:17:17.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:17:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:17:17.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:17:17.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:17:17.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:17:17.908 [DEBUG] [Thread-75980] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:17:28.922 [DEBUG] [Thread-75982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:43.961 [DEBUG] [Thread-75983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:47.512 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:47.513 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:17:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:17:47.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:17:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:17:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 17, 33), 7.58, 59.73, 0.0, 43.08, 12.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:17:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:17:33
2025-12-12T20:17:48.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:17:48.911 [DEBUG] [Thread-75984] [transport.py] [_log()] starting thread (client mode): 0xf578b190
2025-12-12T20:17:48.911 [DEBUG] [Thread-75984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:17:48.931 [DEBUG] [Thread-75984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:17:48.931 [INFO] [Thread-75984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:17:48.934 [DEBUG] [Thread-75984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:17:48.934 [DEBUG] [Thread-75984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:17:48.934 [DEBUG] [Thread-75984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:17:48.934 [DEBUG] [Thread-75984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:48.934 [DEBUG] [Thread-75984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:48.934 [DEBUG] [Thread-75984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] client lang: <none>
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] server lang: <none>
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] kex follows: False
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] Compression: none
2025-12-12T20:17:48.935 [DEBUG] [Thread-75984] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:17:48.953 [DEBUG] [Thread-75984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:17:48.953 [DEBUG] [Thread-75984] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:17:48.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:17:48.954 [DEBUG] [Thread-75984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:17:48.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:17:48.956 [DEBUG] [Thread-75984] [transport.py] [_log()] userauth is OK
2025-12-12T20:17:48.956 [DEBUG] [Thread-75984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:17:48.956 [DEBUG] [Thread-75984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:17:48.957 [DEBUG] [Thread-75984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:17:48.957 [DEBUG] [Thread-75984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:17:48.976 [INFO] [Thread-75984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:17:48.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:17:49.583 [DEBUG] [Thread-75984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:17:49.583 [DEBUG] [Thread-75984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:17:49.583 [DEBUG] [Thread-75984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:17:49.624 [DEBUG] [Thread-75984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:17:49.624 [DEBUG] [Thread-75984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:17:49.627 [DEBUG] [Thread-75984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:17:49.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:17:49.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:17:49.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:17:49.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:17:49.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:17:49.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:17:49.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:17:49.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:17:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:17:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.762254 -999.00  +11.70  32.14     64   +5.10 1 2 2 1 1    42    0 4.44 -94.69 ----- 25.6 32.1 310.6 38.1 12.4 -22.1 12.3 -22.2 12.0 -18.2 12.4 -18.3
2025-12-12T20:17:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:17:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:17:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.762254
2025-12-12T20:17:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:17:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:17:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:17:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:17:49.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:17:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:17:33', tmtdew=7.58, humidity=59.73, cloud=0.0, wind=43.08, temperature=12.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:17:38.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:17:49.653 [DEBUG] [Thread-75984] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:17:49.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:17:49.749 [DEBUG] [Thread-75987] [transport.py] [_log()] starting thread (client mode): 0xf81576d0
2025-12-12T20:17:49.749 [DEBUG] [Thread-75987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:17:49.767 [DEBUG] [Thread-75987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:17:49.768 [INFO] [Thread-75987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:17:49.775 [DEBUG] [Thread-75987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:17:49.775 [DEBUG] [Thread-75987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:17:49.775 [DEBUG] [Thread-75987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:17:49.775 [DEBUG] [Thread-75987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:49.775 [DEBUG] [Thread-75987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] client lang: <none>
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] server lang: <none>
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] kex follows: False
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:17:49.776 [DEBUG] [Thread-75987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:17:49.777 [DEBUG] [Thread-75987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:17:49.777 [DEBUG] [Thread-75987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:17:49.777 [DEBUG] [Thread-75987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:17:49.777 [DEBUG] [Thread-75987] [transport.py] [_log()] Compression: none
2025-12-12T20:17:49.777 [DEBUG] [Thread-75987] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:17:49.832 [DEBUG] [Thread-75987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:17:49.833 [DEBUG] [Thread-75987] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:17:49.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:17:49.834 [DEBUG] [Thread-75987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:17:49.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:17:49.888 [DEBUG] [Thread-75987] [transport.py] [_log()] userauth is OK
2025-12-12T20:17:49.888 [DEBUG] [Thread-75987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:17:49.889 [DEBUG] [Thread-75987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:17:49.889 [DEBUG] [Thread-75987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:17:49.889 [DEBUG] [Thread-75987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:17:49.908 [INFO] [Thread-75987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:17:49.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:17:49.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:17:50.792 [DEBUG] [Thread-75987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:17:50.793 [DEBUG] [Thread-75987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:17:50.841 [DEBUG] [Thread-75987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:17:50.841 [DEBUG] [Thread-75987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:17:50.850 [DEBUG] [Thread-75987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:17:50.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:17:50.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:17:50.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:17:50.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:17:50.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:17:50.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:17:50.885 [DEBUG] [Thread-75987] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:17:58.993 [DEBUG] [Thread-75989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:06.514 [DEBUG] [Thread-75990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:14.041 [DEBUG] [Thread-75991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:20.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:18:20.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:18:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:18:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 18, 5), 7.47, 59.93, 0.0, 36.13, 11.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:18:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:18:05
2025-12-12T20:18:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:18:21.876 [DEBUG] [Thread-75992] [transport.py] [_log()] starting thread (client mode): 0xf57a71f0
2025-12-12T20:18:21.876 [DEBUG] [Thread-75992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:18:21.896 [DEBUG] [Thread-75992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:18:21.896 [INFO] [Thread-75992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] client lang: <none>
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] server lang: <none>
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] kex follows: False
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:18:21.899 [DEBUG] [Thread-75992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:18:21.900 [DEBUG] [Thread-75992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:18:21.900 [DEBUG] [Thread-75992] [transport.py] [_log()] Compression: none
2025-12-12T20:18:21.900 [DEBUG] [Thread-75992] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:18:21.918 [DEBUG] [Thread-75992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:18:21.919 [DEBUG] [Thread-75992] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:18:21.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:18:21.920 [DEBUG] [Thread-75992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:18:21.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:18:21.961 [DEBUG] [Thread-75992] [transport.py] [_log()] userauth is OK
2025-12-12T20:18:21.961 [DEBUG] [Thread-75992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:18:21.961 [DEBUG] [Thread-75992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:18:21.961 [DEBUG] [Thread-75992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:18:21.961 [DEBUG] [Thread-75992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:18:21.993 [INFO] [Thread-75992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:18:21.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:18:22.609 [DEBUG] [Thread-75992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:18:22.609 [DEBUG] [Thread-75992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:18:22.609 [DEBUG] [Thread-75992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:18:22.650 [DEBUG] [Thread-75992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:18:22.651 [DEBUG] [Thread-75992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:18:22.653 [DEBUG] [Thread-75992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:18:22.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:18:22.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:18:22.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:18:22.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:18:22.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:18:22.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:18:22.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:18:22.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:18:22.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:18:22.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.762602 -999.00  +11.70  30.00     64   +5.10 1 2 2 1 1    39    0 4.87 -84.60 ----- 26.7 30.0 317.0 37.8 12.4 -20.7 12.3 -21.1 12.0 -16.6 12.4 -16.7
2025-12-12T20:18:22.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:18:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:18:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.762602
2025-12-12T20:18:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:18:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:18:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:18:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:18:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:18:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:18:05', tmtdew=7.47, humidity=59.93, cloud=0.0, wind=36.13, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:18:08.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:18:22.677 [DEBUG] [Thread-75992] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:18:22.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:18:22.780 [DEBUG] [Thread-75995] [transport.py] [_log()] starting thread (client mode): 0xf57a72e0
2025-12-12T20:18:22.780 [DEBUG] [Thread-75995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:18:22.795 [DEBUG] [Thread-75995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:18:22.795 [INFO] [Thread-75995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:18:22.802 [DEBUG] [Thread-75995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:18:22.802 [DEBUG] [Thread-75995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] client lang: <none>
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] server lang: <none>
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] kex follows: False
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:18:22.803 [DEBUG] [Thread-75995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:18:22.804 [DEBUG] [Thread-75995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:18:22.804 [DEBUG] [Thread-75995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:18:22.804 [DEBUG] [Thread-75995] [transport.py] [_log()] Compression: none
2025-12-12T20:18:22.804 [DEBUG] [Thread-75995] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:18:22.860 [DEBUG] [Thread-75995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:18:22.860 [DEBUG] [Thread-75995] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:18:22.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:18:22.861 [DEBUG] [Thread-75995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:18:22.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:18:22.916 [DEBUG] [Thread-75995] [transport.py] [_log()] userauth is OK
2025-12-12T20:18:22.917 [DEBUG] [Thread-75995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:18:22.917 [DEBUG] [Thread-75995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:18:22.917 [DEBUG] [Thread-75995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:18:22.917 [DEBUG] [Thread-75995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:18:22.942 [INFO] [Thread-75995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:18:22.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:18:22.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:18:23.794 [DEBUG] [Thread-75995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:18:23.794 [DEBUG] [Thread-75995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:18:23.843 [DEBUG] [Thread-75995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:18:23.843 [DEBUG] [Thread-75995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:18:23.852 [DEBUG] [Thread-75995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:18:23.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:18:23.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:18:23.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:18:23.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:18:23.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:18:23.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:18:23.886 [DEBUG] [Thread-75995] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:18:29.067 [DEBUG] [Thread-75997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:44.121 [DEBUG] [Thread-75998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:53.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:18:53.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:18:53.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:18:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 18, 37), 7.47, 59.96, 0.0, 34.92, 11.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:18:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:18:37
2025-12-12T20:18:54.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:18:54.917 [DEBUG] [Thread-75999] [transport.py] [_log()] starting thread (client mode): 0xf5789360
2025-12-12T20:18:54.917 [DEBUG] [Thread-75999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:18:54.937 [DEBUG] [Thread-75999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:18:54.937 [INFO] [Thread-75999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] client lang: <none>
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] server lang: <none>
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] kex follows: False
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] Compression: none
2025-12-12T20:18:54.941 [DEBUG] [Thread-75999] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:18:54.956 [DEBUG] [Thread-75999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:18:54.956 [DEBUG] [Thread-75999] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:18:54.956 [DEBUG] [Thread-75999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:18:54.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:18:54.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:18:54.958 [DEBUG] [Thread-75999] [transport.py] [_log()] userauth is OK
2025-12-12T20:18:54.958 [DEBUG] [Thread-75999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:18:54.958 [DEBUG] [Thread-75999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:18:54.958 [DEBUG] [Thread-75999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:18:54.958 [DEBUG] [Thread-75999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:18:54.974 [INFO] [Thread-75999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:18:54.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:18:55.591 [DEBUG] [Thread-75999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:18:55.591 [DEBUG] [Thread-75999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:18:55.591 [DEBUG] [Thread-75999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:18:55.632 [DEBUG] [Thread-75999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:18:55.632 [DEBUG] [Thread-75999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:18:55.634 [DEBUG] [Thread-75999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:18:55.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:55.644 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:18:55.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:18:55.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:18:55.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:18:55.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:18:55.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:18:55.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:18:55.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.762949 -999.00  +11.80  25.32     63   +5.10 1 2 1 1 1    35    0 4.62 -86.63 ----- 26.9 25.3 310.0 33.8 12.4 -18.6 12.3 -19.0 12.1 -14.1 12.4 -14.3
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.762949
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:18:55.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:18:37', tmtdew=7.47, humidity=59.96, cloud=0.0, wind=34.92, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:18:38.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:18:55.656 [DEBUG] [Thread-75999] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:18:55.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:18:55.742 [DEBUG] [Thread-76002] [transport.py] [_log()] starting thread (client mode): 0xf5702e00
2025-12-12T20:18:55.742 [DEBUG] [Thread-76002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:18:55.757 [DEBUG] [Thread-76002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:18:55.757 [INFO] [Thread-76002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] client lang: <none>
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] server lang: <none>
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] kex follows: False
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:18:55.764 [DEBUG] [Thread-76002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:18:55.765 [DEBUG] [Thread-76002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:18:55.765 [DEBUG] [Thread-76002] [transport.py] [_log()] Compression: none
2025-12-12T20:18:55.765 [DEBUG] [Thread-76002] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:18:55.823 [DEBUG] [Thread-76002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:18:55.823 [DEBUG] [Thread-76002] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:18:55.823 [DEBUG] [Thread-76002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:18:55.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:18:55.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:18:55.885 [DEBUG] [Thread-76002] [transport.py] [_log()] userauth is OK
2025-12-12T20:18:55.885 [DEBUG] [Thread-76002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:18:55.885 [DEBUG] [Thread-76002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:18:55.885 [DEBUG] [Thread-76002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:18:55.885 [DEBUG] [Thread-76002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:18:55.899 [INFO] [Thread-76002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:18:55.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:18:55.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:18:56.747 [DEBUG] [Thread-76002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:18:56.747 [DEBUG] [Thread-76002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:18:56.795 [DEBUG] [Thread-76002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:18:56.795 [DEBUG] [Thread-76002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:18:56.803 [DEBUG] [Thread-76002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:18:56.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:18:56.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:18:56.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:18:56.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:18:56.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:18:56.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:18:56.835 [DEBUG] [Thread-76002] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:18:59.150 [DEBUG] [Thread-76004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:19:06.591 [DEBUG] [Thread-76005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:19:14.195 [DEBUG] [Thread-76006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:19:26.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:19:26.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:19:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:19:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 19, 9), 7.47, 59.93, 0.0, 36.24, 11.72, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:19:27.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:19:09
2025-12-12T20:19:27.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:19:27.830 [DEBUG] [Thread-76007] [transport.py] [_log()] starting thread (client mode): 0xf57a7910
2025-12-12T20:19:27.830 [DEBUG] [Thread-76007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:19:27.851 [DEBUG] [Thread-76007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:19:27.851 [INFO] [Thread-76007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] client lang: <none>
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] server lang: <none>
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] kex follows: False
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] Compression: none
2025-12-12T20:19:27.854 [DEBUG] [Thread-76007] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:19:27.873 [DEBUG] [Thread-76007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:19:27.873 [DEBUG] [Thread-76007] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:19:27.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:19:27.874 [DEBUG] [Thread-76007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:19:27.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:19:27.876 [DEBUG] [Thread-76007] [transport.py] [_log()] userauth is OK
2025-12-12T20:19:27.877 [DEBUG] [Thread-76007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:19:27.877 [DEBUG] [Thread-76007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:19:27.877 [DEBUG] [Thread-76007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:19:27.877 [DEBUG] [Thread-76007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:19:27.899 [INFO] [Thread-76007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:19:27.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:19:28.528 [DEBUG] [Thread-76007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:19:28.528 [DEBUG] [Thread-76007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:19:28.529 [DEBUG] [Thread-76007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:19:28.569 [DEBUG] [Thread-76007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:19:28.569 [DEBUG] [Thread-76007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:19:28.572 [DEBUG] [Thread-76007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:19:28.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:19:28.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:19:28.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:19:28.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:19:28.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:19:28.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:19:28.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:19:28.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:19:28.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:19:28.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.763296 -999.00  +11.80  31.69     63   +5.10 1 2 2 1 1    33    0 4.73 -85.93 ----- 34.2 31.7 328.6 36.1 12.5 -17.0 12.4 -17.3 12.1 -12.4 12.4 -12.5
2025-12-12T20:19:28.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:19:28.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:19:28.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.763296
2025-12-12T20:19:28.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:19:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:19:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:19:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:19:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:19:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:19:09', tmtdew=7.47, humidity=59.93, cloud=0.0, wind=36.24, temperature=11.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:19:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:19:28.599 [DEBUG] [Thread-76007] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:19:28.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:19:28.695 [DEBUG] [Thread-76010] [transport.py] [_log()] starting thread (client mode): 0xf578b5e0
2025-12-12T20:19:28.695 [DEBUG] [Thread-76010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:19:28.710 [DEBUG] [Thread-76010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:19:28.710 [INFO] [Thread-76010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:19:28.717 [DEBUG] [Thread-76010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] client lang: <none>
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] server lang: <none>
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] kex follows: False
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] Compression: none
2025-12-12T20:19:28.718 [DEBUG] [Thread-76010] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:19:28.776 [DEBUG] [Thread-76010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:19:28.776 [DEBUG] [Thread-76010] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:19:28.777 [DEBUG] [Thread-76010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:19:28.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:19:28.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:19:28.832 [DEBUG] [Thread-76010] [transport.py] [_log()] userauth is OK
2025-12-12T20:19:28.832 [DEBUG] [Thread-76010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:19:28.832 [DEBUG] [Thread-76010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:19:28.832 [DEBUG] [Thread-76010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:19:28.832 [DEBUG] [Thread-76010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:19:28.847 [INFO] [Thread-76010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:19:28.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:19:28.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:19:29.223 [DEBUG] [Thread-76012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:19:29.685 [DEBUG] [Thread-76010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:19:29.685 [DEBUG] [Thread-76010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:19:29.733 [DEBUG] [Thread-76010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:19:29.733 [DEBUG] [Thread-76010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:19:29.742 [DEBUG] [Thread-76010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:19:29.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:19:29.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:19:29.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:19:29.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:19:29.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:19:29.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:19:29.776 [DEBUG] [Thread-76010] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:19:44.270 [DEBUG] [Thread-76013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:19:59.302 [DEBUG] [Thread-76014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:19:59.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:19:59.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:19:59.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:20:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 19, 41), 7.52, 59.93, 0.0, 29.11, 11.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:20:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:19:41
2025-12-12T20:20:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:20:00.748 [DEBUG] [Thread-76015] [transport.py] [_log()] starting thread (client mode): 0xf57a7550
2025-12-12T20:20:00.748 [DEBUG] [Thread-76015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:20:00.768 [DEBUG] [Thread-76015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:20:00.768 [INFO] [Thread-76015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] client lang: <none>
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] server lang: <none>
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] kex follows: False
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] Compression: none
2025-12-12T20:20:00.771 [DEBUG] [Thread-76015] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:20:00.780 [DEBUG] [Thread-76015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:20:00.780 [DEBUG] [Thread-76015] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:20:00.780 [DEBUG] [Thread-76015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:20:00.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:20:00.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:20:00.825 [DEBUG] [Thread-76015] [transport.py] [_log()] userauth is OK
2025-12-12T20:20:00.825 [DEBUG] [Thread-76015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:20:00.825 [DEBUG] [Thread-76015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:20:00.825 [DEBUG] [Thread-76015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:20:00.825 [DEBUG] [Thread-76015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:20:00.850 [INFO] [Thread-76015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:20:00.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:20:01.402 [DEBUG] [Thread-76015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:20:01.402 [DEBUG] [Thread-76015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:20:01.403 [DEBUG] [Thread-76015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:20:01.443 [DEBUG] [Thread-76015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:20:01.443 [DEBUG] [Thread-76015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:20:01.446 [DEBUG] [Thread-76015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:20:01.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:20:01.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:20:01.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:20:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:20:01.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:20:01.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:20:01.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:20:01.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:20:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:20:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.763643 -999.00  +11.70  30.27     64   +5.20 1 2 2 1 1    30    0 4.64 -87.10 ----- 26.7 30.3 330.8 41.1 12.5 -16.1 12.4 -16.0 12.1 -11.0 12.4 -11.7
2025-12-12T20:20:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:20:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:20:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.763643
2025-12-12T20:20:01.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:20:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:20:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:20:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:20:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:20:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:19:41', tmtdew=7.52, humidity=59.93, cloud=0.0, wind=29.11, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:19:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:20:01.471 [DEBUG] [Thread-76015] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:20:01.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:20:01.568 [DEBUG] [Thread-76018] [transport.py] [_log()] starting thread (client mode): 0xf57f28c0
2025-12-12T20:20:01.568 [DEBUG] [Thread-76018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:20:01.584 [DEBUG] [Thread-76018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:20:01.584 [INFO] [Thread-76018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] client lang: <none>
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] server lang: <none>
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] kex follows: False
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] Compression: none
2025-12-12T20:20:01.592 [DEBUG] [Thread-76018] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:20:01.647 [DEBUG] [Thread-76018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:20:01.647 [DEBUG] [Thread-76018] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:20:01.647 [DEBUG] [Thread-76018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:20:01.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:20:01.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:20:01.704 [DEBUG] [Thread-76018] [transport.py] [_log()] userauth is OK
2025-12-12T20:20:01.704 [DEBUG] [Thread-76018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:20:01.704 [DEBUG] [Thread-76018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:20:01.704 [DEBUG] [Thread-76018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:20:01.704 [DEBUG] [Thread-76018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:20:01.718 [INFO] [Thread-76018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:20:01.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:20:01.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:20:02.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:20:02.171 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:20:02.575 [DEBUG] [Thread-76018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:20:02.582 [DEBUG] [Thread-76018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:20:02.624 [DEBUG] [Thread-76018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:20:02.624 [DEBUG] [Thread-76018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:20:02.633 [DEBUG] [Thread-76018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:20:02.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:20:02.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:20:02.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:20:02.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:20:02.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:20:02.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:20:02.666 [DEBUG] [Thread-76018] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:20:06.660 [DEBUG] [Thread-76020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:20:14.329 [DEBUG] [Thread-76021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:20:29.361 [DEBUG] [Thread-76022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:20:32.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:20:32.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:20:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:20:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 20, 13), 7.52, 59.95, 0.0, 30.65, 11.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:20:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:20:13
2025-12-12T20:20:33.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:20:33.667 [DEBUG] [Thread-76023] [transport.py] [_log()] starting thread (client mode): 0xf5788c40
2025-12-12T20:20:33.667 [DEBUG] [Thread-76023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:20:33.686 [DEBUG] [Thread-76023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:20:33.686 [INFO] [Thread-76023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:20:33.689 [DEBUG] [Thread-76023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] client lang: <none>
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] server lang: <none>
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] kex follows: False
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] Compression: none
2025-12-12T20:20:33.690 [DEBUG] [Thread-76023] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:20:33.709 [DEBUG] [Thread-76023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:20:33.709 [DEBUG] [Thread-76023] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:20:33.710 [DEBUG] [Thread-76023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:20:33.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:20:33.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:20:33.711 [DEBUG] [Thread-76023] [transport.py] [_log()] userauth is OK
2025-12-12T20:20:33.712 [DEBUG] [Thread-76023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:20:33.712 [DEBUG] [Thread-76023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:20:33.712 [DEBUG] [Thread-76023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:20:33.712 [DEBUG] [Thread-76023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:20:33.735 [INFO] [Thread-76023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:20:33.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:20:34.355 [DEBUG] [Thread-76023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:20:34.355 [DEBUG] [Thread-76023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:20:34.355 [DEBUG] [Thread-76023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:20:34.397 [DEBUG] [Thread-76023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:20:34.397 [DEBUG] [Thread-76023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:20:34.400 [DEBUG] [Thread-76023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:20:34.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:20:34.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:20:34.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:20:34.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:20:34.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:20:34.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:20:34.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:20:34.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:20:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:20:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.763990 -999.00  +11.80  34.42     64   +5.20 1 2 2 1 1    27    0 4.73 -81.82 ----- 34.5 34.4 312.0 36.9 12.5 -15.2 12.3 -14.8 12.2 -10.2 12.5 -10.9
2025-12-12T20:20:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:20:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:20:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.763990
2025-12-12T20:20:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:20:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:20:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:20:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:20:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:20:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:20:13', tmtdew=7.52, humidity=59.95, cloud=0.0, wind=30.65, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:20:08.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:20:34.427 [DEBUG] [Thread-76023] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:20:34.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:20:34.516 [DEBUG] [Thread-76026] [transport.py] [_log()] starting thread (client mode): 0xf57a7ca0
2025-12-12T20:20:34.516 [DEBUG] [Thread-76026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:20:34.532 [DEBUG] [Thread-76026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:20:34.532 [INFO] [Thread-76026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:20:34.539 [DEBUG] [Thread-76026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] client lang: <none>
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] server lang: <none>
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] kex follows: False
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] Compression: none
2025-12-12T20:20:34.540 [DEBUG] [Thread-76026] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:20:34.597 [DEBUG] [Thread-76026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:20:34.598 [DEBUG] [Thread-76026] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:20:34.598 [DEBUG] [Thread-76026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:20:34.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:20:34.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:20:34.652 [DEBUG] [Thread-76026] [transport.py] [_log()] userauth is OK
2025-12-12T20:20:34.653 [DEBUG] [Thread-76026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:20:34.653 [DEBUG] [Thread-76026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:20:34.653 [DEBUG] [Thread-76026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:20:34.653 [DEBUG] [Thread-76026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:20:34.672 [INFO] [Thread-76026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:20:34.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:20:34.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:20:35.522 [DEBUG] [Thread-76026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:20:35.523 [DEBUG] [Thread-76026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:20:35.571 [DEBUG] [Thread-76026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:20:35.571 [DEBUG] [Thread-76026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:20:35.580 [DEBUG] [Thread-76026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:20:35.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:20:35.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:20:35.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
2025-12-12T20:20:35.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:20:35.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:20:35.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:20:35.615 [DEBUG] [Thread-76026] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:20:44.396 [DEBUG] [Thread-76028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:20:59.439 [DEBUG] [Thread-76029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:21:05.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:21:05.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:21:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 20, 45), 7.46, 60.0, 0.0, 34.78, 11.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:21:06.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:20:45
2025-12-12T20:21:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:21:06.590 [DEBUG] [Thread-76030] [transport.py] [_log()] starting thread (client mode): 0xf5700c40
2025-12-12T20:21:06.590 [DEBUG] [Thread-76030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:21:06.610 [DEBUG] [Thread-76030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:21:06.610 [INFO] [Thread-76030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:21:06.613 [DEBUG] [Thread-76030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] client lang: <none>
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] server lang: <none>
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] kex follows: False
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:21:06.614 [DEBUG] [Thread-76030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:21:06.615 [DEBUG] [Thread-76030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:21:06.615 [DEBUG] [Thread-76030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:21:06.615 [DEBUG] [Thread-76030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:21:06.615 [DEBUG] [Thread-76030] [transport.py] [_log()] Compression: none
2025-12-12T20:21:06.615 [DEBUG] [Thread-76030] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:21:06.635 [DEBUG] [Thread-76030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:21:06.636 [DEBUG] [Thread-76030] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:21:06.636 [DEBUG] [Thread-76030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:21:06.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:21:06.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:21:06.638 [DEBUG] [Thread-76030] [transport.py] [_log()] userauth is OK
2025-12-12T20:21:06.638 [DEBUG] [Thread-76030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:21:06.638 [DEBUG] [Thread-76030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:21:06.638 [DEBUG] [Thread-76030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:21:06.639 [DEBUG] [Thread-76030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:21:06.674 [INFO] [Thread-76030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:21:06.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:21:06.725 [DEBUG] [Thread-76032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:07.342 [DEBUG] [Thread-76030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:21:07.343 [DEBUG] [Thread-76030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:21:07.343 [DEBUG] [Thread-76030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:21:07.384 [DEBUG] [Thread-76030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:21:07.384 [DEBUG] [Thread-76030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:21:07.387 [DEBUG] [Thread-76030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:21:07.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:21:07.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:21:07.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:21:07.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:21:07.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:21:07.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:21:07.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:21:07.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:21:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:21:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.764338 -999.00  +11.70  32.43     64   +5.20 1 2 2 1 1    25    0 4.51 -88.86 ----- 34.6 32.4 315.6 38.6 12.5 -14.5 12.4 -14.7 12.1 -10.1 12.5 -10.4
2025-12-12T20:21:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:21:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:21:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.764338
2025-12-12T20:21:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:21:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:21:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:21:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:21:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:21:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:20:45', tmtdew=7.46, humidity=60.0, cloud=0.0, wind=34.78, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:20:38.803', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:21:07.411 [DEBUG] [Thread-76030] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:21:07.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:21:07.509 [DEBUG] [Thread-76034] [transport.py] [_log()] starting thread (client mode): 0xf57000d0
2025-12-12T20:21:07.509 [DEBUG] [Thread-76034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:21:07.526 [DEBUG] [Thread-76034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:21:07.526 [INFO] [Thread-76034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:21:07.534 [DEBUG] [Thread-76034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:21:07.534 [DEBUG] [Thread-76034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:21:07.534 [DEBUG] [Thread-76034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:21:07.534 [DEBUG] [Thread-76034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:07.534 [DEBUG] [Thread-76034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:07.534 [DEBUG] [Thread-76034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] client lang: <none>
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] server lang: <none>
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] kex follows: False
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:21:07.535 [DEBUG] [Thread-76034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:21:07.536 [DEBUG] [Thread-76034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:21:07.536 [DEBUG] [Thread-76034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:21:07.536 [DEBUG] [Thread-76034] [transport.py] [_log()] Compression: none
2025-12-12T20:21:07.536 [DEBUG] [Thread-76034] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:21:07.597 [DEBUG] [Thread-76034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:21:07.598 [DEBUG] [Thread-76034] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:21:07.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:21:07.599 [DEBUG] [Thread-76034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:21:07.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:21:07.656 [DEBUG] [Thread-76034] [transport.py] [_log()] userauth is OK
2025-12-12T20:21:07.657 [DEBUG] [Thread-76034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:21:07.657 [DEBUG] [Thread-76034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:21:07.657 [DEBUG] [Thread-76034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:21:07.657 [DEBUG] [Thread-76034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:21:07.676 [INFO] [Thread-76034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:21:07.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:21:07.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:21:08.520 [DEBUG] [Thread-76034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:21:08.520 [DEBUG] [Thread-76034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:21:08.568 [DEBUG] [Thread-76034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:21:08.568 [DEBUG] [Thread-76034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:21:08.577 [DEBUG] [Thread-76034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:21:08.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:21:08.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:21:08.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:21:08.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:21:08.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:21:08.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:21:08.612 [DEBUG] [Thread-76034] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:21:09.010 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:09.011 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:14.469 [DEBUG] [Thread-76036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:29.510 [DEBUG] [Thread-76037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:21:38.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:21:38.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:21:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 21, 17), 7.44, 60.06, 0.0, 34.71, 11.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:21:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:21:17
2025-12-12T20:21:39.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:21:39.607 [DEBUG] [Thread-76038] [transport.py] [_log()] starting thread (client mode): 0xf57f3220
2025-12-12T20:21:39.607 [DEBUG] [Thread-76038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:21:39.627 [DEBUG] [Thread-76038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:21:39.628 [INFO] [Thread-76038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] client lang: <none>
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] server lang: <none>
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] kex follows: False
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] Compression: none
2025-12-12T20:21:39.629 [DEBUG] [Thread-76038] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:21:39.637 [DEBUG] [Thread-76038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:21:39.637 [DEBUG] [Thread-76038] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:21:39.638 [DEBUG] [Thread-76038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:21:39.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:21:39.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:21:39.639 [DEBUG] [Thread-76038] [transport.py] [_log()] userauth is OK
2025-12-12T20:21:39.639 [DEBUG] [Thread-76038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:21:39.639 [DEBUG] [Thread-76038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:21:39.639 [DEBUG] [Thread-76038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:21:39.639 [DEBUG] [Thread-76038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:21:39.653 [INFO] [Thread-76038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:21:39.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:21:40.308 [DEBUG] [Thread-76038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:21:40.308 [DEBUG] [Thread-76038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:21:40.309 [DEBUG] [Thread-76038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:21:40.349 [DEBUG] [Thread-76038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:21:40.349 [DEBUG] [Thread-76038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:21:40.353 [DEBUG] [Thread-76038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:21:40.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:21:40.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:21:40.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:21:40.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:21:40.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:21:40.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:21:40.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:21:40.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:21:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:21:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.764685 -999.00  +11.70  31.23     64   +5.30 1 2 2 1 1    23    0 4.73 -83.69 ----- 25.4 31.2 329.0 38.5 12.5 -14.3 12.4 -14.2 12.2 -9.8 12.5 -9.6
2025-12-12T20:21:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:21:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:21:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.764685
2025-12-12T20:21:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:21:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:21:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:21:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:21:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:21:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:21:17', tmtdew=7.44, humidity=60.06, cloud=0.0, wind=34.71, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:21:08.784', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:21:40.377 [DEBUG] [Thread-76038] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:21:40.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:21:40.473 [DEBUG] [Thread-76041] [transport.py] [_log()] starting thread (client mode): 0xf81c1ed0
2025-12-12T20:21:40.474 [DEBUG] [Thread-76041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:21:40.491 [DEBUG] [Thread-76041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:21:40.492 [INFO] [Thread-76041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:21:40.499 [DEBUG] [Thread-76041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:21:40.499 [DEBUG] [Thread-76041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:21:40.499 [DEBUG] [Thread-76041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:21:40.499 [DEBUG] [Thread-76041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:40.499 [DEBUG] [Thread-76041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:21:40.499 [DEBUG] [Thread-76041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] client lang: <none>
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] server lang: <none>
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] kex follows: False
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] Compression: none
2025-12-12T20:21:40.500 [DEBUG] [Thread-76041] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:21:40.556 [DEBUG] [Thread-76041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:21:40.557 [DEBUG] [Thread-76041] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:21:40.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:21:40.558 [DEBUG] [Thread-76041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:21:40.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:21:40.612 [DEBUG] [Thread-76041] [transport.py] [_log()] userauth is OK
2025-12-12T20:21:40.612 [DEBUG] [Thread-76041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:21:40.613 [DEBUG] [Thread-76041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:21:40.613 [DEBUG] [Thread-76041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:21:40.613 [DEBUG] [Thread-76041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:21:40.633 [INFO] [Thread-76041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:21:40.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:21:40.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:21:41.515 [DEBUG] [Thread-76041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:21:41.516 [DEBUG] [Thread-76041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:21:41.564 [DEBUG] [Thread-76041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:21:41.564 [DEBUG] [Thread-76041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:21:41.573 [DEBUG] [Thread-76041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:21:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:21:41.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:21:41.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:21:41.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:21:41.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:21:41.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:21:41.608 [DEBUG] [Thread-76041] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:21:44.535 [DEBUG] [Thread-76043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:21:59.584 [DEBUG] [Thread-76044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:06.786 [DEBUG] [Thread-76045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:11.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:22:11.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:22:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:22:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 21, 49), 7.32, 60.65, 0.0, 29.84, 11.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:22:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:21:49
2025-12-12T20:22:12.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:22:12.600 [DEBUG] [Thread-76046] [transport.py] [_log()] starting thread (client mode): 0xf57017b0
2025-12-12T20:22:12.600 [DEBUG] [Thread-76046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:22:12.620 [DEBUG] [Thread-76046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:22:12.620 [INFO] [Thread-76046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:22:12.623 [DEBUG] [Thread-76046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:22:12.623 [DEBUG] [Thread-76046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] client lang: <none>
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] server lang: <none>
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] kex follows: False
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] Compression: none
2025-12-12T20:22:12.624 [DEBUG] [Thread-76046] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:22:12.643 [DEBUG] [Thread-76046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:22:12.644 [DEBUG] [Thread-76046] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:22:12.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:22:12.644 [DEBUG] [Thread-76046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:22:12.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:22:12.646 [DEBUG] [Thread-76046] [transport.py] [_log()] userauth is OK
2025-12-12T20:22:12.646 [DEBUG] [Thread-76046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:22:12.646 [DEBUG] [Thread-76046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:22:12.646 [DEBUG] [Thread-76046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:22:12.646 [DEBUG] [Thread-76046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:22:12.667 [INFO] [Thread-76046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:22:12.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:22:13.321 [DEBUG] [Thread-76046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:22:13.322 [DEBUG] [Thread-76046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:22:13.322 [DEBUG] [Thread-76046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:22:13.363 [DEBUG] [Thread-76046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:22:13.363 [DEBUG] [Thread-76046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:22:13.366 [DEBUG] [Thread-76046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:22:13.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:22:13.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:22:13.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:22:13.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:22:13.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:22:13.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:22:13.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:22:13.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:22:13.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:22:13.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.765032 -999.00  +11.70  30.06     64   +5.30 1 2 2 1 1    21    0 4.64 -84.42 ----- 28.8 30.1 307.8 33.0 12.6 -17.1 12.4 -15.9 12.2 -11.7 12.5 -12.1
2025-12-12T20:22:13.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:22:13.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:22:13.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.765032
2025-12-12T20:22:13.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:22:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:22:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:22:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:22:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:22:13.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:21:49', tmtdew=7.32, humidity=60.65, cloud=0.0, wind=29.84, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:21:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:22:13.391 [DEBUG] [Thread-76046] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:22:13.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:22:13.488 [DEBUG] [Thread-76049] [transport.py] [_log()] starting thread (client mode): 0xf5703070
2025-12-12T20:22:13.488 [DEBUG] [Thread-76049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:22:13.502 [DEBUG] [Thread-76049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:22:13.502 [INFO] [Thread-76049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] client lang: <none>
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] server lang: <none>
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] kex follows: False
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:22:13.510 [DEBUG] [Thread-76049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:22:13.511 [DEBUG] [Thread-76049] [transport.py] [_log()] Compression: none
2025-12-12T20:22:13.511 [DEBUG] [Thread-76049] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:22:13.572 [DEBUG] [Thread-76049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:22:13.572 [DEBUG] [Thread-76049] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:22:13.573 [DEBUG] [Thread-76049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:22:13.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:22:13.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:22:13.628 [DEBUG] [Thread-76049] [transport.py] [_log()] userauth is OK
2025-12-12T20:22:13.628 [DEBUG] [Thread-76049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:22:13.629 [DEBUG] [Thread-76049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:22:13.629 [DEBUG] [Thread-76049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:22:13.629 [DEBUG] [Thread-76049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:22:13.652 [INFO] [Thread-76049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:22:13.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:22:13.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:22:14.491 [DEBUG] [Thread-76049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:22:14.491 [DEBUG] [Thread-76049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:22:14.539 [DEBUG] [Thread-76049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:22:14.540 [DEBUG] [Thread-76049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:22:14.548 [DEBUG] [Thread-76049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:22:14.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:22:14.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:22:14.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:22:14.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:22:14.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:22:14.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:22:14.582 [DEBUG] [Thread-76049] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:22:14.615 [DEBUG] [Thread-76051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:19.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:19.553 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:29.657 [DEBUG] [Thread-76052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:44.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:22:44.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:22:44.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:22:44.685 [DEBUG] [Thread-76053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:22:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 22, 21), 7.32, 60.66, 0.0, 26.41, 11.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:22:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:22:21
2025-12-12T20:22:45.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:22:45.578 [DEBUG] [Thread-76054] [transport.py] [_log()] starting thread (client mode): 0xf57038b0
2025-12-12T20:22:45.578 [DEBUG] [Thread-76054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:22:45.598 [DEBUG] [Thread-76054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:22:45.598 [INFO] [Thread-76054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:22:45.601 [DEBUG] [Thread-76054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] client lang: <none>
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] server lang: <none>
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] kex follows: False
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] Compression: none
2025-12-12T20:22:45.602 [DEBUG] [Thread-76054] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:22:45.623 [DEBUG] [Thread-76054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:22:45.623 [DEBUG] [Thread-76054] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:22:45.623 [DEBUG] [Thread-76054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:22:45.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:22:45.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:22:45.624 [DEBUG] [Thread-76054] [transport.py] [_log()] userauth is OK
2025-12-12T20:22:45.624 [DEBUG] [Thread-76054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:22:45.624 [DEBUG] [Thread-76054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:22:45.624 [DEBUG] [Thread-76054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:22:45.624 [DEBUG] [Thread-76054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:22:45.640 [INFO] [Thread-76054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:22:45.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:22:46.267 [DEBUG] [Thread-76054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:22:46.267 [DEBUG] [Thread-76054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:22:46.267 [DEBUG] [Thread-76054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:22:46.308 [DEBUG] [Thread-76054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:22:46.308 [DEBUG] [Thread-76054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:22:46.311 [DEBUG] [Thread-76054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:22:46.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:22:46.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:22:46.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:22:46.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:22:46.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:22:46.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:22:46.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.765727 -999.00  +11.70  29.92     64   +5.20 1 2 1 1 1    18    0 4.77 -78.93 ----- 30.5 29.9 320.4 34.9 12.5 -16.7 12.4 -16.1 12.2 -11.6 12.5 -12.2
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.765727
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:22:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:22:21', tmtdew=7.32, humidity=60.66, cloud=0.0, wind=26.41, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:22:38.813', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:22:46.328 [DEBUG] [Thread-76054] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:22:46.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:22:46.419 [DEBUG] [Thread-76057] [transport.py] [_log()] starting thread (client mode): 0xf813f4c0
2025-12-12T20:22:46.419 [DEBUG] [Thread-76057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:22:46.434 [DEBUG] [Thread-76057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:22:46.434 [INFO] [Thread-76057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] client lang: <none>
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] server lang: <none>
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] kex follows: False
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:22:46.441 [DEBUG] [Thread-76057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:22:46.442 [DEBUG] [Thread-76057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:22:46.442 [DEBUG] [Thread-76057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:22:46.442 [DEBUG] [Thread-76057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:22:46.442 [DEBUG] [Thread-76057] [transport.py] [_log()] Compression: none
2025-12-12T20:22:46.442 [DEBUG] [Thread-76057] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:22:46.499 [DEBUG] [Thread-76057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:22:46.499 [DEBUG] [Thread-76057] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:22:46.499 [DEBUG] [Thread-76057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:22:46.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:22:46.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:22:46.556 [DEBUG] [Thread-76057] [transport.py] [_log()] userauth is OK
2025-12-12T20:22:46.556 [DEBUG] [Thread-76057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:22:46.556 [DEBUG] [Thread-76057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:22:46.556 [DEBUG] [Thread-76057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:22:46.556 [DEBUG] [Thread-76057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:22:46.573 [INFO] [Thread-76057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:22:46.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:22:46.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:22:47.423 [DEBUG] [Thread-76057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:22:47.423 [DEBUG] [Thread-76057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:22:47.471 [DEBUG] [Thread-76057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:22:47.472 [DEBUG] [Thread-76057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:22:47.480 [DEBUG] [Thread-76057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:22:47.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:22:47.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:22:47.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:22:47.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:22:47.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:22:47.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:22:47.513 [DEBUG] [Thread-76057] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:22:59.709 [DEBUG] [Thread-76059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:06.842 [DEBUG] [Thread-76060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:14.755 [DEBUG] [Thread-76061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:23:17.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:23:17.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
2025-12-12T20:23:18.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 22, 54), 7.37, 60.66, 0.0, 28.97, 11.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:23:18.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:22:54
2025-12-12T20:23:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:23:18.498 [DEBUG] [Thread-76062] [transport.py] [_log()] starting thread (client mode): 0xf5703eb0
2025-12-12T20:23:18.498 [DEBUG] [Thread-76062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:23:18.519 [DEBUG] [Thread-76062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:23:18.519 [INFO] [Thread-76062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:23:18.523 [DEBUG] [Thread-76062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:23:18.523 [DEBUG] [Thread-76062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:23:18.523 [DEBUG] [Thread-76062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:23:18.523 [DEBUG] [Thread-76062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:18.523 [DEBUG] [Thread-76062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:18.523 [DEBUG] [Thread-76062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] client lang: <none>
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] server lang: <none>
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] kex follows: False
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:23:18.524 [DEBUG] [Thread-76062] [transport.py] [_log()] Compression: none
2025-12-12T20:23:18.525 [DEBUG] [Thread-76062] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:23:18.542 [DEBUG] [Thread-76062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:23:18.543 [DEBUG] [Thread-76062] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:23:18.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:23:18.544 [DEBUG] [Thread-76062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:23:18.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:23:18.545 [DEBUG] [Thread-76062] [transport.py] [_log()] userauth is OK
2025-12-12T20:23:18.546 [DEBUG] [Thread-76062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:23:18.546 [DEBUG] [Thread-76062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:23:18.546 [DEBUG] [Thread-76062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:23:18.546 [DEBUG] [Thread-76062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:23:18.567 [INFO] [Thread-76062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:23:18.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:23:19.166 [DEBUG] [Thread-76062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:23:19.167 [DEBUG] [Thread-76062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:23:19.167 [DEBUG] [Thread-76062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:23:19.208 [DEBUG] [Thread-76062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:23:19.208 [DEBUG] [Thread-76062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:23:19.211 [DEBUG] [Thread-76062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:23:19.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:23:19.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:23:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:23:19.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:23:19.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:23:19.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:23:19.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:23:19.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:23:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:23:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.766074 -999.00  +11.70  31.31     64   +5.30 1 2 2 1 1    16    0 4.71 -78.18 ----- 29.6 31.3 324.6 37.1 12.6 -16.1 12.4 -16.6 12.2 -11.8 12.6 -11.9
2025-12-12T20:23:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:23:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:23:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.766074
2025-12-12T20:23:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:23:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:23:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:23:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:23:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:23:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:22:54', tmtdew=7.37, humidity=60.66, cloud=0.0, wind=28.97, temperature=11.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:23:08.794', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:23:19.236 [DEBUG] [Thread-76062] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:23:19.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:23:19.328 [DEBUG] [Thread-76065] [transport.py] [_log()] starting thread (client mode): 0xf57a6aa0
2025-12-12T20:23:19.328 [DEBUG] [Thread-76065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:23:19.343 [DEBUG] [Thread-76065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:23:19.343 [INFO] [Thread-76065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:23:19.350 [DEBUG] [Thread-76065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] client lang: <none>
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] server lang: <none>
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] kex follows: False
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] Compression: none
2025-12-12T20:23:19.351 [DEBUG] [Thread-76065] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:23:19.407 [DEBUG] [Thread-76065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:23:19.408 [DEBUG] [Thread-76065] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:23:19.408 [DEBUG] [Thread-76065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:23:19.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:23:19.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:23:19.464 [DEBUG] [Thread-76065] [transport.py] [_log()] userauth is OK
2025-12-12T20:23:19.464 [DEBUG] [Thread-76065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:23:19.464 [DEBUG] [Thread-76065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:23:19.464 [DEBUG] [Thread-76065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:23:19.464 [DEBUG] [Thread-76065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:23:19.483 [INFO] [Thread-76065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:23:19.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:23:19.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:23:20.344 [DEBUG] [Thread-76065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:23:20.344 [DEBUG] [Thread-76065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:23:20.392 [DEBUG] [Thread-76065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:23:20.392 [DEBUG] [Thread-76065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:23:20.401 [DEBUG] [Thread-76065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:23:20.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:23:20.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:23:20.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:23:20.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:23:20.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:23:20.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:23:20.435 [DEBUG] [Thread-76065] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:23:26.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:26.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:29.780 [DEBUG] [Thread-76067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:44.814 [DEBUG] [Thread-76068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:23:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:23:50.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:23:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:23:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 23, 26), 7.36, 60.71, 0.0, 28.9, 11.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:23:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:23:26
2025-12-12T20:23:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:23:51.422 [DEBUG] [Thread-76069] [transport.py] [_log()] starting thread (client mode): 0xf57a73d0
2025-12-12T20:23:51.422 [DEBUG] [Thread-76069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:23:51.436 [DEBUG] [Thread-76069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:23:51.437 [INFO] [Thread-76069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] client lang: <none>
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] server lang: <none>
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] kex follows: False
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] Compression: none
2025-12-12T20:23:51.439 [DEBUG] [Thread-76069] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:23:51.448 [DEBUG] [Thread-76069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:23:51.449 [DEBUG] [Thread-76069] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:23:51.449 [DEBUG] [Thread-76069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:23:51.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:23:51.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:23:51.450 [DEBUG] [Thread-76069] [transport.py] [_log()] userauth is OK
2025-12-12T20:23:51.450 [DEBUG] [Thread-76069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:23:51.450 [DEBUG] [Thread-76069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:23:51.450 [DEBUG] [Thread-76069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:23:51.450 [DEBUG] [Thread-76069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:23:51.466 [INFO] [Thread-76069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:23:51.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:23:52.046 [DEBUG] [Thread-76069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:23:52.047 [DEBUG] [Thread-76069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:23:52.047 [DEBUG] [Thread-76069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:23:52.088 [DEBUG] [Thread-76069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:23:52.088 [DEBUG] [Thread-76069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:23:52.090 [DEBUG] [Thread-76069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:23:52.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:23:52.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:23:52.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:23:52.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:23:52.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:23:52.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:23:52.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:23:52.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:23:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:23:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.766421 -999.00  +11.70  33.63     65   +5.40 1 2 2 1 1    15    0 4.82 -78.39 ----- 31.2 33.6 325.4 41.8 12.6 -15.3 12.4 -15.3 12.2 -10.8 12.6 -10.7
2025-12-12T20:23:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:23:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:23:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.766421
2025-12-12T20:23:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:23:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:23:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:23:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:23:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:23:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:23:26', tmtdew=7.36, humidity=60.71, cloud=0.0, wind=28.9, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:23:38.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:23:52.113 [DEBUG] [Thread-76069] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:23:52.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:23:52.209 [DEBUG] [Thread-76072] [transport.py] [_log()] starting thread (client mode): 0xf5797ca0
2025-12-12T20:23:52.209 [DEBUG] [Thread-76072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:23:52.223 [DEBUG] [Thread-76072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:23:52.224 [INFO] [Thread-76072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:52.232 [DEBUG] [Thread-76072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] client lang: <none>
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] server lang: <none>
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] kex follows: False
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] Compression: none
2025-12-12T20:23:52.233 [DEBUG] [Thread-76072] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:23:52.287 [DEBUG] [Thread-76072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:23:52.287 [DEBUG] [Thread-76072] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:23:52.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:23:52.288 [DEBUG] [Thread-76072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:23:52.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:23:52.344 [DEBUG] [Thread-76072] [transport.py] [_log()] userauth is OK
2025-12-12T20:23:52.344 [DEBUG] [Thread-76072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:23:52.344 [DEBUG] [Thread-76072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:23:52.344 [DEBUG] [Thread-76072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:23:52.344 [DEBUG] [Thread-76072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:23:52.363 [INFO] [Thread-76072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:23:52.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:23:52.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:23:53.206 [DEBUG] [Thread-76072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:23:53.206 [DEBUG] [Thread-76072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:23:53.254 [DEBUG] [Thread-76072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:23:53.254 [DEBUG] [Thread-76072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:23:53.262 [DEBUG] [Thread-76072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:23:53.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:23:53.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:23:53.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:23:53.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:23:53.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:23:53.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:23:53.296 [DEBUG] [Thread-76072] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:23:59.840 [DEBUG] [Thread-76074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:06.925 [DEBUG] [Thread-76075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:14.876 [DEBUG] [Thread-76076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:23.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:24:23.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:24:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:24:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 23, 58), 7.35, 60.75, 0.0, 32.01, 11.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:24:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:23:58
2025-12-12T20:24:24.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:24:24.259 [DEBUG] [Thread-76077] [transport.py] [_log()] starting thread (client mode): 0xf57f2d10
2025-12-12T20:24:24.259 [DEBUG] [Thread-76077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:24:24.280 [DEBUG] [Thread-76077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:24:24.280 [INFO] [Thread-76077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:24:24.283 [DEBUG] [Thread-76077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:24:24.283 [DEBUG] [Thread-76077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] client lang: <none>
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] server lang: <none>
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] kex follows: False
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:24:24.284 [DEBUG] [Thread-76077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:24:24.285 [DEBUG] [Thread-76077] [transport.py] [_log()] Compression: none
2025-12-12T20:24:24.285 [DEBUG] [Thread-76077] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:24:24.304 [DEBUG] [Thread-76077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:24:24.304 [DEBUG] [Thread-76077] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:24:24.305 [DEBUG] [Thread-76077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:24:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:24:24.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:24:24.307 [DEBUG] [Thread-76077] [transport.py] [_log()] userauth is OK
2025-12-12T20:24:24.307 [DEBUG] [Thread-76077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:24:24.307 [DEBUG] [Thread-76077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:24:24.307 [DEBUG] [Thread-76077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:24:24.307 [DEBUG] [Thread-76077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:24:24.342 [INFO] [Thread-76077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:24:24.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:24:24.991 [DEBUG] [Thread-76077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:24:24.992 [DEBUG] [Thread-76077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:24:24.992 [DEBUG] [Thread-76077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:24:25.033 [DEBUG] [Thread-76077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:24:25.034 [DEBUG] [Thread-76077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:24:25.038 [DEBUG] [Thread-76077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:24:25.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:24:25.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:24:25.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:24:25.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:24:25.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:24:25.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:24:25.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:24:25.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:24:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:24:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.766768 -999.00  +11.70  34.81     65   +5.40 1 2 2 1 1    14    0 4.82 -72.09 ----- 32.8 34.8 322.6 37.9 12.6 -15.3 12.4 -14.8 12.2 -10.5 12.6 -10.7
2025-12-12T20:24:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:24:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:24:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.766768
2025-12-12T20:24:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:24:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:24:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:24:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:24:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:24:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:23:58', tmtdew=7.35, humidity=60.75, cloud=0.0, wind=32.01, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:24:08.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:24:25.065 [DEBUG] [Thread-76077] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:24:25.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:24:29.906 [DEBUG] [Thread-76080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:32.643 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:32.644 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:44.947 [DEBUG] [Thread-76081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:24:59.975 [DEBUG] [Thread-76082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:25:06.990 [DEBUG] [Thread-76083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:25:15.004 [DEBUG] [Thread-76084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:25:30.032 [DEBUG] [Thread-76085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:25:39.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:25:39.075 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:25:45.064 [DEBUG] [Thread-76086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:00.095 [DEBUG] [Thread-76087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:07.044 [DEBUG] [Thread-76088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:15.128 [DEBUG] [Thread-76089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:30.157 [DEBUG] [Thread-76090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:37.930 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T20:26:44.928 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:44.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:26:45.187 [DEBUG] [Thread-76091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:00.213 [DEBUG] [Thread-76092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:07.110 [DEBUG] [Thread-76093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:07.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:27:07.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:27:07.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:27:08.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 26, 38), 7.12, 61.58, 0.0, 35.09, 11.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:27:08.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:26:38
2025-12-12T20:27:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:27:08.920 [DEBUG] [Thread-76094] [transport.py] [_log()] starting thread (client mode): 0xf575f130
2025-12-12T20:27:08.920 [DEBUG] [Thread-76094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:27:08.940 [DEBUG] [Thread-76094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:27:08.940 [INFO] [Thread-76094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] client lang: <none>
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] server lang: <none>
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] kex follows: False
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:27:08.942 [DEBUG] [Thread-76094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:27:08.943 [DEBUG] [Thread-76094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:27:08.943 [DEBUG] [Thread-76094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:27:08.943 [DEBUG] [Thread-76094] [transport.py] [_log()] Compression: none
2025-12-12T20:27:08.943 [DEBUG] [Thread-76094] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:27:08.956 [DEBUG] [Thread-76094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:27:08.956 [DEBUG] [Thread-76094] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:27:08.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:27:08.957 [DEBUG] [Thread-76094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:27:08.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:27:08.959 [DEBUG] [Thread-76094] [transport.py] [_log()] userauth is OK
2025-12-12T20:27:08.959 [DEBUG] [Thread-76094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:27:08.960 [DEBUG] [Thread-76094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:27:08.960 [DEBUG] [Thread-76094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:27:08.960 [DEBUG] [Thread-76094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:27:08.983 [INFO] [Thread-76094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:27:08.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:27:09.565 [DEBUG] [Thread-76094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:27:09.565 [DEBUG] [Thread-76094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:27:09.566 [DEBUG] [Thread-76094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:27:09.607 [DEBUG] [Thread-76094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:27:09.607 [DEBUG] [Thread-76094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:27:09.610 [DEBUG] [Thread-76094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:27:09.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:27:09.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:27:09.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:27:09.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:27:09.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:27:09.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:27:09.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:27:09.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:27:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:27:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.768504 -999.00  +11.70  28.68     65   +5.60 1 3 1 1 1     9    0 4.25 -81.97 ..... 33.8 28.7 311.8 35.0 12.6 -11.3 12.5 -11.1 12.3 -7.0 12.6 -7.5
2025-12-12T20:27:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:27:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:27:09.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.768504
2025-12-12T20:27:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:27:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:27:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:27:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:27:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:27:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:26:38', tmtdew=7.12, humidity=61.58, cloud=0.0, wind=35.09, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:26:38.746', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:27:09.627 [DEBUG] [Thread-76094] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:27:09.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:27:09.721 [DEBUG] [Thread-76097] [transport.py] [_log()] starting thread (client mode): 0xf8157670
2025-12-12T20:27:09.721 [DEBUG] [Thread-76097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:27:09.734 [DEBUG] [Thread-76097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:27:09.735 [INFO] [Thread-76097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:27:09.742 [DEBUG] [Thread-76097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:27:09.742 [DEBUG] [Thread-76097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:27:09.742 [DEBUG] [Thread-76097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:27:09.742 [DEBUG] [Thread-76097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] client lang: <none>
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] server lang: <none>
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] kex follows: False
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:27:09.743 [DEBUG] [Thread-76097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:27:09.744 [DEBUG] [Thread-76097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:27:09.744 [DEBUG] [Thread-76097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:27:09.744 [DEBUG] [Thread-76097] [transport.py] [_log()] Compression: none
2025-12-12T20:27:09.744 [DEBUG] [Thread-76097] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:27:09.804 [DEBUG] [Thread-76097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:27:09.804 [DEBUG] [Thread-76097] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:27:09.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:27:09.805 [DEBUG] [Thread-76097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:27:09.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:27:09.860 [DEBUG] [Thread-76097] [transport.py] [_log()] userauth is OK
2025-12-12T20:27:09.860 [DEBUG] [Thread-76097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:27:09.860 [DEBUG] [Thread-76097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:27:09.860 [DEBUG] [Thread-76097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:27:09.860 [DEBUG] [Thread-76097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:27:09.879 [INFO] [Thread-76097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:27:09.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:27:09.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:27:10.699 [DEBUG] [Thread-76097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:27:10.699 [DEBUG] [Thread-76097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:27:10.747 [DEBUG] [Thread-76097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:27:10.747 [DEBUG] [Thread-76097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:27:10.755 [DEBUG] [Thread-76097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:27:10.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:27:10.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:27: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
2025-12-12T20:27:10.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:27:10.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:27:10.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:27:10.788 [DEBUG] [Thread-76097] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:27:15.241 [DEBUG] [Thread-76099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:30.297 [DEBUG] [Thread-76100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:40.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:27:40.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:27:40.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:27:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 27, 10), 7.1, 61.68, 0.0, 33.38, 11.78, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:27:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:27:10
2025-12-12T20:27:41.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:27:41.786 [DEBUG] [Thread-76101] [transport.py] [_log()] starting thread (client mode): 0xf5772020
2025-12-12T20:27:41.786 [DEBUG] [Thread-76101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:27:41.806 [DEBUG] [Thread-76101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:27:41.806 [INFO] [Thread-76101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] client lang: <none>
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] server lang: <none>
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] kex follows: False
2025-12-12T20:27:41.808 [DEBUG] [Thread-76101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:27:41.809 [DEBUG] [Thread-76101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:27:41.809 [DEBUG] [Thread-76101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:27:41.809 [DEBUG] [Thread-76101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:27:41.809 [DEBUG] [Thread-76101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:27:41.809 [DEBUG] [Thread-76101] [transport.py] [_log()] Compression: none
2025-12-12T20:27:41.809 [DEBUG] [Thread-76101] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:27:41.818 [DEBUG] [Thread-76101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:27:41.819 [DEBUG] [Thread-76101] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:27:41.819 [DEBUG] [Thread-76101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:27:41.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:27:41.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:27:41.822 [DEBUG] [Thread-76101] [transport.py] [_log()] userauth is OK
2025-12-12T20:27:41.822 [DEBUG] [Thread-76101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:27:41.822 [DEBUG] [Thread-76101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:27:41.822 [DEBUG] [Thread-76101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:27:41.822 [DEBUG] [Thread-76101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:27:41.845 [INFO] [Thread-76101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:27:41.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:27:42.467 [DEBUG] [Thread-76101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:27:42.467 [DEBUG] [Thread-76101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:27:42.468 [DEBUG] [Thread-76101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:27:42.508 [DEBUG] [Thread-76101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:27:42.508 [DEBUG] [Thread-76101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:27:42.511 [DEBUG] [Thread-76101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:27:42.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:27:42.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:27:42.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:27:42.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:27:42.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:27:42.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:27:42.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:27:42.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:27:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:27:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.768851 -999.00  +11.70  25.65     66   +5.60 1 3 1 1 1     8    0 4.16 -82.95 ..... 34.7 25.6 313.8 39.0 12.6 -11.3 12.5 -10.1 12.2 -6.6 12.6 -7.2
2025-12-12T20:27:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:27:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:27:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.768851
2025-12-12T20:27:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:27:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:27:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:27:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:27:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:27:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:27:10', tmtdew=7.1, humidity=61.68, cloud=0.0, wind=33.38, temperature=11.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:27:08.726', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:27:42.536 [DEBUG] [Thread-76101] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:27:42.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:27:42.632 [DEBUG] [Thread-76104] [transport.py] [_log()] starting thread (client mode): 0xf57f2ef0
2025-12-12T20:27:42.632 [DEBUG] [Thread-76104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:27:42.646 [DEBUG] [Thread-76104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:27:42.646 [INFO] [Thread-76104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:27:42.653 [DEBUG] [Thread-76104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] client lang: <none>
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] server lang: <none>
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] kex follows: False
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:27:42.654 [DEBUG] [Thread-76104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:27:42.655 [DEBUG] [Thread-76104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:27:42.655 [DEBUG] [Thread-76104] [transport.py] [_log()] Compression: none
2025-12-12T20:27:42.655 [DEBUG] [Thread-76104] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:27:42.710 [DEBUG] [Thread-76104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:27:42.710 [DEBUG] [Thread-76104] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:27:42.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:27:42.710 [DEBUG] [Thread-76104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:27:42.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:27:42.767 [DEBUG] [Thread-76104] [transport.py] [_log()] userauth is OK
2025-12-12T20:27:42.767 [DEBUG] [Thread-76104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:27:42.768 [DEBUG] [Thread-76104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:27:42.768 [DEBUG] [Thread-76104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:27:42.768 [DEBUG] [Thread-76104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:27:42.785 [INFO] [Thread-76104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:27:42.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:27:42.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:27:43.584 [DEBUG] [Thread-76104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:27:43.584 [DEBUG] [Thread-76104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:27:43.632 [DEBUG] [Thread-76104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:27:43.632 [DEBUG] [Thread-76104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:27:43.641 [DEBUG] [Thread-76104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:27:43.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:27:43.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:27:43.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:27:43.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:27:43.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:27:43.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:27:43.672 [DEBUG] [Thread-76104] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:27:45.326 [DEBUG] [Thread-76106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:47.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:27:47.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:00.375 [DEBUG] [Thread-76107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:07.173 [DEBUG] [Thread-76108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:28:13.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:28:13.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:28:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 27, 42), 7.01, 62.34, 0.0, 28.55, 11.76, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:28:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:27:42
2025-12-12T20:28:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:28:14.657 [DEBUG] [Thread-76109] [transport.py] [_log()] starting thread (client mode): 0xf81c3130
2025-12-12T20:28:14.657 [DEBUG] [Thread-76109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:28:14.678 [DEBUG] [Thread-76109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:28:14.678 [INFO] [Thread-76109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:28:14.681 [DEBUG] [Thread-76109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:28:14.681 [DEBUG] [Thread-76109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:28:14.681 [DEBUG] [Thread-76109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:28:14.681 [DEBUG] [Thread-76109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:14.681 [DEBUG] [Thread-76109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:14.681 [DEBUG] [Thread-76109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] client lang: <none>
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] server lang: <none>
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] kex follows: False
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] Compression: none
2025-12-12T20:28:14.682 [DEBUG] [Thread-76109] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:28:14.701 [DEBUG] [Thread-76109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:28:14.701 [DEBUG] [Thread-76109] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:28:14.702 [DEBUG] [Thread-76109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:28:14.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:28:14.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:28:14.704 [DEBUG] [Thread-76109] [transport.py] [_log()] userauth is OK
2025-12-12T20:28:14.705 [DEBUG] [Thread-76109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:28:14.705 [DEBUG] [Thread-76109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:28:14.705 [DEBUG] [Thread-76109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:28:14.705 [DEBUG] [Thread-76109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:28:14.720 [INFO] [Thread-76109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:28:14.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:28:15.366 [DEBUG] [Thread-76109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:28:15.366 [DEBUG] [Thread-76109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:28:15.366 [DEBUG] [Thread-76109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:28:15.401 [DEBUG] [Thread-76111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:15.407 [DEBUG] [Thread-76109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:28:15.407 [DEBUG] [Thread-76109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:28:15.409 [DEBUG] [Thread-76109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:28:15.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:28:15.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:28:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:28:15.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:28:15.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:28:15.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:28:15.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.769546 -999.00  +11.70  30.06     66   +5.70 1 3 2 1 1     7    0 3.96 -93.08 ..E.. 29.2 30.1 322.0 38.9 12.6 -11.3 12.5 -10.5 12.3 -7.0 12.6 -8.0
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.769546
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:28:15.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:27:42', tmtdew=7.01, humidity=62.34, cloud=0.0, wind=28.55, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:28:08.774', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:28:15.427 [DEBUG] [Thread-76109] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:28:15.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:28:15.512 [DEBUG] [Thread-76113] [transport.py] [_log()] starting thread (client mode): 0xf8157c70
2025-12-12T20:28:15.512 [DEBUG] [Thread-76113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:28:15.527 [DEBUG] [Thread-76113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:28:15.527 [INFO] [Thread-76113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] client lang: <none>
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] server lang: <none>
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] kex follows: False
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] Compression: none
2025-12-12T20:28:15.534 [DEBUG] [Thread-76113] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:28:15.590 [DEBUG] [Thread-76113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:28:15.590 [DEBUG] [Thread-76113] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:28:15.590 [DEBUG] [Thread-76113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:28:15.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:28:15.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:28:15.647 [DEBUG] [Thread-76113] [transport.py] [_log()] userauth is OK
2025-12-12T20:28:15.647 [DEBUG] [Thread-76113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:28:15.647 [DEBUG] [Thread-76113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:28:15.647 [DEBUG] [Thread-76113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:28:15.647 [DEBUG] [Thread-76113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:28:15.661 [INFO] [Thread-76113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:28:15.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:28:15.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:28:16.517 [DEBUG] [Thread-76113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:28:16.517 [DEBUG] [Thread-76113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:28:16.564 [DEBUG] [Thread-76113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:28:16.564 [DEBUG] [Thread-76113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:28:16.573 [DEBUG] [Thread-76113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:28:16.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:28:16.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:28:16.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:28:16.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:28:16.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:28:16.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:28:16.604 [DEBUG] [Thread-76113] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:28:30.428 [DEBUG] [Thread-76115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:45.473 [DEBUG] [Thread-76116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:46.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:28:46.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:28:47.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 28, 14), 7.02, 62.31, 0.0, 29.68, 11.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:28:47.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:28:14
2025-12-12T20:28:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:28:47.626 [DEBUG] [Thread-76117] [transport.py] [_log()] starting thread (client mode): 0xf5703d60
2025-12-12T20:28:47.626 [DEBUG] [Thread-76117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:28:47.646 [DEBUG] [Thread-76117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:28:47.646 [INFO] [Thread-76117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] client lang: <none>
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] server lang: <none>
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] kex follows: False
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] Compression: none
2025-12-12T20:28:47.650 [DEBUG] [Thread-76117] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:28:47.667 [DEBUG] [Thread-76117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:28:47.667 [DEBUG] [Thread-76117] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:28:47.667 [DEBUG] [Thread-76117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:28:47.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:28:47.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:28:47.670 [DEBUG] [Thread-76117] [transport.py] [_log()] userauth is OK
2025-12-12T20:28:47.670 [DEBUG] [Thread-76117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:28:47.670 [DEBUG] [Thread-76117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:28:47.670 [DEBUG] [Thread-76117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:28:47.670 [DEBUG] [Thread-76117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:28:47.686 [INFO] [Thread-76117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:28:47.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:28:48.310 [DEBUG] [Thread-76117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:28:48.310 [DEBUG] [Thread-76117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:28:48.311 [DEBUG] [Thread-76117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:28:48.352 [DEBUG] [Thread-76117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:28:48.352 [DEBUG] [Thread-76117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:28:48.354 [DEBUG] [Thread-76117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:28:48.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:28:48.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:28:48.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:28:48.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:28:48.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:28:48.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:28:48.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.769893 -999.00  +11.60  30.79     67   +5.70 1 3 2 1 1     6    0 4.22 -86.79 ..E.. 28.7 30.8 316.6 37.1 12.7 -8.8 12.5 -8.4 12.3 -5.2 12.7 -6.0
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.769893
2025-12-12T20:28:48.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:28:48.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:28:48.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:28:48.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:28:48.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:28:48.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:28:14', tmtdew=7.02, humidity=62.31, cloud=0.0, wind=29.68, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:28:38.755', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:28:48.376 [DEBUG] [Thread-76117] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:28:48.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:28:48.462 [DEBUG] [Thread-76120] [transport.py] [_log()] starting thread (client mode): 0xf81c33d0
2025-12-12T20:28:48.462 [DEBUG] [Thread-76120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:28:48.477 [DEBUG] [Thread-76120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:28:48.477 [INFO] [Thread-76120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] client lang: <none>
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] server lang: <none>
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] kex follows: False
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] Compression: none
2025-12-12T20:28:48.485 [DEBUG] [Thread-76120] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:28:48.542 [DEBUG] [Thread-76120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:28:48.543 [DEBUG] [Thread-76120] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:28:48.543 [DEBUG] [Thread-76120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:28:48.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:28:48.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:28:48.603 [DEBUG] [Thread-76120] [transport.py] [_log()] userauth is OK
2025-12-12T20:28:48.603 [DEBUG] [Thread-76120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:28:48.603 [DEBUG] [Thread-76120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:28:48.603 [DEBUG] [Thread-76120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:28:48.603 [DEBUG] [Thread-76120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:28:48.617 [INFO] [Thread-76120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:28:48.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:28:48.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:28:49.473 [DEBUG] [Thread-76120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:28:49.473 [DEBUG] [Thread-76120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:28:49.521 [DEBUG] [Thread-76120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:28:49.521 [DEBUG] [Thread-76120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:28:49.530 [DEBUG] [Thread-76120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:28:49.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:28:49.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:28:49.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:28:49.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:28:49.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:28:49.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:28:49.565 [DEBUG] [Thread-76120] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:28:54.289 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:28:54.291 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:29:00.505 [DEBUG] [Thread-76122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:29:07.231 [DEBUG] [Thread-76123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:29:15.558 [DEBUG] [Thread-76124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:29:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:29:19.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:29:19.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:29:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 28, 46), 6.91, 62.34, 0.0, 33.68, 11.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:29:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:28:46
2025-12-12T20:29:20.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:29:20.628 [DEBUG] [Thread-76125] [transport.py] [_log()] starting thread (client mode): 0xf81e7730
2025-12-12T20:29:20.628 [DEBUG] [Thread-76125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:29:20.648 [DEBUG] [Thread-76125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:29:20.648 [INFO] [Thread-76125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:29:20.651 [DEBUG] [Thread-76125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:29:20.651 [DEBUG] [Thread-76125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:29:20.651 [DEBUG] [Thread-76125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:29:20.651 [DEBUG] [Thread-76125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:20.651 [DEBUG] [Thread-76125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] client lang: <none>
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] server lang: <none>
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] kex follows: False
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] Compression: none
2025-12-12T20:29:20.652 [DEBUG] [Thread-76125] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:29:20.661 [DEBUG] [Thread-76125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:29:20.661 [DEBUG] [Thread-76125] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:29:20.661 [DEBUG] [Thread-76125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:29:20.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:29:20.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:29:20.662 [DEBUG] [Thread-76125] [transport.py] [_log()] userauth is OK
2025-12-12T20:29:20.662 [DEBUG] [Thread-76125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:29:20.662 [DEBUG] [Thread-76125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:29:20.662 [DEBUG] [Thread-76125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:29:20.662 [DEBUG] [Thread-76125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:29:20.680 [INFO] [Thread-76125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:29:20.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:29:21.294 [DEBUG] [Thread-76125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:29:21.294 [DEBUG] [Thread-76125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:29:21.294 [DEBUG] [Thread-76125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:29:21.336 [DEBUG] [Thread-76125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:29:21.336 [DEBUG] [Thread-76125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:29:21.338 [DEBUG] [Thread-76125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:29:21.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:29:21.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:29:21.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:29:21.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:29:21.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:29:21.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:29:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.770240 -999.00  +11.50  36.30     67   +5.70 1 3 2 1 1     6    0 4.01 -89.62 ..E.. 36.3 36.3 313.2 43.7 12.7 -7.1 12.5 -7.0 12.3 -4.9 12.6 -4.6
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.770240
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:29:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:28:46', tmtdew=6.91, humidity=62.34, cloud=0.0, wind=33.68, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:29:08.736', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:29:21.359 [DEBUG] [Thread-76125] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:29:21.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:29:21.443 [DEBUG] [Thread-76128] [transport.py] [_log()] starting thread (client mode): 0xf5703700
2025-12-12T20:29:21.443 [DEBUG] [Thread-76128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:29:21.458 [DEBUG] [Thread-76128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:29:21.458 [INFO] [Thread-76128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:29:21.465 [DEBUG] [Thread-76128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] client lang: <none>
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] server lang: <none>
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] kex follows: False
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] Compression: none
2025-12-12T20:29:21.466 [DEBUG] [Thread-76128] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:29:21.522 [DEBUG] [Thread-76128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:29:21.522 [DEBUG] [Thread-76128] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:29:21.522 [DEBUG] [Thread-76128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:29:21.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:29:21.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:29:21.579 [DEBUG] [Thread-76128] [transport.py] [_log()] userauth is OK
2025-12-12T20:29:21.579 [DEBUG] [Thread-76128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:29:21.579 [DEBUG] [Thread-76128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:29:21.579 [DEBUG] [Thread-76128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:29:21.579 [DEBUG] [Thread-76128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:29:21.594 [INFO] [Thread-76128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:29:21.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:29:21.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:29:22.433 [DEBUG] [Thread-76128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:29:22.433 [DEBUG] [Thread-76128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:29:22.482 [DEBUG] [Thread-76128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:29:22.482 [DEBUG] [Thread-76128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:29:22.490 [DEBUG] [Thread-76128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:29:22.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:29:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:29:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:29:22.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:29:22.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:29:22.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:29:22.526 [DEBUG] [Thread-76128] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:29:30.586 [DEBUG] [Thread-76130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:29:45.628 [DEBUG] [Thread-76131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:29:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:29:52.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:29:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:29:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 29, 18), 6.93, 62.28, 0.0, 35.36, 11.74, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:29:53.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:29:18
2025-12-12T20:29:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:29:53.533 [DEBUG] [Thread-76132] [transport.py] [_log()] starting thread (client mode): 0xf81c17b0
2025-12-12T20:29:53.533 [DEBUG] [Thread-76132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:29:53.554 [DEBUG] [Thread-76132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:29:53.555 [INFO] [Thread-76132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] client lang: <none>
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] server lang: <none>
2025-12-12T20:29:53.558 [DEBUG] [Thread-76132] [transport.py] [_log()] kex follows: False
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] Compression: none
2025-12-12T20:29:53.559 [DEBUG] [Thread-76132] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:29:53.577 [DEBUG] [Thread-76132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:29:53.578 [DEBUG] [Thread-76132] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:29:53.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:29:53.579 [DEBUG] [Thread-76132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:29:53.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:29:53.581 [DEBUG] [Thread-76132] [transport.py] [_log()] userauth is OK
2025-12-12T20:29:53.581 [DEBUG] [Thread-76132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:29:53.581 [DEBUG] [Thread-76132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:29:53.581 [DEBUG] [Thread-76132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:29:53.581 [DEBUG] [Thread-76132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:29:53.616 [INFO] [Thread-76132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:29:53.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:29:54.195 [DEBUG] [Thread-76132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:29:54.195 [DEBUG] [Thread-76132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:29:54.196 [DEBUG] [Thread-76132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:29:54.236 [DEBUG] [Thread-76132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:29:54.236 [DEBUG] [Thread-76132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:29:54.239 [DEBUG] [Thread-76132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:29:54.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:29:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:29:54.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:29:54.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:29:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:29:54.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:29:54.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:29:54.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:29:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:29:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.770588 -999.00  +11.60  26.49     67   +5.80 1 3 1 1 1     5    0 4.09 -84.13 ..... 22.8 26.5 316.8 34.3 12.7 -7.9 12.5 -8.2 12.3 -6.0 12.7 -5.2
2025-12-12T20:29:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:29:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:29:54.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.770588
2025-12-12T20:29:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:29:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:29:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:29:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:29:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:29:54.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:29:18', tmtdew=6.93, humidity=62.28, cloud=0.0, wind=35.36, temperature=11.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:29:38.803', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:29:54.267 [DEBUG] [Thread-76132] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:29:54.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:29:54.363 [DEBUG] [Thread-76135] [transport.py] [_log()] starting thread (client mode): 0xf81e48e0
2025-12-12T20:29:54.363 [DEBUG] [Thread-76135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:29:54.377 [DEBUG] [Thread-76135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:29:54.377 [INFO] [Thread-76135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] client lang: <none>
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] server lang: <none>
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] kex follows: False
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:29:54.385 [DEBUG] [Thread-76135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:29:54.386 [DEBUG] [Thread-76135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:29:54.386 [DEBUG] [Thread-76135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:29:54.386 [DEBUG] [Thread-76135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:29:54.386 [DEBUG] [Thread-76135] [transport.py] [_log()] Compression: none
2025-12-12T20:29:54.386 [DEBUG] [Thread-76135] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:29:54.442 [DEBUG] [Thread-76135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:29:54.442 [DEBUG] [Thread-76135] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:29:54.443 [DEBUG] [Thread-76135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:29:54.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:29:54.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:29:54.499 [DEBUG] [Thread-76135] [transport.py] [_log()] userauth is OK
2025-12-12T20:29:54.500 [DEBUG] [Thread-76135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:29:54.500 [DEBUG] [Thread-76135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:29:54.500 [DEBUG] [Thread-76135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:29:54.500 [DEBUG] [Thread-76135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:29:54.522 [INFO] [Thread-76135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:29:54.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:29:54.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:29:55.369 [DEBUG] [Thread-76135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:29:55.369 [DEBUG] [Thread-76135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:29:55.417 [DEBUG] [Thread-76135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:29:55.417 [DEBUG] [Thread-76135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:29:55.426 [DEBUG] [Thread-76135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:29:55.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:29:55.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:29:55.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:29:55.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:29:55.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:29:55.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:29:55.460 [DEBUG] [Thread-76135] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:30:00.128 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:00.129 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:00.655 [DEBUG] [Thread-76137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:07.291 [DEBUG] [Thread-76138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:15.686 [DEBUG] [Thread-76139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:30:25.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:30:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:30:26.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 30, 22), 6.84, 62.96, 0.0, 36.81, 11.74, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:30:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:30:22
2025-12-12T20:30:26.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:30:26.432 [DEBUG] [Thread-76140] [transport.py] [_log()] starting thread (client mode): 0xf813f910
2025-12-12T20:30:26.432 [DEBUG] [Thread-76140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:30:26.453 [DEBUG] [Thread-76140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:30:26.453 [INFO] [Thread-76140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] client lang: <none>
2025-12-12T20:30:26.456 [DEBUG] [Thread-76140] [transport.py] [_log()] server lang: <none>
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] kex follows: False
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] Compression: none
2025-12-12T20:30:26.457 [DEBUG] [Thread-76140] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:30:26.474 [DEBUG] [Thread-76140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:30:26.474 [DEBUG] [Thread-76140] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:30:26.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:30:26.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:30:26.476 [DEBUG] [Thread-76140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:30:26.476 [DEBUG] [Thread-76140] [transport.py] [_log()] userauth is OK
2025-12-12T20:30:26.476 [DEBUG] [Thread-76140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:30:26.476 [DEBUG] [Thread-76140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:30:26.476 [DEBUG] [Thread-76140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:30:26.476 [DEBUG] [Thread-76140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:30:26.499 [INFO] [Thread-76140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:30:26.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:30:27.105 [DEBUG] [Thread-76140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:30:27.106 [DEBUG] [Thread-76140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:30:27.106 [DEBUG] [Thread-76140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:30:27.147 [DEBUG] [Thread-76140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:30:27.147 [DEBUG] [Thread-76140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:30:27.149 [DEBUG] [Thread-76140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:30:27.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:30:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:30:27.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:30:27.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:30:27.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:30:27.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:30:27.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:30:27.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:30:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:30:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.770588 -999.00  +11.60  26.49     67   +5.80 1 3 1 1 1     5    0 4.09 -84.13 ..... 22.8 26.5 316.8 34.3 12.7 -7.9 12.5 -8.2 12.3 -6.0 12.7 -5.2
2025-12-12T20:30:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:30:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:30:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.770588
2025-12-12T20:30:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:30:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:30:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:30:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:30:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:30:27.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:30:22', tmtdew=6.84, humidity=62.96, cloud=0.0, wind=36.81, temperature=11.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:29:38.803', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:30:27.168 [DEBUG] [Thread-76140] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:30:27.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:30:27.257 [DEBUG] [Thread-76143] [transport.py] [_log()] starting thread (client mode): 0xf57a7d60
2025-12-12T20:30:27.257 [DEBUG] [Thread-76143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:30:27.271 [DEBUG] [Thread-76143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:30:27.271 [INFO] [Thread-76143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:30:27.279 [DEBUG] [Thread-76143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:30:27.279 [DEBUG] [Thread-76143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:30:27.279 [DEBUG] [Thread-76143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:30:27.279 [DEBUG] [Thread-76143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:30:27.279 [DEBUG] [Thread-76143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] client lang: <none>
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] server lang: <none>
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] kex follows: False
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:30:27.280 [DEBUG] [Thread-76143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:30:27.281 [DEBUG] [Thread-76143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:30:27.281 [DEBUG] [Thread-76143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:30:27.281 [DEBUG] [Thread-76143] [transport.py] [_log()] Compression: none
2025-12-12T20:30:27.281 [DEBUG] [Thread-76143] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:30:27.336 [DEBUG] [Thread-76143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:30:27.336 [DEBUG] [Thread-76143] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:30:27.337 [DEBUG] [Thread-76143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:30:27.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:30:27.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:30:27.391 [DEBUG] [Thread-76143] [transport.py] [_log()] userauth is OK
2025-12-12T20:30:27.392 [DEBUG] [Thread-76143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:30:27.392 [DEBUG] [Thread-76143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:30:27.392 [DEBUG] [Thread-76143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:30:27.392 [DEBUG] [Thread-76143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:30:27.411 [INFO] [Thread-76143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:30:27.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:30:27.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:30:28.289 [DEBUG] [Thread-76143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:30:28.289 [DEBUG] [Thread-76143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:30:28.337 [DEBUG] [Thread-76143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:30:28.337 [DEBUG] [Thread-76143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:30:28.346 [DEBUG] [Thread-76143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:30:28.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:30:28.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:30:28.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:30:28.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:30:28.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:30:28.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:30:28.382 [DEBUG] [Thread-76143] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:30:30.717 [DEBUG] [Thread-76145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:45.766 [DEBUG] [Thread-76146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:30:58.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:30:58.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:30:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:30:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 30, 54), 6.86, 62.54, 0.0, 36.14, 11.81, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:30:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:30:54
2025-12-12T20:30:59.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:30:59.373 [DEBUG] [Thread-76147] [transport.py] [_log()] starting thread (client mode): 0xf5772500
2025-12-12T20:30:59.373 [DEBUG] [Thread-76147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:30:59.394 [DEBUG] [Thread-76147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:30:59.394 [INFO] [Thread-76147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:30:59.396 [DEBUG] [Thread-76147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] client lang: <none>
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] server lang: <none>
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] kex follows: False
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] Compression: none
2025-12-12T20:30:59.397 [DEBUG] [Thread-76147] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:30:59.412 [DEBUG] [Thread-76147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:30:59.413 [DEBUG] [Thread-76147] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:30:59.413 [DEBUG] [Thread-76147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:30:59.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:30:59.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:30:59.415 [DEBUG] [Thread-76147] [transport.py] [_log()] userauth is OK
2025-12-12T20:30:59.416 [DEBUG] [Thread-76147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:30:59.416 [DEBUG] [Thread-76147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:30:59.416 [DEBUG] [Thread-76147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:30:59.416 [DEBUG] [Thread-76147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:30:59.437 [INFO] [Thread-76147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:30:59.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:31:00.093 [DEBUG] [Thread-76147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:31:00.093 [DEBUG] [Thread-76147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:31:00.094 [DEBUG] [Thread-76147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:31:00.134 [DEBUG] [Thread-76147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:31:00.134 [DEBUG] [Thread-76147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:31:00.137 [DEBUG] [Thread-76147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:31:00.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:31:00.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:31:00.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:31:00.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:31:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:31:00.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:31:00.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:31:00.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:31:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:31:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.770935 -999.00  +11.70  33.72     66   +5.70 1 3 2 1 1     5    0 4.13 -82.87 ..E.. 25.8 33.7 333.4 38.6 12.7 -10.8 12.5 -10.9 12.3 -8.0 12.7 -7.1
2025-12-12T20:31:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:31:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:31:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.770935
2025-12-12T20:31:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:31:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:31:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:31:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:31:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:31:00.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:30:54', tmtdew=6.86, humidity=62.54, cloud=0.0, wind=36.14, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:30:08.784', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.6672500000000001, nan, nan, nan, nan, 2.4699999999999998, nan, 1.468, nan, nan, nan, nan, nan, 1.7424999999999997, nan, nan, nan, nan, 1.3142499999999986, 1.1129999999999987, nan, nan, nan, nan, nan, nan, 1.0010000000000003, nan, 0.8805000000000014, nan, nan, nan], zp_timestamp='2025-12-11T23:14:00')
2025-12-12T20:31:00.168 [DEBUG] [Thread-76147] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:31:00.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:31:00.265 [DEBUG] [Thread-76150] [transport.py] [_log()] starting thread (client mode): 0xf5772470
2025-12-12T20:31:00.265 [DEBUG] [Thread-76150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:31:00.284 [DEBUG] [Thread-76150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:31:00.284 [INFO] [Thread-76150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:31:00.291 [DEBUG] [Thread-76150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:31:00.291 [DEBUG] [Thread-76150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:31:00.291 [DEBUG] [Thread-76150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:31:00.291 [DEBUG] [Thread-76150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] client lang: <none>
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] server lang: <none>
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] kex follows: False
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] Compression: none
2025-12-12T20:31:00.292 [DEBUG] [Thread-76150] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:31:00.351 [DEBUG] [Thread-76150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:31:00.352 [DEBUG] [Thread-76150] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:31:00.352 [DEBUG] [Thread-76150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:31:00.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:31:00.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:31:00.407 [DEBUG] [Thread-76150] [transport.py] [_log()] userauth is OK
2025-12-12T20:31:00.408 [DEBUG] [Thread-76150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:31:00.408 [DEBUG] [Thread-76150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:31:00.408 [DEBUG] [Thread-76150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:31:00.408 [DEBUG] [Thread-76150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:31:00.426 [INFO] [Thread-76150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:31:00.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:31:00.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:31:00.797 [DEBUG] [Thread-76152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:31:01.252 [DEBUG] [Thread-76150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:31:01.252 [DEBUG] [Thread-76150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:31:01.300 [DEBUG] [Thread-76150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:31:01.300 [DEBUG] [Thread-76150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:31:01.309 [DEBUG] [Thread-76150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:31:01.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:31:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:31:01.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:31:01.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:31:01.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:31:01.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:31:01.343 [DEBUG] [Thread-76150] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:31:05.235 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:31:05.236 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:31:07.368 [DEBUG] [Thread-76153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:31:15.844 [DEBUG] [Thread-76154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:31:30.868 [DEBUG] [Thread-76155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:31:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:31:31.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:31:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:31:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 31, 26), 6.8, 62.83, 0.0, 36.19, 11.79, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:31:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:31:26
2025-12-12T20:31:32.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:31:32.322 [DEBUG] [Thread-76156] [transport.py] [_log()] starting thread (client mode): 0xf5703220
2025-12-12T20:31:32.322 [DEBUG] [Thread-76156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:31:32.345 [DEBUG] [Thread-76156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:31:32.345 [INFO] [Thread-76156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:31:32.349 [DEBUG] [Thread-76156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:31:32.349 [DEBUG] [Thread-76156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:31:32.349 [DEBUG] [Thread-76156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] client lang: <none>
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] server lang: <none>
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] kex follows: False
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] Compression: none
2025-12-12T20:31:32.350 [DEBUG] [Thread-76156] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:31:32.365 [DEBUG] [Thread-76156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:31:32.366 [DEBUG] [Thread-76156] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:31:32.366 [DEBUG] [Thread-76156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:31:32.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:31:32.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:31:32.367 [DEBUG] [Thread-76156] [transport.py] [_log()] userauth is OK
2025-12-12T20:31:32.367 [DEBUG] [Thread-76156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:31:32.367 [DEBUG] [Thread-76156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:31:32.367 [DEBUG] [Thread-76156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:31:32.367 [DEBUG] [Thread-76156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:31:32.398 [INFO] [Thread-76156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:31:32.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:31:33.069 [DEBUG] [Thread-76156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:31:33.069 [DEBUG] [Thread-76156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:31:33.069 [DEBUG] [Thread-76156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:31:33.110 [DEBUG] [Thread-76156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:31:33.110 [DEBUG] [Thread-76156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:31:33.113 [DEBUG] [Thread-76156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:31:33.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:31:33.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:31:33.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:31:33.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:31:33.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:31:33.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:31:33.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:31:33.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:31:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:31:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.771282 -999.00  +11.60  30.55     67   +5.80 1 2 2 1 1     4    0 4.06 -82.86 ..E.. 33.3 30.6 329.2 47.4 12.7 -12.9 12.5 -12.8 12.4 -8.8 12.7 -9.1
2025-12-12T20:31:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:31:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:31:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.771282
2025-12-12T20:31:33.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:31:33.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:31:33.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:31:33.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:31:33.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:31:33.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:31:26', tmtdew=6.8, humidity=62.83, cloud=0.0, wind=36.19, temperature=11.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:30:38.765', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:29:00')
2025-12-12T20:31:33.138 [DEBUG] [Thread-76156] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:31:33.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:31:33.234 [DEBUG] [Thread-76159] [transport.py] [_log()] starting thread (client mode): 0xf57e3010
2025-12-12T20:31:33.234 [DEBUG] [Thread-76159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:31:33.249 [DEBUG] [Thread-76159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:31:33.249 [INFO] [Thread-76159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] client lang: <none>
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] server lang: <none>
2025-12-12T20:31:33.257 [DEBUG] [Thread-76159] [transport.py] [_log()] kex follows: False
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] Compression: none
2025-12-12T20:31:33.258 [DEBUG] [Thread-76159] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:31:33.315 [DEBUG] [Thread-76159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:31:33.316 [DEBUG] [Thread-76159] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:31:33.316 [DEBUG] [Thread-76159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:31:33.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:31:33.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:31:33.375 [DEBUG] [Thread-76159] [transport.py] [_log()] userauth is OK
2025-12-12T20:31:33.375 [DEBUG] [Thread-76159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:31:33.375 [DEBUG] [Thread-76159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:31:33.376 [DEBUG] [Thread-76159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:31:33.376 [DEBUG] [Thread-76159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:31:33.394 [INFO] [Thread-76159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:31:33.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:31:33.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:31:34.222 [DEBUG] [Thread-76159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:31:34.222 [DEBUG] [Thread-76159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:31:34.271 [DEBUG] [Thread-76159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:31:34.271 [DEBUG] [Thread-76159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:31:34.280 [DEBUG] [Thread-76159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:31:34.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:31:34.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:31: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') -> 00000000
2025-12-12T20:31:34.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:31:34.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:31:34.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:31:34.314 [DEBUG] [Thread-76159] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:31:45.898 [DEBUG] [Thread-76161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:00.953 [DEBUG] [Thread-76162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:04.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:32:04.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:32:04.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:32:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 31, 58), 6.73, 63.38, 0.0, 35.34, 11.69, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:32:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:31:58
2025-12-12T20:32:05.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:32:05.304 [DEBUG] [Thread-76163] [transport.py] [_log()] starting thread (client mode): 0xf57e2440
2025-12-12T20:32:05.304 [DEBUG] [Thread-76163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:32:05.324 [DEBUG] [Thread-76163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:32:05.324 [INFO] [Thread-76163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:05.327 [DEBUG] [Thread-76163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] client lang: <none>
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] server lang: <none>
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] kex follows: False
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] Compression: none
2025-12-12T20:32:05.328 [DEBUG] [Thread-76163] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:32:05.348 [DEBUG] [Thread-76163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:32:05.349 [DEBUG] [Thread-76163] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:32:05.349 [DEBUG] [Thread-76163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:32:05.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:32:05.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:32:05.393 [DEBUG] [Thread-76163] [transport.py] [_log()] userauth is OK
2025-12-12T20:32:05.393 [DEBUG] [Thread-76163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:32:05.393 [DEBUG] [Thread-76163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:32:05.394 [DEBUG] [Thread-76163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:32:05.394 [DEBUG] [Thread-76163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:32:05.428 [INFO] [Thread-76163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:32:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:32:06.086 [DEBUG] [Thread-76163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:32:06.086 [DEBUG] [Thread-76163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:32:06.087 [DEBUG] [Thread-76163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:32:06.127 [DEBUG] [Thread-76163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:32:06.127 [DEBUG] [Thread-76163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:32:06.129 [DEBUG] [Thread-76163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:32:06.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:32:06.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:32:06.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:32:06.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:32:06.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:32:06.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:32:06.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:32:06.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:32:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:32:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.771629 -999.00  +11.60  36.35     68   +5.90 1 2 2 1 1     4    0 3.99 -87.89 ..ES. 38.2 36.4 318.6 41.1 12.7 -12.5 12.5 -12.6 12.3 -8.7 12.7 -8.7
2025-12-12T20:32:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:32:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:32:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.771629
2025-12-12T20:32:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:32:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:32:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:32:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:32:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:32:06.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:31:58', tmtdew=6.73, humidity=63.38, cloud=0.0, wind=35.34, temperature=11.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:31:08.746', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:29:00')
2025-12-12T20:32:06.155 [DEBUG] [Thread-76163] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:32:06.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:32:06.250 [DEBUG] [Thread-76166] [transport.py] [_log()] starting thread (client mode): 0xf57e22c0
2025-12-12T20:32:06.250 [DEBUG] [Thread-76166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:32:06.265 [DEBUG] [Thread-76166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:32:06.265 [INFO] [Thread-76166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:32:06.272 [DEBUG] [Thread-76166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] client lang: <none>
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] server lang: <none>
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] kex follows: False
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:32:06.273 [DEBUG] [Thread-76166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:32:06.274 [DEBUG] [Thread-76166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:32:06.274 [DEBUG] [Thread-76166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:32:06.274 [DEBUG] [Thread-76166] [transport.py] [_log()] Compression: none
2025-12-12T20:32:06.274 [DEBUG] [Thread-76166] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:32:06.331 [DEBUG] [Thread-76166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:32:06.332 [DEBUG] [Thread-76166] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:32:06.333 [DEBUG] [Thread-76166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:32:06.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:32:06.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:32:06.388 [DEBUG] [Thread-76166] [transport.py] [_log()] userauth is OK
2025-12-12T20:32:06.388 [DEBUG] [Thread-76166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:32:06.389 [DEBUG] [Thread-76166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:32:06.389 [DEBUG] [Thread-76166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:32:06.389 [DEBUG] [Thread-76166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:32:06.408 [INFO] [Thread-76166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:32:06.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:32:06.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:32:07.265 [DEBUG] [Thread-76166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:32:07.265 [DEBUG] [Thread-76166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:32:07.317 [DEBUG] [Thread-76166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:32:07.317 [DEBUG] [Thread-76166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:32:07.326 [DEBUG] [Thread-76166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:32:07.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:32:07.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:32:07.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:32:07.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:32:07.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:32:07.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:32:07.366 [DEBUG] [Thread-76166] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:32:07.425 [DEBUG] [Thread-76168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:13.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:13.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:15.984 [DEBUG] [Thread-76169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:31.025 [DEBUG] [Thread-76170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:32:37.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:32:37.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:32:37.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:32:38.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 32, 30), 6.66, 63.71, 0.0, 39.29, 11.69, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:32:38.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:32:30
2025-12-12T20:32:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:32:38.375 [DEBUG] [Thread-76171] [transport.py] [_log()] starting thread (client mode): 0xf57e1cf0
2025-12-12T20:32:38.375 [DEBUG] [Thread-76171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:32:38.394 [DEBUG] [Thread-76171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:32:38.395 [INFO] [Thread-76171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] client lang: <none>
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] server lang: <none>
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] kex follows: False
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] Compression: none
2025-12-12T20:32:38.398 [DEBUG] [Thread-76171] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:32:38.414 [DEBUG] [Thread-76171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:32:38.414 [DEBUG] [Thread-76171] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:32:38.414 [DEBUG] [Thread-76171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:32:38.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:32:38.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:32:38.416 [DEBUG] [Thread-76171] [transport.py] [_log()] userauth is OK
2025-12-12T20:32:38.416 [DEBUG] [Thread-76171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:32:38.416 [DEBUG] [Thread-76171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:32:38.416 [DEBUG] [Thread-76171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:32:38.416 [DEBUG] [Thread-76171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:32:38.434 [INFO] [Thread-76171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:32:38.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:32:39.067 [DEBUG] [Thread-76171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:32:39.067 [DEBUG] [Thread-76171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:32:39.068 [DEBUG] [Thread-76171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:32:39.109 [DEBUG] [Thread-76171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:32:39.109 [DEBUG] [Thread-76171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:32:39.112 [DEBUG] [Thread-76171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:32:39.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:32:39.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:32:39.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:32:39.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:32:39.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:32:39.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:32:39.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.772324 -999.00  +11.50  31.53     68   +5.90 1 2 2 1 1     3    0 4.02 -83.75 Z.E.. 30.1 31.5 328.4 45.1 12.7 -11.6 12.5 -12.1 12.3 -8.3 12.7 -7.9
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.772324
2025-12-12T20:32:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:32:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:32:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:32:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:32:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:32:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:32:30', tmtdew=6.66, humidity=63.71, cloud=0.0, wind=39.29, temperature=11.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:32:08.794', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:29:00')
2025-12-12T20:32:39.133 [DEBUG] [Thread-76171] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:32:39.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:32:39.217 [DEBUG] [Thread-76174] [transport.py] [_log()] starting thread (client mode): 0xf57e2500
2025-12-12T20:32:39.217 [DEBUG] [Thread-76174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:32:39.233 [DEBUG] [Thread-76174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:32:39.233 [INFO] [Thread-76174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:32:39.241 [DEBUG] [Thread-76174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:32:39.241 [DEBUG] [Thread-76174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:32:39.241 [DEBUG] [Thread-76174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:32:39.241 [DEBUG] [Thread-76174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:39.241 [DEBUG] [Thread-76174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] client lang: <none>
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] server lang: <none>
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] kex follows: False
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] Compression: none
2025-12-12T20:32:39.242 [DEBUG] [Thread-76174] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:32:39.300 [DEBUG] [Thread-76174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:32:39.301 [DEBUG] [Thread-76174] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:32:39.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:32:39.302 [DEBUG] [Thread-76174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:32:39.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:32:39.356 [DEBUG] [Thread-76174] [transport.py] [_log()] userauth is OK
2025-12-12T20:32:39.357 [DEBUG] [Thread-76174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:32:39.357 [DEBUG] [Thread-76174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:32:39.357 [DEBUG] [Thread-76174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:32:39.357 [DEBUG] [Thread-76174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:32:39.382 [INFO] [Thread-76174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:32:39.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:32:39.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:32:40.230 [DEBUG] [Thread-76174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:32:40.230 [DEBUG] [Thread-76174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:32:40.278 [DEBUG] [Thread-76174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:32:40.278 [DEBUG] [Thread-76174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:32:40.287 [DEBUG] [Thread-76174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:32:40.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:32:40.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:32:40.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:32:40.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:32:40.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:32:40.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:32:40.322 [DEBUG] [Thread-76174] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:32:46.056 [DEBUG] [Thread-76176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:01.104 [DEBUG] [Thread-76177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:07.482 [DEBUG] [Thread-76178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:10.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:33:10.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:33:10.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:33:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 33, 2), 6.6, 63.96, 0.0, 37.44, 11.68, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:33:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:33:02
2025-12-12T20:33:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:33:11.293 [DEBUG] [Thread-76179] [transport.py] [_log()] starting thread (client mode): 0xf574dc30
2025-12-12T20:33:11.293 [DEBUG] [Thread-76179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:33:11.315 [DEBUG] [Thread-76179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:33:11.315 [INFO] [Thread-76179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] client lang: <none>
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] server lang: <none>
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] kex follows: False
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] Compression: none
2025-12-12T20:33:11.318 [DEBUG] [Thread-76179] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:33:11.340 [DEBUG] [Thread-76179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:33:11.340 [DEBUG] [Thread-76179] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:33:11.341 [DEBUG] [Thread-76179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:33:11.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:33:11.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:33:11.344 [DEBUG] [Thread-76179] [transport.py] [_log()] userauth is OK
2025-12-12T20:33:11.344 [DEBUG] [Thread-76179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:33:11.344 [DEBUG] [Thread-76179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:33:11.344 [DEBUG] [Thread-76179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:33:11.344 [DEBUG] [Thread-76179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:33:11.381 [INFO] [Thread-76179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:33:11.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:33:12.027 [DEBUG] [Thread-76179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:33:12.027 [DEBUG] [Thread-76179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:33:12.027 [DEBUG] [Thread-76179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:33:12.068 [DEBUG] [Thread-76179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:33:12.068 [DEBUG] [Thread-76179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:33:12.070 [DEBUG] [Thread-76179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:33:12.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:33:12.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:33:12.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:33:12.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:33:12.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:33:12.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:33:12.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:33:12.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.772671 -999.00  +11.50  34.50     68   +5.90 1 3 2 1 1     3    0 4.03 -84.28 Z.E.. 33.0 34.5 313.4 44.3 12.7 -10.1 12.6 -11.0 12.3 -7.3 12.7 -7.1
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.772671
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:33:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:33:02', tmtdew=6.6, humidity=63.96, cloud=0.0, wind=37.44, temperature=11.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:32:38.774', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:29:00')
2025-12-12T20:33:12.097 [DEBUG] [Thread-76179] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:33:12.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:33:12.182 [DEBUG] [Thread-76182] [transport.py] [_log()] starting thread (client mode): 0xf575d8d0
2025-12-12T20:33:12.182 [DEBUG] [Thread-76182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:33:12.196 [DEBUG] [Thread-76182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:33:12.196 [INFO] [Thread-76182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] client lang: <none>
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] server lang: <none>
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] kex follows: False
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] Compression: none
2025-12-12T20:33:12.204 [DEBUG] [Thread-76182] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:33:12.259 [DEBUG] [Thread-76182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:33:12.259 [DEBUG] [Thread-76182] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:33:12.259 [DEBUG] [Thread-76182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:33:12.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:33:12.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:33:12.316 [DEBUG] [Thread-76182] [transport.py] [_log()] userauth is OK
2025-12-12T20:33:12.316 [DEBUG] [Thread-76182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:33:12.316 [DEBUG] [Thread-76182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:33:12.316 [DEBUG] [Thread-76182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:33:12.316 [DEBUG] [Thread-76182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:33:12.331 [INFO] [Thread-76182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:33:12.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:33:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:33:13.155 [DEBUG] [Thread-76182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:33:13.155 [DEBUG] [Thread-76182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:33:13.203 [DEBUG] [Thread-76182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:33:13.203 [DEBUG] [Thread-76182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:33:13.211 [DEBUG] [Thread-76182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:33:13.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:33:13.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:33:13.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:33:13.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:33:13.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:33:13.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:33:13.243 [DEBUG] [Thread-76182] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:33:13.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:13.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:16.129 [DEBUG] [Thread-76184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:31.165 [DEBUG] [Thread-76185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:33:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:33:43.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:33:43.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:33:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 33, 34), 6.53, 64.05, 0.0, 33.05, 11.64, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:33:43.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:33:34
2025-12-12T20:33:44.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:33:44.236 [DEBUG] [Thread-76186] [transport.py] [_log()] starting thread (client mode): 0xf574dbd0
2025-12-12T20:33:44.236 [DEBUG] [Thread-76186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:33:44.256 [DEBUG] [Thread-76186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:33:44.257 [INFO] [Thread-76186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] client lang: <none>
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] server lang: <none>
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] kex follows: False
2025-12-12T20:33:44.260 [DEBUG] [Thread-76186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:33:44.261 [DEBUG] [Thread-76186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:33:44.261 [DEBUG] [Thread-76186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:33:44.261 [DEBUG] [Thread-76186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:33:44.261 [DEBUG] [Thread-76186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:33:44.261 [DEBUG] [Thread-76186] [transport.py] [_log()] Compression: none
2025-12-12T20:33:44.261 [DEBUG] [Thread-76186] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:33:44.278 [DEBUG] [Thread-76186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:33:44.278 [DEBUG] [Thread-76186] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:33:44.279 [DEBUG] [Thread-76186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:33:44.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:33:44.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:33:44.282 [DEBUG] [Thread-76186] [transport.py] [_log()] userauth is OK
2025-12-12T20:33:44.282 [DEBUG] [Thread-76186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:33:44.282 [DEBUG] [Thread-76186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:33:44.282 [DEBUG] [Thread-76186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:33:44.282 [DEBUG] [Thread-76186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:33:44.303 [INFO] [Thread-76186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:33:44.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:33:44.922 [DEBUG] [Thread-76186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:33:44.922 [DEBUG] [Thread-76186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:33:44.922 [DEBUG] [Thread-76186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:33:44.963 [DEBUG] [Thread-76186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:33:44.964 [DEBUG] [Thread-76186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:33:44.967 [DEBUG] [Thread-76186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:33:44.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:33:44.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:33:44.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:33:44.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:33:44.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:33:44.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:33:44.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:33:44.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:33:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:33:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.773018 -999.00  +11.70  29.08     67   +5.90 1 3 1 1 1     3    0 3.81 -85.67 ..ES. 31.3 29.1 318.4 36.2 12.7 -9.0 12.5 -9.4 12.3 -6.6 12.7 -6.1
2025-12-12T20:33:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:33:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:33:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.773018
2025-12-12T20:33:44.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:33:44.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:33:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:33:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:33:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:33:44.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:33:34', tmtdew=6.53, humidity=64.05, cloud=0.0, wind=33.05, temperature=11.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:33:08.755', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:29:00')
2025-12-12T20:33:44.992 [DEBUG] [Thread-76186] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:33:45.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:33:45.089 [DEBUG] [Thread-76189] [transport.py] [_log()] starting thread (client mode): 0xf574e5f0
2025-12-12T20:33:45.089 [DEBUG] [Thread-76189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:33:45.104 [DEBUG] [Thread-76189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:33:45.104 [INFO] [Thread-76189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:33:45.111 [DEBUG] [Thread-76189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:33:45.111 [DEBUG] [Thread-76189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] client lang: <none>
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] server lang: <none>
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] kex follows: False
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] Compression: none
2025-12-12T20:33:45.112 [DEBUG] [Thread-76189] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:33:45.168 [DEBUG] [Thread-76189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:33:45.169 [DEBUG] [Thread-76189] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:33:45.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:33:45.170 [DEBUG] [Thread-76189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:33:45.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:33:45.225 [DEBUG] [Thread-76189] [transport.py] [_log()] userauth is OK
2025-12-12T20:33:45.225 [DEBUG] [Thread-76189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:33:45.225 [DEBUG] [Thread-76189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:33:45.225 [DEBUG] [Thread-76189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:33:45.225 [DEBUG] [Thread-76189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:33:45.244 [INFO] [Thread-76189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:33:45.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:33:45.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:33:46.099 [DEBUG] [Thread-76189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:33:46.099 [DEBUG] [Thread-76189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:33:46.147 [DEBUG] [Thread-76189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:33:46.147 [DEBUG] [Thread-76189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:33:46.156 [DEBUG] [Thread-76189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:33:46.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:33:46.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:33:46.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:33:46.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:33:46.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:33:46.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:33:46.190 [DEBUG] [Thread-76189] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:33:46.194 [DEBUG] [Thread-76191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:01.237 [DEBUG] [Thread-76192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:07.534 [DEBUG] [Thread-76193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:14.101 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:14.102 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:16.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:34:16.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:34:16.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:34:16.269 [DEBUG] [Thread-76194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:16.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 34, 6), 6.52, 64.09, 0.0, 31.48, 11.61, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:34:16.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:34:06
2025-12-12T20:34:16.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:34:17.140 [DEBUG] [Thread-76195] [transport.py] [_log()] starting thread (client mode): 0xf57e0a00
2025-12-12T20:34:17.140 [DEBUG] [Thread-76195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:34:17.161 [DEBUG] [Thread-76195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:34:17.161 [INFO] [Thread-76195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:34:17.164 [DEBUG] [Thread-76195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:34:17.164 [DEBUG] [Thread-76195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:34:17.164 [DEBUG] [Thread-76195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:34:17.164 [DEBUG] [Thread-76195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] client lang: <none>
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] server lang: <none>
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] kex follows: False
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] Compression: none
2025-12-12T20:34:17.165 [DEBUG] [Thread-76195] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:34:17.182 [DEBUG] [Thread-76195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:34:17.183 [DEBUG] [Thread-76195] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:34:17.183 [DEBUG] [Thread-76195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:34:17.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:34:17.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:34:17.185 [DEBUG] [Thread-76195] [transport.py] [_log()] userauth is OK
2025-12-12T20:34:17.185 [DEBUG] [Thread-76195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:34:17.185 [DEBUG] [Thread-76195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:34:17.185 [DEBUG] [Thread-76195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:34:17.185 [DEBUG] [Thread-76195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:34:17.203 [INFO] [Thread-76195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:34:17.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:34:17.832 [DEBUG] [Thread-76195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:34:17.832 [DEBUG] [Thread-76195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:34:17.832 [DEBUG] [Thread-76195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:34:17.873 [DEBUG] [Thread-76195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:34:17.873 [DEBUG] [Thread-76195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:34:17.876 [DEBUG] [Thread-76195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:34:17.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:34:17.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:34:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:34:17.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:34:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:34:17.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:34:17.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:34:17.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:34:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:34:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.773365 -999.00  +11.80  27.04     67   +5.90 1 2 1 1 1     2    0 4.27 -75.64 ..E.. 30.8 27.0 317.0 34.2 12.7 -13.6 12.6 -12.5 12.3 -10.1 12.7 -9.4
2025-12-12T20:34:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:34:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:34:17.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.773365
2025-12-12T20:34:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:34:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:34:17.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:34:17.900 [DEBUG] [Thread-76195] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:34:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:34:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:34:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:34:06', tmtdew=6.52, humidity=64.09, cloud=0.0, wind=31.48, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:33:38.736', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:33:00')
2025-12-12T20:34:17.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:34:17.998 [DEBUG] [Thread-76198] [transport.py] [_log()] starting thread (client mode): 0xf5770100
2025-12-12T20:34:17.998 [DEBUG] [Thread-76198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:34:18.013 [DEBUG] [Thread-76198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:34:18.013 [INFO] [Thread-76198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:34:18.020 [DEBUG] [Thread-76198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:34:18.020 [DEBUG] [Thread-76198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:34:18.020 [DEBUG] [Thread-76198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] client lang: <none>
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] server lang: <none>
2025-12-12T20:34:18.021 [DEBUG] [Thread-76198] [transport.py] [_log()] kex follows: False
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] Compression: none
2025-12-12T20:34:18.022 [DEBUG] [Thread-76198] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:34:18.078 [DEBUG] [Thread-76198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:34:18.079 [DEBUG] [Thread-76198] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:34:18.079 [DEBUG] [Thread-76198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:34:18.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:34:18.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:34:18.137 [DEBUG] [Thread-76198] [transport.py] [_log()] userauth is OK
2025-12-12T20:34:18.137 [DEBUG] [Thread-76198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:34:18.137 [DEBUG] [Thread-76198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:34:18.137 [DEBUG] [Thread-76198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:34:18.137 [DEBUG] [Thread-76198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:34:18.155 [INFO] [Thread-76198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:34:18.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:34:18.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:34:19.046 [DEBUG] [Thread-76198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:34:19.047 [DEBUG] [Thread-76198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:34:19.095 [DEBUG] [Thread-76198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:34:19.095 [DEBUG] [Thread-76198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:34:19.104 [DEBUG] [Thread-76198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:34:19.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:34:19.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:34:19.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:34:19.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:34:19.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:34:19.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:34:19.139 [DEBUG] [Thread-76198] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:34:31.293 [DEBUG] [Thread-76200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:46.326 [DEBUG] [Thread-76201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:34:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:34:49.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:34:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:34:49.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 34, 38), 6.56, 64.15, 0.0, 31.19, 11.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:34:49.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:34:38
2025-12-12T20:34:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:34:50.106 [DEBUG] [Thread-76202] [transport.py] [_log()] starting thread (client mode): 0xf57e1c60
2025-12-12T20:34:50.106 [DEBUG] [Thread-76202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:34:50.126 [DEBUG] [Thread-76202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:34:50.126 [INFO] [Thread-76202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:34:50.129 [DEBUG] [Thread-76202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:34:50.129 [DEBUG] [Thread-76202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:34:50.129 [DEBUG] [Thread-76202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] client lang: <none>
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] server lang: <none>
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] kex follows: False
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] Compression: none
2025-12-12T20:34:50.130 [DEBUG] [Thread-76202] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:34:50.146 [DEBUG] [Thread-76202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:34:50.147 [DEBUG] [Thread-76202] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:34:50.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:34:50.148 [DEBUG] [Thread-76202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:34:50.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:34:50.150 [DEBUG] [Thread-76202] [transport.py] [_log()] userauth is OK
2025-12-12T20:34:50.150 [DEBUG] [Thread-76202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:34:50.150 [DEBUG] [Thread-76202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:34:50.150 [DEBUG] [Thread-76202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:34:50.150 [DEBUG] [Thread-76202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:34:50.174 [INFO] [Thread-76202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:34:50.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:34:50.762 [DEBUG] [Thread-76202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:34:50.762 [DEBUG] [Thread-76202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:34:50.763 [DEBUG] [Thread-76202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:34:50.803 [DEBUG] [Thread-76202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:34:50.803 [DEBUG] [Thread-76202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:34:50.806 [DEBUG] [Thread-76202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:34:50.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:34:50.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:34:50.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:34:50.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:34:50.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:34:50.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:34:50.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:34:50.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:34:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:34:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.773712 -999.00  +11.60  24.83     68   +5.90 1 2 1 1 1     2    0 3.92 -80.88 ..E.. 25.2 24.8 322.4 42.9 12.7 -16.8 12.5 -16.7 12.3 -12.9 12.7 -12.7
2025-12-12T20:34:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:34:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:34:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.773712
2025-12-12T20:34:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:34:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:34:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:34:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:34:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:34:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:34:38', tmtdew=6.56, humidity=64.15, cloud=0.0, wind=31.19, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:34:08.717', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:33:00')
2025-12-12T20:34:50.830 [DEBUG] [Thread-76202] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:34:50.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:34:50.930 [DEBUG] [Thread-76205] [transport.py] [_log()] starting thread (client mode): 0xf57e0fa0
2025-12-12T20:34:50.931 [DEBUG] [Thread-76205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:34:50.945 [DEBUG] [Thread-76205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:34:50.945 [INFO] [Thread-76205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:34:50.953 [DEBUG] [Thread-76205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:34:50.953 [DEBUG] [Thread-76205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:34:50.953 [DEBUG] [Thread-76205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:34:50.953 [DEBUG] [Thread-76205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:50.953 [DEBUG] [Thread-76205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:34:50.953 [DEBUG] [Thread-76205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] client lang: <none>
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] server lang: <none>
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] kex follows: False
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:34:50.954 [DEBUG] [Thread-76205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:34:50.955 [DEBUG] [Thread-76205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:34:50.955 [DEBUG] [Thread-76205] [transport.py] [_log()] Compression: none
2025-12-12T20:34:50.955 [DEBUG] [Thread-76205] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:34:51.012 [DEBUG] [Thread-76205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:34:51.013 [DEBUG] [Thread-76205] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:34:51.013 [DEBUG] [Thread-76205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:34:51.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:34:51.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:34:51.069 [DEBUG] [Thread-76205] [transport.py] [_log()] userauth is OK
2025-12-12T20:34:51.069 [DEBUG] [Thread-76205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:34:51.069 [DEBUG] [Thread-76205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:34:51.069 [DEBUG] [Thread-76205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:34:51.070 [DEBUG] [Thread-76205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:34:51.089 [INFO] [Thread-76205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:34:51.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:34:51.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:34:51.953 [DEBUG] [Thread-76205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:34:51.953 [DEBUG] [Thread-76205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:34:52.001 [DEBUG] [Thread-76205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:34:52.001 [DEBUG] [Thread-76205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:34:52.010 [DEBUG] [Thread-76205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:34:52.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:34:52.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:34:52.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:34:52.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:34:52.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:34:52.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:34:52.046 [DEBUG] [Thread-76205] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:35:01.355 [DEBUG] [Thread-76207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:07.606 [DEBUG] [Thread-76208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:14.304 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:14.305 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:16.398 [DEBUG] [Thread-76209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:22.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:35:22.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:35:22.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:35:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 35, 10), 6.55, 64.2, 0.0, 31.65, 11.71, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:35:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:35:10
2025-12-12T20:35:22.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:35:23.011 [DEBUG] [Thread-76210] [transport.py] [_log()] starting thread (client mode): 0xf575c850
2025-12-12T20:35:23.011 [DEBUG] [Thread-76210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:35:23.033 [DEBUG] [Thread-76210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:35:23.033 [INFO] [Thread-76210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] client lang: <none>
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] server lang: <none>
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] kex follows: False
2025-12-12T20:35:23.036 [DEBUG] [Thread-76210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:35:23.037 [DEBUG] [Thread-76210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:35:23.037 [DEBUG] [Thread-76210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:35:23.037 [DEBUG] [Thread-76210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:35:23.037 [DEBUG] [Thread-76210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:35:23.037 [DEBUG] [Thread-76210] [transport.py] [_log()] Compression: none
2025-12-12T20:35:23.037 [DEBUG] [Thread-76210] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:35:23.054 [DEBUG] [Thread-76210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:35:23.055 [DEBUG] [Thread-76210] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:35:23.055 [DEBUG] [Thread-76210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:35:23.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:35:23.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:35:23.057 [DEBUG] [Thread-76210] [transport.py] [_log()] userauth is OK
2025-12-12T20:35:23.057 [DEBUG] [Thread-76210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:35:23.058 [DEBUG] [Thread-76210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:35:23.058 [DEBUG] [Thread-76210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:35:23.058 [DEBUG] [Thread-76210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:35:23.081 [INFO] [Thread-76210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:35:23.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:35:23.689 [DEBUG] [Thread-76210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:35:23.689 [DEBUG] [Thread-76210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:35:23.689 [DEBUG] [Thread-76210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:35:23.730 [DEBUG] [Thread-76210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:35:23.730 [DEBUG] [Thread-76210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:35:23.734 [DEBUG] [Thread-76210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:35:23.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:35:23.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:35:23.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:35:23.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:35:23.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:35:23.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:35:23.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:35:23.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:35:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:35:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.774060 -999.00  +11.60  26.46     68   +6.00 1 2 1 1 1     2    0 4.06 -78.16 ..E.. 32.6 26.5 332.2 40.4 -999.0 -999.0 12.5 -16.7 12.3 -12.6 12.7 -12.4
2025-12-12T20:35:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:35:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:35:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.774060
2025-12-12T20:35:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:35:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:35:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:35:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:35:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:35:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:35:10', tmtdew=6.55, humidity=64.2, cloud=0.0, wind=31.65, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:34:38.784', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:33:00')
2025-12-12T20:35:23.759 [DEBUG] [Thread-76210] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:35:23.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:35:23.855 [DEBUG] [Thread-76213] [transport.py] [_log()] starting thread (client mode): 0xf574c3d0
2025-12-12T20:35:23.855 [DEBUG] [Thread-76213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:35:23.870 [DEBUG] [Thread-76213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:35:23.870 [INFO] [Thread-76213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:23.878 [DEBUG] [Thread-76213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] client lang: <none>
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] server lang: <none>
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] kex follows: False
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] Compression: none
2025-12-12T20:35:23.879 [DEBUG] [Thread-76213] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:35:23.936 [DEBUG] [Thread-76213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:35:23.937 [DEBUG] [Thread-76213] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:35:23.937 [DEBUG] [Thread-76213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:35:23.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:35:23.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:35:23.993 [DEBUG] [Thread-76213] [transport.py] [_log()] userauth is OK
2025-12-12T20:35:23.993 [DEBUG] [Thread-76213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:35:23.993 [DEBUG] [Thread-76213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:35:23.993 [DEBUG] [Thread-76213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:35:23.993 [DEBUG] [Thread-76213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:35:24.016 [INFO] [Thread-76213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:35:24.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:35:24.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:35:24.875 [DEBUG] [Thread-76213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:35:24.875 [DEBUG] [Thread-76213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:35:24.923 [DEBUG] [Thread-76213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:35:24.923 [DEBUG] [Thread-76213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:35:24.931 [DEBUG] [Thread-76213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:35:24.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:35:24.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:35:24.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:35:24.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:35:24.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:35:24.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:35:24.966 [DEBUG] [Thread-76213] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:35:31.427 [DEBUG] [Thread-76215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:46.478 [DEBUG] [Thread-76216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:35:54.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:35:54.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:35:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:35:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 35, 43), 6.43, 64.75, 0.0, 35.91, 11.61, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:35:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:35:43
2025-12-12T20:35:55.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:35:55.938 [DEBUG] [Thread-76217] [transport.py] [_log()] starting thread (client mode): 0xf574f9a0
2025-12-12T20:35:55.938 [DEBUG] [Thread-76217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:35:55.958 [DEBUG] [Thread-76217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:35:55.958 [INFO] [Thread-76217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] client lang: <none>
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] server lang: <none>
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] kex follows: False
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:35:55.961 [DEBUG] [Thread-76217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:35:55.962 [DEBUG] [Thread-76217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:35:55.962 [DEBUG] [Thread-76217] [transport.py] [_log()] Compression: none
2025-12-12T20:35:55.962 [DEBUG] [Thread-76217] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:35:55.978 [DEBUG] [Thread-76217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:35:55.978 [DEBUG] [Thread-76217] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:35:55.979 [DEBUG] [Thread-76217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:35:55.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:35:55.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:35:55.981 [DEBUG] [Thread-76217] [transport.py] [_log()] userauth is OK
2025-12-12T20:35:55.981 [DEBUG] [Thread-76217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:35:55.981 [DEBUG] [Thread-76217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:35:55.981 [DEBUG] [Thread-76217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:35:55.981 [DEBUG] [Thread-76217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:35:56.007 [INFO] [Thread-76217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:35:56.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:35:56.657 [DEBUG] [Thread-76217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:35:56.658 [DEBUG] [Thread-76217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:35:56.658 [DEBUG] [Thread-76217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:35:56.699 [DEBUG] [Thread-76217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:35:56.699 [DEBUG] [Thread-76217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:35:56.702 [DEBUG] [Thread-76217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:35:56.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:35:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:35:56.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:35:56.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:35:56.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:35:56.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:35:56.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.774754 -999.00  +11.60  32.59     68   +6.10 1 2 2 1 1     2    0 4.12 -71.27 ZNES. 35.8 32.6 331.2 35.3 12.6 -13.8 12.5 -14.6 12.3 -10.2 12.6 -10.2
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.774754
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:35:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:35:43', tmtdew=6.43, humidity=64.75, cloud=0.0, wind=35.91, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:35:38.746', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:33:00')
2025-12-12T20:35:56.725 [DEBUG] [Thread-76217] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:35:56.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:35:56.816 [DEBUG] [Thread-76220] [transport.py] [_log()] starting thread (client mode): 0xf5797a30
2025-12-12T20:35:56.816 [DEBUG] [Thread-76220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:35:56.832 [DEBUG] [Thread-76220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:35:56.832 [INFO] [Thread-76220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:56.839 [DEBUG] [Thread-76220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] client lang: <none>
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] server lang: <none>
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] kex follows: False
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] Compression: none
2025-12-12T20:35:56.840 [DEBUG] [Thread-76220] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:35:56.897 [DEBUG] [Thread-76220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:35:56.897 [DEBUG] [Thread-76220] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:35:56.898 [DEBUG] [Thread-76220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:35:56.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:35:56.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:35:56.955 [DEBUG] [Thread-76220] [transport.py] [_log()] userauth is OK
2025-12-12T20:35:56.955 [DEBUG] [Thread-76220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:35:56.956 [DEBUG] [Thread-76220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:35:56.956 [DEBUG] [Thread-76220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:35:56.956 [DEBUG] [Thread-76220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:35:56.975 [INFO] [Thread-76220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:35:56.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:35:56.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:35:57.818 [DEBUG] [Thread-76220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:35:57.818 [DEBUG] [Thread-76220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:35:57.866 [DEBUG] [Thread-76220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:35:57.866 [DEBUG] [Thread-76220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:35:57.875 [DEBUG] [Thread-76220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:35:57.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:35:57.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:35:57.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:35:57.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:35:57.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:35:57.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:35:57.910 [DEBUG] [Thread-76220] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:36:01.510 [DEBUG] [Thread-76222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:36:07.661 [DEBUG] [Thread-76223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:36:14.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:36:14.515 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:36:16.555 [DEBUG] [Thread-76224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:36:27.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:36:27.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:36:27.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:36:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 36, 15), 6.42, 64.8, 0.0, 34.16, 11.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:36:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:36:15
2025-12-12T20:36:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:36:28.930 [DEBUG] [Thread-76225] [transport.py] [_log()] starting thread (client mode): 0xf575d2a0
2025-12-12T20:36:28.931 [DEBUG] [Thread-76225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:36:28.950 [DEBUG] [Thread-76225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:36:28.950 [INFO] [Thread-76225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:36:28.953 [DEBUG] [Thread-76225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] client lang: <none>
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] server lang: <none>
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] kex follows: False
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] Compression: none
2025-12-12T20:36:28.954 [DEBUG] [Thread-76225] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:36:28.970 [DEBUG] [Thread-76225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:36:28.970 [DEBUG] [Thread-76225] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:36:28.970 [DEBUG] [Thread-76225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:36:28.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:36:28.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:36:28.971 [DEBUG] [Thread-76225] [transport.py] [_log()] userauth is OK
2025-12-12T20:36:28.971 [DEBUG] [Thread-76225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:36:28.971 [DEBUG] [Thread-76225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:36:28.971 [DEBUG] [Thread-76225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:36:28.971 [DEBUG] [Thread-76225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:36:28.981 [INFO] [Thread-76225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:36:28.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:36:29.610 [DEBUG] [Thread-76225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:36:29.610 [DEBUG] [Thread-76225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:36:29.610 [DEBUG] [Thread-76225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:36:29.652 [DEBUG] [Thread-76225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:36:29.652 [DEBUG] [Thread-76225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:36:29.654 [DEBUG] [Thread-76225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:36:29.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:36:29.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:36:29.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:36:29.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:36:29.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:36:29.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:36:29.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.775101 -999.00  +11.50  38.68     69   +6.10 1 2 2 1 1     1    0 4.22 -69.44 ZNES. 41.6 38.7 322.8 48.4 12.6 -11.6 12.5 -12.8 12.3 -9.0 12.6 -8.5
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.775101
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:36:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:36:15', tmtdew=6.42, humidity=64.8, cloud=0.0, wind=34.16, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:36:08.726', 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, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:33:00')
2025-12-12T20:36:29.674 [DEBUG] [Thread-76225] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:36:29.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:36:29.759 [DEBUG] [Thread-76228] [transport.py] [_log()] starting thread (client mode): 0xf574d9f0
2025-12-12T20:36:29.759 [DEBUG] [Thread-76228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:36:29.773 [DEBUG] [Thread-76228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:36:29.773 [INFO] [Thread-76228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] client lang: <none>
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] server lang: <none>
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] kex follows: False
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] Compression: none
2025-12-12T20:36:29.781 [DEBUG] [Thread-76228] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:36:29.840 [DEBUG] [Thread-76228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:36:29.840 [DEBUG] [Thread-76228] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:36:29.840 [DEBUG] [Thread-76228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:36:29.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:36:29.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:36:29.897 [DEBUG] [Thread-76228] [transport.py] [_log()] userauth is OK
2025-12-12T20:36:29.897 [DEBUG] [Thread-76228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:36:29.897 [DEBUG] [Thread-76228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:36:29.897 [DEBUG] [Thread-76228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:36:29.897 [DEBUG] [Thread-76228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:36:29.914 [INFO] [Thread-76228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:36:29.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:36:29.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:36:30.718 [DEBUG] [Thread-76228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:36:30.718 [DEBUG] [Thread-76228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:36:30.767 [DEBUG] [Thread-76228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:36:30.767 [DEBUG] [Thread-76228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:36:30.775 [DEBUG] [Thread-76228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:36:30.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:36:30.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:36:30.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
2025-12-12T20:36:30.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:36:30.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:36:30.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:36:30.807 [DEBUG] [Thread-76228] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:36:31.583 [DEBUG] [Thread-76230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:36:46.627 [DEBUG] [Thread-76231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:00.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:37:00.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:37:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:37:01.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 36, 47), 6.3, 64.92, 0.0, 37.79, 11.64, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:37:01.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:36:47
2025-12-12T20:37:01.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:37:01.657 [DEBUG] [Thread-76232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:01.766 [DEBUG] [Thread-76233] [transport.py] [_log()] starting thread (client mode): 0xf57a7970
2025-12-12T20:37:01.766 [DEBUG] [Thread-76233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:37:01.786 [DEBUG] [Thread-76233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:37:01.786 [INFO] [Thread-76233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] client lang: <none>
2025-12-12T20:37:01.790 [DEBUG] [Thread-76233] [transport.py] [_log()] server lang: <none>
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] kex follows: False
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] Compression: none
2025-12-12T20:37:01.791 [DEBUG] [Thread-76233] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:37:01.809 [DEBUG] [Thread-76233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:37:01.810 [DEBUG] [Thread-76233] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:37:01.810 [DEBUG] [Thread-76233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:37:01.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:37:01.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:37:01.812 [DEBUG] [Thread-76233] [transport.py] [_log()] userauth is OK
2025-12-12T20:37:01.813 [DEBUG] [Thread-76233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:37:01.813 [DEBUG] [Thread-76233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:37:01.813 [DEBUG] [Thread-76233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:37:01.813 [DEBUG] [Thread-76233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:37:01.836 [INFO] [Thread-76233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:37:01.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:37:02.494 [DEBUG] [Thread-76233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:37:02.494 [DEBUG] [Thread-76233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:37:02.495 [DEBUG] [Thread-76233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:37:02.535 [DEBUG] [Thread-76233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:37:02.535 [DEBUG] [Thread-76233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:37:02.538 [DEBUG] [Thread-76233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:37:02.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:37:02.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:37:02.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:37:02.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:37:02.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:37:02.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:37:02.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:37:02.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:37:02.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:37:02.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.775449 -999.00  +11.50  35.50     69   +6.10 1 3 2 1 1     1    0 4.13 -71.66 ZNES. 44.0 35.5 317.4 42.6 12.7 -10.8 12.5 -11.3 12.3 -8.3 12.7 -7.2
2025-12-12T20:37:02.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:37:02.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:37:02.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.775449
2025-12-12T20:37:02.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:37:02.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:37:02.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:37:02.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:37:02.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:37:02.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:36:47', tmtdew=6.3, humidity=64.92, cloud=0.0, wind=37.79, temperature=11.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:36:38.794', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, -0.18849999999999945, nan, nan, nan, nan, nan, -0.023249999999999105, -0.030000000000001137, 0.0035000000000007248, 0.38674999999999926, nan, nan, nan, nan, -0.022999999999999687, 0.06474999999999831], zp_timestamp='2025-12-12T18:33:00')
2025-12-12T20:37:02.562 [DEBUG] [Thread-76233] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:37:02.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:37:02.659 [DEBUG] [Thread-76236] [transport.py] [_log()] starting thread (client mode): 0xf57a6ad0
2025-12-12T20:37:02.660 [DEBUG] [Thread-76236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:37:02.676 [DEBUG] [Thread-76236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:37:02.676 [INFO] [Thread-76236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:37:02.683 [DEBUG] [Thread-76236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:37:02.683 [DEBUG] [Thread-76236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:37:02.683 [DEBUG] [Thread-76236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:37:02.683 [DEBUG] [Thread-76236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] client lang: <none>
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] server lang: <none>
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] kex follows: False
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:37:02.684 [DEBUG] [Thread-76236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:37:02.685 [DEBUG] [Thread-76236] [transport.py] [_log()] Compression: none
2025-12-12T20:37:02.685 [DEBUG] [Thread-76236] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:37:02.741 [DEBUG] [Thread-76236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:37:02.741 [DEBUG] [Thread-76236] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:37:02.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:37:02.742 [DEBUG] [Thread-76236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:37:02.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:37:02.801 [DEBUG] [Thread-76236] [transport.py] [_log()] userauth is OK
2025-12-12T20:37:02.801 [DEBUG] [Thread-76236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:37:02.801 [DEBUG] [Thread-76236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:37:02.802 [DEBUG] [Thread-76236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:37:02.802 [DEBUG] [Thread-76236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:37:02.824 [INFO] [Thread-76236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:37:02.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:37:02.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:37:03.673 [DEBUG] [Thread-76236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:37:03.673 [DEBUG] [Thread-76236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:37:03.721 [DEBUG] [Thread-76236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:37:03.721 [DEBUG] [Thread-76236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:37:03.730 [DEBUG] [Thread-76236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:37:03.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:37: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')
2025-12-12T20:37:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:37:03.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:37:03.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:37:03.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:37:03.764 [DEBUG] [Thread-76236] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:37:07.714 [DEBUG] [Thread-76238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:14.721 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:14.722 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:16.685 [DEBUG] [Thread-76239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:31.729 [DEBUG] [Thread-76240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:37:33.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:37:33.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:37:33.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:37:34.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 37, 19), 6.29, 64.95, 0.0, 37.71, 11.61, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:37:34.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:37:19
2025-12-12T20:37:34.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:37:34.745 [DEBUG] [Thread-76241] [transport.py] [_log()] starting thread (client mode): 0xf57a7550
2025-12-12T20:37:34.745 [DEBUG] [Thread-76241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:37:34.766 [DEBUG] [Thread-76241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:37:34.766 [INFO] [Thread-76241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:37:34.769 [DEBUG] [Thread-76241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] client lang: <none>
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] server lang: <none>
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] kex follows: False
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] Compression: none
2025-12-12T20:37:34.770 [DEBUG] [Thread-76241] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:37:34.788 [DEBUG] [Thread-76241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:37:34.788 [DEBUG] [Thread-76241] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:37:34.789 [DEBUG] [Thread-76241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:37:34.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:37:34.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:37:34.791 [DEBUG] [Thread-76241] [transport.py] [_log()] userauth is OK
2025-12-12T20:37:34.791 [DEBUG] [Thread-76241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:37:34.791 [DEBUG] [Thread-76241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:37:34.791 [DEBUG] [Thread-76241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:37:34.791 [DEBUG] [Thread-76241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:37:34.814 [INFO] [Thread-76241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:37:34.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:37:35.461 [DEBUG] [Thread-76241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:37:35.461 [DEBUG] [Thread-76241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:37:35.461 [DEBUG] [Thread-76241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:37:35.502 [DEBUG] [Thread-76241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:37:35.502 [DEBUG] [Thread-76241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:37:35.505 [DEBUG] [Thread-76241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:37:35.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:37:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:37:35.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:37:35.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:37:35.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:37:35.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:37:35.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:37:35.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:37:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:37:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.775796 -999.00  +11.50  34.14     69   +6.20 1 2 2 1 1     1    0 4.00 -73.08 Z.ES. 34.8 34.1 319.8 49.6 12.6 -12.4 12.4 -12.5 12.3 -9.7 12.7 -9.0
2025-12-12T20:37:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:37:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:37:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.775796
2025-12-12T20:37:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:37:35.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:37:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:37:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:37:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:37:35.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:37:19', tmtdew=6.29, humidity=64.95, cloud=0.0, wind=37.71, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:37:08.774', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:36:00')
2025-12-12T20:37:35.528 [DEBUG] [Thread-76241] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:37:35.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:37:35.628 [DEBUG] [Thread-76244] [transport.py] [_log()] starting thread (client mode): 0xf57e3550
2025-12-12T20:37:35.628 [DEBUG] [Thread-76244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:37:35.643 [DEBUG] [Thread-76244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:37:35.643 [INFO] [Thread-76244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:37:35.650 [DEBUG] [Thread-76244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] client lang: <none>
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] server lang: <none>
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] kex follows: False
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:37:35.651 [DEBUG] [Thread-76244] [transport.py] [_log()] Compression: none
2025-12-12T20:37:35.652 [DEBUG] [Thread-76244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:37:35.709 [DEBUG] [Thread-76244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:37:35.710 [DEBUG] [Thread-76244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:37:35.710 [DEBUG] [Thread-76244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:37:35.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:37:35.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:37:35.765 [DEBUG] [Thread-76244] [transport.py] [_log()] userauth is OK
2025-12-12T20:37:35.765 [DEBUG] [Thread-76244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:37:35.766 [DEBUG] [Thread-76244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:37:35.766 [DEBUG] [Thread-76244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:37:35.766 [DEBUG] [Thread-76244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:37:35.785 [INFO] [Thread-76244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:37:35.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:37:35.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:37:36.631 [DEBUG] [Thread-76244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:37:36.631 [DEBUG] [Thread-76244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:37:36.679 [DEBUG] [Thread-76244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:37:36.679 [DEBUG] [Thread-76244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:37:36.688 [DEBUG] [Thread-76244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:37:36.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:37:36.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:37:36.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:37:36.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:37:36.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:37:36.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:37:36.723 [DEBUG] [Thread-76244] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:37:46.762 [DEBUG] [Thread-76246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:01.797 [DEBUG] [Thread-76247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:38:06.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:38:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:38:07.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 37, 51), 6.25, 65.4, 0.0, 41.27, 11.66, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:38:07.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:37:51
2025-12-12T20:38:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:38:07.672 [DEBUG] [Thread-76248] [transport.py] [_log()] starting thread (client mode): 0xf81e64d0
2025-12-12T20:38:07.672 [DEBUG] [Thread-76248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:38:07.692 [DEBUG] [Thread-76248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:38:07.692 [INFO] [Thread-76248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] client lang: <none>
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] server lang: <none>
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] kex follows: False
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:38:07.696 [DEBUG] [Thread-76248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:38:07.697 [DEBUG] [Thread-76248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:38:07.697 [DEBUG] [Thread-76248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:38:07.697 [DEBUG] [Thread-76248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:38:07.697 [DEBUG] [Thread-76248] [transport.py] [_log()] Compression: none
2025-12-12T20:38:07.697 [DEBUG] [Thread-76248] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:38:07.714 [DEBUG] [Thread-76248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:38:07.714 [DEBUG] [Thread-76248] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:38:07.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:38:07.715 [DEBUG] [Thread-76248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:38:07.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:38:07.717 [DEBUG] [Thread-76248] [transport.py] [_log()] userauth is OK
2025-12-12T20:38:07.718 [DEBUG] [Thread-76248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:38:07.718 [DEBUG] [Thread-76248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:38:07.718 [DEBUG] [Thread-76248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:38:07.718 [DEBUG] [Thread-76248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:38:07.738 [INFO] [Thread-76248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:38:07.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:38:07.771 [DEBUG] [Thread-76250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:08.370 [DEBUG] [Thread-76248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:38:08.370 [DEBUG] [Thread-76248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:38:08.371 [DEBUG] [Thread-76248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:38:08.411 [DEBUG] [Thread-76248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:38:08.411 [DEBUG] [Thread-76248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:38:08.414 [DEBUG] [Thread-76248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:38:08.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:38:08.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:38:08.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:38:08.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:38:08.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:38:08.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:38:08.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:38:08.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:38:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:38:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.776143 -999.00  +11.50  34.46     70   +6.30 1 2 2 1 1     1    0 3.83 -78.83 Z.ES. 41.4 34.5 316.2 40.6 12.6 -13.3 12.4 -13.0 12.3 -9.7 12.6 -9.9
2025-12-12T20:38:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:38:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:38:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.776143
2025-12-12T20:38:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:38:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:38:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:38:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:38:08.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:38:08.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:37:51', tmtdew=6.25, humidity=65.4, cloud=0.0, wind=41.27, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:37:38.755', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:36:00')
2025-12-12T20:38:08.439 [DEBUG] [Thread-76248] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:38:08.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:38:08.536 [DEBUG] [Thread-76252] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T20:38:08.536 [DEBUG] [Thread-76252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:38:08.550 [DEBUG] [Thread-76252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:38:08.550 [INFO] [Thread-76252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:38:08.558 [DEBUG] [Thread-76252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:38:08.558 [DEBUG] [Thread-76252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:38:08.558 [DEBUG] [Thread-76252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:38:08.558 [DEBUG] [Thread-76252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] client lang: <none>
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] server lang: <none>
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] kex follows: False
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:38:08.559 [DEBUG] [Thread-76252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:38:08.560 [DEBUG] [Thread-76252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:38:08.560 [DEBUG] [Thread-76252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:38:08.560 [DEBUG] [Thread-76252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:38:08.560 [DEBUG] [Thread-76252] [transport.py] [_log()] Compression: none
2025-12-12T20:38:08.560 [DEBUG] [Thread-76252] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:38:08.617 [DEBUG] [Thread-76252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:38:08.618 [DEBUG] [Thread-76252] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:38:08.619 [DEBUG] [Thread-76252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:38:08.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:38:08.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:38:08.673 [DEBUG] [Thread-76252] [transport.py] [_log()] userauth is OK
2025-12-12T20:38:08.674 [DEBUG] [Thread-76252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:38:08.674 [DEBUG] [Thread-76252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:38:08.674 [DEBUG] [Thread-76252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:38:08.674 [DEBUG] [Thread-76252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:38:08.696 [INFO] [Thread-76252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:38:08.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:38:08.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:38:09.524 [DEBUG] [Thread-76252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:38:09.524 [DEBUG] [Thread-76252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:38:09.572 [DEBUG] [Thread-76252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:38:09.572 [DEBUG] [Thread-76252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:38:09.581 [DEBUG] [Thread-76252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:38:09.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:38: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')
2025-12-12T20:38:09.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
2025-12-12T20:38:09.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:38:09.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:38:09.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:38:09.615 [DEBUG] [Thread-76252] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:38:14.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:14.926 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:16.827 [DEBUG] [Thread-76254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:31.881 [DEBUG] [Thread-76255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:38:39.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:38:39.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:38:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:38:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 38, 23), 6.26, 65.39, 0.0, 38.08, 11.69, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:38:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:38:23
2025-12-12T20:38:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:38:40.591 [DEBUG] [Thread-76256] [transport.py] [_log()] starting thread (client mode): 0xf574c910
2025-12-12T20:38:40.591 [DEBUG] [Thread-76256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:38:40.611 [DEBUG] [Thread-76256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:38:40.611 [INFO] [Thread-76256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:38:40.614 [DEBUG] [Thread-76256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] client lang: <none>
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] server lang: <none>
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] kex follows: False
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] Compression: none
2025-12-12T20:38:40.615 [DEBUG] [Thread-76256] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:38:40.633 [DEBUG] [Thread-76256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:38:40.633 [DEBUG] [Thread-76256] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:38:40.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:38:40.634 [DEBUG] [Thread-76256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:38:40.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:38:40.677 [DEBUG] [Thread-76256] [transport.py] [_log()] userauth is OK
2025-12-12T20:38:40.677 [DEBUG] [Thread-76256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:38:40.677 [DEBUG] [Thread-76256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:38:40.677 [DEBUG] [Thread-76256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:38:40.677 [DEBUG] [Thread-76256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:38:40.700 [INFO] [Thread-76256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:38:40.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:38:41.281 [DEBUG] [Thread-76256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:38:41.281 [DEBUG] [Thread-76256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:38:41.281 [DEBUG] [Thread-76256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:38:41.322 [DEBUG] [Thread-76256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:38:41.322 [DEBUG] [Thread-76256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:38:41.325 [DEBUG] [Thread-76256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:38:41.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:38:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:38:41.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:38:41.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:38:41.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:38:41.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:38:41.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:38:41.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:38:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:38:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.776490 -999.00  +11.40  35.18     71   +6.30 1 2 2 1 1     1    0 3.54 -86.73 Z.ES. 36.3 35.2 310.8 50.8 12.6 -15.9 12.4 -14.3 12.2 -11.2 12.6 -11.7
2025-12-12T20:38:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:38:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:38:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.776490
2025-12-12T20:38:41.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:38:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:38:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:38:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:38:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:38:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:38:23', tmtdew=6.26, humidity=65.39, cloud=0.0, wind=38.08, temperature=11.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:38:08.736', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:36:00')
2025-12-12T20:38:41.350 [DEBUG] [Thread-76256] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:38:41.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:38:41.447 [DEBUG] [Thread-76259] [transport.py] [_log()] starting thread (client mode): 0xf5789360
2025-12-12T20:38:41.447 [DEBUG] [Thread-76259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:38:41.462 [DEBUG] [Thread-76259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:38:41.462 [INFO] [Thread-76259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] client lang: <none>
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] server lang: <none>
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] kex follows: False
2025-12-12T20:38:41.469 [DEBUG] [Thread-76259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:38:41.470 [DEBUG] [Thread-76259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:38:41.470 [DEBUG] [Thread-76259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:38:41.470 [DEBUG] [Thread-76259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:38:41.470 [DEBUG] [Thread-76259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:38:41.470 [DEBUG] [Thread-76259] [transport.py] [_log()] Compression: none
2025-12-12T20:38:41.470 [DEBUG] [Thread-76259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:38:41.525 [DEBUG] [Thread-76259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:38:41.525 [DEBUG] [Thread-76259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:38:41.526 [DEBUG] [Thread-76259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:38:41.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:38:41.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:38:41.581 [DEBUG] [Thread-76259] [transport.py] [_log()] userauth is OK
2025-12-12T20:38:41.582 [DEBUG] [Thread-76259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:38:41.582 [DEBUG] [Thread-76259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:38:41.582 [DEBUG] [Thread-76259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:38:41.582 [DEBUG] [Thread-76259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:38:41.603 [INFO] [Thread-76259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:38:41.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:38:41.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:38:42.448 [DEBUG] [Thread-76259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:38:42.449 [DEBUG] [Thread-76259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:38:42.497 [DEBUG] [Thread-76259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:38:42.497 [DEBUG] [Thread-76259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:38:42.506 [DEBUG] [Thread-76259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:38:42.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:38:42.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:38:42.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:38:42.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:38:42.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:38:42.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:38:42.539 [DEBUG] [Thread-76259] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:38:46.914 [DEBUG] [Thread-76261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:01.957 [DEBUG] [Thread-76262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:07.844 [DEBUG] [Thread-76263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:39:12.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:39:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:39:13.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 38, 55), 6.15, 65.9, 0.0, 31.65, 11.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:39:13.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:38:55
2025-12-12T20:39:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:39:13.518 [DEBUG] [Thread-76264] [transport.py] [_log()] starting thread (client mode): 0xf5771510
2025-12-12T20:39:13.518 [DEBUG] [Thread-76264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:39:13.538 [DEBUG] [Thread-76264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:39:13.539 [INFO] [Thread-76264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:39:13.541 [DEBUG] [Thread-76264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] client lang: <none>
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] server lang: <none>
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] kex follows: False
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] Compression: none
2025-12-12T20:39:13.542 [DEBUG] [Thread-76264] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:39:13.559 [DEBUG] [Thread-76264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:39:13.559 [DEBUG] [Thread-76264] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:39:13.560 [DEBUG] [Thread-76264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:39:13.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:39:13.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:39:13.562 [DEBUG] [Thread-76264] [transport.py] [_log()] userauth is OK
2025-12-12T20:39:13.562 [DEBUG] [Thread-76264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:39:13.562 [DEBUG] [Thread-76264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:39:13.562 [DEBUG] [Thread-76264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:39:13.562 [DEBUG] [Thread-76264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:39:13.578 [INFO] [Thread-76264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:39:13.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:39:14.209 [DEBUG] [Thread-76264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:39:14.209 [DEBUG] [Thread-76264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:39:14.209 [DEBUG] [Thread-76264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:39:14.250 [DEBUG] [Thread-76264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:39:14.250 [DEBUG] [Thread-76264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:39:14.253 [DEBUG] [Thread-76264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:39:14.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:39:14.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:39:14.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:39:14.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:39:14.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:39:14.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:39:14.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:39:14.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:39:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:39:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.776837 -999.00  +11.30  39.71     72   +6.40 1 2 2 1 1     1    0 3.67 -84.38 Z.ES. 43.7 39.7 313.0 46.7 12.5 -16.7 12.3 -15.1 12.2 -11.8 12.5 -13.0
2025-12-12T20:39:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:39:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:39:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.776837
2025-12-12T20:39:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:39:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:39:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:39:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:39:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:39:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:38:55', tmtdew=6.15, humidity=65.9, cloud=0.0, wind=31.65, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:38:38.717', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:36:00')
2025-12-12T20:39:14.279 [DEBUG] [Thread-76264] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:39:14.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:39:14.375 [DEBUG] [Thread-76267] [transport.py] [_log()] starting thread (client mode): 0xf81e4670
2025-12-12T20:39:14.375 [DEBUG] [Thread-76267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:39:14.390 [DEBUG] [Thread-76267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:39:14.390 [INFO] [Thread-76267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:39:14.397 [DEBUG] [Thread-76267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] client lang: <none>
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] server lang: <none>
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] kex follows: False
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] Compression: none
2025-12-12T20:39:14.398 [DEBUG] [Thread-76267] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:39:14.453 [DEBUG] [Thread-76267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:39:14.454 [DEBUG] [Thread-76267] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:39:14.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:39:14.454 [DEBUG] [Thread-76267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:39:14.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:39:14.510 [DEBUG] [Thread-76267] [transport.py] [_log()] userauth is OK
2025-12-12T20:39:14.510 [DEBUG] [Thread-76267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:39:14.510 [DEBUG] [Thread-76267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:39:14.510 [DEBUG] [Thread-76267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:39:14.510 [DEBUG] [Thread-76267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:39:14.528 [INFO] [Thread-76267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:39:14.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:39:14.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:39:15.127 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:15.128 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:15.405 [DEBUG] [Thread-76267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:39:15.406 [DEBUG] [Thread-76267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:39:15.454 [DEBUG] [Thread-76267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:39:15.454 [DEBUG] [Thread-76267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:39:15.463 [DEBUG] [Thread-76267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:39:15.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:39:15.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:39:15.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:39:15.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:39:15.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:39:15.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:39:15.498 [DEBUG] [Thread-76267] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:39:16.988 [DEBUG] [Thread-76269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:32.046 [DEBUG] [Thread-76270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:45.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:39:45.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:39:45.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:39:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 39, 27), 6.09, 66.17, 0.0, 30.52, 11.58, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:39:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:39:27
2025-12-12T20:39:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:39:46.498 [DEBUG] [Thread-76271] [transport.py] [_log()] starting thread (client mode): 0xf81e5f60
2025-12-12T20:39:46.498 [DEBUG] [Thread-76271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:39:46.516 [DEBUG] [Thread-76271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:39:46.516 [INFO] [Thread-76271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:39:46.518 [DEBUG] [Thread-76271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:39:46.518 [DEBUG] [Thread-76271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:39:46.518 [DEBUG] [Thread-76271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:39:46.518 [DEBUG] [Thread-76271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] client lang: <none>
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] server lang: <none>
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] kex follows: False
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] Compression: none
2025-12-12T20:39:46.519 [DEBUG] [Thread-76271] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:39:46.530 [DEBUG] [Thread-76271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:39:46.530 [DEBUG] [Thread-76271] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:39:46.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:39:46.530 [DEBUG] [Thread-76271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:39:46.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:39:46.531 [DEBUG] [Thread-76271] [transport.py] [_log()] userauth is OK
2025-12-12T20:39:46.531 [DEBUG] [Thread-76271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:39:46.531 [DEBUG] [Thread-76271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:39:46.531 [DEBUG] [Thread-76271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:39:46.531 [DEBUG] [Thread-76271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:39:46.543 [INFO] [Thread-76271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:39:46.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:39:47.076 [DEBUG] [Thread-76273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:39:47.186 [DEBUG] [Thread-76271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:39:47.186 [DEBUG] [Thread-76271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:39:47.186 [DEBUG] [Thread-76271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:39:47.226 [DEBUG] [Thread-76271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:39:47.226 [DEBUG] [Thread-76271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:39:47.228 [DEBUG] [Thread-76271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:39:47.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:39:47.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:39:47.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:39:47.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:39:47.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:39:47.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:39:47.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:39:47.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.777532 -999.00  +11.20  37.31     73   +6.60 1 2 2 1 1     1    0 3.37 -87.79 ZNES. 41.7 37.3 318.2 44.2 12.5 -13.6 12.3 -12.5 12.2 -9.6 12.4 -9.8
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.777532
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:39:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:39:27', tmtdew=6.09, humidity=66.17, cloud=0.0, wind=30.52, temperature=11.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:39:38.765', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:36:00')
2025-12-12T20:39:47.246 [DEBUG] [Thread-76271] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:39:47.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:39:47.332 [DEBUG] [Thread-76275] [transport.py] [_log()] starting thread (client mode): 0xf81c01c0
2025-12-12T20:39:47.332 [DEBUG] [Thread-76275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:39:47.347 [DEBUG] [Thread-76275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:39:47.347 [INFO] [Thread-76275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] client lang: <none>
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] server lang: <none>
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] kex follows: False
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] Compression: none
2025-12-12T20:39:47.355 [DEBUG] [Thread-76275] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:39:47.416 [DEBUG] [Thread-76275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:39:47.417 [DEBUG] [Thread-76275] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:39:47.417 [DEBUG] [Thread-76275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:39:47.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:39:47.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:39:47.473 [DEBUG] [Thread-76275] [transport.py] [_log()] userauth is OK
2025-12-12T20:39:47.473 [DEBUG] [Thread-76275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:39:47.473 [DEBUG] [Thread-76275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:39:47.473 [DEBUG] [Thread-76275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:39:47.473 [DEBUG] [Thread-76275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:39:47.491 [INFO] [Thread-76275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:39:47.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:39:47.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:39:48.390 [DEBUG] [Thread-76275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:39:48.390 [DEBUG] [Thread-76275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:39:48.439 [DEBUG] [Thread-76275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:39:48.439 [DEBUG] [Thread-76275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:39:48.447 [DEBUG] [Thread-76275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:39:48.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:39: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')
2025-12-12T20:39:48.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:39:48.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:39:48.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:39:48.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:39:48.479 [DEBUG] [Thread-76275] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:40:02.106 [DEBUG] [Thread-76277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:07.899 [DEBUG] [Thread-76278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:15.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:15.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:17.151 [DEBUG] [Thread-76279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:18.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:40:18.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:40:18.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:40:19.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 39, 59), 5.97, 66.8, 0.0, 36.08, 11.61, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:40:19.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:39:59
2025-12-12T20:40:19.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:40:19.463 [DEBUG] [Thread-76280] [transport.py] [_log()] starting thread (client mode): 0xf57a7400
2025-12-12T20:40:19.463 [DEBUG] [Thread-76280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:40:19.476 [DEBUG] [Thread-76280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:40:19.476 [INFO] [Thread-76280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:40:19.477 [DEBUG] [Thread-76280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] client lang: <none>
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] server lang: <none>
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] kex follows: False
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] Compression: none
2025-12-12T20:40:19.478 [DEBUG] [Thread-76280] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:40:19.485 [DEBUG] [Thread-76280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:40:19.485 [DEBUG] [Thread-76280] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:40:19.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:40:19.486 [DEBUG] [Thread-76280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:40:19.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:40:19.486 [DEBUG] [Thread-76280] [transport.py] [_log()] userauth is OK
2025-12-12T20:40:19.486 [DEBUG] [Thread-76280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:40:19.486 [DEBUG] [Thread-76280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:40:19.486 [DEBUG] [Thread-76280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:40:19.486 [DEBUG] [Thread-76280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:40:19.496 [INFO] [Thread-76280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:40:19.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:40:20.121 [DEBUG] [Thread-76280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:40:20.121 [DEBUG] [Thread-76280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:40:20.121 [DEBUG] [Thread-76280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:40:20.162 [DEBUG] [Thread-76280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:40:20.162 [DEBUG] [Thread-76280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:40:20.164 [DEBUG] [Thread-76280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:40:20.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:40:20.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:40:20.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:40:20.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:40:20.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:40:20.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:40:20.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:40:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:40:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:40:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.777879 -999.00  +11.20  37.30     73   +6.60 1 2 2 1 1     0    0 3.41 -87.36 ZNE.. 34.4 37.3 316.0 45.1 12.4 -13.2 12.3 -13.0 12.1 -9.6 12.4 -9.8
2025-12-12T20:40:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:40:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:40:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.777879
2025-12-12T20:40:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:40:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:40:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:40:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:40:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:40:20.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:39:59', tmtdew=5.97, humidity=66.8, cloud=0.0, wind=36.08, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:40:08.746', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:38:00')
2025-12-12T20:40:20.187 [DEBUG] [Thread-76280] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:40:20.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:40:20.286 [DEBUG] [Thread-76283] [transport.py] [_log()] starting thread (client mode): 0xf575e410
2025-12-12T20:40:20.286 [DEBUG] [Thread-76283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:40:20.304 [DEBUG] [Thread-76283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:40:20.305 [INFO] [Thread-76283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:40:20.312 [DEBUG] [Thread-76283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:40:20.312 [DEBUG] [Thread-76283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:40:20.312 [DEBUG] [Thread-76283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:40:20.312 [DEBUG] [Thread-76283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:20.312 [DEBUG] [Thread-76283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:20.312 [DEBUG] [Thread-76283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] client lang: <none>
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] server lang: <none>
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] kex follows: False
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] Compression: none
2025-12-12T20:40:20.313 [DEBUG] [Thread-76283] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:40:20.370 [DEBUG] [Thread-76283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:40:20.370 [DEBUG] [Thread-76283] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:40:20.371 [DEBUG] [Thread-76283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:40:20.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:40:20.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:40:20.425 [DEBUG] [Thread-76283] [transport.py] [_log()] userauth is OK
2025-12-12T20:40:20.425 [DEBUG] [Thread-76283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:40:20.425 [DEBUG] [Thread-76283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:40:20.425 [DEBUG] [Thread-76283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:40:20.425 [DEBUG] [Thread-76283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:40:20.440 [INFO] [Thread-76283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:40:20.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:40:20.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:40:21.344 [DEBUG] [Thread-76283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:40:21.345 [DEBUG] [Thread-76283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:40:21.393 [DEBUG] [Thread-76283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:40:21.393 [DEBUG] [Thread-76283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:40:21.402 [DEBUG] [Thread-76283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:40:21.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:40: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')
2025-12-12T20:40:21.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:40:21.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:40:21.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:40:21.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:40:21.436 [DEBUG] [Thread-76283] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:40:32.177 [DEBUG] [Thread-76285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:47.215 [DEBUG] [Thread-76286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:40:51.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:40:51.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:40:51.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:40:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 40, 31), 5.87, 67.25, 0.0, 36.63, 11.56, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:40:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:40:31
2025-12-12T20:40:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:40:52.398 [DEBUG] [Thread-76287] [transport.py] [_log()] starting thread (client mode): 0xf5773040
2025-12-12T20:40:52.398 [DEBUG] [Thread-76287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:40:52.418 [DEBUG] [Thread-76287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:40:52.419 [INFO] [Thread-76287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:40:52.421 [DEBUG] [Thread-76287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] client lang: <none>
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] server lang: <none>
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] kex follows: False
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] Compression: none
2025-12-12T20:40:52.422 [DEBUG] [Thread-76287] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:40:52.438 [DEBUG] [Thread-76287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:40:52.439 [DEBUG] [Thread-76287] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:40:52.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:40:52.439 [DEBUG] [Thread-76287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:40:52.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:40:52.441 [DEBUG] [Thread-76287] [transport.py] [_log()] userauth is OK
2025-12-12T20:40:52.441 [DEBUG] [Thread-76287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:40:52.441 [DEBUG] [Thread-76287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:40:52.441 [DEBUG] [Thread-76287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:40:52.441 [DEBUG] [Thread-76287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:40:52.455 [INFO] [Thread-76287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:40:52.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:40:53.042 [DEBUG] [Thread-76287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:40:53.042 [DEBUG] [Thread-76287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:40:53.043 [DEBUG] [Thread-76287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:40:53.084 [DEBUG] [Thread-76287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:40:53.084 [DEBUG] [Thread-76287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:40:53.087 [DEBUG] [Thread-76287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:40:53.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:40:53.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:40:53.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:40:53.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:40:53.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:40:53.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:40:53.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:40:53.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:40:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:40:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.778226 -999.00  +11.20  38.71     73   +6.70 1 2 2 1 1     0    0 3.34 -86.18 ZNE.. 38.5 38.7 312.8 43.5 12.5 -11.7 12.3 -12.2 12.1 -8.3 12.4 -8.3
2025-12-12T20:40:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:40:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:40:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.778226
2025-12-12T20:40:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:40:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:40:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:40:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:40:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:40:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:40:31', tmtdew=5.87, humidity=67.25, cloud=0.0, wind=36.63, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:40:38.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:38:00')
2025-12-12T20:40:53.107 [DEBUG] [Thread-76287] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:40:53.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:40:53.205 [DEBUG] [Thread-76290] [transport.py] [_log()] starting thread (client mode): 0xf575fc40
2025-12-12T20:40:53.205 [DEBUG] [Thread-76290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:40:53.221 [DEBUG] [Thread-76290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:40:53.221 [INFO] [Thread-76290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:40:53.228 [DEBUG] [Thread-76290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:40:53.228 [DEBUG] [Thread-76290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:40:53.228 [DEBUG] [Thread-76290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] client lang: <none>
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] server lang: <none>
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] kex follows: False
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] Compression: none
2025-12-12T20:40:53.229 [DEBUG] [Thread-76290] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:40:53.285 [DEBUG] [Thread-76290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:40:53.286 [DEBUG] [Thread-76290] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:40:53.286 [DEBUG] [Thread-76290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:40:53.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:40:53.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:40:53.342 [DEBUG] [Thread-76290] [transport.py] [_log()] userauth is OK
2025-12-12T20:40:53.342 [DEBUG] [Thread-76290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:40:53.342 [DEBUG] [Thread-76290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:40:53.342 [DEBUG] [Thread-76290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:40:53.342 [DEBUG] [Thread-76290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:40:53.365 [INFO] [Thread-76290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:40:53.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:40:53.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:40:54.225 [DEBUG] [Thread-76290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:40:54.225 [DEBUG] [Thread-76290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:40:54.273 [DEBUG] [Thread-76290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:40:54.273 [DEBUG] [Thread-76290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:40:54.281 [DEBUG] [Thread-76290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:40:54.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:40:54.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:40:54.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:40:54.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:40:54.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:40:54.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:40:54.315 [DEBUG] [Thread-76290] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:41:02.248 [DEBUG] [Thread-76292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:07.959 [DEBUG] [Thread-76293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:15.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:15.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:17.283 [DEBUG] [Thread-76294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:41:24.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:41:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:41:25.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 41, 3), 5.74, 67.81, 0.0, 39.75, 11.5, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:41:25.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:41:03
2025-12-12T20:41:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:41:25.287 [DEBUG] [Thread-76295] [transport.py] [_log()] starting thread (client mode): 0xf574d000
2025-12-12T20:41:25.287 [DEBUG] [Thread-76295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:41:25.309 [DEBUG] [Thread-76295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:41:25.309 [INFO] [Thread-76295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] client lang: <none>
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] server lang: <none>
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] kex follows: False
2025-12-12T20:41:25.314 [DEBUG] [Thread-76295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:41:25.315 [DEBUG] [Thread-76295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:41:25.315 [DEBUG] [Thread-76295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:41:25.315 [DEBUG] [Thread-76295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:41:25.315 [DEBUG] [Thread-76295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:41:25.315 [DEBUG] [Thread-76295] [transport.py] [_log()] Compression: none
2025-12-12T20:41:25.315 [DEBUG] [Thread-76295] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:41:25.331 [DEBUG] [Thread-76295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:41:25.331 [DEBUG] [Thread-76295] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:41:25.332 [DEBUG] [Thread-76295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:41:25.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:41:25.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:41:25.334 [DEBUG] [Thread-76295] [transport.py] [_log()] userauth is OK
2025-12-12T20:41:25.334 [DEBUG] [Thread-76295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:41:25.334 [DEBUG] [Thread-76295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:41:25.334 [DEBUG] [Thread-76295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:41:25.334 [DEBUG] [Thread-76295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:41:25.370 [INFO] [Thread-76295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:41:25.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:41:26.019 [DEBUG] [Thread-76295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:41:26.019 [DEBUG] [Thread-76295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:41:26.020 [DEBUG] [Thread-76295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:41:26.060 [DEBUG] [Thread-76295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:41:26.060 [DEBUG] [Thread-76295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:41:26.063 [DEBUG] [Thread-76295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:41:26.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:41:26.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:41:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:41:26.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:41:26.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:41:26.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:41:26.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:41:26.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:41:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:41:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.778226 -999.00  +11.20  38.71     73   +6.70 1 2 2 1 1     0    0 3.34 -86.18 ZNE.. 38.5 38.7 312.8 43.5 12.5 -11.7 12.3 -12.2 12.1 -8.3 12.4 -8.3
2025-12-12T20:41:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:41:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:41:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.778226
2025-12-12T20:41:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:41:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:41:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:41:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:41:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:41:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:41:03', tmtdew=5.74, humidity=67.81, cloud=0.0, wind=39.75, temperature=11.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:40:38.726', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:38:00')
2025-12-12T20:41:26.088 [DEBUG] [Thread-76295] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:41:26.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:41:26.182 [DEBUG] [Thread-76298] [transport.py] [_log()] starting thread (client mode): 0xf578ace0
2025-12-12T20:41:26.182 [DEBUG] [Thread-76298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:41:26.197 [DEBUG] [Thread-76298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:41:26.197 [INFO] [Thread-76298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:41:26.204 [DEBUG] [Thread-76298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:41:26.204 [DEBUG] [Thread-76298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:41:26.204 [DEBUG] [Thread-76298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:41:26.204 [DEBUG] [Thread-76298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:26.204 [DEBUG] [Thread-76298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:26.204 [DEBUG] [Thread-76298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] client lang: <none>
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] server lang: <none>
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] kex follows: False
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] Compression: none
2025-12-12T20:41:26.205 [DEBUG] [Thread-76298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:41:26.261 [DEBUG] [Thread-76298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:41:26.262 [DEBUG] [Thread-76298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:41:26.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:41:26.263 [DEBUG] [Thread-76298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:41:26.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:41:26.318 [DEBUG] [Thread-76298] [transport.py] [_log()] userauth is OK
2025-12-12T20:41:26.318 [DEBUG] [Thread-76298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:41:26.318 [DEBUG] [Thread-76298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:41:26.318 [DEBUG] [Thread-76298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:41:26.318 [DEBUG] [Thread-76298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:41:26.340 [INFO] [Thread-76298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:41:26.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:41:26.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:41:27.160 [DEBUG] [Thread-76298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:41:27.161 [DEBUG] [Thread-76298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:41:27.209 [DEBUG] [Thread-76298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:41:27.209 [DEBUG] [Thread-76298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:41:27.217 [DEBUG] [Thread-76298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:41:27.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:41:27.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:41:27.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:41:27.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:41:27.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:41:27.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:41:27.252 [DEBUG] [Thread-76298] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:41:32.312 [DEBUG] [Thread-76300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:47.354 [DEBUG] [Thread-76301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:41:57.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:41:57.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:41:57.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:41:57.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 41, 35), 5.54, 68.56, 0.0, 33.08, 11.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:41:57.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:41:35
2025-12-12T20:41:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:41:58.202 [DEBUG] [Thread-76302] [transport.py] [_log()] starting thread (client mode): 0xf574fa90
2025-12-12T20:41:58.202 [DEBUG] [Thread-76302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:41:58.214 [DEBUG] [Thread-76302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:41:58.214 [INFO] [Thread-76302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:41:58.217 [DEBUG] [Thread-76302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] client lang: <none>
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] server lang: <none>
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] kex follows: False
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] Compression: none
2025-12-12T20:41:58.218 [DEBUG] [Thread-76302] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:41:58.235 [DEBUG] [Thread-76302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:41:58.235 [DEBUG] [Thread-76302] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:41:58.236 [DEBUG] [Thread-76302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:41:58.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:41:58.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:41:58.237 [DEBUG] [Thread-76302] [transport.py] [_log()] userauth is OK
2025-12-12T20:41:58.237 [DEBUG] [Thread-76302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:41:58.238 [DEBUG] [Thread-76302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:41:58.238 [DEBUG] [Thread-76302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:41:58.238 [DEBUG] [Thread-76302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:41:58.255 [INFO] [Thread-76302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:41:58.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:41:58.885 [DEBUG] [Thread-76302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:41:58.885 [DEBUG] [Thread-76302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:41:58.886 [DEBUG] [Thread-76302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:41:58.926 [DEBUG] [Thread-76302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:41:58.926 [DEBUG] [Thread-76302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:41:58.929 [DEBUG] [Thread-76302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:41:58.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:41:58.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:41:58.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:41:58.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:41:58.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:41:58.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:41:58.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:41:58.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:41:58.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:41:58.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.778573 -999.00  +11.20  45.33     74   +6.80 1 3 2 1 1     0    0 3.37 -84.97 Z.E.. 39.1 45.3 311.8 52.2 12.4 -10.0 12.3 -10.7 12.1 -7.1 12.4 -6.9
2025-12-12T20:41:58.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:41:58.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:41:58.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.778573
2025-12-12T20:41:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:41:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:41:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:41:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:41:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:41:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:41:35', tmtdew=5.54, humidity=68.56, cloud=0.0, wind=33.08, temperature=11.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:41:08.707', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:38:00')
2025-12-12T20:41:58.956 [DEBUG] [Thread-76302] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:41:59.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:41:59.050 [DEBUG] [Thread-76305] [transport.py] [_log()] starting thread (client mode): 0xf574d9f0
2025-12-12T20:41:59.050 [DEBUG] [Thread-76305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:41:59.069 [DEBUG] [Thread-76305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:41:59.069 [INFO] [Thread-76305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:41:59.077 [DEBUG] [Thread-76305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:41:59.077 [DEBUG] [Thread-76305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:41:59.077 [DEBUG] [Thread-76305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:41:59.077 [DEBUG] [Thread-76305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] client lang: <none>
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] server lang: <none>
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] kex follows: False
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] Compression: none
2025-12-12T20:41:59.078 [DEBUG] [Thread-76305] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:41:59.134 [DEBUG] [Thread-76305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:41:59.135 [DEBUG] [Thread-76305] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:41:59.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:41:59.135 [DEBUG] [Thread-76305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:41:59.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:41:59.190 [DEBUG] [Thread-76305] [transport.py] [_log()] userauth is OK
2025-12-12T20:41:59.191 [DEBUG] [Thread-76305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:41:59.191 [DEBUG] [Thread-76305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:41:59.191 [DEBUG] [Thread-76305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:41:59.191 [DEBUG] [Thread-76305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:41:59.210 [INFO] [Thread-76305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:41:59.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:41:59.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:42:00.093 [DEBUG] [Thread-76305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:42:00.094 [DEBUG] [Thread-76305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:42:00.142 [DEBUG] [Thread-76305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:42:00.142 [DEBUG] [Thread-76305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:42:00.151 [DEBUG] [Thread-76305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:42:00.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:42:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:42:00.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:42:00.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:42:00.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:42:00.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:42:00.191 [DEBUG] [Thread-76305] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:42:02.384 [DEBUG] [Thread-76307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:42:08.017 [DEBUG] [Thread-76308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:42:15.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:42:15.746 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:42:17.427 [DEBUG] [Thread-76309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:42:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:42:30.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:42:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:42:30.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 42, 7), 5.46, 68.93, 0.0, 33.24, 11.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:42:30.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:42:07
2025-12-12T20:42:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:42:31.168 [DEBUG] [Thread-76310] [transport.py] [_log()] starting thread (client mode): 0xf574c6a0
2025-12-12T20:42:31.168 [DEBUG] [Thread-76310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:42:31.188 [DEBUG] [Thread-76310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:42:31.188 [INFO] [Thread-76310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:42:31.191 [DEBUG] [Thread-76310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:42:31.191 [DEBUG] [Thread-76310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:42:31.191 [DEBUG] [Thread-76310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] client lang: <none>
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] server lang: <none>
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] kex follows: False
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] Compression: none
2025-12-12T20:42:31.192 [DEBUG] [Thread-76310] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:42:31.208 [DEBUG] [Thread-76310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:42:31.209 [DEBUG] [Thread-76310] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:42:31.209 [DEBUG] [Thread-76310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:42:31.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:42:31.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:42:31.211 [DEBUG] [Thread-76310] [transport.py] [_log()] userauth is OK
2025-12-12T20:42:31.211 [DEBUG] [Thread-76310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:42:31.211 [DEBUG] [Thread-76310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:42:31.212 [DEBUG] [Thread-76310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:42:31.212 [DEBUG] [Thread-76310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:42:31.236 [INFO] [Thread-76310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:42:31.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:42:31.869 [DEBUG] [Thread-76310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:42:31.869 [DEBUG] [Thread-76310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:42:31.869 [DEBUG] [Thread-76310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:42:31.910 [DEBUG] [Thread-76310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:42:31.910 [DEBUG] [Thread-76310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:42:31.913 [DEBUG] [Thread-76310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:42:31.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:42:31.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:42:31.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:42:31.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:42:31.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:42:31.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:42:31.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:42:31.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:42:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:42:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.778921 -999.00  +11.10  45.28     75   +6.90 1 3 2 1 1     0    0 3.08 -93.00 Z.E.. 42.0 45.3 312.0 50.5 12.4 -9.7 12.2 -9.4 12.1 -6.7 12.4 -6.7
2025-12-12T20:42:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:42:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:42:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.778921
2025-12-12T20:42:31.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:42:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:42:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:42:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:42:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:42:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:42:07', tmtdew=5.46, humidity=68.93, cloud=0.0, wind=33.24, temperature=11.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:41:38.774', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:38:00')
2025-12-12T20:42:31.940 [DEBUG] [Thread-76310] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:42:32.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:42:32.032 [DEBUG] [Thread-76313] [transport.py] [_log()] starting thread (client mode): 0xf5702710
2025-12-12T20:42:32.032 [DEBUG] [Thread-76313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:42:32.046 [DEBUG] [Thread-76313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:42:32.047 [INFO] [Thread-76313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:42:32.054 [DEBUG] [Thread-76313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:42:32.054 [DEBUG] [Thread-76313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:42:32.054 [DEBUG] [Thread-76313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:42:32.054 [DEBUG] [Thread-76313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] client lang: <none>
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] server lang: <none>
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] kex follows: False
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:42:32.055 [DEBUG] [Thread-76313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:42:32.056 [DEBUG] [Thread-76313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:42:32.056 [DEBUG] [Thread-76313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:42:32.056 [DEBUG] [Thread-76313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:42:32.056 [DEBUG] [Thread-76313] [transport.py] [_log()] Compression: none
2025-12-12T20:42:32.056 [DEBUG] [Thread-76313] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:42:32.114 [DEBUG] [Thread-76313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:42:32.114 [DEBUG] [Thread-76313] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:42:32.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:42:32.115 [DEBUG] [Thread-76313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:42:32.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:42:32.170 [DEBUG] [Thread-76313] [transport.py] [_log()] userauth is OK
2025-12-12T20:42:32.170 [DEBUG] [Thread-76313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:42:32.170 [DEBUG] [Thread-76313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:42:32.171 [DEBUG] [Thread-76313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:42:32.171 [DEBUG] [Thread-76313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:42:32.193 [INFO] [Thread-76313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:42:32.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:42:32.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:42:32.452 [DEBUG] [Thread-76315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:42:33.045 [DEBUG] [Thread-76313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:42:33.045 [DEBUG] [Thread-76313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:42:33.092 [DEBUG] [Thread-76313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:42:33.092 [DEBUG] [Thread-76313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:42:33.101 [DEBUG] [Thread-76313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:42:33.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:42:33.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:42:33.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:42:33.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:42:33.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:42:33.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:42:33.134 [DEBUG] [Thread-76313] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:42:47.504 [DEBUG] [Thread-76316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:02.531 [DEBUG] [Thread-76317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:03.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:43:03.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:43:03.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:43:03.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 42, 39), 5.31, 69.66, 0.0, 35.5, 11.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:43:03.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:42:39
2025-12-12T20:43:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:43:04.119 [DEBUG] [Thread-76318] [transport.py] [_log()] starting thread (client mode): 0xf5701090
2025-12-12T20:43:04.119 [DEBUG] [Thread-76318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:43:04.139 [DEBUG] [Thread-76318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:43:04.139 [INFO] [Thread-76318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] client lang: <none>
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] server lang: <none>
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] kex follows: False
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] Compression: none
2025-12-12T20:43:04.141 [DEBUG] [Thread-76318] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:43:04.159 [DEBUG] [Thread-76318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:43:04.160 [DEBUG] [Thread-76318] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:43:04.160 [DEBUG] [Thread-76318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:43:04.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:43:04.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:43:04.163 [DEBUG] [Thread-76318] [transport.py] [_log()] userauth is OK
2025-12-12T20:43:04.163 [DEBUG] [Thread-76318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:43:04.163 [DEBUG] [Thread-76318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:43:04.163 [DEBUG] [Thread-76318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:43:04.163 [DEBUG] [Thread-76318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:43:04.187 [INFO] [Thread-76318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:43:04.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:43:04.816 [DEBUG] [Thread-76318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:43:04.816 [DEBUG] [Thread-76318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:43:04.817 [DEBUG] [Thread-76318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:43:04.857 [DEBUG] [Thread-76318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:43:04.857 [DEBUG] [Thread-76318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:43:04.860 [DEBUG] [Thread-76318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:43:04.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:43:04.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:43:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:43:04.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:43:04.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:43:04.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:43:04.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:43:04.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:43:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:43:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.779268 -999.00  +11.20  40.22     75   +6.90 1 3 2 1 1     0    0 3.01 -93.33 znES. 41.9 40.2 313.8 49.0 12.4 -10.4 12.2 -9.5 12.1 -7.4 12.4 -7.4
2025-12-12T20:43:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:43:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:43:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.779268
2025-12-12T20:43:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:43:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:43:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:43:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:43:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:43:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:42:39', tmtdew=5.31, humidity=69.66, cloud=0.0, wind=35.5, temperature=11.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:42:08.755', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.308250000000001, nan, nan, nan, nan, nan, nan, nan, 0.09699999999999953, nan, nan, nan, nan, nan, nan, 0.2582500000000003, 0.14150000000000063, 0.532, 0.3747499999999988, nan, nan, nan, nan, 0.44099999999999895, 0.07249999999999979, 0.20074999999999932, 0.057500000000000995, nan, nan, nan, 0.24150000000000027, 0.11074999999999946], zp_timestamp='2025-12-12T18:38:00')
2025-12-12T20:43:04.886 [DEBUG] [Thread-76318] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:43:04.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:43:04.981 [DEBUG] [Thread-76321] [transport.py] [_log()] starting thread (client mode): 0xf57f1e40
2025-12-12T20:43:04.981 [DEBUG] [Thread-76321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:43:04.996 [DEBUG] [Thread-76321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:43:04.997 [INFO] [Thread-76321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:43:05.004 [DEBUG] [Thread-76321] [transport.py] [_log()] client lang: <none>
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] server lang: <none>
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] kex follows: False
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] Compression: none
2025-12-12T20:43:05.005 [DEBUG] [Thread-76321] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:43:05.069 [DEBUG] [Thread-76321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:43:05.070 [DEBUG] [Thread-76321] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:43:05.070 [DEBUG] [Thread-76321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:43:05.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:43:05.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:43:05.126 [DEBUG] [Thread-76321] [transport.py] [_log()] userauth is OK
2025-12-12T20:43:05.126 [DEBUG] [Thread-76321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:43:05.126 [DEBUG] [Thread-76321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:43:05.126 [DEBUG] [Thread-76321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:43:05.126 [DEBUG] [Thread-76321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:43:05.144 [INFO] [Thread-76321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:43:05.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:43:05.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:43:06.009 [DEBUG] [Thread-76321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:43:06.010 [DEBUG] [Thread-76321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:43:06.058 [DEBUG] [Thread-76321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:43:06.058 [DEBUG] [Thread-76321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:43:06.067 [DEBUG] [Thread-76321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:43:06.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:43:06.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:43:06.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:43:06.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:43:06.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:43:06.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:43:06.101 [DEBUG] [Thread-76321] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:43:08.073 [DEBUG] [Thread-76323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:15.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:15.952 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:17.558 [DEBUG] [Thread-76324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:32.607 [DEBUG] [Thread-76325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:43:36.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:43:36.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:43:36.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:43:36.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 43, 11), 5.25, 69.94, 0.0, 31.49, 11.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:43:36.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:43:11
2025-12-12T20:43:36.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:43:37.128 [DEBUG] [Thread-76326] [transport.py] [_log()] starting thread (client mode): 0xf8157a90
2025-12-12T20:43:37.128 [DEBUG] [Thread-76326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:43:37.150 [DEBUG] [Thread-76326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:43:37.150 [INFO] [Thread-76326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] client lang: <none>
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] server lang: <none>
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] kex follows: False
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] Compression: none
2025-12-12T20:43:37.153 [DEBUG] [Thread-76326] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:43:37.169 [DEBUG] [Thread-76326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:43:37.169 [DEBUG] [Thread-76326] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:43:37.169 [DEBUG] [Thread-76326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:43:37.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:43:37.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:43:37.170 [DEBUG] [Thread-76326] [transport.py] [_log()] userauth is OK
2025-12-12T20:43:37.170 [DEBUG] [Thread-76326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:43:37.170 [DEBUG] [Thread-76326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:43:37.170 [DEBUG] [Thread-76326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:43:37.170 [DEBUG] [Thread-76326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:43:37.179 [INFO] [Thread-76326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:43:37.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:43:37.828 [DEBUG] [Thread-76326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:43:37.828 [DEBUG] [Thread-76326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:43:37.828 [DEBUG] [Thread-76326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:43:37.869 [DEBUG] [Thread-76326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:43:37.869 [DEBUG] [Thread-76326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:43:37.871 [DEBUG] [Thread-76326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:43:37.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:43:37.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:43:37.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:43:37.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:43:37.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:43:37.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:43:37.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.779962 -999.00  +11.20  29.43     75   +7.10 1 2 1 1 1     0    0 2.60 -103.04 ..ES. 34.0 29.4 327.6 43.9 12.4 -13.6 12.3 -12.0 12.1 -9.2 12.4 -10.2
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.779962
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:43:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:43:11', tmtdew=5.25, humidity=69.94, cloud=0.0, wind=31.49, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:43:08.717', atlas_cloud=2, atlas_rain=1, zp_data=[0.9827499999999993, 0.5592500000000005, 0.9002499999999998, 0.918499999999999, nan, nan, nan, 0.3052500000000009, 0.44599999999999973, 0.2320000000000011, nan, nan, nan, 1.42725, nan, 0.22499999999999964, 0.11275000000000013, 0.23550000000000004, 0.266, nan, nan, nan, nan, 0.4817499999999999, 0.2159999999999993, 0.09200000000000053, 0.7537500000000001, nan, nan, nan, nan, 0.4430000000000014, 0.2417499999999997], zp_timestamp='2025-12-12T18:41:00')
2025-12-12T20:43:37.890 [DEBUG] [Thread-76326] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:43:37.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:43:37.976 [DEBUG] [Thread-76329] [transport.py] [_log()] starting thread (client mode): 0xf8156830
2025-12-12T20:43:37.976 [DEBUG] [Thread-76329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:43:37.990 [DEBUG] [Thread-76329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:43:37.990 [INFO] [Thread-76329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] client lang: <none>
2025-12-12T20:43:37.997 [DEBUG] [Thread-76329] [transport.py] [_log()] server lang: <none>
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] kex follows: False
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] Compression: none
2025-12-12T20:43:37.998 [DEBUG] [Thread-76329] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:43:38.052 [DEBUG] [Thread-76329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:43:38.053 [DEBUG] [Thread-76329] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:43:38.053 [DEBUG] [Thread-76329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:43:38.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:43:38.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:43:38.109 [DEBUG] [Thread-76329] [transport.py] [_log()] userauth is OK
2025-12-12T20:43:38.110 [DEBUG] [Thread-76329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:43:38.110 [DEBUG] [Thread-76329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:43:38.110 [DEBUG] [Thread-76329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:43:38.110 [DEBUG] [Thread-76329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:43:38.127 [INFO] [Thread-76329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:43:38.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:43:38.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:43:38.963 [DEBUG] [Thread-76329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:43:38.963 [DEBUG] [Thread-76329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:43:39.011 [DEBUG] [Thread-76329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:43:39.012 [DEBUG] [Thread-76329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:43:39.020 [DEBUG] [Thread-76329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:43:39.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:43:39.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:43:39.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:43:39.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:43:39.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:43:39.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:43:39.058 [DEBUG] [Thread-76329] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:43:47.632 [DEBUG] [Thread-76331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:02.675 [DEBUG] [Thread-76332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:08.150 [DEBUG] [Thread-76333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:44:09.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:44:09.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:44:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 43, 43), 5.16, 70.92, 0.0, 34.14, 11.48, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:44:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:43:43
2025-12-12T20:44:09.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:44:10.047 [DEBUG] [Thread-76334] [transport.py] [_log()] starting thread (client mode): 0xf57f2230
2025-12-12T20:44:10.047 [DEBUG] [Thread-76334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:44:10.063 [DEBUG] [Thread-76334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:44:10.063 [INFO] [Thread-76334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:10.064 [DEBUG] [Thread-76334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] client lang: <none>
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] server lang: <none>
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] kex follows: False
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] Compression: none
2025-12-12T20:44:10.065 [DEBUG] [Thread-76334] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:44:10.074 [DEBUG] [Thread-76334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:44:10.074 [DEBUG] [Thread-76334] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:44:10.075 [DEBUG] [Thread-76334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:44:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:44:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:44:10.076 [DEBUG] [Thread-76334] [transport.py] [_log()] userauth is OK
2025-12-12T20:44:10.076 [DEBUG] [Thread-76334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:44:10.076 [DEBUG] [Thread-76334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:44:10.076 [DEBUG] [Thread-76334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:44:10.076 [DEBUG] [Thread-76334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:44:10.092 [INFO] [Thread-76334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:44:10.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:44:10.716 [DEBUG] [Thread-76334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:44:10.717 [DEBUG] [Thread-76334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:44:10.717 [DEBUG] [Thread-76334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:44:10.758 [DEBUG] [Thread-76334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:44:10.758 [DEBUG] [Thread-76334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:44:10.760 [DEBUG] [Thread-76334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:44:10.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:44:10.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:44:10.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:44:10.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:44:10.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:44:10.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:44:10.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:44:10.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:44:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:44:10.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.780310 -999.00  +11.20  34.79     75   +7.10 1 2 2 1 1     0    0 2.53 -102.66 Z.E.. 35.3 34.8 314.4 42.5 12.4 -13.4 12.3 -12.1 12.1 -9.1 12.4 -10.0
2025-12-12T20:44:10.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:44:10.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:44:10.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.780310
2025-12-12T20:44:10.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:44:10.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:44:10.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:44:10.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:44:10.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:44:10.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:43:43', tmtdew=5.16, humidity=70.92, cloud=0.0, wind=34.14, temperature=11.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:43:38.784', atlas_cloud=2, atlas_rain=1, zp_data=[0.9827499999999993, 0.5592500000000005, 0.9002499999999998, 0.918499999999999, nan, nan, nan, 0.3052500000000009, 0.44599999999999973, 0.2320000000000011, nan, nan, nan, 1.42725, nan, 0.22499999999999964, 0.11275000000000013, 0.23550000000000004, 0.266, nan, nan, nan, nan, 0.4817499999999999, 0.2159999999999993, 0.09200000000000053, 0.7537500000000001, nan, nan, nan, nan, 0.4430000000000014, 0.2417499999999997], zp_timestamp='2025-12-12T18:41:00')
2025-12-12T20:44:10.783 [DEBUG] [Thread-76334] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:44:10.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:44:10.878 [DEBUG] [Thread-76337] [transport.py] [_log()] starting thread (client mode): 0xf57a75e0
2025-12-12T20:44:10.878 [DEBUG] [Thread-76337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:44:10.892 [DEBUG] [Thread-76337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:44:10.892 [INFO] [Thread-76337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:44:10.900 [DEBUG] [Thread-76337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:44:10.900 [DEBUG] [Thread-76337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:44:10.900 [DEBUG] [Thread-76337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:44:10.900 [DEBUG] [Thread-76337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:10.900 [DEBUG] [Thread-76337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] client lang: <none>
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] server lang: <none>
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] kex follows: False
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:44:10.901 [DEBUG] [Thread-76337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:44:10.902 [DEBUG] [Thread-76337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:44:10.902 [DEBUG] [Thread-76337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:44:10.902 [DEBUG] [Thread-76337] [transport.py] [_log()] Compression: none
2025-12-12T20:44:10.902 [DEBUG] [Thread-76337] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:44:10.958 [DEBUG] [Thread-76337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:44:10.958 [DEBUG] [Thread-76337] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:44:10.958 [DEBUG] [Thread-76337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:44:10.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:44:10.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:44:11.018 [DEBUG] [Thread-76337] [transport.py] [_log()] userauth is OK
2025-12-12T20:44:11.018 [DEBUG] [Thread-76337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:44:11.018 [DEBUG] [Thread-76337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:44:11.018 [DEBUG] [Thread-76337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:44:11.018 [DEBUG] [Thread-76337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:44:11.033 [INFO] [Thread-76337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:44:11.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:44:11.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:44:11.880 [DEBUG] [Thread-76337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:44:11.880 [DEBUG] [Thread-76337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:44:11.928 [DEBUG] [Thread-76337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:44:11.928 [DEBUG] [Thread-76337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:44:11.937 [DEBUG] [Thread-76337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:44:11.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:44:11.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:44:11.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:44:11.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:44:11.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:44:11.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:44:11.971 [DEBUG] [Thread-76337] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:44:16.154 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:16.155 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:17.703 [DEBUG] [Thread-76339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:32.739 [DEBUG] [Thread-76340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:44:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:44:41.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:44:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:44:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 44, 15), 5.14, 70.99, 0.0, 32.62, 11.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:44:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:44:15
2025-12-12T20:44:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:44:42.928 [DEBUG] [Thread-76341] [transport.py] [_log()] starting thread (client mode): 0xf8156830
2025-12-12T20:44:42.928 [DEBUG] [Thread-76341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:44:42.949 [DEBUG] [Thread-76341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:44:42.949 [INFO] [Thread-76341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:42.952 [DEBUG] [Thread-76341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] client lang: <none>
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] server lang: <none>
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] kex follows: False
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] Compression: none
2025-12-12T20:44:42.953 [DEBUG] [Thread-76341] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:44:42.970 [DEBUG] [Thread-76341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:44:42.970 [DEBUG] [Thread-76341] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:44:42.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:44:42.971 [DEBUG] [Thread-76341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:44:42.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:44:42.974 [DEBUG] [Thread-76341] [transport.py] [_log()] userauth is OK
2025-12-12T20:44:42.974 [DEBUG] [Thread-76341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:44:42.974 [DEBUG] [Thread-76341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:44:42.974 [DEBUG] [Thread-76341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:44:42.974 [DEBUG] [Thread-76341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:44:42.991 [INFO] [Thread-76341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:44:42.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:44:43.618 [DEBUG] [Thread-76341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:44:43.618 [DEBUG] [Thread-76341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:44:43.619 [DEBUG] [Thread-76341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:44:43.659 [DEBUG] [Thread-76341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:44:43.659 [DEBUG] [Thread-76341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:44:43.663 [DEBUG] [Thread-76341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:44:43.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:44:43.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:44:43.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:44:43.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:44:43.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:44:43.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:44:43.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:44:43.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:44:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:44:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.780657 -999.00  +11.10  42.98     76   +7.10 1 2 2 1 1     0    0 2.57 -100.79 Z.E.. 40.5 43.0 315.4 50.4 12.4 -12.3 12.2 -11.8 12.0 -8.9 12.3 -8.8
2025-12-12T20:44:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:44:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:44:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.780657
2025-12-12T20:44:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:44:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:44:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:44:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:44:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:44:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:44:15', tmtdew=5.14, humidity=70.99, cloud=0.0, wind=32.62, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:44:08.765', atlas_cloud=2, atlas_rain=1, zp_data=[0.9827499999999993, 0.5592500000000005, 0.9002499999999998, 0.918499999999999, nan, nan, nan, 0.3052500000000009, 0.44599999999999973, 0.2320000000000011, nan, nan, nan, 1.42725, nan, 0.22499999999999964, 0.11275000000000013, 0.23550000000000004, 0.266, nan, nan, nan, nan, 0.4817499999999999, 0.2159999999999993, 0.09200000000000053, 0.7537500000000001, nan, nan, nan, nan, 0.4430000000000014, 0.2417499999999997], zp_timestamp='2025-12-12T18:41:00')
2025-12-12T20:44:43.692 [DEBUG] [Thread-76341] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:44:43.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:44:43.792 [DEBUG] [Thread-76344] [transport.py] [_log()] starting thread (client mode): 0xf81562c0
2025-12-12T20:44:43.793 [DEBUG] [Thread-76344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:44:43.807 [DEBUG] [Thread-76344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:44:43.807 [INFO] [Thread-76344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] client lang: <none>
2025-12-12T20:44:43.815 [DEBUG] [Thread-76344] [transport.py] [_log()] server lang: <none>
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] kex follows: False
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] Compression: none
2025-12-12T20:44:43.816 [DEBUG] [Thread-76344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:44:43.874 [DEBUG] [Thread-76344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:44:43.874 [DEBUG] [Thread-76344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:44:43.875 [DEBUG] [Thread-76344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:44:43.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:44:43.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:44:43.930 [DEBUG] [Thread-76344] [transport.py] [_log()] userauth is OK
2025-12-12T20:44:43.930 [DEBUG] [Thread-76344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:44:43.930 [DEBUG] [Thread-76344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:44:43.931 [DEBUG] [Thread-76344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:44:43.931 [DEBUG] [Thread-76344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:44:43.949 [INFO] [Thread-76344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:44:43.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:44:43.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:44:44.777 [DEBUG] [Thread-76344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:44:44.778 [DEBUG] [Thread-76344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:44:44.826 [DEBUG] [Thread-76344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:44:44.826 [DEBUG] [Thread-76344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:44:44.834 [DEBUG] [Thread-76344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:44:44.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:44:44.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:44:44.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:44:44.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:44:44.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:44:44.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:44:44.869 [DEBUG] [Thread-76344] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:44:47.773 [DEBUG] [Thread-76346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:02.815 [DEBUG] [Thread-76347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:08.226 [DEBUG] [Thread-76348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:14.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:45:14.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:45:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:45:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 44, 50), 5.0, 71.19, 0.0, 42.4, 11.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:45:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:44:50
2025-12-12T20:45:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:45:15.846 [DEBUG] [Thread-76349] [transport.py] [_log()] starting thread (client mode): 0xf5788a30
2025-12-12T20:45:15.846 [DEBUG] [Thread-76349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:45:15.857 [DEBUG] [Thread-76349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:45:15.857 [INFO] [Thread-76349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] client lang: <none>
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] server lang: <none>
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] kex follows: False
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] Compression: none
2025-12-12T20:45:15.860 [DEBUG] [Thread-76349] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:45:15.876 [DEBUG] [Thread-76349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:45:15.876 [DEBUG] [Thread-76349] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:45:15.877 [DEBUG] [Thread-76349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:45:15.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:45:15.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:45:15.879 [DEBUG] [Thread-76349] [transport.py] [_log()] userauth is OK
2025-12-12T20:45:15.879 [DEBUG] [Thread-76349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:45:15.879 [DEBUG] [Thread-76349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:45:15.879 [DEBUG] [Thread-76349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:45:15.879 [DEBUG] [Thread-76349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:45:15.894 [INFO] [Thread-76349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:45:15.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:45:16.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:16.361 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:16.510 [DEBUG] [Thread-76349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:45:16.510 [DEBUG] [Thread-76349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:45:16.511 [DEBUG] [Thread-76349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:45:16.551 [DEBUG] [Thread-76349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:45:16.552 [DEBUG] [Thread-76349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:45:16.556 [DEBUG] [Thread-76349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:45:16.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:45:16.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:45:16.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:45:16.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:45:16.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:45:16.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:45:16.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:45:16.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:45:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:45:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.781004 -999.00  +11.10  41.26     76   +7.20 1 2 2 1 1     0    0 2.33 -107.25 ZNEs. 39.9 41.3 316.0 49.1 12.4 -12.3 12.2 -12.0 12.0 -8.8 12.4 -8.6
2025-12-12T20:45:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:45:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:45:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.781004
2025-12-12T20:45:16.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:45:16.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:45:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:45:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:45:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:45:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:44:50', tmtdew=5.0, humidity=71.19, cloud=0.0, wind=42.4, temperature=11.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:44:38.746', atlas_cloud=2, atlas_rain=1, zp_data=[0.9827499999999993, 0.5592500000000005, 0.9002499999999998, 0.918499999999999, nan, nan, nan, 0.3052500000000009, 0.44599999999999973, 0.2320000000000011, nan, nan, nan, 1.42725, nan, 0.22499999999999964, 0.11275000000000013, 0.23550000000000004, 0.266, nan, nan, nan, nan, 0.4817499999999999, 0.2159999999999993, 0.09200000000000053, 0.7537500000000001, nan, nan, nan, nan, 0.4430000000000014, 0.2417499999999997], zp_timestamp='2025-12-12T18:41:00')
2025-12-12T20:45:16.586 [DEBUG] [Thread-76349] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:45:16.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:45:16.678 [DEBUG] [Thread-76352] [transport.py] [_log()] starting thread (client mode): 0xf81e64d0
2025-12-12T20:45:16.678 [DEBUG] [Thread-76352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:45:16.695 [DEBUG] [Thread-76352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:45:16.695 [INFO] [Thread-76352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:16.703 [DEBUG] [Thread-76352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] client lang: <none>
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] server lang: <none>
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] kex follows: False
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:45:16.704 [DEBUG] [Thread-76352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:45:16.705 [DEBUG] [Thread-76352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:45:16.705 [DEBUG] [Thread-76352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:45:16.705 [DEBUG] [Thread-76352] [transport.py] [_log()] Compression: none
2025-12-12T20:45:16.705 [DEBUG] [Thread-76352] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:45:16.763 [DEBUG] [Thread-76352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:45:16.763 [DEBUG] [Thread-76352] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:45:16.764 [DEBUG] [Thread-76352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:45:16.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:45:16.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:45:16.819 [DEBUG] [Thread-76352] [transport.py] [_log()] userauth is OK
2025-12-12T20:45:16.820 [DEBUG] [Thread-76352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:45:16.820 [DEBUG] [Thread-76352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:45:16.820 [DEBUG] [Thread-76352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:45:16.821 [DEBUG] [Thread-76352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:45:16.840 [INFO] [Thread-76352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:45:16.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:45:16.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:45:17.698 [DEBUG] [Thread-76352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:45:17.698 [DEBUG] [Thread-76352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:45:17.745 [DEBUG] [Thread-76352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:45:17.746 [DEBUG] [Thread-76352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:45:17.754 [DEBUG] [Thread-76352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:45:17.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:45:17.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:45:17.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:45:17.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:45:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:45:17.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:45:17.788 [DEBUG] [Thread-76352] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:45:17.846 [DEBUG] [Thread-76354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:32.901 [DEBUG] [Thread-76355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:47.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:45:47.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:45:47.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:45:47.930 [DEBUG] [Thread-76356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:45:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 45, 22), 4.89, 71.72, 0.0, 39.82, 11.33, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:45:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:45:22
2025-12-12T20:45:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:45:48.751 [DEBUG] [Thread-76357] [transport.py] [_log()] starting thread (client mode): 0xf81e4d30
2025-12-12T20:45:48.751 [DEBUG] [Thread-76357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:45:48.771 [DEBUG] [Thread-76357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:45:48.771 [INFO] [Thread-76357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:45:48.774 [DEBUG] [Thread-76357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] client lang: <none>
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] server lang: <none>
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] kex follows: False
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] Compression: none
2025-12-12T20:45:48.775 [DEBUG] [Thread-76357] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:45:48.793 [DEBUG] [Thread-76357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:45:48.793 [DEBUG] [Thread-76357] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:45:48.794 [DEBUG] [Thread-76357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:45:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:45:48.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:45:48.836 [DEBUG] [Thread-76357] [transport.py] [_log()] userauth is OK
2025-12-12T20:45:48.837 [DEBUG] [Thread-76357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:45:48.837 [DEBUG] [Thread-76357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:45:48.837 [DEBUG] [Thread-76357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:45:48.837 [DEBUG] [Thread-76357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:45:48.869 [INFO] [Thread-76357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:45:48.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:45:49.513 [DEBUG] [Thread-76357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:45:49.513 [DEBUG] [Thread-76357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:45:49.514 [DEBUG] [Thread-76357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:45:49.554 [DEBUG] [Thread-76357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:45:49.554 [DEBUG] [Thread-76357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:45:49.557 [DEBUG] [Thread-76357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:45:49.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:45:49.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:45:49.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:45:49.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:45:49.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:45:49.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:45:49.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:45:49.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:45:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:45:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.781351 -999.00  +11.10  29.94     76   +7.20 1 3 1 1 1     0    0 2.40 -106.44 ZnE.. 39.8 29.9 310.6 46.2 12.3 -11.8 12.2 -11.6 12.0 -8.1 12.3 -7.8
2025-12-12T20:45:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:45:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:45:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.781351
2025-12-12T20:45:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:45:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:45:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:45:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:45:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:45:49.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:45:22', tmtdew=4.89, humidity=71.72, cloud=0.0, wind=39.82, temperature=11.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:45:08.726', atlas_cloud=3, atlas_rain=1, zp_data=[0.9827499999999993, 0.5592500000000005, 0.9002499999999998, 0.918499999999999, nan, nan, nan, 0.3052500000000009, 0.44599999999999973, 0.2320000000000011, nan, nan, nan, 1.42725, nan, 0.22499999999999964, 0.11275000000000013, 0.23550000000000004, 0.266, nan, nan, nan, nan, 0.4817499999999999, 0.2159999999999993, 0.09200000000000053, 0.7537500000000001, nan, nan, nan, nan, 0.4430000000000014, 0.2417499999999997], zp_timestamp='2025-12-12T18:41:00')
2025-12-12T20:45:49.583 [DEBUG] [Thread-76357] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:45:49.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:45:49.680 [DEBUG] [Thread-76360] [transport.py] [_log()] starting thread (client mode): 0xf57f2ad0
2025-12-12T20:45:49.680 [DEBUG] [Thread-76360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:45:49.698 [DEBUG] [Thread-76360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:45:49.699 [INFO] [Thread-76360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:45:49.706 [DEBUG] [Thread-76360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:45:49.706 [DEBUG] [Thread-76360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:45:49.706 [DEBUG] [Thread-76360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:45:49.706 [DEBUG] [Thread-76360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:49.706 [DEBUG] [Thread-76360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] client lang: <none>
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] server lang: <none>
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] kex follows: False
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] Compression: none
2025-12-12T20:45:49.707 [DEBUG] [Thread-76360] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:45:49.767 [DEBUG] [Thread-76360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:45:49.767 [DEBUG] [Thread-76360] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:45:49.768 [DEBUG] [Thread-76360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:45:49.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:45:49.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:45:49.822 [DEBUG] [Thread-76360] [transport.py] [_log()] userauth is OK
2025-12-12T20:45:49.822 [DEBUG] [Thread-76360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:45:49.823 [DEBUG] [Thread-76360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:45:49.823 [DEBUG] [Thread-76360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:45:49.823 [DEBUG] [Thread-76360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:45:49.843 [INFO] [Thread-76360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:45:49.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:45:49.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:45:50.722 [DEBUG] [Thread-76360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:45:50.723 [DEBUG] [Thread-76360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:45:50.771 [DEBUG] [Thread-76360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:45:50.771 [DEBUG] [Thread-76360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:45:50.780 [DEBUG] [Thread-76360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:45:50.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:45:50.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:45:50.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:45:50.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:45:50.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:45:50.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:45:50.815 [DEBUG] [Thread-76360] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:46:02.956 [DEBUG] [Thread-76362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:08.298 [DEBUG] [Thread-76363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:16.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:16.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:17.999 [DEBUG] [Thread-76364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:20.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:46:20.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:46:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:46:21.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 45, 54), 4.8, 72.44, 0.0, 35.43, 11.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:46:21.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:45:54
2025-12-12T20:46:21.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:46:21.785 [DEBUG] [Thread-76365] [transport.py] [_log()] starting thread (client mode): 0xf57f00d0
2025-12-12T20:46:21.785 [DEBUG] [Thread-76365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:46:21.806 [DEBUG] [Thread-76365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:46:21.806 [INFO] [Thread-76365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] client lang: <none>
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] server lang: <none>
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] kex follows: False
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] Compression: none
2025-12-12T20:46:21.809 [DEBUG] [Thread-76365] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:46:21.827 [DEBUG] [Thread-76365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:46:21.827 [DEBUG] [Thread-76365] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:46:21.828 [DEBUG] [Thread-76365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:46:21.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:46:21.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:46:21.830 [DEBUG] [Thread-76365] [transport.py] [_log()] userauth is OK
2025-12-12T20:46:21.830 [DEBUG] [Thread-76365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:46:21.830 [DEBUG] [Thread-76365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:46:21.830 [DEBUG] [Thread-76365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:46:21.830 [DEBUG] [Thread-76365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:46:21.862 [INFO] [Thread-76365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:46:21.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:46:22.474 [DEBUG] [Thread-76365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:46:22.474 [DEBUG] [Thread-76365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:46:22.474 [DEBUG] [Thread-76365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:46:22.515 [DEBUG] [Thread-76365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:46:22.515 [DEBUG] [Thread-76365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:46:22.518 [DEBUG] [Thread-76365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:46:22.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:46:22.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:46:22.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:46:22.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:46:22.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:46:22.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:46:22.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:46:22.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:46:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:46:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.781698 -999.00  +11.10  34.01     76   +7.20 1 3 2 1 1     0    0 2.12 -109.20 ZnE.. 33.0 34.0 315.6 43.2 12.3 -10.7 12.3 -10.7 12.0 -7.2 12.3 -7.2
2025-12-12T20:46:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:46:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:46:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.781698
2025-12-12T20:46:22.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:46:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:46:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:46:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:46:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:46:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:45:54', tmtdew=4.8, humidity=72.44, cloud=0.0, wind=35.43, temperature=11.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:45:38.707', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:44:00')
2025-12-12T20:46:22.542 [DEBUG] [Thread-76365] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:46:22.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:46:22.638 [DEBUG] [Thread-76368] [transport.py] [_log()] starting thread (client mode): 0xf578ae60
2025-12-12T20:46:22.638 [DEBUG] [Thread-76368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:46:22.652 [DEBUG] [Thread-76368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:46:22.652 [INFO] [Thread-76368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:46:22.660 [DEBUG] [Thread-76368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:46:22.660 [DEBUG] [Thread-76368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:46:22.660 [DEBUG] [Thread-76368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:46:22.660 [DEBUG] [Thread-76368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:22.660 [DEBUG] [Thread-76368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:22.660 [DEBUG] [Thread-76368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] client lang: <none>
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] server lang: <none>
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] kex follows: False
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:46:22.661 [DEBUG] [Thread-76368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:46:22.662 [DEBUG] [Thread-76368] [transport.py] [_log()] Compression: none
2025-12-12T20:46:22.662 [DEBUG] [Thread-76368] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:46:22.717 [DEBUG] [Thread-76368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:46:22.718 [DEBUG] [Thread-76368] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:46:22.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:46:22.719 [DEBUG] [Thread-76368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:46:22.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:46:22.777 [DEBUG] [Thread-76368] [transport.py] [_log()] userauth is OK
2025-12-12T20:46:22.777 [DEBUG] [Thread-76368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:46:22.777 [DEBUG] [Thread-76368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:46:22.777 [DEBUG] [Thread-76368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:46:22.777 [DEBUG] [Thread-76368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:46:22.799 [INFO] [Thread-76368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:46:22.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:46:22.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:46:23.648 [DEBUG] [Thread-76368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:46:23.648 [DEBUG] [Thread-76368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:46:23.696 [DEBUG] [Thread-76368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:46:23.696 [DEBUG] [Thread-76368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:46:23.705 [DEBUG] [Thread-76368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:46:23.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:46: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')
2025-12-12T20:46:23.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:46:23.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:46:23.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:46:23.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:46:23.740 [DEBUG] [Thread-76368] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:46:33.032 [DEBUG] [Thread-76370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:48.067 [DEBUG] [Thread-76371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:46:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:46:53.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:46:53.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:46:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 46, 26), 4.75, 72.67, 0.0, 34.16, 11.28, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:46:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:46:26
2025-12-12T20:46:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:46:54.719 [DEBUG] [Thread-76372] [transport.py] [_log()] starting thread (client mode): 0xf81e5d80
2025-12-12T20:46:54.719 [DEBUG] [Thread-76372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:46:54.740 [DEBUG] [Thread-76372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:46:54.741 [INFO] [Thread-76372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] client lang: <none>
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] server lang: <none>
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] kex follows: False
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:46:54.744 [DEBUG] [Thread-76372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:46:54.745 [DEBUG] [Thread-76372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:46:54.745 [DEBUG] [Thread-76372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:46:54.745 [DEBUG] [Thread-76372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:46:54.745 [DEBUG] [Thread-76372] [transport.py] [_log()] Compression: none
2025-12-12T20:46:54.745 [DEBUG] [Thread-76372] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:46:54.761 [DEBUG] [Thread-76372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:46:54.762 [DEBUG] [Thread-76372] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:46:54.762 [DEBUG] [Thread-76372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:46:54.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:46:54.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:46:54.764 [DEBUG] [Thread-76372] [transport.py] [_log()] userauth is OK
2025-12-12T20:46:54.764 [DEBUG] [Thread-76372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:46:54.765 [DEBUG] [Thread-76372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:46:54.765 [DEBUG] [Thread-76372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:46:54.765 [DEBUG] [Thread-76372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:46:54.792 [INFO] [Thread-76372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:46:54.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:46:55.425 [DEBUG] [Thread-76372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:46:55.425 [DEBUG] [Thread-76372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:46:55.425 [DEBUG] [Thread-76372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:46:55.466 [DEBUG] [Thread-76372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:46:55.466 [DEBUG] [Thread-76372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:46:55.469 [DEBUG] [Thread-76372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:46:55.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:46:55.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:46:55.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:46:55.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:46:55.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:46:55.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:46:55.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:46:55.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:46:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:46:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.782393 -999.00  +11.20  33.72     76   +7.20 1 3 2 1 1     0    0 1.45 -129.06 ZNES. 29.1 33.7 313.0 41.8 12.4 -8.9 12.2 -8.7 12.0 -6.1 12.3 -6.1
2025-12-12T20:46:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:46:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:46:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.782393
2025-12-12T20:46:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:46:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:46:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:46:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:46:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:46:55.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:46:26', tmtdew=4.75, humidity=72.67, cloud=0.0, wind=34.16, temperature=11.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:46:38.755', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:44:00')
2025-12-12T20:46:55.506 [DEBUG] [Thread-76372] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:46:55.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:46:55.604 [DEBUG] [Thread-76375] [transport.py] [_log()] starting thread (client mode): 0xf5797a30
2025-12-12T20:46:55.604 [DEBUG] [Thread-76375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:46:55.618 [DEBUG] [Thread-76375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:46:55.618 [INFO] [Thread-76375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] client lang: <none>
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] server lang: <none>
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] kex follows: False
2025-12-12T20:46:55.626 [DEBUG] [Thread-76375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:46:55.627 [DEBUG] [Thread-76375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:46:55.627 [DEBUG] [Thread-76375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:46:55.627 [DEBUG] [Thread-76375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:46:55.627 [DEBUG] [Thread-76375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:46:55.627 [DEBUG] [Thread-76375] [transport.py] [_log()] Compression: none
2025-12-12T20:46:55.627 [DEBUG] [Thread-76375] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:46:55.686 [DEBUG] [Thread-76375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:46:55.686 [DEBUG] [Thread-76375] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:46:55.687 [DEBUG] [Thread-76375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:46:55.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:46:55.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:46:55.742 [DEBUG] [Thread-76375] [transport.py] [_log()] userauth is OK
2025-12-12T20:46:55.742 [DEBUG] [Thread-76375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:46:55.743 [DEBUG] [Thread-76375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:46:55.743 [DEBUG] [Thread-76375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:46:55.743 [DEBUG] [Thread-76375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:46:55.761 [INFO] [Thread-76375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:46:55.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:46:55.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:46:56.585 [DEBUG] [Thread-76375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:46:56.585 [DEBUG] [Thread-76375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:46:56.633 [DEBUG] [Thread-76375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:46:56.633 [DEBUG] [Thread-76375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:46:56.642 [DEBUG] [Thread-76375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:46:56.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:46:56.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')
2025-12-12T20:46:56.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
2025-12-12T20:46:56.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:46:56.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:46:56.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:46:56.676 [DEBUG] [Thread-76375] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:47:03.092 [DEBUG] [Thread-76377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:08.378 [DEBUG] [Thread-76378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:16.769 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:16.771 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:18.142 [DEBUG] [Thread-76379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:26.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:47:26.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:47:26.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:47:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 46, 58), 4.62, 73.3, 0.0, 32.32, 11.21, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:47:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:46:58
2025-12-12T20:47:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:47:27.703 [DEBUG] [Thread-76380] [transport.py] [_log()] starting thread (client mode): 0xf575c640
2025-12-12T20:47:27.704 [DEBUG] [Thread-76380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:47:27.724 [DEBUG] [Thread-76380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:47:27.724 [INFO] [Thread-76380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] client lang: <none>
2025-12-12T20:47:27.727 [DEBUG] [Thread-76380] [transport.py] [_log()] server lang: <none>
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] kex follows: False
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] Compression: none
2025-12-12T20:47:27.728 [DEBUG] [Thread-76380] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:47:27.743 [DEBUG] [Thread-76380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:47:27.743 [DEBUG] [Thread-76380] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:47:27.743 [DEBUG] [Thread-76380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:47:27.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:47:27.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:47:27.744 [DEBUG] [Thread-76380] [transport.py] [_log()] userauth is OK
2025-12-12T20:47:27.744 [DEBUG] [Thread-76380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:47:27.744 [DEBUG] [Thread-76380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:47:27.744 [DEBUG] [Thread-76380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:47:27.744 [DEBUG] [Thread-76380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:47:27.757 [INFO] [Thread-76380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:47:27.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:47:28.345 [DEBUG] [Thread-76380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:47:28.345 [DEBUG] [Thread-76380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:47:28.345 [DEBUG] [Thread-76380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:47:28.386 [DEBUG] [Thread-76380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:47:28.386 [DEBUG] [Thread-76380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:47:28.389 [DEBUG] [Thread-76380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:47:28.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:47:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:47:28.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:47:28.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:47:28.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:47:28.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:47:28.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.782740 -999.00  +11.30  28.25     76   +7.30 1 3 1 1 1     0    0 1.16 -136.42 Z.ES. 33.0 28.2 315.4 40.3 12.4 -8.6 12.2 -8.7 12.0 -6.3 12.4 -6.0
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.782740
2025-12-12T20:47:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:47:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:47:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:47:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:47:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:47:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:46:58', tmtdew=4.62, humidity=73.3, cloud=0.0, wind=32.32, temperature=11.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:47:08.736', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:44:00')
2025-12-12T20:47:28.410 [DEBUG] [Thread-76380] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:47:28.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:47:28.495 [DEBUG] [Thread-76383] [transport.py] [_log()] starting thread (client mode): 0xf81c2fb0
2025-12-12T20:47:28.495 [DEBUG] [Thread-76383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:47:28.509 [DEBUG] [Thread-76383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:47:28.509 [INFO] [Thread-76383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:47:28.516 [DEBUG] [Thread-76383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:47:28.516 [DEBUG] [Thread-76383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] client lang: <none>
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] server lang: <none>
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] kex follows: False
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] Compression: none
2025-12-12T20:47:28.517 [DEBUG] [Thread-76383] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:47:28.573 [DEBUG] [Thread-76383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:47:28.573 [DEBUG] [Thread-76383] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:47:28.573 [DEBUG] [Thread-76383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:47:28.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:47:28.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:47:28.630 [DEBUG] [Thread-76383] [transport.py] [_log()] userauth is OK
2025-12-12T20:47:28.630 [DEBUG] [Thread-76383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:47:28.630 [DEBUG] [Thread-76383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:47:28.630 [DEBUG] [Thread-76383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:47:28.630 [DEBUG] [Thread-76383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:47:28.647 [INFO] [Thread-76383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:47:28.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:47:28.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:47:29.476 [DEBUG] [Thread-76383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:47:29.476 [DEBUG] [Thread-76383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:47:29.523 [DEBUG] [Thread-76383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:47:29.523 [DEBUG] [Thread-76383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:47:29.532 [DEBUG] [Thread-76383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:47:29.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:47:29.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:47: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') -> 00000000
2025-12-12T20:47:29.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:47:29.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:47:29.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:47:29.564 [DEBUG] [Thread-76383] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:47:33.170 [DEBUG] [Thread-76385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:48.221 [DEBUG] [Thread-76386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:47:59.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:47:59.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:47: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
2025-12-12T20:48:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 47, 30), 4.56, 73.58, 0.0, 32.36, 11.23, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:48:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:47:30
2025-12-12T20:48:00.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:48:00.544 [DEBUG] [Thread-76387] [transport.py] [_log()] starting thread (client mode): 0xf57f3130
2025-12-12T20:48:00.544 [DEBUG] [Thread-76387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:48:00.564 [DEBUG] [Thread-76387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:48:00.564 [INFO] [Thread-76387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:48:00.567 [DEBUG] [Thread-76387] [transport.py] [_log()] client lang: <none>
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] server lang: <none>
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] kex follows: False
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] Compression: none
2025-12-12T20:48:00.568 [DEBUG] [Thread-76387] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:48:00.587 [DEBUG] [Thread-76387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:48:00.588 [DEBUG] [Thread-76387] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:48:00.589 [DEBUG] [Thread-76387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:48:00.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:48:00.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:48:00.591 [DEBUG] [Thread-76387] [transport.py] [_log()] userauth is OK
2025-12-12T20:48:00.591 [DEBUG] [Thread-76387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:48:00.591 [DEBUG] [Thread-76387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:48:00.591 [DEBUG] [Thread-76387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:48:00.591 [DEBUG] [Thread-76387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:48:00.626 [INFO] [Thread-76387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:48:00.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:48:01.255 [DEBUG] [Thread-76387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:48:01.255 [DEBUG] [Thread-76387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:48:01.256 [DEBUG] [Thread-76387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:48:01.297 [DEBUG] [Thread-76387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:48:01.297 [DEBUG] [Thread-76387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:48:01.300 [DEBUG] [Thread-76387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:48:01.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:48:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:48:01.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:48:01.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:48:01.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:48:01.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:48:01.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:48:01.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:48:01.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:48:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.783087 -999.00  +11.30  25.23     76   +7.30 1 3 1 1 1     0    0 1.03 -141.81 Z.ES. 34.2 25.2 340.7 47.5 12.4 -7.8 12.3 -8.3 12.1 -5.7 12.4 -5.6
2025-12-12T20:48:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:48:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:48:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.783087
2025-12-12T20:48:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:48:01.324 [DEBUG] [Thread-76387] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:48:01.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:48:01.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:48:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:48:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:48:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:47:30', tmtdew=4.56, humidity=73.58, cloud=0.0, wind=32.36, temperature=11.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:47:38.717', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:44:00')
2025-12-12T20:48:01.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:48:01.424 [DEBUG] [Thread-76390] [transport.py] [_log()] starting thread (client mode): 0xf813e890
2025-12-12T20:48:01.424 [DEBUG] [Thread-76390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:48:01.443 [DEBUG] [Thread-76390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:48:01.443 [INFO] [Thread-76390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:48:01.450 [DEBUG] [Thread-76390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:48:01.450 [DEBUG] [Thread-76390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:48:01.450 [DEBUG] [Thread-76390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:48:01.450 [DEBUG] [Thread-76390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] client lang: <none>
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] server lang: <none>
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] kex follows: False
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:48:01.451 [DEBUG] [Thread-76390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:48:01.452 [DEBUG] [Thread-76390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:48:01.452 [DEBUG] [Thread-76390] [transport.py] [_log()] Compression: none
2025-12-12T20:48:01.452 [DEBUG] [Thread-76390] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:48:01.511 [DEBUG] [Thread-76390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:48:01.511 [DEBUG] [Thread-76390] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:48:01.512 [DEBUG] [Thread-76390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:48:01.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:48:01.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:48:01.566 [DEBUG] [Thread-76390] [transport.py] [_log()] userauth is OK
2025-12-12T20:48:01.566 [DEBUG] [Thread-76390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:48:01.566 [DEBUG] [Thread-76390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:48:01.567 [DEBUG] [Thread-76390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:48:01.567 [DEBUG] [Thread-76390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:48:01.586 [INFO] [Thread-76390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:48:01.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:48:01.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:48:02.454 [DEBUG] [Thread-76390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:48:02.454 [DEBUG] [Thread-76390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:48:02.502 [DEBUG] [Thread-76390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:48:02.502 [DEBUG] [Thread-76390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:48:02.510 [DEBUG] [Thread-76390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:48:02.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:48:02.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:48:02.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:48:02.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:48:02.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:48:02.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:48:02.545 [DEBUG] [Thread-76390] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:48:03.249 [DEBUG] [Thread-76392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:48:08.448 [DEBUG] [Thread-76393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:48:16.983 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:48:16.984 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:48:18.294 [DEBUG] [Thread-76394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:48:32.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:48:32.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:48:32.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
2025-12-12T20:48:33.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 48, 2), 4.57, 73.57, 0.0, 30.37, 11.25, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:48:33.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:48:02
2025-12-12T20:48:33.328 [DEBUG] [Thread-76395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:48:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:48:33.557 [DEBUG] [Thread-76396] [transport.py] [_log()] starting thread (client mode): 0xf81c2ce0
2025-12-12T20:48:33.557 [DEBUG] [Thread-76396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:48:33.573 [DEBUG] [Thread-76396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:48:33.573 [INFO] [Thread-76396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] client lang: <none>
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] server lang: <none>
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] kex follows: False
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] Compression: none
2025-12-12T20:48:33.576 [DEBUG] [Thread-76396] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:48:33.593 [DEBUG] [Thread-76396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:48:33.594 [DEBUG] [Thread-76396] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:48:33.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:48:33.595 [DEBUG] [Thread-76396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:48:33.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:48:33.597 [DEBUG] [Thread-76396] [transport.py] [_log()] userauth is OK
2025-12-12T20:48:33.598 [DEBUG] [Thread-76396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:48:33.598 [DEBUG] [Thread-76396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:48:33.598 [DEBUG] [Thread-76396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:48:33.598 [DEBUG] [Thread-76396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:48:33.624 [INFO] [Thread-76396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:48:33.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:48:34.214 [DEBUG] [Thread-76396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:48:34.214 [DEBUG] [Thread-76396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:48:34.215 [DEBUG] [Thread-76396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:48:34.255 [DEBUG] [Thread-76396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:48:34.256 [DEBUG] [Thread-76396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:48:34.259 [DEBUG] [Thread-76396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:48:34.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:48:34.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:48:34.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:48:34.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:48:34.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:48:34.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:48:34.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:48:34.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:48:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:48:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.783434 -999.00  +11.20  25.08     77   +7.40 1 3 1 1 1     0    0 0.40 -157.77 ..Es. 30.9 25.1 341.6 40.1 12.5 -6.5 12.3 -7.6 12.1 -5.2 12.4 -4.6
2025-12-12T20:48:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:48:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:48:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.783434
2025-12-12T20:48:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:48:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:48:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:48:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:48:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:48:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:48:02', tmtdew=4.57, humidity=73.57, cloud=0.0, wind=30.37, temperature=11.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:48:08.698', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:44:00')
2025-12-12T20:48:34.290 [DEBUG] [Thread-76396] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:48:34.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:48:34.385 [DEBUG] [Thread-76399] [transport.py] [_log()] starting thread (client mode): 0xf57a7820
2025-12-12T20:48:34.385 [DEBUG] [Thread-76399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:48:34.400 [DEBUG] [Thread-76399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:48:34.400 [INFO] [Thread-76399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:48:34.407 [DEBUG] [Thread-76399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:48:34.407 [DEBUG] [Thread-76399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:48:34.407 [DEBUG] [Thread-76399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:48:34.407 [DEBUG] [Thread-76399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:34.407 [DEBUG] [Thread-76399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:48:34.407 [DEBUG] [Thread-76399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] client lang: <none>
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] server lang: <none>
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] kex follows: False
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] Compression: none
2025-12-12T20:48:34.408 [DEBUG] [Thread-76399] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:48:34.467 [DEBUG] [Thread-76399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:48:34.467 [DEBUG] [Thread-76399] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:48:34.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:48:34.469 [DEBUG] [Thread-76399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:48:34.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:48:34.523 [DEBUG] [Thread-76399] [transport.py] [_log()] userauth is OK
2025-12-12T20:48:34.523 [DEBUG] [Thread-76399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:48:34.523 [DEBUG] [Thread-76399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:48:34.523 [DEBUG] [Thread-76399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:48:34.523 [DEBUG] [Thread-76399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:48:34.543 [INFO] [Thread-76399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:48:34.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:48:34.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:48:35.454 [DEBUG] [Thread-76399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:48:35.454 [DEBUG] [Thread-76399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:48:35.502 [DEBUG] [Thread-76399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:48:35.502 [DEBUG] [Thread-76399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:48:35.510 [DEBUG] [Thread-76399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:48:35.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:48:35.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:48:35.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:48:35.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:48:35.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:48:35.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:48:35.542 [DEBUG] [Thread-76399] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:48:48.350 [DEBUG] [Thread-76401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:03.391 [DEBUG] [Thread-76402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:05.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:49:05.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:49:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:49:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 48, 34), 4.63, 73.03, 0.0, 30.7, 11.35, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:49:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:48:34
2025-12-12T20:49:06.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:49:06.518 [DEBUG] [Thread-76403] [transport.py] [_log()] starting thread (client mode): 0xf57f3790
2025-12-12T20:49:06.518 [DEBUG] [Thread-76403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:49:06.534 [DEBUG] [Thread-76403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:49:06.534 [INFO] [Thread-76403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:49:06.537 [DEBUG] [Thread-76403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:49:06.537 [DEBUG] [Thread-76403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:49:06.537 [DEBUG] [Thread-76403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:49:06.537 [DEBUG] [Thread-76403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] client lang: <none>
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] server lang: <none>
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] kex follows: False
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] Compression: none
2025-12-12T20:49:06.538 [DEBUG] [Thread-76403] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:49:06.554 [DEBUG] [Thread-76403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:49:06.554 [DEBUG] [Thread-76403] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:49:06.555 [DEBUG] [Thread-76403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:49:06.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:49:06.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:49:06.557 [DEBUG] [Thread-76403] [transport.py] [_log()] userauth is OK
2025-12-12T20:49:06.557 [DEBUG] [Thread-76403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:49:06.557 [DEBUG] [Thread-76403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:49:06.557 [DEBUG] [Thread-76403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:49:06.557 [DEBUG] [Thread-76403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:49:06.575 [INFO] [Thread-76403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:49:06.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:49:07.208 [DEBUG] [Thread-76403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:49:07.208 [DEBUG] [Thread-76403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:49:07.209 [DEBUG] [Thread-76403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:49:07.249 [DEBUG] [Thread-76403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:49:07.250 [DEBUG] [Thread-76403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:49:07.252 [DEBUG] [Thread-76403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:49:07.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:49:07.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:49:07.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:49:07.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:49:07.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:49:07.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:49:07.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.783782 -999.00  +11.20  28.14     77   +7.40 1 3 1 1 1     0    0 -0.02 -174.34 Z.Es. 26.6 28.1 329.4 38.1 12.4 -5.2 12.3 -6.3 12.1 -4.0 12.4 -3.9
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.783782
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:49:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:48:34', tmtdew=4.63, humidity=73.03, cloud=0.0, wind=30.7, temperature=11.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:48:38.765', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:44:00')
2025-12-12T20:49:07.272 [DEBUG] [Thread-76403] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:49:07.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:49:07.357 [DEBUG] [Thread-76406] [transport.py] [_log()] starting thread (client mode): 0xf81c1600
2025-12-12T20:49:07.357 [DEBUG] [Thread-76406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:49:07.373 [DEBUG] [Thread-76406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:49:07.373 [INFO] [Thread-76406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:49:07.380 [DEBUG] [Thread-76406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:49:07.380 [DEBUG] [Thread-76406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:49:07.380 [DEBUG] [Thread-76406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:49:07.380 [DEBUG] [Thread-76406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:07.380 [DEBUG] [Thread-76406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] client lang: <none>
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] server lang: <none>
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] kex follows: False
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] Compression: none
2025-12-12T20:49:07.381 [DEBUG] [Thread-76406] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:49:07.438 [DEBUG] [Thread-76406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:49:07.438 [DEBUG] [Thread-76406] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:49:07.439 [DEBUG] [Thread-76406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:49:07.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:49:07.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:49:07.494 [DEBUG] [Thread-76406] [transport.py] [_log()] userauth is OK
2025-12-12T20:49:07.494 [DEBUG] [Thread-76406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:49:07.494 [DEBUG] [Thread-76406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:49:07.494 [DEBUG] [Thread-76406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:49:07.494 [DEBUG] [Thread-76406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:49:07.511 [INFO] [Thread-76406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:49:07.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:49:07.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:49:08.355 [DEBUG] [Thread-76406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:49:08.355 [DEBUG] [Thread-76406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:49:08.403 [DEBUG] [Thread-76406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:49:08.403 [DEBUG] [Thread-76406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:49:08.412 [DEBUG] [Thread-76406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:49:08.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:49: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')
2025-12-12T20:49:08.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:49:08.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:49:08.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:49:08.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:49:08.444 [DEBUG] [Thread-76406] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:49:08.519 [DEBUG] [Thread-76408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:17.189 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:17.190 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:18.421 [DEBUG] [Thread-76409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:33.468 [DEBUG] [Thread-76410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:49:38.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:49:38.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:49:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:49:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 49, 6), 4.65, 72.93, 0.0, 32.2, 11.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:49:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:49:06
2025-12-12T20:49:39.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:49:39.443 [DEBUG] [Thread-76411] [transport.py] [_log()] starting thread (client mode): 0xf813e8f0
2025-12-12T20:49:39.443 [DEBUG] [Thread-76411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:49:39.458 [DEBUG] [Thread-76411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:49:39.458 [INFO] [Thread-76411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:49:39.462 [DEBUG] [Thread-76411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:49:39.462 [DEBUG] [Thread-76411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:49:39.462 [DEBUG] [Thread-76411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:49:39.462 [DEBUG] [Thread-76411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:39.462 [DEBUG] [Thread-76411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:39.462 [DEBUG] [Thread-76411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] client lang: <none>
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] server lang: <none>
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] kex follows: False
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] Compression: none
2025-12-12T20:49:39.463 [DEBUG] [Thread-76411] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:49:39.472 [DEBUG] [Thread-76411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:49:39.473 [DEBUG] [Thread-76411] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:49:39.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:49:39.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:49:39.473 [DEBUG] [Thread-76411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:49:39.474 [DEBUG] [Thread-76411] [transport.py] [_log()] userauth is OK
2025-12-12T20:49:39.474 [DEBUG] [Thread-76411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:49:39.474 [DEBUG] [Thread-76411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:49:39.474 [DEBUG] [Thread-76411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:49:39.474 [DEBUG] [Thread-76411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:49:39.487 [INFO] [Thread-76411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:49:39.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:49:40.071 [DEBUG] [Thread-76411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:49:40.071 [DEBUG] [Thread-76411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:49:40.071 [DEBUG] [Thread-76411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:49:40.113 [DEBUG] [Thread-76411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:49:40.113 [DEBUG] [Thread-76411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:49:40.116 [DEBUG] [Thread-76411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:49:40.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:49:40.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:49:40.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:49:40.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:49:40.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:49:40.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:49:40.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.784129 -999.00  +11.30  28.84     77   +7.40 1 3 1 1 1     0    0 0.07 -169.68 Z.Es. 36.5 28.8 317.2 38.8 12.4 -4.5 12.3 -5.1 12.1 -3.7 12.4 -3.5
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.784129
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:49:40.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:49:06', tmtdew=4.65, humidity=72.93, cloud=0.0, wind=32.2, temperature=11.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:49:08.746', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:47:00')
2025-12-12T20:49:40.136 [DEBUG] [Thread-76411] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:49:40.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:49:40.221 [DEBUG] [Thread-76414] [transport.py] [_log()] starting thread (client mode): 0xf574f790
2025-12-12T20:49:40.221 [DEBUG] [Thread-76414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:49:40.236 [DEBUG] [Thread-76414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:49:40.236 [INFO] [Thread-76414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] client lang: <none>
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] server lang: <none>
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] kex follows: False
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:49:40.248 [DEBUG] [Thread-76414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:49:40.249 [DEBUG] [Thread-76414] [transport.py] [_log()] Compression: none
2025-12-12T20:49:40.249 [DEBUG] [Thread-76414] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:49:40.301 [DEBUG] [Thread-76414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:49:40.301 [DEBUG] [Thread-76414] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:49:40.301 [DEBUG] [Thread-76414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:49:40.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:49:40.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:49:40.359 [DEBUG] [Thread-76414] [transport.py] [_log()] userauth is OK
2025-12-12T20:49:40.359 [DEBUG] [Thread-76414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:49:40.359 [DEBUG] [Thread-76414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:49:40.359 [DEBUG] [Thread-76414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:49:40.359 [DEBUG] [Thread-76414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:49:40.373 [INFO] [Thread-76414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:49:40.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:49:40.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:49:41.205 [DEBUG] [Thread-76414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:49:41.205 [DEBUG] [Thread-76414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:49:41.253 [DEBUG] [Thread-76414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:49:41.253 [DEBUG] [Thread-76414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:49:41.262 [DEBUG] [Thread-76414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:49:41.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:49:41.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:49:41.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:49:41.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:49:41.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:49:41.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:49:41.297 [DEBUG] [Thread-76414] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:49:48.498 [DEBUG] [Thread-76416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:03.539 [DEBUG] [Thread-76417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:08.593 [DEBUG] [Thread-76418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:11.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:50:11.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:50:11.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:50:12.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 49, 38), 4.6, 73.4, 0.0, 30.65, 11.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:50:12.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:49:38
2025-12-12T20:50:12.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:50:12.347 [DEBUG] [Thread-76419] [transport.py] [_log()] starting thread (client mode): 0xf575e410
2025-12-12T20:50:12.347 [DEBUG] [Thread-76419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:50:12.358 [DEBUG] [Thread-76419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:50:12.358 [INFO] [Thread-76419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:50:12.361 [DEBUG] [Thread-76419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:50:12.361 [DEBUG] [Thread-76419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:50:12.361 [DEBUG] [Thread-76419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] client lang: <none>
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] server lang: <none>
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] kex follows: False
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] Compression: none
2025-12-12T20:50:12.362 [DEBUG] [Thread-76419] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:50:12.379 [DEBUG] [Thread-76419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:50:12.379 [DEBUG] [Thread-76419] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:50:12.379 [DEBUG] [Thread-76419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:50:12.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:50:12.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:50:12.381 [DEBUG] [Thread-76419] [transport.py] [_log()] userauth is OK
2025-12-12T20:50:12.381 [DEBUG] [Thread-76419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:50:12.381 [DEBUG] [Thread-76419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:50:12.381 [DEBUG] [Thread-76419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:50:12.381 [DEBUG] [Thread-76419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:50:12.396 [INFO] [Thread-76419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:50:12.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:50:13.003 [DEBUG] [Thread-76419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:50:13.003 [DEBUG] [Thread-76419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:50:13.004 [DEBUG] [Thread-76419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:50:13.045 [DEBUG] [Thread-76419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:50:13.045 [DEBUG] [Thread-76419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:50:13.048 [DEBUG] [Thread-76419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:50:13.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:50:13.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:50:13.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:50:13.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:50:13.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:50:13.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:50:13.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:50:13.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:50:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:50:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.784823 -999.00  +11.20  39.36     78   +7.50 1 3 2 1 1     0    0 0.37 -153.53 ..Es. 39.1 39.4 318.0 48.7 12.5 -3.4 12.3 -3.5 12.1 -3.5 12.4 -2.9
2025-12-12T20:50:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:50:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:50:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.784823
2025-12-12T20:50:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:50:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:50:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:50:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:50:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:50:13.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:49:38', tmtdew=4.6, humidity=73.4, cloud=0.0, wind=30.65, temperature=11.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:50:08.707', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:47:00')
2025-12-12T20:50:13.077 [DEBUG] [Thread-76419] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:50:13.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:50:13.172 [DEBUG] [Thread-76422] [transport.py] [_log()] starting thread (client mode): 0xf5795300
2025-12-12T20:50:13.172 [DEBUG] [Thread-76422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:50:13.189 [DEBUG] [Thread-76422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:50:13.189 [INFO] [Thread-76422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:50:13.196 [DEBUG] [Thread-76422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:50:13.196 [DEBUG] [Thread-76422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:50:13.196 [DEBUG] [Thread-76422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] client lang: <none>
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] server lang: <none>
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] kex follows: False
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] Compression: none
2025-12-12T20:50:13.197 [DEBUG] [Thread-76422] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:50:13.254 [DEBUG] [Thread-76422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:50:13.254 [DEBUG] [Thread-76422] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:50:13.255 [DEBUG] [Thread-76422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:50:13.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:50:13.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:50:13.310 [DEBUG] [Thread-76422] [transport.py] [_log()] userauth is OK
2025-12-12T20:50:13.311 [DEBUG] [Thread-76422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:50:13.311 [DEBUG] [Thread-76422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:50:13.311 [DEBUG] [Thread-76422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:50:13.311 [DEBUG] [Thread-76422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:50:13.330 [INFO] [Thread-76422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:50:13.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:50:13.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:50:14.176 [DEBUG] [Thread-76422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:50:14.176 [DEBUG] [Thread-76422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:50:14.225 [DEBUG] [Thread-76422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:50:14.225 [DEBUG] [Thread-76422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:50:14.234 [DEBUG] [Thread-76422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:50:14.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:50:14.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:50:14.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:50:14.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:50:14.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:50:14.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:50:14.267 [DEBUG] [Thread-76422] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:50:17.395 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:17.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:18.565 [DEBUG] [Thread-76424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:33.606 [DEBUG] [Thread-76425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:50:44.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:50:44.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:50:44.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:50:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 50, 10), 4.59, 73.47, 0.0, 33.66, 11.43, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:50:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:50:10
2025-12-12T20:50:45.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:50:45.331 [DEBUG] [Thread-76426] [transport.py] [_log()] starting thread (client mode): 0xf575f550
2025-12-12T20:50:45.331 [DEBUG] [Thread-76426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:50:45.341 [DEBUG] [Thread-76426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:50:45.341 [INFO] [Thread-76426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:50:45.342 [DEBUG] [Thread-76426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] client lang: <none>
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] server lang: <none>
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] kex follows: False
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] Compression: none
2025-12-12T20:50:45.343 [DEBUG] [Thread-76426] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:50:45.359 [DEBUG] [Thread-76426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:50:45.359 [DEBUG] [Thread-76426] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:50:45.359 [DEBUG] [Thread-76426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:50:45.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:50:45.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:50:45.360 [DEBUG] [Thread-76426] [transport.py] [_log()] userauth is OK
2025-12-12T20:50:45.360 [DEBUG] [Thread-76426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:50:45.360 [DEBUG] [Thread-76426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:50:45.360 [DEBUG] [Thread-76426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:50:45.360 [DEBUG] [Thread-76426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:50:45.369 [INFO] [Thread-76426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:50:45.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:50:45.985 [DEBUG] [Thread-76426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:50:45.985 [DEBUG] [Thread-76426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:50:45.985 [DEBUG] [Thread-76426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:50:46.025 [DEBUG] [Thread-76426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:50:46.026 [DEBUG] [Thread-76426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:50:46.027 [DEBUG] [Thread-76426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:50:46.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:50:46.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:50:46.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:50:46.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:50:46.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:50:46.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:50:46.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:50:46.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.785171 -999.00  +11.10  38.45     78   +7.60 1 3 2 1 1     0    0 0.53 -150.71 ..E.. 40.5 38.5 314.2 41.2 12.6 -3.3 12.4 -3.3 12.1 -2.9 12.4 -2.8
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.785171
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:50:46.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:50:10', tmtdew=4.59, humidity=73.47, cloud=0.0, wind=33.66, temperature=11.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:50:38.774', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:47:00')
2025-12-12T20:50:46.038 [DEBUG] [Thread-76426] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:50:46.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:50:46.129 [DEBUG] [Thread-76429] [transport.py] [_log()] starting thread (client mode): 0xf575e470
2025-12-12T20:50:46.129 [DEBUG] [Thread-76429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:50:46.143 [DEBUG] [Thread-76429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:50:46.144 [INFO] [Thread-76429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] client lang: <none>
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] server lang: <none>
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] kex follows: False
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:50:46.151 [DEBUG] [Thread-76429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:50:46.152 [DEBUG] [Thread-76429] [transport.py] [_log()] Compression: none
2025-12-12T20:50:46.152 [DEBUG] [Thread-76429] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:50:46.209 [DEBUG] [Thread-76429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:50:46.209 [DEBUG] [Thread-76429] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:50:46.210 [DEBUG] [Thread-76429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:50:46.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:50:46.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:50:46.266 [DEBUG] [Thread-76429] [transport.py] [_log()] userauth is OK
2025-12-12T20:50:46.266 [DEBUG] [Thread-76429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:50:46.267 [DEBUG] [Thread-76429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:50:46.267 [DEBUG] [Thread-76429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:50:46.267 [DEBUG] [Thread-76429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:50:46.281 [INFO] [Thread-76429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:50:46.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:50:46.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:50:47.132 [DEBUG] [Thread-76429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:50:47.132 [DEBUG] [Thread-76429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:50:47.181 [DEBUG] [Thread-76429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:50:47.181 [DEBUG] [Thread-76429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:50:47.190 [DEBUG] [Thread-76429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:50:47.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:50:47.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:50: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
2025-12-12T20:50:47.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:50:47.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:50:47.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:50:47.223 [DEBUG] [Thread-76429] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:50:48.634 [DEBUG] [Thread-76431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:03.688 [DEBUG] [Thread-76432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:08.669 [DEBUG] [Thread-76433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:17.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:51:17.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:51:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:51:17.601 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:17.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 51, 14), 4.45, 73.66, 0.0, 38.85, 11.4, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:51:17.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:51:14
2025-12-12T20:51:18.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:51:18.194 [DEBUG] [Thread-76434] [transport.py] [_log()] starting thread (client mode): 0xf5772560
2025-12-12T20:51:18.194 [DEBUG] [Thread-76434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:51:18.218 [DEBUG] [Thread-76434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:51:18.218 [INFO] [Thread-76434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:18.222 [DEBUG] [Thread-76434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] client lang: <none>
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] server lang: <none>
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] kex follows: False
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] Compression: none
2025-12-12T20:51:18.223 [DEBUG] [Thread-76434] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:51:18.239 [DEBUG] [Thread-76434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:51:18.240 [DEBUG] [Thread-76434] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:51:18.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:51:18.241 [DEBUG] [Thread-76434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:51:18.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:51:18.243 [DEBUG] [Thread-76434] [transport.py] [_log()] userauth is OK
2025-12-12T20:51:18.243 [DEBUG] [Thread-76434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:51:18.243 [DEBUG] [Thread-76434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:51:18.243 [DEBUG] [Thread-76434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:51:18.244 [DEBUG] [Thread-76434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:51:18.279 [INFO] [Thread-76434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:51:18.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:51:18.725 [DEBUG] [Thread-76436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:18.924 [DEBUG] [Thread-76434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:51:18.925 [DEBUG] [Thread-76434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:51:18.925 [DEBUG] [Thread-76434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:51:18.966 [DEBUG] [Thread-76434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:51:18.966 [DEBUG] [Thread-76434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:51:18.969 [DEBUG] [Thread-76434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:51:18.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:51:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:51:18.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:51:18.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:51:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:51:18.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:51:18.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:51:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:51:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:51:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.785171 -999.00  +11.10  38.45     78   +7.60 1 3 2 1 1     0    0 0.53 -150.71 ..E.. 40.5 38.5 314.2 41.2 12.6 -3.3 12.4 -3.3 12.1 -2.9 12.4 -2.8
2025-12-12T20:51:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:51:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:51:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.785171
2025-12-12T20:51:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:51:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:51:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:51:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:51:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:51:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:51:14', tmtdew=4.45, humidity=73.66, cloud=0.0, wind=38.85, temperature=11.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:50:38.774', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:47:00')
2025-12-12T20:51:18.995 [DEBUG] [Thread-76434] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:51:19.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:51:19.093 [DEBUG] [Thread-76438] [transport.py] [_log()] starting thread (client mode): 0xf57a7af0
2025-12-12T20:51:19.093 [DEBUG] [Thread-76438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:51:19.108 [DEBUG] [Thread-76438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:51:19.108 [INFO] [Thread-76438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:51:19.115 [DEBUG] [Thread-76438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:51:19.115 [DEBUG] [Thread-76438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] client lang: <none>
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] server lang: <none>
2025-12-12T20:51:19.116 [DEBUG] [Thread-76438] [transport.py] [_log()] kex follows: False
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] Compression: none
2025-12-12T20:51:19.117 [DEBUG] [Thread-76438] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:51:19.174 [DEBUG] [Thread-76438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:51:19.175 [DEBUG] [Thread-76438] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:51:19.175 [DEBUG] [Thread-76438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:51:19.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:51:19.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:51:19.231 [DEBUG] [Thread-76438] [transport.py] [_log()] userauth is OK
2025-12-12T20:51:19.231 [DEBUG] [Thread-76438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:51:19.231 [DEBUG] [Thread-76438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:51:19.231 [DEBUG] [Thread-76438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:51:19.231 [DEBUG] [Thread-76438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:51:19.250 [INFO] [Thread-76438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:51:19.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:51:19.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:51:20.083 [DEBUG] [Thread-76438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:51:20.083 [DEBUG] [Thread-76438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:51:20.132 [DEBUG] [Thread-76438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:51:20.132 [DEBUG] [Thread-76438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:51:20.140 [DEBUG] [Thread-76438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:51:20.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:51:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:51:20.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:51:20.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:51:20.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:51:20.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:51:20.172 [DEBUG] [Thread-76438] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:51:33.756 [DEBUG] [Thread-76440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:48.797 [DEBUG] [Thread-76441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:51:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:51:50.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:51:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:51:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 51, 46), 4.47, 74.08, 0.0, 39.72, 11.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:51:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:51:46
2025-12-12T20:51:51.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:51:51.156 [DEBUG] [Thread-76442] [transport.py] [_log()] starting thread (client mode): 0xf81e4f40
2025-12-12T20:51:51.156 [DEBUG] [Thread-76442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:51:51.176 [DEBUG] [Thread-76442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:51:51.176 [INFO] [Thread-76442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] client lang: <none>
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] server lang: <none>
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] kex follows: False
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] Compression: none
2025-12-12T20:51:51.179 [DEBUG] [Thread-76442] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:51:51.196 [DEBUG] [Thread-76442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:51:51.196 [DEBUG] [Thread-76442] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:51:51.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:51:51.197 [DEBUG] [Thread-76442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:51:51.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:51:51.198 [DEBUG] [Thread-76442] [transport.py] [_log()] userauth is OK
2025-12-12T20:51:51.199 [DEBUG] [Thread-76442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:51:51.199 [DEBUG] [Thread-76442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:51:51.199 [DEBUG] [Thread-76442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:51:51.199 [DEBUG] [Thread-76442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:51:51.217 [INFO] [Thread-76442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:51:51.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:51:51.974 [DEBUG] [Thread-76442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:51:51.974 [DEBUG] [Thread-76442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:51:51.975 [DEBUG] [Thread-76442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:51:52.016 [DEBUG] [Thread-76442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:51:52.016 [DEBUG] [Thread-76442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:51:52.019 [DEBUG] [Thread-76442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:51:52.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:51:52.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:51:52.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:51:52.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:51:52.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:51:52.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:51:52.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:51:52.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:51:52.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:51:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.785518 -999.00  +11.30  32.64     78   +7.60 1 3 2 1 1     0    0 0.83 -135.86 ----- 25.8 32.6 320.6 39.5 12.6 -3.3 12.4 -3.2 12.1 -2.8 12.5 -2.8
2025-12-12T20:51:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:51:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:51:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.785518
2025-12-12T20:51:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:51:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:51:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:51:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:51:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:51:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:51:46', tmtdew=4.47, humidity=74.08, cloud=0.0, wind=39.72, temperature=11.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:51:08.755', atlas_cloud=3, atlas_rain=1, zp_data=[0.4427500000000002, 0.6767500000000002, 1.5677500000000002, 1.3524999999999991, nan, nan, nan, nan, 0.10200000000000031, 0.40700000000000003, nan, nan, nan, nan, nan, 0.6349999999999998, 0.12725000000000009, 0.48049999999999926, 1.6999999999999993, nan, nan, nan, nan, 0.4167500000000004, 0.05699999999999861, 0.2724999999999991, nan, nan, nan, nan, nan, 0.07900000000000063, 0.032249999999999446], zp_timestamp='2025-12-12T18:47:00')
2025-12-12T20:51:52.047 [DEBUG] [Thread-76442] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:51:52.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:51:52.144 [DEBUG] [Thread-76445] [transport.py] [_log()] starting thread (client mode): 0xf574e890
2025-12-12T20:51:52.144 [DEBUG] [Thread-76445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:51:52.159 [DEBUG] [Thread-76445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:51:52.159 [INFO] [Thread-76445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] client lang: <none>
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] server lang: <none>
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] kex follows: False
2025-12-12T20:51:52.167 [DEBUG] [Thread-76445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:51:52.168 [DEBUG] [Thread-76445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:51:52.168 [DEBUG] [Thread-76445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:51:52.168 [DEBUG] [Thread-76445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:51:52.168 [DEBUG] [Thread-76445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:51:52.168 [DEBUG] [Thread-76445] [transport.py] [_log()] Compression: none
2025-12-12T20:51:52.168 [DEBUG] [Thread-76445] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:51:52.226 [DEBUG] [Thread-76445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:51:52.227 [DEBUG] [Thread-76445] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:51:52.227 [DEBUG] [Thread-76445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:51:52.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:51:52.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:51:52.282 [DEBUG] [Thread-76445] [transport.py] [_log()] userauth is OK
2025-12-12T20:51:52.283 [DEBUG] [Thread-76445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:51:52.283 [DEBUG] [Thread-76445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:51:52.283 [DEBUG] [Thread-76445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:51:52.283 [DEBUG] [Thread-76445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:51:52.302 [INFO] [Thread-76445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:51:52.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:51:52.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:51:53.142 [DEBUG] [Thread-76445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:51:53.142 [DEBUG] [Thread-76445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:51:53.190 [DEBUG] [Thread-76445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:51:53.190 [DEBUG] [Thread-76445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:51:53.199 [DEBUG] [Thread-76445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:51:53.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:51:53.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:51:53.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:51:53.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:51:53.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:51:53.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:51:53.233 [DEBUG] [Thread-76445] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:52:03.824 [DEBUG] [Thread-76447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:08.750 [DEBUG] [Thread-76448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:17.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:17.809 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:18.861 [DEBUG] [Thread-76449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:23.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:52:23.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:52:23.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:52:23.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 52, 18), 4.46, 74.12, 0.0, 38.71, 11.45, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:52:23.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:52:18
2025-12-12T20:52:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:52:24.217 [DEBUG] [Thread-76450] [transport.py] [_log()] starting thread (client mode): 0xf81e7d00
2025-12-12T20:52:24.218 [DEBUG] [Thread-76450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:52:24.238 [DEBUG] [Thread-76450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:52:24.238 [INFO] [Thread-76450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] client lang: <none>
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] server lang: <none>
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] kex follows: False
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] Compression: none
2025-12-12T20:52:24.241 [DEBUG] [Thread-76450] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:52:24.258 [DEBUG] [Thread-76450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:52:24.258 [DEBUG] [Thread-76450] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:52:24.259 [DEBUG] [Thread-76450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:52:24.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:52:24.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:52:24.261 [DEBUG] [Thread-76450] [transport.py] [_log()] userauth is OK
2025-12-12T20:52:24.261 [DEBUG] [Thread-76450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:52:24.261 [DEBUG] [Thread-76450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:52:24.261 [DEBUG] [Thread-76450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:52:24.261 [DEBUG] [Thread-76450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:52:24.297 [INFO] [Thread-76450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:52:24.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:52:24.927 [DEBUG] [Thread-76450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:52:24.927 [DEBUG] [Thread-76450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:52:24.927 [DEBUG] [Thread-76450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:52:24.968 [DEBUG] [Thread-76450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:52:24.968 [DEBUG] [Thread-76450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:52:24.971 [DEBUG] [Thread-76450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:52:24.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:52:24.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:52:24.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:52:24.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:52:24.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:52:24.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:52:24.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:52:24.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:52:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:52:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.785865 -999.00  +11.30  35.47     77   +7.60 1 3 2 1 1     0    0 0.62 -142.76 ----- 34.3 35.5 313.6 43.3 12.6 -3.3 12.4 -3.2 12.1 -2.9 12.5 -2.8
2025-12-12T20:52:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:52:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:52:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.785865
2025-12-12T20:52:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:52:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:52:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:52:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:52:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:52:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:52:18', tmtdew=4.46, humidity=74.12, cloud=0.0, wind=38.71, temperature=11.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:51:38.736', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:52:24.995 [DEBUG] [Thread-76450] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:52:25.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:52:25.090 [DEBUG] [Thread-76453] [transport.py] [_log()] starting thread (client mode): 0xf575f310
2025-12-12T20:52:25.090 [DEBUG] [Thread-76453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:52:25.105 [DEBUG] [Thread-76453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:52:25.105 [INFO] [Thread-76453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:52:25.113 [DEBUG] [Thread-76453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:52:25.113 [DEBUG] [Thread-76453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:52:25.113 [DEBUG] [Thread-76453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] client lang: <none>
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] server lang: <none>
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] kex follows: False
2025-12-12T20:52:25.114 [DEBUG] [Thread-76453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:52:25.115 [DEBUG] [Thread-76453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:52:25.115 [DEBUG] [Thread-76453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:52:25.115 [DEBUG] [Thread-76453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:52:25.115 [DEBUG] [Thread-76453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:52:25.115 [DEBUG] [Thread-76453] [transport.py] [_log()] Compression: none
2025-12-12T20:52:25.115 [DEBUG] [Thread-76453] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:52:25.172 [DEBUG] [Thread-76453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:52:25.173 [DEBUG] [Thread-76453] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:52:25.174 [DEBUG] [Thread-76453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:52:25.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:52:25.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:52:25.231 [DEBUG] [Thread-76453] [transport.py] [_log()] userauth is OK
2025-12-12T20:52:25.231 [DEBUG] [Thread-76453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:52:25.231 [DEBUG] [Thread-76453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:52:25.231 [DEBUG] [Thread-76453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:52:25.231 [DEBUG] [Thread-76453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:52:25.250 [INFO] [Thread-76453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:52:25.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:52:25.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:52:26.103 [DEBUG] [Thread-76453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:52:26.103 [DEBUG] [Thread-76453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:52:26.151 [DEBUG] [Thread-76453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:52:26.151 [DEBUG] [Thread-76453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:52:26.160 [DEBUG] [Thread-76453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:52:26.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:52:26.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:52:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:52:26.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:52:26.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:52:26.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:52:26.198 [DEBUG] [Thread-76453] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:52:33.941 [DEBUG] [Thread-76455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:48.994 [DEBUG] [Thread-76456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:52:56.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:52:56.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:52:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:52:56.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 52, 50), 4.41, 74.12, 0.0, 35.41, 11.46, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:52:56.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:52:50
2025-12-12T20:52:57.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:52:57.170 [DEBUG] [Thread-76457] [transport.py] [_log()] starting thread (client mode): 0xf81e48e0
2025-12-12T20:52:57.170 [DEBUG] [Thread-76457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:52:57.185 [DEBUG] [Thread-76457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:52:57.185 [INFO] [Thread-76457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] client lang: <none>
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] server lang: <none>
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] kex follows: False
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] Compression: none
2025-12-12T20:52:57.187 [DEBUG] [Thread-76457] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:52:57.198 [DEBUG] [Thread-76457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:52:57.198 [DEBUG] [Thread-76457] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:52:57.198 [DEBUG] [Thread-76457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:52:57.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:52:57.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:52:57.200 [DEBUG] [Thread-76457] [transport.py] [_log()] userauth is OK
2025-12-12T20:52:57.200 [DEBUG] [Thread-76457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:52:57.200 [DEBUG] [Thread-76457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:52:57.200 [DEBUG] [Thread-76457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:52:57.200 [DEBUG] [Thread-76457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:52:57.222 [INFO] [Thread-76457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:52:57.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:52:58.003 [DEBUG] [Thread-76457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:52:58.003 [DEBUG] [Thread-76457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:52:58.003 [DEBUG] [Thread-76457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:52:58.044 [DEBUG] [Thread-76457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:52:58.044 [DEBUG] [Thread-76457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:52:58.047 [DEBUG] [Thread-76457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:52:58.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:52:58.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:52:58.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:52:58.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:52:58.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:52:58.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:52:58.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:52:58.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:52:58.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:52:58.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.786212 -999.00  +11.40  30.56     78   +7.70 1 3 2 1 1     0    0 0.50 -144.54 ----- 34.6 30.6 326.4 43.6 12.6 -3.1 12.4 -3.2 12.2 -3.1 12.5 -2.8
2025-12-12T20:52:58.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:52:58.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:52:58.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.786212
2025-12-12T20:52:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:52:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:52:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:52:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:52:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:52:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:52:50', tmtdew=4.41, humidity=74.12, cloud=0.0, wind=35.41, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:52:08.717', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:52:58.071 [DEBUG] [Thread-76457] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:52:58.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:52:58.162 [DEBUG] [Thread-76460] [transport.py] [_log()] starting thread (client mode): 0xf81e6c80
2025-12-12T20:52:58.162 [DEBUG] [Thread-76460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:52:58.178 [DEBUG] [Thread-76460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:52:58.178 [INFO] [Thread-76460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:52:58.185 [DEBUG] [Thread-76460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] client lang: <none>
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] server lang: <none>
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] kex follows: False
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] Compression: none
2025-12-12T20:52:58.186 [DEBUG] [Thread-76460] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:52:58.242 [DEBUG] [Thread-76460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:52:58.243 [DEBUG] [Thread-76460] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:52:58.243 [DEBUG] [Thread-76460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:52:58.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:52:58.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:52:58.299 [DEBUG] [Thread-76460] [transport.py] [_log()] userauth is OK
2025-12-12T20:52:58.299 [DEBUG] [Thread-76460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:52:58.299 [DEBUG] [Thread-76460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:52:58.299 [DEBUG] [Thread-76460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:52:58.299 [DEBUG] [Thread-76460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:52:58.318 [INFO] [Thread-76460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:52:58.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:52:58.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:52:59.172 [DEBUG] [Thread-76460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:52:59.172 [DEBUG] [Thread-76460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:52:59.220 [DEBUG] [Thread-76460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:52:59.220 [DEBUG] [Thread-76460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:52:59.229 [DEBUG] [Thread-76460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:52:59.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:52:59.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:52:59.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:52:59.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:52:59.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:52:59.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:52:59.269 [DEBUG] [Thread-76460] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:53:04.026 [DEBUG] [Thread-76462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:53:08.823 [DEBUG] [Thread-76463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:53:18.013 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:53:18.013 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:53:19.069 [DEBUG] [Thread-76464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:53:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:53:29.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:53:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:53:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 53, 22), 4.4, 74.16, 0.0, 38.5, 11.41, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:53:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:53:22
2025-12-12T20:53:30.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:53:30.246 [DEBUG] [Thread-76465] [transport.py] [_log()] starting thread (client mode): 0xf57e3610
2025-12-12T20:53:30.247 [DEBUG] [Thread-76465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:53:30.267 [DEBUG] [Thread-76465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:53:30.267 [INFO] [Thread-76465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:53:30.270 [DEBUG] [Thread-76465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] client lang: <none>
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] server lang: <none>
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] kex follows: False
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] Compression: none
2025-12-12T20:53:30.271 [DEBUG] [Thread-76465] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:53:30.288 [DEBUG] [Thread-76465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:53:30.289 [DEBUG] [Thread-76465] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:53:30.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:53:30.290 [DEBUG] [Thread-76465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:53:30.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:53:30.292 [DEBUG] [Thread-76465] [transport.py] [_log()] userauth is OK
2025-12-12T20:53:30.292 [DEBUG] [Thread-76465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:53:30.293 [DEBUG] [Thread-76465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:53:30.293 [DEBUG] [Thread-76465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:53:30.293 [DEBUG] [Thread-76465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:53:30.316 [INFO] [Thread-76465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:53:30.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:53:30.972 [DEBUG] [Thread-76465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:53:30.972 [DEBUG] [Thread-76465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:53:30.973 [DEBUG] [Thread-76465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:53:31.014 [DEBUG] [Thread-76465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:53:31.014 [DEBUG] [Thread-76465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:53:31.017 [DEBUG] [Thread-76465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:53:31.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:53:31.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:53:31.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:53:31.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:53:31.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:53:31.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:53:31.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:53:31.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:53:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:53:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.786559 -999.00  +11.30  37.45     78   +7.70 1 3 2 1 1     0    0 -0.03 -159.88 ----- 37.8 37.5 334.4 48.0 12.7 -3.5 12.5 -3.1 12.2 -3.2 12.5 -3.1
2025-12-12T20:53:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:53:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:53:31.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.786559
2025-12-12T20:53:31.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:53:31.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:53:31.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:53:31.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:53:31.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:53:31.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:53:22', tmtdew=4.4, humidity=74.16, cloud=0.0, wind=38.5, temperature=11.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:52:38.698', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:53:31.043 [DEBUG] [Thread-76465] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:53:31.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:53:31.140 [DEBUG] [Thread-76468] [transport.py] [_log()] starting thread (client mode): 0xf81e76a0
2025-12-12T20:53:31.140 [DEBUG] [Thread-76468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:53:31.155 [DEBUG] [Thread-76468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:53:31.155 [INFO] [Thread-76468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:53:31.163 [DEBUG] [Thread-76468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] client lang: <none>
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] server lang: <none>
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] kex follows: False
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] Compression: none
2025-12-12T20:53:31.164 [DEBUG] [Thread-76468] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:53:31.222 [DEBUG] [Thread-76468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:53:31.222 [DEBUG] [Thread-76468] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:53:31.223 [DEBUG] [Thread-76468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:53:31.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:53:31.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:53:31.279 [DEBUG] [Thread-76468] [transport.py] [_log()] userauth is OK
2025-12-12T20:53:31.279 [DEBUG] [Thread-76468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:53:31.279 [DEBUG] [Thread-76468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:53:31.279 [DEBUG] [Thread-76468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:53:31.279 [DEBUG] [Thread-76468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:53:31.302 [INFO] [Thread-76468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:53:31.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:53:31.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:53:32.154 [DEBUG] [Thread-76468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:53:32.154 [DEBUG] [Thread-76468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:53:32.201 [DEBUG] [Thread-76468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:53:32.202 [DEBUG] [Thread-76468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:53:32.210 [DEBUG] [Thread-76468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:53:32.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:53:32.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:53:32.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:53:32.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:53:32.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:53:32.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:53:32.244 [DEBUG] [Thread-76468] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:53:34.096 [DEBUG] [Thread-76470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:53:49.150 [DEBUG] [Thread-76471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:54:02.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:54:02.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:54:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 53, 54), 4.38, 74.28, 0.0, 38.85, 11.38, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:54:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:53:54
2025-12-12T20:54:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:54:03.224 [DEBUG] [Thread-76472] [transport.py] [_log()] starting thread (client mode): 0xf57e0070
2025-12-12T20:54:03.224 [DEBUG] [Thread-76472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:54:03.244 [DEBUG] [Thread-76472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:54:03.244 [INFO] [Thread-76472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:03.246 [DEBUG] [Thread-76472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] client lang: <none>
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] server lang: <none>
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] kex follows: False
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] Compression: none
2025-12-12T20:54:03.247 [DEBUG] [Thread-76472] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:54:03.262 [DEBUG] [Thread-76472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:54:03.263 [DEBUG] [Thread-76472] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:54:03.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:54:03.264 [DEBUG] [Thread-76472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:54:03.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:54:03.266 [DEBUG] [Thread-76472] [transport.py] [_log()] userauth is OK
2025-12-12T20:54:03.266 [DEBUG] [Thread-76472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:54:03.267 [DEBUG] [Thread-76472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:54:03.267 [DEBUG] [Thread-76472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:54:03.267 [DEBUG] [Thread-76472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:54:03.304 [INFO] [Thread-76472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:54:03.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:54:04.066 [DEBUG] [Thread-76472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:54:04.067 [DEBUG] [Thread-76472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:54:04.067 [DEBUG] [Thread-76472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:54:04.108 [DEBUG] [Thread-76472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:54:04.108 [DEBUG] [Thread-76472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:54:04.110 [DEBUG] [Thread-76472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:54:04.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:54:04.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:54:04.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:54:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:54:04.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:54:04.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:54:04.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:54:04.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:54:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:54:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.786907 -999.00  +11.30  30.33     78   +7.70 1 3 2 1 1     0    0 0.30 -147.29 ..... 43.1 30.3 319.8 39.0 12.7 -5.4 12.4 -4.4 12.2 -4.7 12.5 -4.4
2025-12-12T20:54:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:54:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:54:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.786907
2025-12-12T20:54:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:54:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:54:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:54:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:54:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:54:04.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:53:54', tmtdew=4.38, humidity=74.28, cloud=0.0, wind=38.85, temperature=11.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:53:08.765', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:54:04.128 [DEBUG] [Thread-76472] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:54:04.181 [DEBUG] [Thread-76475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:04.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:54:04.224 [DEBUG] [Thread-76476] [transport.py] [_log()] starting thread (client mode): 0xf813f4f0
2025-12-12T20:54:04.224 [DEBUG] [Thread-76476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:54:04.241 [DEBUG] [Thread-76476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:54:04.241 [INFO] [Thread-76476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] client lang: <none>
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] server lang: <none>
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] kex follows: False
2025-12-12T20:54:04.249 [DEBUG] [Thread-76476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:54:04.250 [DEBUG] [Thread-76476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:54:04.250 [DEBUG] [Thread-76476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:54:04.250 [DEBUG] [Thread-76476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:54:04.250 [DEBUG] [Thread-76476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:54:04.250 [DEBUG] [Thread-76476] [transport.py] [_log()] Compression: none
2025-12-12T20:54:04.250 [DEBUG] [Thread-76476] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:54:04.306 [DEBUG] [Thread-76476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:54:04.306 [DEBUG] [Thread-76476] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:54:04.307 [DEBUG] [Thread-76476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:54:04.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:54:04.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:54:04.362 [DEBUG] [Thread-76476] [transport.py] [_log()] userauth is OK
2025-12-12T20:54:04.363 [DEBUG] [Thread-76476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:54:04.363 [DEBUG] [Thread-76476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:54:04.363 [DEBUG] [Thread-76476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:54:04.363 [DEBUG] [Thread-76476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:54:04.383 [INFO] [Thread-76476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:54:04.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:54:04.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:54:05.287 [DEBUG] [Thread-76476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:54:05.288 [DEBUG] [Thread-76476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:54:05.336 [DEBUG] [Thread-76476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:54:05.336 [DEBUG] [Thread-76476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:54:05.344 [DEBUG] [Thread-76476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:54:05.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:54:05.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:54:05.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:54:05.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:54:05.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:54:05.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:54:05.378 [DEBUG] [Thread-76476] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:54:08.909 [DEBUG] [Thread-76478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:18.218 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:18.220 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:19.217 [DEBUG] [Thread-76479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:34.246 [DEBUG] [Thread-76480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:54:35.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:54:35.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:54:35.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:54:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 54, 26), 4.27, 74.83, 0.0, 38.5, 11.31, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:54:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:54:26
2025-12-12T20:54:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:54:36.401 [DEBUG] [Thread-76481] [transport.py] [_log()] starting thread (client mode): 0xf57e25f0
2025-12-12T20:54:36.401 [DEBUG] [Thread-76481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:54:36.421 [DEBUG] [Thread-76481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:54:36.421 [INFO] [Thread-76481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:54:36.424 [DEBUG] [Thread-76481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] client lang: <none>
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] server lang: <none>
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] kex follows: False
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] Compression: none
2025-12-12T20:54:36.425 [DEBUG] [Thread-76481] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:54:36.441 [DEBUG] [Thread-76481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:54:36.441 [DEBUG] [Thread-76481] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:54:36.441 [DEBUG] [Thread-76481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:54:36.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:54:36.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:54:36.442 [DEBUG] [Thread-76481] [transport.py] [_log()] userauth is OK
2025-12-12T20:54:36.442 [DEBUG] [Thread-76481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:54:36.442 [DEBUG] [Thread-76481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:54:36.442 [DEBUG] [Thread-76481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:54:36.442 [DEBUG] [Thread-76481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:54:36.458 [INFO] [Thread-76481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:54:36.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:54:37.103 [DEBUG] [Thread-76481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:54:37.103 [DEBUG] [Thread-76481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:54:37.103 [DEBUG] [Thread-76481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:54:37.144 [DEBUG] [Thread-76481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:54:37.144 [DEBUG] [Thread-76481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:54:37.146 [DEBUG] [Thread-76481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:54:37.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:54:37.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:54:37.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:54:37.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:54:37.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:54:37.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:54:37.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:54:37.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:54:37.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:54:37.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.787601 -999.00  +11.20  27.84     79   +7.80 1 2 1 1 1     0    0 0.30 -146.73 ..... 33.1 27.8 336.6 40.3 12.6 -15.4 12.4 -11.7 12.1 -11.3 12.4 -12.6
2025-12-12T20:54:37.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.787601
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:54:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:54:26', tmtdew=4.27, humidity=74.83, cloud=0.0, wind=38.5, temperature=11.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:54:08.726', 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, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:54:37.170 [DEBUG] [Thread-76481] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:54:37.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:54:37.256 [DEBUG] [Thread-76484] [transport.py] [_log()] starting thread (client mode): 0xf57e0c70
2025-12-12T20:54:37.256 [DEBUG] [Thread-76484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:54:37.273 [DEBUG] [Thread-76484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:54:37.273 [INFO] [Thread-76484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:54:37.280 [DEBUG] [Thread-76484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:54:37.280 [DEBUG] [Thread-76484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:54:37.280 [DEBUG] [Thread-76484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] client lang: <none>
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] server lang: <none>
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] kex follows: False
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] Compression: none
2025-12-12T20:54:37.281 [DEBUG] [Thread-76484] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:54:37.337 [DEBUG] [Thread-76484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:54:37.337 [DEBUG] [Thread-76484] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:54:37.338 [DEBUG] [Thread-76484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:54:37.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:54:37.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:54:37.394 [DEBUG] [Thread-76484] [transport.py] [_log()] userauth is OK
2025-12-12T20:54:37.395 [DEBUG] [Thread-76484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:54:37.395 [DEBUG] [Thread-76484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:54:37.395 [DEBUG] [Thread-76484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:54:37.395 [DEBUG] [Thread-76484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:54:37.412 [INFO] [Thread-76484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:54:37.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:54:37.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:54:38.220 [DEBUG] [Thread-76484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:54:38.221 [DEBUG] [Thread-76484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:54:38.268 [DEBUG] [Thread-76484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:54:38.268 [DEBUG] [Thread-76484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:54:38.277 [DEBUG] [Thread-76484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:54:38.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:54:38.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:54:38.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
2025-12-12T20:54:38.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:54:38.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:54:38.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:54:38.308 [DEBUG] [Thread-76484] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:54:49.273 [DEBUG] [Thread-76486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:04.320 [DEBUG] [Thread-76487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:08.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:55:08.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:55:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:55:08.984 [DEBUG] [Thread-76488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 54, 58), 4.1, 75.66, 0.0, 41.69, 11.2, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:55:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:54:58
2025-12-12T20:55:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:55:09.285 [DEBUG] [Thread-76489] [transport.py] [_log()] starting thread (client mode): 0xf81e5960
2025-12-12T20:55:09.285 [DEBUG] [Thread-76489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:55:09.300 [DEBUG] [Thread-76489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:55:09.300 [INFO] [Thread-76489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] client lang: <none>
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] server lang: <none>
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] kex follows: False
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] Compression: none
2025-12-12T20:55:09.302 [DEBUG] [Thread-76489] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:55:09.321 [DEBUG] [Thread-76489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:55:09.322 [DEBUG] [Thread-76489] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:55:09.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:55:09.323 [DEBUG] [Thread-76489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:55:09.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:55:09.325 [DEBUG] [Thread-76489] [transport.py] [_log()] userauth is OK
2025-12-12T20:55:09.325 [DEBUG] [Thread-76489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:55:09.325 [DEBUG] [Thread-76489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:55:09.326 [DEBUG] [Thread-76489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:55:09.326 [DEBUG] [Thread-76489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:55:09.349 [INFO] [Thread-76489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:55:09.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:55:10.551 [DEBUG] [Thread-76489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:55:10.552 [DEBUG] [Thread-76489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:55:10.552 [DEBUG] [Thread-76489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:55:10.593 [DEBUG] [Thread-76489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:55:10.593 [DEBUG] [Thread-76489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:55:10.595 [DEBUG] [Thread-76489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:55:10.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:55:10.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:55:10.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:55:10.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:55:10.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:55:10.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:55:10.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:55:10.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:55:10.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:55:10.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.787948 -999.00  +11.20  37.59     79   +7.80 1 2 2 1 1     0    0 -0.17 -158.48 ..... 41.1 37.6 339.1 47.0 12.5 -16.3 12.4 -14.3 12.1 -11.6 12.4 -12.5
2025-12-12T20:55:10.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:55:10.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:55:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.787948
2025-12-12T20:55:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:55:10.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:55:10.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:55:10.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:55:10.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:55:10.656 [DEBUG] [Thread-76489] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:55:10.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:54:58', tmtdew=4.1, humidity=75.66, cloud=0.0, wind=41.69, temperature=11.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:54:38.707', 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, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:55:10.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:55:10.745 [DEBUG] [Thread-76492] [transport.py] [_log()] starting thread (client mode): 0xf81e4700
2025-12-12T20:55:10.745 [DEBUG] [Thread-76492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:55:10.759 [DEBUG] [Thread-76492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:55:10.759 [INFO] [Thread-76492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:10.767 [DEBUG] [Thread-76492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] client lang: <none>
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] server lang: <none>
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] kex follows: False
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:55:10.768 [DEBUG] [Thread-76492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:55:10.769 [DEBUG] [Thread-76492] [transport.py] [_log()] Compression: none
2025-12-12T20:55:10.769 [DEBUG] [Thread-76492] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:55:10.826 [DEBUG] [Thread-76492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:55:10.826 [DEBUG] [Thread-76492] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:55:10.827 [DEBUG] [Thread-76492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:55:10.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:55:10.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:55:10.883 [DEBUG] [Thread-76492] [transport.py] [_log()] userauth is OK
2025-12-12T20:55:10.883 [DEBUG] [Thread-76492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:55:10.883 [DEBUG] [Thread-76492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:55:10.883 [DEBUG] [Thread-76492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:55:10.883 [DEBUG] [Thread-76492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:55:10.905 [INFO] [Thread-76492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:55:10.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:55:10.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:55:11.730 [DEBUG] [Thread-76492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:55:11.730 [DEBUG] [Thread-76492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:55:11.778 [DEBUG] [Thread-76492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:55:11.778 [DEBUG] [Thread-76492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:55:11.787 [DEBUG] [Thread-76492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:55:11.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:55:11.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:55:11.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:55:11.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:55:11.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:55:11.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:55:11.821 [DEBUG] [Thread-76492] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:55:18.425 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:18.425 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:19.349 [DEBUG] [Thread-76494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:34.393 [DEBUG] [Thread-76495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:55:41.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:55:41.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:55:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:55:42.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 55, 30), 4.03, 76.01, 0.0, 37.48, 11.15, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:55:42.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:55:30
2025-12-12T20:55:42.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:55:42.772 [DEBUG] [Thread-76496] [transport.py] [_log()] starting thread (client mode): 0xf813e1d0
2025-12-12T20:55:42.772 [DEBUG] [Thread-76496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:55:42.792 [DEBUG] [Thread-76496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:55:42.792 [INFO] [Thread-76496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] client lang: <none>
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] server lang: <none>
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] kex follows: False
2025-12-12T20:55:42.796 [DEBUG] [Thread-76496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:55:42.797 [DEBUG] [Thread-76496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:55:42.797 [DEBUG] [Thread-76496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:55:42.797 [DEBUG] [Thread-76496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:55:42.797 [DEBUG] [Thread-76496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:55:42.797 [DEBUG] [Thread-76496] [transport.py] [_log()] Compression: none
2025-12-12T20:55:42.797 [DEBUG] [Thread-76496] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:55:42.823 [DEBUG] [Thread-76496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:55:42.824 [DEBUG] [Thread-76496] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:55:42.824 [DEBUG] [Thread-76496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:55:42.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:55:42.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:55:42.827 [DEBUG] [Thread-76496] [transport.py] [_log()] userauth is OK
2025-12-12T20:55:42.827 [DEBUG] [Thread-76496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:55:42.827 [DEBUG] [Thread-76496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:55:42.827 [DEBUG] [Thread-76496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:55:42.827 [DEBUG] [Thread-76496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:55:42.863 [INFO] [Thread-76496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:55:42.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:55:43.513 [DEBUG] [Thread-76496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:55:43.513 [DEBUG] [Thread-76496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:55:43.513 [DEBUG] [Thread-76496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:55:43.554 [DEBUG] [Thread-76496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:55:43.554 [DEBUG] [Thread-76496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:55:43.558 [DEBUG] [Thread-76496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:55:43.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:55:43.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:55:43.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:55:43.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:55:43.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:55:43.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:55:43.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:55:43.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:55:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:55:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.788296 -999.00  +11.10  34.98     80   +7.80 1 2 2 2 1     0    0 -0.02 -152.28 ..... 30.8 35.0 325.8 47.3 12.5 -12.1 12.3 -13.0 12.1 -8.6 12.4 -9.2
2025-12-12T20:55:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:55:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:55:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.788296
2025-12-12T20:55:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:55:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:55:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:55:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:55:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:55:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:55:30', tmtdew=4.03, humidity=76.01, cloud=0.0, wind=37.48, temperature=11.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:55:08.774', 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, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:55:43.584 [DEBUG] [Thread-76496] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:55:43.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:55:43.682 [DEBUG] [Thread-76499] [transport.py] [_log()] starting thread (client mode): 0xf813e380
2025-12-12T20:55:43.682 [DEBUG] [Thread-76499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:55:43.696 [DEBUG] [Thread-76499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:55:43.696 [INFO] [Thread-76499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] client lang: <none>
2025-12-12T20:55:43.703 [DEBUG] [Thread-76499] [transport.py] [_log()] server lang: <none>
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] kex follows: False
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] Compression: none
2025-12-12T20:55:43.704 [DEBUG] [Thread-76499] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:55:43.762 [DEBUG] [Thread-76499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:55:43.762 [DEBUG] [Thread-76499] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:55:43.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:55:43.763 [DEBUG] [Thread-76499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:55:43.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:55:43.822 [DEBUG] [Thread-76499] [transport.py] [_log()] userauth is OK
2025-12-12T20:55:43.822 [DEBUG] [Thread-76499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:55:43.823 [DEBUG] [Thread-76499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:55:43.823 [DEBUG] [Thread-76499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:55:43.823 [DEBUG] [Thread-76499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:55:43.840 [INFO] [Thread-76499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:55:43.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:55:43.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:55:44.689 [DEBUG] [Thread-76499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:55:44.690 [DEBUG] [Thread-76499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:55:44.738 [DEBUG] [Thread-76499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:55:44.738 [DEBUG] [Thread-76499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:55:44.747 [DEBUG] [Thread-76499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:55:44.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:55: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')
2025-12-12T20:55: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
2025-12-12T20:55:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:55:44.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:55:44.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:55:44.781 [DEBUG] [Thread-76499] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:55:49.422 [DEBUG] [Thread-76501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:04.471 [DEBUG] [Thread-76502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:09.059 [DEBUG] [Thread-76503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:56:14.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:56:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:56:15.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 56, 2), 3.97, 76.34, 0.0, 39.54, 11.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:56:15.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:56:02
2025-12-12T20:56:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:56:15.730 [DEBUG] [Thread-76504] [transport.py] [_log()] starting thread (client mode): 0xf5773d30
2025-12-12T20:56:15.730 [DEBUG] [Thread-76504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:56:15.744 [DEBUG] [Thread-76504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:56:15.744 [INFO] [Thread-76504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:15.748 [DEBUG] [Thread-76504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] client lang: <none>
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] server lang: <none>
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] kex follows: False
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] Compression: none
2025-12-12T20:56:15.749 [DEBUG] [Thread-76504] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:56:15.765 [DEBUG] [Thread-76504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:56:15.766 [DEBUG] [Thread-76504] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:56:15.766 [DEBUG] [Thread-76504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:56:15.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:56:15.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:56:15.768 [DEBUG] [Thread-76504] [transport.py] [_log()] userauth is OK
2025-12-12T20:56:15.768 [DEBUG] [Thread-76504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:56:15.768 [DEBUG] [Thread-76504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:56:15.768 [DEBUG] [Thread-76504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:56:15.768 [DEBUG] [Thread-76504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:56:15.787 [INFO] [Thread-76504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:56:15.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:56:16.581 [DEBUG] [Thread-76504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:56:16.581 [DEBUG] [Thread-76504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:56:16.582 [DEBUG] [Thread-76504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:56:16.623 [DEBUG] [Thread-76504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:56:16.623 [DEBUG] [Thread-76504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:56:16.626 [DEBUG] [Thread-76504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:56:16.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:56:16.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:56:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:56:16.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:56:16.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:56:16.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:56:16.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:56:16.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:56:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:56:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.788643 -999.00  +11.00  34.65     80   +7.80 1 3 2 2 1     0    0 -0.18 -156.39 ZNES. 35.6 34.6 309.8 47.1 12.5 -11.4 12.3 -10.7 12.0 -7.9 12.4 -7.8
2025-12-12T20:56:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:56:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:56:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.788643
2025-12-12T20:56:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:56:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:56:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:56:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:56:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:56:16.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:56:02', tmtdew=3.97, humidity=76.34, cloud=0.0, wind=39.54, temperature=11.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:55:38.755', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:56:16.654 [DEBUG] [Thread-76504] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:56:16.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:56:16.749 [DEBUG] [Thread-76507] [transport.py] [_log()] starting thread (client mode): 0xf575d810
2025-12-12T20:56:16.749 [DEBUG] [Thread-76507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:56:16.764 [DEBUG] [Thread-76507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:56:16.764 [INFO] [Thread-76507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] client lang: <none>
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] server lang: <none>
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] kex follows: False
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:56:16.771 [DEBUG] [Thread-76507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:56:16.772 [DEBUG] [Thread-76507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:56:16.772 [DEBUG] [Thread-76507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:56:16.772 [DEBUG] [Thread-76507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:56:16.772 [DEBUG] [Thread-76507] [transport.py] [_log()] Compression: none
2025-12-12T20:56:16.772 [DEBUG] [Thread-76507] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:56:16.830 [DEBUG] [Thread-76507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:56:16.830 [DEBUG] [Thread-76507] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:56:16.831 [DEBUG] [Thread-76507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:56:16.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:56:16.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:56:16.886 [DEBUG] [Thread-76507] [transport.py] [_log()] userauth is OK
2025-12-12T20:56:16.887 [DEBUG] [Thread-76507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:56:16.887 [DEBUG] [Thread-76507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:56:16.887 [DEBUG] [Thread-76507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:56:16.887 [DEBUG] [Thread-76507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:56:16.906 [INFO] [Thread-76507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:56:16.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:56:16.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:56:17.764 [DEBUG] [Thread-76507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:56:17.764 [DEBUG] [Thread-76507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:56:17.813 [DEBUG] [Thread-76507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:56:17.813 [DEBUG] [Thread-76507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:56:17.822 [DEBUG] [Thread-76507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:56:17.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:56:17.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:56:17.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:56:17.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:56:17.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:56:17.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:56:17.856 [DEBUG] [Thread-76507] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:56:18.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:18.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:19.498 [DEBUG] [Thread-76509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:34.551 [DEBUG] [Thread-76510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:56:47.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:56:47.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:56:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 56, 34), 3.81, 77.37, 0.0, 41.43, 11.11, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:56:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:56:34
2025-12-12T20:56:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:56:48.804 [DEBUG] [Thread-76511] [transport.py] [_log()] starting thread (client mode): 0xf575ca00
2025-12-12T20:56:48.804 [DEBUG] [Thread-76511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:56:48.824 [DEBUG] [Thread-76511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:56:48.824 [INFO] [Thread-76511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] client lang: <none>
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] server lang: <none>
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] kex follows: False
2025-12-12T20:56:48.827 [DEBUG] [Thread-76511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:56:48.828 [DEBUG] [Thread-76511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:56:48.828 [DEBUG] [Thread-76511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:56:48.828 [DEBUG] [Thread-76511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:56:48.828 [DEBUG] [Thread-76511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:56:48.828 [DEBUG] [Thread-76511] [transport.py] [_log()] Compression: none
2025-12-12T20:56:48.828 [DEBUG] [Thread-76511] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:56:48.844 [DEBUG] [Thread-76511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:56:48.845 [DEBUG] [Thread-76511] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:56:48.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:56:48.846 [DEBUG] [Thread-76511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:56:48.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:56:48.848 [DEBUG] [Thread-76511] [transport.py] [_log()] userauth is OK
2025-12-12T20:56:48.848 [DEBUG] [Thread-76511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:56:48.848 [DEBUG] [Thread-76511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:56:48.848 [DEBUG] [Thread-76511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:56:48.848 [DEBUG] [Thread-76511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:56:48.873 [INFO] [Thread-76511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:56:48.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:56:49.491 [DEBUG] [Thread-76511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:56:49.491 [DEBUG] [Thread-76511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:56:49.491 [DEBUG] [Thread-76511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:56:49.532 [DEBUG] [Thread-76511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:56:49.532 [DEBUG] [Thread-76511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:56:49.535 [DEBUG] [Thread-76511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:56:49.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:56:49.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:56:49.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:56:49.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:56:49.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:56:49.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:56:49.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:56:49.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:56:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:56:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.788990 -999.00  +11.10  29.89     80   +7.90 1 2 1 2 1     0    0 -0.41 -160.90 ZNES. 30.7 29.9 319.8 43.8 12.4 -13.1 12.3 -11.1 12.0 -9.1 12.4 -10.2
2025-12-12T20:56:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:56:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:56:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.788990
2025-12-12T20:56:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:56:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:56:49.559 [DEBUG] [Thread-76511] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:56:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:56:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:56:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:56:49.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:56:34', tmtdew=3.81, humidity=77.37, cloud=0.0, wind=41.43, temperature=11.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:56:08.736', 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, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:56:49.577 [DEBUG] [Thread-76514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:56:49.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:56:49.657 [DEBUG] [Thread-76515] [transport.py] [_log()] starting thread (client mode): 0xf575e1d0
2025-12-12T20:56:49.657 [DEBUG] [Thread-76515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:56:49.672 [DEBUG] [Thread-76515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:56:49.672 [INFO] [Thread-76515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:56:49.679 [DEBUG] [Thread-76515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:56:49.679 [DEBUG] [Thread-76515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:56:49.679 [DEBUG] [Thread-76515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:56:49.679 [DEBUG] [Thread-76515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:49.679 [DEBUG] [Thread-76515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:56:49.679 [DEBUG] [Thread-76515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] client lang: <none>
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] server lang: <none>
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] kex follows: False
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] Compression: none
2025-12-12T20:56:49.680 [DEBUG] [Thread-76515] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:56:49.738 [DEBUG] [Thread-76515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:56:49.739 [DEBUG] [Thread-76515] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:56:49.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:56:49.739 [DEBUG] [Thread-76515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:56:49.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:56:49.794 [DEBUG] [Thread-76515] [transport.py] [_log()] userauth is OK
2025-12-12T20:56:49.795 [DEBUG] [Thread-76515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:56:49.795 [DEBUG] [Thread-76515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:56:49.795 [DEBUG] [Thread-76515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:56:49.795 [DEBUG] [Thread-76515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:56:49.813 [INFO] [Thread-76515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:56:49.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:56:49.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:56:50.677 [DEBUG] [Thread-76515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:56:50.677 [DEBUG] [Thread-76515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:56:50.725 [DEBUG] [Thread-76515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:56:50.725 [DEBUG] [Thread-76515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:56:50.734 [DEBUG] [Thread-76515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:56:50.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:56:50.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:56:50.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:56:50.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:56:50.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:56:50.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:56:50.769 [DEBUG] [Thread-76515] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:57:04.613 [DEBUG] [Thread-76517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:09.129 [DEBUG] [Thread-76518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:18.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:18.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:19.645 [DEBUG] [Thread-76519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:20.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:57:20.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:57:20.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:57:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 57, 6), 3.82, 77.32, 0.0, 41.46, 11.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:57:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:57:06
2025-12-12T20:57:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:57:21.746 [DEBUG] [Thread-76520] [transport.py] [_log()] starting thread (client mode): 0xf5773520
2025-12-12T20:57:21.746 [DEBUG] [Thread-76520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:57:21.767 [DEBUG] [Thread-76520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:57:21.767 [INFO] [Thread-76520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:21.770 [DEBUG] [Thread-76520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] client lang: <none>
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] server lang: <none>
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] kex follows: False
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] Compression: none
2025-12-12T20:57:21.771 [DEBUG] [Thread-76520] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:57:21.788 [DEBUG] [Thread-76520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:57:21.789 [DEBUG] [Thread-76520] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:57:21.790 [DEBUG] [Thread-76520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:57:21.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:57:21.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:57:21.792 [DEBUG] [Thread-76520] [transport.py] [_log()] userauth is OK
2025-12-12T20:57:21.792 [DEBUG] [Thread-76520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:57:21.792 [DEBUG] [Thread-76520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:57:21.793 [DEBUG] [Thread-76520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:57:21.793 [DEBUG] [Thread-76520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:57:21.811 [INFO] [Thread-76520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:57:21.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:57:22.529 [DEBUG] [Thread-76520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:57:22.529 [DEBUG] [Thread-76520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:57:22.529 [DEBUG] [Thread-76520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:57:22.570 [DEBUG] [Thread-76520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:57:22.570 [DEBUG] [Thread-76520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:57:22.573 [DEBUG] [Thread-76520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:57:22.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:57:22.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:57:22.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:57:22.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:57:22.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:57:22.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:57:22.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:57:22.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:57:22.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:57:22.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.789337 -999.00  +11.20  40.13     80   +7.90 1 3 2 2 1     0    0 -0.63 -169.31 ZNES. 38.4 40.1 327.8 47.2 12.4 -11.6 12.2 -10.7 12.1 -7.8 12.4 -9.2
2025-12-12T20:57:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:57:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:57:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.789337
2025-12-12T20:57:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:57:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:57:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:57:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:57:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:57:22.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:57:06', tmtdew=3.82, humidity=77.32, cloud=0.0, wind=41.46, temperature=11.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:56:38.717', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:57:22.601 [DEBUG] [Thread-76520] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:57:22.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:57:22.707 [DEBUG] [Thread-76523] [transport.py] [_log()] starting thread (client mode): 0xf574fe50
2025-12-12T20:57:22.707 [DEBUG] [Thread-76523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:57:22.722 [DEBUG] [Thread-76523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:57:22.722 [INFO] [Thread-76523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] client lang: <none>
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] server lang: <none>
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] kex follows: False
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:57:22.729 [DEBUG] [Thread-76523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:57:22.730 [DEBUG] [Thread-76523] [transport.py] [_log()] Compression: none
2025-12-12T20:57:22.730 [DEBUG] [Thread-76523] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:57:22.785 [DEBUG] [Thread-76523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:57:22.786 [DEBUG] [Thread-76523] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:57:22.786 [DEBUG] [Thread-76523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:57:22.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:57:22.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:57:22.842 [DEBUG] [Thread-76523] [transport.py] [_log()] userauth is OK
2025-12-12T20:57:22.842 [DEBUG] [Thread-76523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:57:22.842 [DEBUG] [Thread-76523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:57:22.842 [DEBUG] [Thread-76523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:57:22.843 [DEBUG] [Thread-76523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:57:22.860 [INFO] [Thread-76523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:57:22.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:57:22.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:57:23.686 [DEBUG] [Thread-76523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:57:23.686 [DEBUG] [Thread-76523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:57:23.734 [DEBUG] [Thread-76523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:57:23.734 [DEBUG] [Thread-76523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:57:23.743 [DEBUG] [Thread-76523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:57:23.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:57:23.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:57:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:57:23.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:57:23.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:57:23.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:57:23.777 [DEBUG] [Thread-76523] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:57:34.675 [DEBUG] [Thread-76525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:49.720 [DEBUG] [Thread-76526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:57:53.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:57:53.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:57:53.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:57:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 57, 38), 3.8, 77.46, 0.0, 38.43, 11.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:57:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:57:38
2025-12-12T20:57:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:57:54.763 [DEBUG] [Thread-76527] [transport.py] [_log()] starting thread (client mode): 0xf575e470
2025-12-12T20:57:54.764 [DEBUG] [Thread-76527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:57:54.778 [DEBUG] [Thread-76527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:57:54.778 [INFO] [Thread-76527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:57:54.781 [DEBUG] [Thread-76527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] client lang: <none>
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] server lang: <none>
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] kex follows: False
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] Compression: none
2025-12-12T20:57:54.782 [DEBUG] [Thread-76527] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:57:54.800 [DEBUG] [Thread-76527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:57:54.801 [DEBUG] [Thread-76527] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:57:54.801 [DEBUG] [Thread-76527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:57:54.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:57:54.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:57:54.804 [DEBUG] [Thread-76527] [transport.py] [_log()] userauth is OK
2025-12-12T20:57:54.804 [DEBUG] [Thread-76527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:57:54.804 [DEBUG] [Thread-76527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:57:54.804 [DEBUG] [Thread-76527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:57:54.804 [DEBUG] [Thread-76527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:57:54.833 [INFO] [Thread-76527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:57:54.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:57:55.477 [DEBUG] [Thread-76527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:57:55.477 [DEBUG] [Thread-76527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:57:55.478 [DEBUG] [Thread-76527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:57:55.518 [DEBUG] [Thread-76527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:57:55.518 [DEBUG] [Thread-76527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:57:55.522 [DEBUG] [Thread-76527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:57:55.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:57:55.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:57:55.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:57:55.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:57:55.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:57:55.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:57:55.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:57:55.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:57:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:57:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.789684 -999.00  +11.00  29.22     80   +7.90 1 3 1 2 1     0    0 -0.94 -176.51 Z.ES. 27.6 29.2 316.8 50.5 12.4 -12.3 12.2 -10.4 12.1 -9.4 12.3 -9.1
2025-12-12T20:57:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:57:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:57:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.789684
2025-12-12T20:57:55.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:57:55.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:57:55.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:57:55.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:57:55.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T20:57:55.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:57:38', tmtdew=3.8, humidity=77.46, cloud=0.0, wind=38.43, temperature=11.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:57:08.698', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.3324999999999996, nan, nan, nan, nan, nan, nan, 0.5069999999999988, 0.14150000000000063, 0.2837499999999995, nan, nan, nan, nan, nan, 0.223749999999999], zp_timestamp='2025-12-12T18:50:00')
2025-12-12T20:57:55.550 [DEBUG] [Thread-76527] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:57:55.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:57:55.651 [DEBUG] [Thread-76530] [transport.py] [_log()] starting thread (client mode): 0xf81c04f0
2025-12-12T20:57:55.652 [DEBUG] [Thread-76530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:57:55.669 [DEBUG] [Thread-76530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:57:55.670 [INFO] [Thread-76530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:57:55.681 [DEBUG] [Thread-76530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] client lang: <none>
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] server lang: <none>
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] kex follows: False
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] Compression: none
2025-12-12T20:57:55.682 [DEBUG] [Thread-76530] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:57:55.744 [DEBUG] [Thread-76530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:57:55.745 [DEBUG] [Thread-76530] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:57:55.745 [DEBUG] [Thread-76530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:57:55.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:57:55.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:57:55.806 [DEBUG] [Thread-76530] [transport.py] [_log()] userauth is OK
2025-12-12T20:57:55.806 [DEBUG] [Thread-76530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:57:55.806 [DEBUG] [Thread-76530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:57:55.806 [DEBUG] [Thread-76530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:57:55.807 [DEBUG] [Thread-76530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:57:55.828 [INFO] [Thread-76530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:57:55.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:57:55.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:57:56.681 [DEBUG] [Thread-76530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:57:56.681 [DEBUG] [Thread-76530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:57:56.729 [DEBUG] [Thread-76530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:57:56.729 [DEBUG] [Thread-76530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:57:56.738 [DEBUG] [Thread-76530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:57:56.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:57:56.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:57:56.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:57:56.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:57:56.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:57:56.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:57:56.773 [DEBUG] [Thread-76530] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:58:04.746 [DEBUG] [Thread-76532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:09.204 [DEBUG] [Thread-76533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:19.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:19.045 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:19.799 [DEBUG] [Thread-76534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:58:26.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:58:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:58:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 58, 10), 3.74, 77.75, 0.0, 35.06, 11.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:58:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:58:10
2025-12-12T20:58:27.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:58:27.741 [DEBUG] [Thread-76535] [transport.py] [_log()] starting thread (client mode): 0xf81c1360
2025-12-12T20:58:27.742 [DEBUG] [Thread-76535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:58:27.752 [DEBUG] [Thread-76535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:58:27.752 [INFO] [Thread-76535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:58:27.754 [DEBUG] [Thread-76535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] client lang: <none>
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] server lang: <none>
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] kex follows: False
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] Compression: none
2025-12-12T20:58:27.755 [DEBUG] [Thread-76535] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:58:27.777 [DEBUG] [Thread-76535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:58:27.777 [DEBUG] [Thread-76535] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:58:27.777 [DEBUG] [Thread-76535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:58:27.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:58:27.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:58:27.778 [DEBUG] [Thread-76535] [transport.py] [_log()] userauth is OK
2025-12-12T20:58:27.778 [DEBUG] [Thread-76535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:58:27.778 [DEBUG] [Thread-76535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:58:27.778 [DEBUG] [Thread-76535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:58:27.778 [DEBUG] [Thread-76535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:58:27.793 [INFO] [Thread-76535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:58:27.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:58:28.485 [DEBUG] [Thread-76535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:58:28.485 [DEBUG] [Thread-76535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:58:28.485 [DEBUG] [Thread-76535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:58:28.526 [DEBUG] [Thread-76535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:58:28.526 [DEBUG] [Thread-76535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:58:28.528 [DEBUG] [Thread-76535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:58:28.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:58:28.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:58:28.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:58:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:58:28.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:58:28.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:58:28.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.790379 -999.00  +11.20  31.96     80   +7.90 1 2 2 2 1     0    0 -1.69 -195.06 Z.ES. 32.2 32.0 316.4 41.3 12.4 -11.3 12.2 -11.5 12.0 -9.5 12.3 -8.3
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.790379
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:58:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:58:10', tmtdew=3.74, humidity=77.75, cloud=0.0, wind=35.06, temperature=11.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:58:08.746', 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.23399999999999999, 0.4087500000000004, nan, nan, nan, nan, nan, 0.2987499999999992], zp_timestamp='2025-12-12T18:56:00')
2025-12-12T20:58:28.549 [DEBUG] [Thread-76535] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:58:28.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:58:28.634 [DEBUG] [Thread-76538] [transport.py] [_log()] starting thread (client mode): 0xf57e0d60
2025-12-12T20:58:28.634 [DEBUG] [Thread-76538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:58:28.651 [DEBUG] [Thread-76538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:58:28.651 [INFO] [Thread-76538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:58:28.658 [DEBUG] [Thread-76538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] client lang: <none>
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] server lang: <none>
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] kex follows: False
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] Compression: none
2025-12-12T20:58:28.659 [DEBUG] [Thread-76538] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:58:28.717 [DEBUG] [Thread-76538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:58:28.717 [DEBUG] [Thread-76538] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:58:28.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:58:28.718 [DEBUG] [Thread-76538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:58:28.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:58:28.775 [DEBUG] [Thread-76538] [transport.py] [_log()] userauth is OK
2025-12-12T20:58:28.775 [DEBUG] [Thread-76538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:58:28.775 [DEBUG] [Thread-76538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:58:28.775 [DEBUG] [Thread-76538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:58:28.775 [DEBUG] [Thread-76538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:58:28.789 [INFO] [Thread-76538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:58:28.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:58:28.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:58:29.618 [DEBUG] [Thread-76538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:58:29.618 [DEBUG] [Thread-76538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:58:29.666 [DEBUG] [Thread-76538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:58:29.666 [DEBUG] [Thread-76538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:58:29.675 [DEBUG] [Thread-76538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:58:29.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:58:29.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:58:29.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:58:29.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:58:29.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:58:29.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:58:29.706 [DEBUG] [Thread-76538] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:58:34.834 [DEBUG] [Thread-76540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:49.880 [DEBUG] [Thread-76541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:58:59.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:58:59.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:58:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:59:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 58, 42), 3.69, 77.77, 0.0, 33.72, 11.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:59:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:58:42
2025-12-12T20:59:00.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:59:00.680 [DEBUG] [Thread-76542] [transport.py] [_log()] starting thread (client mode): 0xf57e3130
2025-12-12T20:59:00.681 [DEBUG] [Thread-76542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:59:00.701 [DEBUG] [Thread-76542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:59:00.701 [INFO] [Thread-76542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:59:00.704 [DEBUG] [Thread-76542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] client lang: <none>
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] server lang: <none>
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] kex follows: False
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:59:00.705 [DEBUG] [Thread-76542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:59:00.706 [DEBUG] [Thread-76542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:59:00.706 [DEBUG] [Thread-76542] [transport.py] [_log()] Compression: none
2025-12-12T20:59:00.706 [DEBUG] [Thread-76542] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:59:00.724 [DEBUG] [Thread-76542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:59:00.724 [DEBUG] [Thread-76542] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:59:00.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:59:00.725 [DEBUG] [Thread-76542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:59:00.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:59:00.727 [DEBUG] [Thread-76542] [transport.py] [_log()] userauth is OK
2025-12-12T20:59:00.727 [DEBUG] [Thread-76542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:59:00.727 [DEBUG] [Thread-76542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:59:00.728 [DEBUG] [Thread-76542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:59:00.728 [DEBUG] [Thread-76542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:59:00.752 [INFO] [Thread-76542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:59:00.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:59:01.394 [DEBUG] [Thread-76542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:59:01.394 [DEBUG] [Thread-76542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:59:01.395 [DEBUG] [Thread-76542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:59:01.436 [DEBUG] [Thread-76542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:59:01.436 [DEBUG] [Thread-76542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:59:01.439 [DEBUG] [Thread-76542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:59:01.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:59:01.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:59:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:59:01.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:59:01.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:59:01.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:59:01.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:59:01.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:59:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:59:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.790726 -999.00  +11.10  26.70     80   +8.00 1 2 1 2 1     0    0 -1.66 -196.64 Z.ES. 31.9 26.7 331.4 41.6 12.4 -11.6 12.2 -13.6 12.0 -11.5 12.4 -9.5
2025-12-12T20:59:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:59:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:59:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.790726
2025-12-12T20:59:01.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:59:01.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:59:01.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:59:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:59:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:59:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:58:42', tmtdew=3.69, humidity=77.77, cloud=0.0, wind=33.72, temperature=11.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:58:38.726', 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.23399999999999999, 0.4087500000000004, nan, nan, nan, nan, nan, 0.2987499999999992], zp_timestamp='2025-12-12T18:56:00')
2025-12-12T20:59:01.466 [DEBUG] [Thread-76542] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:59:01.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:59:01.562 [DEBUG] [Thread-76545] [transport.py] [_log()] starting thread (client mode): 0xf578b5b0
2025-12-12T20:59:01.562 [DEBUG] [Thread-76545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:59:01.576 [DEBUG] [Thread-76545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:59:01.576 [INFO] [Thread-76545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:01.584 [DEBUG] [Thread-76545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] client lang: <none>
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] server lang: <none>
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] kex follows: False
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] Compression: none
2025-12-12T20:59:01.585 [DEBUG] [Thread-76545] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:59:01.647 [DEBUG] [Thread-76545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:59:01.647 [DEBUG] [Thread-76545] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:59:01.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:59:01.648 [DEBUG] [Thread-76545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:59:01.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:59:01.702 [DEBUG] [Thread-76545] [transport.py] [_log()] userauth is OK
2025-12-12T20:59:01.703 [DEBUG] [Thread-76545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:59:01.703 [DEBUG] [Thread-76545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:59:01.703 [DEBUG] [Thread-76545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:59:01.703 [DEBUG] [Thread-76545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:59:01.722 [INFO] [Thread-76545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:59:01.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:59:01.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:59:02.573 [DEBUG] [Thread-76545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:59:02.573 [DEBUG] [Thread-76545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:59:02.621 [DEBUG] [Thread-76545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:59:02.621 [DEBUG] [Thread-76545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:59:02.630 [DEBUG] [Thread-76545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:59:02.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:59:02.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:59:02.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:59:02.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:59:02.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:59:02.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:59:02.663 [DEBUG] [Thread-76545] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:59:04.911 [DEBUG] [Thread-76547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:59:09.273 [DEBUG] [Thread-76548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:59:19.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:59:19.251 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:59:19.962 [DEBUG] [Thread-76549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:59:32.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T20:59:32.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T20:59:32.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T20:59:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 59, 15), 3.69, 77.74, 0.0, 33.84, 11.13, 0, 0, 0, 2, 0, 0),)
2025-12-12T20:59:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:59:15
2025-12-12T20:59:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T20:59:33.653 [DEBUG] [Thread-76550] [transport.py] [_log()] starting thread (client mode): 0xf574db40
2025-12-12T20:59:33.653 [DEBUG] [Thread-76550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:59:33.673 [DEBUG] [Thread-76550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T20:59:33.673 [INFO] [Thread-76550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] client lang: <none>
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] server lang: <none>
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] kex follows: False
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:59:33.676 [DEBUG] [Thread-76550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:59:33.677 [DEBUG] [Thread-76550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:59:33.677 [DEBUG] [Thread-76550] [transport.py] [_log()] Compression: none
2025-12-12T20:59:33.677 [DEBUG] [Thread-76550] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:59:33.694 [DEBUG] [Thread-76550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:59:33.694 [DEBUG] [Thread-76550] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:59:33.695 [DEBUG] [Thread-76550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T20:59:33.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T20:59:33.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:59:33.696 [DEBUG] [Thread-76550] [transport.py] [_log()] userauth is OK
2025-12-12T20:59:33.697 [DEBUG] [Thread-76550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:59:33.697 [DEBUG] [Thread-76550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:59:33.697 [DEBUG] [Thread-76550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T20:59:33.697 [DEBUG] [Thread-76550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:59:33.720 [INFO] [Thread-76550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:59:33.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:59:34.333 [DEBUG] [Thread-76550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:59:34.333 [DEBUG] [Thread-76550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:59:34.334 [DEBUG] [Thread-76550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T20:59:34.375 [DEBUG] [Thread-76550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:59:34.375 [DEBUG] [Thread-76550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:59:34.378 [DEBUG] [Thread-76550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:59:34.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:59:34.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T20:59:34.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T20:59:34.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T20:59:34.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:59:34.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T20:59:34.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:59:34.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:59:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T20:59:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.791073 -999.00  +11.10  27.08     81   +8.00 1 2 1 2 1     0    0 -0.98 -168.37 ZnESw 27.2 27.1 325.8 40.7 12.4 -9.9 12.2 -12.8 12.0 -8.7 12.3 -7.4
2025-12-12T20:59:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T20:59:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T20:59:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.791073
2025-12-12T20:59:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T20:59:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T20:59:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T20:59:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T20:59:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T20:59:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:59:15', tmtdew=3.69, humidity=77.74, cloud=0.0, wind=33.84, temperature=11.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:59:08.707', 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.23399999999999999, 0.4087500000000004, nan, nan, nan, nan, nan, 0.2987499999999992], zp_timestamp='2025-12-12T18:56:00')
2025-12-12T20:59:34.398 [DEBUG] [Thread-76550] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:59:34.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T20:59:34.494 [DEBUG] [Thread-76553] [transport.py] [_log()] starting thread (client mode): 0xf8157fd0
2025-12-12T20:59:34.494 [DEBUG] [Thread-76553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T20:59:34.508 [DEBUG] [Thread-76553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T20:59:34.508 [INFO] [Thread-76553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] client lang: <none>
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] server lang: <none>
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] kex follows: False
2025-12-12T20:59:34.516 [DEBUG] [Thread-76553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T20:59:34.517 [DEBUG] [Thread-76553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T20:59:34.517 [DEBUG] [Thread-76553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T20:59:34.517 [DEBUG] [Thread-76553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T20:59:34.517 [DEBUG] [Thread-76553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T20:59:34.517 [DEBUG] [Thread-76553] [transport.py] [_log()] Compression: none
2025-12-12T20:59:34.517 [DEBUG] [Thread-76553] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T20:59:34.577 [DEBUG] [Thread-76553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T20:59:34.578 [DEBUG] [Thread-76553] [transport.py] [_log()] Switch to new keys ...
2025-12-12T20:59:34.578 [DEBUG] [Thread-76553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T20:59:34.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T20:59:34.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T20:59:34.635 [DEBUG] [Thread-76553] [transport.py] [_log()] userauth is OK
2025-12-12T20:59:34.635 [DEBUG] [Thread-76553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T20:59:34.635 [DEBUG] [Thread-76553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T20:59:34.635 [DEBUG] [Thread-76553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T20:59:34.635 [DEBUG] [Thread-76553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T20:59:34.654 [INFO] [Thread-76553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T20:59:34.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T20:59:34.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T20:59:34.993 [DEBUG] [Thread-76555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T20:59:35.535 [DEBUG] [Thread-76553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T20:59:35.536 [DEBUG] [Thread-76553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T20:59:35.583 [DEBUG] [Thread-76553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T20:59:35.583 [DEBUG] [Thread-76553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T20:59:35.592 [DEBUG] [Thread-76553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T20:59:35.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T20:59:35.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T20:59:35.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T20:59:35.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T20:59:35.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T20:59:35.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T20:59:35.626 [DEBUG] [Thread-76553] [transport.py] [_log()] EOF in transport thread
2025-12-12T20:59:50.034 [DEBUG] [Thread-76556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:05.062 [DEBUG] [Thread-76557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:00:05.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:00:05.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:00:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 20, 59, 47), 3.71, 77.64, 0.0, 36.42, 11.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:00:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 20:59:47
2025-12-12T21:00:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:00:06.569 [DEBUG] [Thread-76558] [transport.py] [_log()] starting thread (client mode): 0xf81c0310
2025-12-12T21:00:06.570 [DEBUG] [Thread-76558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:00:06.592 [DEBUG] [Thread-76558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:00:06.592 [INFO] [Thread-76558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:06.595 [DEBUG] [Thread-76558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] client lang: <none>
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] server lang: <none>
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] kex follows: False
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:00:06.596 [DEBUG] [Thread-76558] [transport.py] [_log()] Compression: none
2025-12-12T21:00:06.597 [DEBUG] [Thread-76558] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:00:06.613 [DEBUG] [Thread-76558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:00:06.614 [DEBUG] [Thread-76558] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:00:06.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:00:06.615 [DEBUG] [Thread-76558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:00:06.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:00:06.617 [DEBUG] [Thread-76558] [transport.py] [_log()] userauth is OK
2025-12-12T21:00:06.617 [DEBUG] [Thread-76558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:00:06.618 [DEBUG] [Thread-76558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:00:06.618 [DEBUG] [Thread-76558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:00:06.618 [DEBUG] [Thread-76558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:00:06.642 [INFO] [Thread-76558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:00:06.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:00:07.480 [DEBUG] [Thread-76558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:00:07.480 [DEBUG] [Thread-76558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:00:07.481 [DEBUG] [Thread-76558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:00:07.521 [DEBUG] [Thread-76558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:00:07.521 [DEBUG] [Thread-76558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:00:07.524 [DEBUG] [Thread-76558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:00:07.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:00:07.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:00:07.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:00:07.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:00:07.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:00:07.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:00:07.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:00:07.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:00:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:00:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.791420 -999.00  +11.10  30.32     81   +8.00 1 3 2 2 1     0    0 -0.69 -160.06 Z.ESW 31.9 30.3 317.6 41.3 12.4 -5.7 12.3 -7.7 12.1 -4.3 12.3 -4.0
2025-12-12T21:00:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:00:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:00:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.791420
2025-12-12T21:00:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:00:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:00:07.548 [DEBUG] [Thread-76558] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:00:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:00:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:00:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:00:07.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T20:59:47', tmtdew=3.71, humidity=77.64, cloud=0.0, wind=36.42, temperature=11.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T18:59:38.688', atlas_cloud=3, 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.23399999999999999, 0.4087500000000004, nan, nan, nan, nan, nan, 0.2987499999999992], zp_timestamp='2025-12-12T18:56:00')
2025-12-12T21:00:07.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:00:07.642 [DEBUG] [Thread-76561] [transport.py] [_log()] starting thread (client mode): 0xf574cf70
2025-12-12T21:00:07.642 [DEBUG] [Thread-76561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:00:07.656 [DEBUG] [Thread-76561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:00:07.656 [INFO] [Thread-76561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] client lang: <none>
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] server lang: <none>
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] kex follows: False
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:00:07.664 [DEBUG] [Thread-76561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:00:07.665 [DEBUG] [Thread-76561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:00:07.665 [DEBUG] [Thread-76561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:00:07.665 [DEBUG] [Thread-76561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:00:07.665 [DEBUG] [Thread-76561] [transport.py] [_log()] Compression: none
2025-12-12T21:00:07.665 [DEBUG] [Thread-76561] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:00:07.722 [DEBUG] [Thread-76561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:00:07.723 [DEBUG] [Thread-76561] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:00:07.723 [DEBUG] [Thread-76561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:00:07.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:00:07.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:00:07.779 [DEBUG] [Thread-76561] [transport.py] [_log()] userauth is OK
2025-12-12T21:00:07.779 [DEBUG] [Thread-76561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:00:07.779 [DEBUG] [Thread-76561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:00:07.779 [DEBUG] [Thread-76561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:00:07.779 [DEBUG] [Thread-76561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:00:07.797 [INFO] [Thread-76561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:00:07.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:00:07.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:00:08.615 [DEBUG] [Thread-76561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:00:08.615 [DEBUG] [Thread-76561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:00:08.663 [DEBUG] [Thread-76561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:00:08.663 [DEBUG] [Thread-76561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:00:08.672 [DEBUG] [Thread-76561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:00:08.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:00:08.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:00:08.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:00:08.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:00:08.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:00:08.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:00:08.707 [DEBUG] [Thread-76561] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:00:09.361 [DEBUG] [Thread-76563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:19.455 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:19.456 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:20.094 [DEBUG] [Thread-76564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:35.129 [DEBUG] [Thread-76565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:00:38.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:00:38.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:00:38.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:00:39.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 0, 19), 3.7, 77.69, 0.0, 37.51, 11.18, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:00:39.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:00:19
2025-12-12T21:00:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:00:39.681 [DEBUG] [Thread-76566] [transport.py] [_log()] starting thread (client mode): 0xf57a75b0
2025-12-12T21:00:39.681 [DEBUG] [Thread-76566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:00:39.701 [DEBUG] [Thread-76566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:00:39.701 [INFO] [Thread-76566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] client lang: <none>
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] server lang: <none>
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] kex follows: False
2025-12-12T21:00:39.704 [DEBUG] [Thread-76566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:00:39.705 [DEBUG] [Thread-76566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:00:39.705 [DEBUG] [Thread-76566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:00:39.705 [DEBUG] [Thread-76566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:00:39.705 [DEBUG] [Thread-76566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:00:39.705 [DEBUG] [Thread-76566] [transport.py] [_log()] Compression: none
2025-12-12T21:00:39.705 [DEBUG] [Thread-76566] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:00:39.722 [DEBUG] [Thread-76566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:00:39.723 [DEBUG] [Thread-76566] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:00:39.723 [DEBUG] [Thread-76566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:00:39.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:00:39.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:00:39.725 [DEBUG] [Thread-76566] [transport.py] [_log()] userauth is OK
2025-12-12T21:00:39.725 [DEBUG] [Thread-76566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:00:39.726 [DEBUG] [Thread-76566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:00:39.726 [DEBUG] [Thread-76566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:00:39.726 [DEBUG] [Thread-76566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:00:39.752 [INFO] [Thread-76566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:00:39.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:00:40.368 [DEBUG] [Thread-76566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:00:40.368 [DEBUG] [Thread-76566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:00:40.369 [DEBUG] [Thread-76566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:00:40.409 [DEBUG] [Thread-76566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:00:40.409 [DEBUG] [Thread-76566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:00:40.412 [DEBUG] [Thread-76566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:00:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:00:40.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:00:40.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:00:40.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:00:40.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:00:40.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:00:40.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:00:40.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:00:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:00:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.791767 -999.00  +11.00  30.79     81   +8.00 1 3 2 2 1     0    0 -1.06 -170.42 Z.ESW 31.7 30.8 322.4 47.1 12.4 -5.7 12.2 -5.8 11.9 -5.1 12.3 -4.2
2025-12-12T21:00:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:00:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:00:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.791767
2025-12-12T21:00:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:00:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:00:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:00:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:00:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:00:40.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:00:19', tmtdew=3.7, humidity=77.69, cloud=0.0, wind=37.51, temperature=11.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:00:08.669', atlas_cloud=3, 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.23399999999999999, 0.4087500000000004, nan, nan, nan, nan, nan, 0.2987499999999992], zp_timestamp='2025-12-12T18:56:00')
2025-12-12T21:00:40.437 [DEBUG] [Thread-76566] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:00:40.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:00:40.533 [DEBUG] [Thread-76569] [transport.py] [_log()] starting thread (client mode): 0xf57a7ac0
2025-12-12T21:00:40.533 [DEBUG] [Thread-76569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:00:40.547 [DEBUG] [Thread-76569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:00:40.547 [INFO] [Thread-76569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:00:40.555 [DEBUG] [Thread-76569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:00:40.555 [DEBUG] [Thread-76569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:00:40.555 [DEBUG] [Thread-76569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:00:40.555 [DEBUG] [Thread-76569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:40.555 [DEBUG] [Thread-76569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:00:40.555 [DEBUG] [Thread-76569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] client lang: <none>
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] server lang: <none>
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] kex follows: False
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:00:40.556 [DEBUG] [Thread-76569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:00:40.557 [DEBUG] [Thread-76569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:00:40.557 [DEBUG] [Thread-76569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:00:40.557 [DEBUG] [Thread-76569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:00:40.557 [DEBUG] [Thread-76569] [transport.py] [_log()] Compression: none
2025-12-12T21:00:40.557 [DEBUG] [Thread-76569] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:00:40.615 [DEBUG] [Thread-76569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:00:40.616 [DEBUG] [Thread-76569] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:00:40.616 [DEBUG] [Thread-76569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:00:40.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:00:40.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:00:40.674 [DEBUG] [Thread-76569] [transport.py] [_log()] userauth is OK
2025-12-12T21:00:40.675 [DEBUG] [Thread-76569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:00:40.675 [DEBUG] [Thread-76569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:00:40.675 [DEBUG] [Thread-76569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:00:40.675 [DEBUG] [Thread-76569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:00:40.693 [INFO] [Thread-76569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:00:40.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:00:40.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:00:41.509 [DEBUG] [Thread-76569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:00:41.510 [DEBUG] [Thread-76569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:00:41.558 [DEBUG] [Thread-76569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:00:41.558 [DEBUG] [Thread-76569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:00:41.567 [DEBUG] [Thread-76569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:00:41.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:00:41.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:00:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:00:41.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:00:41.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:00:41.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:00:41.601 [DEBUG] [Thread-76569] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:00:50.158 [DEBUG] [Thread-76571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:05.199 [DEBUG] [Thread-76572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:09.437 [DEBUG] [Thread-76573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:01:11.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:01:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:01:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 0, 51), 3.69, 77.75, 0.0, 39.35, 11.1, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:01:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:00:51
2025-12-12T21:01:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:01:12.546 [DEBUG] [Thread-76574] [transport.py] [_log()] starting thread (client mode): 0xf574c5e0
2025-12-12T21:01:12.546 [DEBUG] [Thread-76574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:01:12.564 [DEBUG] [Thread-76574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:01:12.564 [INFO] [Thread-76574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] client lang: <none>
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] server lang: <none>
2025-12-12T21:01:12.568 [DEBUG] [Thread-76574] [transport.py] [_log()] kex follows: False
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] Compression: none
2025-12-12T21:01:12.569 [DEBUG] [Thread-76574] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:01:12.587 [DEBUG] [Thread-76574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:01:12.588 [DEBUG] [Thread-76574] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:01:12.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:01:12.589 [DEBUG] [Thread-76574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:01:12.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:01:12.591 [DEBUG] [Thread-76574] [transport.py] [_log()] userauth is OK
2025-12-12T21:01:12.591 [DEBUG] [Thread-76574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:01:12.591 [DEBUG] [Thread-76574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:01:12.591 [DEBUG] [Thread-76574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:01:12.591 [DEBUG] [Thread-76574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:01:12.606 [INFO] [Thread-76574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:01:12.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:01:13.237 [DEBUG] [Thread-76574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:01:13.238 [DEBUG] [Thread-76574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:01:13.238 [DEBUG] [Thread-76574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:01:13.279 [DEBUG] [Thread-76574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:01:13.279 [DEBUG] [Thread-76574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:01:13.282 [DEBUG] [Thread-76574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:01:13.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:01:13.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:01:13.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:01:13.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:01:13.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:01:13.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:01:13.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:01:13.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:01:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:01:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.792115 -999.00  +11.10  30.61     81   +8.00 1 3 2 2 1     0    0 -1.21 -173.43 ..ES. 28.9 30.6 323.0 40.2 12.4 -5.7 12.2 -7.3 12.0 -5.8 12.3 -4.9
2025-12-12T21:01:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:01:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:01:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.792115
2025-12-12T21:01:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:01:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:01:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:01:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:01:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:01:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:00:51', tmtdew=3.69, humidity=77.75, cloud=0.0, wind=39.35, temperature=11.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:00:38.736', atlas_cloud=3, 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.23399999999999999, 0.4087500000000004, nan, nan, nan, nan, nan, 0.2987499999999992], zp_timestamp='2025-12-12T18:56:00')
2025-12-12T21:01:13.307 [DEBUG] [Thread-76574] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:01:13.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:01:13.401 [DEBUG] [Thread-76577] [transport.py] [_log()] starting thread (client mode): 0xf81c33d0
2025-12-12T21:01:13.401 [DEBUG] [Thread-76577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:01:13.416 [DEBUG] [Thread-76577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:01:13.416 [INFO] [Thread-76577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:01:13.423 [DEBUG] [Thread-76577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:01:13.424 [DEBUG] [Thread-76577] [transport.py] [_log()] client lang: <none>
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] server lang: <none>
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] kex follows: False
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:01:13.425 [DEBUG] [Thread-76577] [transport.py] [_log()] Compression: none
2025-12-12T21:01:13.426 [DEBUG] [Thread-76577] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:01:13.483 [DEBUG] [Thread-76577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:01:13.484 [DEBUG] [Thread-76577] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:01:13.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:01:13.485 [DEBUG] [Thread-76577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:01:13.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:01:13.539 [DEBUG] [Thread-76577] [transport.py] [_log()] userauth is OK
2025-12-12T21:01:13.539 [DEBUG] [Thread-76577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:01:13.539 [DEBUG] [Thread-76577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:01:13.540 [DEBUG] [Thread-76577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:01:13.540 [DEBUG] [Thread-76577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:01:13.558 [INFO] [Thread-76577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:01:13.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:01:13.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:01:14.394 [DEBUG] [Thread-76577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:01:14.394 [DEBUG] [Thread-76577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:01:14.442 [DEBUG] [Thread-76577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:01:14.442 [DEBUG] [Thread-76577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:01:14.451 [DEBUG] [Thread-76577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:01:14.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:01:14.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:01:14.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:01:14.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:01:14.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:01:14.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:01:14.486 [DEBUG] [Thread-76577] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:01:19.661 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:19.662 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:20.226 [DEBUG] [Thread-76579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:35.271 [DEBUG] [Thread-76580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:01:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:01:44.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:01:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:01:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 1, 23), 3.68, 77.79, 0.0, 38.66, 11.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:01:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:01:23
2025-12-12T21:01:45.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:01:45.464 [DEBUG] [Thread-76581] [transport.py] [_log()] starting thread (client mode): 0xf813d060
2025-12-12T21:01:45.464 [DEBUG] [Thread-76581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:01:45.480 [DEBUG] [Thread-76581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:01:45.480 [INFO] [Thread-76581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:01:45.483 [DEBUG] [Thread-76581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] client lang: <none>
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] server lang: <none>
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] kex follows: False
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] Compression: none
2025-12-12T21:01:45.484 [DEBUG] [Thread-76581] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:01:45.499 [DEBUG] [Thread-76581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:01:45.499 [DEBUG] [Thread-76581] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:01:45.500 [DEBUG] [Thread-76581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:01:45.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:01:45.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:01:45.500 [DEBUG] [Thread-76581] [transport.py] [_log()] userauth is OK
2025-12-12T21:01:45.500 [DEBUG] [Thread-76581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:01:45.500 [DEBUG] [Thread-76581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:01:45.500 [DEBUG] [Thread-76581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:01:45.500 [DEBUG] [Thread-76581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:01:45.510 [INFO] [Thread-76581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:01:45.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:01:46.110 [DEBUG] [Thread-76581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:01:46.110 [DEBUG] [Thread-76581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:01:46.110 [DEBUG] [Thread-76581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:01:46.150 [DEBUG] [Thread-76581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:01:46.151 [DEBUG] [Thread-76581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:01:46.152 [DEBUG] [Thread-76581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:01:46.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:01:46.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:01:46.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:01:46.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:01:46.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:01:46.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:01:46.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.792809 -999.00  +11.30  26.97     80   +8.00 1 3 1 2 1     0    0 -1.67 -188.51 Z.ES. 19.6 27.0 337.9 35.1 12.4 -4.8 12.3 -3.8 12.1 -2.9 12.4 -2.9
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.792809
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:01:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:01:23', tmtdew=3.68, humidity=77.79, cloud=0.0, wind=38.66, temperature=11.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:01:38.698', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:00:00')
2025-12-12T21:01:46.171 [DEBUG] [Thread-76581] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:01:46.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:01:46.256 [DEBUG] [Thread-76584] [transport.py] [_log()] starting thread (client mode): 0xf57f2c20
2025-12-12T21:01:46.256 [DEBUG] [Thread-76584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:01:46.270 [DEBUG] [Thread-76584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:01:46.270 [INFO] [Thread-76584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] client lang: <none>
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] server lang: <none>
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] kex follows: False
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] Compression: none
2025-12-12T21:01:46.278 [DEBUG] [Thread-76584] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:01:46.335 [DEBUG] [Thread-76584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:01:46.335 [DEBUG] [Thread-76584] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:01:46.335 [DEBUG] [Thread-76584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:01:46.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:01:46.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:01:46.391 [DEBUG] [Thread-76584] [transport.py] [_log()] userauth is OK
2025-12-12T21:01:46.391 [DEBUG] [Thread-76584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:01:46.391 [DEBUG] [Thread-76584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:01:46.391 [DEBUG] [Thread-76584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:01:46.392 [DEBUG] [Thread-76584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:01:46.405 [INFO] [Thread-76584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:01:46.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:01:46.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:01:47.266 [DEBUG] [Thread-76584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:01:47.266 [DEBUG] [Thread-76584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:01:47.314 [DEBUG] [Thread-76584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:01:47.314 [DEBUG] [Thread-76584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:01:47.325 [DEBUG] [Thread-76584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:01:47.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:01:47.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:01:47.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:01:47.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:01:47.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:01:47.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:01:47.360 [DEBUG] [Thread-76584] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:01:50.300 [DEBUG] [Thread-76586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:05.343 [DEBUG] [Thread-76587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:09.518 [DEBUG] [Thread-76588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:17.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:02:17.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:02:17.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:02:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 1, 55), 3.61, 78.44, 0.0, 31.48, 11.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:02:18.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:01:55
2025-12-12T21:02:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:02:18.325 [DEBUG] [Thread-76589] [transport.py] [_log()] starting thread (client mode): 0xf578b5e0
2025-12-12T21:02:18.326 [DEBUG] [Thread-76589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:02:18.345 [DEBUG] [Thread-76589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:02:18.345 [INFO] [Thread-76589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:02:18.347 [DEBUG] [Thread-76589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] client lang: <none>
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] server lang: <none>
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] kex follows: False
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] Compression: none
2025-12-12T21:02:18.348 [DEBUG] [Thread-76589] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:02:18.356 [DEBUG] [Thread-76589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:02:18.357 [DEBUG] [Thread-76589] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:02:18.357 [DEBUG] [Thread-76589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:02:18.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:02:18.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:02:18.358 [DEBUG] [Thread-76589] [transport.py] [_log()] userauth is OK
2025-12-12T21:02:18.358 [DEBUG] [Thread-76589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:02:18.359 [DEBUG] [Thread-76589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:02:18.359 [DEBUG] [Thread-76589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:02:18.359 [DEBUG] [Thread-76589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:02:18.393 [INFO] [Thread-76589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:02:18.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:02:18.997 [DEBUG] [Thread-76589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:02:18.997 [DEBUG] [Thread-76589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:02:18.997 [DEBUG] [Thread-76589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:02:19.038 [DEBUG] [Thread-76589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:02:19.038 [DEBUG] [Thread-76589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:02:19.042 [DEBUG] [Thread-76589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:02:19.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:02:19.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:02:19.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:02:19.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:02:19.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:02:19.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:02:19.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:02:19.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:02:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:02:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.793157 -999.00  +11.00  38.47     81   +7.90 1 3 2 2 1     0    0 -1.08 -166.64 Z.ES. 32.7 38.5 335.0 44.6 12.5 -3.8 12.2 -4.0 12.1 -3.2 12.4 -3.1
2025-12-12T21:02:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:02:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:02:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.793157
2025-12-12T21:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:02:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:02:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:01:55', tmtdew=3.61, humidity=78.44, cloud=0.0, wind=31.48, temperature=11.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:02:08.765', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:00:00')
2025-12-12T21:02:19.074 [DEBUG] [Thread-76589] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:02:19.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:02:19.170 [DEBUG] [Thread-76592] [transport.py] [_log()] starting thread (client mode): 0xf81c3520
2025-12-12T21:02:19.170 [DEBUG] [Thread-76592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:02:19.185 [DEBUG] [Thread-76592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:02:19.185 [INFO] [Thread-76592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] client lang: <none>
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] server lang: <none>
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] kex follows: False
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:02:19.193 [DEBUG] [Thread-76592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:02:19.194 [DEBUG] [Thread-76592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:02:19.194 [DEBUG] [Thread-76592] [transport.py] [_log()] Compression: none
2025-12-12T21:02:19.194 [DEBUG] [Thread-76592] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:02:19.250 [DEBUG] [Thread-76592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:02:19.251 [DEBUG] [Thread-76592] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:02:19.251 [DEBUG] [Thread-76592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:02:19.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:02:19.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:02:19.307 [DEBUG] [Thread-76592] [transport.py] [_log()] userauth is OK
2025-12-12T21:02:19.307 [DEBUG] [Thread-76592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:02:19.307 [DEBUG] [Thread-76592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:02:19.307 [DEBUG] [Thread-76592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:02:19.307 [DEBUG] [Thread-76592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:02:19.322 [INFO] [Thread-76592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:02:19.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:02:19.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:02:19.874 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:19.875 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:20.142 [DEBUG] [Thread-76592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:02:20.142 [DEBUG] [Thread-76592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:02:20.190 [DEBUG] [Thread-76592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:02:20.190 [DEBUG] [Thread-76592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:02:20.198 [DEBUG] [Thread-76592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:02:20.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:02:20.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:02:20.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:02:20.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:02:20.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:02:20.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:02:20.229 [DEBUG] [Thread-76592] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:02:20.370 [DEBUG] [Thread-76594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:35.406 [DEBUG] [Thread-76595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:50.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:02:50.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:02:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:02:50.436 [DEBUG] [Thread-76596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:02:50.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 2, 27), 3.59, 78.5, 0.0, 35.38, 11.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:02:50.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:02:27
2025-12-12T21:02:51.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:02:51.187 [DEBUG] [Thread-76597] [transport.py] [_log()] starting thread (client mode): 0xf575fd30
2025-12-12T21:02:51.187 [DEBUG] [Thread-76597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:02:51.205 [DEBUG] [Thread-76597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:02:51.205 [INFO] [Thread-76597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] client lang: <none>
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] server lang: <none>
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] kex follows: False
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] Compression: none
2025-12-12T21:02:51.208 [DEBUG] [Thread-76597] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:02:51.227 [DEBUG] [Thread-76597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:02:51.228 [DEBUG] [Thread-76597] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:02:51.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:02:51.229 [DEBUG] [Thread-76597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:02:51.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:02:51.230 [DEBUG] [Thread-76597] [transport.py] [_log()] userauth is OK
2025-12-12T21:02:51.230 [DEBUG] [Thread-76597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:02:51.230 [DEBUG] [Thread-76597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:02:51.230 [DEBUG] [Thread-76597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:02:51.231 [DEBUG] [Thread-76597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:02:51.245 [INFO] [Thread-76597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:02:51.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:02:51.817 [DEBUG] [Thread-76597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:02:51.817 [DEBUG] [Thread-76597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:02:51.817 [DEBUG] [Thread-76597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:02:51.859 [DEBUG] [Thread-76597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:02:51.859 [DEBUG] [Thread-76597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:02:51.861 [DEBUG] [Thread-76597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:02:51.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:02:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:02:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:02:51.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:02:51.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:02:51.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:02:51.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:02:51.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:02:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:02:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.793504 -999.00  +11.00  34.86     82   +8.00 1 3 2 2 1     0    0 -1.40 -175.61 ..E.. 31.8 34.9 331.6 47.9 12.5 -3.8 12.2 -3.5 12.1 -2.7 12.4 -2.8
2025-12-12T21:02:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:02:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:02:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.793504
2025-12-12T21:02:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:02:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:02:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:02:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:02:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:02:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:02:27', tmtdew=3.59, humidity=78.5, cloud=0.0, wind=35.38, temperature=11.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:02:38.746', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:00:00')
2025-12-12T21:02:51.873 [DEBUG] [Thread-76597] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:02:51.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:02:51.964 [DEBUG] [Thread-76600] [transport.py] [_log()] starting thread (client mode): 0xf57e2b60
2025-12-12T21:02:51.964 [DEBUG] [Thread-76600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:02:51.978 [DEBUG] [Thread-76600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:02:51.978 [INFO] [Thread-76600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:02:51.986 [DEBUG] [Thread-76600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] client lang: <none>
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] server lang: <none>
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] kex follows: False
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] Compression: none
2025-12-12T21:02:51.987 [DEBUG] [Thread-76600] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:02:52.042 [DEBUG] [Thread-76600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:02:52.043 [DEBUG] [Thread-76600] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:02:52.044 [DEBUG] [Thread-76600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:02:52.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:02:52.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:02:52.099 [DEBUG] [Thread-76600] [transport.py] [_log()] userauth is OK
2025-12-12T21:02:52.099 [DEBUG] [Thread-76600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:02:52.099 [DEBUG] [Thread-76600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:02:52.099 [DEBUG] [Thread-76600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:02:52.099 [DEBUG] [Thread-76600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:02:52.118 [INFO] [Thread-76600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:02:52.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:02:52.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:02:52.949 [DEBUG] [Thread-76600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:02:52.950 [DEBUG] [Thread-76600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:02:52.997 [DEBUG] [Thread-76600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:02:52.997 [DEBUG] [Thread-76600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:02:53.006 [DEBUG] [Thread-76600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:02:53.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:02:53.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:02:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:02:53.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:02:53.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:02:53.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:02:53.039 [DEBUG] [Thread-76600] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:03:05.460 [DEBUG] [Thread-76602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:09.596 [DEBUG] [Thread-76603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:20.078 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:20.079 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:20.512 [DEBUG] [Thread-76604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:03:23.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:03:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:03:23.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 2, 59), 3.6, 78.49, 0.0, 40.32, 11.08, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:03:23.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:02:59
2025-12-12T21:03:23.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:03:24.010 [DEBUG] [Thread-76605] [transport.py] [_log()] starting thread (client mode): 0xf57e2dd0
2025-12-12T21:03:24.010 [DEBUG] [Thread-76605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:03:24.029 [DEBUG] [Thread-76605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:03:24.029 [INFO] [Thread-76605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] client lang: <none>
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] server lang: <none>
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] kex follows: False
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:03:24.033 [DEBUG] [Thread-76605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:03:24.034 [DEBUG] [Thread-76605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:03:24.034 [DEBUG] [Thread-76605] [transport.py] [_log()] Compression: none
2025-12-12T21:03:24.034 [DEBUG] [Thread-76605] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:03:24.050 [DEBUG] [Thread-76605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:03:24.050 [DEBUG] [Thread-76605] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:03:24.051 [DEBUG] [Thread-76605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:03:24.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:03:24.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:03:24.053 [DEBUG] [Thread-76605] [transport.py] [_log()] userauth is OK
2025-12-12T21:03:24.053 [DEBUG] [Thread-76605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:03:24.053 [DEBUG] [Thread-76605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:03:24.053 [DEBUG] [Thread-76605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:03:24.053 [DEBUG] [Thread-76605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:03:24.076 [INFO] [Thread-76605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:03:24.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:03:24.736 [DEBUG] [Thread-76605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:03:24.736 [DEBUG] [Thread-76605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:03:24.737 [DEBUG] [Thread-76605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:03:24.778 [DEBUG] [Thread-76605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:03:24.778 [DEBUG] [Thread-76605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:03:24.781 [DEBUG] [Thread-76605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:03:24.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:03:24.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:03:24.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:03:24.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:03:24.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:03:24.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:03:24.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:03:24.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:03:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:03:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.793504 -999.00  +11.00  34.86     82   +8.00 1 3 2 2 1     0    0 -1.40 -175.61 ..E.. 31.8 34.9 331.6 47.9 12.5 -3.8 12.2 -3.5 12.1 -2.7 12.4 -2.8
2025-12-12T21:03:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:03:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:03:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.793504
2025-12-12T21:03:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:03:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:03:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:03:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:03:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:03:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:02:59', tmtdew=3.6, humidity=78.49, cloud=0.0, wind=40.32, temperature=11.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:02:38.746', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:00:00')
2025-12-12T21:03:24.806 [DEBUG] [Thread-76605] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:03:24.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:03:24.902 [DEBUG] [Thread-76608] [transport.py] [_log()] starting thread (client mode): 0xf81c1360
2025-12-12T21:03:24.902 [DEBUG] [Thread-76608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:03:24.917 [DEBUG] [Thread-76608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:03:24.917 [INFO] [Thread-76608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:24.926 [DEBUG] [Thread-76608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] client lang: <none>
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] server lang: <none>
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] kex follows: False
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:03:24.927 [DEBUG] [Thread-76608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:03:24.928 [DEBUG] [Thread-76608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:03:24.928 [DEBUG] [Thread-76608] [transport.py] [_log()] Compression: none
2025-12-12T21:03:24.928 [DEBUG] [Thread-76608] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:03:24.987 [DEBUG] [Thread-76608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:03:24.988 [DEBUG] [Thread-76608] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:03:24.988 [DEBUG] [Thread-76608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:03:24.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:03:24.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:03:25.047 [DEBUG] [Thread-76608] [transport.py] [_log()] userauth is OK
2025-12-12T21:03:25.047 [DEBUG] [Thread-76608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:03:25.047 [DEBUG] [Thread-76608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:03:25.047 [DEBUG] [Thread-76608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:03:25.048 [DEBUG] [Thread-76608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:03:25.066 [INFO] [Thread-76608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:03:25.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:03:25.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:03:25.894 [DEBUG] [Thread-76608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:03:25.895 [DEBUG] [Thread-76608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:03:25.943 [DEBUG] [Thread-76608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:03:25.943 [DEBUG] [Thread-76608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:03:25.952 [DEBUG] [Thread-76608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:03:25.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:03:25.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:03:25.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:03:25.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:03:25.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:03:25.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:03:25.986 [DEBUG] [Thread-76608] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:03:35.544 [DEBUG] [Thread-76610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:50.588 [DEBUG] [Thread-76611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:03:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:03:56.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:03:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:03:56.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 3, 31), 3.55, 78.7, 0.0, 40.85, 11.05, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:03:56.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:03:31
2025-12-12T21:03:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:03:56.961 [DEBUG] [Thread-76612] [transport.py] [_log()] starting thread (client mode): 0xf57f21d0
2025-12-12T21:03:56.961 [DEBUG] [Thread-76612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:03:56.980 [DEBUG] [Thread-76612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:03:56.980 [INFO] [Thread-76612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] client lang: <none>
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] server lang: <none>
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] kex follows: False
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] Compression: none
2025-12-12T21:03:56.983 [DEBUG] [Thread-76612] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:03:57.000 [DEBUG] [Thread-76612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:03:57.001 [DEBUG] [Thread-76612] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:03:57.001 [DEBUG] [Thread-76612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:03:57.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:03:57.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:03:57.003 [DEBUG] [Thread-76612] [transport.py] [_log()] userauth is OK
2025-12-12T21:03:57.003 [DEBUG] [Thread-76612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:03:57.003 [DEBUG] [Thread-76612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:03:57.003 [DEBUG] [Thread-76612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:03:57.003 [DEBUG] [Thread-76612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:03:57.021 [INFO] [Thread-76612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:03:57.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:03:57.851 [DEBUG] [Thread-76612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:03:57.851 [DEBUG] [Thread-76612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:03:57.852 [DEBUG] [Thread-76612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:03:57.892 [DEBUG] [Thread-76612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:03:57.892 [DEBUG] [Thread-76612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:03:57.895 [DEBUG] [Thread-76612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:03:57.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:03:57.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:03:57.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:03:57.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:03:57.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:03:57.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:03:57.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:03:57.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:03:57.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:03:57.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.793851 -999.00  +11.10  39.86     81   +8.10 1 3 2 2 1     0    0 -0.82 -155.99 ----- 31.0 39.9 330.2 43.1 12.5 -3.3 12.3 -3.2 12.1 -2.8 12.4 -2.6
2025-12-12T21:03:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:03:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:03:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.793851
2025-12-12T21:03:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:03:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:03:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:03:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:03:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:03:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:03:31', tmtdew=3.55, humidity=78.7, cloud=0.0, wind=40.85, temperature=11.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:03:08.726', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:00:00')
2025-12-12T21:03:57.922 [DEBUG] [Thread-76612] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:03:58.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:03:58.019 [DEBUG] [Thread-76615] [transport.py] [_log()] starting thread (client mode): 0xf57f3b50
2025-12-12T21:03:58.019 [DEBUG] [Thread-76615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:03:58.034 [DEBUG] [Thread-76615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:03:58.035 [INFO] [Thread-76615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:03:58.042 [DEBUG] [Thread-76615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:03:58.042 [DEBUG] [Thread-76615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] client lang: <none>
2025-12-12T21:03:58.043 [DEBUG] [Thread-76615] [transport.py] [_log()] server lang: <none>
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] kex follows: False
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:03:58.044 [DEBUG] [Thread-76615] [transport.py] [_log()] Compression: none
2025-12-12T21:03:58.045 [DEBUG] [Thread-76615] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:03:58.103 [DEBUG] [Thread-76615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:03:58.103 [DEBUG] [Thread-76615] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:03:58.104 [DEBUG] [Thread-76615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:03:58.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:03:58.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:03:58.159 [DEBUG] [Thread-76615] [transport.py] [_log()] userauth is OK
2025-12-12T21:03:58.159 [DEBUG] [Thread-76615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:03:58.159 [DEBUG] [Thread-76615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:03:58.159 [DEBUG] [Thread-76615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:03:58.159 [DEBUG] [Thread-76615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:03:58.182 [INFO] [Thread-76615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:03:58.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:03:58.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:03:59.012 [DEBUG] [Thread-76615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:03:59.012 [DEBUG] [Thread-76615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:03:59.059 [DEBUG] [Thread-76615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:03:59.060 [DEBUG] [Thread-76615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:03:59.068 [DEBUG] [Thread-76615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:03:59.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:03:59.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:03:59.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:03:59.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:03:59.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:03:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:03:59.107 [DEBUG] [Thread-76615] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:04:05.616 [DEBUG] [Thread-76617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:04:09.675 [DEBUG] [Thread-76618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:04:20.282 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:04:20.283 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:04:20.651 [DEBUG] [Thread-76619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:04:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:04:29.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:04:29.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:04:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 4, 3), 3.53, 78.84, 0.0, 43.32, 11.07, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:04:29.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:04:03
2025-12-12T21:04:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:04:30.077 [DEBUG] [Thread-76620] [transport.py] [_log()] starting thread (client mode): 0xf5795030
2025-12-12T21:04:30.077 [DEBUG] [Thread-76620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:04:30.097 [DEBUG] [Thread-76620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:04:30.097 [INFO] [Thread-76620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:04:30.098 [DEBUG] [Thread-76620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] client lang: <none>
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] server lang: <none>
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] kex follows: False
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:04:30.099 [DEBUG] [Thread-76620] [transport.py] [_log()] Compression: none
2025-12-12T21:04:30.100 [DEBUG] [Thread-76620] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:04:30.108 [DEBUG] [Thread-76620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:04:30.109 [DEBUG] [Thread-76620] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:04:30.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:04:30.110 [DEBUG] [Thread-76620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:04:30.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:04:30.112 [DEBUG] [Thread-76620] [transport.py] [_log()] userauth is OK
2025-12-12T21:04:30.112 [DEBUG] [Thread-76620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:04:30.112 [DEBUG] [Thread-76620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:04:30.113 [DEBUG] [Thread-76620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:04:30.113 [DEBUG] [Thread-76620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:04:30.137 [INFO] [Thread-76620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:04:30.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:04:30.778 [DEBUG] [Thread-76620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:04:30.778 [DEBUG] [Thread-76620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:04:30.779 [DEBUG] [Thread-76620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:04:30.819 [DEBUG] [Thread-76620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:04:30.819 [DEBUG] [Thread-76620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:04:30.822 [DEBUG] [Thread-76620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:04:30.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:04:30.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:04:30.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:04:30.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:04:30.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:04:30.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:04:30.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:04:30.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:04:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:04:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.794198 -999.00  +11.10  33.78     81   +8.10 1 3 2 2 1     0    0 -0.67 -148.87 ----- 28.1 33.8 314.2 43.1 12.6 -3.1 12.4 -3.3 12.1 -3.4 12.5 -2.8
2025-12-12T21:04:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:04:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:04:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.794198
2025-12-12T21:04:30.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:04:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:04:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:04:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:04:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:04:30.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:04:03', tmtdew=3.53, humidity=78.84, cloud=0.0, wind=43.32, temperature=11.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:03:38.707', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:04:30.847 [DEBUG] [Thread-76620] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:04:30.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:04:30.941 [DEBUG] [Thread-76623] [transport.py] [_log()] starting thread (client mode): 0xf5788460
2025-12-12T21:04:30.941 [DEBUG] [Thread-76623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:04:30.959 [DEBUG] [Thread-76623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:04:30.959 [INFO] [Thread-76623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:04:30.967 [DEBUG] [Thread-76623] [transport.py] [_log()] client lang: <none>
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] server lang: <none>
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] kex follows: False
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] Compression: none
2025-12-12T21:04:30.968 [DEBUG] [Thread-76623] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:04:31.027 [DEBUG] [Thread-76623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:04:31.027 [DEBUG] [Thread-76623] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:04:31.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:04:31.028 [DEBUG] [Thread-76623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:04:31.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:04:31.083 [DEBUG] [Thread-76623] [transport.py] [_log()] userauth is OK
2025-12-12T21:04:31.083 [DEBUG] [Thread-76623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:04:31.083 [DEBUG] [Thread-76623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:04:31.083 [DEBUG] [Thread-76623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:04:31.083 [DEBUG] [Thread-76623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:04:31.102 [INFO] [Thread-76623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:04:31.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:04:31.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:04:31.975 [DEBUG] [Thread-76623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:04:31.975 [DEBUG] [Thread-76623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:04:32.023 [DEBUG] [Thread-76623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:04:32.023 [DEBUG] [Thread-76623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:04:32.032 [DEBUG] [Thread-76623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:04:32.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:04:32.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:04:32.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:04:32.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:04:32.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:04:32.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:04:32.066 [DEBUG] [Thread-76623] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:04:35.683 [DEBUG] [Thread-76625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:04:50.729 [DEBUG] [Thread-76626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:05:02.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:05:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:05:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 4, 35), 3.37, 79.39, 0.0, 40.99, 10.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:05:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:04:35
2025-12-12T21:05:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:05:03.043 [DEBUG] [Thread-76627] [transport.py] [_log()] starting thread (client mode): 0xf57f3dc0
2025-12-12T21:05:03.044 [DEBUG] [Thread-76627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:05:03.065 [DEBUG] [Thread-76627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:05:03.065 [INFO] [Thread-76627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] client lang: <none>
2025-12-12T21:05:03.067 [DEBUG] [Thread-76627] [transport.py] [_log()] server lang: <none>
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] kex follows: False
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] Compression: none
2025-12-12T21:05:03.068 [DEBUG] [Thread-76627] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:05:03.081 [DEBUG] [Thread-76627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:05:03.082 [DEBUG] [Thread-76627] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:05:03.083 [DEBUG] [Thread-76627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:05:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:05:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:05:03.084 [DEBUG] [Thread-76627] [transport.py] [_log()] userauth is OK
2025-12-12T21:05:03.085 [DEBUG] [Thread-76627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:05:03.085 [DEBUG] [Thread-76627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:05:03.085 [DEBUG] [Thread-76627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:05:03.085 [DEBUG] [Thread-76627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:05:03.107 [INFO] [Thread-76627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:05:03.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:05:03.987 [DEBUG] [Thread-76627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:05:03.987 [DEBUG] [Thread-76627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:05:03.987 [DEBUG] [Thread-76627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:05:04.028 [DEBUG] [Thread-76627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:05:04.028 [DEBUG] [Thread-76627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:05:04.031 [DEBUG] [Thread-76627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:05:04.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:05:04.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:05:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:05:04.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:05:04.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:05:04.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:05:04.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:05:04.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:05:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:05:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.794545 -999.00  +11.00  36.99     82   +8.10 1 3 2 2 1     0    0 -0.49 -141.72 ----- 40.3 37.0 324.4 54.8 12.5 -3.3 12.3 -3.7 12.0 -3.0 12.4 -2.9
2025-12-12T21:05:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:05:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:05:04.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.794545
2025-12-12T21:05:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:05:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:05:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:05:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:05:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:05:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:04:35', tmtdew=3.37, humidity=79.39, cloud=0.0, wind=40.99, temperature=10.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:04:08.688', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:05:04.057 [DEBUG] [Thread-76627] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:05:04.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:05:04.154 [DEBUG] [Thread-76630] [transport.py] [_log()] starting thread (client mode): 0xf575c0a0
2025-12-12T21:05:04.154 [DEBUG] [Thread-76630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:05:04.169 [DEBUG] [Thread-76630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:05:04.169 [INFO] [Thread-76630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:04.177 [DEBUG] [Thread-76630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] client lang: <none>
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] server lang: <none>
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] kex follows: False
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] Compression: none
2025-12-12T21:05:04.178 [DEBUG] [Thread-76630] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:05:04.234 [DEBUG] [Thread-76630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:05:04.234 [DEBUG] [Thread-76630] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:05:04.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:05:04.235 [DEBUG] [Thread-76630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:05:04.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:05:04.295 [DEBUG] [Thread-76630] [transport.py] [_log()] userauth is OK
2025-12-12T21:05:04.295 [DEBUG] [Thread-76630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:05:04.295 [DEBUG] [Thread-76630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:05:04.295 [DEBUG] [Thread-76630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:05:04.295 [DEBUG] [Thread-76630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:05:04.314 [INFO] [Thread-76630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:05:04.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:05:04.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:05:05.170 [DEBUG] [Thread-76630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:05:05.170 [DEBUG] [Thread-76630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:05:05.220 [DEBUG] [Thread-76630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:05:05.220 [DEBUG] [Thread-76630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:05:05.229 [DEBUG] [Thread-76630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:05:05.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:05:05.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:05:05.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:05:05.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:05:05.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:05:05.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:05:05.267 [DEBUG] [Thread-76630] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:05:05.762 [DEBUG] [Thread-76632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:09.745 [DEBUG] [Thread-76633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:20.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:20.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:20.806 [DEBUG] [Thread-76634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:35.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:05:35.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:05:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:05:35.835 [DEBUG] [Thread-76635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:05:36.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 5, 7), 3.33, 79.58, 0.0, 38.45, 10.95, 0, 0, 0, 2, 0, 0),)
2025-12-12T21:05:36.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:05:07
2025-12-12T21:05:36.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:05:36.296 [DEBUG] [Thread-76636] [transport.py] [_log()] starting thread (client mode): 0xf575cdf0
2025-12-12T21:05:36.296 [DEBUG] [Thread-76636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:05:36.316 [DEBUG] [Thread-76636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:05:36.317 [INFO] [Thread-76636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] client lang: <none>
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] server lang: <none>
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] kex follows: False
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:05:36.320 [DEBUG] [Thread-76636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:05:36.321 [DEBUG] [Thread-76636] [transport.py] [_log()] Compression: none
2025-12-12T21:05:36.321 [DEBUG] [Thread-76636] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:05:36.340 [DEBUG] [Thread-76636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:05:36.340 [DEBUG] [Thread-76636] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:05:36.340 [DEBUG] [Thread-76636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:05:36.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:05:36.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:05:36.344 [DEBUG] [Thread-76636] [transport.py] [_log()] userauth is OK
2025-12-12T21:05:36.344 [DEBUG] [Thread-76636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:05:36.344 [DEBUG] [Thread-76636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:05:36.344 [DEBUG] [Thread-76636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:05:36.344 [DEBUG] [Thread-76636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:05:36.363 [INFO] [Thread-76636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:05:36.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:05:36.936 [DEBUG] [Thread-76636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:05:36.937 [DEBUG] [Thread-76636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:05:36.937 [DEBUG] [Thread-76636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:05:36.979 [DEBUG] [Thread-76636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:05:36.979 [DEBUG] [Thread-76636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:05:36.981 [DEBUG] [Thread-76636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:05:36.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:05:36.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:05:36.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:05:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:05:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:05:37.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:05:37.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.795240 -999.00  +10.90  34.95     83   +8.20 1 3 2 2 1     0    0 -0.19 -128.04 ----- 33.6 35.0 315.0 51.8 12.5 -3.1 12.3 -3.4 12.1 -3.1 12.3 -2.8
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.795240
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:05:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:05:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:05:07', tmtdew=3.33, humidity=79.58, cloud=0.0, wind=38.45, temperature=10.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:05:08.736', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:05:37.007 [DEBUG] [Thread-76636] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:05:37.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:05:37.093 [DEBUG] [Thread-76639] [transport.py] [_log()] starting thread (client mode): 0xf575c760
2025-12-12T21:05:37.093 [DEBUG] [Thread-76639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:05:37.108 [DEBUG] [Thread-76639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:05:37.108 [INFO] [Thread-76639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] client lang: <none>
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] server lang: <none>
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] kex follows: False
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:05:37.115 [DEBUG] [Thread-76639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:05:37.116 [DEBUG] [Thread-76639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:05:37.116 [DEBUG] [Thread-76639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:05:37.116 [DEBUG] [Thread-76639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:05:37.116 [DEBUG] [Thread-76639] [transport.py] [_log()] Compression: none
2025-12-12T21:05:37.116 [DEBUG] [Thread-76639] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:05:37.173 [DEBUG] [Thread-76639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:05:37.173 [DEBUG] [Thread-76639] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:05:37.173 [DEBUG] [Thread-76639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:05:37.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:05:37.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:05:37.230 [DEBUG] [Thread-76639] [transport.py] [_log()] userauth is OK
2025-12-12T21:05:37.230 [DEBUG] [Thread-76639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:05:37.230 [DEBUG] [Thread-76639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:05:37.230 [DEBUG] [Thread-76639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:05:37.230 [DEBUG] [Thread-76639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:05:37.244 [INFO] [Thread-76639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:05:37.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:05:37.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:05:38.055 [DEBUG] [Thread-76639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:05:38.055 [DEBUG] [Thread-76639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:05:38.104 [DEBUG] [Thread-76639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:05:38.104 [DEBUG] [Thread-76639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:05:38.112 [DEBUG] [Thread-76639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:05:38.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:05:38.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:05:38.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:05:38.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:05:38.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:05:38.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:05:38.144 [DEBUG] [Thread-76639] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:05:50.860 [DEBUG] [Thread-76641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:05.904 [DEBUG] [Thread-76642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:08.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:06:08.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:06:08.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:06:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 5, 39), 3.32, 80.13, 0.0, 36.68, 10.93, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:06:08.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:05:39
2025-12-12T21:06:08.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:06:09.133 [DEBUG] [Thread-76643] [transport.py] [_log()] starting thread (client mode): 0xf5795a80
2025-12-12T21:06:09.133 [DEBUG] [Thread-76643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:06:09.154 [DEBUG] [Thread-76643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:06:09.154 [INFO] [Thread-76643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] client lang: <none>
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] server lang: <none>
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] kex follows: False
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:06:09.158 [DEBUG] [Thread-76643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:06:09.159 [DEBUG] [Thread-76643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:06:09.159 [DEBUG] [Thread-76643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:06:09.159 [DEBUG] [Thread-76643] [transport.py] [_log()] Compression: none
2025-12-12T21:06:09.159 [DEBUG] [Thread-76643] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:06:09.177 [DEBUG] [Thread-76643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:06:09.178 [DEBUG] [Thread-76643] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:06:09.178 [DEBUG] [Thread-76643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:06:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:06:09.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:06:09.180 [DEBUG] [Thread-76643] [transport.py] [_log()] userauth is OK
2025-12-12T21:06:09.180 [DEBUG] [Thread-76643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:06:09.180 [DEBUG] [Thread-76643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:06:09.181 [DEBUG] [Thread-76643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:06:09.181 [DEBUG] [Thread-76643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:06:09.198 [INFO] [Thread-76643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:06:09.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:06:09.824 [DEBUG] [Thread-76645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:10.025 [DEBUG] [Thread-76643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:06:10.025 [DEBUG] [Thread-76643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:06:10.025 [DEBUG] [Thread-76643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:06:10.066 [DEBUG] [Thread-76643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:06:10.067 [DEBUG] [Thread-76643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:06:10.069 [DEBUG] [Thread-76643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:06:10.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:06:10.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:06:10.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:06:10.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:06:10.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:06:10.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:06:10.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:06:10.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.795587 -999.00  +10.90  33.46     83   +8.20 1 3 2 2 1     0    0 -0.22 -126.32 ----- 29.0 33.5 326.6 41.0 12.5 -3.2 12.3 -3.6 12.1 -2.9 12.4 -2.8
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.795587
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:06:10.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:05:39', tmtdew=3.32, humidity=80.13, cloud=0.0, wind=36.68, temperature=10.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:05:38.717', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:06:10.090 [DEBUG] [Thread-76643] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:06:10.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:06:10.177 [DEBUG] [Thread-76647] [transport.py] [_log()] starting thread (client mode): 0xf5797c70
2025-12-12T21:06:10.177 [DEBUG] [Thread-76647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:06:10.192 [DEBUG] [Thread-76647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:06:10.192 [INFO] [Thread-76647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:10.199 [DEBUG] [Thread-76647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] client lang: <none>
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] server lang: <none>
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] kex follows: False
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] Compression: none
2025-12-12T21:06:10.200 [DEBUG] [Thread-76647] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:06:10.258 [DEBUG] [Thread-76647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:06:10.259 [DEBUG] [Thread-76647] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:06:10.259 [DEBUG] [Thread-76647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:06:10.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:06:10.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:06:10.319 [DEBUG] [Thread-76647] [transport.py] [_log()] userauth is OK
2025-12-12T21:06:10.319 [DEBUG] [Thread-76647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:06:10.319 [DEBUG] [Thread-76647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:06:10.319 [DEBUG] [Thread-76647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:06:10.319 [DEBUG] [Thread-76647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:06:10.338 [INFO] [Thread-76647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:06:10.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:06:10.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:06:11.160 [DEBUG] [Thread-76647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:06:11.160 [DEBUG] [Thread-76647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:06:11.208 [DEBUG] [Thread-76647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:06:11.208 [DEBUG] [Thread-76647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:06:11.217 [DEBUG] [Thread-76647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:06:11.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:06:11.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:06:11.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:06:11.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:06:11.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:06:11.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:06:11.251 [DEBUG] [Thread-76647] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:06:20.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:20.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:20.927 [DEBUG] [Thread-76649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:35.980 [DEBUG] [Thread-76650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:06:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:06:41.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:06:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:06:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 6, 11), 3.32, 80.18, 0.0, 38.22, 11.0, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:06:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:06:11
2025-12-12T21:06:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:06:42.239 [DEBUG] [Thread-76651] [transport.py] [_log()] starting thread (client mode): 0xf57a7220
2025-12-12T21:06:42.239 [DEBUG] [Thread-76651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:06:42.259 [DEBUG] [Thread-76651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:06:42.259 [INFO] [Thread-76651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] client lang: <none>
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] server lang: <none>
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] kex follows: False
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] Compression: none
2025-12-12T21:06:42.263 [DEBUG] [Thread-76651] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:06:42.281 [DEBUG] [Thread-76651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:06:42.281 [DEBUG] [Thread-76651] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:06:42.282 [DEBUG] [Thread-76651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:06:42.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:06:42.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:06:42.324 [DEBUG] [Thread-76651] [transport.py] [_log()] userauth is OK
2025-12-12T21:06:42.325 [DEBUG] [Thread-76651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:06:42.325 [DEBUG] [Thread-76651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:06:42.325 [DEBUG] [Thread-76651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:06:42.325 [DEBUG] [Thread-76651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:06:42.361 [INFO] [Thread-76651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:06:42.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:06:42.965 [DEBUG] [Thread-76651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:06:42.966 [DEBUG] [Thread-76651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:06:42.966 [DEBUG] [Thread-76651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:06:43.007 [DEBUG] [Thread-76651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:06:43.007 [DEBUG] [Thread-76651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:06:43.010 [DEBUG] [Thread-76651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:06:43.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:06:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:06:43.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:06:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:06:43.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:06:43.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:06:43.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:06:43.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:06:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:06:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.795934 -999.00  +11.00  33.90     83   +8.20 1 3 2 2 1     0    0 -0.70 -141.44 ----- 44.1 33.9 331.0 42.7 12.5 -3.6 12.4 -4.1 12.1 -3.4 12.4 -2.9
2025-12-12T21:06:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:06:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:06:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.795934
2025-12-12T21:06:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:06:43.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:06:43.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:06:43.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:06:43.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:06:43.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:06:11', tmtdew=3.32, humidity=80.18, cloud=0.0, wind=38.22, temperature=11.0, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:06:08.698', atlas_cloud=3, atlas_rain=1, zp_data=[0.40174999999999983, 0.6292500000000008, 0.2322500000000005, 0.19200000000000017, 0.3045000000000009, nan, nan, nan, 0.8454999999999995, 1.0340000000000007, 0.6732499999999995, 0.22949999999999982, 0.46199999999999974, nan, nan, nan, 0.8297499999999998, 0.5884999999999998, 1.1739999999999995, 0.40224999999999866, 1.4029999999999987, nan, nan, 1.6597499999999998, 0.8424999999999994, 0.28449999999999953, 0.7052499999999995, nan, nan, nan, nan, 1.4250000000000007, 0.19174999999999898], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:06:43.035 [DEBUG] [Thread-76651] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:06:43.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:06:43.134 [DEBUG] [Thread-76654] [transport.py] [_log()] starting thread (client mode): 0xf57a7ac0
2025-12-12T21:06:43.134 [DEBUG] [Thread-76654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:06:43.148 [DEBUG] [Thread-76654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:06:43.148 [INFO] [Thread-76654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:06:43.156 [DEBUG] [Thread-76654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:06:43.156 [DEBUG] [Thread-76654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:06:43.156 [DEBUG] [Thread-76654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:06:43.156 [DEBUG] [Thread-76654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:43.156 [DEBUG] [Thread-76654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:06:43.156 [DEBUG] [Thread-76654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] client lang: <none>
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] server lang: <none>
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] kex follows: False
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] Compression: none
2025-12-12T21:06:43.157 [DEBUG] [Thread-76654] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:06:43.214 [DEBUG] [Thread-76654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:06:43.215 [DEBUG] [Thread-76654] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:06:43.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:06:43.216 [DEBUG] [Thread-76654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:06:43.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:06:43.271 [DEBUG] [Thread-76654] [transport.py] [_log()] userauth is OK
2025-12-12T21:06:43.271 [DEBUG] [Thread-76654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:06:43.271 [DEBUG] [Thread-76654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:06:43.271 [DEBUG] [Thread-76654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:06:43.271 [DEBUG] [Thread-76654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:06:43.289 [INFO] [Thread-76654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:06:43.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:06:43.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:06:44.119 [DEBUG] [Thread-76654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:06:44.119 [DEBUG] [Thread-76654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:06:44.166 [DEBUG] [Thread-76654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:06:44.166 [DEBUG] [Thread-76654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:06:44.174 [DEBUG] [Thread-76654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:06:44.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:06:44.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:06: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') -> 00000000
2025-12-12T21:06:44.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:06:44.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:06:44.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:06:44.206 [DEBUG] [Thread-76654] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:06:51.010 [DEBUG] [Thread-76656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:06.051 [DEBUG] [Thread-76657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:09.908 [DEBUG] [Thread-76658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:14.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:07:14.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:07:14.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:07:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 6, 43), 3.35, 80.0, 0.0, 39.35, 11.02, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:07:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:06:43
2025-12-12T21:07:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:07:15.209 [DEBUG] [Thread-76659] [transport.py] [_log()] starting thread (client mode): 0xf575c850
2025-12-12T21:07:15.209 [DEBUG] [Thread-76659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:07:15.228 [DEBUG] [Thread-76659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:07:15.228 [INFO] [Thread-76659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:07:15.231 [DEBUG] [Thread-76659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:07:15.231 [DEBUG] [Thread-76659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:07:15.231 [DEBUG] [Thread-76659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] client lang: <none>
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] server lang: <none>
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] kex follows: False
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] Compression: none
2025-12-12T21:07:15.232 [DEBUG] [Thread-76659] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:07:15.250 [DEBUG] [Thread-76659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:07:15.250 [DEBUG] [Thread-76659] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:07:15.251 [DEBUG] [Thread-76659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:07:15.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:07:15.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:07:15.252 [DEBUG] [Thread-76659] [transport.py] [_log()] userauth is OK
2025-12-12T21:07:15.253 [DEBUG] [Thread-76659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:07:15.253 [DEBUG] [Thread-76659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:07:15.253 [DEBUG] [Thread-76659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:07:15.253 [DEBUG] [Thread-76659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:07:15.276 [INFO] [Thread-76659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:07:15.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:07:16.068 [DEBUG] [Thread-76659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:07:16.069 [DEBUG] [Thread-76659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:07:16.069 [DEBUG] [Thread-76659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:07:16.111 [DEBUG] [Thread-76659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:07:16.111 [DEBUG] [Thread-76659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:07:16.114 [DEBUG] [Thread-76659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:07:16.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:07:16.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:07:16.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:07:16.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:07:16.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:07:16.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:07:16.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.796281 -999.00  +10.90  25.33     83   +8.20 1 3 1 2 1     0    0 -0.42 -132.57 ----- 33.5 25.3 318.6 39.6 12.5 -3.6 12.4 -4.3 12.1 -4.6 12.4 -4.4
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.796281
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:07:16.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:06:43', tmtdew=3.35, humidity=80.0, cloud=0.0, wind=39.35, temperature=11.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:06:38.678', atlas_cloud=3, 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.6154999999999999, nan, nan, nan, nan, nan, nan, 0.6157499999999994], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:07:16.134 [DEBUG] [Thread-76659] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:07:16.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:07:16.223 [DEBUG] [Thread-76662] [transport.py] [_log()] starting thread (client mode): 0xf81c3a30
2025-12-12T21:07:16.223 [DEBUG] [Thread-76662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:07:16.241 [DEBUG] [Thread-76662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:07:16.241 [INFO] [Thread-76662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] client lang: <none>
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] server lang: <none>
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] kex follows: False
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] Compression: none
2025-12-12T21:07:16.250 [DEBUG] [Thread-76662] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:07:16.311 [DEBUG] [Thread-76662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:07:16.311 [DEBUG] [Thread-76662] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:07:16.311 [DEBUG] [Thread-76662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:07:16.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:07:16.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:07:16.373 [DEBUG] [Thread-76662] [transport.py] [_log()] userauth is OK
2025-12-12T21:07:16.373 [DEBUG] [Thread-76662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:07:16.373 [DEBUG] [Thread-76662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:07:16.373 [DEBUG] [Thread-76662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:07:16.373 [DEBUG] [Thread-76662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:07:16.390 [INFO] [Thread-76662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:07:16.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:07:16.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:07:17.236 [DEBUG] [Thread-76662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:07:17.236 [DEBUG] [Thread-76662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:07:17.287 [DEBUG] [Thread-76662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:07:17.287 [DEBUG] [Thread-76662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:07:17.296 [DEBUG] [Thread-76662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:07:17.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:07:17.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:07:17.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:07:17.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:07:17.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:07:17.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:07:17.328 [DEBUG] [Thread-76662] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:07:20.896 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:20.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:21.080 [DEBUG] [Thread-76664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:36.118 [DEBUG] [Thread-76665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:07:47.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:07:47.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:07:47.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:07:48.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 7, 15), 3.34, 80.04, 0.0, 39.96, 11.03, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:07:48.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:07:15
2025-12-12T21:07:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:07:48.303 [DEBUG] [Thread-76666] [transport.py] [_log()] starting thread (client mode): 0xf57f3250
2025-12-12T21:07:48.303 [DEBUG] [Thread-76666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:07:48.322 [DEBUG] [Thread-76666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:07:48.322 [INFO] [Thread-76666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:07:48.325 [DEBUG] [Thread-76666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:07:48.325 [DEBUG] [Thread-76666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:07:48.325 [DEBUG] [Thread-76666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:07:48.325 [DEBUG] [Thread-76666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] client lang: <none>
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] server lang: <none>
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] kex follows: False
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] Compression: none
2025-12-12T21:07:48.326 [DEBUG] [Thread-76666] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:07:48.341 [DEBUG] [Thread-76666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:07:48.341 [DEBUG] [Thread-76666] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:07:48.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:07:48.341 [DEBUG] [Thread-76666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:07:48.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:07:48.342 [DEBUG] [Thread-76666] [transport.py] [_log()] userauth is OK
2025-12-12T21:07:48.342 [DEBUG] [Thread-76666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:07:48.342 [DEBUG] [Thread-76666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:07:48.342 [DEBUG] [Thread-76666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:07:48.342 [DEBUG] [Thread-76666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:07:48.361 [INFO] [Thread-76666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:07:48.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:07:48.967 [DEBUG] [Thread-76666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:07:48.967 [DEBUG] [Thread-76666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:07:48.967 [DEBUG] [Thread-76666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:07:49.008 [DEBUG] [Thread-76666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:07:49.008 [DEBUG] [Thread-76666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:07:49.010 [DEBUG] [Thread-76666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:07:49.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:07:49.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:07:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:07:49.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:07:49.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:07:49.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:07:49.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.796629 -999.00  +10.80  36.94     83   +8.20 1 3 2 2 1     0    0 -0.15 -122.17 ----- 37.1 36.9 312.8 41.5 12.5 -6.4 12.3 -8.2 12.1 -6.2 12.3 -6.6
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.796629
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:07:49.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:07:15', tmtdew=3.34, humidity=80.04, cloud=0.0, wind=39.96, temperature=11.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:07:08.746', atlas_cloud=3, 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.6154999999999999, nan, nan, nan, nan, nan, nan, 0.6157499999999994], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:07:49.030 [DEBUG] [Thread-76666] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:07:49.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:07:49.116 [DEBUG] [Thread-76669] [transport.py] [_log()] starting thread (client mode): 0xf57f2b30
2025-12-12T21:07:49.116 [DEBUG] [Thread-76669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:07:49.131 [DEBUG] [Thread-76669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:07:49.131 [INFO] [Thread-76669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] client lang: <none>
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] server lang: <none>
2025-12-12T21:07:49.138 [DEBUG] [Thread-76669] [transport.py] [_log()] kex follows: False
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] Compression: none
2025-12-12T21:07:49.139 [DEBUG] [Thread-76669] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:07:49.193 [DEBUG] [Thread-76669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:07:49.193 [DEBUG] [Thread-76669] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:07:49.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:07:49.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:07:49.194 [DEBUG] [Thread-76669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:07:49.250 [DEBUG] [Thread-76669] [transport.py] [_log()] userauth is OK
2025-12-12T21:07:49.251 [DEBUG] [Thread-76669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:07:49.251 [DEBUG] [Thread-76669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:07:49.251 [DEBUG] [Thread-76669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:07:49.251 [DEBUG] [Thread-76669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:07:49.265 [INFO] [Thread-76669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:07:49.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:07:49.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:07:50.090 [DEBUG] [Thread-76669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:07:50.090 [DEBUG] [Thread-76669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:07:50.138 [DEBUG] [Thread-76669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:07:50.138 [DEBUG] [Thread-76669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:07:50.146 [DEBUG] [Thread-76669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:07:50.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:07:50.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:07:50.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:07:50.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:07:50.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:07:50.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:07:50.180 [DEBUG] [Thread-76669] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:07:51.144 [DEBUG] [Thread-76671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:06.188 [DEBUG] [Thread-76672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:09.982 [DEBUG] [Thread-76673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:20.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:08:20.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:08:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:08:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 7, 47), 3.33, 80.12, 0.0, 31.57, 11.02, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:08:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:07:47
2025-12-12T21:08:21.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:08:21.102 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:21.102 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:21.214 [DEBUG] [Thread-76674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:21.237 [DEBUG] [Thread-76675] [transport.py] [_log()] starting thread (client mode): 0xf575fe50
2025-12-12T21:08:21.237 [DEBUG] [Thread-76675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:08:21.256 [DEBUG] [Thread-76675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:08:21.256 [INFO] [Thread-76675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] client lang: <none>
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] server lang: <none>
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] kex follows: False
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] Compression: none
2025-12-12T21:08:21.260 [DEBUG] [Thread-76675] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:08:21.275 [DEBUG] [Thread-76675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:08:21.275 [DEBUG] [Thread-76675] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:08:21.276 [DEBUG] [Thread-76675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:08:21.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:08:21.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:08:21.276 [DEBUG] [Thread-76675] [transport.py] [_log()] userauth is OK
2025-12-12T21:08:21.276 [DEBUG] [Thread-76675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:08:21.276 [DEBUG] [Thread-76675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:08:21.276 [DEBUG] [Thread-76675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:08:21.277 [DEBUG] [Thread-76675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:08:21.289 [INFO] [Thread-76675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:08:21.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:08:22.082 [DEBUG] [Thread-76675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:08:22.082 [DEBUG] [Thread-76675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:08:22.082 [DEBUG] [Thread-76675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:08:22.123 [DEBUG] [Thread-76675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:08:22.123 [DEBUG] [Thread-76675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:08:22.126 [DEBUG] [Thread-76675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:08:22.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:08:22.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:08:22.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:08:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:08:22.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:08:22.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:08:22.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:08:22.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:08:22.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:08:22.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.796976 -999.00  +10.90  38.25     83   +8.20 1 3 2 2 1     0    0 0.01 -113.05 ----- 29.4 38.2 334.2 42.0 12.5 -8.7 12.3 -6.9 12.1 -5.0 12.4 -5.5
2025-12-12T21:08:22.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:08:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:08:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.796976
2025-12-12T21:08:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:08:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:08:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:08:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:08:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:08:22.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:07:47', tmtdew=3.33, humidity=80.12, cloud=0.0, wind=31.57, temperature=11.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:07:38.726', atlas_cloud=3, 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.6154999999999999, nan, nan, nan, nan, nan, nan, 0.6157499999999994], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:08:22.148 [DEBUG] [Thread-76675] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:08:22.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:08:22.244 [DEBUG] [Thread-76678] [transport.py] [_log()] starting thread (client mode): 0xf57950c0
2025-12-12T21:08:22.244 [DEBUG] [Thread-76678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:08:22.258 [DEBUG] [Thread-76678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:08:22.258 [INFO] [Thread-76678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:22.266 [DEBUG] [Thread-76678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] client lang: <none>
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] server lang: <none>
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] kex follows: False
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:08:22.267 [DEBUG] [Thread-76678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:08:22.268 [DEBUG] [Thread-76678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:08:22.268 [DEBUG] [Thread-76678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:08:22.268 [DEBUG] [Thread-76678] [transport.py] [_log()] Compression: none
2025-12-12T21:08:22.268 [DEBUG] [Thread-76678] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:08:22.322 [DEBUG] [Thread-76678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:08:22.323 [DEBUG] [Thread-76678] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:08:22.324 [DEBUG] [Thread-76678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:08:22.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:08:22.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:08:22.379 [DEBUG] [Thread-76678] [transport.py] [_log()] userauth is OK
2025-12-12T21:08:22.379 [DEBUG] [Thread-76678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:08:22.379 [DEBUG] [Thread-76678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:08:22.379 [DEBUG] [Thread-76678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:08:22.380 [DEBUG] [Thread-76678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:08:22.399 [INFO] [Thread-76678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:08:22.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:08:22.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:08:23.223 [DEBUG] [Thread-76678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:08:23.223 [DEBUG] [Thread-76678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:08:23.271 [DEBUG] [Thread-76678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:08:23.271 [DEBUG] [Thread-76678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:08:23.280 [DEBUG] [Thread-76678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:08:23.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:08:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21: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') -> 00000000
2025-12-12T21:08:23.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:08:23.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:08:23.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:08:23.314 [DEBUG] [Thread-76678] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:08:36.241 [DEBUG] [Thread-76680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:51.282 [DEBUG] [Thread-76681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:08:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:08:53.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:08:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:08:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 8, 19), 3.31, 80.2, 0.0, 31.85, 11.02, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:08:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:08:19
2025-12-12T21:08:54.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:08:54.361 [DEBUG] [Thread-76682] [transport.py] [_log()] starting thread (client mode): 0xf5794e80
2025-12-12T21:08:54.361 [DEBUG] [Thread-76682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:08:54.381 [DEBUG] [Thread-76682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:08:54.381 [INFO] [Thread-76682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:08:54.384 [DEBUG] [Thread-76682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:08:54.384 [DEBUG] [Thread-76682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:08:54.384 [DEBUG] [Thread-76682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:08:54.384 [DEBUG] [Thread-76682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:54.384 [DEBUG] [Thread-76682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:54.384 [DEBUG] [Thread-76682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] client lang: <none>
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] server lang: <none>
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] kex follows: False
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] Compression: none
2025-12-12T21:08:54.385 [DEBUG] [Thread-76682] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:08:54.405 [DEBUG] [Thread-76682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:08:54.406 [DEBUG] [Thread-76682] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:08:54.406 [DEBUG] [Thread-76682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:08:54.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:08:54.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:08:54.408 [DEBUG] [Thread-76682] [transport.py] [_log()] userauth is OK
2025-12-12T21:08:54.408 [DEBUG] [Thread-76682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:08:54.409 [DEBUG] [Thread-76682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:08:54.409 [DEBUG] [Thread-76682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:08:54.409 [DEBUG] [Thread-76682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:08:54.438 [INFO] [Thread-76682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:08:54.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:08:55.051 [DEBUG] [Thread-76682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:08:55.051 [DEBUG] [Thread-76682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:08:55.052 [DEBUG] [Thread-76682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:08:55.092 [DEBUG] [Thread-76682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:08:55.092 [DEBUG] [Thread-76682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:08:55.095 [DEBUG] [Thread-76682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:08:55.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:08:55.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:08:55.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:08:55.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:08:55.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:08:55.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:08:55.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:08:55.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:08:55.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:08:55.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.797323 -999.00  +11.00  22.56     83   +8.30 1 3 1 2 1     0    0 0.18 -106.16 .NE.. 23.9 22.6 323.4 35.3 12.4 -7.6 12.3 -5.2 12.0 -3.3 12.4 -3.6
2025-12-12T21:08:55.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:08:55.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:08:55.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.797323
2025-12-12T21:08:55.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:08:55.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:08:55.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:08:55.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:08:55.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:08:55.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:08:19', tmtdew=3.31, humidity=80.2, cloud=0.0, wind=31.85, temperature=11.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:08:08.707', atlas_cloud=3, 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.6154999999999999, nan, nan, nan, nan, nan, nan, 0.6157499999999994], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:08:55.119 [DEBUG] [Thread-76682] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:08:55.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:08:55.216 [DEBUG] [Thread-76685] [transport.py] [_log()] starting thread (client mode): 0xf813ee90
2025-12-12T21:08:55.216 [DEBUG] [Thread-76685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:08:55.231 [DEBUG] [Thread-76685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:08:55.232 [INFO] [Thread-76685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:08:55.239 [DEBUG] [Thread-76685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:08:55.239 [DEBUG] [Thread-76685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:08:55.239 [DEBUG] [Thread-76685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:08:55.239 [DEBUG] [Thread-76685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] client lang: <none>
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] server lang: <none>
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] kex follows: False
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:08:55.240 [DEBUG] [Thread-76685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:08:55.241 [DEBUG] [Thread-76685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:08:55.241 [DEBUG] [Thread-76685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:08:55.241 [DEBUG] [Thread-76685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:08:55.241 [DEBUG] [Thread-76685] [transport.py] [_log()] Compression: none
2025-12-12T21:08:55.241 [DEBUG] [Thread-76685] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:08:55.299 [DEBUG] [Thread-76685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:08:55.299 [DEBUG] [Thread-76685] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:08:55.300 [DEBUG] [Thread-76685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:08:55.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:08:55.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:08:55.355 [DEBUG] [Thread-76685] [transport.py] [_log()] userauth is OK
2025-12-12T21:08:55.355 [DEBUG] [Thread-76685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:08:55.355 [DEBUG] [Thread-76685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:08:55.355 [DEBUG] [Thread-76685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:08:55.356 [DEBUG] [Thread-76685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:08:55.377 [INFO] [Thread-76685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:08:55.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:08:55.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:08:56.220 [DEBUG] [Thread-76685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:08:56.220 [DEBUG] [Thread-76685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:08:56.268 [DEBUG] [Thread-76685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:08:56.268 [DEBUG] [Thread-76685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:08:56.277 [DEBUG] [Thread-76685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:08:56.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:08:56.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:08:56.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:08:56.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:08:56.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:08:56.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:08:56.312 [DEBUG] [Thread-76685] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:09:06.308 [DEBUG] [Thread-76687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:10.056 [DEBUG] [Thread-76688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:21.305 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:21.307 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:21.359 [DEBUG] [Thread-76689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:26.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:09:26.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:09:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:09:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 9, 24), 3.17, 80.43, 0.0, 36.98, 10.93, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:09:27.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:09:24
2025-12-12T21:09:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:09:27.335 [DEBUG] [Thread-76690] [transport.py] [_log()] starting thread (client mode): 0xf57944f0
2025-12-12T21:09:27.335 [DEBUG] [Thread-76690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:09:27.355 [DEBUG] [Thread-76690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:09:27.355 [INFO] [Thread-76690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:09:27.358 [DEBUG] [Thread-76690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:09:27.358 [DEBUG] [Thread-76690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:09:27.358 [DEBUG] [Thread-76690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:09:27.358 [DEBUG] [Thread-76690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:09:27.358 [DEBUG] [Thread-76690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] client lang: <none>
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] server lang: <none>
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] kex follows: False
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] Compression: none
2025-12-12T21:09:27.359 [DEBUG] [Thread-76690] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:09:27.376 [DEBUG] [Thread-76690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:09:27.376 [DEBUG] [Thread-76690] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:09:27.376 [DEBUG] [Thread-76690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:09:27.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:09:27.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:09:27.420 [DEBUG] [Thread-76690] [transport.py] [_log()] userauth is OK
2025-12-12T21:09:27.420 [DEBUG] [Thread-76690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:09:27.420 [DEBUG] [Thread-76690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:09:27.420 [DEBUG] [Thread-76690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:09:27.421 [DEBUG] [Thread-76690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:09:27.439 [INFO] [Thread-76690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:09:27.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:09:28.235 [DEBUG] [Thread-76690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:09:28.235 [DEBUG] [Thread-76690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:09:28.235 [DEBUG] [Thread-76690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:09:28.276 [DEBUG] [Thread-76690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:09:28.276 [DEBUG] [Thread-76690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:09:28.278 [DEBUG] [Thread-76690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:09:28.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:09:28.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:09:28.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:09:28.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:09:28.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:09:28.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:09:28.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.797670 -999.00  +10.90  35.58     83   +8.20 1 3 2 2 1     0    0 0.44 -97.09 .NE.. 30.2 35.6 331.0 41.5 12.5 -4.7 12.3 -3.8 12.1 -3.1 12.4 -3.0
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.797670
2025-12-12T21:09:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:09:28.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:09:28.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:09:28.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:09:28.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:09:28.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:09:24', tmtdew=3.17, humidity=80.43, cloud=0.0, wind=36.98, temperature=10.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:08:38.688', atlas_cloud=3, 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.6154999999999999, nan, nan, nan, nan, nan, nan, 0.6157499999999994], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:09:28.299 [DEBUG] [Thread-76690] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:09:28.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:09:28.385 [DEBUG] [Thread-76693] [transport.py] [_log()] starting thread (client mode): 0xf81c0910
2025-12-12T21:09:28.385 [DEBUG] [Thread-76693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:09:28.399 [DEBUG] [Thread-76693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:09:28.399 [INFO] [Thread-76693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] client lang: <none>
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] server lang: <none>
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] kex follows: False
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] Compression: none
2025-12-12T21:09:28.407 [DEBUG] [Thread-76693] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:09:28.465 [DEBUG] [Thread-76693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:09:28.466 [DEBUG] [Thread-76693] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:09:28.466 [DEBUG] [Thread-76693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:09:28.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:09:28.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:09:28.523 [DEBUG] [Thread-76693] [transport.py] [_log()] userauth is OK
2025-12-12T21:09:28.523 [DEBUG] [Thread-76693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:09:28.523 [DEBUG] [Thread-76693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:09:28.523 [DEBUG] [Thread-76693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:09:28.523 [DEBUG] [Thread-76693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:09:28.540 [INFO] [Thread-76693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:09:28.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:09:28.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:09:29.380 [DEBUG] [Thread-76693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:09:29.380 [DEBUG] [Thread-76693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:09:29.428 [DEBUG] [Thread-76693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:09:29.429 [DEBUG] [Thread-76693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:09:29.437 [DEBUG] [Thread-76693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:09:29.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:09:29.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:09:29.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:09:29.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:09:29.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:09:29.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:09:29.469 [DEBUG] [Thread-76693] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:09:36.388 [DEBUG] [Thread-76695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:51.441 [DEBUG] [Thread-76696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:09:59.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:09:59.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:09:59.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:10:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 9, 55), 3.17, 80.95, 0.0, 36.72, 10.93, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:10:00.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:09:55
2025-12-12T21:10:00.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:10:00.474 [DEBUG] [Thread-76697] [transport.py] [_log()] starting thread (client mode): 0xf57979d0
2025-12-12T21:10:00.475 [DEBUG] [Thread-76697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:10:00.495 [DEBUG] [Thread-76697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:10:00.495 [INFO] [Thread-76697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:10:00.498 [DEBUG] [Thread-76697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:10:00.498 [DEBUG] [Thread-76697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:10:00.498 [DEBUG] [Thread-76697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:10:00.498 [DEBUG] [Thread-76697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:00.498 [DEBUG] [Thread-76697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] client lang: <none>
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] server lang: <none>
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] kex follows: False
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] Compression: none
2025-12-12T21:10:00.499 [DEBUG] [Thread-76697] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:10:00.517 [DEBUG] [Thread-76697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:10:00.518 [DEBUG] [Thread-76697] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:10:00.518 [DEBUG] [Thread-76697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:10:00.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:10:00.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:10:00.520 [DEBUG] [Thread-76697] [transport.py] [_log()] userauth is OK
2025-12-12T21:10:00.521 [DEBUG] [Thread-76697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:10:00.521 [DEBUG] [Thread-76697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:10:00.521 [DEBUG] [Thread-76697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:10:00.521 [DEBUG] [Thread-76697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:10:00.545 [INFO] [Thread-76697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:10:00.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:10:01.182 [DEBUG] [Thread-76697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:10:01.182 [DEBUG] [Thread-76697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:10:01.183 [DEBUG] [Thread-76697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:10:01.223 [DEBUG] [Thread-76697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:10:01.223 [DEBUG] [Thread-76697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:10:01.227 [DEBUG] [Thread-76697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:10:01.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:10:01.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:10:01.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:10:01.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:10:01.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:10:01.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:10:01.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:10:01.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:10:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:10:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.798365 -999.00  +11.10  30.97     83   +8.30 1 3 2 2 1     0    0 0.48 -95.09 ----- 32.4 31.0 321.4 36.3 12.5 -3.1 12.3 -3.1 12.1 -3.1 12.4 -3.0
2025-12-12T21:10:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:10:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:10:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.798365
2025-12-12T21:10:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:10:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:10:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:10:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:10:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:10:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:09:55', tmtdew=3.17, humidity=80.95, cloud=0.0, wind=36.72, temperature=10.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:09:38.736', atlas_cloud=3, 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.6154999999999999, nan, nan, nan, nan, nan, nan, 0.6157499999999994], zp_timestamp='2025-12-12T19:03:00')
2025-12-12T21:10:01.252 [DEBUG] [Thread-76697] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:10:01.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:10:01.360 [DEBUG] [Thread-76700] [transport.py] [_log()] starting thread (client mode): 0xf574ebc0
2025-12-12T21:10:01.360 [DEBUG] [Thread-76700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:10:01.375 [DEBUG] [Thread-76700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:10:01.375 [INFO] [Thread-76700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:01.383 [DEBUG] [Thread-76700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] client lang: <none>
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] server lang: <none>
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] kex follows: False
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] Compression: none
2025-12-12T21:10:01.384 [DEBUG] [Thread-76700] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:10:01.443 [DEBUG] [Thread-76700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:10:01.443 [DEBUG] [Thread-76700] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:10:01.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:10:01.444 [DEBUG] [Thread-76700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:10:01.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:10:01.498 [DEBUG] [Thread-76700] [transport.py] [_log()] userauth is OK
2025-12-12T21:10:01.499 [DEBUG] [Thread-76700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:10:01.499 [DEBUG] [Thread-76700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:10:01.499 [DEBUG] [Thread-76700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:10:01.499 [DEBUG] [Thread-76700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:10:01.513 [INFO] [Thread-76700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:10:01.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:10:01.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:10:02.388 [DEBUG] [Thread-76700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:10:02.389 [DEBUG] [Thread-76700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:10:02.437 [DEBUG] [Thread-76700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:10:02.437 [DEBUG] [Thread-76700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:10:02.446 [DEBUG] [Thread-76700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:10:02.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:10:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:10:02.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:10:02.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:10:02.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:10:02.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:10:02.480 [DEBUG] [Thread-76700] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:10:06.467 [DEBUG] [Thread-76702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:10:10.129 [DEBUG] [Thread-76703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:10:21.503 [DEBUG] [Thread-76704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:10:21.510 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:10:21.511 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:10:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:10:32.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:10:32.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:10:33.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 10, 27), 3.16, 80.97, 0.0, 34.64, 10.93, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:10:33.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:10:27
2025-12-12T21:10:33.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:10:33.479 [DEBUG] [Thread-76705] [transport.py] [_log()] starting thread (client mode): 0xf81c3a30
2025-12-12T21:10:33.479 [DEBUG] [Thread-76705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:10:33.498 [DEBUG] [Thread-76705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:10:33.498 [INFO] [Thread-76705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:10:33.501 [DEBUG] [Thread-76705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] client lang: <none>
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] server lang: <none>
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] kex follows: False
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:10:33.502 [DEBUG] [Thread-76705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:10:33.503 [DEBUG] [Thread-76705] [transport.py] [_log()] Compression: none
2025-12-12T21:10:33.503 [DEBUG] [Thread-76705] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:10:33.522 [DEBUG] [Thread-76705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:10:33.523 [DEBUG] [Thread-76705] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:10:33.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:10:33.524 [DEBUG] [Thread-76705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:10:33.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:10:33.527 [DEBUG] [Thread-76705] [transport.py] [_log()] userauth is OK
2025-12-12T21:10:33.527 [DEBUG] [Thread-76705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:10:33.528 [DEBUG] [Thread-76705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:10:33.528 [DEBUG] [Thread-76705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:10:33.528 [DEBUG] [Thread-76705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:10:33.563 [INFO] [Thread-76705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:10:33.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:10:34.161 [DEBUG] [Thread-76705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:10:34.161 [DEBUG] [Thread-76705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:10:34.162 [DEBUG] [Thread-76705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:10:34.202 [DEBUG] [Thread-76705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:10:34.202 [DEBUG] [Thread-76705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:10:34.204 [DEBUG] [Thread-76705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:10:34.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:10:34.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:10:34.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:10:34.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:10:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:10:34.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:10:34.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:10:34.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:10:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:10:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.798712 -999.00  +11.10  21.91     83   +8.30 1 3 1 2 1     0    0 0.68 -90.20 ----- 29.2 21.9 335.8 41.1 12.5 -3.7 12.4 -4.2 12.1 -4.1 12.4 -3.9
2025-12-12T21:10:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:10:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:10:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.798712
2025-12-12T21:10:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:10:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:10:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:10:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:10:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:10:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:10:27', tmtdew=3.16, humidity=80.97, cloud=0.0, wind=34.64, temperature=10.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:10:08.717', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:08:00')
2025-12-12T21:10:34.229 [DEBUG] [Thread-76705] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:10:34.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:10:34.324 [DEBUG] [Thread-76708] [transport.py] [_log()] starting thread (client mode): 0xf81c3f10
2025-12-12T21:10:34.324 [DEBUG] [Thread-76708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:10:34.339 [DEBUG] [Thread-76708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:10:34.339 [INFO] [Thread-76708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:10:34.346 [DEBUG] [Thread-76708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] client lang: <none>
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] server lang: <none>
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] kex follows: False
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] Compression: none
2025-12-12T21:10:34.347 [DEBUG] [Thread-76708] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:10:34.403 [DEBUG] [Thread-76708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:10:34.403 [DEBUG] [Thread-76708] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:10:34.404 [DEBUG] [Thread-76708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:10:34.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:10:34.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:10:34.459 [DEBUG] [Thread-76708] [transport.py] [_log()] userauth is OK
2025-12-12T21:10:34.459 [DEBUG] [Thread-76708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:10:34.459 [DEBUG] [Thread-76708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:10:34.460 [DEBUG] [Thread-76708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:10:34.460 [DEBUG] [Thread-76708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:10:34.479 [INFO] [Thread-76708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:10:34.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:10:34.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:10:35.312 [DEBUG] [Thread-76708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:10:35.313 [DEBUG] [Thread-76708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:10:35.361 [DEBUG] [Thread-76708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:10:35.361 [DEBUG] [Thread-76708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:10:35.370 [DEBUG] [Thread-76708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:10:35.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:10:35.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:10:35.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:10:35.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:10:35.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:10:35.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:10:35.403 [DEBUG] [Thread-76708] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:10:36.528 [DEBUG] [Thread-76710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:10:51.565 [DEBUG] [Thread-76711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:05.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:11:05.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:11:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:11:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 10, 59), 3.11, 80.98, 0.0, 31.9, 10.95, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:11:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:10:59
2025-12-12T21:11:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:11:06.389 [DEBUG] [Thread-76712] [transport.py] [_log()] starting thread (client mode): 0xf57944f0
2025-12-12T21:11:06.389 [DEBUG] [Thread-76712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:11:06.405 [DEBUG] [Thread-76712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:11:06.405 [INFO] [Thread-76712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] client lang: <none>
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] server lang: <none>
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] kex follows: False
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] Compression: none
2025-12-12T21:11:06.407 [DEBUG] [Thread-76712] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:11:06.416 [DEBUG] [Thread-76712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:11:06.417 [DEBUG] [Thread-76712] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:11:06.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:11:06.417 [DEBUG] [Thread-76712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:11:06.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:11:06.418 [DEBUG] [Thread-76712] [transport.py] [_log()] userauth is OK
2025-12-12T21:11:06.418 [DEBUG] [Thread-76712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:11:06.418 [DEBUG] [Thread-76712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:11:06.418 [DEBUG] [Thread-76712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:11:06.418 [DEBUG] [Thread-76712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:11:06.432 [INFO] [Thread-76712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:11:06.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:11:06.598 [DEBUG] [Thread-76714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:07.118 [DEBUG] [Thread-76712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:11:07.118 [DEBUG] [Thread-76712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:11:07.119 [DEBUG] [Thread-76712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:11:07.160 [DEBUG] [Thread-76712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:11:07.160 [DEBUG] [Thread-76712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:11:07.162 [DEBUG] [Thread-76712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:11:07.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:11:07.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:11:07.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:11:07.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:11:07.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:11:07.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:11:07.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:11:07.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:11:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:11:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.799059 -999.00  +11.00  33.54     83   +8.30 1 3 2 2 1     0    0 0.52 -92.99 ----- 20.5 33.5 333.6 40.0 12.5 -5.2 12.4 -5.4 12.1 -4.0 12.4 -3.5
2025-12-12T21:11:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:11:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:11:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.799059
2025-12-12T21:11:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:11:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:11:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:11:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:11:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:11:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:10:59', tmtdew=3.11, humidity=80.98, cloud=0.0, wind=31.9, temperature=10.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:10:38.698', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:08:00')
2025-12-12T21:11:07.187 [DEBUG] [Thread-76712] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:11:07.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:11:07.283 [DEBUG] [Thread-76716] [transport.py] [_log()] starting thread (client mode): 0xf57f3bb0
2025-12-12T21:11:07.283 [DEBUG] [Thread-76716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:11:07.297 [DEBUG] [Thread-76716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:11:07.297 [INFO] [Thread-76716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:11:07.305 [DEBUG] [Thread-76716] [transport.py] [_log()] client lang: <none>
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] server lang: <none>
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] kex follows: False
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] Compression: none
2025-12-12T21:11:07.306 [DEBUG] [Thread-76716] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:11:07.363 [DEBUG] [Thread-76716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:11:07.363 [DEBUG] [Thread-76716] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:11:07.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:11:07.364 [DEBUG] [Thread-76716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:11:07.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:11:07.419 [DEBUG] [Thread-76716] [transport.py] [_log()] userauth is OK
2025-12-12T21:11:07.419 [DEBUG] [Thread-76716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:11:07.419 [DEBUG] [Thread-76716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:11:07.419 [DEBUG] [Thread-76716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:11:07.419 [DEBUG] [Thread-76716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:11:07.438 [INFO] [Thread-76716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:11:07.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:11:07.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:11:08.257 [DEBUG] [Thread-76716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:11:08.257 [DEBUG] [Thread-76716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:11:08.306 [DEBUG] [Thread-76716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:11:08.306 [DEBUG] [Thread-76716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:11:08.315 [DEBUG] [Thread-76716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:11:08.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:11:08.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:11:08.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:11:08.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:11:08.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:11:08.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:11:08.349 [DEBUG] [Thread-76716] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:11:10.206 [DEBUG] [Thread-76718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:21.626 [DEBUG] [Thread-76719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:21.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:21.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:36.679 [DEBUG] [Thread-76720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:11:38.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:11:38.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:11:38.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:11:39.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 11, 32), 3.1, 81.05, 0.0, 33.33, 10.98, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:11:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:11:32
2025-12-12T21:11:39.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:11:39.335 [DEBUG] [Thread-76721] [transport.py] [_log()] starting thread (client mode): 0xf57e0100
2025-12-12T21:11:39.335 [DEBUG] [Thread-76721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:11:39.355 [DEBUG] [Thread-76721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:11:39.355 [INFO] [Thread-76721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] client lang: <none>
2025-12-12T21:11:39.359 [DEBUG] [Thread-76721] [transport.py] [_log()] server lang: <none>
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] kex follows: False
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] Compression: none
2025-12-12T21:11:39.360 [DEBUG] [Thread-76721] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:11:39.378 [DEBUG] [Thread-76721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:11:39.379 [DEBUG] [Thread-76721] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:11:39.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:11:39.380 [DEBUG] [Thread-76721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:11:39.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:11:39.420 [DEBUG] [Thread-76721] [transport.py] [_log()] userauth is OK
2025-12-12T21:11:39.421 [DEBUG] [Thread-76721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:11:39.421 [DEBUG] [Thread-76721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:11:39.421 [DEBUG] [Thread-76721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:11:39.421 [DEBUG] [Thread-76721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:11:39.442 [INFO] [Thread-76721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:11:39.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:11:40.073 [DEBUG] [Thread-76721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:11:40.073 [DEBUG] [Thread-76721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:11:40.073 [DEBUG] [Thread-76721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:11:40.114 [DEBUG] [Thread-76721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:11:40.114 [DEBUG] [Thread-76721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:11:40.116 [DEBUG] [Thread-76721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:11:40.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:11:40.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:11:40.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:11:40.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:11:40.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:11:40.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:11:40.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:11:40.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:11:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:11:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.799406 -999.00  +11.00  30.77     83   +8.40 1 3 2 2 1     0    0 0.87 -80.47 ----- 33.7 30.8 330.6 34.2 12.5 -4.9 12.4 -4.1 12.2 -3.1 12.4 -2.9
2025-12-12T21:11:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:11:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:11:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.799406
2025-12-12T21:11:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:11:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:11:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:11:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:11:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:11:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:11:32', tmtdew=3.1, humidity=81.05, cloud=0.0, wind=33.33, temperature=10.98, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:11:08.678', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:08:00')
2025-12-12T21:11:40.141 [DEBUG] [Thread-76721] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:11:40.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:11:40.235 [DEBUG] [Thread-76724] [transport.py] [_log()] starting thread (client mode): 0xf57a7940
2025-12-12T21:11:40.235 [DEBUG] [Thread-76724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:11:40.250 [DEBUG] [Thread-76724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:11:40.250 [INFO] [Thread-76724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:11:40.258 [DEBUG] [Thread-76724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:11:40.258 [DEBUG] [Thread-76724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:11:40.258 [DEBUG] [Thread-76724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:11:40.258 [DEBUG] [Thread-76724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] client lang: <none>
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] server lang: <none>
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] kex follows: False
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:11:40.259 [DEBUG] [Thread-76724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:11:40.260 [DEBUG] [Thread-76724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:11:40.260 [DEBUG] [Thread-76724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:11:40.260 [DEBUG] [Thread-76724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:11:40.260 [DEBUG] [Thread-76724] [transport.py] [_log()] Compression: none
2025-12-12T21:11:40.260 [DEBUG] [Thread-76724] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:11:40.315 [DEBUG] [Thread-76724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:11:40.316 [DEBUG] [Thread-76724] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:11:40.317 [DEBUG] [Thread-76724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:11:40.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:11:40.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:11:40.371 [DEBUG] [Thread-76724] [transport.py] [_log()] userauth is OK
2025-12-12T21:11:40.372 [DEBUG] [Thread-76724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:11:40.372 [DEBUG] [Thread-76724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:11:40.372 [DEBUG] [Thread-76724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:11:40.372 [DEBUG] [Thread-76724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:11:40.394 [INFO] [Thread-76724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:11:40.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:11:40.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:11:41.212 [DEBUG] [Thread-76724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:11:41.212 [DEBUG] [Thread-76724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:11:41.260 [DEBUG] [Thread-76724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:11:41.260 [DEBUG] [Thread-76724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:11:41.269 [DEBUG] [Thread-76724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:11:41.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:11:41.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:11:41.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:11:41.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:11:41.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:11:41.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:11:41.303 [DEBUG] [Thread-76724] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:11:51.709 [DEBUG] [Thread-76726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:06.749 [DEBUG] [Thread-76727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:10.280 [DEBUG] [Thread-76728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:12:11.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:12:11.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:12:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 12, 4), 3.05, 81.35, 0.0, 35.92, 11.22, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:12:11.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:12:04
2025-12-12T21:12:12.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:12:12.251 [DEBUG] [Thread-76729] [transport.py] [_log()] starting thread (client mode): 0xf575fdf0
2025-12-12T21:12:12.251 [DEBUG] [Thread-76729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:12:12.267 [DEBUG] [Thread-76729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:12:12.268 [INFO] [Thread-76729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] client lang: <none>
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] server lang: <none>
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] kex follows: False
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] Compression: none
2025-12-12T21:12:12.271 [DEBUG] [Thread-76729] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:12:12.290 [DEBUG] [Thread-76729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:12:12.291 [DEBUG] [Thread-76729] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:12:12.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:12:12.291 [DEBUG] [Thread-76729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:12:12.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:12:12.333 [DEBUG] [Thread-76729] [transport.py] [_log()] userauth is OK
2025-12-12T21:12:12.333 [DEBUG] [Thread-76729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:12:12.333 [DEBUG] [Thread-76729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:12:12.333 [DEBUG] [Thread-76729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:12:12.333 [DEBUG] [Thread-76729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:12:12.356 [INFO] [Thread-76729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:12:12.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:12:12.972 [DEBUG] [Thread-76729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:12:12.973 [DEBUG] [Thread-76729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:12:12.973 [DEBUG] [Thread-76729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:12:13.013 [DEBUG] [Thread-76729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:12:13.013 [DEBUG] [Thread-76729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:12:13.015 [DEBUG] [Thread-76729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:12:13.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:12:13.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:12:13.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:12:13.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:12:13.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:12:13.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:12:13.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:12:13.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.799754 -999.00  +11.00  24.02     84   +8.40 1 3 1 2 1     0    0 0.73 -86.29 ..E.. 43.0 24.0 335.9 38.9 12.5 -3.7 12.3 -3.5 12.1 -3.0 12.4 -2.8
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.799754
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:12:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:12:04', tmtdew=3.05, humidity=81.35, cloud=0.0, wind=35.92, temperature=11.22, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:11:38.746', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:08:00')
2025-12-12T21:12:13.038 [DEBUG] [Thread-76729] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:12:13.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:12:13.131 [DEBUG] [Thread-76732] [transport.py] [_log()] starting thread (client mode): 0xf5794f70
2025-12-12T21:12:13.131 [DEBUG] [Thread-76732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:12:13.146 [DEBUG] [Thread-76732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:12:13.146 [INFO] [Thread-76732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:12:13.154 [DEBUG] [Thread-76732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:12:13.154 [DEBUG] [Thread-76732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:12:13.154 [DEBUG] [Thread-76732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] client lang: <none>
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] server lang: <none>
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] kex follows: False
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] Compression: none
2025-12-12T21:12:13.155 [DEBUG] [Thread-76732] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:12:13.210 [DEBUG] [Thread-76732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:12:13.211 [DEBUG] [Thread-76732] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:12:13.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:12:13.212 [DEBUG] [Thread-76732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:12:13.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:12:13.271 [DEBUG] [Thread-76732] [transport.py] [_log()] userauth is OK
2025-12-12T21:12:13.271 [DEBUG] [Thread-76732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:12:13.271 [DEBUG] [Thread-76732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:12:13.271 [DEBUG] [Thread-76732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:12:13.271 [DEBUG] [Thread-76732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:12:13.290 [INFO] [Thread-76732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:12:13.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:12:13.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:12:14.128 [DEBUG] [Thread-76732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:12:14.128 [DEBUG] [Thread-76732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:12:14.175 [DEBUG] [Thread-76732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:12:14.176 [DEBUG] [Thread-76732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:12:14.184 [DEBUG] [Thread-76732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:12:14.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:12:14.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:12:14.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:12:14.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:12:14.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:12:14.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:12:14.219 [DEBUG] [Thread-76732] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:12:21.777 [DEBUG] [Thread-76734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:21.926 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:21.927 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:36.816 [DEBUG] [Thread-76735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:12:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:12:44.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:12:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:12:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 12, 36), 3.01, 81.23, 0.0, 34.46, 10.95, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:12:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:12:36
2025-12-12T21:12:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:12:45.240 [DEBUG] [Thread-76736] [transport.py] [_log()] starting thread (client mode): 0xf5772530
2025-12-12T21:12:45.241 [DEBUG] [Thread-76736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:12:45.262 [DEBUG] [Thread-76736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:12:45.262 [INFO] [Thread-76736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] client lang: <none>
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] server lang: <none>
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] kex follows: False
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] Compression: none
2025-12-12T21:12:45.265 [DEBUG] [Thread-76736] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:12:45.281 [DEBUG] [Thread-76736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:12:45.282 [DEBUG] [Thread-76736] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:12:45.282 [DEBUG] [Thread-76736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:12:45.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:12:45.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:12:45.283 [DEBUG] [Thread-76736] [transport.py] [_log()] userauth is OK
2025-12-12T21:12:45.283 [DEBUG] [Thread-76736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:12:45.283 [DEBUG] [Thread-76736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:12:45.283 [DEBUG] [Thread-76736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:12:45.283 [DEBUG] [Thread-76736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:12:45.292 [INFO] [Thread-76736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:12:45.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:12:45.926 [DEBUG] [Thread-76736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:12:45.926 [DEBUG] [Thread-76736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:12:45.927 [DEBUG] [Thread-76736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:12:45.967 [DEBUG] [Thread-76736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:12:45.967 [DEBUG] [Thread-76736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:12:45.969 [DEBUG] [Thread-76736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:12:45.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:12:45.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:12:45.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:12:45.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:12:45.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:12:45.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:12:45.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.800101 -999.00  +10.90  36.51     84   +8.40 1 3 2 2 1     0    0 0.78 -82.40 ..E.. 36.5 36.5 330.4 49.4 12.5 -3.6 12.3 -3.4 12.1 -2.9 12.4 -2.7
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.800101
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:12:36', tmtdew=3.01, humidity=81.23, cloud=0.0, wind=34.46, temperature=10.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:12:08.726', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:08:00')
2025-12-12T21:12:45.987 [DEBUG] [Thread-76736] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:12:46.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:12:46.073 [DEBUG] [Thread-76739] [transport.py] [_log()] starting thread (client mode): 0xf575fa00
2025-12-12T21:12:46.073 [DEBUG] [Thread-76739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:12:46.087 [DEBUG] [Thread-76739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:12:46.087 [INFO] [Thread-76739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] client lang: <none>
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] server lang: <none>
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] kex follows: False
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] Compression: none
2025-12-12T21:12:46.095 [DEBUG] [Thread-76739] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:12:46.153 [DEBUG] [Thread-76739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:12:46.153 [DEBUG] [Thread-76739] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:12:46.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:12:46.154 [DEBUG] [Thread-76739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:12:46.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:12:46.210 [DEBUG] [Thread-76739] [transport.py] [_log()] userauth is OK
2025-12-12T21:12:46.210 [DEBUG] [Thread-76739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:12:46.210 [DEBUG] [Thread-76739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:12:46.210 [DEBUG] [Thread-76739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:12:46.211 [DEBUG] [Thread-76739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:12:46.224 [INFO] [Thread-76739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:12:46.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:12:46.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:12:47.085 [DEBUG] [Thread-76739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:12:47.085 [DEBUG] [Thread-76739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:12:47.132 [DEBUG] [Thread-76739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:12:47.132 [DEBUG] [Thread-76739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:12:47.140 [DEBUG] [Thread-76739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:12:47.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:12:47.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:12:47.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:12:47.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:12:47.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:12:47.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:12:47.172 [DEBUG] [Thread-76739] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:12:51.844 [DEBUG] [Thread-76741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:06.889 [DEBUG] [Thread-76742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:10.356 [DEBUG] [Thread-76743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:13:17.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:13:17.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:13:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 13, 8), 3.01, 81.28, 0.0, 34.86, 10.97, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:13:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:13:08
2025-12-12T21:13:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:13:18.158 [DEBUG] [Thread-76744] [transport.py] [_log()] starting thread (client mode): 0xf57e3a90
2025-12-12T21:13:18.158 [DEBUG] [Thread-76744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:13:18.177 [DEBUG] [Thread-76744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:13:18.177 [INFO] [Thread-76744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] client lang: <none>
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] server lang: <none>
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] kex follows: False
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] Compression: none
2025-12-12T21:13:18.179 [DEBUG] [Thread-76744] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:13:18.191 [DEBUG] [Thread-76744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:13:18.192 [DEBUG] [Thread-76744] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:13:18.192 [DEBUG] [Thread-76744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:13:18.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:13:18.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:13:18.194 [DEBUG] [Thread-76744] [transport.py] [_log()] userauth is OK
2025-12-12T21:13:18.194 [DEBUG] [Thread-76744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:13:18.194 [DEBUG] [Thread-76744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:13:18.194 [DEBUG] [Thread-76744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:13:18.194 [DEBUG] [Thread-76744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:13:18.218 [INFO] [Thread-76744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:13:18.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:13:18.871 [DEBUG] [Thread-76744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:13:18.871 [DEBUG] [Thread-76744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:13:18.872 [DEBUG] [Thread-76744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:13:18.913 [DEBUG] [Thread-76744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:13:18.913 [DEBUG] [Thread-76744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:13:18.917 [DEBUG] [Thread-76744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:13:18.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:13:18.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:13:18.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:13:18.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:13:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:13:18.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:13:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:13:18.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:13:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:13:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.800795 -999.00  +10.90  28.02     84   +8.50 1 3 1 2 1     0    0 0.87 -75.08 ----- 29.2 28.0 328.0 42.1 12.5 -3.1 12.3 -2.9 12.1 -2.6 12.4 -2.5
2025-12-12T21:13:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:13:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:13:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.800795
2025-12-12T21:13:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:13:18.938 [DEBUG] [Thread-76744] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:13:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:13:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:13:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:13:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:13:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:13:08', tmtdew=3.01, humidity=81.28, cloud=0.0, wind=34.86, temperature=10.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:13:08.688', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:13:19.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:13:19.034 [DEBUG] [Thread-76747] [transport.py] [_log()] starting thread (client mode): 0xf57e04f0
2025-12-12T21:13:19.035 [DEBUG] [Thread-76747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:13:19.050 [DEBUG] [Thread-76747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:13:19.050 [INFO] [Thread-76747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] client lang: <none>
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] server lang: <none>
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] kex follows: False
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] Compression: none
2025-12-12T21:13:19.058 [DEBUG] [Thread-76747] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:13:19.115 [DEBUG] [Thread-76747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:13:19.115 [DEBUG] [Thread-76747] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:13:19.116 [DEBUG] [Thread-76747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:13:19.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:13:19.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:13:19.171 [DEBUG] [Thread-76747] [transport.py] [_log()] userauth is OK
2025-12-12T21:13:19.171 [DEBUG] [Thread-76747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:13:19.172 [DEBUG] [Thread-76747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:13:19.172 [DEBUG] [Thread-76747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:13:19.172 [DEBUG] [Thread-76747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:13:19.191 [INFO] [Thread-76747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:13:19.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:13:19.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:13:20.036 [DEBUG] [Thread-76747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:13:20.036 [DEBUG] [Thread-76747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:13:20.085 [DEBUG] [Thread-76747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:13:20.085 [DEBUG] [Thread-76747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:13:20.094 [DEBUG] [Thread-76747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:13:20.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:13:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:13: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
2025-12-12T21:13:20.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:13:20.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:13:20.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:13:20.128 [DEBUG] [Thread-76747] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:13:21.915 [DEBUG] [Thread-76749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:22.140 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:22.141 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:36.951 [DEBUG] [Thread-76750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:13:50.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:13:50.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:13:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 13, 40), 3.05, 81.3, 0.0, 34.46, 11.0, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:13:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:13:40
2025-12-12T21:13:50.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:13:51.109 [DEBUG] [Thread-76751] [transport.py] [_log()] starting thread (client mode): 0xf574f1f0
2025-12-12T21:13:51.110 [DEBUG] [Thread-76751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:13:51.130 [DEBUG] [Thread-76751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:13:51.130 [INFO] [Thread-76751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:13:51.134 [DEBUG] [Thread-76751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] client lang: <none>
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] server lang: <none>
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] kex follows: False
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] Compression: none
2025-12-12T21:13:51.135 [DEBUG] [Thread-76751] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:13:51.159 [DEBUG] [Thread-76751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:13:51.159 [DEBUG] [Thread-76751] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:13:51.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:13:51.160 [DEBUG] [Thread-76751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:13:51.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:13:51.162 [DEBUG] [Thread-76751] [transport.py] [_log()] userauth is OK
2025-12-12T21:13:51.162 [DEBUG] [Thread-76751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:13:51.162 [DEBUG] [Thread-76751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:13:51.162 [DEBUG] [Thread-76751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:13:51.163 [DEBUG] [Thread-76751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:13:51.187 [INFO] [Thread-76751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:13:51.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:13:51.838 [DEBUG] [Thread-76751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:13:51.838 [DEBUG] [Thread-76751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:13:51.838 [DEBUG] [Thread-76751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:13:51.879 [DEBUG] [Thread-76751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:13:51.879 [DEBUG] [Thread-76751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:13:51.882 [DEBUG] [Thread-76751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:13:51.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:13:51.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:13:51.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:13:51.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:13:51.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:13:51.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:13:51.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:13:51.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:13:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:13:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.801142 -999.00  +11.00  38.30     84   +8.40 1 3 2 2 1     0    0 0.93 -74.46 ----- 30.8 38.3 328.6 40.8 12.5 -2.9 12.4 -2.9 12.1 -2.6 12.4 -2.5
2025-12-12T21:13:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:13:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:13:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.801142
2025-12-12T21:13:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:13:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:13:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:13:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:13:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:13:51.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:13:40', tmtdew=3.05, humidity=81.3, cloud=0.0, wind=34.46, temperature=11.0, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:13:38.669', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:13:51.910 [DEBUG] [Thread-76751] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:13:51.982 [DEBUG] [Thread-76754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:13:51.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:13:52.006 [DEBUG] [Thread-76755] [transport.py] [_log()] starting thread (client mode): 0xf57e0e20
2025-12-12T21:13:52.006 [DEBUG] [Thread-76755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:13:52.021 [DEBUG] [Thread-76755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:13:52.021 [INFO] [Thread-76755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:52.029 [DEBUG] [Thread-76755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] client lang: <none>
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] server lang: <none>
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] kex follows: False
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] Compression: none
2025-12-12T21:13:52.030 [DEBUG] [Thread-76755] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:13:52.087 [DEBUG] [Thread-76755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:13:52.087 [DEBUG] [Thread-76755] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:13:52.088 [DEBUG] [Thread-76755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:13:52.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:13:52.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:13:52.143 [DEBUG] [Thread-76755] [transport.py] [_log()] userauth is OK
2025-12-12T21:13:52.143 [DEBUG] [Thread-76755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:13:52.143 [DEBUG] [Thread-76755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:13:52.143 [DEBUG] [Thread-76755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:13:52.143 [DEBUG] [Thread-76755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:13:52.162 [INFO] [Thread-76755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:13:52.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:13:52.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:13:52.998 [DEBUG] [Thread-76755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:13:52.999 [DEBUG] [Thread-76755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:13:53.047 [DEBUG] [Thread-76755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:13:53.047 [DEBUG] [Thread-76755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:13:53.056 [DEBUG] [Thread-76755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:13:53.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:13:53.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:13:53.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:13:53.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:13:53.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:13:53.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:13:53.089 [DEBUG] [Thread-76755] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:14:07.016 [DEBUG] [Thread-76757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:10.427 [DEBUG] [Thread-76758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:22.046 [DEBUG] [Thread-76759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:22.345 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:22.346 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:14:23.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:14:23.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:14:23.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 14, 12), 3.03, 81.4, 0.0, 36.14, 11.03, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:14:23.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:14:12
2025-12-12T21:14:23.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:14:24.069 [DEBUG] [Thread-76760] [transport.py] [_log()] starting thread (client mode): 0xf574f880
2025-12-12T21:14:24.070 [DEBUG] [Thread-76760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:14:24.089 [DEBUG] [Thread-76760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:14:24.089 [INFO] [Thread-76760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] client lang: <none>
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] server lang: <none>
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] kex follows: False
2025-12-12T21:14:24.092 [DEBUG] [Thread-76760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:14:24.093 [DEBUG] [Thread-76760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:14:24.093 [DEBUG] [Thread-76760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:14:24.093 [DEBUG] [Thread-76760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:14:24.093 [DEBUG] [Thread-76760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:14:24.093 [DEBUG] [Thread-76760] [transport.py] [_log()] Compression: none
2025-12-12T21:14:24.093 [DEBUG] [Thread-76760] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:14:24.111 [DEBUG] [Thread-76760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:14:24.111 [DEBUG] [Thread-76760] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:14:24.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:14:24.112 [DEBUG] [Thread-76760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:14:24.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:14:24.114 [DEBUG] [Thread-76760] [transport.py] [_log()] userauth is OK
2025-12-12T21:14:24.114 [DEBUG] [Thread-76760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:14:24.114 [DEBUG] [Thread-76760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:14:24.114 [DEBUG] [Thread-76760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:14:24.114 [DEBUG] [Thread-76760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:14:24.138 [INFO] [Thread-76760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:14:24.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:14:24.814 [DEBUG] [Thread-76760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:14:24.814 [DEBUG] [Thread-76760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:14:24.815 [DEBUG] [Thread-76760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:14:24.855 [DEBUG] [Thread-76760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:14:24.855 [DEBUG] [Thread-76760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:14:24.857 [DEBUG] [Thread-76760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:14:24.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:14:24.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:14:24.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:14:24.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:14:24.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:14:24.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:14:24.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:14:24.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:14:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:14:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.801490 -999.00  +11.00  28.94     84   +8.50 1 3 1 2 1     0    0 0.90 -73.91 ----- 12.7 28.9 336.6 39.1 12.6 -3.0 12.4 -3.0 12.1 -2.7 12.5 -2.5
2025-12-12T21:14:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:14:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:14:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.801490
2025-12-12T21:14:24.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:14:24.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:14:24.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:14:24.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:14:24.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:14:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:14:12', tmtdew=3.03, humidity=81.4, cloud=0.0, wind=36.14, temperature=11.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:14:08.736', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:14:24.882 [DEBUG] [Thread-76760] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:14:24.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:14:24.978 [DEBUG] [Thread-76763] [transport.py] [_log()] starting thread (client mode): 0xf575e650
2025-12-12T21:14:24.978 [DEBUG] [Thread-76763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:14:24.994 [DEBUG] [Thread-76763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:14:24.994 [INFO] [Thread-76763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:14:25.001 [DEBUG] [Thread-76763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] client lang: <none>
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] server lang: <none>
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] kex follows: False
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] Compression: none
2025-12-12T21:14:25.002 [DEBUG] [Thread-76763] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:14:25.059 [DEBUG] [Thread-76763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:14:25.059 [DEBUG] [Thread-76763] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:14:25.060 [DEBUG] [Thread-76763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:14:25.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:14:25.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:14:25.115 [DEBUG] [Thread-76763] [transport.py] [_log()] userauth is OK
2025-12-12T21:14:25.115 [DEBUG] [Thread-76763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:14:25.115 [DEBUG] [Thread-76763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:14:25.115 [DEBUG] [Thread-76763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:14:25.115 [DEBUG] [Thread-76763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:14:25.135 [INFO] [Thread-76763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:14:25.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:14:25.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:14:25.989 [DEBUG] [Thread-76763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:14:25.990 [DEBUG] [Thread-76763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:14:26.038 [DEBUG] [Thread-76763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:14:26.038 [DEBUG] [Thread-76763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:14:26.047 [DEBUG] [Thread-76763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:14:26.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:14: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')
2025-12-12T21:14:26.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:14:26.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:14:26.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:14:26.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:14:26.083 [DEBUG] [Thread-76763] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:14:37.075 [DEBUG] [Thread-76765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:52.114 [DEBUG] [Thread-76766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:14:56.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:14:56.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:14:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:14:56.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 14, 44), 3.03, 81.95, 0.0, 39.03, 11.02, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:14:56.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:14:44
2025-12-12T21:14:56.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:14:57.050 [DEBUG] [Thread-76767] [transport.py] [_log()] starting thread (client mode): 0xf574dd80
2025-12-12T21:14:57.050 [DEBUG] [Thread-76767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:14:57.070 [DEBUG] [Thread-76767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:14:57.070 [INFO] [Thread-76767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:14:57.073 [DEBUG] [Thread-76767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:14:57.073 [DEBUG] [Thread-76767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:14:57.073 [DEBUG] [Thread-76767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] client lang: <none>
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] server lang: <none>
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] kex follows: False
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:14:57.074 [DEBUG] [Thread-76767] [transport.py] [_log()] Compression: none
2025-12-12T21:14:57.075 [DEBUG] [Thread-76767] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:14:57.091 [DEBUG] [Thread-76767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:14:57.092 [DEBUG] [Thread-76767] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:14:57.092 [DEBUG] [Thread-76767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:14:57.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:14:57.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:14:57.094 [DEBUG] [Thread-76767] [transport.py] [_log()] userauth is OK
2025-12-12T21:14:57.094 [DEBUG] [Thread-76767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:14:57.094 [DEBUG] [Thread-76767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:14:57.095 [DEBUG] [Thread-76767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:14:57.095 [DEBUG] [Thread-76767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:14:57.130 [INFO] [Thread-76767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:14:57.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:14:57.800 [DEBUG] [Thread-76767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:14:57.800 [DEBUG] [Thread-76767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:14:57.801 [DEBUG] [Thread-76767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:14:57.842 [DEBUG] [Thread-76767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:14:57.843 [DEBUG] [Thread-76767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:14:57.847 [DEBUG] [Thread-76767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:14:57.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:14:57.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:14:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:14:57.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:14:57.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:14:57.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:14:57.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:14:57.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:14:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:14:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.801837 -999.00  +11.00  31.10     84   +8.50 1 3 2 2 1     0    0 0.86 -74.44 ----- 31.0 31.1 328.4 39.3 12.6 -2.9 12.4 -2.8 12.2 -2.6 12.4 -2.5
2025-12-12T21:14:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:14:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:14:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.801837
2025-12-12T21:14:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:14:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:14:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:14:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:14:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:14:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:14:44', tmtdew=3.03, humidity=81.95, cloud=0.0, wind=39.03, temperature=11.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:14:38.717', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:14:57.876 [DEBUG] [Thread-76767] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:14:57.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:14:57.974 [DEBUG] [Thread-76770] [transport.py] [_log()] starting thread (client mode): 0xf5771c30
2025-12-12T21:14:57.974 [DEBUG] [Thread-76770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:14:57.991 [DEBUG] [Thread-76770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:14:57.992 [INFO] [Thread-76770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:57.999 [DEBUG] [Thread-76770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] client lang: <none>
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] server lang: <none>
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] kex follows: False
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] Compression: none
2025-12-12T21:14:58.000 [DEBUG] [Thread-76770] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:14:58.058 [DEBUG] [Thread-76770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:14:58.059 [DEBUG] [Thread-76770] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:14:58.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:14:58.060 [DEBUG] [Thread-76770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:14:58.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:14:58.115 [DEBUG] [Thread-76770] [transport.py] [_log()] userauth is OK
2025-12-12T21:14:58.115 [DEBUG] [Thread-76770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:14:58.115 [DEBUG] [Thread-76770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:14:58.116 [DEBUG] [Thread-76770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:14:58.116 [DEBUG] [Thread-76770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:14:58.138 [INFO] [Thread-76770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:14:58.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:14:58.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:14:58.967 [DEBUG] [Thread-76770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:14:58.967 [DEBUG] [Thread-76770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:14:59.015 [DEBUG] [Thread-76770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:14:59.015 [DEBUG] [Thread-76770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:14:59.024 [DEBUG] [Thread-76770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:14:59.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:14:59.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:14:59.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:14:59.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:14:59.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:14:59.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:14:59.058 [DEBUG] [Thread-76770] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:15:07.145 [DEBUG] [Thread-76772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:15:10.503 [DEBUG] [Thread-76773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:15:22.189 [DEBUG] [Thread-76774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:15:22.551 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:15:22.552 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:15:29.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:15:29.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:15:29.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:15:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 15, 16), 3.02, 81.98, 0.0, 41.66, 11.03, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:15:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:15:16
2025-12-12T21:15:29.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:15:30.042 [DEBUG] [Thread-76775] [transport.py] [_log()] starting thread (client mode): 0xf578bfd0
2025-12-12T21:15:30.042 [DEBUG] [Thread-76775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:15:30.062 [DEBUG] [Thread-76775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:15:30.062 [INFO] [Thread-76775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:15:30.065 [DEBUG] [Thread-76775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] client lang: <none>
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] server lang: <none>
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] kex follows: False
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] Compression: none
2025-12-12T21:15:30.071 [DEBUG] [Thread-76775] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:15:30.090 [DEBUG] [Thread-76775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:15:30.090 [DEBUG] [Thread-76775] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:15:30.091 [DEBUG] [Thread-76775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:15:30.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:15:30.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:15:30.092 [DEBUG] [Thread-76775] [transport.py] [_log()] userauth is OK
2025-12-12T21:15:30.093 [DEBUG] [Thread-76775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:15:30.093 [DEBUG] [Thread-76775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:15:30.093 [DEBUG] [Thread-76775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:15:30.093 [DEBUG] [Thread-76775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:15:30.108 [INFO] [Thread-76775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:15:30.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:15:30.747 [DEBUG] [Thread-76775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:15:30.747 [DEBUG] [Thread-76775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:15:30.748 [DEBUG] [Thread-76775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:15:30.788 [DEBUG] [Thread-76775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:15:30.788 [DEBUG] [Thread-76775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:15:30.790 [DEBUG] [Thread-76775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:15:30.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:15:30.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:15:30.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:15:30.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:15:30.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:15:30.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:15:30.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:15:30.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:15:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:15:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.802184 -999.00  +11.00  37.45     84   +8.50 1 3 2 2 1     0    0 0.80 -72.83 ----- 34.5 37.5 327.2 51.2 12.6 -3.0 12.5 -3.3 12.1 -3.0 12.4 -3.0
2025-12-12T21:15:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:15:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:15:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.802184
2025-12-12T21:15:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:15:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:15:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:15:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:15:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:15:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:15:16', tmtdew=3.02, humidity=81.98, cloud=0.0, wind=41.66, temperature=11.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:15:08.698', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:15:30.824 [DEBUG] [Thread-76775] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:15:30.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:15:30.920 [DEBUG] [Thread-76778] [transport.py] [_log()] starting thread (client mode): 0xf5725c00
2025-12-12T21:15:30.920 [DEBUG] [Thread-76778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:15:30.934 [DEBUG] [Thread-76778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:15:30.934 [INFO] [Thread-76778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] client lang: <none>
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] server lang: <none>
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] kex follows: False
2025-12-12T21:15:30.942 [DEBUG] [Thread-76778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:15:30.943 [DEBUG] [Thread-76778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:15:30.943 [DEBUG] [Thread-76778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:15:30.943 [DEBUG] [Thread-76778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:15:30.943 [DEBUG] [Thread-76778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:15:30.943 [DEBUG] [Thread-76778] [transport.py] [_log()] Compression: none
2025-12-12T21:15:30.943 [DEBUG] [Thread-76778] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:15:30.999 [DEBUG] [Thread-76778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:15:31.000 [DEBUG] [Thread-76778] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:15:31.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:15:31.001 [DEBUG] [Thread-76778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:15:31.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:15:31.055 [DEBUG] [Thread-76778] [transport.py] [_log()] userauth is OK
2025-12-12T21:15:31.055 [DEBUG] [Thread-76778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:15:31.055 [DEBUG] [Thread-76778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:15:31.055 [DEBUG] [Thread-76778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:15:31.056 [DEBUG] [Thread-76778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:15:31.074 [INFO] [Thread-76778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:15:31.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:15:31.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:15:31.948 [DEBUG] [Thread-76778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:15:31.948 [DEBUG] [Thread-76778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:15:31.996 [DEBUG] [Thread-76778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:15:31.996 [DEBUG] [Thread-76778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:15:32.005 [DEBUG] [Thread-76778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:15:32.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:15:32.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:15:32.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:15:32.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:15:32.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:15:32.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:15:32.039 [DEBUG] [Thread-76778] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:15:37.217 [DEBUG] [Thread-76780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:15:52.272 [DEBUG] [Thread-76781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:16:02.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:16:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:16:02.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 15, 48), 2.91, 82.01, 0.0, 37.39, 10.97, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:16:02.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:15:48
2025-12-12T21:16:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:16:03.023 [DEBUG] [Thread-76782] [transport.py] [_log()] starting thread (client mode): 0xf5727280
2025-12-12T21:16:03.023 [DEBUG] [Thread-76782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:16:03.047 [DEBUG] [Thread-76782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:16:03.047 [INFO] [Thread-76782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] client lang: <none>
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] server lang: <none>
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] kex follows: False
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] Compression: none
2025-12-12T21:16:03.050 [DEBUG] [Thread-76782] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:16:03.066 [DEBUG] [Thread-76782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:16:03.066 [DEBUG] [Thread-76782] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:16:03.067 [DEBUG] [Thread-76782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:16:03.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:16:03.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:16:03.069 [DEBUG] [Thread-76782] [transport.py] [_log()] userauth is OK
2025-12-12T21:16:03.069 [DEBUG] [Thread-76782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:16:03.069 [DEBUG] [Thread-76782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:16:03.069 [DEBUG] [Thread-76782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:16:03.069 [DEBUG] [Thread-76782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:16:03.093 [INFO] [Thread-76782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:16:03.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:16:03.660 [DEBUG] [Thread-76782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:16:03.660 [DEBUG] [Thread-76782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:16:03.660 [DEBUG] [Thread-76782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:16:03.701 [DEBUG] [Thread-76782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:16:03.701 [DEBUG] [Thread-76782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:16:03.704 [DEBUG] [Thread-76782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:16:03.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:16:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:16:03.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:16:03.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:16:03.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:16:03.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:16:03.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:16:03.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:16:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:16:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.802531 -999.00  +10.90  34.26     85   +8.50 1 3 2 2 1     0    0 0.80 -73.46 ----- 34.1 34.3 319.2 50.0 12.6 -3.5 12.5 -3.6 12.1 -3.7 12.4 -3.2
2025-12-12T21:16:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:16:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:16:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.802531
2025-12-12T21:16:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:16:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:16:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:16:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:16:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:16:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:15:48', tmtdew=2.91, humidity=82.01, cloud=0.0, wind=37.39, temperature=10.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:15:38.678', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.147499999999999, 2.317, nan, nan, nan, nan, 1.3339999999999996, 0.6944999999999997, 1.5512499999999996, 1.3090000000000002, nan, nan, nan, nan, nan, 0.7547500000000005, 0.9984999999999999, 0.6675000000000004, nan, nan, nan, nan, nan, 1.192000000000001, 0.3697499999999989], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:16:03.725 [DEBUG] [Thread-76782] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:16:03.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:16:03.825 [DEBUG] [Thread-76785] [transport.py] [_log()] starting thread (client mode): 0xf5726bf0
2025-12-12T21:16:03.826 [DEBUG] [Thread-76785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:16:03.840 [DEBUG] [Thread-76785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:16:03.840 [INFO] [Thread-76785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:16:03.847 [DEBUG] [Thread-76785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:16:03.847 [DEBUG] [Thread-76785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:16:03.847 [DEBUG] [Thread-76785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] client lang: <none>
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] server lang: <none>
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] kex follows: False
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] Compression: none
2025-12-12T21:16:03.848 [DEBUG] [Thread-76785] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:16:03.907 [DEBUG] [Thread-76785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:16:03.907 [DEBUG] [Thread-76785] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:16:03.908 [DEBUG] [Thread-76785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:16:03.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:16:03.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:16:03.963 [DEBUG] [Thread-76785] [transport.py] [_log()] userauth is OK
2025-12-12T21:16:03.963 [DEBUG] [Thread-76785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:16:03.963 [DEBUG] [Thread-76785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:16:03.963 [DEBUG] [Thread-76785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:16:03.963 [DEBUG] [Thread-76785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:16:03.981 [INFO] [Thread-76785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:16:03.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:16:03.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:16:04.830 [DEBUG] [Thread-76785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:16:04.830 [DEBUG] [Thread-76785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:16:04.882 [DEBUG] [Thread-76785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:16:04.882 [DEBUG] [Thread-76785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:16:04.898 [DEBUG] [Thread-76785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:16:04.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:16:04.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:16:04.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:16:04.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:16:04.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:16:04.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:16:04.932 [DEBUG] [Thread-76785] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:16:07.300 [DEBUG] [Thread-76787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:10.575 [DEBUG] [Thread-76788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:22.344 [DEBUG] [Thread-76789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:22.755 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:22.757 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:16:34.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:16: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
2025-12-12T21:16:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 16, 20), 2.91, 82.05, 0.0, 41.3, 10.97, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:16:35.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:16:20
2025-12-12T21:16:35.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:16:35.923 [DEBUG] [Thread-76790] [transport.py] [_log()] starting thread (client mode): 0xf57944f0
2025-12-12T21:16:35.924 [DEBUG] [Thread-76790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:16:35.939 [DEBUG] [Thread-76790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:16:35.940 [INFO] [Thread-76790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] client lang: <none>
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] server lang: <none>
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] kex follows: False
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] Compression: none
2025-12-12T21:16:35.941 [DEBUG] [Thread-76790] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:16:35.949 [DEBUG] [Thread-76790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:16:35.949 [DEBUG] [Thread-76790] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:16:35.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:16:35.949 [DEBUG] [Thread-76790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:16:35.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:16:35.951 [DEBUG] [Thread-76790] [transport.py] [_log()] userauth is OK
2025-12-12T21:16:35.951 [DEBUG] [Thread-76790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:16:35.951 [DEBUG] [Thread-76790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:16:35.951 [DEBUG] [Thread-76790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:16:35.951 [DEBUG] [Thread-76790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:16:35.968 [INFO] [Thread-76790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:16:35.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:16:36.530 [DEBUG] [Thread-76790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:16:36.530 [DEBUG] [Thread-76790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:16:36.530 [DEBUG] [Thread-76790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:16:36.571 [DEBUG] [Thread-76790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:16:36.571 [DEBUG] [Thread-76790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:16:36.573 [DEBUG] [Thread-76790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:16:36.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:16:36.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:16:36.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:16:36.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:16:36.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:16:36.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:16:36.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.802879 -999.00  +10.80  32.15     85   +8.50 1 3 2 2 1     0    0 0.65 -76.99 ----- 34.3 32.1 327.0 40.2 12.6 -3.9 12.4 -4.2 12.1 -3.1 12.4 -2.8
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.802879
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:16:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:16:20', tmtdew=2.91, humidity=82.05, cloud=0.0, wind=41.3, temperature=10.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:16:08.746', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:16:36.609 [DEBUG] [Thread-76790] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:16:36.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:16:36.696 [DEBUG] [Thread-76793] [transport.py] [_log()] starting thread (client mode): 0xf5797e50
2025-12-12T21:16:36.696 [DEBUG] [Thread-76793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:16:36.710 [DEBUG] [Thread-76793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:16:36.710 [INFO] [Thread-76793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] client lang: <none>
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] server lang: <none>
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] kex follows: False
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] Compression: none
2025-12-12T21:16:36.718 [DEBUG] [Thread-76793] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:16:36.773 [DEBUG] [Thread-76793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:16:36.773 [DEBUG] [Thread-76793] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:16:36.774 [DEBUG] [Thread-76793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:16:36.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:16:36.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:16:36.831 [DEBUG] [Thread-76793] [transport.py] [_log()] userauth is OK
2025-12-12T21:16:36.831 [DEBUG] [Thread-76793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:16:36.831 [DEBUG] [Thread-76793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:16:36.831 [DEBUG] [Thread-76793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:16:36.831 [DEBUG] [Thread-76793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:16:36.845 [INFO] [Thread-76793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:16:36.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:16:36.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:16:37.370 [DEBUG] [Thread-76795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:16:37.657 [DEBUG] [Thread-76793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:16:37.657 [DEBUG] [Thread-76793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:16:37.705 [DEBUG] [Thread-76793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:16:37.705 [DEBUG] [Thread-76793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:16:37.714 [DEBUG] [Thread-76793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:16:37.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:16:37.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:16:37.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:16:37.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:16:37.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:16:37.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:16:37.746 [DEBUG] [Thread-76793] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:16:52.406 [DEBUG] [Thread-76796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:07.435 [DEBUG] [Thread-76797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:07.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:17:07.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:17: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
2025-12-12T21:17:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 16, 52), 2.9, 82.6, 0.0, 31.0, 10.83, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:17:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:16:52
2025-12-12T21:17:08.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:17:08.724 [DEBUG] [Thread-76798] [transport.py] [_log()] starting thread (client mode): 0xf5797ca0
2025-12-12T21:17:08.724 [DEBUG] [Thread-76798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:17:08.744 [DEBUG] [Thread-76798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:17:08.744 [INFO] [Thread-76798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] client lang: <none>
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] server lang: <none>
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] kex follows: False
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] Compression: none
2025-12-12T21:17:08.746 [DEBUG] [Thread-76798] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:17:08.757 [DEBUG] [Thread-76798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:17:08.757 [DEBUG] [Thread-76798] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:17:08.758 [DEBUG] [Thread-76798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:17:08.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:17:08.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:17:08.759 [DEBUG] [Thread-76798] [transport.py] [_log()] userauth is OK
2025-12-12T21:17:08.759 [DEBUG] [Thread-76798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:17:08.760 [DEBUG] [Thread-76798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:17:08.760 [DEBUG] [Thread-76798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:17:08.760 [DEBUG] [Thread-76798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:17:08.783 [INFO] [Thread-76798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:17:08.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:17:09.395 [DEBUG] [Thread-76798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:17:09.395 [DEBUG] [Thread-76798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:17:09.396 [DEBUG] [Thread-76798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:17:09.436 [DEBUG] [Thread-76798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:17:09.436 [DEBUG] [Thread-76798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:17:09.439 [DEBUG] [Thread-76798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:17:09.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:17:09.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:17:09.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:17:09.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:17:09.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:17:09.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:17:09.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:17:09.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:17:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:17:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.803226 -999.00  +10.80  27.22     85   +8.50 1 3 1 2 1     0    0 0.51 -81.88 ----- 29.1 27.2 334.4 38.7 12.5 -3.3 12.4 -3.4 12.1 -2.9 12.4 -2.6
2025-12-12T21:17:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:17:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:17:09.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.803226
2025-12-12T21:17:09.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:17:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:17:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:17:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:17:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:17:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:16:52', tmtdew=2.9, humidity=82.6, cloud=0.0, wind=31.0, temperature=10.83, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:16:38.726', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:17:09.465 [DEBUG] [Thread-76798] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:17:09.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:17:09.568 [DEBUG] [Thread-76801] [transport.py] [_log()] starting thread (client mode): 0xf5795b10
2025-12-12T21:17:09.568 [DEBUG] [Thread-76801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:17:09.583 [DEBUG] [Thread-76801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:17:09.583 [INFO] [Thread-76801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:17:09.590 [DEBUG] [Thread-76801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:17:09.590 [DEBUG] [Thread-76801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:17:09.590 [DEBUG] [Thread-76801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:17:09.590 [DEBUG] [Thread-76801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] client lang: <none>
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] server lang: <none>
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] kex follows: False
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] Compression: none
2025-12-12T21:17:09.591 [DEBUG] [Thread-76801] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:17:09.646 [DEBUG] [Thread-76801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:17:09.647 [DEBUG] [Thread-76801] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:17:09.647 [DEBUG] [Thread-76801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:17:09.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:17:09.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:17:09.703 [DEBUG] [Thread-76801] [transport.py] [_log()] userauth is OK
2025-12-12T21:17:09.703 [DEBUG] [Thread-76801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:17:09.703 [DEBUG] [Thread-76801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:17:09.703 [DEBUG] [Thread-76801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:17:09.704 [DEBUG] [Thread-76801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:17:09.722 [INFO] [Thread-76801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:17:09.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:17:09.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:17:10.553 [DEBUG] [Thread-76801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:17:10.553 [DEBUG] [Thread-76801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:17:10.601 [DEBUG] [Thread-76801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:17:10.601 [DEBUG] [Thread-76801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:17:10.609 [DEBUG] [Thread-76801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:17:10.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:17:10.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:17:10.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:17:10.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:17:10.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:17:10.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:17:10.641 [DEBUG] [Thread-76801] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:17:10.659 [DEBUG] [Thread-76803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:22.462 [DEBUG] [Thread-76804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:22.963 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:22.965 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:37.515 [DEBUG] [Thread-76805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:17:40.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:17:40.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:17:40.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:17:41.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 17, 24), 2.83, 82.94, 0.0, 31.12, 10.87, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:17:41.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:17:24
2025-12-12T21:17:41.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:17:41.630 [DEBUG] [Thread-76806] [transport.py] [_log()] starting thread (client mode): 0xf5727280
2025-12-12T21:17:41.631 [DEBUG] [Thread-76806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:17:41.652 [DEBUG] [Thread-76806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:17:41.652 [INFO] [Thread-76806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] client lang: <none>
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] server lang: <none>
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] kex follows: False
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:17:41.655 [DEBUG] [Thread-76806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:17:41.656 [DEBUG] [Thread-76806] [transport.py] [_log()] Compression: none
2025-12-12T21:17:41.656 [DEBUG] [Thread-76806] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:17:41.673 [DEBUG] [Thread-76806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:17:41.673 [DEBUG] [Thread-76806] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:17:41.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:17:41.674 [DEBUG] [Thread-76806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:17:41.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:17:41.677 [DEBUG] [Thread-76806] [transport.py] [_log()] userauth is OK
2025-12-12T21:17:41.677 [DEBUG] [Thread-76806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:17:41.677 [DEBUG] [Thread-76806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:17:41.677 [DEBUG] [Thread-76806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:17:41.677 [DEBUG] [Thread-76806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:17:41.698 [INFO] [Thread-76806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:17:41.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:17:42.327 [DEBUG] [Thread-76806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:17:42.327 [DEBUG] [Thread-76806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:17:42.328 [DEBUG] [Thread-76806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:17:42.369 [DEBUG] [Thread-76806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:17:42.369 [DEBUG] [Thread-76806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:17:42.372 [DEBUG] [Thread-76806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:17:42.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:17:42.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:17:42.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:17:42.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:17:42.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:17:42.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:17:42.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:17:42.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:17:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:17:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.803226 -999.00  +10.80  27.22     85   +8.50 1 3 1 2 1     0    0 0.51 -81.88 ----- 29.1 27.2 334.4 38.7 12.5 -3.3 12.4 -3.4 12.1 -2.9 12.4 -2.6
2025-12-12T21:17:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:17:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:17:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.803226
2025-12-12T21:17:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:17:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:17:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:17:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:17:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:17:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:17:24', tmtdew=2.83, humidity=82.94, cloud=0.0, wind=31.12, temperature=10.87, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:16:38.726', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:17:42.392 [DEBUG] [Thread-76806] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:17:42.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:17:42.486 [DEBUG] [Thread-76809] [transport.py] [_log()] starting thread (client mode): 0xf5727e20
2025-12-12T21:17:42.486 [DEBUG] [Thread-76809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:17:42.501 [DEBUG] [Thread-76809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:17:42.501 [INFO] [Thread-76809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:17:42.508 [DEBUG] [Thread-76809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:17:42.508 [DEBUG] [Thread-76809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:17:42.508 [DEBUG] [Thread-76809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:17:42.508 [DEBUG] [Thread-76809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:42.508 [DEBUG] [Thread-76809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] client lang: <none>
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] server lang: <none>
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] kex follows: False
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] Compression: none
2025-12-12T21:17:42.509 [DEBUG] [Thread-76809] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:17:42.567 [DEBUG] [Thread-76809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:17:42.568 [DEBUG] [Thread-76809] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:17:42.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:17:42.568 [DEBUG] [Thread-76809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:17:42.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:17:42.624 [DEBUG] [Thread-76809] [transport.py] [_log()] userauth is OK
2025-12-12T21:17:42.624 [DEBUG] [Thread-76809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:17:42.624 [DEBUG] [Thread-76809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:17:42.624 [DEBUG] [Thread-76809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:17:42.625 [DEBUG] [Thread-76809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:17:42.645 [INFO] [Thread-76809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:17:42.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:17:42.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:17:43.467 [DEBUG] [Thread-76809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:17:43.467 [DEBUG] [Thread-76809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:17:43.515 [DEBUG] [Thread-76809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:17:43.515 [DEBUG] [Thread-76809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:17:43.524 [DEBUG] [Thread-76809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:17:43.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:17:43.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:17:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:17:43.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:17:43.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:17:43.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:17:43.559 [DEBUG] [Thread-76809] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:17:52.544 [DEBUG] [Thread-76811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:07.580 [DEBUG] [Thread-76812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:10.740 [DEBUG] [Thread-76813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:13.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:18:13.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:18:13.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:18:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 17, 56), 2.78, 82.99, 0.0, 34.56, 10.85, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:18:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:17:56
2025-12-12T21:18:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:18:14.530 [DEBUG] [Thread-76814] [transport.py] [_log()] starting thread (client mode): 0xf5724700
2025-12-12T21:18:14.530 [DEBUG] [Thread-76814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:18:14.550 [DEBUG] [Thread-76814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:18:14.550 [INFO] [Thread-76814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:18:14.554 [DEBUG] [Thread-76814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:18:14.554 [DEBUG] [Thread-76814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:18:14.554 [DEBUG] [Thread-76814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:18:14.554 [DEBUG] [Thread-76814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:18:14.554 [DEBUG] [Thread-76814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:18:14.554 [DEBUG] [Thread-76814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] client lang: <none>
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] server lang: <none>
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] kex follows: False
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] Compression: none
2025-12-12T21:18:14.555 [DEBUG] [Thread-76814] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:18:14.572 [DEBUG] [Thread-76814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:18:14.572 [DEBUG] [Thread-76814] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:18:14.573 [DEBUG] [Thread-76814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:18:14.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:18:14.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:18:14.576 [DEBUG] [Thread-76814] [transport.py] [_log()] userauth is OK
2025-12-12T21:18:14.576 [DEBUG] [Thread-76814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:18:14.576 [DEBUG] [Thread-76814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:18:14.576 [DEBUG] [Thread-76814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:18:14.576 [DEBUG] [Thread-76814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:18:14.600 [INFO] [Thread-76814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:18:14.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:18:15.246 [DEBUG] [Thread-76814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:18:15.246 [DEBUG] [Thread-76814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:18:15.246 [DEBUG] [Thread-76814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:18:15.288 [DEBUG] [Thread-76814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:18:15.288 [DEBUG] [Thread-76814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:18:15.291 [DEBUG] [Thread-76814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:18:15.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:18:15.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:18:15.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:18:15.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:18:15.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:18:15.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:18:15.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:18:15.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:18:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:18:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.803920 -999.00  +10.80  37.64     85   +8.50 1 3 2 2 1     0    0 0.37 -85.59 ----- 30.5 37.6 317.6 45.2 12.5 -3.1 12.4 -3.1 12.1 -2.9 12.4 -2.4
2025-12-12T21:18:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:18:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:18:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.803920
2025-12-12T21:18:15.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:18:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:18:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:18:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:18:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:18:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:17:56', tmtdew=2.78, humidity=82.99, cloud=0.0, wind=34.56, temperature=10.85, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:17:38.688', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:18:15.322 [DEBUG] [Thread-76814] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:18:15.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:18:22.610 [DEBUG] [Thread-76817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:23.171 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:23.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:37.650 [DEBUG] [Thread-76818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:18:52.679 [DEBUG] [Thread-76819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:07.710 [DEBUG] [Thread-76820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:10.820 [DEBUG] [Thread-76821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:22.738 [DEBUG] [Thread-76822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:23.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:23.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:37.772 [DEBUG] [Thread-76823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:19:52.803 [DEBUG] [Thread-76824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:07.830 [DEBUG] [Thread-76825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:10.898 [DEBUG] [Thread-76826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:22.859 [DEBUG] [Thread-76827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:23.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:23.586 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:29.674 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T21:20:37.886 [DEBUG] [Thread-76828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:52.915 [DEBUG] [Thread-76829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:20:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:20:59.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:20:59.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:21:00.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 20, 36), 2.68, 83.26, 0.0, 33.1, 10.78, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:21:00.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:20:36
2025-12-12T21:21:00.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:21:00.676 [DEBUG] [Thread-76830] [transport.py] [_log()] starting thread (client mode): 0xf57e33a0
2025-12-12T21:21:00.677 [DEBUG] [Thread-76830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:21:00.697 [DEBUG] [Thread-76830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:21:00.698 [INFO] [Thread-76830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:21:00.701 [DEBUG] [Thread-76830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:21:00.701 [DEBUG] [Thread-76830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:21:00.701 [DEBUG] [Thread-76830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:21:00.701 [DEBUG] [Thread-76830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:00.701 [DEBUG] [Thread-76830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:00.701 [DEBUG] [Thread-76830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] client lang: <none>
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] server lang: <none>
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] kex follows: False
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:21:00.702 [DEBUG] [Thread-76830] [transport.py] [_log()] Compression: none
2025-12-12T21:21:00.703 [DEBUG] [Thread-76830] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:21:00.720 [DEBUG] [Thread-76830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:21:00.721 [DEBUG] [Thread-76830] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:21:00.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:21:00.722 [DEBUG] [Thread-76830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:21:00.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:21:00.724 [DEBUG] [Thread-76830] [transport.py] [_log()] userauth is OK
2025-12-12T21:21:00.725 [DEBUG] [Thread-76830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:21:00.725 [DEBUG] [Thread-76830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:21:00.725 [DEBUG] [Thread-76830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:21:00.725 [DEBUG] [Thread-76830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:21:00.748 [INFO] [Thread-76830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:21:00.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:21:01.399 [DEBUG] [Thread-76830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:21:01.399 [DEBUG] [Thread-76830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:21:01.400 [DEBUG] [Thread-76830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:21:01.440 [DEBUG] [Thread-76830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:21:01.440 [DEBUG] [Thread-76830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:21:01.443 [DEBUG] [Thread-76830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:21:01.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:21:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:21:01.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:21:01.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:21:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:21:01.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:21:01.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:21:01.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:21:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:21:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.805656 -999.00  +11.00  31.15     85   +8.70 1 3 2 2 1     0    0 0.28 -82.82 ----- 29.2 31.1 331.4 34.7 12.6 -2.7 12.4 -2.8 12.1 -2.6 12.4 -2.3
2025-12-12T21:21:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:21:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:21:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.805656
2025-12-12T21:21:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:21:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:21:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:21:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:21:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:21:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:20:36', tmtdew=2.68, humidity=83.26, cloud=0.0, wind=33.1, temperature=10.78, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:20:08.678', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:21:01.478 [DEBUG] [Thread-76830] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:21:01.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:21:01.575 [DEBUG] [Thread-76833] [transport.py] [_log()] starting thread (client mode): 0xf57e3550
2025-12-12T21:21:01.575 [DEBUG] [Thread-76833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:21:01.590 [DEBUG] [Thread-76833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:21:01.590 [INFO] [Thread-76833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:21:01.597 [DEBUG] [Thread-76833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:21:01.597 [DEBUG] [Thread-76833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:21:01.597 [DEBUG] [Thread-76833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:21:01.597 [DEBUG] [Thread-76833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:01.597 [DEBUG] [Thread-76833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] client lang: <none>
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] server lang: <none>
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] kex follows: False
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] Compression: none
2025-12-12T21:21:01.598 [DEBUG] [Thread-76833] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:21:01.654 [DEBUG] [Thread-76833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:21:01.654 [DEBUG] [Thread-76833] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:21:01.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:21:01.654 [DEBUG] [Thread-76833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:21:01.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:21:01.711 [DEBUG] [Thread-76833] [transport.py] [_log()] userauth is OK
2025-12-12T21:21:01.712 [DEBUG] [Thread-76833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:21:01.712 [DEBUG] [Thread-76833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:21:01.712 [DEBUG] [Thread-76833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:21:01.712 [DEBUG] [Thread-76833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:21:01.735 [INFO] [Thread-76833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:21:01.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:21:01.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:21:02.606 [DEBUG] [Thread-76833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:21:02.606 [DEBUG] [Thread-76833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:21:02.653 [DEBUG] [Thread-76833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:21:02.654 [DEBUG] [Thread-76833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:21:02.662 [DEBUG] [Thread-76833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:21:02.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:21: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')
2025-12-12T21:21:02.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:21:02.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:21:02.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:21:02.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:21:02.700 [DEBUG] [Thread-76833] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:21:07.945 [DEBUG] [Thread-76835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:21:10.969 [DEBUG] [Thread-76836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:21:22.981 [DEBUG] [Thread-76837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:21:23.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:21:23.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:21:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:21:32.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:21:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:21:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 21, 8), 2.66, 83.38, 0.0, 35.96, 10.83, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:21:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:21:08
2025-12-12T21:21:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:21:33.713 [DEBUG] [Thread-76838] [transport.py] [_log()] starting thread (client mode): 0xf57e35b0
2025-12-12T21:21:33.713 [DEBUG] [Thread-76838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:21:33.734 [DEBUG] [Thread-76838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:21:33.734 [INFO] [Thread-76838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:33.738 [DEBUG] [Thread-76838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] client lang: <none>
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] server lang: <none>
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] kex follows: False
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:21:33.739 [DEBUG] [Thread-76838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:21:33.740 [DEBUG] [Thread-76838] [transport.py] [_log()] Compression: none
2025-12-12T21:21:33.740 [DEBUG] [Thread-76838] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:21:33.758 [DEBUG] [Thread-76838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:21:33.758 [DEBUG] [Thread-76838] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:21:33.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:21:33.760 [DEBUG] [Thread-76838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:21:33.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:21:33.761 [DEBUG] [Thread-76838] [transport.py] [_log()] userauth is OK
2025-12-12T21:21:33.761 [DEBUG] [Thread-76838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:21:33.762 [DEBUG] [Thread-76838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:21:33.762 [DEBUG] [Thread-76838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:21:33.762 [DEBUG] [Thread-76838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:21:33.785 [INFO] [Thread-76838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:21:33.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:21:34.427 [DEBUG] [Thread-76838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:21:34.428 [DEBUG] [Thread-76838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:21:34.428 [DEBUG] [Thread-76838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:21:34.469 [DEBUG] [Thread-76838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:21:34.469 [DEBUG] [Thread-76838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:21:34.471 [DEBUG] [Thread-76838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:21:34.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:21:34.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:21:34.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:21:34.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:21:34.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:21:34.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:21:34.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:21:34.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:21:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:21:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.806003 -999.00  +10.90  28.22     85   +8.60 1 3 1 2 1     0    0 0.06 -91.88 ----- 35.8 28.2 316.3 38.6 12.6 -3.0 12.4 -2.9 12.1 -2.8 12.4 -2.5
2025-12-12T21:21:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:21:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:21:34.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.806003
2025-12-12T21:21:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:21:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:21:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:21:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:21:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:21:34.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:21:08', tmtdew=2.66, humidity=83.38, cloud=0.0, wind=35.96, temperature=10.83, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:20:38.659', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:21:34.498 [DEBUG] [Thread-76838] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:21:34.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:21:34.597 [DEBUG] [Thread-76841] [transport.py] [_log()] starting thread (client mode): 0xf5797910
2025-12-12T21:21:34.597 [DEBUG] [Thread-76841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:21:34.615 [DEBUG] [Thread-76841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:21:34.615 [INFO] [Thread-76841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:21:34.626 [DEBUG] [Thread-76841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:21:34.626 [DEBUG] [Thread-76841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:21:34.627 [DEBUG] [Thread-76841] [transport.py] [_log()] client lang: <none>
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] server lang: <none>
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] kex follows: False
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] Compression: none
2025-12-12T21:21:34.628 [DEBUG] [Thread-76841] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:21:34.688 [DEBUG] [Thread-76841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:21:34.689 [DEBUG] [Thread-76841] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:21:34.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:21:34.690 [DEBUG] [Thread-76841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:21:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:21:34.753 [DEBUG] [Thread-76841] [transport.py] [_log()] userauth is OK
2025-12-12T21:21:34.753 [DEBUG] [Thread-76841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:21:34.753 [DEBUG] [Thread-76841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:21:34.753 [DEBUG] [Thread-76841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:21:34.753 [DEBUG] [Thread-76841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:21:34.777 [INFO] [Thread-76841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:21:34.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:21:34.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:21:35.587 [DEBUG] [Thread-76841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:21:35.587 [DEBUG] [Thread-76841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:21:35.635 [DEBUG] [Thread-76841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:21:35.635 [DEBUG] [Thread-76841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:21:35.644 [DEBUG] [Thread-76841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:21:35.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:21:35.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:21:35.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:21:35.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:21:35.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:21:35.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:21:35.678 [DEBUG] [Thread-76841] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:21:38.015 [DEBUG] [Thread-76843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:21:53.053 [DEBUG] [Thread-76844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:05.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:22:05.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:22:05.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:22:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 21, 40), 2.64, 83.44, 0.0, 25.95, 10.95, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:22:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:21:40
2025-12-12T21:22:06.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:22:06.662 [DEBUG] [Thread-76845] [transport.py] [_log()] starting thread (client mode): 0xf5797be0
2025-12-12T21:22:06.662 [DEBUG] [Thread-76845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:22:06.682 [DEBUG] [Thread-76845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:22:06.682 [INFO] [Thread-76845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:22:06.685 [DEBUG] [Thread-76845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] client lang: <none>
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] server lang: <none>
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] kex follows: False
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] Compression: none
2025-12-12T21:22:06.686 [DEBUG] [Thread-76845] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:22:06.705 [DEBUG] [Thread-76845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:22:06.706 [DEBUG] [Thread-76845] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:22:06.706 [DEBUG] [Thread-76845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:22:06.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:22:06.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:22:06.708 [DEBUG] [Thread-76845] [transport.py] [_log()] userauth is OK
2025-12-12T21:22:06.708 [DEBUG] [Thread-76845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:22:06.709 [DEBUG] [Thread-76845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:22:06.709 [DEBUG] [Thread-76845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:22:06.709 [DEBUG] [Thread-76845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:22:06.733 [INFO] [Thread-76845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:22:06.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:22:07.387 [DEBUG] [Thread-76845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:22:07.388 [DEBUG] [Thread-76845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:22:07.388 [DEBUG] [Thread-76845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:22:07.429 [DEBUG] [Thread-76845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:22:07.429 [DEBUG] [Thread-76845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:22:07.432 [DEBUG] [Thread-76845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:22:07.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:22:07.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:22:07.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:22:07.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:22:07.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:22:07.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:22:07.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:22:07.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:22:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:22:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.806698 -999.00  +10.90  25.17     85   +8.60 1 3 1 2 1     0    0 0.17 -83.22 ----- 22.4 25.2 317.6 34.2 12.6 -2.9 12.3 -3.1 12.1 -2.6 12.4 -2.4
2025-12-12T21:22:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:22:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:22:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.806698
2025-12-12T21:22:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:22:07.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:22:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:22:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:22:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:22:07.463 [DEBUG] [Thread-76845] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:22:07.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:21:40', tmtdew=2.64, humidity=83.44, cloud=0.0, wind=25.95, temperature=10.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:21:38.707', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:22:07.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:22:07.558 [DEBUG] [Thread-76848] [transport.py] [_log()] starting thread (client mode): 0xf5726ef0
2025-12-12T21:22:07.558 [DEBUG] [Thread-76848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:22:07.573 [DEBUG] [Thread-76848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:22:07.573 [INFO] [Thread-76848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:22:07.581 [DEBUG] [Thread-76848] [transport.py] [_log()] client lang: <none>
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] server lang: <none>
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] kex follows: False
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] Compression: none
2025-12-12T21:22:07.582 [DEBUG] [Thread-76848] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:22:07.638 [DEBUG] [Thread-76848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:22:07.638 [DEBUG] [Thread-76848] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:22:07.639 [DEBUG] [Thread-76848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:22:07.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:22:07.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:22:07.695 [DEBUG] [Thread-76848] [transport.py] [_log()] userauth is OK
2025-12-12T21:22:07.695 [DEBUG] [Thread-76848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:22:07.695 [DEBUG] [Thread-76848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:22:07.695 [DEBUG] [Thread-76848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:22:07.695 [DEBUG] [Thread-76848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:22:07.714 [INFO] [Thread-76848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:22:07.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:22:07.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:22:08.083 [DEBUG] [Thread-76850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:08.559 [DEBUG] [Thread-76848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:22:08.560 [DEBUG] [Thread-76848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:22:08.608 [DEBUG] [Thread-76848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:22:08.608 [DEBUG] [Thread-76848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:22:08.617 [DEBUG] [Thread-76848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:22:08.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:22:08.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:22:08.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:22:08.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:22:08.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:22:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:22:08.651 [DEBUG] [Thread-76848] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:22:11.046 [DEBUG] [Thread-76851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:23.124 [DEBUG] [Thread-76852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:23.992 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:23.994 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:38.150 [DEBUG] [Thread-76853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:22:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:22:38.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:22:38.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:22:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 22, 12), 2.64, 83.48, 0.0, 26.78, 10.95, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:22:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:22:12
2025-12-12T21:22:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:22:39.634 [DEBUG] [Thread-76854] [transport.py] [_log()] starting thread (client mode): 0xf5788a30
2025-12-12T21:22:39.634 [DEBUG] [Thread-76854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:22:39.654 [DEBUG] [Thread-76854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:22:39.654 [INFO] [Thread-76854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:39.657 [DEBUG] [Thread-76854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] client lang: <none>
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] server lang: <none>
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] kex follows: False
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] Compression: none
2025-12-12T21:22:39.658 [DEBUG] [Thread-76854] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:22:39.675 [DEBUG] [Thread-76854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:22:39.676 [DEBUG] [Thread-76854] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:22:39.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:22:39.677 [DEBUG] [Thread-76854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:22:39.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:22:39.678 [DEBUG] [Thread-76854] [transport.py] [_log()] userauth is OK
2025-12-12T21:22:39.679 [DEBUG] [Thread-76854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:22:39.679 [DEBUG] [Thread-76854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:22:39.679 [DEBUG] [Thread-76854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:22:39.679 [DEBUG] [Thread-76854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:22:39.703 [INFO] [Thread-76854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:22:39.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:22:40.328 [DEBUG] [Thread-76854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:22:40.328 [DEBUG] [Thread-76854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:22:40.329 [DEBUG] [Thread-76854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:22:40.369 [DEBUG] [Thread-76854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:22:40.369 [DEBUG] [Thread-76854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:22:40.372 [DEBUG] [Thread-76854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:22:40.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:22:40.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:22:40.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:22:40.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:22:40.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:22:40.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:22:40.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:22:40.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:22:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:22:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.807045 -999.00  +11.00  26.94     85   +8.70 1 3 1 2 1     0    0 0.09 -85.16 ----- 28.7 26.9 319.8 33.7 12.6 -2.8 12.4 -2.7 12.1 -3.0 12.4 -2.5
2025-12-12T21:22:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:22:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:22:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.807045
2025-12-12T21:22:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:22:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:22:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:22:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:22:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:22:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:22:12', tmtdew=2.64, humidity=83.48, cloud=0.0, wind=26.78, temperature=10.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:22:08.688', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:22:40.395 [DEBUG] [Thread-76854] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:22:40.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:22:40.493 [DEBUG] [Thread-76857] [transport.py] [_log()] starting thread (client mode): 0xf578a890
2025-12-12T21:22:40.493 [DEBUG] [Thread-76857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:22:40.508 [DEBUG] [Thread-76857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:22:40.508 [INFO] [Thread-76857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:22:40.515 [DEBUG] [Thread-76857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:22:40.515 [DEBUG] [Thread-76857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:22:40.515 [DEBUG] [Thread-76857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:22:40.515 [DEBUG] [Thread-76857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] client lang: <none>
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] server lang: <none>
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] kex follows: False
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] Compression: none
2025-12-12T21:22:40.516 [DEBUG] [Thread-76857] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:22:40.574 [DEBUG] [Thread-76857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:22:40.575 [DEBUG] [Thread-76857] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:22:40.575 [DEBUG] [Thread-76857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:22:40.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:22:40.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:22:40.631 [DEBUG] [Thread-76857] [transport.py] [_log()] userauth is OK
2025-12-12T21:22:40.631 [DEBUG] [Thread-76857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:22:40.632 [DEBUG] [Thread-76857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:22:40.632 [DEBUG] [Thread-76857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:22:40.632 [DEBUG] [Thread-76857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:22:40.654 [INFO] [Thread-76857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:22:40.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:22:40.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:22:41.503 [DEBUG] [Thread-76857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:22:41.503 [DEBUG] [Thread-76857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:22:41.552 [DEBUG] [Thread-76857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:22:41.553 [DEBUG] [Thread-76857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:22:41.561 [DEBUG] [Thread-76857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:22:41.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:22:41.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:22:41.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:22:41.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:22:41.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:22:41.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:22:41.596 [DEBUG] [Thread-76857] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:22:53.177 [DEBUG] [Thread-76859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:08.227 [DEBUG] [Thread-76860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:11.127 [DEBUG] [Thread-76861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:23:11.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:23:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:23:12.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 22, 44), 2.7, 83.41, 0.0, 33.22, 10.95, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:23:12.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:22:44
2025-12-12T21:23:12.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:23:12.569 [DEBUG] [Thread-76862] [transport.py] [_log()] starting thread (client mode): 0xf57256f0
2025-12-12T21:23:12.569 [DEBUG] [Thread-76862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:23:12.588 [DEBUG] [Thread-76862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:23:12.588 [INFO] [Thread-76862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] client lang: <none>
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] server lang: <none>
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] kex follows: False
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] Compression: none
2025-12-12T21:23:12.590 [DEBUG] [Thread-76862] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:23:12.607 [DEBUG] [Thread-76862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:23:12.608 [DEBUG] [Thread-76862] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:23:12.608 [DEBUG] [Thread-76862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:23:12.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:23:12.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:23:12.610 [DEBUG] [Thread-76862] [transport.py] [_log()] userauth is OK
2025-12-12T21:23:12.611 [DEBUG] [Thread-76862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:23:12.611 [DEBUG] [Thread-76862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:23:12.611 [DEBUG] [Thread-76862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:23:12.611 [DEBUG] [Thread-76862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:23:12.629 [INFO] [Thread-76862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:23:12.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:23:13.275 [DEBUG] [Thread-76862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:23:13.275 [DEBUG] [Thread-76862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:23:13.276 [DEBUG] [Thread-76862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:23:13.316 [DEBUG] [Thread-76862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:23:13.316 [DEBUG] [Thread-76862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:23:13.318 [DEBUG] [Thread-76862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:23:13.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:23:13.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:23:13.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:23:13.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:23:13.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:23:13.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:23:13.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:23:13.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:23:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:23:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.807392 -999.00  +10.90  29.76     85   +8.60 1 3 1 2 1     0    0 0.00 -87.02 ----- 41.6 29.8 319.0 40.0 12.6 -2.9 12.4 -3.0 12.1 -2.7 12.4 -2.3
2025-12-12T21:23:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:23:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:23:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.807392
2025-12-12T21:23:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:23:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:23:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:23:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:23:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:23:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:22:44', tmtdew=2.7, humidity=83.41, cloud=0.0, wind=33.22, temperature=10.95, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:22:38.669', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:23:13.342 [DEBUG] [Thread-76862] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:23:13.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:23:13.438 [DEBUG] [Thread-76865] [transport.py] [_log()] starting thread (client mode): 0xf5726fb0
2025-12-12T21:23:13.438 [DEBUG] [Thread-76865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:23:13.453 [DEBUG] [Thread-76865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:23:13.453 [INFO] [Thread-76865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:13.461 [DEBUG] [Thread-76865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] client lang: <none>
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] server lang: <none>
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] kex follows: False
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] Compression: none
2025-12-12T21:23:13.462 [DEBUG] [Thread-76865] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:23:13.519 [DEBUG] [Thread-76865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:23:13.519 [DEBUG] [Thread-76865] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:23:13.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:23:13.520 [DEBUG] [Thread-76865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:23:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:23:13.575 [DEBUG] [Thread-76865] [transport.py] [_log()] userauth is OK
2025-12-12T21:23:13.575 [DEBUG] [Thread-76865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:23:13.575 [DEBUG] [Thread-76865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:23:13.576 [DEBUG] [Thread-76865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:23:13.576 [DEBUG] [Thread-76865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:23:13.595 [INFO] [Thread-76865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:23:13.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:23:13.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:23:14.450 [DEBUG] [Thread-76865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:23:14.450 [DEBUG] [Thread-76865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:23:14.501 [DEBUG] [Thread-76865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:23:14.501 [DEBUG] [Thread-76865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:23:14.513 [DEBUG] [Thread-76865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:23:14.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:23:14.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:23:14.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:23:14.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:23:14.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:23:14.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:23:14.548 [DEBUG] [Thread-76865] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:23:23.254 [DEBUG] [Thread-76867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:24.200 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:24.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:38.297 [DEBUG] [Thread-76868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:23:44.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:23:44.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:23: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
2025-12-12T21:23:45.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 23, 16), 2.71, 83.38, 0.0, 37.1, 10.92, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:23:45.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:23:16
2025-12-12T21:23:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:23:45.566 [DEBUG] [Thread-76869] [transport.py] [_log()] starting thread (client mode): 0xf57e1bd0
2025-12-12T21:23:45.566 [DEBUG] [Thread-76869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:23:45.587 [DEBUG] [Thread-76869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:23:45.587 [INFO] [Thread-76869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] client lang: <none>
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] server lang: <none>
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] kex follows: False
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] Compression: none
2025-12-12T21:23:45.590 [DEBUG] [Thread-76869] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:23:45.605 [DEBUG] [Thread-76869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:23:45.605 [DEBUG] [Thread-76869] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:23:45.605 [DEBUG] [Thread-76869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:23:45.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:23:45.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:23:45.606 [DEBUG] [Thread-76869] [transport.py] [_log()] userauth is OK
2025-12-12T21:23:45.606 [DEBUG] [Thread-76869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:23:45.606 [DEBUG] [Thread-76869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:23:45.606 [DEBUG] [Thread-76869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:23:45.606 [DEBUG] [Thread-76869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:23:45.616 [INFO] [Thread-76869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:23:45.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:23:46.243 [DEBUG] [Thread-76869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:23:46.243 [DEBUG] [Thread-76869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:23:46.243 [DEBUG] [Thread-76869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:23:46.284 [DEBUG] [Thread-76869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:23:46.284 [DEBUG] [Thread-76869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:23:46.286 [DEBUG] [Thread-76869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:23:46.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:23:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:23:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:23:46.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:23:46.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:23:46.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:23:46.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:23:46.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.807739 -999.00  +10.90  44.24     85   +8.60 1 3 2 2 1     0    0 0.42 -75.04 ----- 42.2 44.2 314.2 49.9 12.6 -2.9 12.3 -3.1 11.9 -2.7 12.3 -2.6
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.807739
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:23:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:23:16', tmtdew=2.71, humidity=83.38, cloud=0.0, wind=37.1, temperature=10.92, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:23:08.650', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:23:46.304 [DEBUG] [Thread-76869] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:23:46.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:23:46.391 [DEBUG] [Thread-76872] [transport.py] [_log()] starting thread (client mode): 0xf81c1840
2025-12-12T21:23:46.391 [DEBUG] [Thread-76872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:23:46.407 [DEBUG] [Thread-76872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:23:46.407 [INFO] [Thread-76872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] client lang: <none>
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] server lang: <none>
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] kex follows: False
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:23:46.414 [DEBUG] [Thread-76872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:23:46.415 [DEBUG] [Thread-76872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:23:46.415 [DEBUG] [Thread-76872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:23:46.415 [DEBUG] [Thread-76872] [transport.py] [_log()] Compression: none
2025-12-12T21:23:46.415 [DEBUG] [Thread-76872] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:23:46.469 [DEBUG] [Thread-76872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:23:46.469 [DEBUG] [Thread-76872] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:23:46.470 [DEBUG] [Thread-76872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:23:46.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:23:46.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:23:46.527 [DEBUG] [Thread-76872] [transport.py] [_log()] userauth is OK
2025-12-12T21:23:46.527 [DEBUG] [Thread-76872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:23:46.527 [DEBUG] [Thread-76872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:23:46.527 [DEBUG] [Thread-76872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:23:46.527 [DEBUG] [Thread-76872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:23:46.542 [INFO] [Thread-76872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:23:46.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:23:46.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:23:47.423 [DEBUG] [Thread-76872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:23:47.423 [DEBUG] [Thread-76872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:23:47.470 [DEBUG] [Thread-76872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:23:47.470 [DEBUG] [Thread-76872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:23:47.478 [DEBUG] [Thread-76872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:23:47.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:23:47.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:23:47.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:23:47.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:23:47.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:23:47.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:23:47.514 [DEBUG] [Thread-76872] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:23:53.326 [DEBUG] [Thread-76874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:08.371 [DEBUG] [Thread-76875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:11.204 [DEBUG] [Thread-76876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:17.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:24:17.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:24:17.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:24:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 23, 48), 2.64, 83.49, 0.0, 43.81, 10.85, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:24:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:23:48
2025-12-12T21:24:18.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:24:18.481 [DEBUG] [Thread-76877] [transport.py] [_log()] starting thread (client mode): 0xf574e230
2025-12-12T21:24:18.481 [DEBUG] [Thread-76877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:24:18.500 [DEBUG] [Thread-76877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:24:18.500 [INFO] [Thread-76877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:24:18.504 [DEBUG] [Thread-76877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:24:18.504 [DEBUG] [Thread-76877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] client lang: <none>
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] server lang: <none>
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] kex follows: False
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] Compression: none
2025-12-12T21:24:18.505 [DEBUG] [Thread-76877] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:24:18.523 [DEBUG] [Thread-76877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:24:18.523 [DEBUG] [Thread-76877] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:24:18.524 [DEBUG] [Thread-76877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:24:18.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:24:18.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:24:18.525 [DEBUG] [Thread-76877] [transport.py] [_log()] userauth is OK
2025-12-12T21:24:18.526 [DEBUG] [Thread-76877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:24:18.526 [DEBUG] [Thread-76877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:24:18.526 [DEBUG] [Thread-76877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:24:18.526 [DEBUG] [Thread-76877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:24:18.548 [INFO] [Thread-76877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:24:18.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:24:19.164 [DEBUG] [Thread-76877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:24:19.164 [DEBUG] [Thread-76877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:24:19.165 [DEBUG] [Thread-76877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:24:19.206 [DEBUG] [Thread-76877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:24:19.206 [DEBUG] [Thread-76877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:24:19.208 [DEBUG] [Thread-76877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:24:19.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:24:19.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:24:19.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:24:19.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:24:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:24:19.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:24:19.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:24:19.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:24:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:24:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.808087 -999.00  +10.80  40.00     86   +8.60 1 3 2 2 1     0    0 0.61 -68.97 ----- 40.5 40.0 316.8 43.9 12.5 -3.1 12.3 -3.0 12.0 -2.9 12.3 -2.6
2025-12-12T21:24:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:24:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:24:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.808087
2025-12-12T21:24:19.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:24:19.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:24:19.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:24:19.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:24:19.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:24:19.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:23:48', tmtdew=2.64, humidity=83.49, cloud=0.0, wind=43.81, temperature=10.85, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:23:38.717', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:24:19.232 [DEBUG] [Thread-76877] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:24:19.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:24:19.328 [DEBUG] [Thread-76880] [transport.py] [_log()] starting thread (client mode): 0xf57a7640
2025-12-12T21:24:19.328 [DEBUG] [Thread-76880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:24:19.343 [DEBUG] [Thread-76880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:24:19.344 [INFO] [Thread-76880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:24:19.351 [DEBUG] [Thread-76880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:24:19.351 [DEBUG] [Thread-76880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:24:19.351 [DEBUG] [Thread-76880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:24:19.351 [DEBUG] [Thread-76880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:19.351 [DEBUG] [Thread-76880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] client lang: <none>
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] server lang: <none>
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] kex follows: False
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] Compression: none
2025-12-12T21:24:19.352 [DEBUG] [Thread-76880] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:24:19.411 [DEBUG] [Thread-76880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:24:19.411 [DEBUG] [Thread-76880] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:24:19.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:24:19.412 [DEBUG] [Thread-76880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:24:19.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:24:19.467 [DEBUG] [Thread-76880] [transport.py] [_log()] userauth is OK
2025-12-12T21:24:19.467 [DEBUG] [Thread-76880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:24:19.467 [DEBUG] [Thread-76880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:24:19.467 [DEBUG] [Thread-76880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:24:19.468 [DEBUG] [Thread-76880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:24:19.490 [INFO] [Thread-76880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:24:19.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:24:19.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:24:20.318 [DEBUG] [Thread-76880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:24:20.318 [DEBUG] [Thread-76880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:24:20.366 [DEBUG] [Thread-76880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:24:20.366 [DEBUG] [Thread-76880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:24:20.375 [DEBUG] [Thread-76880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:24:20.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:24:20.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:24:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:24:20.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:24:20.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:24:20.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:24:20.409 [DEBUG] [Thread-76880] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:24:23.396 [DEBUG] [Thread-76882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:24.403 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:24.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:38.441 [DEBUG] [Thread-76883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:24:50.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:24:50.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:24:50.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:24:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 24, 20), 2.64, 83.46, 0.0, 43.69, 10.82, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:24:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:24:20
2025-12-12T21:24:51.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:24:51.381 [DEBUG] [Thread-76884] [transport.py] [_log()] starting thread (client mode): 0xf574f9d0
2025-12-12T21:24:51.381 [DEBUG] [Thread-76884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:24:51.401 [DEBUG] [Thread-76884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:24:51.401 [INFO] [Thread-76884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:24:51.404 [DEBUG] [Thread-76884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] client lang: <none>
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] server lang: <none>
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] kex follows: False
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] Compression: none
2025-12-12T21:24:51.405 [DEBUG] [Thread-76884] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:24:51.422 [DEBUG] [Thread-76884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:24:51.423 [DEBUG] [Thread-76884] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:24:51.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:24:51.424 [DEBUG] [Thread-76884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:24:51.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:24:51.425 [DEBUG] [Thread-76884] [transport.py] [_log()] userauth is OK
2025-12-12T21:24:51.425 [DEBUG] [Thread-76884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:24:51.425 [DEBUG] [Thread-76884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:24:51.426 [DEBUG] [Thread-76884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:24:51.426 [DEBUG] [Thread-76884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:24:51.446 [INFO] [Thread-76884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:24:51.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:24:52.094 [DEBUG] [Thread-76884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:24:52.094 [DEBUG] [Thread-76884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:24:52.095 [DEBUG] [Thread-76884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:24:52.135 [DEBUG] [Thread-76884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:24:52.135 [DEBUG] [Thread-76884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:24:52.138 [DEBUG] [Thread-76884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:24:52.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:24:52.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:24:52.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:24:52.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:24:52.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:24:52.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:24:52.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:24:52.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:24:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:24:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.808434 -999.00  +10.70  40.35     86   +8.60 1 3 2 2 1     0    0 0.42 -72.50 ----- 44.4 40.4 310.8 46.9 12.4 -2.9 12.3 -3.2 11.9 -3.1 12.3 -2.5
2025-12-12T21:24:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:24:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:24:52.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.808434
2025-12-12T21:24:52.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:24:52.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:24:52.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:24:52.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:24:52.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:24:52.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:24:20', tmtdew=2.64, humidity=83.46, cloud=0.0, wind=43.69, temperature=10.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:24:08.698', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:24:52.165 [DEBUG] [Thread-76884] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:24:52.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:24:52.260 [DEBUG] [Thread-76887] [transport.py] [_log()] starting thread (client mode): 0xf574ec50
2025-12-12T21:24:52.260 [DEBUG] [Thread-76887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:24:52.274 [DEBUG] [Thread-76887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:24:52.275 [INFO] [Thread-76887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:24:52.282 [DEBUG] [Thread-76887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:24:52.282 [DEBUG] [Thread-76887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] client lang: <none>
2025-12-12T21:24:52.283 [DEBUG] [Thread-76887] [transport.py] [_log()] server lang: <none>
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] kex follows: False
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] Compression: none
2025-12-12T21:24:52.284 [DEBUG] [Thread-76887] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:24:52.338 [DEBUG] [Thread-76887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:24:52.339 [DEBUG] [Thread-76887] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:24:52.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:24:52.339 [DEBUG] [Thread-76887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:24:52.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:24:52.395 [DEBUG] [Thread-76887] [transport.py] [_log()] userauth is OK
2025-12-12T21:24:52.395 [DEBUG] [Thread-76887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:24:52.395 [DEBUG] [Thread-76887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:24:52.395 [DEBUG] [Thread-76887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:24:52.395 [DEBUG] [Thread-76887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:24:52.415 [INFO] [Thread-76887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:24:52.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:24:52.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:24:53.225 [DEBUG] [Thread-76887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:24:53.225 [DEBUG] [Thread-76887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:24:53.273 [DEBUG] [Thread-76887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:24:53.273 [DEBUG] [Thread-76887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:24:53.281 [DEBUG] [Thread-76887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:24:53.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:24:53.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:24:53.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:24:53.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:24:53.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:24:53.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:24:53.313 [DEBUG] [Thread-76887] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:24:53.469 [DEBUG] [Thread-76889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:08.506 [DEBUG] [Thread-76890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:11.278 [DEBUG] [Thread-76891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:23.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:25:23.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:25:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:25:23.535 [DEBUG] [Thread-76892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:24.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 24, 52), 2.55, 84.16, 0.0, 42.58, 10.7, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:25:24.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:24:52
2025-12-12T21:25:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:25:24.313 [DEBUG] [Thread-76893] [transport.py] [_log()] starting thread (client mode): 0xf81c1000
2025-12-12T21:25:24.313 [DEBUG] [Thread-76893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:25:24.333 [DEBUG] [Thread-76893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:25:24.333 [INFO] [Thread-76893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:25:24.336 [DEBUG] [Thread-76893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] client lang: <none>
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] server lang: <none>
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] kex follows: False
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:25:24.337 [DEBUG] [Thread-76893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:25:24.338 [DEBUG] [Thread-76893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:25:24.338 [DEBUG] [Thread-76893] [transport.py] [_log()] Compression: none
2025-12-12T21:25:24.338 [DEBUG] [Thread-76893] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:25:24.355 [DEBUG] [Thread-76893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:25:24.355 [DEBUG] [Thread-76893] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:25:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:25:24.356 [DEBUG] [Thread-76893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:25:24.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:25:24.359 [DEBUG] [Thread-76893] [transport.py] [_log()] userauth is OK
2025-12-12T21:25:24.359 [DEBUG] [Thread-76893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:25:24.359 [DEBUG] [Thread-76893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:25:24.359 [DEBUG] [Thread-76893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:25:24.359 [DEBUG] [Thread-76893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:25:24.383 [INFO] [Thread-76893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:25:24.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:25:24.626 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:24.628 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:24.983 [DEBUG] [Thread-76893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:25:24.983 [DEBUG] [Thread-76893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:25:24.983 [DEBUG] [Thread-76893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:25:25.024 [DEBUG] [Thread-76893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:25:25.024 [DEBUG] [Thread-76893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:25:25.027 [DEBUG] [Thread-76893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:25:25.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:25:25.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:25:25.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:25:25.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:25:25.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:25:25.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:25:25.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:25:25.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:25:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:25:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.808781 -999.00  +10.70  29.07     87   +8.60 1 3 1 2 1     0    0 0.64 -65.29 ----- 32.6 29.1 318.0 51.7 12.4 -3.2 12.3 -3.0 11.9 -2.9 12.2 -2.4
2025-12-12T21:25:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:25:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:25:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.808781
2025-12-12T21:25:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:25:25.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:25:25.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:25:25.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:25:25.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:25:25.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:24:52', tmtdew=2.55, humidity=84.16, cloud=0.0, wind=42.58, temperature=10.7, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:24:38.678', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:25:25.054 [DEBUG] [Thread-76893] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:25:25.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:25:25.148 [DEBUG] [Thread-76896] [transport.py] [_log()] starting thread (client mode): 0xf57716f0
2025-12-12T21:25:25.148 [DEBUG] [Thread-76896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:25:25.163 [DEBUG] [Thread-76896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:25:25.163 [INFO] [Thread-76896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] client lang: <none>
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] server lang: <none>
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] kex follows: False
2025-12-12T21:25:25.170 [DEBUG] [Thread-76896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:25:25.171 [DEBUG] [Thread-76896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:25:25.171 [DEBUG] [Thread-76896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:25:25.171 [DEBUG] [Thread-76896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:25:25.171 [DEBUG] [Thread-76896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:25:25.171 [DEBUG] [Thread-76896] [transport.py] [_log()] Compression: none
2025-12-12T21:25:25.171 [DEBUG] [Thread-76896] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:25:25.226 [DEBUG] [Thread-76896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:25:25.226 [DEBUG] [Thread-76896] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:25:25.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:25:25.226 [DEBUG] [Thread-76896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:25:25.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:25:25.283 [DEBUG] [Thread-76896] [transport.py] [_log()] userauth is OK
2025-12-12T21:25:25.283 [DEBUG] [Thread-76896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:25:25.283 [DEBUG] [Thread-76896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:25:25.283 [DEBUG] [Thread-76896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:25:25.283 [DEBUG] [Thread-76896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:25:25.298 [INFO] [Thread-76896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:25:25.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:25:25.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:25:26.191 [DEBUG] [Thread-76896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:25:26.191 [DEBUG] [Thread-76896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:25:26.239 [DEBUG] [Thread-76896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:25:26.239 [DEBUG] [Thread-76896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:25:26.248 [DEBUG] [Thread-76896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:25:26.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:25:26.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:25:26.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:25:26.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:25:26.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:25:26.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:25:26.279 [DEBUG] [Thread-76896] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:25:38.562 [DEBUG] [Thread-76898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:53.598 [DEBUG] [Thread-76899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:25:56.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:25:56.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:25:56.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:25:56.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 25, 24), 2.52, 84.37, 0.0, 40.49, 10.69, 0, 1, 0, 2, 0, 0),)
2025-12-12T21:25:56.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:25:24
2025-12-12T21:25:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:25:57.276 [DEBUG] [Thread-76900] [transport.py] [_log()] starting thread (client mode): 0xf5726c50
2025-12-12T21:25:57.276 [DEBUG] [Thread-76900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:25:57.298 [DEBUG] [Thread-76900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:25:57.299 [INFO] [Thread-76900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] client lang: <none>
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] server lang: <none>
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] kex follows: False
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:25:57.302 [DEBUG] [Thread-76900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:25:57.303 [DEBUG] [Thread-76900] [transport.py] [_log()] Compression: none
2025-12-12T21:25:57.303 [DEBUG] [Thread-76900] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:25:57.318 [DEBUG] [Thread-76900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:25:57.318 [DEBUG] [Thread-76900] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:25:57.319 [DEBUG] [Thread-76900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:25:57.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:25:57.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:25:57.319 [DEBUG] [Thread-76900] [transport.py] [_log()] userauth is OK
2025-12-12T21:25:57.319 [DEBUG] [Thread-76900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:25:57.320 [DEBUG] [Thread-76900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:25:57.320 [DEBUG] [Thread-76900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:25:57.320 [DEBUG] [Thread-76900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:25:57.347 [INFO] [Thread-76900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:25:57.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:25:58.004 [DEBUG] [Thread-76900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:25:58.004 [DEBUG] [Thread-76900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:25:58.004 [DEBUG] [Thread-76900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:25:58.045 [DEBUG] [Thread-76900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:25:58.045 [DEBUG] [Thread-76900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:25:58.048 [DEBUG] [Thread-76900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:25:58.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:25:58.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:25:58.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:25:58.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:25:58.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:25:58.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:25:58.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:25:58.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.809128 -999.00  +10.60  30.37     87   +8.60 1 3 2 2 1     0    0 0.51 -68.05 ----- 27.4 30.4 310.4 46.9 12.3 -2.9 12.2 -2.9 11.9 -2.9 12.2 -2.3
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.809128
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:25:58.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:25:24', tmtdew=2.52, humidity=84.37, cloud=0.0, wind=40.49, temperature=10.69, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:25:08.659', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:25:58.060 [DEBUG] [Thread-76900] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:25:58.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:25:58.146 [DEBUG] [Thread-76903] [transport.py] [_log()] starting thread (client mode): 0xf5726860
2025-12-12T21:25:58.146 [DEBUG] [Thread-76903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:25:58.161 [DEBUG] [Thread-76903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:25:58.161 [INFO] [Thread-76903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] client lang: <none>
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] server lang: <none>
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] kex follows: False
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] Compression: none
2025-12-12T21:25:58.169 [DEBUG] [Thread-76903] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:25:58.229 [DEBUG] [Thread-76903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:25:58.229 [DEBUG] [Thread-76903] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:25:58.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:25:58.230 [DEBUG] [Thread-76903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:25:58.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:25:58.291 [DEBUG] [Thread-76903] [transport.py] [_log()] userauth is OK
2025-12-12T21:25:58.291 [DEBUG] [Thread-76903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:25:58.291 [DEBUG] [Thread-76903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:25:58.291 [DEBUG] [Thread-76903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:25:58.291 [DEBUG] [Thread-76903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:25:58.304 [INFO] [Thread-76903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:25:58.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:25:58.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:25:59.118 [DEBUG] [Thread-76903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:25:59.118 [DEBUG] [Thread-76903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:25:59.166 [DEBUG] [Thread-76903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:25:59.166 [DEBUG] [Thread-76903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:25:59.175 [DEBUG] [Thread-76903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:25:59.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:25:59.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:25:59.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:25:59.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:25:59.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:25:59.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:25:59.210 [DEBUG] [Thread-76903] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:26:08.629 [DEBUG] [Thread-76905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:26:11.365 [DEBUG] [Thread-76906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:26:23.672 [DEBUG] [Thread-76907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:26:24.832 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:26:24.833 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:26:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:26:29.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:26:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:26:29.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 25, 56), 2.45, 84.99, 0.0, 41.96, 10.7, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:26:29.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:25:56
2025-12-12T21:26:30.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:26:30.243 [DEBUG] [Thread-76908] [transport.py] [_log()] starting thread (client mode): 0xf813ca00
2025-12-12T21:26:30.244 [DEBUG] [Thread-76908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:26:30.263 [DEBUG] [Thread-76908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:26:30.263 [INFO] [Thread-76908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:26:30.266 [DEBUG] [Thread-76908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:26:30.266 [DEBUG] [Thread-76908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:26:30.266 [DEBUG] [Thread-76908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:26:30.266 [DEBUG] [Thread-76908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:26:30.266 [DEBUG] [Thread-76908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:26:30.266 [DEBUG] [Thread-76908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] client lang: <none>
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] server lang: <none>
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] kex follows: False
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] Compression: none
2025-12-12T21:26:30.267 [DEBUG] [Thread-76908] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:26:30.281 [DEBUG] [Thread-76908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:26:30.281 [DEBUG] [Thread-76908] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:26:30.281 [DEBUG] [Thread-76908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:26:30.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:26:30.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:26:30.282 [DEBUG] [Thread-76908] [transport.py] [_log()] userauth is OK
2025-12-12T21:26:30.282 [DEBUG] [Thread-76908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:26:30.282 [DEBUG] [Thread-76908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:26:30.282 [DEBUG] [Thread-76908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:26:30.282 [DEBUG] [Thread-76908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:26:30.300 [INFO] [Thread-76908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:26:30.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:26:30.910 [DEBUG] [Thread-76908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:26:30.910 [DEBUG] [Thread-76908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:26:30.910 [DEBUG] [Thread-76908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:26:30.951 [DEBUG] [Thread-76908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:26:30.951 [DEBUG] [Thread-76908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:26:30.953 [DEBUG] [Thread-76908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:26:30.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:26:30.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:26:30.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:26:30.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:26:30.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:26:30.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:26:30.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.809823 -999.00  +10.80  23.41     87   +8.70 1 3 1 2 1     0    0 0.11 -79.10 ----- 26.9 23.4 329.8 36.0 12.3 -2.8 12.2 -2.7 11.9 -2.2 12.2 -2.0
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.809823
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:26:30.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:25:56', tmtdew=2.45, humidity=84.99, cloud=0.0, wind=41.96, temperature=10.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:26:08.707', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:26:30.972 [DEBUG] [Thread-76908] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:26:31.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:26:31.056 [DEBUG] [Thread-76911] [transport.py] [_log()] starting thread (client mode): 0xf574d990
2025-12-12T21:26:31.056 [DEBUG] [Thread-76911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:26:31.071 [DEBUG] [Thread-76911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:26:31.071 [INFO] [Thread-76911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:26:31.078 [DEBUG] [Thread-76911] [transport.py] [_log()] client lang: <none>
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] server lang: <none>
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] kex follows: False
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] Compression: none
2025-12-12T21:26:31.079 [DEBUG] [Thread-76911] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:26:31.135 [DEBUG] [Thread-76911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:26:31.136 [DEBUG] [Thread-76911] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:26:31.136 [DEBUG] [Thread-76911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:26:31.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:26:31.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:26:31.191 [DEBUG] [Thread-76911] [transport.py] [_log()] userauth is OK
2025-12-12T21:26:31.191 [DEBUG] [Thread-76911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:26:31.191 [DEBUG] [Thread-76911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:26:31.192 [DEBUG] [Thread-76911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:26:31.192 [DEBUG] [Thread-76911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:26:31.209 [INFO] [Thread-76911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:26:31.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:26:31.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:26:32.052 [DEBUG] [Thread-76911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:26:32.052 [DEBUG] [Thread-76911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:26:32.100 [DEBUG] [Thread-76911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:26:32.100 [DEBUG] [Thread-76911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:26:32.109 [DEBUG] [Thread-76911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:26:32.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:26:32.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:26:32.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:26:32.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:26:32.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:26:32.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:26:32.143 [DEBUG] [Thread-76911] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:26:38.699 [DEBUG] [Thread-76913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:26:53.751 [DEBUG] [Thread-76914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:02.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:27:02.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:27:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:27:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 26, 28), 2.43, 85.07, 0.0, 40.09, 10.67, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:27:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:26:28
2025-12-12T21:27:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:27:03.198 [DEBUG] [Thread-76915] [transport.py] [_log()] starting thread (client mode): 0xf81c3f10
2025-12-12T21:27:03.198 [DEBUG] [Thread-76915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:27:03.218 [DEBUG] [Thread-76915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:27:03.218 [INFO] [Thread-76915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] client lang: <none>
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] server lang: <none>
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] kex follows: False
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] Compression: none
2025-12-12T21:27:03.221 [DEBUG] [Thread-76915] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:27:03.236 [DEBUG] [Thread-76915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:27:03.236 [DEBUG] [Thread-76915] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:27:03.236 [DEBUG] [Thread-76915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:27:03.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:27:03.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:27:03.237 [DEBUG] [Thread-76915] [transport.py] [_log()] userauth is OK
2025-12-12T21:27:03.237 [DEBUG] [Thread-76915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:27:03.237 [DEBUG] [Thread-76915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:27:03.237 [DEBUG] [Thread-76915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:27:03.237 [DEBUG] [Thread-76915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:27:03.246 [INFO] [Thread-76915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:27:03.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:27:03.850 [DEBUG] [Thread-76915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:27:03.850 [DEBUG] [Thread-76915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:27:03.850 [DEBUG] [Thread-76915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:27:03.891 [DEBUG] [Thread-76915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:27:03.891 [DEBUG] [Thread-76915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:27:03.893 [DEBUG] [Thread-76915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:27:03.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:27:03.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:27:03.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:27:03.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:27:03.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:27:03.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:27:03.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.810170 -999.00  +10.80  36.55     86   +8.70 1 3 2 2 1     0    0 0.10 -79.68 ----- 31.6 36.5 320.2 40.2 12.4 -2.6 12.2 -3.2 11.8 -3.0 12.2 -2.5
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.810170
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:27:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:26:28', tmtdew=2.43, humidity=85.07, cloud=0.0, wind=40.09, temperature=10.67, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:26:38.688', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:27:03.912 [DEBUG] [Thread-76915] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:27:03.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:27:03.998 [DEBUG] [Thread-76918] [transport.py] [_log()] starting thread (client mode): 0xf8154460
2025-12-12T21:27:03.998 [DEBUG] [Thread-76918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:27:04.013 [DEBUG] [Thread-76918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:27:04.013 [INFO] [Thread-76918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] client lang: <none>
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] server lang: <none>
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] kex follows: False
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:27:04.020 [DEBUG] [Thread-76918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:27:04.021 [DEBUG] [Thread-76918] [transport.py] [_log()] Compression: none
2025-12-12T21:27:04.021 [DEBUG] [Thread-76918] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:27:04.085 [DEBUG] [Thread-76918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:27:04.085 [DEBUG] [Thread-76918] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:27:04.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:27:04.086 [DEBUG] [Thread-76918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:27:04.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:27:04.143 [DEBUG] [Thread-76918] [transport.py] [_log()] userauth is OK
2025-12-12T21:27:04.143 [DEBUG] [Thread-76918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:27:04.143 [DEBUG] [Thread-76918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:27:04.143 [DEBUG] [Thread-76918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:27:04.143 [DEBUG] [Thread-76918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:27:04.158 [INFO] [Thread-76918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:27:04.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:27:04.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:27:04.992 [DEBUG] [Thread-76918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:27:04.992 [DEBUG] [Thread-76918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:27:05.039 [DEBUG] [Thread-76918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:27:05.040 [DEBUG] [Thread-76918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:27:05.048 [DEBUG] [Thread-76918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:27:05.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:27: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')
2025-12-12T21:27:05.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
2025-12-12T21:27:05.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:27:05.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:27:05.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:27:05.079 [DEBUG] [Thread-76918] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:27:08.783 [DEBUG] [Thread-76920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:11.440 [DEBUG] [Thread-76921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:23.826 [DEBUG] [Thread-76922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:25.038 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:25.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:27:35.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:27:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:27:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 27), 2.38, 85.11, 0.0, 39.87, 10.72, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:27:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:27:00
2025-12-12T21:27:35.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:27:36.088 [DEBUG] [Thread-76923] [transport.py] [_log()] starting thread (client mode): 0xf57a6a70
2025-12-12T21:27:36.088 [DEBUG] [Thread-76923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:27:36.110 [DEBUG] [Thread-76923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:27:36.110 [INFO] [Thread-76923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] client lang: <none>
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] server lang: <none>
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] kex follows: False
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:27:36.113 [DEBUG] [Thread-76923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:27:36.114 [DEBUG] [Thread-76923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:27:36.114 [DEBUG] [Thread-76923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:27:36.114 [DEBUG] [Thread-76923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:27:36.114 [DEBUG] [Thread-76923] [transport.py] [_log()] Compression: none
2025-12-12T21:27:36.114 [DEBUG] [Thread-76923] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:27:36.131 [DEBUG] [Thread-76923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:27:36.132 [DEBUG] [Thread-76923] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:27:36.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:27:36.132 [DEBUG] [Thread-76923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:27:36.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:27:36.134 [DEBUG] [Thread-76923] [transport.py] [_log()] userauth is OK
2025-12-12T21:27:36.134 [DEBUG] [Thread-76923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:27:36.134 [DEBUG] [Thread-76923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:27:36.134 [DEBUG] [Thread-76923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:27:36.135 [DEBUG] [Thread-76923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:27:36.156 [INFO] [Thread-76923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:27:36.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:27:36.811 [DEBUG] [Thread-76923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:27:36.811 [DEBUG] [Thread-76923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:27:36.812 [DEBUG] [Thread-76923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:27:36.853 [DEBUG] [Thread-76923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:27:36.853 [DEBUG] [Thread-76923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:27:36.856 [DEBUG] [Thread-76923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:27:36.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:27:36.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:27:36.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:27:36.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:27:36.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:27:36.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:27:36.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:27:36.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:27:36.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:27:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.810517 -999.00  +10.70  34.65     87   +8.60 1 3 2 2 1     0    0 0.51 -67.81 ----- 39.4 34.6 321.2 44.2 12.3 -3.1 12.1 -3.2 11.8 -2.6 12.1 -2.4
2025-12-12T21:27:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:27:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:27:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.810517
2025-12-12T21:27:36.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:27:36.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:27:36.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:27:36.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:27:36.881 [DEBUG] [Thread-76923] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:27:36.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:27:36.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:27:00', tmtdew=2.38, humidity=85.11, cloud=0.0, wind=39.87, temperature=10.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:27:08.669', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:27:36.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:27:36.979 [DEBUG] [Thread-76926] [transport.py] [_log()] starting thread (client mode): 0xf57a71c0
2025-12-12T21:27:36.979 [DEBUG] [Thread-76926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:27:36.993 [DEBUG] [Thread-76926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:27:36.993 [INFO] [Thread-76926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:27:37.000 [DEBUG] [Thread-76926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] client lang: <none>
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] server lang: <none>
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] kex follows: False
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] Compression: none
2025-12-12T21:27:37.001 [DEBUG] [Thread-76926] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:27:37.058 [DEBUG] [Thread-76926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:27:37.059 [DEBUG] [Thread-76926] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:27:37.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:27:37.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:27:37.060 [DEBUG] [Thread-76926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:27:37.115 [DEBUG] [Thread-76926] [transport.py] [_log()] userauth is OK
2025-12-12T21:27:37.115 [DEBUG] [Thread-76926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:27:37.115 [DEBUG] [Thread-76926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:27:37.116 [DEBUG] [Thread-76926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:27:37.116 [DEBUG] [Thread-76926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:27:37.134 [INFO] [Thread-76926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:27:37.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:27:37.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:27:37.939 [DEBUG] [Thread-76926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:27:37.939 [DEBUG] [Thread-76926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:27:37.988 [DEBUG] [Thread-76926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:27:37.988 [DEBUG] [Thread-76926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:27:37.996 [DEBUG] [Thread-76926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:27:38.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:27:38.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:27:38.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:27:38.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:27:38.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:27:38.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:27:38.030 [DEBUG] [Thread-76926] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:27:38.852 [DEBUG] [Thread-76928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:27:53.895 [DEBUG] [Thread-76929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:08.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:28:08.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:28:08.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:28:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 28, 5), 2.35, 85.25, 0.0, 41.27, 10.62, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:28:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:28:05
2025-12-12T21:28:08.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:28:08.923 [DEBUG] [Thread-76930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:09.025 [DEBUG] [Thread-76931] [transport.py] [_log()] starting thread (client mode): 0xf575f130
2025-12-12T21:28:09.025 [DEBUG] [Thread-76931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:28:09.041 [DEBUG] [Thread-76931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:28:09.041 [INFO] [Thread-76931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] client lang: <none>
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] server lang: <none>
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] kex follows: False
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] Compression: none
2025-12-12T21:28:09.044 [DEBUG] [Thread-76931] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:28:09.060 [DEBUG] [Thread-76931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:28:09.061 [DEBUG] [Thread-76931] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:28:09.061 [DEBUG] [Thread-76931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:28:09.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:28:09.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:28:09.063 [DEBUG] [Thread-76931] [transport.py] [_log()] userauth is OK
2025-12-12T21:28:09.063 [DEBUG] [Thread-76931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:28:09.063 [DEBUG] [Thread-76931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:28:09.063 [DEBUG] [Thread-76931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:28:09.063 [DEBUG] [Thread-76931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:28:09.088 [INFO] [Thread-76931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:28:09.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:28:09.707 [DEBUG] [Thread-76931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:28:09.707 [DEBUG] [Thread-76931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:28:09.707 [DEBUG] [Thread-76931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:28:09.748 [DEBUG] [Thread-76931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:28:09.748 [DEBUG] [Thread-76931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:28:09.751 [DEBUG] [Thread-76931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:28:09.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:28:09.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:28:09.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:28:09.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:28:09.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:28:09.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:28:09.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:28:09.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:28:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:28:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.810864 -999.00  +10.40  38.60     87   +8.50 1 3 2 2 1     0    0 0.47 -67.88 ----- 39.5 38.6 326.8 51.4 12.3 -3.1 12.2 -2.8 11.8 -2.4 12.1 -2.2
2025-12-12T21:28:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:28:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:28:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.810864
2025-12-12T21:28:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:28:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:28:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:28:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:28:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:28:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:28:05', tmtdew=2.35, humidity=85.25, cloud=0.0, wind=41.27, temperature=10.62, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:27:38.650', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:28:09.776 [DEBUG] [Thread-76931] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:28:09.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:28:09.872 [DEBUG] [Thread-76934] [transport.py] [_log()] starting thread (client mode): 0xf57f3cd0
2025-12-12T21:28:09.872 [DEBUG] [Thread-76934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:28:09.887 [DEBUG] [Thread-76934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:28:09.888 [INFO] [Thread-76934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:09.895 [DEBUG] [Thread-76934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] client lang: <none>
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] server lang: <none>
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] kex follows: False
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] Compression: none
2025-12-12T21:28:09.896 [DEBUG] [Thread-76934] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:28:09.955 [DEBUG] [Thread-76934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:28:09.956 [DEBUG] [Thread-76934] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:28:09.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:28:09.957 [DEBUG] [Thread-76934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:28:09.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:28:10.011 [DEBUG] [Thread-76934] [transport.py] [_log()] userauth is OK
2025-12-12T21:28:10.011 [DEBUG] [Thread-76934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:28:10.011 [DEBUG] [Thread-76934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:28:10.011 [DEBUG] [Thread-76934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:28:10.011 [DEBUG] [Thread-76934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:28:10.028 [INFO] [Thread-76934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:28:10.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:28:10.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:28:10.838 [DEBUG] [Thread-76934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:28:10.838 [DEBUG] [Thread-76934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:28:10.886 [DEBUG] [Thread-76934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:28:10.886 [DEBUG] [Thread-76934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:28:10.895 [DEBUG] [Thread-76934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:28:10.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21: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')
2025-12-12T21: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
2025-12-12T21:28:10.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:28:10.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:28:10.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:28:10.930 [DEBUG] [Thread-76934] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:28:11.516 [DEBUG] [Thread-76936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:23.946 [DEBUG] [Thread-76937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:25.242 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:25.243 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:38.988 [DEBUG] [Thread-76938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:28:40.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:28:40.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:28:40.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:28:41.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 28, 37), 2.3, 85.75, 0.0, 42.05, 10.6, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:28:41.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:28:37
2025-12-12T21:28:41.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:28:41.906 [DEBUG] [Thread-76939] [transport.py] [_log()] starting thread (client mode): 0xf57a7220
2025-12-12T21:28:41.906 [DEBUG] [Thread-76939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:28:41.927 [DEBUG] [Thread-76939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:28:41.927 [INFO] [Thread-76939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] client lang: <none>
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] server lang: <none>
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] kex follows: False
2025-12-12T21:28:41.930 [DEBUG] [Thread-76939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:28:41.931 [DEBUG] [Thread-76939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:28:41.931 [DEBUG] [Thread-76939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:28:41.931 [DEBUG] [Thread-76939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:28:41.931 [DEBUG] [Thread-76939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:28:41.931 [DEBUG] [Thread-76939] [transport.py] [_log()] Compression: none
2025-12-12T21:28:41.931 [DEBUG] [Thread-76939] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:28:41.948 [DEBUG] [Thread-76939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:28:41.948 [DEBUG] [Thread-76939] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:28:41.949 [DEBUG] [Thread-76939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:28:41.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:28:41.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:28:41.951 [DEBUG] [Thread-76939] [transport.py] [_log()] userauth is OK
2025-12-12T21:28:41.951 [DEBUG] [Thread-76939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:28:41.951 [DEBUG] [Thread-76939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:28:41.951 [DEBUG] [Thread-76939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:28:41.951 [DEBUG] [Thread-76939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:28:41.976 [INFO] [Thread-76939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:28:41.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:28:42.623 [DEBUG] [Thread-76939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:28:42.623 [DEBUG] [Thread-76939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:28:42.624 [DEBUG] [Thread-76939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:28:42.665 [DEBUG] [Thread-76939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:28:42.665 [DEBUG] [Thread-76939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:28:42.667 [DEBUG] [Thread-76939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:28:42.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:28:42.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:28:42.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:28:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:28:42.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:28:42.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:28:42.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:28:42.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:28:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:28:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.811212 -999.00  +10.40  37.46     88   +8.60 1 3 2 3 1     0    0 0.54 -64.76 ----- 39.4 37.5 326.8 47.4 12.3 -2.8 12.1 -2.7 11.8 -2.5 12.2 -2.3
2025-12-12T21:28:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:28:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:28:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.811212
2025-12-12T21:28:42.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:28:42.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:28:42.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:28:42.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:28:42.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:28:42.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:28:37', tmtdew=2.3, humidity=85.75, cloud=0.0, wind=42.05, temperature=10.6, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:28:08.717', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:28:42.690 [DEBUG] [Thread-76939] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:28:42.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:28:42.794 [DEBUG] [Thread-76942] [transport.py] [_log()] starting thread (client mode): 0xf5795de0
2025-12-12T21:28:42.794 [DEBUG] [Thread-76942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:28:42.808 [DEBUG] [Thread-76942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:28:42.808 [INFO] [Thread-76942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] client lang: <none>
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] server lang: <none>
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] kex follows: False
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:28:42.816 [DEBUG] [Thread-76942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:28:42.817 [DEBUG] [Thread-76942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:28:42.817 [DEBUG] [Thread-76942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:28:42.817 [DEBUG] [Thread-76942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:28:42.817 [DEBUG] [Thread-76942] [transport.py] [_log()] Compression: none
2025-12-12T21:28:42.817 [DEBUG] [Thread-76942] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:28:42.875 [DEBUG] [Thread-76942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:28:42.875 [DEBUG] [Thread-76942] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:28:42.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:28:42.877 [DEBUG] [Thread-76942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:28:42.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:28:42.935 [DEBUG] [Thread-76942] [transport.py] [_log()] userauth is OK
2025-12-12T21:28:42.936 [DEBUG] [Thread-76942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:28:42.936 [DEBUG] [Thread-76942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:28:42.936 [DEBUG] [Thread-76942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:28:42.936 [DEBUG] [Thread-76942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:28:42.955 [INFO] [Thread-76942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:28:42.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:28:42.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:28:43.785 [DEBUG] [Thread-76942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:28:43.786 [DEBUG] [Thread-76942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:28:43.834 [DEBUG] [Thread-76942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:28:43.834 [DEBUG] [Thread-76942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:28:43.843 [DEBUG] [Thread-76942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:28:43.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:28:43.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:28:43.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:28:43.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:28:43.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:28:43.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:28:43.878 [DEBUG] [Thread-76942] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:28:54.016 [DEBUG] [Thread-76944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:09.060 [DEBUG] [Thread-76945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:11.598 [DEBUG] [Thread-76946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:13.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:29:13.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:29:13.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:29:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 29, 9), 2.27, 85.9, 0.0, 41.27, 10.54, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:29:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:29:09
2025-12-12T21:29:14.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:29:14.861 [DEBUG] [Thread-76947] [transport.py] [_log()] starting thread (client mode): 0xf575f190
2025-12-12T21:29:14.861 [DEBUG] [Thread-76947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:29:14.878 [DEBUG] [Thread-76947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:29:14.878 [INFO] [Thread-76947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] client lang: <none>
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] server lang: <none>
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] kex follows: False
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] Compression: none
2025-12-12T21:29:14.880 [DEBUG] [Thread-76947] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:29:14.894 [DEBUG] [Thread-76947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:29:14.895 [DEBUG] [Thread-76947] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:29:14.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:29:14.896 [DEBUG] [Thread-76947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:29:14.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:29:14.898 [DEBUG] [Thread-76947] [transport.py] [_log()] userauth is OK
2025-12-12T21:29:14.898 [DEBUG] [Thread-76947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:29:14.898 [DEBUG] [Thread-76947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:29:14.898 [DEBUG] [Thread-76947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:29:14.898 [DEBUG] [Thread-76947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:29:14.916 [INFO] [Thread-76947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:29:14.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:29:15.534 [DEBUG] [Thread-76947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:29:15.534 [DEBUG] [Thread-76947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:29:15.535 [DEBUG] [Thread-76947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:29:15.575 [DEBUG] [Thread-76947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:29:15.575 [DEBUG] [Thread-76947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:29:15.578 [DEBUG] [Thread-76947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:29:15.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:29:15.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:29:15.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:29:15.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:29:15.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:29:15.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:29:15.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:29:15.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:29:15.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:29:15.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.811559 -999.00  +10.50  39.26     88   +8.60 1 3 2 3 1     0    0 0.37 -68.80 ----- 35.0 39.3 320.6 46.9 12.3 -2.8 12.1 -2.9 11.8 -3.2 12.1 -2.7
2025-12-12T21:29:15.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:29:15.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:29:15.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.811559
2025-12-12T21:29:15.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:29:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:29:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:29:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:29:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:29:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:29:09', tmtdew=2.27, humidity=85.9, cloud=0.0, wind=41.27, temperature=10.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:28:38.698', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:29:15.607 [DEBUG] [Thread-76947] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:29:15.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:29:15.702 [DEBUG] [Thread-76950] [transport.py] [_log()] starting thread (client mode): 0xf575fca0
2025-12-12T21:29:15.702 [DEBUG] [Thread-76950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:29:15.717 [DEBUG] [Thread-76950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:29:15.717 [INFO] [Thread-76950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:29:15.724 [DEBUG] [Thread-76950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:29:15.724 [DEBUG] [Thread-76950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:29:15.724 [DEBUG] [Thread-76950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:29:15.724 [DEBUG] [Thread-76950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] client lang: <none>
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] server lang: <none>
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] kex follows: False
2025-12-12T21:29:15.725 [DEBUG] [Thread-76950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:29:15.726 [DEBUG] [Thread-76950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:29:15.726 [DEBUG] [Thread-76950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:29:15.726 [DEBUG] [Thread-76950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:29:15.726 [DEBUG] [Thread-76950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:29:15.726 [DEBUG] [Thread-76950] [transport.py] [_log()] Compression: none
2025-12-12T21:29:15.726 [DEBUG] [Thread-76950] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:29:15.783 [DEBUG] [Thread-76950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:29:15.783 [DEBUG] [Thread-76950] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:29:15.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:29:15.784 [DEBUG] [Thread-76950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:29:15.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:29:15.839 [DEBUG] [Thread-76950] [transport.py] [_log()] userauth is OK
2025-12-12T21:29:15.839 [DEBUG] [Thread-76950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:29:15.839 [DEBUG] [Thread-76950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:29:15.840 [DEBUG] [Thread-76950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:29:15.840 [DEBUG] [Thread-76950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:29:15.858 [INFO] [Thread-76950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:29:15.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:29:15.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:29:16.696 [DEBUG] [Thread-76950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:29:16.696 [DEBUG] [Thread-76950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:29:16.744 [DEBUG] [Thread-76950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:29:16.744 [DEBUG] [Thread-76950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:29:16.753 [DEBUG] [Thread-76950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:29:16.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:29:16.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:29:16.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:29:16.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:29:16.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:29:16.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:29:16.787 [DEBUG] [Thread-76950] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:29:24.089 [DEBUG] [Thread-76952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:25.446 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:25.447 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:39.130 [DEBUG] [Thread-76953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:29:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:29:46.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:29:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:29:47.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 29, 41), 2.18, 86.12, 0.0, 38.34, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:29:47.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:29:41
2025-12-12T21:29:47.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:29:47.773 [DEBUG] [Thread-76954] [transport.py] [_log()] starting thread (client mode): 0xf57f1ed0
2025-12-12T21:29:47.773 [DEBUG] [Thread-76954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:29:47.793 [DEBUG] [Thread-76954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:29:47.793 [INFO] [Thread-76954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] client lang: <none>
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] server lang: <none>
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] kex follows: False
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] Compression: none
2025-12-12T21:29:47.796 [DEBUG] [Thread-76954] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:29:47.813 [DEBUG] [Thread-76954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:29:47.813 [DEBUG] [Thread-76954] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:29:47.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:29:47.814 [DEBUG] [Thread-76954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:29:47.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:29:47.816 [DEBUG] [Thread-76954] [transport.py] [_log()] userauth is OK
2025-12-12T21:29:47.816 [DEBUG] [Thread-76954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:29:47.816 [DEBUG] [Thread-76954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:29:47.817 [DEBUG] [Thread-76954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:29:47.817 [DEBUG] [Thread-76954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:29:47.842 [INFO] [Thread-76954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:29:47.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:29:48.486 [DEBUG] [Thread-76954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:29:48.487 [DEBUG] [Thread-76954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:29:48.487 [DEBUG] [Thread-76954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:29:48.528 [DEBUG] [Thread-76954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:29:48.528 [DEBUG] [Thread-76954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:29:48.530 [DEBUG] [Thread-76954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:29:48.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:29:48.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:29:48.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:29:48.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:29:48.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:29:48.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:29:48.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:29:48.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:29:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:29:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.811906 -999.00  +10.50  34.98     88   +8.60 1 3 2 3 1     0    0 0.41 -69.79 ----- 37.9 35.0 329.2 47.8 12.3 -2.9 12.1 -3.1 11.8 -2.7 12.1 -2.5
2025-12-12T21:29:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:29:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:29:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.811906
2025-12-12T21:29:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:29:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:29:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:29:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:29:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:29:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:29:41', tmtdew=2.18, humidity=86.12, cloud=0.0, wind=38.34, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:29:08.678', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:29:48.553 [DEBUG] [Thread-76954] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:29:48.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:29:48.653 [DEBUG] [Thread-76957] [transport.py] [_log()] starting thread (client mode): 0xf57c81c0
2025-12-12T21:29:48.653 [DEBUG] [Thread-76957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:29:48.668 [DEBUG] [Thread-76957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:29:48.668 [INFO] [Thread-76957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] client lang: <none>
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] server lang: <none>
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] kex follows: False
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] Compression: none
2025-12-12T21:29:48.676 [DEBUG] [Thread-76957] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:29:48.738 [DEBUG] [Thread-76957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:29:48.738 [DEBUG] [Thread-76957] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:29:48.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:29:48.739 [DEBUG] [Thread-76957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:29:48.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:29:48.795 [DEBUG] [Thread-76957] [transport.py] [_log()] userauth is OK
2025-12-12T21:29:48.796 [DEBUG] [Thread-76957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:29:48.796 [DEBUG] [Thread-76957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:29:48.796 [DEBUG] [Thread-76957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:29:48.796 [DEBUG] [Thread-76957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:29:48.817 [INFO] [Thread-76957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:29:48.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:29:48.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:29:49.645 [DEBUG] [Thread-76957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:29:49.645 [DEBUG] [Thread-76957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:29:49.693 [DEBUG] [Thread-76957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:29:49.693 [DEBUG] [Thread-76957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:29:49.701 [DEBUG] [Thread-76957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:29:49.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:29:49.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:29:49.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
2025-12-12T21:29:49.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:29:49.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:29:49.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:29:49.736 [DEBUG] [Thread-76957] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:29:54.158 [DEBUG] [Thread-76959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:09.211 [DEBUG] [Thread-76960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:11.688 [DEBUG] [Thread-76961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:30:19.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:30:19.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:30:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 30, 13), 2.16, 86.27, 0.0, 37.9, 10.45, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:30:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:30:13
2025-12-12T21:30:20.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:30:20.699 [DEBUG] [Thread-76962] [transport.py] [_log()] starting thread (client mode): 0xf57cbd00
2025-12-12T21:30:20.700 [DEBUG] [Thread-76962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:30:20.721 [DEBUG] [Thread-76962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:30:20.721 [INFO] [Thread-76962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] client lang: <none>
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] server lang: <none>
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] kex follows: False
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:30:20.725 [DEBUG] [Thread-76962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:30:20.726 [DEBUG] [Thread-76962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:30:20.726 [DEBUG] [Thread-76962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:30:20.726 [DEBUG] [Thread-76962] [transport.py] [_log()] Compression: none
2025-12-12T21:30:20.726 [DEBUG] [Thread-76962] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:30:20.743 [DEBUG] [Thread-76962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:30:20.743 [DEBUG] [Thread-76962] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:30:20.744 [DEBUG] [Thread-76962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:30:20.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:30:20.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:30:20.746 [DEBUG] [Thread-76962] [transport.py] [_log()] userauth is OK
2025-12-12T21:30:20.746 [DEBUG] [Thread-76962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:30:20.746 [DEBUG] [Thread-76962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:30:20.746 [DEBUG] [Thread-76962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:30:20.746 [DEBUG] [Thread-76962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:30:20.770 [INFO] [Thread-76962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:30:20.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:30:21.327 [DEBUG] [Thread-76962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:30:21.327 [DEBUG] [Thread-76962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:30:21.328 [DEBUG] [Thread-76962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:30:21.368 [DEBUG] [Thread-76962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:30:21.368 [DEBUG] [Thread-76962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:30:21.370 [DEBUG] [Thread-76962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:30:21.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:30:21.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:30:21.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:30:21.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:30:21.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:30:21.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:30:21.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:30:21.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:30:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:30:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.812600 -999.00  +10.50  32.94     88   +8.60 1 3 2 3 1     0    0 0.68 -55.77 ----- 36.5 32.9 320.1 55.9 12.2 -3.0 12.0 -2.9 11.7 -2.6 12.0 -2.3
2025-12-12T21:30:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:30:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:30:21.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.812600
2025-12-12T21:30:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:30:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:30:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:30:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:30:21.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:30:21.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:30:13', tmtdew=2.16, humidity=86.27, cloud=0.0, wind=37.9, temperature=10.45, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:30:08.640', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:30:21.394 [DEBUG] [Thread-76962] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:30:21.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:30:21.493 [DEBUG] [Thread-76965] [transport.py] [_log()] starting thread (client mode): 0xf57c8100
2025-12-12T21:30:21.493 [DEBUG] [Thread-76965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:30:21.512 [DEBUG] [Thread-76965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:30:21.512 [INFO] [Thread-76965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] client lang: <none>
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] server lang: <none>
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] kex follows: False
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:30:21.520 [DEBUG] [Thread-76965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:30:21.521 [DEBUG] [Thread-76965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:30:21.521 [DEBUG] [Thread-76965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:30:21.521 [DEBUG] [Thread-76965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:30:21.521 [DEBUG] [Thread-76965] [transport.py] [_log()] Compression: none
2025-12-12T21:30:21.521 [DEBUG] [Thread-76965] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:30:21.584 [DEBUG] [Thread-76965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:30:21.585 [DEBUG] [Thread-76965] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:30:21.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:30:21.586 [DEBUG] [Thread-76965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:30:21.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:30:21.639 [DEBUG] [Thread-76965] [transport.py] [_log()] userauth is OK
2025-12-12T21:30:21.640 [DEBUG] [Thread-76965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:30:21.640 [DEBUG] [Thread-76965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:30:21.640 [DEBUG] [Thread-76965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:30:21.640 [DEBUG] [Thread-76965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:30:21.661 [INFO] [Thread-76965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:30:21.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:30:21.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:30:22.488 [DEBUG] [Thread-76965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:30:22.489 [DEBUG] [Thread-76965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:30:22.537 [DEBUG] [Thread-76965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:30:22.537 [DEBUG] [Thread-76965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:30:22.546 [DEBUG] [Thread-76965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:30:22.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:30:22.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:30:22.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:30:22.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:30:22.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:30:22.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:30:22.580 [DEBUG] [Thread-76965] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:30:24.239 [DEBUG] [Thread-76967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:25.650 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:25.652 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:39.283 [DEBUG] [Thread-76968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:30:52.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:30:52.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:30:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 30, 45), 2.12, 86.7, 0.0, 35.32, 10.49, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:30:53.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:30:45
2025-12-12T21:30:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:30:53.583 [DEBUG] [Thread-76969] [transport.py] [_log()] starting thread (client mode): 0xf57cb370
2025-12-12T21:30:53.583 [DEBUG] [Thread-76969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:30:53.605 [DEBUG] [Thread-76969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:30:53.605 [INFO] [Thread-76969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] client lang: <none>
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] server lang: <none>
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] kex follows: False
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] Compression: none
2025-12-12T21:30:53.608 [DEBUG] [Thread-76969] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:30:53.624 [DEBUG] [Thread-76969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:30:53.624 [DEBUG] [Thread-76969] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:30:53.624 [DEBUG] [Thread-76969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:30:53.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:30:53.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:30:53.626 [DEBUG] [Thread-76969] [transport.py] [_log()] userauth is OK
2025-12-12T21:30:53.626 [DEBUG] [Thread-76969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:30:53.626 [DEBUG] [Thread-76969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:30:53.626 [DEBUG] [Thread-76969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:30:53.626 [DEBUG] [Thread-76969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:30:53.637 [INFO] [Thread-76969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:30:53.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:30:54.245 [DEBUG] [Thread-76969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:30:54.245 [DEBUG] [Thread-76969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:30:54.245 [DEBUG] [Thread-76969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:30:54.286 [DEBUG] [Thread-76969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:30:54.286 [DEBUG] [Thread-76969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:30:54.288 [DEBUG] [Thread-76969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:30:54.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:30:54.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:30:54.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:30:54.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:30:54.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:30:54.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:30:54.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:30:54.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:30:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:30:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.812948 -999.00  +10.50  33.11     88   +8.60 1 3 2 3 1     0    0 0.61 -57.19 ----- 33.0 33.1 333.2 45.5 12.2 -2.8 12.1 -2.7 11.8 -2.3 12.0 -2.2
2025-12-12T21:30:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:30:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.812948
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:30:45', tmtdew=2.12, humidity=86.7, cloud=0.0, wind=35.32, temperature=10.49, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:30:38.707', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:30:54.307 [DEBUG] [Thread-76969] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:30:54.311 [DEBUG] [Thread-76972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:30:54.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:30:54.395 [DEBUG] [Thread-76973] [transport.py] [_log()] starting thread (client mode): 0xf57c87f0
2025-12-12T21:30:54.395 [DEBUG] [Thread-76973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:30:54.409 [DEBUG] [Thread-76973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:30:54.409 [INFO] [Thread-76973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] client lang: <none>
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] server lang: <none>
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] kex follows: False
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] Compression: none
2025-12-12T21:30:54.417 [DEBUG] [Thread-76973] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:30:54.474 [DEBUG] [Thread-76973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:30:54.474 [DEBUG] [Thread-76973] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:30:54.474 [DEBUG] [Thread-76973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:30:54.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:30:54.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:30:54.531 [DEBUG] [Thread-76973] [transport.py] [_log()] userauth is OK
2025-12-12T21:30:54.531 [DEBUG] [Thread-76973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:30:54.531 [DEBUG] [Thread-76973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:30:54.531 [DEBUG] [Thread-76973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:30:54.531 [DEBUG] [Thread-76973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:30:54.545 [INFO] [Thread-76973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:30:54.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:30:54.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:30:55.361 [DEBUG] [Thread-76973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:30:55.362 [DEBUG] [Thread-76973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:30:55.409 [DEBUG] [Thread-76973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:30:55.409 [DEBUG] [Thread-76973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:30:55.417 [DEBUG] [Thread-76973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:30:55.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:30: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')
2025-12-12T21:30:55.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:30:55.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:30:55.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:30:55.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:30:55.449 [DEBUG] [Thread-76973] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:31:09.345 [DEBUG] [Thread-76975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:11.773 [DEBUG] [Thread-76976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:24.374 [DEBUG] [Thread-76977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:31:25.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:31:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:31:25.858 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:25.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:26.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 31, 17), 2.11, 86.79, 0.0, 34.92, 10.55, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:31:26.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:31:17
2025-12-12T21:31:26.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:31:26.428 [DEBUG] [Thread-76978] [transport.py] [_log()] starting thread (client mode): 0xf57c8bb0
2025-12-12T21:31:26.428 [DEBUG] [Thread-76978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:31:26.448 [DEBUG] [Thread-76978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:31:26.448 [INFO] [Thread-76978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:31:26.451 [DEBUG] [Thread-76978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:31:26.451 [DEBUG] [Thread-76978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:31:26.451 [DEBUG] [Thread-76978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:31:26.451 [DEBUG] [Thread-76978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] client lang: <none>
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] server lang: <none>
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] kex follows: False
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] Compression: none
2025-12-12T21:31:26.452 [DEBUG] [Thread-76978] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:31:26.466 [DEBUG] [Thread-76978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:31:26.467 [DEBUG] [Thread-76978] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:31:26.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:31:26.468 [DEBUG] [Thread-76978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:31:26.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:31:26.470 [DEBUG] [Thread-76978] [transport.py] [_log()] userauth is OK
2025-12-12T21:31:26.470 [DEBUG] [Thread-76978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:31:26.470 [DEBUG] [Thread-76978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:31:26.470 [DEBUG] [Thread-76978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:31:26.470 [DEBUG] [Thread-76978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:31:26.488 [INFO] [Thread-76978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:31:26.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:31:27.113 [DEBUG] [Thread-76978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:31:27.113 [DEBUG] [Thread-76978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:31:27.114 [DEBUG] [Thread-76978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:31:27.154 [DEBUG] [Thread-76978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:31:27.154 [DEBUG] [Thread-76978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:31:27.157 [DEBUG] [Thread-76978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:31:27.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:31:27.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:31:27.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:31:27.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:31:27.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:31:27.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:31:27.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:31:27.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:31:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:31:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.813295 -999.00  +10.60  26.96     87   +8.60 1 3 1 2 1     0    0 0.75 -54.79 ----- 28.0 27.0 322.6 37.9 12.2 -2.8 12.1 -2.6 11.8 -2.8 12.0 -2.4
2025-12-12T21:31:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:31:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:31:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.813295
2025-12-12T21:31:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:31:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:31:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:31:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:31:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:31:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:31:17', tmtdew=2.11, humidity=86.79, cloud=0.0, wind=34.92, temperature=10.55, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:31:08.688', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:31:27.181 [DEBUG] [Thread-76978] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:31:27.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:31:27.282 [DEBUG] [Thread-76981] [transport.py] [_log()] starting thread (client mode): 0xf57cb880
2025-12-12T21:31:27.282 [DEBUG] [Thread-76981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:31:27.296 [DEBUG] [Thread-76981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:31:27.297 [INFO] [Thread-76981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:31:27.304 [DEBUG] [Thread-76981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] client lang: <none>
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] server lang: <none>
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] kex follows: False
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] Compression: none
2025-12-12T21:31:27.305 [DEBUG] [Thread-76981] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:31:27.363 [DEBUG] [Thread-76981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:31:27.363 [DEBUG] [Thread-76981] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:31:27.364 [DEBUG] [Thread-76981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:31:27.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:31:27.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:31:27.419 [DEBUG] [Thread-76981] [transport.py] [_log()] userauth is OK
2025-12-12T21:31:27.420 [DEBUG] [Thread-76981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:31:27.420 [DEBUG] [Thread-76981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:31:27.420 [DEBUG] [Thread-76981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:31:27.420 [DEBUG] [Thread-76981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:31:27.437 [INFO] [Thread-76981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:31:27.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:31:27.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:31:28.266 [DEBUG] [Thread-76981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:31:28.266 [DEBUG] [Thread-76981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:31:28.314 [DEBUG] [Thread-76981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:31:28.314 [DEBUG] [Thread-76981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:31:28.323 [DEBUG] [Thread-76981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:31:28.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:31:28.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:31:28.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:31:28.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:31:28.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:31:28.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:31:28.358 [DEBUG] [Thread-76981] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:31:39.402 [DEBUG] [Thread-76983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:54.446 [DEBUG] [Thread-76984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:31:58.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:31:58.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:31:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:31:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 31, 49), 2.12, 86.74, 0.0, 38.71, 10.59, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:31:59.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:31:49
2025-12-12T21:31:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:31:59.334 [DEBUG] [Thread-76985] [transport.py] [_log()] starting thread (client mode): 0xf57c9b10
2025-12-12T21:31:59.334 [DEBUG] [Thread-76985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:31:59.354 [DEBUG] [Thread-76985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:31:59.354 [INFO] [Thread-76985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:31:59.357 [DEBUG] [Thread-76985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:31:59.357 [DEBUG] [Thread-76985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:31:59.357 [DEBUG] [Thread-76985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:31:59.357 [DEBUG] [Thread-76985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:31:59.357 [DEBUG] [Thread-76985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] client lang: <none>
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] server lang: <none>
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] kex follows: False
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] Compression: none
2025-12-12T21:31:59.358 [DEBUG] [Thread-76985] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:31:59.376 [DEBUG] [Thread-76985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:31:59.377 [DEBUG] [Thread-76985] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:31:59.377 [DEBUG] [Thread-76985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:31:59.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:31:59.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:31:59.380 [DEBUG] [Thread-76985] [transport.py] [_log()] userauth is OK
2025-12-12T21:31:59.380 [DEBUG] [Thread-76985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:31:59.380 [DEBUG] [Thread-76985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:31:59.380 [DEBUG] [Thread-76985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:31:59.380 [DEBUG] [Thread-76985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:31:59.400 [INFO] [Thread-76985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:31:59.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:32:00.045 [DEBUG] [Thread-76985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:32:00.045 [DEBUG] [Thread-76985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:32:00.046 [DEBUG] [Thread-76985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:32:00.086 [DEBUG] [Thread-76985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:32:00.086 [DEBUG] [Thread-76985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:32:00.089 [DEBUG] [Thread-76985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:32:00.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:32:00.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:32:00.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:32:00.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:32:00.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:32:00.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:32:00.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:32:00.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:32:00.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:32:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.813642 -999.00  +10.50  33.21     87   +8.60 1 3 2 2 1     0    0 0.85 -49.84 ----- 37.8 33.2 311.6 47.7 12.2 -3.0 12.0 -2.9 11.7 -2.4 12.1 -2.2
2025-12-12T21:32:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:32:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:32:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.813642
2025-12-12T21:32:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:32:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:32:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:32:00.112 [DEBUG] [Thread-76985] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:32:00.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:32:00.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:32:00.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:31:49', tmtdew=2.12, humidity=86.74, cloud=0.0, wind=38.71, temperature=10.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:31:38.669', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:32:00.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:32:00.214 [DEBUG] [Thread-76988] [transport.py] [_log()] starting thread (client mode): 0xf57cadd0
2025-12-12T21:32:00.214 [DEBUG] [Thread-76988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:32:00.229 [DEBUG] [Thread-76988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:32:00.229 [INFO] [Thread-76988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:32:00.236 [DEBUG] [Thread-76988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:32:00.236 [DEBUG] [Thread-76988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:32:00.236 [DEBUG] [Thread-76988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:32:00.236 [DEBUG] [Thread-76988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] client lang: <none>
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] server lang: <none>
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] kex follows: False
2025-12-12T21:32:00.237 [DEBUG] [Thread-76988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:32:00.238 [DEBUG] [Thread-76988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:32:00.238 [DEBUG] [Thread-76988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:32:00.238 [DEBUG] [Thread-76988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:32:00.238 [DEBUG] [Thread-76988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:32:00.238 [DEBUG] [Thread-76988] [transport.py] [_log()] Compression: none
2025-12-12T21:32:00.238 [DEBUG] [Thread-76988] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:32:00.294 [DEBUG] [Thread-76988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:32:00.294 [DEBUG] [Thread-76988] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:32:00.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:32:00.295 [DEBUG] [Thread-76988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:32:00.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:32:00.351 [DEBUG] [Thread-76988] [transport.py] [_log()] userauth is OK
2025-12-12T21:32:00.352 [DEBUG] [Thread-76988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:32:00.352 [DEBUG] [Thread-76988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:32:00.352 [DEBUG] [Thread-76988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:32:00.352 [DEBUG] [Thread-76988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:32:00.371 [INFO] [Thread-76988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:32:00.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:32:00.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:32:01.218 [DEBUG] [Thread-76988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:32:01.218 [DEBUG] [Thread-76988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:32:01.266 [DEBUG] [Thread-76988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:32:01.266 [DEBUG] [Thread-76988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:32:01.275 [DEBUG] [Thread-76988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:32:01.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:32:01.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:32:01.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
2025-12-12T21:32:01.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:32:01.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:32:01.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:32:01.309 [DEBUG] [Thread-76988] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:32:09.474 [DEBUG] [Thread-76990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:32:11.841 [DEBUG] [Thread-76991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:32:24.519 [DEBUG] [Thread-76992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:32:26.071 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:32:26.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:32:31.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:32:31.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:32:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:32:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 32, 21), 2.1, 86.82, 0.0, 38.46, 10.52, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:32:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:32:21
2025-12-12T21:32:32.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:32:32.298 [DEBUG] [Thread-76993] [transport.py] [_log()] starting thread (client mode): 0xf57cb340
2025-12-12T21:32:32.299 [DEBUG] [Thread-76993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:32:32.321 [DEBUG] [Thread-76993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:32:32.321 [INFO] [Thread-76993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:32:32.324 [DEBUG] [Thread-76993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:32:32.324 [DEBUG] [Thread-76993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:32:32.324 [DEBUG] [Thread-76993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] client lang: <none>
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] server lang: <none>
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] kex follows: False
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] Compression: none
2025-12-12T21:32:32.325 [DEBUG] [Thread-76993] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:32:32.336 [DEBUG] [Thread-76993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:32:32.336 [DEBUG] [Thread-76993] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:32:32.337 [DEBUG] [Thread-76993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:32:32.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:32:32.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:32:32.338 [DEBUG] [Thread-76993] [transport.py] [_log()] userauth is OK
2025-12-12T21:32:32.339 [DEBUG] [Thread-76993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:32:32.339 [DEBUG] [Thread-76993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:32:32.339 [DEBUG] [Thread-76993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:32:32.339 [DEBUG] [Thread-76993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:32:32.363 [INFO] [Thread-76993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:32:32.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:32:32.989 [DEBUG] [Thread-76993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:32:32.989 [DEBUG] [Thread-76993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:32:32.990 [DEBUG] [Thread-76993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:32:33.031 [DEBUG] [Thread-76993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:32:33.031 [DEBUG] [Thread-76993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:32:33.033 [DEBUG] [Thread-76993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:32:33.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:32:33.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:32:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:32:33.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:32:33.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:32:33.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:32:33.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.813989 -999.00  +10.50  33.77     88   +8.60 1 3 2 3 1     0    0 0.88 -46.28 ----- 36.5 33.8 328.8 38.3 12.2 -2.6 12.1 -2.8 11.7 -2.3 12.1 -2.2
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.813989
2025-12-12T21:32:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:32:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:32:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:32:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:32:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:32:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:32:21', tmtdew=2.1, humidity=86.82, cloud=0.0, wind=38.46, temperature=10.52, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:32:08.650', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:32:33.052 [DEBUG] [Thread-76993] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:32:33.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:32:33.155 [DEBUG] [Thread-76996] [transport.py] [_log()] starting thread (client mode): 0xf57ca7d0
2025-12-12T21:32:33.155 [DEBUG] [Thread-76996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:32:33.169 [DEBUG] [Thread-76996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:32:33.170 [INFO] [Thread-76996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:32:33.177 [DEBUG] [Thread-76996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] client lang: <none>
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] server lang: <none>
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] kex follows: False
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] Compression: none
2025-12-12T21:32:33.178 [DEBUG] [Thread-76996] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:32:33.235 [DEBUG] [Thread-76996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:32:33.235 [DEBUG] [Thread-76996] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:32:33.236 [DEBUG] [Thread-76996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:32:33.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:32:33.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:32:33.291 [DEBUG] [Thread-76996] [transport.py] [_log()] userauth is OK
2025-12-12T21:32:33.291 [DEBUG] [Thread-76996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:32:33.292 [DEBUG] [Thread-76996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:32:33.292 [DEBUG] [Thread-76996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:32:33.292 [DEBUG] [Thread-76996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:32:33.310 [INFO] [Thread-76996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:32:33.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:32:33.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:32:34.132 [DEBUG] [Thread-76996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:32:34.132 [DEBUG] [Thread-76996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:32:34.180 [DEBUG] [Thread-76996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:32:34.180 [DEBUG] [Thread-76996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:32:34.189 [DEBUG] [Thread-76996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:32:34.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:32:34.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:32:34.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:32:34.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:32:34.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:32:34.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:32:34.223 [DEBUG] [Thread-76996] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:32:39.547 [DEBUG] [Thread-76998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:32:54.587 [DEBUG] [Thread-76999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:04.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:33:04.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:33:04.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:33:04.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 32, 53), 2.09, 86.85, 0.0, 39.77, 10.55, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:33:04.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:32:53
2025-12-12T21:33:05.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:33:05.197 [DEBUG] [Thread-77000] [transport.py] [_log()] starting thread (client mode): 0xf57c9e70
2025-12-12T21:33:05.197 [DEBUG] [Thread-77000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:33:05.217 [DEBUG] [Thread-77000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:33:05.217 [INFO] [Thread-77000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:33:05.220 [DEBUG] [Thread-77000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] client lang: <none>
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] server lang: <none>
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] kex follows: False
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] Compression: none
2025-12-12T21:33:05.221 [DEBUG] [Thread-77000] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:33:05.239 [DEBUG] [Thread-77000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:33:05.239 [DEBUG] [Thread-77000] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:33:05.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:33:05.240 [DEBUG] [Thread-77000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:33:05.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:33:05.242 [DEBUG] [Thread-77000] [transport.py] [_log()] userauth is OK
2025-12-12T21:33:05.242 [DEBUG] [Thread-77000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:33:05.242 [DEBUG] [Thread-77000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:33:05.242 [DEBUG] [Thread-77000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:33:05.242 [DEBUG] [Thread-77000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:33:05.261 [INFO] [Thread-77000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:33:05.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:33:05.901 [DEBUG] [Thread-77000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:33:05.901 [DEBUG] [Thread-77000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:33:05.901 [DEBUG] [Thread-77000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:33:05.941 [DEBUG] [Thread-77000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:33:05.941 [DEBUG] [Thread-77000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:33:05.943 [DEBUG] [Thread-77000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:33:05.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:33:05.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:33:05.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:33:05.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:33:05.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:33:05.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:33:05.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:33:05.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:33:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:33:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.814337 -999.00  +10.50  37.66     88   +8.60 1 3 2 3 1     0    0 0.84 -48.61 ----- 30.9 37.7 312.6 42.3 12.2 -2.8 12.1 -2.8 11.7 -2.2 12.0 -2.2
2025-12-12T21:33:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:33:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:33:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.814337
2025-12-12T21:33:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:33:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:33:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:33:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:33:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:33:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:32:53', tmtdew=2.09, humidity=86.85, cloud=0.0, wind=39.77, temperature=10.55, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:32:38.717', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:33:05.962 [DEBUG] [Thread-77000] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:33:06.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:33:06.046 [DEBUG] [Thread-77003] [transport.py] [_log()] starting thread (client mode): 0xf57f2980
2025-12-12T21:33:06.047 [DEBUG] [Thread-77003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:33:06.061 [DEBUG] [Thread-77003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:33:06.061 [INFO] [Thread-77003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:33:06.069 [DEBUG] [Thread-77003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] client lang: <none>
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] server lang: <none>
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] kex follows: False
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] Compression: none
2025-12-12T21:33:06.070 [DEBUG] [Thread-77003] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:33:06.127 [DEBUG] [Thread-77003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:33:06.128 [DEBUG] [Thread-77003] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:33:06.128 [DEBUG] [Thread-77003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:33:06.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:33:06.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:33:06.183 [DEBUG] [Thread-77003] [transport.py] [_log()] userauth is OK
2025-12-12T21:33:06.184 [DEBUG] [Thread-77003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:33:06.184 [DEBUG] [Thread-77003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:33:06.184 [DEBUG] [Thread-77003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:33:06.184 [DEBUG] [Thread-77003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:33:06.207 [INFO] [Thread-77003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:33:06.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:33:06.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:33:07.060 [DEBUG] [Thread-77003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:33:07.060 [DEBUG] [Thread-77003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:33:07.108 [DEBUG] [Thread-77003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:33:07.108 [DEBUG] [Thread-77003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:33:07.117 [DEBUG] [Thread-77003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:33:07.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:33:07.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:33:07.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:33:07.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:33:07.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:33:07.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:33:07.152 [DEBUG] [Thread-77003] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:33:09.618 [DEBUG] [Thread-77005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:11.916 [DEBUG] [Thread-77006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:24.667 [DEBUG] [Thread-77007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:26.283 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:26.284 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:37.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:33:37.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:33:37.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:33:37.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 33, 25), 2.07, 87.02, 0.0, 40.03, 10.54, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:33:37.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:33:25
2025-12-12T21:33:37.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:33:38.127 [DEBUG] [Thread-77008] [transport.py] [_log()] starting thread (client mode): 0xf57cae30
2025-12-12T21:33:38.127 [DEBUG] [Thread-77008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:33:38.147 [DEBUG] [Thread-77008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:33:38.147 [INFO] [Thread-77008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:33:38.150 [DEBUG] [Thread-77008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:33:38.150 [DEBUG] [Thread-77008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:33:38.150 [DEBUG] [Thread-77008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:33:38.150 [DEBUG] [Thread-77008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:33:38.150 [DEBUG] [Thread-77008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:33:38.150 [DEBUG] [Thread-77008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] client lang: <none>
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] server lang: <none>
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] kex follows: False
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] Compression: none
2025-12-12T21:33:38.151 [DEBUG] [Thread-77008] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:33:38.170 [DEBUG] [Thread-77008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:33:38.171 [DEBUG] [Thread-77008] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:33:38.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:33:38.172 [DEBUG] [Thread-77008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:33:38.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:33:38.174 [DEBUG] [Thread-77008] [transport.py] [_log()] userauth is OK
2025-12-12T21:33:38.174 [DEBUG] [Thread-77008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:33:38.174 [DEBUG] [Thread-77008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:33:38.174 [DEBUG] [Thread-77008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:33:38.174 [DEBUG] [Thread-77008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:33:38.209 [INFO] [Thread-77008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:33:38.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:33:38.801 [DEBUG] [Thread-77008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:33:38.801 [DEBUG] [Thread-77008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:33:38.802 [DEBUG] [Thread-77008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:33:38.843 [DEBUG] [Thread-77008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:33:38.843 [DEBUG] [Thread-77008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:33:38.846 [DEBUG] [Thread-77008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:33:38.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:33:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:33:38.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:33:38.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:33:38.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:33:38.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:33:38.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:33:38.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:33:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:33:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.814684 -999.00  +10.40  33.62     88   +8.60 1 3 2 3 1     0    0 1.04 -42.16 ----- 27.8 33.6 311.5 41.3 12.2 -2.5 12.0 -2.6 11.7 -2.2 12.0 -2.0
2025-12-12T21:33:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:33:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:33:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.814684
2025-12-12T21:33:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:33:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:33:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:33:38.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:33:38.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:33:38.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:33:25', tmtdew=2.07, humidity=87.02, cloud=0.0, wind=40.03, temperature=10.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:33:08.698', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:33:38.864 [DEBUG] [Thread-77008] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:33:38.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:33:39.694 [DEBUG] [Thread-77011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:33:54.744 [DEBUG] [Thread-77012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:09.769 [DEBUG] [Thread-77013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:11.990 [DEBUG] [Thread-77014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:24.797 [DEBUG] [Thread-77015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:26.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:26.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:39.826 [DEBUG] [Thread-77016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:34:54.853 [DEBUG] [Thread-77017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:09.884 [DEBUG] [Thread-77018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:12.059 [DEBUG] [Thread-77019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:24.913 [DEBUG] [Thread-77020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:26.692 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:26.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:39.944 [DEBUG] [Thread-77021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:35:51.274 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T21:35:54.974 [DEBUG] [Thread-77022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:10.000 [DEBUG] [Thread-77023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:12.134 [DEBUG] [Thread-77024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:21.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:36:21.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:36:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:36:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 36, 5), 1.92, 87.56, 0.0, 35.15, 10.5, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:36:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:36:05
2025-12-12T21:36:22.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:36:22.268 [DEBUG] [Thread-77025] [transport.py] [_log()] starting thread (client mode): 0xf57c9d20
2025-12-12T21:36:22.269 [DEBUG] [Thread-77025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:36:22.289 [DEBUG] [Thread-77025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:36:22.289 [INFO] [Thread-77025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:36:22.292 [DEBUG] [Thread-77025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:36:22.292 [DEBUG] [Thread-77025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] client lang: <none>
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] server lang: <none>
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] kex follows: False
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:36:22.293 [DEBUG] [Thread-77025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:36:22.294 [DEBUG] [Thread-77025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:36:22.294 [DEBUG] [Thread-77025] [transport.py] [_log()] Compression: none
2025-12-12T21:36:22.294 [DEBUG] [Thread-77025] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:36:22.311 [DEBUG] [Thread-77025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:36:22.311 [DEBUG] [Thread-77025] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:36:22.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:36:22.313 [DEBUG] [Thread-77025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:36:22.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:36:22.315 [DEBUG] [Thread-77025] [transport.py] [_log()] userauth is OK
2025-12-12T21:36:22.315 [DEBUG] [Thread-77025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:36:22.315 [DEBUG] [Thread-77025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:36:22.315 [DEBUG] [Thread-77025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:36:22.315 [DEBUG] [Thread-77025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:36:22.341 [INFO] [Thread-77025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:36:22.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:36:22.956 [DEBUG] [Thread-77025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:36:22.956 [DEBUG] [Thread-77025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:36:22.956 [DEBUG] [Thread-77025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:36:22.997 [DEBUG] [Thread-77025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:36:22.998 [DEBUG] [Thread-77025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:36:23.000 [DEBUG] [Thread-77025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:36:23.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:36:23.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:36:23.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:36:23.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:36:23.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:36:23.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:36:23.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:36:23.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:36:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:36:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.816420 -999.00  +10.50  31.19     88   +8.70 1 3 2 3 1     0    0 0.85 -44.23 ----- 26.2 31.2 329.2 33.2 12.2 -2.5 12.0 -2.4 11.8 -2.1 12.0 -2.0
2025-12-12T21:36:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:36:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:36:23.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.816420
2025-12-12T21:36:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:36:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:36:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:36:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:36:23.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:36:23.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:36:05', tmtdew=1.92, humidity=87.56, cloud=0.0, wind=35.15, temperature=10.5, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:35:38.688', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:36:23.023 [DEBUG] [Thread-77025] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:36:23.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:36:23.116 [DEBUG] [Thread-77028] [transport.py] [_log()] starting thread (client mode): 0xf57c91e0
2025-12-12T21:36:23.116 [DEBUG] [Thread-77028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:36:23.131 [DEBUG] [Thread-77028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:36:23.131 [INFO] [Thread-77028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:36:23.138 [DEBUG] [Thread-77028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:36:23.139 [DEBUG] [Thread-77028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:36:23.139 [DEBUG] [Thread-77028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:36:23.139 [DEBUG] [Thread-77028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:23.139 [DEBUG] [Thread-77028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:23.139 [DEBUG] [Thread-77028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:23.139 [DEBUG] [Thread-77028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] client lang: <none>
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] server lang: <none>
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] kex follows: False
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:36:23.140 [DEBUG] [Thread-77028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:36:23.141 [DEBUG] [Thread-77028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:36:23.141 [DEBUG] [Thread-77028] [transport.py] [_log()] Compression: none
2025-12-12T21:36:23.141 [DEBUG] [Thread-77028] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:36:23.195 [DEBUG] [Thread-77028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:36:23.195 [DEBUG] [Thread-77028] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:36:23.196 [DEBUG] [Thread-77028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:36:23.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:36:23.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:36:23.252 [DEBUG] [Thread-77028] [transport.py] [_log()] userauth is OK
2025-12-12T21:36:23.252 [DEBUG] [Thread-77028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:36:23.252 [DEBUG] [Thread-77028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:36:23.252 [DEBUG] [Thread-77028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:36:23.252 [DEBUG] [Thread-77028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:36:23.271 [INFO] [Thread-77028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:36:23.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:36:23.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:36:24.089 [DEBUG] [Thread-77028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:36:24.089 [DEBUG] [Thread-77028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:36:24.137 [DEBUG] [Thread-77028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:36:24.137 [DEBUG] [Thread-77028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:36:24.146 [DEBUG] [Thread-77028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:36:24.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:36:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:36:24.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:36:24.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:36:24.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:36:24.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:36:24.180 [DEBUG] [Thread-77028] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:36:25.027 [DEBUG] [Thread-77030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:26.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:26.899 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:40.075 [DEBUG] [Thread-77031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:36:54.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:36:54.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:36:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 36, 37), 1.87, 88.05, 0.0, 37.23, 10.44, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:36:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:36:37
2025-12-12T21:36:55.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:36:55.104 [DEBUG] [Thread-77032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:36:55.182 [DEBUG] [Thread-77033] [transport.py] [_log()] starting thread (client mode): 0xf57cbac0
2025-12-12T21:36:55.182 [DEBUG] [Thread-77033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:36:55.201 [DEBUG] [Thread-77033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:36:55.201 [INFO] [Thread-77033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] client lang: <none>
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] server lang: <none>
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] kex follows: False
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] Compression: none
2025-12-12T21:36:55.205 [DEBUG] [Thread-77033] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:36:55.223 [DEBUG] [Thread-77033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:36:55.224 [DEBUG] [Thread-77033] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:36:55.224 [DEBUG] [Thread-77033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:36:55.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:36:55.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:36:55.226 [DEBUG] [Thread-77033] [transport.py] [_log()] userauth is OK
2025-12-12T21:36:55.226 [DEBUG] [Thread-77033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:36:55.226 [DEBUG] [Thread-77033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:36:55.226 [DEBUG] [Thread-77033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:36:55.227 [DEBUG] [Thread-77033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:36:55.250 [INFO] [Thread-77033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:36:55.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:36:55.889 [DEBUG] [Thread-77033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:36:55.889 [DEBUG] [Thread-77033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:36:55.890 [DEBUG] [Thread-77033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:36:55.931 [DEBUG] [Thread-77033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:36:55.931 [DEBUG] [Thread-77033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:36:55.934 [DEBUG] [Thread-77033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:36:55.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:36:55.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:36:55.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:36:55.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:36:55.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:36:55.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:36:55.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:36:55.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:36:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:36:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.816767 -999.00  +10.60  31.08     88   +8.80 1 3 2 3 1     0    0 0.86 -44.26 ----- 32.7 31.1 311.6 32.9 12.2 -2.5 12.1 -2.5 11.8 -2.8 12.1 -2.2
2025-12-12T21:36:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:36:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:36:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.816767
2025-12-12T21:36:55.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:36:55.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:36:55.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:36:55.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:36:55.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:36:55.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:36:37', tmtdew=1.87, humidity=88.05, cloud=0.0, wind=37.23, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:36:08.669', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:36:55.960 [DEBUG] [Thread-77033] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:36:56.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:36:56.055 [DEBUG] [Thread-77036] [transport.py] [_log()] starting thread (client mode): 0xf57c90c0
2025-12-12T21:36:56.055 [DEBUG] [Thread-77036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:36:56.073 [DEBUG] [Thread-77036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:36:56.073 [INFO] [Thread-77036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] client lang: <none>
2025-12-12T21:36:56.081 [DEBUG] [Thread-77036] [transport.py] [_log()] server lang: <none>
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] kex follows: False
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] Compression: none
2025-12-12T21:36:56.082 [DEBUG] [Thread-77036] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:36:56.139 [DEBUG] [Thread-77036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:36:56.140 [DEBUG] [Thread-77036] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:36:56.140 [DEBUG] [Thread-77036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:36:56.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:36:56.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:36:56.195 [DEBUG] [Thread-77036] [transport.py] [_log()] userauth is OK
2025-12-12T21:36:56.196 [DEBUG] [Thread-77036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:36:56.196 [DEBUG] [Thread-77036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:36:56.196 [DEBUG] [Thread-77036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:36:56.196 [DEBUG] [Thread-77036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:36:56.214 [INFO] [Thread-77036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:36:56.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:36:56.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:36:57.034 [DEBUG] [Thread-77036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:36:57.034 [DEBUG] [Thread-77036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:36:57.082 [DEBUG] [Thread-77036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:36:57.082 [DEBUG] [Thread-77036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:36:57.091 [DEBUG] [Thread-77036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:36:57.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:36:57.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:36:57.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:36:57.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:36:57.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:36:57.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:36:57.125 [DEBUG] [Thread-77036] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:37:10.132 [DEBUG] [Thread-77038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:37:12.226 [DEBUG] [Thread-77039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:37:25.166 [DEBUG] [Thread-77040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:37:27.105 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:37:27.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:37:27.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:37:27.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:37:27.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:37:27.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 37, 9), 1.87, 88.1, 0.0, 38.09, 10.44, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:37:27.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:37:09
2025-12-12T21:37:28.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:37:28.151 [DEBUG] [Thread-77041] [transport.py] [_log()] starting thread (client mode): 0xf57f1ff0
2025-12-12T21:37:28.151 [DEBUG] [Thread-77041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:37:28.173 [DEBUG] [Thread-77041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:37:28.173 [INFO] [Thread-77041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:37:28.176 [DEBUG] [Thread-77041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:37:28.176 [DEBUG] [Thread-77041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:37:28.176 [DEBUG] [Thread-77041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:37:28.176 [DEBUG] [Thread-77041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:37:28.176 [DEBUG] [Thread-77041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] client lang: <none>
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] server lang: <none>
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] kex follows: False
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] Compression: none
2025-12-12T21:37:28.177 [DEBUG] [Thread-77041] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:37:28.192 [DEBUG] [Thread-77041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:37:28.192 [DEBUG] [Thread-77041] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:37:28.192 [DEBUG] [Thread-77041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:37:28.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:37:28.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:37:28.193 [DEBUG] [Thread-77041] [transport.py] [_log()] userauth is OK
2025-12-12T21:37:28.193 [DEBUG] [Thread-77041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:37:28.193 [DEBUG] [Thread-77041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:37:28.193 [DEBUG] [Thread-77041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:37:28.193 [DEBUG] [Thread-77041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:37:28.212 [INFO] [Thread-77041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:37:28.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:37:28.850 [DEBUG] [Thread-77041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:37:28.850 [DEBUG] [Thread-77041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:37:28.850 [DEBUG] [Thread-77041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:37:28.892 [DEBUG] [Thread-77041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:37:28.892 [DEBUG] [Thread-77041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:37:28.894 [DEBUG] [Thread-77041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:37:28.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:37:28.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:37:28.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:37:28.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:37:28.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:37:28.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:37:28.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.817114 -999.00  +10.60  32.85     88   +8.80 1 3 2 3 1     0    0 0.81 -45.51 ----- 29.4 32.9 327.6 38.0 12.2 -2.3 12.1 -2.3 11.8 -2.3 12.1 -1.9
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.817114
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:37:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:37:09', tmtdew=1.87, humidity=88.1, cloud=0.0, wind=38.09, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:36:38.650', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:37:28.914 [DEBUG] [Thread-77041] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:37:28.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:37:28.998 [DEBUG] [Thread-77044] [transport.py] [_log()] starting thread (client mode): 0xf57f0490
2025-12-12T21:37:28.998 [DEBUG] [Thread-77044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:37:29.013 [DEBUG] [Thread-77044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:37:29.013 [INFO] [Thread-77044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:37:29.020 [DEBUG] [Thread-77044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:37:29.020 [DEBUG] [Thread-77044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:37:29.020 [DEBUG] [Thread-77044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] client lang: <none>
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] server lang: <none>
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] kex follows: False
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] Compression: none
2025-12-12T21:37:29.021 [DEBUG] [Thread-77044] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:37:29.077 [DEBUG] [Thread-77044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:37:29.078 [DEBUG] [Thread-77044] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:37:29.078 [DEBUG] [Thread-77044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:37:29.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:37:29.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:37:29.135 [DEBUG] [Thread-77044] [transport.py] [_log()] userauth is OK
2025-12-12T21:37:29.135 [DEBUG] [Thread-77044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:37:29.135 [DEBUG] [Thread-77044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:37:29.135 [DEBUG] [Thread-77044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:37:29.135 [DEBUG] [Thread-77044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:37:29.149 [INFO] [Thread-77044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:37:29.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:37:29.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:37:29.968 [DEBUG] [Thread-77044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:37:29.968 [DEBUG] [Thread-77044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:37:30.016 [DEBUG] [Thread-77044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:37:30.016 [DEBUG] [Thread-77044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:37:30.025 [DEBUG] [Thread-77044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:37:30.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:37: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')
2025-12-12T21:37:30.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:37:30.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:37:30.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:37:30.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:37:30.061 [DEBUG] [Thread-77044] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:37:40.192 [DEBUG] [Thread-77046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:37:55.234 [DEBUG] [Thread-77047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:38:00.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:38:00.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:38:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 37, 41), 1.91, 88.11, 0.0, 34.12, 10.54, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:38:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:37:41
2025-12-12T21:38:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:38:01.054 [DEBUG] [Thread-77048] [transport.py] [_log()] starting thread (client mode): 0xf57f08e0
2025-12-12T21:38:01.054 [DEBUG] [Thread-77048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:38:01.075 [DEBUG] [Thread-77048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:38:01.075 [INFO] [Thread-77048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:01.078 [DEBUG] [Thread-77048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] client lang: <none>
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] server lang: <none>
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] kex follows: False
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] Compression: none
2025-12-12T21:38:01.079 [DEBUG] [Thread-77048] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:38:01.096 [DEBUG] [Thread-77048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:38:01.096 [DEBUG] [Thread-77048] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:38:01.097 [DEBUG] [Thread-77048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:38:01.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:38:01.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:38:01.099 [DEBUG] [Thread-77048] [transport.py] [_log()] userauth is OK
2025-12-12T21:38:01.099 [DEBUG] [Thread-77048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:38:01.099 [DEBUG] [Thread-77048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:38:01.099 [DEBUG] [Thread-77048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:38:01.099 [DEBUG] [Thread-77048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:38:01.113 [INFO] [Thread-77048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:38:01.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:38:01.716 [DEBUG] [Thread-77048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:38:01.716 [DEBUG] [Thread-77048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:38:01.716 [DEBUG] [Thread-77048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:38:01.757 [DEBUG] [Thread-77048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:38:01.757 [DEBUG] [Thread-77048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:38:01.760 [DEBUG] [Thread-77048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:38:01.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:38:01.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:38:01.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:38:01.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:38:01.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:38:01.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:38:01.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:38:01.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:38:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:38:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.817461 -999.00  +10.70  28.32     88   +8.90 1 3 1 3 1     0    0 0.69 -49.22 ----- 27.3 28.3 325.8 33.9 12.3 -2.6 12.1 -2.5 11.8 -2.1 12.1 -2.1
2025-12-12T21:38:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:38:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:38:01.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.817461
2025-12-12T21:38:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:38:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:38:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:38:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:38:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:38:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:37:41', tmtdew=1.91, humidity=88.11, cloud=0.0, wind=34.12, temperature=10.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:37:08.630', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:38:01.779 [DEBUG] [Thread-77048] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:38:01.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:38:01.872 [DEBUG] [Thread-77051] [transport.py] [_log()] starting thread (client mode): 0xf57c90c0
2025-12-12T21:38:01.872 [DEBUG] [Thread-77051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:38:01.887 [DEBUG] [Thread-77051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:38:01.887 [INFO] [Thread-77051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:38:01.894 [DEBUG] [Thread-77051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:38:01.894 [DEBUG] [Thread-77051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:38:01.894 [DEBUG] [Thread-77051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:38:01.894 [DEBUG] [Thread-77051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] client lang: <none>
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] server lang: <none>
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] kex follows: False
2025-12-12T21:38:01.895 [DEBUG] [Thread-77051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:38:01.896 [DEBUG] [Thread-77051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:38:01.896 [DEBUG] [Thread-77051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:38:01.896 [DEBUG] [Thread-77051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:38:01.896 [DEBUG] [Thread-77051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:38:01.896 [DEBUG] [Thread-77051] [transport.py] [_log()] Compression: none
2025-12-12T21:38:01.896 [DEBUG] [Thread-77051] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:38:01.952 [DEBUG] [Thread-77051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:38:01.952 [DEBUG] [Thread-77051] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:38:01.953 [DEBUG] [Thread-77051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:38:01.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:38:01.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:38:02.007 [DEBUG] [Thread-77051] [transport.py] [_log()] userauth is OK
2025-12-12T21:38:02.007 [DEBUG] [Thread-77051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:38:02.008 [DEBUG] [Thread-77051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:38:02.008 [DEBUG] [Thread-77051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:38:02.008 [DEBUG] [Thread-77051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:38:02.026 [INFO] [Thread-77051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:38:02.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:38:02.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:38:02.864 [DEBUG] [Thread-77051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:38:02.864 [DEBUG] [Thread-77051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:38:02.915 [DEBUG] [Thread-77051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:38:02.915 [DEBUG] [Thread-77051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:38:02.923 [DEBUG] [Thread-77051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:38:02.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:38:02.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:38:02.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
2025-12-12T21:38:02.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:38:02.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:38:02.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:38:02.954 [DEBUG] [Thread-77051] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:38:10.262 [DEBUG] [Thread-77053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:12.312 [DEBUG] [Thread-77054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:25.304 [DEBUG] [Thread-77055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:27.313 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:27.315 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:32.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:38:32.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:38:32.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:38:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 38, 13), 1.91, 88.11, 0.0, 34.46, 10.54, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:38:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:38:13
2025-12-12T21:38:33.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:38:33.967 [DEBUG] [Thread-77056] [transport.py] [_log()] starting thread (client mode): 0xf57ca290
2025-12-12T21:38:33.967 [DEBUG] [Thread-77056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:38:33.986 [DEBUG] [Thread-77056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:38:33.986 [INFO] [Thread-77056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:38:33.989 [DEBUG] [Thread-77056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:38:33.989 [DEBUG] [Thread-77056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:38:33.989 [DEBUG] [Thread-77056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:38:33.989 [DEBUG] [Thread-77056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:33.989 [DEBUG] [Thread-77056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] client lang: <none>
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] server lang: <none>
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] kex follows: False
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] Compression: none
2025-12-12T21:38:33.990 [DEBUG] [Thread-77056] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:38:34.010 [DEBUG] [Thread-77056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:38:34.010 [DEBUG] [Thread-77056] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:38:34.011 [DEBUG] [Thread-77056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:38:34.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:38:34.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:38:34.013 [DEBUG] [Thread-77056] [transport.py] [_log()] userauth is OK
2025-12-12T21:38:34.013 [DEBUG] [Thread-77056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:38:34.013 [DEBUG] [Thread-77056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:38:34.013 [DEBUG] [Thread-77056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:38:34.013 [DEBUG] [Thread-77056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:38:34.034 [INFO] [Thread-77056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:38:34.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:38:34.673 [DEBUG] [Thread-77056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:38:34.674 [DEBUG] [Thread-77056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:38:34.674 [DEBUG] [Thread-77056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:38:34.715 [DEBUG] [Thread-77056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:38:34.715 [DEBUG] [Thread-77056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:38:34.718 [DEBUG] [Thread-77056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:38:34.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:38:34.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:38:34.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:38:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:38:34.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:38:34.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:38:34.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:38:34.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:38:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:38:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.817809 -999.00  +10.80  35.09     88   +8.90 1 3 2 3 1     0    0 0.72 -46.35 ----- 31.3 35.1 329.6 41.8 12.3 -2.4 12.2 -2.4 11.8 -2.2 12.1 -2.1
2025-12-12T21:38:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:38:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:38:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.817809
2025-12-12T21:38:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:38:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:38:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:38:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:38:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:38:34.742 [DEBUG] [Thread-77056] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:38:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:38:13', tmtdew=1.91, humidity=88.11, cloud=0.0, wind=34.46, temperature=10.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:37:38.698', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:38:34.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:38:34.839 [DEBUG] [Thread-77059] [transport.py] [_log()] starting thread (client mode): 0xf57c8be0
2025-12-12T21:38:34.840 [DEBUG] [Thread-77059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:38:34.855 [DEBUG] [Thread-77059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:38:34.855 [INFO] [Thread-77059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:38:34.862 [DEBUG] [Thread-77059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:38:34.862 [DEBUG] [Thread-77059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] client lang: <none>
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] server lang: <none>
2025-12-12T21:38:34.863 [DEBUG] [Thread-77059] [transport.py] [_log()] kex follows: False
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] Compression: none
2025-12-12T21:38:34.864 [DEBUG] [Thread-77059] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:38:34.919 [DEBUG] [Thread-77059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:38:34.920 [DEBUG] [Thread-77059] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:38:34.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:38:34.920 [DEBUG] [Thread-77059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:38:34.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:38:34.975 [DEBUG] [Thread-77059] [transport.py] [_log()] userauth is OK
2025-12-12T21:38:34.976 [DEBUG] [Thread-77059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:38:34.976 [DEBUG] [Thread-77059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:38:34.976 [DEBUG] [Thread-77059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:38:34.976 [DEBUG] [Thread-77059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:38:34.995 [INFO] [Thread-77059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:38:34.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:38:34.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:38:35.868 [DEBUG] [Thread-77059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:38:35.869 [DEBUG] [Thread-77059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:38:35.918 [DEBUG] [Thread-77059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:38:35.918 [DEBUG] [Thread-77059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:38:35.929 [DEBUG] [Thread-77059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:38:35.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:38:35.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:38:35.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:38:35.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:38:35.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:38:35.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:38:35.969 [DEBUG] [Thread-77059] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:38:40.333 [DEBUG] [Thread-77061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:38:55.375 [DEBUG] [Thread-77062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:05.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:39:05.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:39:05.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:39:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 38, 45), 1.85, 88.18, 0.0, 33.82, 10.55, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:39:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:38:45
2025-12-12T21:39:06.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:39:06.948 [DEBUG] [Thread-77063] [transport.py] [_log()] starting thread (client mode): 0xf57c9270
2025-12-12T21:39:06.948 [DEBUG] [Thread-77063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:39:06.967 [DEBUG] [Thread-77063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:39:06.967 [INFO] [Thread-77063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] client lang: <none>
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] server lang: <none>
2025-12-12T21:39:06.969 [DEBUG] [Thread-77063] [transport.py] [_log()] kex follows: False
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] Compression: none
2025-12-12T21:39:06.970 [DEBUG] [Thread-77063] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:39:06.987 [DEBUG] [Thread-77063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:39:06.988 [DEBUG] [Thread-77063] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:39:06.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:39:06.989 [DEBUG] [Thread-77063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:39:06.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:39:06.990 [DEBUG] [Thread-77063] [transport.py] [_log()] userauth is OK
2025-12-12T21:39:06.990 [DEBUG] [Thread-77063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:39:06.990 [DEBUG] [Thread-77063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:39:06.990 [DEBUG] [Thread-77063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:39:06.990 [DEBUG] [Thread-77063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:39:07.011 [INFO] [Thread-77063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:39:07.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:39:07.652 [DEBUG] [Thread-77063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:39:07.652 [DEBUG] [Thread-77063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:39:07.652 [DEBUG] [Thread-77063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:39:07.693 [DEBUG] [Thread-77063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:39:07.693 [DEBUG] [Thread-77063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:39:07.696 [DEBUG] [Thread-77063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:39:07.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:39:07.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:39:07.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:39:07.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:39:07.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:39:07.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:39:07.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:39:07.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:39:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:39:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.818503 -999.00  +10.60  35.96     88   +8.80 1 3 2 3 1     0    0 0.71 -48.07 ----- 36.5 36.0 310.2 52.1 12.3 -2.5 12.1 -2.9 11.8 -2.5 12.1 -2.2
2025-12-12T21:39:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:39:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:39:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.818503
2025-12-12T21:39:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:39:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:39:07.723 [DEBUG] [Thread-77063] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:39:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:39:07.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:39:07.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:39:07.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:38:45', tmtdew=1.85, humidity=88.18, cloud=0.0, wind=33.82, temperature=10.55, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:38:38.659', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:39:07.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:39:07.817 [DEBUG] [Thread-77066] [transport.py] [_log()] starting thread (client mode): 0xf5773040
2025-12-12T21:39:07.817 [DEBUG] [Thread-77066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:39:07.832 [DEBUG] [Thread-77066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:39:07.832 [INFO] [Thread-77066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:07.840 [DEBUG] [Thread-77066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] client lang: <none>
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] server lang: <none>
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] kex follows: False
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:39:07.841 [DEBUG] [Thread-77066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:39:07.842 [DEBUG] [Thread-77066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:39:07.842 [DEBUG] [Thread-77066] [transport.py] [_log()] Compression: none
2025-12-12T21:39:07.842 [DEBUG] [Thread-77066] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:39:07.904 [DEBUG] [Thread-77066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:39:07.904 [DEBUG] [Thread-77066] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:39:07.905 [DEBUG] [Thread-77066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:39:07.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:39:07.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:39:07.960 [DEBUG] [Thread-77066] [transport.py] [_log()] userauth is OK
2025-12-12T21:39:07.960 [DEBUG] [Thread-77066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:39:07.960 [DEBUG] [Thread-77066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:39:07.960 [DEBUG] [Thread-77066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:39:07.960 [DEBUG] [Thread-77066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:39:07.979 [INFO] [Thread-77066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:39:07.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:39:07.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:39:08.825 [DEBUG] [Thread-77066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:39:08.825 [DEBUG] [Thread-77066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:39:08.873 [DEBUG] [Thread-77066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:39:08.873 [DEBUG] [Thread-77066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:39:08.882 [DEBUG] [Thread-77066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:39:08.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:39:08.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:39:08.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:39:08.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:39:08.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:39:08.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:39:08.916 [DEBUG] [Thread-77066] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:39:10.402 [DEBUG] [Thread-77068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:12.387 [DEBUG] [Thread-77069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:25.442 [DEBUG] [Thread-77070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:27.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:27.523 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:39:38.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:39:38.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:39:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 39, 17), 1.85, 88.21, 0.0, 34.48, 10.6, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:39:39.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:39:17
2025-12-12T21:39:39.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:39:39.906 [DEBUG] [Thread-77071] [transport.py] [_log()] starting thread (client mode): 0xf57cb040
2025-12-12T21:39:39.906 [DEBUG] [Thread-77071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:39:39.927 [DEBUG] [Thread-77071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:39:39.927 [INFO] [Thread-77071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:39:39.930 [DEBUG] [Thread-77071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] client lang: <none>
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] server lang: <none>
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] kex follows: False
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] Compression: none
2025-12-12T21:39:39.931 [DEBUG] [Thread-77071] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:39:39.949 [DEBUG] [Thread-77071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:39:39.949 [DEBUG] [Thread-77071] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:39:39.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:39:39.951 [DEBUG] [Thread-77071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:39:39.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:39:39.953 [DEBUG] [Thread-77071] [transport.py] [_log()] userauth is OK
2025-12-12T21:39:39.953 [DEBUG] [Thread-77071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:39:39.953 [DEBUG] [Thread-77071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:39:39.954 [DEBUG] [Thread-77071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:39:39.954 [DEBUG] [Thread-77071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:39:39.979 [INFO] [Thread-77071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:39:39.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:39:40.469 [DEBUG] [Thread-77073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:39:40.609 [DEBUG] [Thread-77071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:39:40.609 [DEBUG] [Thread-77071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:39:40.609 [DEBUG] [Thread-77071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:39:40.650 [DEBUG] [Thread-77071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:39:40.650 [DEBUG] [Thread-77071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:39:40.653 [DEBUG] [Thread-77071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:39:40.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:39:40.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:39:40.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:39:40.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:39:40.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:39:40.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:39:40.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:39:40.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:39:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:39:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.818850 -999.00  +10.50  45.35     88   +8.70 1 3 2 3 1     0    0 0.72 -45.37 ----- 44.0 45.4 312.4 52.7 12.2 -3.4 12.1 -4.1 11.8 -3.1 12.1 -2.7
2025-12-12T21:39:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:39:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:39:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.818850
2025-12-12T21:39:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:39:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:39:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:39:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:39:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:39:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:39:17', tmtdew=1.85, humidity=88.21, cloud=0.0, wind=34.48, temperature=10.6, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:39:08.640', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:39:40.678 [DEBUG] [Thread-77071] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:39:40.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:39:40.787 [DEBUG] [Thread-77075] [transport.py] [_log()] starting thread (client mode): 0xf57c9a50
2025-12-12T21:39:40.787 [DEBUG] [Thread-77075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:39:40.802 [DEBUG] [Thread-77075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:39:40.802 [INFO] [Thread-77075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:39:40.809 [DEBUG] [Thread-77075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:39:40.810 [DEBUG] [Thread-77075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] client lang: <none>
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] server lang: <none>
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] kex follows: False
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] Compression: none
2025-12-12T21:39:40.811 [DEBUG] [Thread-77075] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:39:40.869 [DEBUG] [Thread-77075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:39:40.870 [DEBUG] [Thread-77075] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:39:40.870 [DEBUG] [Thread-77075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:39:40.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:39:40.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:39:40.925 [DEBUG] [Thread-77075] [transport.py] [_log()] userauth is OK
2025-12-12T21:39:40.925 [DEBUG] [Thread-77075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:39:40.925 [DEBUG] [Thread-77075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:39:40.925 [DEBUG] [Thread-77075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:39:40.925 [DEBUG] [Thread-77075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:39:40.940 [INFO] [Thread-77075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:39:40.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:39:40.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:39:41.747 [DEBUG] [Thread-77075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:39:41.747 [DEBUG] [Thread-77075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:39:41.795 [DEBUG] [Thread-77075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:39:41.795 [DEBUG] [Thread-77075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:39:41.804 [DEBUG] [Thread-77075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:39:41.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:39:41.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:39:41.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:39:41.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:39:41.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:39:41.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:39:41.839 [DEBUG] [Thread-77075] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:39:55.499 [DEBUG] [Thread-77077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:10.542 [DEBUG] [Thread-77078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:11.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:40:11.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:40:11.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:40:12.462 [DEBUG] [Thread-77079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:12.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 39, 49), 1.86, 88.15, 0.0, 38.64, 10.55, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:40:12.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:39:49
2025-12-12T21:40:12.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:40:12.822 [DEBUG] [Thread-77080] [transport.py] [_log()] starting thread (client mode): 0xf57c8be0
2025-12-12T21:40:12.822 [DEBUG] [Thread-77080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:40:12.841 [DEBUG] [Thread-77080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:40:12.841 [INFO] [Thread-77080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] client lang: <none>
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] server lang: <none>
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] kex follows: False
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] Compression: none
2025-12-12T21:40:12.845 [DEBUG] [Thread-77080] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:40:12.862 [DEBUG] [Thread-77080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:40:12.863 [DEBUG] [Thread-77080] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:40:12.863 [DEBUG] [Thread-77080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:40:12.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:40:12.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:40:12.865 [DEBUG] [Thread-77080] [transport.py] [_log()] userauth is OK
2025-12-12T21:40:12.866 [DEBUG] [Thread-77080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:40:12.866 [DEBUG] [Thread-77080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:40:12.866 [DEBUG] [Thread-77080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:40:12.866 [DEBUG] [Thread-77080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:40:12.890 [INFO] [Thread-77080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:40:12.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:40:13.707 [DEBUG] [Thread-77080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:40:13.707 [DEBUG] [Thread-77080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:40:13.708 [DEBUG] [Thread-77080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:40:13.749 [DEBUG] [Thread-77080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:40:13.749 [DEBUG] [Thread-77080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:40:13.752 [DEBUG] [Thread-77080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:40:13.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:40:13.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:40:13.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:40:13.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:40:13.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:40:13.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:40:13.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:40:13.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.819198 -999.00  +10.40  43.12     89   +8.70 1 3 2 3 1     0    0 0.60 -48.75 ----- 39.4 43.1 314.6 57.5 12.2 -3.1 12.1 -2.9 11.7 -3.2 12.1 -2.6
2025-12-12T21:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.819198
2025-12-12T21:40:13.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:40:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:40:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:40:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:40:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:40:13.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:39:49', tmtdew=1.86, humidity=88.15, cloud=0.0, wind=38.64, temperature=10.55, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:39:38.707', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:40:13.785 [DEBUG] [Thread-77080] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:40:13.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:40:13.881 [DEBUG] [Thread-77083] [transport.py] [_log()] starting thread (client mode): 0xf57cbac0
2025-12-12T21:40:13.881 [DEBUG] [Thread-77083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:40:13.898 [DEBUG] [Thread-77083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:40:13.898 [INFO] [Thread-77083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] client lang: <none>
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] server lang: <none>
2025-12-12T21:40:13.906 [DEBUG] [Thread-77083] [transport.py] [_log()] kex follows: False
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] Compression: none
2025-12-12T21:40:13.907 [DEBUG] [Thread-77083] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:40:13.963 [DEBUG] [Thread-77083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:40:13.964 [DEBUG] [Thread-77083] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:40:13.964 [DEBUG] [Thread-77083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:40:13.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:40:13.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:40:14.019 [DEBUG] [Thread-77083] [transport.py] [_log()] userauth is OK
2025-12-12T21:40:14.019 [DEBUG] [Thread-77083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:40:14.020 [DEBUG] [Thread-77083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:40:14.020 [DEBUG] [Thread-77083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:40:14.020 [DEBUG] [Thread-77083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:40:14.038 [INFO] [Thread-77083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:40:14.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:40:14.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:40:14.941 [DEBUG] [Thread-77083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:40:14.941 [DEBUG] [Thread-77083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:40:14.988 [DEBUG] [Thread-77083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:40:14.988 [DEBUG] [Thread-77083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:40:14.997 [DEBUG] [Thread-77083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:40:15.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:40:15.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:40:15.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:40:15.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:40:15.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:40:15.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:40:15.029 [DEBUG] [Thread-77083] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:40:25.572 [DEBUG] [Thread-77085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:27.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:27.728 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:40.614 [DEBUG] [Thread-77086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:40:45.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:40:45.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:40:45.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:40:45.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 40, 21), 1.86, 88.15, 0.0, 37.7, 10.6, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:40:45.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:40:21
2025-12-12T21:40:45.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:40:46.026 [DEBUG] [Thread-77087] [transport.py] [_log()] starting thread (client mode): 0xf5772170
2025-12-12T21:40:46.026 [DEBUG] [Thread-77087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:40:46.047 [DEBUG] [Thread-77087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:40:46.047 [INFO] [Thread-77087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] client lang: <none>
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] server lang: <none>
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] kex follows: False
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] Compression: none
2025-12-12T21:40:46.050 [DEBUG] [Thread-77087] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:40:46.065 [DEBUG] [Thread-77087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:40:46.065 [DEBUG] [Thread-77087] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:40:46.066 [DEBUG] [Thread-77087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:40:46.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:40:46.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:40:46.067 [DEBUG] [Thread-77087] [transport.py] [_log()] userauth is OK
2025-12-12T21:40:46.068 [DEBUG] [Thread-77087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:40:46.068 [DEBUG] [Thread-77087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:40:46.068 [DEBUG] [Thread-77087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:40:46.068 [DEBUG] [Thread-77087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:40:46.092 [INFO] [Thread-77087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:40:46.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:40:46.705 [DEBUG] [Thread-77087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:40:46.706 [DEBUG] [Thread-77087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:40:46.706 [DEBUG] [Thread-77087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:40:46.747 [DEBUG] [Thread-77087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:40:46.747 [DEBUG] [Thread-77087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:40:46.750 [DEBUG] [Thread-77087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:40:46.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:40:46.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:40:46.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:40:46.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:40:46.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:40:46.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:40:46.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:40:46.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:40:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:40:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.819544 -999.00  +10.40  47.33     89   +8.70 1 3 2 3 1     0    0 0.63 -47.24 ----- 47.7 47.3 315.4 51.9 12.2 -2.7 12.0 -2.9 11.7 -2.9 12.0 -2.1
2025-12-12T21:40:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:40:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:40:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.819544
2025-12-12T21:40:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:40:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:40:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:40:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:40:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:40:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:40:21', tmtdew=1.86, humidity=88.15, cloud=0.0, wind=37.7, temperature=10.6, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:40:08.602', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:40:46.776 [DEBUG] [Thread-77087] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:40:46.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:40:46.876 [DEBUG] [Thread-77090] [transport.py] [_log()] starting thread (client mode): 0xf5773430
2025-12-12T21:40:46.876 [DEBUG] [Thread-77090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:40:46.891 [DEBUG] [Thread-77090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:40:46.891 [INFO] [Thread-77090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:40:46.899 [DEBUG] [Thread-77090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:40:46.899 [DEBUG] [Thread-77090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:40:46.899 [DEBUG] [Thread-77090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:40:46.899 [DEBUG] [Thread-77090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:46.899 [DEBUG] [Thread-77090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] client lang: <none>
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] server lang: <none>
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] kex follows: False
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] Compression: none
2025-12-12T21:40:46.900 [DEBUG] [Thread-77090] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:40:46.957 [DEBUG] [Thread-77090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:40:46.958 [DEBUG] [Thread-77090] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:40:46.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:40:46.959 [DEBUG] [Thread-77090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:40:46.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:40:47.013 [DEBUG] [Thread-77090] [transport.py] [_log()] userauth is OK
2025-12-12T21:40:47.014 [DEBUG] [Thread-77090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:40:47.014 [DEBUG] [Thread-77090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:40:47.014 [DEBUG] [Thread-77090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:40:47.014 [DEBUG] [Thread-77090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:40:47.033 [INFO] [Thread-77090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:40:47.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:40:47.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:40:47.920 [DEBUG] [Thread-77090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:40:47.921 [DEBUG] [Thread-77090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:40:47.969 [DEBUG] [Thread-77090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:40:47.969 [DEBUG] [Thread-77090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:40:47.978 [DEBUG] [Thread-77090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:40:47.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:40: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')
2025-12-12T21:40:47.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:40:48.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:40:48.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:40:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:40:48.012 [DEBUG] [Thread-77090] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:40:55.637 [DEBUG] [Thread-77092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:10.674 [DEBUG] [Thread-77093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:12.539 [DEBUG] [Thread-77094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:41:18.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:41:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:41:18.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 40, 53), 1.87, 88.07, 0.0, 39.4, 10.62, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:41:18.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:40:53
2025-12-12T21:41:18.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:41:19.048 [DEBUG] [Thread-77095] [transport.py] [_log()] starting thread (client mode): 0xf5773670
2025-12-12T21:41:19.048 [DEBUG] [Thread-77095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:41:19.069 [DEBUG] [Thread-77095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:41:19.069 [INFO] [Thread-77095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] client lang: <none>
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] server lang: <none>
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] kex follows: False
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:41:19.072 [DEBUG] [Thread-77095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:41:19.073 [DEBUG] [Thread-77095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:41:19.073 [DEBUG] [Thread-77095] [transport.py] [_log()] Compression: none
2025-12-12T21:41:19.073 [DEBUG] [Thread-77095] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:41:19.087 [DEBUG] [Thread-77095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:41:19.087 [DEBUG] [Thread-77095] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:41:19.087 [DEBUG] [Thread-77095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:41:19.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:41:19.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:41:19.088 [DEBUG] [Thread-77095] [transport.py] [_log()] userauth is OK
2025-12-12T21:41:19.088 [DEBUG] [Thread-77095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:41:19.088 [DEBUG] [Thread-77095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:41:19.088 [DEBUG] [Thread-77095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:41:19.088 [DEBUG] [Thread-77095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:41:19.118 [INFO] [Thread-77095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:41:19.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:41:19.777 [DEBUG] [Thread-77095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:41:19.777 [DEBUG] [Thread-77095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:41:19.777 [DEBUG] [Thread-77095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:41:19.818 [DEBUG] [Thread-77095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:41:19.818 [DEBUG] [Thread-77095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:41:19.820 [DEBUG] [Thread-77095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:41:19.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:41:19.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:41:19.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:41:19.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:41:19.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:41:19.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:41:19.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.819892 -999.00  +10.30  43.52     89   +8.70 1 3 2 3 1     0    0 0.73 -43.00 ----- 33.8 43.5 312.8 51.3 12.1 -3.3 11.9 -3.3 11.6 -2.9 12.0 -2.6
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.819892
2025-12-12T21:41:19.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:41:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:41:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:41:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:41:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:41:19.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:40:53', tmtdew=1.87, humidity=88.07, cloud=0.0, wind=39.4, temperature=10.62, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:40:38.669', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:41:19.840 [DEBUG] [Thread-77095] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:41:19.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:41:19.925 [DEBUG] [Thread-77098] [transport.py] [_log()] starting thread (client mode): 0xf57f0e20
2025-12-12T21:41:19.925 [DEBUG] [Thread-77098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:41:19.942 [DEBUG] [Thread-77098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:41:19.942 [INFO] [Thread-77098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] client lang: <none>
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] server lang: <none>
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] kex follows: False
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] Compression: none
2025-12-12T21:41:19.950 [DEBUG] [Thread-77098] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:41:20.009 [DEBUG] [Thread-77098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:41:20.009 [DEBUG] [Thread-77098] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:41:20.010 [DEBUG] [Thread-77098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:41:20.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:41:20.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:41:20.067 [DEBUG] [Thread-77098] [transport.py] [_log()] userauth is OK
2025-12-12T21:41:20.067 [DEBUG] [Thread-77098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:41:20.067 [DEBUG] [Thread-77098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:41:20.067 [DEBUG] [Thread-77098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:41:20.067 [DEBUG] [Thread-77098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:41:20.080 [INFO] [Thread-77098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:41:20.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:41:20.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:41:20.900 [DEBUG] [Thread-77098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:41:20.900 [DEBUG] [Thread-77098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:41:20.948 [DEBUG] [Thread-77098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:41:20.948 [DEBUG] [Thread-77098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:41:20.957 [DEBUG] [Thread-77098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:41:20.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:41:20.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:41:20.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:41:20.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:41:20.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:41:20.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:41:20.988 [DEBUG] [Thread-77098] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:41:25.706 [DEBUG] [Thread-77100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:27.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:27.930 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:40.750 [DEBUG] [Thread-77101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:41:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:41:51.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:41:51.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:41:51.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 41, 25), 1.87, 88.08, 0.0, 42.49, 10.57, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:41:51.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:41:25
2025-12-12T21:41:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:41:51.992 [DEBUG] [Thread-77102] [transport.py] [_log()] starting thread (client mode): 0xf57f3d00
2025-12-12T21:41:51.992 [DEBUG] [Thread-77102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:41:52.012 [DEBUG] [Thread-77102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:41:52.012 [INFO] [Thread-77102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:41:52.015 [DEBUG] [Thread-77102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:41:52.015 [DEBUG] [Thread-77102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] client lang: <none>
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] server lang: <none>
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] kex follows: False
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] Compression: none
2025-12-12T21:41:52.016 [DEBUG] [Thread-77102] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:41:52.033 [DEBUG] [Thread-77102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:41:52.033 [DEBUG] [Thread-77102] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:41:52.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:41:52.034 [DEBUG] [Thread-77102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:41:52.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:41:52.036 [DEBUG] [Thread-77102] [transport.py] [_log()] userauth is OK
2025-12-12T21:41:52.037 [DEBUG] [Thread-77102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:41:52.037 [DEBUG] [Thread-77102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:41:52.037 [DEBUG] [Thread-77102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:41:52.037 [DEBUG] [Thread-77102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:41:52.071 [INFO] [Thread-77102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:41:52.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:41:52.725 [DEBUG] [Thread-77102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:41:52.725 [DEBUG] [Thread-77102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:41:52.726 [DEBUG] [Thread-77102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:41:52.766 [DEBUG] [Thread-77102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:41:52.766 [DEBUG] [Thread-77102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:41:52.768 [DEBUG] [Thread-77102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:41:52.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:41:52.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:41:52.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:41:52.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:41:52.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:41:52.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:41:52.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:41:52.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:41:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:41:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.820239 -999.00  +10.40  34.94     89   +8.80 1 3 2 3 1     0    0 0.74 -42.35 ----- 29.5 34.9 322.7 38.5 12.1 -2.6 11.9 -2.5 11.6 -2.8 11.9 -2.3
2025-12-12T21:41:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:41:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:41:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.820239
2025-12-12T21:41:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:41:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:41:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:41:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:41:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:41:52.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:41:25', tmtdew=1.87, humidity=88.08, cloud=0.0, wind=42.49, temperature=10.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:41:08.650', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:41:52.791 [DEBUG] [Thread-77102] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:41:52.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:41:52.884 [DEBUG] [Thread-77105] [transport.py] [_log()] starting thread (client mode): 0xf57f0250
2025-12-12T21:41:52.884 [DEBUG] [Thread-77105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:41:52.899 [DEBUG] [Thread-77105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:41:52.899 [INFO] [Thread-77105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:41:52.906 [DEBUG] [Thread-77105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:41:52.906 [DEBUG] [Thread-77105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:41:52.906 [DEBUG] [Thread-77105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:41:52.906 [DEBUG] [Thread-77105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:52.906 [DEBUG] [Thread-77105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:41:52.906 [DEBUG] [Thread-77105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] client lang: <none>
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] server lang: <none>
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] kex follows: False
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] Compression: none
2025-12-12T21:41:52.907 [DEBUG] [Thread-77105] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:41:52.967 [DEBUG] [Thread-77105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:41:52.968 [DEBUG] [Thread-77105] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:41:52.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:41:52.969 [DEBUG] [Thread-77105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:41:52.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:41:53.025 [DEBUG] [Thread-77105] [transport.py] [_log()] userauth is OK
2025-12-12T21:41:53.025 [DEBUG] [Thread-77105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:41:53.025 [DEBUG] [Thread-77105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:41:53.025 [DEBUG] [Thread-77105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:41:53.025 [DEBUG] [Thread-77105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:41:53.045 [INFO] [Thread-77105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:41:53.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:41:53.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:41:53.886 [DEBUG] [Thread-77105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:41:53.887 [DEBUG] [Thread-77105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:41:53.935 [DEBUG] [Thread-77105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:41:53.935 [DEBUG] [Thread-77105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:41:53.944 [DEBUG] [Thread-77105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:41:53.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:41:53.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:41:53.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:41:53.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:41:53.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:41:53.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:41:53.978 [DEBUG] [Thread-77105] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:41:55.778 [DEBUG] [Thread-77107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:10.822 [DEBUG] [Thread-77108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:12.629 [DEBUG] [Thread-77109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:24.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:42:24.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:42:24.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:42:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 41, 57), 1.87, 88.58, 0.0, 33.59, 10.55, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:42:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:41:57
2025-12-12T21:42:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:42:24.949 [DEBUG] [Thread-77110] [transport.py] [_log()] starting thread (client mode): 0xf57f2c80
2025-12-12T21:42:24.949 [DEBUG] [Thread-77110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:42:24.970 [DEBUG] [Thread-77110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:42:24.970 [INFO] [Thread-77110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:42:24.973 [DEBUG] [Thread-77110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:42:24.973 [DEBUG] [Thread-77110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:42:24.973 [DEBUG] [Thread-77110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:42:24.973 [DEBUG] [Thread-77110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:24.973 [DEBUG] [Thread-77110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] client lang: <none>
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] server lang: <none>
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] kex follows: False
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:42:24.974 [DEBUG] [Thread-77110] [transport.py] [_log()] Compression: none
2025-12-12T21:42:24.975 [DEBUG] [Thread-77110] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:42:24.991 [DEBUG] [Thread-77110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:42:24.991 [DEBUG] [Thread-77110] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:42:24.992 [DEBUG] [Thread-77110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:42:24.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:42:24.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:42:24.994 [DEBUG] [Thread-77110] [transport.py] [_log()] userauth is OK
2025-12-12T21:42:24.994 [DEBUG] [Thread-77110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:42:24.995 [DEBUG] [Thread-77110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:42:24.995 [DEBUG] [Thread-77110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:42:24.995 [DEBUG] [Thread-77110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:42:25.017 [INFO] [Thread-77110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:42:25.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:42:25.658 [DEBUG] [Thread-77110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:42:25.658 [DEBUG] [Thread-77110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:42:25.659 [DEBUG] [Thread-77110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:42:25.700 [DEBUG] [Thread-77110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:42:25.700 [DEBUG] [Thread-77110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:42:25.702 [DEBUG] [Thread-77110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:42:25.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:42:25.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:42:25.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:42:25.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:42:25.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:42:25.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:42:25.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:42:25.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:42:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:42:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.820586 -999.00  +10.50  29.82     89   +8.80 1 3 1 3 1     0    0 0.86 -38.31 ----- 30.1 29.8 322.0 39.0 12.2 -2.6 12.0 -2.4 11.7 -2.8 11.9 -1.9
2025-12-12T21:42:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:42:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:42:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.820586
2025-12-12T21:42:25.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:42:25.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:42:25.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:42:25.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:42:25.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:42:25.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:41:57', tmtdew=1.87, humidity=88.58, cloud=0.0, wind=33.59, temperature=10.55, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:41:38.630', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:42:25.725 [DEBUG] [Thread-77110] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:42:25.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:42:25.822 [DEBUG] [Thread-77113] [transport.py] [_log()] starting thread (client mode): 0xf5770190
2025-12-12T21:42:25.822 [DEBUG] [Thread-77113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:42:25.838 [DEBUG] [Thread-77113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:42:25.838 [INFO] [Thread-77113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:42:25.845 [DEBUG] [Thread-77113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] client lang: <none>
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] server lang: <none>
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] kex follows: False
2025-12-12T21:42:25.846 [DEBUG] [Thread-77113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:42:25.847 [DEBUG] [Thread-77113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:42:25.847 [DEBUG] [Thread-77113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:42:25.847 [DEBUG] [Thread-77113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:42:25.847 [DEBUG] [Thread-77113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:42:25.847 [DEBUG] [Thread-77113] [transport.py] [_log()] Compression: none
2025-12-12T21:42:25.847 [DEBUG] [Thread-77113] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:42:25.852 [DEBUG] [Thread-77115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:25.901 [DEBUG] [Thread-77113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:42:25.902 [DEBUG] [Thread-77113] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:42:25.902 [DEBUG] [Thread-77113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:42:25.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:42:25.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:42:25.958 [DEBUG] [Thread-77113] [transport.py] [_log()] userauth is OK
2025-12-12T21:42:25.958 [DEBUG] [Thread-77113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:42:25.959 [DEBUG] [Thread-77113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:42:25.959 [DEBUG] [Thread-77113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:42:25.959 [DEBUG] [Thread-77113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:42:25.978 [INFO] [Thread-77113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:42:25.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:42:25.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:42:26.856 [DEBUG] [Thread-77113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:42:26.856 [DEBUG] [Thread-77113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:42:26.904 [DEBUG] [Thread-77113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:42:26.904 [DEBUG] [Thread-77113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:42:26.912 [DEBUG] [Thread-77113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:42:26.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:42:26.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:42:26.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:42:26.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:42:26.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:42:26.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:42:26.946 [DEBUG] [Thread-77113] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:42:28.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:28.133 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:40.891 [DEBUG] [Thread-77116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:55.916 [DEBUG] [Thread-77117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:42:56.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:42:56.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:42:56.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:42:57.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 42, 30), 1.88, 88.55, 0.0, 38.66, 10.54, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:42:57.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:42:30
2025-12-12T21:42:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:42:57.930 [DEBUG] [Thread-77118] [transport.py] [_log()] starting thread (client mode): 0xf5773010
2025-12-12T21:42:57.930 [DEBUG] [Thread-77118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:42:57.952 [DEBUG] [Thread-77118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:42:57.952 [INFO] [Thread-77118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:42:57.955 [DEBUG] [Thread-77118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:42:57.955 [DEBUG] [Thread-77118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] client lang: <none>
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] server lang: <none>
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] kex follows: False
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] Compression: none
2025-12-12T21:42:57.956 [DEBUG] [Thread-77118] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:42:57.965 [DEBUG] [Thread-77118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:42:57.965 [DEBUG] [Thread-77118] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:42:57.965 [DEBUG] [Thread-77118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:42:57.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:42:57.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:42:57.967 [DEBUG] [Thread-77118] [transport.py] [_log()] userauth is OK
2025-12-12T21:42:57.967 [DEBUG] [Thread-77118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:42:57.967 [DEBUG] [Thread-77118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:42:57.967 [DEBUG] [Thread-77118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:42:57.968 [DEBUG] [Thread-77118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:42:57.985 [INFO] [Thread-77118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:42:57.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:42:58.645 [DEBUG] [Thread-77118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:42:58.645 [DEBUG] [Thread-77118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:42:58.646 [DEBUG] [Thread-77118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:42:58.686 [DEBUG] [Thread-77118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:42:58.686 [DEBUG] [Thread-77118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:42:58.689 [DEBUG] [Thread-77118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:42:58.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:42:58.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:42:58.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:42:58.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:42:58.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:42:58.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:42:58.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:42:58.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:42:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:42:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.820934 -999.00  +10.50  35.24     89   +8.90 1 3 2 3 1     0    0 0.91 -37.14 ----- 37.7 35.2 312.2 41.1 12.1 -2.5 11.9 -2.5 11.7 -2.2 12.0 -2.1
2025-12-12T21:42:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:42:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:42:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.820934
2025-12-12T21:42:58.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:42:58.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:42:58.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:42:58.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:42:58.714 [DEBUG] [Thread-77118] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:42:58.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:42:58.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:42:30', tmtdew=1.88, humidity=88.55, cloud=0.0, wind=38.66, temperature=10.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:42:08.698', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:42:58.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:42:58.810 [DEBUG] [Thread-77121] [transport.py] [_log()] starting thread (client mode): 0xf5771180
2025-12-12T21:42:58.810 [DEBUG] [Thread-77121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:42:58.825 [DEBUG] [Thread-77121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:42:58.825 [INFO] [Thread-77121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:42:58.833 [DEBUG] [Thread-77121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] client lang: <none>
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] server lang: <none>
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] kex follows: False
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] Compression: none
2025-12-12T21:42:58.834 [DEBUG] [Thread-77121] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:42:58.891 [DEBUG] [Thread-77121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:42:58.892 [DEBUG] [Thread-77121] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:42:58.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:42:58.893 [DEBUG] [Thread-77121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:42:58.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:42:58.947 [DEBUG] [Thread-77121] [transport.py] [_log()] userauth is OK
2025-12-12T21:42:58.948 [DEBUG] [Thread-77121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:42:58.948 [DEBUG] [Thread-77121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:42:58.948 [DEBUG] [Thread-77121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:42:58.948 [DEBUG] [Thread-77121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:42:58.969 [INFO] [Thread-77121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:42:58.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:42:58.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:42:59.811 [DEBUG] [Thread-77121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:42:59.811 [DEBUG] [Thread-77121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:42:59.860 [DEBUG] [Thread-77121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:42:59.860 [DEBUG] [Thread-77121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:42:59.869 [DEBUG] [Thread-77121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:42:59.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:42:59.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:42:59.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:42:59.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:42:59.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:42:59.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:42:59.904 [DEBUG] [Thread-77121] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:43:10.946 [DEBUG] [Thread-77123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:43:12.708 [DEBUG] [Thread-77124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:43:25.986 [DEBUG] [Thread-77125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:43:28.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:43:28.337 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:43:29.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:43:29.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:43:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:43:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 43, 2), 1.86, 88.65, 0.0, 37.88, 10.54, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:43:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:43:02
2025-12-12T21:43:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:43:30.885 [DEBUG] [Thread-77126] [transport.py] [_log()] starting thread (client mode): 0xf57724d0
2025-12-12T21:43:30.885 [DEBUG] [Thread-77126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:43:30.906 [DEBUG] [Thread-77126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:43:30.906 [INFO] [Thread-77126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] client lang: <none>
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] server lang: <none>
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] kex follows: False
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:43:30.909 [DEBUG] [Thread-77126] [transport.py] [_log()] Compression: none
2025-12-12T21:43:30.910 [DEBUG] [Thread-77126] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:43:30.929 [DEBUG] [Thread-77126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:43:30.929 [DEBUG] [Thread-77126] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:43:30.930 [DEBUG] [Thread-77126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:43:30.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:43:30.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:43:30.932 [DEBUG] [Thread-77126] [transport.py] [_log()] userauth is OK
2025-12-12T21:43:30.932 [DEBUG] [Thread-77126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:43:30.932 [DEBUG] [Thread-77126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:43:30.932 [DEBUG] [Thread-77126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:43:30.932 [DEBUG] [Thread-77126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:43:30.956 [INFO] [Thread-77126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:43:30.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:43:31.573 [DEBUG] [Thread-77126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:43:31.574 [DEBUG] [Thread-77126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:43:31.574 [DEBUG] [Thread-77126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:43:31.615 [DEBUG] [Thread-77126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:43:31.615 [DEBUG] [Thread-77126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:43:31.617 [DEBUG] [Thread-77126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:43:31.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:43:31.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:43:31.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:43:31.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:43:31.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:43:31.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:43:31.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:43:31.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:43:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:43:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.821628 -999.00  +10.50  32.65     89   +8.80 1 2 2 3 1     0    0 0.84 -38.08 ....W 39.2 32.6 320.4 48.2 12.1 -15.2 11.9 -17.4 11.6 -12.7 11.9 -12.0
2025-12-12T21:43:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:43:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:43:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.821628
2025-12-12T21:43:31.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:43:31.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:43:31.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:43:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:43:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T21:43:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:43:02', tmtdew=1.86, humidity=88.65, cloud=0.0, wind=37.88, temperature=10.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:43:08.659', 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:43:31.644 [DEBUG] [Thread-77126] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:43:31.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:43:41.018 [DEBUG] [Thread-77129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:43:56.065 [DEBUG] [Thread-77130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:11.091 [DEBUG] [Thread-77131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:12.793 [DEBUG] [Thread-77132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:26.120 [DEBUG] [Thread-77133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:28.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:28.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:41.149 [DEBUG] [Thread-77134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:44:56.184 [DEBUG] [Thread-77135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:11.214 [DEBUG] [Thread-77136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:12.863 [DEBUG] [Thread-77137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:26.241 [DEBUG] [Thread-77138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:28.749 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:28.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:41.273 [DEBUG] [Thread-77139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:45:45.194 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T21:45:56.300 [DEBUG] [Thread-77140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:11.328 [DEBUG] [Thread-77141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:12.938 [DEBUG] [Thread-77142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:46:15.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:46:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:46:15.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 45, 42), 1.87, 88.07, 0.0, 41.02, 10.44, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:46:15.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:45:42
2025-12-12T21:46:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:46:16.237 [DEBUG] [Thread-77143] [transport.py] [_log()] starting thread (client mode): 0xf5771990
2025-12-12T21:46:16.237 [DEBUG] [Thread-77143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:46:16.256 [DEBUG] [Thread-77143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:46:16.257 [INFO] [Thread-77143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] client lang: <none>
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] server lang: <none>
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] kex follows: False
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] Compression: none
2025-12-12T21:46:16.260 [DEBUG] [Thread-77143] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:46:16.277 [DEBUG] [Thread-77143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:46:16.277 [DEBUG] [Thread-77143] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:46:16.277 [DEBUG] [Thread-77143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:46:16.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:46:16.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:46:16.278 [DEBUG] [Thread-77143] [transport.py] [_log()] userauth is OK
2025-12-12T21:46:16.278 [DEBUG] [Thread-77143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:46:16.278 [DEBUG] [Thread-77143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:46:16.278 [DEBUG] [Thread-77143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:46:16.278 [DEBUG] [Thread-77143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:46:16.291 [INFO] [Thread-77143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:46:16.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:46:16.899 [DEBUG] [Thread-77143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:46:16.899 [DEBUG] [Thread-77143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:46:16.899 [DEBUG] [Thread-77143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:46:16.940 [DEBUG] [Thread-77143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:46:16.940 [DEBUG] [Thread-77143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:46:16.943 [DEBUG] [Thread-77143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:46:16.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:46:16.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:46:16.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:46:16.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:46:16.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:46:16.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:46:16.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:46:16.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:46:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:46:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.823364 -999.00  +10.30  40.15     89   +8.60 1 3 2 3 1     0    0 0.91 -33.50 .NES. 48.1 40.1 309.0 50.7 11.9 -4.0 11.7 -3.8 11.4 -3.1 11.8 -3.1
2025-12-12T21:46:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:46:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:46:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.823364
2025-12-12T21:46:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:46:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:46:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:46:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:46:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:46:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:45:42', tmtdew=1.87, humidity=88.07, cloud=0.0, wind=41.02, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:45:38.650', atlas_cloud=3, 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, 1.0979999999999999, 2.06175, nan, nan, nan, nan, nan, 0.6317499999999994], zp_timestamp='2025-12-12T19:12:00')
2025-12-12T21:46:16.969 [DEBUG] [Thread-77143] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:46:17.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:46:17.076 [DEBUG] [Thread-77146] [transport.py] [_log()] starting thread (client mode): 0xf5772e60
2025-12-12T21:46:17.076 [DEBUG] [Thread-77146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:46:17.092 [DEBUG] [Thread-77146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:46:17.092 [INFO] [Thread-77146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:46:17.099 [DEBUG] [Thread-77146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:46:17.099 [DEBUG] [Thread-77146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:46:17.099 [DEBUG] [Thread-77146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:46:17.099 [DEBUG] [Thread-77146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] client lang: <none>
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] server lang: <none>
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] kex follows: False
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] Compression: none
2025-12-12T21:46:17.100 [DEBUG] [Thread-77146] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:46:17.158 [DEBUG] [Thread-77146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:46:17.159 [DEBUG] [Thread-77146] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:46:17.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:46:17.160 [DEBUG] [Thread-77146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:46:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:46:17.215 [DEBUG] [Thread-77146] [transport.py] [_log()] userauth is OK
2025-12-12T21:46:17.215 [DEBUG] [Thread-77146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:46:17.215 [DEBUG] [Thread-77146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:46:17.215 [DEBUG] [Thread-77146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:46:17.215 [DEBUG] [Thread-77146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:46:17.234 [INFO] [Thread-77146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:46:17.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:46:17.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:46:18.100 [DEBUG] [Thread-77146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:46:18.100 [DEBUG] [Thread-77146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:46:18.148 [DEBUG] [Thread-77146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:46:18.148 [DEBUG] [Thread-77146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:46:18.157 [DEBUG] [Thread-77146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:46:18.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:46:18.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:46:18.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:46:18.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:46:18.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:46:18.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:46:18.191 [DEBUG] [Thread-77146] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:46:26.363 [DEBUG] [Thread-77148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:28.954 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:28.955 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:41.417 [DEBUG] [Thread-77149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:46:48.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:46:48.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:46:48.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:46:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 46, 14), 1.85, 88.17, 0.0, 41.87, 10.47, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:46:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:46:14
2025-12-12T21:46:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:46:49.212 [DEBUG] [Thread-77150] [transport.py] [_log()] starting thread (client mode): 0xf5773b80
2025-12-12T21:46:49.212 [DEBUG] [Thread-77150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:46:49.232 [DEBUG] [Thread-77150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:46:49.232 [INFO] [Thread-77150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] client lang: <none>
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] server lang: <none>
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] kex follows: False
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] Compression: none
2025-12-12T21:46:49.235 [DEBUG] [Thread-77150] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:46:49.251 [DEBUG] [Thread-77150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:46:49.251 [DEBUG] [Thread-77150] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:46:49.251 [DEBUG] [Thread-77150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:46:49.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:46:49.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:46:49.253 [DEBUG] [Thread-77150] [transport.py] [_log()] userauth is OK
2025-12-12T21:46:49.253 [DEBUG] [Thread-77150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:46:49.254 [DEBUG] [Thread-77150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:46:49.254 [DEBUG] [Thread-77150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:46:49.254 [DEBUG] [Thread-77150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:46:49.278 [INFO] [Thread-77150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:46:49.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:46:49.931 [DEBUG] [Thread-77150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:46:49.931 [DEBUG] [Thread-77150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:46:49.931 [DEBUG] [Thread-77150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:46:49.972 [DEBUG] [Thread-77150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:46:49.972 [DEBUG] [Thread-77150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:46:49.975 [DEBUG] [Thread-77150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:46:49.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:46:49.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:46:49.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:46:49.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:46:49.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:46:49.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:46:49.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:46:49.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:46:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:46:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.824058 -999.00  +10.30  35.88     89   +8.70 1 3 2 3 1     0    0 0.96 -31.30 ----- 39.0 35.9 318.4 50.9 11.9 -7.0 11.7 -8.5 11.5 -7.0 11.8 -5.5
2025-12-12T21:46:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:46:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:46:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.824058
2025-12-12T21:46:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:46:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:46:50.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:46:50.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:46:50.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:46:50.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:46:14', tmtdew=1.85, humidity=88.17, cloud=0.0, wind=41.87, temperature=10.47, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:46:38.611', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:45:00')
2025-12-12T21:46:50.001 [DEBUG] [Thread-77150] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:46:50.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:46:50.098 [DEBUG] [Thread-77153] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-12T21:46:50.098 [DEBUG] [Thread-77153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:46:50.113 [DEBUG] [Thread-77153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:46:50.113 [INFO] [Thread-77153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] client lang: <none>
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] server lang: <none>
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] kex follows: False
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:46:50.121 [DEBUG] [Thread-77153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:46:50.122 [DEBUG] [Thread-77153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:46:50.122 [DEBUG] [Thread-77153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:46:50.122 [DEBUG] [Thread-77153] [transport.py] [_log()] Compression: none
2025-12-12T21:46:50.122 [DEBUG] [Thread-77153] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:46:50.183 [DEBUG] [Thread-77153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:46:50.183 [DEBUG] [Thread-77153] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:46:50.184 [DEBUG] [Thread-77153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:46:50.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:46:50.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:46:50.239 [DEBUG] [Thread-77153] [transport.py] [_log()] userauth is OK
2025-12-12T21:46:50.240 [DEBUG] [Thread-77153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:46:50.240 [DEBUG] [Thread-77153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:46:50.240 [DEBUG] [Thread-77153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:46:50.240 [DEBUG] [Thread-77153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:46:50.259 [INFO] [Thread-77153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:46:50.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:46:50.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:46:51.082 [DEBUG] [Thread-77153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:46:51.082 [DEBUG] [Thread-77153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:46:51.130 [DEBUG] [Thread-77153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:46:51.130 [DEBUG] [Thread-77153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:46:51.139 [DEBUG] [Thread-77153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:46:51.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:46:51.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:46:51.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:46:51.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:46:51.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:46:51.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:46:51.173 [DEBUG] [Thread-77153] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:46:56.445 [DEBUG] [Thread-77155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:11.489 [DEBUG] [Thread-77156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:13.010 [DEBUG] [Thread-77157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:47:21.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:47:21.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:47:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 47, 18), 1.84, 88.73, 0.0, 41.66, 10.44, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:47:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:47:18
2025-12-12T21:47:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:47:22.174 [DEBUG] [Thread-77158] [transport.py] [_log()] starting thread (client mode): 0xf57703a0
2025-12-12T21:47:22.174 [DEBUG] [Thread-77158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:47:22.194 [DEBUG] [Thread-77158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:47:22.194 [INFO] [Thread-77158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:47:22.197 [DEBUG] [Thread-77158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] client lang: <none>
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] server lang: <none>
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] kex follows: False
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] Compression: none
2025-12-12T21:47:22.198 [DEBUG] [Thread-77158] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:47:22.216 [DEBUG] [Thread-77158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:47:22.217 [DEBUG] [Thread-77158] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:47:22.217 [DEBUG] [Thread-77158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:47:22.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:47:22.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:47:22.219 [DEBUG] [Thread-77158] [transport.py] [_log()] userauth is OK
2025-12-12T21:47:22.219 [DEBUG] [Thread-77158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:47:22.220 [DEBUG] [Thread-77158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:47:22.220 [DEBUG] [Thread-77158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:47:22.220 [DEBUG] [Thread-77158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:47:22.244 [INFO] [Thread-77158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:47:22.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:47:22.912 [DEBUG] [Thread-77158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:47:22.912 [DEBUG] [Thread-77158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:47:22.912 [DEBUG] [Thread-77158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:47:22.953 [DEBUG] [Thread-77158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:47:22.953 [DEBUG] [Thread-77158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:47:22.956 [DEBUG] [Thread-77158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:47:22.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:47:22.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:47:22.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:47:22.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:47:22.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:47:22.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:47:22.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:47:22.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:47:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:47:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.824406 -999.00  +10.30  36.27     89   +8.70 1 3 2 3 1     0    0 0.82 -35.17 ----- 44.0 36.3 314.0 47.3 11.8 -5.5 11.7 -4.2 11.3 -5.1 11.7 -5.3
2025-12-12T21:47:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:47:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:47:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.824406
2025-12-12T21:47:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:47:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:47:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:47:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:47:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:47:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:47:18', tmtdew=1.84, humidity=88.73, cloud=0.0, wind=41.66, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:47:08.678', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:45:00')
2025-12-12T21:47:22.980 [DEBUG] [Thread-77158] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:47:23.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:47:23.073 [DEBUG] [Thread-77161] [transport.py] [_log()] starting thread (client mode): 0xf5771de0
2025-12-12T21:47:23.073 [DEBUG] [Thread-77161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:47:23.088 [DEBUG] [Thread-77161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:47:23.088 [INFO] [Thread-77161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:47:23.095 [DEBUG] [Thread-77161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:23.096 [DEBUG] [Thread-77161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] client lang: <none>
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] server lang: <none>
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] kex follows: False
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] Compression: none
2025-12-12T21:47:23.097 [DEBUG] [Thread-77161] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:47:23.152 [DEBUG] [Thread-77161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:47:23.152 [DEBUG] [Thread-77161] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:47:23.153 [DEBUG] [Thread-77161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:47:23.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:47:23.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:47:23.208 [DEBUG] [Thread-77161] [transport.py] [_log()] userauth is OK
2025-12-12T21:47:23.209 [DEBUG] [Thread-77161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:47:23.209 [DEBUG] [Thread-77161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:47:23.209 [DEBUG] [Thread-77161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:47:23.209 [DEBUG] [Thread-77161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:47:23.231 [INFO] [Thread-77161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:47:23.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:47:23.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:47:24.082 [DEBUG] [Thread-77161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:47:24.082 [DEBUG] [Thread-77161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:47:24.130 [DEBUG] [Thread-77161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:47:24.130 [DEBUG] [Thread-77161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:47:24.139 [DEBUG] [Thread-77161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:47:24.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:47:24.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:47:24.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:47:24.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:47:24.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:47:24.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:47:24.173 [DEBUG] [Thread-77161] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:47:26.514 [DEBUG] [Thread-77163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:29.160 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:29.161 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:41.558 [DEBUG] [Thread-77164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:54.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:47:54.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:47:54.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:47:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 47, 50), 1.79, 88.76, 0.0, 45.03, 10.44, 1, 1, 0, 2, 1, 0),)
2025-12-12T21:47:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:47:50
2025-12-12T21:47:55.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:47:55.188 [DEBUG] [Thread-77165] [transport.py] [_log()] starting thread (client mode): 0xf57f1690
2025-12-12T21:47:55.188 [DEBUG] [Thread-77165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:47:55.210 [DEBUG] [Thread-77165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:47:55.210 [INFO] [Thread-77165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] client lang: <none>
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] server lang: <none>
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] kex follows: False
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:47:55.213 [DEBUG] [Thread-77165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:47:55.214 [DEBUG] [Thread-77165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:47:55.214 [DEBUG] [Thread-77165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:47:55.214 [DEBUG] [Thread-77165] [transport.py] [_log()] Compression: none
2025-12-12T21:47:55.214 [DEBUG] [Thread-77165] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:47:55.230 [DEBUG] [Thread-77165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:47:55.231 [DEBUG] [Thread-77165] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:47:55.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:47:55.232 [DEBUG] [Thread-77165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:47:55.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:47:55.234 [DEBUG] [Thread-77165] [transport.py] [_log()] userauth is OK
2025-12-12T21:47:55.234 [DEBUG] [Thread-77165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:47:55.234 [DEBUG] [Thread-77165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:47:55.234 [DEBUG] [Thread-77165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:47:55.234 [DEBUG] [Thread-77165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:47:55.260 [INFO] [Thread-77165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:47:55.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:47:55.871 [DEBUG] [Thread-77165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:47:55.872 [DEBUG] [Thread-77165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:47:55.872 [DEBUG] [Thread-77165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:47:55.913 [DEBUG] [Thread-77165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:47:55.913 [DEBUG] [Thread-77165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:47:55.915 [DEBUG] [Thread-77165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:47:55.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:47:55.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:47:55.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:47:55.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:47:55.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:47:55.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:47:55.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:47:55.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:47:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:47:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.824753 -999.00  +10.20  42.18     89   +8.60 1 3 2 3 1     0    0 0.85 -33.93 Z.e.. 44.0 42.2 312.6 53.5 11.8 -3.1 11.7 -3.9 11.3 -2.5 11.7 -2.5
2025-12-12T21:47:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:47:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:47:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.824753
2025-12-12T21:47:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:47:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:47:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:47:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:47:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:47:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:47:50', tmtdew=1.79, humidity=88.76, cloud=0.0, wind=45.03, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:47:38.659', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:45:00')
2025-12-12T21:47:55.941 [DEBUG] [Thread-77165] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:47:56.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:47:56.039 [DEBUG] [Thread-77168] [transport.py] [_log()] starting thread (client mode): 0xf57f00a0
2025-12-12T21:47:56.040 [DEBUG] [Thread-77168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:47:56.054 [DEBUG] [Thread-77168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:47:56.054 [INFO] [Thread-77168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:56.062 [DEBUG] [Thread-77168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] client lang: <none>
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] server lang: <none>
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] kex follows: False
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:47:56.063 [DEBUG] [Thread-77168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:47:56.064 [DEBUG] [Thread-77168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:47:56.064 [DEBUG] [Thread-77168] [transport.py] [_log()] Compression: none
2025-12-12T21:47:56.064 [DEBUG] [Thread-77168] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:47:56.121 [DEBUG] [Thread-77168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:47:56.122 [DEBUG] [Thread-77168] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:47:56.123 [DEBUG] [Thread-77168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:47:56.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:47:56.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:47:56.177 [DEBUG] [Thread-77168] [transport.py] [_log()] userauth is OK
2025-12-12T21:47:56.178 [DEBUG] [Thread-77168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:47:56.178 [DEBUG] [Thread-77168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:47:56.178 [DEBUG] [Thread-77168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:47:56.178 [DEBUG] [Thread-77168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:47:56.201 [INFO] [Thread-77168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:47:56.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:47:56.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:47:56.582 [DEBUG] [Thread-77170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:47:57.017 [DEBUG] [Thread-77168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:47:57.017 [DEBUG] [Thread-77168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:47:57.065 [DEBUG] [Thread-77168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:47:57.065 [DEBUG] [Thread-77168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:47:57.074 [DEBUG] [Thread-77168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:47:57.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:47:57.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:47: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
2025-12-12T21:47:57.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:47:57.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:47:57.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:47:57.108 [DEBUG] [Thread-77168] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:48:11.636 [DEBUG] [Thread-77171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:13.089 [DEBUG] [Thread-77172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:26.666 [DEBUG] [Thread-77173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:48:27.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:48:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:48:27.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 48, 22), 1.77, 88.85, 0.0, 43.25, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:48:27.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:48:22
2025-12-12T21:48:27.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:48:28.073 [DEBUG] [Thread-77174] [transport.py] [_log()] starting thread (client mode): 0xf5770820
2025-12-12T21:48:28.074 [DEBUG] [Thread-77174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:48:28.093 [DEBUG] [Thread-77174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:48:28.093 [INFO] [Thread-77174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] client lang: <none>
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] server lang: <none>
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] kex follows: False
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:48:28.096 [DEBUG] [Thread-77174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:48:28.097 [DEBUG] [Thread-77174] [transport.py] [_log()] Compression: none
2025-12-12T21:48:28.097 [DEBUG] [Thread-77174] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:48:28.104 [DEBUG] [Thread-77174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:48:28.104 [DEBUG] [Thread-77174] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:48:28.104 [DEBUG] [Thread-77174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:48:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:48:28.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:48:28.105 [DEBUG] [Thread-77174] [transport.py] [_log()] userauth is OK
2025-12-12T21:48:28.105 [DEBUG] [Thread-77174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:48:28.105 [DEBUG] [Thread-77174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:48:28.105 [DEBUG] [Thread-77174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:48:28.105 [DEBUG] [Thread-77174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:48:28.119 [INFO] [Thread-77174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:48:28.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:48:28.724 [DEBUG] [Thread-77174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:48:28.724 [DEBUG] [Thread-77174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:48:28.724 [DEBUG] [Thread-77174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:48:28.766 [DEBUG] [Thread-77174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:48:28.766 [DEBUG] [Thread-77174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:48:28.768 [DEBUG] [Thread-77174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:48:28.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:48:28.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:48:28.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:48:28.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:48:28.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:48:28.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:48:28.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.825100 -999.00  +10.30  34.32     90   +8.70 1 3 2 3 1     0    0 0.76 -36.07 Z.e.. 32.0 34.3 319.4 53.8 11.8 -4.2 11.6 -4.2 11.3 -4.2 11.7 -3.3
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.825100
2025-12-12T21:48:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:48:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:48:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:48:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:48:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:48:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:48:22', tmtdew=1.77, humidity=88.85, cloud=0.0, wind=43.25, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:48:08.640', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:45:00')
2025-12-12T21:48:28.789 [DEBUG] [Thread-77174] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:48:28.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:48:28.874 [DEBUG] [Thread-77177] [transport.py] [_log()] starting thread (client mode): 0xf5771b40
2025-12-12T21:48:28.874 [DEBUG] [Thread-77177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:48:28.889 [DEBUG] [Thread-77177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:48:28.889 [INFO] [Thread-77177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] client lang: <none>
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] server lang: <none>
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] kex follows: False
2025-12-12T21:48:28.896 [DEBUG] [Thread-77177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:48:28.897 [DEBUG] [Thread-77177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:48:28.897 [DEBUG] [Thread-77177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:48:28.897 [DEBUG] [Thread-77177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:48:28.897 [DEBUG] [Thread-77177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:48:28.897 [DEBUG] [Thread-77177] [transport.py] [_log()] Compression: none
2025-12-12T21:48:28.897 [DEBUG] [Thread-77177] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:48:28.953 [DEBUG] [Thread-77177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:48:28.953 [DEBUG] [Thread-77177] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:48:28.953 [DEBUG] [Thread-77177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:48:28.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:48:28.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:48:29.010 [DEBUG] [Thread-77177] [transport.py] [_log()] userauth is OK
2025-12-12T21:48:29.010 [DEBUG] [Thread-77177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:48:29.010 [DEBUG] [Thread-77177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:48:29.010 [DEBUG] [Thread-77177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:48:29.010 [DEBUG] [Thread-77177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:48:29.027 [INFO] [Thread-77177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:48:29.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:48:29.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:48:29.363 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:29.364 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:29.852 [DEBUG] [Thread-77177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:48:29.852 [DEBUG] [Thread-77177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:48:29.899 [DEBUG] [Thread-77177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:48:29.899 [DEBUG] [Thread-77177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:48:29.908 [DEBUG] [Thread-77177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:48:29.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:48:29.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:48:29.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:48:29.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:48:29.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:48:29.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:48:29.940 [DEBUG] [Thread-77177] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:48:41.696 [DEBUG] [Thread-77179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:56.739 [DEBUG] [Thread-77180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:48:59.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:48:59.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:48:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:49:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 48, 54), 1.77, 88.9, 0.0, 42.93, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:49:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:48:54
2025-12-12T21:49:00.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:49:00.933 [DEBUG] [Thread-77181] [transport.py] [_log()] starting thread (client mode): 0xf57f0d30
2025-12-12T21:49:00.933 [DEBUG] [Thread-77181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:49:00.956 [DEBUG] [Thread-77181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:49:00.956 [INFO] [Thread-77181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:49:00.958 [DEBUG] [Thread-77181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:49:00.958 [DEBUG] [Thread-77181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:49:00.958 [DEBUG] [Thread-77181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:49:00.958 [DEBUG] [Thread-77181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:00.958 [DEBUG] [Thread-77181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:00.958 [DEBUG] [Thread-77181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] client lang: <none>
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] server lang: <none>
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] kex follows: False
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:49:00.959 [DEBUG] [Thread-77181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:49:00.960 [DEBUG] [Thread-77181] [transport.py] [_log()] Compression: none
2025-12-12T21:49:00.960 [DEBUG] [Thread-77181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:49:00.978 [DEBUG] [Thread-77181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:49:00.979 [DEBUG] [Thread-77181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:49:00.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:49:00.980 [DEBUG] [Thread-77181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:49:00.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:49:00.981 [DEBUG] [Thread-77181] [transport.py] [_log()] userauth is OK
2025-12-12T21:49:00.982 [DEBUG] [Thread-77181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:49:00.982 [DEBUG] [Thread-77181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:49:00.982 [DEBUG] [Thread-77181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:49:00.982 [DEBUG] [Thread-77181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:49:01.006 [INFO] [Thread-77181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:49:01.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:49:01.666 [DEBUG] [Thread-77181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:49:01.666 [DEBUG] [Thread-77181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:49:01.666 [DEBUG] [Thread-77181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:49:01.707 [DEBUG] [Thread-77181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:49:01.707 [DEBUG] [Thread-77181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:49:01.710 [DEBUG] [Thread-77181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:49:01.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:49:01.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:49:01.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:49:01.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:49:01.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:49:01.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:49:01.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:49:01.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:49:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:49:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.825447 -999.00  +10.30  32.15     89   +8.70 1 3 2 3 1     0    0 0.79 -34.87 ----- 37.2 32.1 321.4 42.9 11.8 -2.8 11.6 -2.5 11.3 -3.1 11.7 -2.8
2025-12-12T21:49:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:49:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:49:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.825447
2025-12-12T21:49:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:49:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:49:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:49:01.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:49:01.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:49:01.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:48:54', tmtdew=1.77, humidity=88.9, cloud=0.0, wind=42.93, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:48:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:45:00')
2025-12-12T21:49:01.735 [DEBUG] [Thread-77181] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:49:01.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:49:01.830 [DEBUG] [Thread-77184] [transport.py] [_log()] starting thread (client mode): 0xf57f01c0
2025-12-12T21:49:01.830 [DEBUG] [Thread-77184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:49:01.845 [DEBUG] [Thread-77184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:49:01.845 [INFO] [Thread-77184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] client lang: <none>
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] server lang: <none>
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] kex follows: False
2025-12-12T21:49:01.852 [DEBUG] [Thread-77184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:49:01.853 [DEBUG] [Thread-77184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:49:01.853 [DEBUG] [Thread-77184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:49:01.853 [DEBUG] [Thread-77184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:49:01.853 [DEBUG] [Thread-77184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:49:01.853 [DEBUG] [Thread-77184] [transport.py] [_log()] Compression: none
2025-12-12T21:49:01.853 [DEBUG] [Thread-77184] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:49:01.911 [DEBUG] [Thread-77184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:49:01.911 [DEBUG] [Thread-77184] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:49:01.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:49:01.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:49:01.913 [DEBUG] [Thread-77184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:49:01.967 [DEBUG] [Thread-77184] [transport.py] [_log()] userauth is OK
2025-12-12T21:49:01.967 [DEBUG] [Thread-77184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:49:01.967 [DEBUG] [Thread-77184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:49:01.967 [DEBUG] [Thread-77184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:49:01.967 [DEBUG] [Thread-77184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:49:01.985 [INFO] [Thread-77184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:49:01.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:49:01.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:49:02.833 [DEBUG] [Thread-77184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:49:02.833 [DEBUG] [Thread-77184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:49:02.882 [DEBUG] [Thread-77184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:49:02.882 [DEBUG] [Thread-77184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:49:02.891 [DEBUG] [Thread-77184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:49:02.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:49:02.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:49:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:49:02.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:49:02.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:49:02.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:49:02.924 [DEBUG] [Thread-77184] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:49:11.763 [DEBUG] [Thread-77186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:49:13.174 [DEBUG] [Thread-77187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:49:26.796 [DEBUG] [Thread-77188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:49:29.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:49:29.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:49:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:49:32.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:49:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:49:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 49, 26), 1.76, 88.91, 0.0, 44.11, 10.27, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:49:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:49:26
2025-12-12T21:49:33.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:49:33.940 [DEBUG] [Thread-77189] [transport.py] [_log()] starting thread (client mode): 0xf5773550
2025-12-12T21:49:33.940 [DEBUG] [Thread-77189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:49:33.961 [DEBUG] [Thread-77189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:49:33.961 [INFO] [Thread-77189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:33.964 [DEBUG] [Thread-77189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] client lang: <none>
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] server lang: <none>
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] kex follows: False
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] Compression: none
2025-12-12T21:49:33.965 [DEBUG] [Thread-77189] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:49:33.982 [DEBUG] [Thread-77189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:49:33.983 [DEBUG] [Thread-77189] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:49:33.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:49:33.984 [DEBUG] [Thread-77189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:49:33.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:49:33.986 [DEBUG] [Thread-77189] [transport.py] [_log()] userauth is OK
2025-12-12T21:49:33.986 [DEBUG] [Thread-77189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:49:33.986 [DEBUG] [Thread-77189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:49:33.986 [DEBUG] [Thread-77189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:49:33.986 [DEBUG] [Thread-77189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:49:34.008 [INFO] [Thread-77189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:49:34.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:49:34.625 [DEBUG] [Thread-77189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:49:34.625 [DEBUG] [Thread-77189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:49:34.626 [DEBUG] [Thread-77189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:49:34.666 [DEBUG] [Thread-77189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:49:34.666 [DEBUG] [Thread-77189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:49:34.669 [DEBUG] [Thread-77189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:49:34.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:49:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:49:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:49:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:49:34.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:49:34.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:49:34.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:49:34.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:49:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:49:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.825795 -999.00  +10.30  40.14     89   +8.70 1 3 2 3 1     0    0 0.77 -34.75 ----- 37.8 40.1 311.0 49.7 11.8 -2.6 11.6 -2.8 11.3 -2.2 11.7 -1.9
2025-12-12T21:49:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:49:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:49:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.825795
2025-12-12T21:49:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:49:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:49:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:49:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:49:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:49:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:49:26', tmtdew=1.76, humidity=88.91, cloud=0.0, wind=44.11, temperature=10.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:49:08.688', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:49:34.696 [DEBUG] [Thread-77189] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:49:34.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:49:34.794 [DEBUG] [Thread-77192] [transport.py] [_log()] starting thread (client mode): 0xf57f0280
2025-12-12T21:49:34.794 [DEBUG] [Thread-77192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:49:34.809 [DEBUG] [Thread-77192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:49:34.809 [INFO] [Thread-77192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:34.817 [DEBUG] [Thread-77192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] client lang: <none>
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] server lang: <none>
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] kex follows: False
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] Compression: none
2025-12-12T21:49:34.818 [DEBUG] [Thread-77192] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:49:34.880 [DEBUG] [Thread-77192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:49:34.881 [DEBUG] [Thread-77192] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:49:34.881 [DEBUG] [Thread-77192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:49:34.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:49:34.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:49:34.936 [DEBUG] [Thread-77192] [transport.py] [_log()] userauth is OK
2025-12-12T21:49:34.936 [DEBUG] [Thread-77192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:49:34.936 [DEBUG] [Thread-77192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:49:34.937 [DEBUG] [Thread-77192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:49:34.937 [DEBUG] [Thread-77192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:49:34.956 [INFO] [Thread-77192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:49:34.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:49:34.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:49:35.832 [DEBUG] [Thread-77192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:49:35.832 [DEBUG] [Thread-77192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:49:35.880 [DEBUG] [Thread-77192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:49:35.880 [DEBUG] [Thread-77192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:49:35.889 [DEBUG] [Thread-77192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:49:35.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:49:35.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:49:35.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:49:35.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:49:35.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:49:35.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:49:35.923 [DEBUG] [Thread-77192] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:49:41.826 [DEBUG] [Thread-77194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:49:56.870 [DEBUG] [Thread-77195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:50:05.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:50:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:50:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 49, 58), 1.7, 89.0, 0.0, 39.89, 10.35, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:50:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:49:58
2025-12-12T21:50:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:50:06.874 [DEBUG] [Thread-77196] [transport.py] [_log()] starting thread (client mode): 0xf5771990
2025-12-12T21:50:06.874 [DEBUG] [Thread-77196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:50:06.888 [DEBUG] [Thread-77196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:50:06.889 [INFO] [Thread-77196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] client lang: <none>
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] server lang: <none>
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] kex follows: False
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] Compression: none
2025-12-12T21:50:06.890 [DEBUG] [Thread-77196] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:50:06.898 [DEBUG] [Thread-77196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:50:06.899 [DEBUG] [Thread-77196] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:50:06.899 [DEBUG] [Thread-77196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:50:06.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:50:06.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:50:06.901 [DEBUG] [Thread-77196] [transport.py] [_log()] userauth is OK
2025-12-12T21:50:06.901 [DEBUG] [Thread-77196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:50:06.901 [DEBUG] [Thread-77196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:50:06.901 [DEBUG] [Thread-77196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:50:06.901 [DEBUG] [Thread-77196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:50:06.929 [INFO] [Thread-77196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:50:06.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:50:07.565 [DEBUG] [Thread-77196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:50:07.565 [DEBUG] [Thread-77196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:50:07.565 [DEBUG] [Thread-77196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:50:07.606 [DEBUG] [Thread-77196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:50:07.606 [DEBUG] [Thread-77196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:50:07.608 [DEBUG] [Thread-77196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:50:07.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:50:07.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:50:07.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:50:07.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:50:07.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:50:07.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:50:07.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:50:07.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:50:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:50:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.826142 -999.00  +10.30  28.11     90   +8.80 1 3 1 3 1     0    0 0.84 -34.13 ----- 30.9 28.1 332.9 46.9 11.8 -3.7 11.6 -3.5 11.4 -3.1 11.7 -2.3
2025-12-12T21:50:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:50:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:50:07.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.826142
2025-12-12T21:50:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:50:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:50:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:50:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:50:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:50:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:49:58', tmtdew=1.7, humidity=89.0, cloud=0.0, wind=39.89, temperature=10.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:49:38.669', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:50:07.628 [DEBUG] [Thread-77196] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:50:07.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:50:07.726 [DEBUG] [Thread-77199] [transport.py] [_log()] starting thread (client mode): 0xf5773a30
2025-12-12T21:50:07.726 [DEBUG] [Thread-77199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:50:07.741 [DEBUG] [Thread-77199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:50:07.741 [INFO] [Thread-77199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:50:07.749 [DEBUG] [Thread-77199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] client lang: <none>
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] server lang: <none>
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] kex follows: False
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] Compression: none
2025-12-12T21:50:07.750 [DEBUG] [Thread-77199] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:50:07.816 [DEBUG] [Thread-77199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:50:07.817 [DEBUG] [Thread-77199] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:50:07.817 [DEBUG] [Thread-77199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:50:07.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:50:07.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:50:07.872 [DEBUG] [Thread-77199] [transport.py] [_log()] userauth is OK
2025-12-12T21:50:07.873 [DEBUG] [Thread-77199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:50:07.873 [DEBUG] [Thread-77199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:50:07.873 [DEBUG] [Thread-77199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:50:07.873 [DEBUG] [Thread-77199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:50:07.891 [INFO] [Thread-77199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:50:07.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:50:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:50:08.707 [DEBUG] [Thread-77199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:50:08.707 [DEBUG] [Thread-77199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:50:08.755 [DEBUG] [Thread-77199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:50:08.755 [DEBUG] [Thread-77199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:50:08.764 [DEBUG] [Thread-77199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:50:08.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:50:08.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:50:08.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:50:08.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:50:08.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:50:08.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:50:08.797 [DEBUG] [Thread-77199] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:50:11.903 [DEBUG] [Thread-77201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:13.251 [DEBUG] [Thread-77202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:26.949 [DEBUG] [Thread-77203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:29.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:29.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:38.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:50:38.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:50:38.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:50:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 50, 30), 1.68, 89.08, 0.0, 41.45, 10.34, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:50:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:50:30
2025-12-12T21:50:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:50:39.769 [DEBUG] [Thread-77204] [transport.py] [_log()] starting thread (client mode): 0xf57c9e70
2025-12-12T21:50:39.769 [DEBUG] [Thread-77204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:50:39.789 [DEBUG] [Thread-77204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:50:39.789 [INFO] [Thread-77204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] client lang: <none>
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] server lang: <none>
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] kex follows: False
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] Compression: none
2025-12-12T21:50:39.792 [DEBUG] [Thread-77204] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:50:39.808 [DEBUG] [Thread-77204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:50:39.809 [DEBUG] [Thread-77204] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:50:39.809 [DEBUG] [Thread-77204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:50:39.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:50:39.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:50:39.811 [DEBUG] [Thread-77204] [transport.py] [_log()] userauth is OK
2025-12-12T21:50:39.811 [DEBUG] [Thread-77204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:50:39.811 [DEBUG] [Thread-77204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:50:39.811 [DEBUG] [Thread-77204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:50:39.812 [DEBUG] [Thread-77204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:50:39.837 [INFO] [Thread-77204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:50:39.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:50:40.425 [DEBUG] [Thread-77204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:50:40.425 [DEBUG] [Thread-77204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:50:40.425 [DEBUG] [Thread-77204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:50:40.466 [DEBUG] [Thread-77204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:50:40.466 [DEBUG] [Thread-77204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:50:40.469 [DEBUG] [Thread-77204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:50:40.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:50:40.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:50:40.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:50:40.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:50:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:50:40.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:50:40.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:50:40.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:50:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:50:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.826836 -999.00  +10.40  38.52     89   +8.80 1 3 2 3 1     0    0 0.90 -31.60 ----- 30.6 38.5 314.6 43.1 11.8 -3.8 11.7 -3.3 11.4 -3.9 11.7 -3.1
2025-12-12T21:50:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:50:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:50:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.826836
2025-12-12T21:50:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:50:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:50:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:50:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:50:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:50:40.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:50:30', tmtdew=1.68, humidity=89.08, cloud=0.0, wind=41.45, temperature=10.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:50:38.630', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:50:40.495 [DEBUG] [Thread-77204] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:50:40.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:50:40.592 [DEBUG] [Thread-77207] [transport.py] [_log()] starting thread (client mode): 0xf57cad40
2025-12-12T21:50:40.592 [DEBUG] [Thread-77207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:50:40.607 [DEBUG] [Thread-77207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:50:40.607 [INFO] [Thread-77207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:50:40.614 [DEBUG] [Thread-77207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:50:40.614 [DEBUG] [Thread-77207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:50:40.614 [DEBUG] [Thread-77207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:50:40.614 [DEBUG] [Thread-77207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:40.614 [DEBUG] [Thread-77207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] client lang: <none>
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] server lang: <none>
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] kex follows: False
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] Compression: none
2025-12-12T21:50:40.615 [DEBUG] [Thread-77207] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:50:40.676 [DEBUG] [Thread-77207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:50:40.676 [DEBUG] [Thread-77207] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:50:40.677 [DEBUG] [Thread-77207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:50:40.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:50:40.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:50:40.733 [DEBUG] [Thread-77207] [transport.py] [_log()] userauth is OK
2025-12-12T21:50:40.733 [DEBUG] [Thread-77207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:50:40.734 [DEBUG] [Thread-77207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:50:40.734 [DEBUG] [Thread-77207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:50:40.734 [DEBUG] [Thread-77207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:50:40.754 [INFO] [Thread-77207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:50:40.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:50:40.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:50:41.584 [DEBUG] [Thread-77207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:50:41.584 [DEBUG] [Thread-77207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:50:41.632 [DEBUG] [Thread-77207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:50:41.632 [DEBUG] [Thread-77207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:50:41.641 [DEBUG] [Thread-77207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:50:41.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:50:41.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:50:41.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:50:41.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:50:41.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:50:41.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:50:41.674 [DEBUG] [Thread-77207] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:50:41.978 [DEBUG] [Thread-77209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:50:57.023 [DEBUG] [Thread-77210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:11.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:51:11.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:51:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:51:12.049 [DEBUG] [Thread-77211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 51, 2), 1.67, 89.16, 0.0, 42.98, 10.34, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:51:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:51:02
2025-12-12T21:51:12.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:51:12.665 [DEBUG] [Thread-77212] [transport.py] [_log()] starting thread (client mode): 0xf57c9840
2025-12-12T21:51:12.665 [DEBUG] [Thread-77212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:51:12.685 [DEBUG] [Thread-77212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:51:12.685 [INFO] [Thread-77212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] client lang: <none>
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] server lang: <none>
2025-12-12T21:51:12.688 [DEBUG] [Thread-77212] [transport.py] [_log()] kex follows: False
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] Compression: none
2025-12-12T21:51:12.689 [DEBUG] [Thread-77212] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:51:12.697 [DEBUG] [Thread-77212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:51:12.697 [DEBUG] [Thread-77212] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:51:12.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:51:12.697 [DEBUG] [Thread-77212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:51:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:51:12.698 [DEBUG] [Thread-77212] [transport.py] [_log()] userauth is OK
2025-12-12T21:51:12.698 [DEBUG] [Thread-77212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:51:12.698 [DEBUG] [Thread-77212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:51:12.698 [DEBUG] [Thread-77212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:51:12.698 [DEBUG] [Thread-77212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:51:12.710 [INFO] [Thread-77212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:51:12.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:51:13.285 [DEBUG] [Thread-77212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:51:13.285 [DEBUG] [Thread-77212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:51:13.285 [DEBUG] [Thread-77212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:51:13.326 [DEBUG] [Thread-77212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:51:13.326 [DEBUG] [Thread-77212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:51:13.327 [DEBUG] [Thread-77214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:13.328 [DEBUG] [Thread-77212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:51:13.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:51:13.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:51:13.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:51:13.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:51:13.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:51:13.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:51:13.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.827183 -999.00  +10.40  42.56     89   +8.80 1 3 2 3 1     0    0 0.94 -28.64 ..E.. 37.7 42.6 314.6 48.6 11.8 -2.8 11.7 -2.8 11.4 -2.4 11.7 -2.1
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.827183
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:51:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:51:02', tmtdew=1.67, humidity=89.16, cloud=0.0, wind=42.98, temperature=10.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:51:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:51:13.347 [DEBUG] [Thread-77212] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:51:13.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:51:13.432 [DEBUG] [Thread-77216] [transport.py] [_log()] starting thread (client mode): 0xf5770be0
2025-12-12T21:51:13.432 [DEBUG] [Thread-77216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:51:13.448 [DEBUG] [Thread-77216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:51:13.448 [INFO] [Thread-77216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:51:13.455 [DEBUG] [Thread-77216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] client lang: <none>
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] server lang: <none>
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] kex follows: False
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] Compression: none
2025-12-12T21:51:13.456 [DEBUG] [Thread-77216] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:51:13.513 [DEBUG] [Thread-77216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:51:13.514 [DEBUG] [Thread-77216] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:51:13.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:51:13.515 [DEBUG] [Thread-77216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:51:13.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:51:13.570 [DEBUG] [Thread-77216] [transport.py] [_log()] userauth is OK
2025-12-12T21:51:13.570 [DEBUG] [Thread-77216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:51:13.570 [DEBUG] [Thread-77216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:51:13.570 [DEBUG] [Thread-77216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:51:13.571 [DEBUG] [Thread-77216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:51:13.590 [INFO] [Thread-77216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:51:13.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:51:13.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:51:14.445 [DEBUG] [Thread-77216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:51:14.445 [DEBUG] [Thread-77216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:51:14.493 [DEBUG] [Thread-77216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:51:14.493 [DEBUG] [Thread-77216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:51:14.502 [DEBUG] [Thread-77216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:51:14.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:51:14.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:51:14.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:51:14.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:51:14.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:51:14.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:51:14.536 [DEBUG] [Thread-77216] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:51:27.079 [DEBUG] [Thread-77218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:29.966 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:29.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:42.124 [DEBUG] [Thread-77219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:51:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:51:44.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:51:44.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:51:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 51, 34), 1.62, 89.65, 0.0, 39.13, 10.27, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:51:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:51:34
2025-12-12T21:51:45.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:51:45.558 [DEBUG] [Thread-77220] [transport.py] [_log()] starting thread (client mode): 0xf5772b60
2025-12-12T21:51:45.558 [DEBUG] [Thread-77220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:51:45.579 [DEBUG] [Thread-77220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:51:45.579 [INFO] [Thread-77220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] client lang: <none>
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] server lang: <none>
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] kex follows: False
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:51:45.582 [DEBUG] [Thread-77220] [transport.py] [_log()] Compression: none
2025-12-12T21:51:45.583 [DEBUG] [Thread-77220] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:51:45.599 [DEBUG] [Thread-77220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:51:45.599 [DEBUG] [Thread-77220] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:51:45.599 [DEBUG] [Thread-77220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:51:45.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:51:45.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:51:45.600 [DEBUG] [Thread-77220] [transport.py] [_log()] userauth is OK
2025-12-12T21:51:45.600 [DEBUG] [Thread-77220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:51:45.600 [DEBUG] [Thread-77220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:51:45.600 [DEBUG] [Thread-77220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:51:45.600 [DEBUG] [Thread-77220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:51:45.619 [INFO] [Thread-77220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:51:45.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:51:46.263 [DEBUG] [Thread-77220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:51:46.263 [DEBUG] [Thread-77220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:51:46.264 [DEBUG] [Thread-77220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:51:46.305 [DEBUG] [Thread-77220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:51:46.305 [DEBUG] [Thread-77220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:51:46.307 [DEBUG] [Thread-77220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:51:46.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:51:46.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:51:46.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:51:46.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:51:46.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:51:46.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:51:46.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.827183 -999.00  +10.40  42.56     89   +8.80 1 3 2 3 1     0    0 0.94 -28.64 ..E.. 37.7 42.6 314.6 48.6 11.8 -2.8 11.7 -2.8 11.4 -2.4 11.7 -2.1
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.827183
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:51:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:51:34', tmtdew=1.62, humidity=89.65, cloud=0.0, wind=39.13, temperature=10.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:51:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:51:46.328 [DEBUG] [Thread-77220] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:51:46.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:51:46.414 [DEBUG] [Thread-77223] [transport.py] [_log()] starting thread (client mode): 0xf5770a30
2025-12-12T21:51:46.414 [DEBUG] [Thread-77223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:51:46.428 [DEBUG] [Thread-77223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:51:46.429 [INFO] [Thread-77223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] client lang: <none>
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] server lang: <none>
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] kex follows: False
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:51:46.436 [DEBUG] [Thread-77223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:51:46.437 [DEBUG] [Thread-77223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:51:46.437 [DEBUG] [Thread-77223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:51:46.437 [DEBUG] [Thread-77223] [transport.py] [_log()] Compression: none
2025-12-12T21:51:46.437 [DEBUG] [Thread-77223] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:51:46.493 [DEBUG] [Thread-77223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:51:46.493 [DEBUG] [Thread-77223] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:51:46.493 [DEBUG] [Thread-77223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:51:46.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:51:46.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:51:46.550 [DEBUG] [Thread-77223] [transport.py] [_log()] userauth is OK
2025-12-12T21:51:46.550 [DEBUG] [Thread-77223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:51:46.550 [DEBUG] [Thread-77223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:51:46.550 [DEBUG] [Thread-77223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:51:46.550 [DEBUG] [Thread-77223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:51:46.564 [INFO] [Thread-77223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:51:46.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:51:46.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:51:47.426 [DEBUG] [Thread-77223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:51:47.426 [DEBUG] [Thread-77223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:51:47.474 [DEBUG] [Thread-77223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:51:47.474 [DEBUG] [Thread-77223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:51:47.483 [DEBUG] [Thread-77223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:51:47.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:51:47.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:51:47.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:51:47.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:51:47.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:51:47.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:51:47.514 [DEBUG] [Thread-77223] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:51:57.154 [DEBUG] [Thread-77225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:12.201 [DEBUG] [Thread-77226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:13.399 [DEBUG] [Thread-77227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:17.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:52:17.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:52:17.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:52:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 52, 6), 1.6, 89.78, 0.0, 37.85, 10.32, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:52:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:52:06
2025-12-12T21:52:18.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:52:18.484 [DEBUG] [Thread-77228] [transport.py] [_log()] starting thread (client mode): 0xf57717e0
2025-12-12T21:52:18.484 [DEBUG] [Thread-77228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:52:18.505 [DEBUG] [Thread-77228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:52:18.505 [INFO] [Thread-77228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:18.509 [DEBUG] [Thread-77228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] client lang: <none>
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] server lang: <none>
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] kex follows: False
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] Compression: none
2025-12-12T21:52:18.510 [DEBUG] [Thread-77228] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:52:18.527 [DEBUG] [Thread-77228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:52:18.528 [DEBUG] [Thread-77228] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:52:18.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:52:18.529 [DEBUG] [Thread-77228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:52:18.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:52:18.531 [DEBUG] [Thread-77228] [transport.py] [_log()] userauth is OK
2025-12-12T21:52:18.531 [DEBUG] [Thread-77228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:52:18.532 [DEBUG] [Thread-77228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:52:18.532 [DEBUG] [Thread-77228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:52:18.532 [DEBUG] [Thread-77228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:52:18.567 [INFO] [Thread-77228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:52:18.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:52:19.140 [DEBUG] [Thread-77228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:52:19.140 [DEBUG] [Thread-77228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:52:19.141 [DEBUG] [Thread-77228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:52:19.181 [DEBUG] [Thread-77228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:52:19.181 [DEBUG] [Thread-77228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:52:19.184 [DEBUG] [Thread-77228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:52:19.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:52:19.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:52:19.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:52:19.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:52:19.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:52:19.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:52:19.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:52:19.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:52:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:52:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.827531 -999.00  +10.30  39.21     89   +8.70 1 3 2 3 1     0    0 1.03 -25.85 ----- 34.8 39.2 313.6 50.0 11.8 -4.6 11.7 -8.7 11.3 -3.0 11.7 -2.7
2025-12-12T21:52:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:52:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:52:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.827531
2025-12-12T21:52:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:52:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:52:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:52:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:52:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:52:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:52:06', tmtdew=1.6, humidity=89.78, cloud=0.0, wind=37.85, temperature=10.32, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:51:38.678', atlas_cloud=3, atlas_rain=1, zp_data=[0.28774999999999906, 0.2732500000000009, 0.21224999999999916, 0.1999999999999993, 0.2814999999999994, 0.3382500000000004, 0.43900000000000006, 0.5427500000000007, 0.4324999999999992, 0.46799999999999997, 0.41825000000000045, 0.39000000000000057, 0.3439999999999994, 0.37324999999999875, 0.6129999999999995, 0.9490000000000007, 0.7742499999999994, 0.7214999999999998, 0.5030000000000001, 0.4972499999999993, 0.5679999999999987, 0.3147499999999983, 0.6402500000000009, 1.8377499999999998, 1.5149999999999988, 0.6950000000000003, 0.8122499999999997, nan, nan, 0.9740000000000011, 0.7520000000000007, 2.115, 2.3447499999999994], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:52:19.210 [DEBUG] [Thread-77228] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:52:19.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:52:19.303 [DEBUG] [Thread-77231] [transport.py] [_log()] starting thread (client mode): 0xf57cae90
2025-12-12T21:52:19.303 [DEBUG] [Thread-77231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:52:19.318 [DEBUG] [Thread-77231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:52:19.318 [INFO] [Thread-77231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:52:19.325 [DEBUG] [Thread-77231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] client lang: <none>
2025-12-12T21:52:19.326 [DEBUG] [Thread-77231] [transport.py] [_log()] server lang: <none>
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] kex follows: False
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] Compression: none
2025-12-12T21:52:19.327 [DEBUG] [Thread-77231] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:52:19.385 [DEBUG] [Thread-77231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:52:19.385 [DEBUG] [Thread-77231] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:52:19.386 [DEBUG] [Thread-77231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:52:19.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:52:19.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:52:19.443 [DEBUG] [Thread-77231] [transport.py] [_log()] userauth is OK
2025-12-12T21:52:19.443 [DEBUG] [Thread-77231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:52:19.444 [DEBUG] [Thread-77231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:52:19.444 [DEBUG] [Thread-77231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:52:19.444 [DEBUG] [Thread-77231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:52:19.463 [INFO] [Thread-77231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:52:19.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:52:19.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:52:20.298 [DEBUG] [Thread-77231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:52:20.298 [DEBUG] [Thread-77231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:52:20.346 [DEBUG] [Thread-77231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:52:20.346 [DEBUG] [Thread-77231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:52:20.355 [DEBUG] [Thread-77231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:52:20.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:52:20.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:52:20.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:52:20.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:52:20.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:52:20.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:52:20.399 [DEBUG] [Thread-77231] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:52:27.228 [DEBUG] [Thread-77233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:30.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:30.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:42.261 [DEBUG] [Thread-77234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:52:50.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:52:50.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:52:50.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:52:51.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 52, 38), 1.64, 89.83, 0.0, 36.61, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:52:51.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:52:38
2025-12-12T21:52:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:52:51.370 [DEBUG] [Thread-77235] [transport.py] [_log()] starting thread (client mode): 0xf57c8e80
2025-12-12T21:52:51.370 [DEBUG] [Thread-77235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:52:51.390 [DEBUG] [Thread-77235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:52:51.390 [INFO] [Thread-77235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] client lang: <none>
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] server lang: <none>
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] kex follows: False
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] Compression: none
2025-12-12T21:52:51.393 [DEBUG] [Thread-77235] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:52:51.412 [DEBUG] [Thread-77235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:52:51.412 [DEBUG] [Thread-77235] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:52:51.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:52:51.413 [DEBUG] [Thread-77235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:52:51.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:52:51.415 [DEBUG] [Thread-77235] [transport.py] [_log()] userauth is OK
2025-12-12T21:52:51.415 [DEBUG] [Thread-77235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:52:51.415 [DEBUG] [Thread-77235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:52:51.415 [DEBUG] [Thread-77235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:52:51.415 [DEBUG] [Thread-77235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:52:51.429 [INFO] [Thread-77235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:52:51.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:52:52.025 [DEBUG] [Thread-77235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:52:52.026 [DEBUG] [Thread-77235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:52:52.026 [DEBUG] [Thread-77235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:52:52.067 [DEBUG] [Thread-77235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:52:52.067 [DEBUG] [Thread-77235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:52:52.070 [DEBUG] [Thread-77235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:52:52.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:52:52.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:52:52.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:52:52.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:52:52.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:52:52.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:52:52.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:52:52.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:52:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:52:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.827878 -999.00  +10.30  32.82     89   +8.70 1 3 2 3 1     0    0 1.03 -24.83 ----- 32.2 32.8 326.8 40.8 11.8 -10.3 11.6 -8.0 11.3 -13.0 11.6 -11.9
2025-12-12T21:52:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:52:52.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:52:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.827878
2025-12-12T21:52:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:52:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:52:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:52:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:52:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:52:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:52:38', tmtdew=1.64, humidity=89.83, cloud=0.0, wind=36.61, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:52:08.659', atlas_cloud=3, atlas_rain=1, zp_data=[1.1447500000000002, 1.914250000000001, nan, nan, nan, 1.263250000000001, 0.9909999999999997, 1.3172500000000014, 1.3984999999999994, 1.7320000000000002, 2.4907500000000002, nan, nan, 1.7402499999999996, nan, nan, 1.86475, 1.6879999999999997, nan, nan, nan, nan, nan, nan, nan, 1.6865000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:52:52.095 [DEBUG] [Thread-77235] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:52:52.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:52:52.189 [DEBUG] [Thread-77238] [transport.py] [_log()] starting thread (client mode): 0xf57c8670
2025-12-12T21:52:52.189 [DEBUG] [Thread-77238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:52:52.205 [DEBUG] [Thread-77238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:52:52.205 [INFO] [Thread-77238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] client lang: <none>
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] server lang: <none>
2025-12-12T21:52:52.213 [DEBUG] [Thread-77238] [transport.py] [_log()] kex follows: False
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] Compression: none
2025-12-12T21:52:52.214 [DEBUG] [Thread-77238] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:52:52.271 [DEBUG] [Thread-77238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:52:52.272 [DEBUG] [Thread-77238] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:52:52.272 [DEBUG] [Thread-77238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:52:52.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:52:52.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:52:52.328 [DEBUG] [Thread-77238] [transport.py] [_log()] userauth is OK
2025-12-12T21:52:52.328 [DEBUG] [Thread-77238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:52:52.328 [DEBUG] [Thread-77238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:52:52.328 [DEBUG] [Thread-77238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:52:52.328 [DEBUG] [Thread-77238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:52:52.347 [INFO] [Thread-77238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:52:52.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:52:52.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:52:53.177 [DEBUG] [Thread-77238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:52:53.177 [DEBUG] [Thread-77238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:52:53.225 [DEBUG] [Thread-77238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:52:53.225 [DEBUG] [Thread-77238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:52:53.234 [DEBUG] [Thread-77238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:52:53.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:52:53.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:52:53.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:52:53.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:52:53.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:52:53.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:52:53.270 [DEBUG] [Thread-77238] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:52:57.291 [DEBUG] [Thread-77240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:12.354 [DEBUG] [Thread-77241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:13.474 [DEBUG] [Thread-77242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:23.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:53:23.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:53:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:53:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 53, 10), 1.64, 89.85, 0.0, 37.6, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:53:23.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:53:10
2025-12-12T21:53:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:53:24.248 [DEBUG] [Thread-77243] [transport.py] [_log()] starting thread (client mode): 0xf5773310
2025-12-12T21:53:24.248 [DEBUG] [Thread-77243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:53:24.268 [DEBUG] [Thread-77243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:53:24.268 [INFO] [Thread-77243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:24.269 [DEBUG] [Thread-77243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] client lang: <none>
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] server lang: <none>
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] kex follows: False
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] Compression: none
2025-12-12T21:53:24.270 [DEBUG] [Thread-77243] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:53:24.280 [DEBUG] [Thread-77243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:53:24.280 [DEBUG] [Thread-77243] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:53:24.281 [DEBUG] [Thread-77243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:53:24.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:53:24.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:53:24.283 [DEBUG] [Thread-77243] [transport.py] [_log()] userauth is OK
2025-12-12T21:53:24.283 [DEBUG] [Thread-77243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:53:24.283 [DEBUG] [Thread-77243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:53:24.283 [DEBUG] [Thread-77243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:53:24.283 [DEBUG] [Thread-77243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:53:24.306 [INFO] [Thread-77243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:53:24.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:53:24.950 [DEBUG] [Thread-77243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:53:24.950 [DEBUG] [Thread-77243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:53:24.951 [DEBUG] [Thread-77243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:53:24.992 [DEBUG] [Thread-77243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:53:24.992 [DEBUG] [Thread-77243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:53:24.995 [DEBUG] [Thread-77243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:53:25.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:53:25.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:53:25.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:53:25.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:53:25.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:53:25.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:53:25.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:53:25.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:53:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:53:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.828225 -999.00  +10.30  36.48     89   +8.70 1 3 2 3 1     0    0 1.05 -23.29 ----- 36.8 36.5 326.0 45.9 11.8 -4.4 11.6 -3.2 11.3 -5.1 11.7 -5.2
2025-12-12T21:53:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:53:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:53:25.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.828225
2025-12-12T21:53:25.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:53:25.017 [DEBUG] [Thread-77243] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:53:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:53:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:53:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:53:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:53:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:53:10', tmtdew=1.64, humidity=89.85, cloud=0.0, wind=37.6, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:52:38.640', atlas_cloud=3, atlas_rain=1, zp_data=[1.1447500000000002, 1.914250000000001, nan, nan, nan, 1.263250000000001, 0.9909999999999997, 1.3172500000000014, 1.3984999999999994, 1.7320000000000002, 2.4907500000000002, nan, nan, 1.7402499999999996, nan, nan, 1.86475, 1.6879999999999997, nan, nan, nan, nan, nan, nan, nan, 1.6865000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:53:25.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:53:25.115 [DEBUG] [Thread-77246] [transport.py] [_log()] starting thread (client mode): 0xf5772a40
2025-12-12T21:53:25.116 [DEBUG] [Thread-77246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:53:25.131 [DEBUG] [Thread-77246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:53:25.131 [INFO] [Thread-77246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:53:25.138 [DEBUG] [Thread-77246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:53:25.138 [DEBUG] [Thread-77246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] client lang: <none>
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] server lang: <none>
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] kex follows: False
2025-12-12T21:53:25.139 [DEBUG] [Thread-77246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:53:25.140 [DEBUG] [Thread-77246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:53:25.140 [DEBUG] [Thread-77246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:53:25.140 [DEBUG] [Thread-77246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:53:25.140 [DEBUG] [Thread-77246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:53:25.140 [DEBUG] [Thread-77246] [transport.py] [_log()] Compression: none
2025-12-12T21:53:25.140 [DEBUG] [Thread-77246] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:53:25.198 [DEBUG] [Thread-77246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:53:25.199 [DEBUG] [Thread-77246] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:53:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:53:25.200 [DEBUG] [Thread-77246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:53:25.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:53:25.261 [DEBUG] [Thread-77246] [transport.py] [_log()] userauth is OK
2025-12-12T21:53:25.261 [DEBUG] [Thread-77246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:53:25.261 [DEBUG] [Thread-77246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:53:25.261 [DEBUG] [Thread-77246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:53:25.261 [DEBUG] [Thread-77246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:53:25.280 [INFO] [Thread-77246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:53:25.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:53:25.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:53:26.140 [DEBUG] [Thread-77246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:53:26.140 [DEBUG] [Thread-77246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:53:26.188 [DEBUG] [Thread-77246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:53:26.188 [DEBUG] [Thread-77246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:53:26.197 [DEBUG] [Thread-77246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:53:26.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:53:26.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:53: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') -> 00000000
2025-12-12T21:53:26.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:53:26.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:53:26.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:53:26.232 [DEBUG] [Thread-77246] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:53:27.381 [DEBUG] [Thread-77248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:30.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:30.371 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:42.423 [DEBUG] [Thread-77249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:56.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:53:56.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:53:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:53:56.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 53, 42), 1.59, 89.86, 0.0, 44.74, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:53:56.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:53:42
2025-12-12T21:53:57.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:53:57.184 [DEBUG] [Thread-77250] [transport.py] [_log()] starting thread (client mode): 0xf5773250
2025-12-12T21:53:57.184 [DEBUG] [Thread-77250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:53:57.205 [DEBUG] [Thread-77250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:53:57.205 [INFO] [Thread-77250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:53:57.207 [DEBUG] [Thread-77250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:53:57.207 [DEBUG] [Thread-77250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:53:57.207 [DEBUG] [Thread-77250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:53:57.207 [DEBUG] [Thread-77250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:57.207 [DEBUG] [Thread-77250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:57.207 [DEBUG] [Thread-77250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] client lang: <none>
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] server lang: <none>
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] kex follows: False
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] Compression: none
2025-12-12T21:53:57.208 [DEBUG] [Thread-77250] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:53:57.222 [DEBUG] [Thread-77250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:53:57.222 [DEBUG] [Thread-77250] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:53:57.223 [DEBUG] [Thread-77250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:53:57.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:53:57.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:53:57.224 [DEBUG] [Thread-77250] [transport.py] [_log()] userauth is OK
2025-12-12T21:53:57.225 [DEBUG] [Thread-77250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:53:57.225 [DEBUG] [Thread-77250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:53:57.225 [DEBUG] [Thread-77250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:53:57.225 [DEBUG] [Thread-77250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:53:57.243 [INFO] [Thread-77250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:53:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:53:57.450 [DEBUG] [Thread-77252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:53:57.931 [DEBUG] [Thread-77250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:53:57.931 [DEBUG] [Thread-77250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:53:57.932 [DEBUG] [Thread-77250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:53:57.972 [DEBUG] [Thread-77250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:53:57.972 [DEBUG] [Thread-77250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:53:57.975 [DEBUG] [Thread-77250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:53:57.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:53:57.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:53:57.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:53:57.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:53:57.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:53:58.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:53:58.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:53:58.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:53:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:53:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.828572 -999.00  +10.30  33.97     90   +8.80 1 3 2 3 1     0    0 1.05 -23.65 ..e.. 35.3 34.0 328.2 43.4 11.8 -2.2 11.7 -2.4 11.3 -2.0 11.7 -1.8
2025-12-12T21:53:58.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:53:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:53:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.828572
2025-12-12T21:53:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:53:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:53:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:53:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:53:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:53:58.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:53:42', tmtdew=1.59, humidity=89.86, cloud=0.0, wind=44.74, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:53:08.621', atlas_cloud=3, atlas_rain=1, zp_data=[1.1447500000000002, 1.914250000000001, nan, nan, nan, 1.263250000000001, 0.9909999999999997, 1.3172500000000014, 1.3984999999999994, 1.7320000000000002, 2.4907500000000002, nan, nan, 1.7402499999999996, nan, nan, 1.86475, 1.6879999999999997, nan, nan, nan, nan, nan, nan, nan, 1.6865000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:53:58.002 [DEBUG] [Thread-77250] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:53:58.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:53:58.100 [DEBUG] [Thread-77254] [transport.py] [_log()] starting thread (client mode): 0xf57ca080
2025-12-12T21:53:58.100 [DEBUG] [Thread-77254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:53:58.116 [DEBUG] [Thread-77254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:53:58.116 [INFO] [Thread-77254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:53:58.124 [DEBUG] [Thread-77254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:53:58.124 [DEBUG] [Thread-77254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:53:58.124 [DEBUG] [Thread-77254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:53:58.124 [DEBUG] [Thread-77254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:58.124 [DEBUG] [Thread-77254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:53:58.124 [DEBUG] [Thread-77254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] client lang: <none>
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] server lang: <none>
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] kex follows: False
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] Compression: none
2025-12-12T21:53:58.125 [DEBUG] [Thread-77254] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:53:58.180 [DEBUG] [Thread-77254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:53:58.181 [DEBUG] [Thread-77254] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:53:58.181 [DEBUG] [Thread-77254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:53:58.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:53:58.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:53:58.238 [DEBUG] [Thread-77254] [transport.py] [_log()] userauth is OK
2025-12-12T21:53:58.238 [DEBUG] [Thread-77254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:53:58.238 [DEBUG] [Thread-77254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:53:58.238 [DEBUG] [Thread-77254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:53:58.238 [DEBUG] [Thread-77254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:53:58.258 [INFO] [Thread-77254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:53:58.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:53:58.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:53:59.108 [DEBUG] [Thread-77254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:53:59.108 [DEBUG] [Thread-77254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:53:59.156 [DEBUG] [Thread-77254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:53:59.156 [DEBUG] [Thread-77254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:53:59.165 [DEBUG] [Thread-77254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:53:59.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:53:59.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:53:59.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:53:59.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:53:59.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:53:59.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:53:59.200 [DEBUG] [Thread-77254] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:54:12.481 [DEBUG] [Thread-77256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:54:13.548 [DEBUG] [Thread-77257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:54:27.533 [DEBUG] [Thread-77258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:54:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:54:29.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:54:29.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:54:29.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 54, 14), 1.59, 89.86, 0.0, 41.96, 10.35, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:54:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:54:14
2025-12-12T21:54:30.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:54:30.163 [DEBUG] [Thread-77259] [transport.py] [_log()] starting thread (client mode): 0xf57c9990
2025-12-12T21:54:30.163 [DEBUG] [Thread-77259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:54:30.183 [DEBUG] [Thread-77259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:54:30.183 [INFO] [Thread-77259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] client lang: <none>
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] server lang: <none>
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] kex follows: False
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] Compression: none
2025-12-12T21:54:30.185 [DEBUG] [Thread-77259] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:54:30.205 [DEBUG] [Thread-77259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:54:30.205 [DEBUG] [Thread-77259] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:54:30.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:54:30.206 [DEBUG] [Thread-77259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:54:30.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:54:30.208 [DEBUG] [Thread-77259] [transport.py] [_log()] userauth is OK
2025-12-12T21:54:30.209 [DEBUG] [Thread-77259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:54:30.209 [DEBUG] [Thread-77259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:54:30.209 [DEBUG] [Thread-77259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:54:30.209 [DEBUG] [Thread-77259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:54:30.245 [INFO] [Thread-77259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:54:30.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:54:30.579 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:54:30.581 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:54:30.834 [DEBUG] [Thread-77259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:54:30.834 [DEBUG] [Thread-77259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:54:30.834 [DEBUG] [Thread-77259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:54:30.875 [DEBUG] [Thread-77259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:54:30.875 [DEBUG] [Thread-77259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:54:30.878 [DEBUG] [Thread-77259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:54:30.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:54:30.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:54:30.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:54:30.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:54:30.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:54:30.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:54:30.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:54:30.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:54:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:54:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.828920 -999.00  +10.30  34.44     90   +8.70 1 3 2 3 1     0    0 1.11 -22.08 ..e.. 29.4 34.4 314.2 45.4 11.8 -2.3 11.6 -2.1 11.3 -2.4 11.7 -1.9
2025-12-12T21:54:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:54:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:54:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.828920
2025-12-12T21:54:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:54:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:54:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:54:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:54:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:54:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:54:14', tmtdew=1.59, humidity=89.86, cloud=0.0, wind=41.96, temperature=10.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:53:38.688', atlas_cloud=3, atlas_rain=1, zp_data=[1.1447500000000002, 1.914250000000001, nan, nan, nan, 1.263250000000001, 0.9909999999999997, 1.3172500000000014, 1.3984999999999994, 1.7320000000000002, 2.4907500000000002, nan, nan, 1.7402499999999996, nan, nan, 1.86475, 1.6879999999999997, nan, nan, nan, nan, nan, nan, nan, 1.6865000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:54:30.904 [DEBUG] [Thread-77259] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:54:30.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:54:31.000 [DEBUG] [Thread-77262] [transport.py] [_log()] starting thread (client mode): 0xf57cb610
2025-12-12T21:54:31.000 [DEBUG] [Thread-77262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:54:31.015 [DEBUG] [Thread-77262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:54:31.015 [INFO] [Thread-77262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:54:31.023 [DEBUG] [Thread-77262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] client lang: <none>
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] server lang: <none>
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] kex follows: False
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] Compression: none
2025-12-12T21:54:31.024 [DEBUG] [Thread-77262] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:54:31.081 [DEBUG] [Thread-77262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:54:31.081 [DEBUG] [Thread-77262] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:54:31.082 [DEBUG] [Thread-77262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:54:31.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:54:31.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:54:31.137 [DEBUG] [Thread-77262] [transport.py] [_log()] userauth is OK
2025-12-12T21:54:31.137 [DEBUG] [Thread-77262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:54:31.138 [DEBUG] [Thread-77262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:54:31.138 [DEBUG] [Thread-77262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:54:31.138 [DEBUG] [Thread-77262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:54:31.157 [INFO] [Thread-77262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:54:31.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:54:31.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:54:31.998 [DEBUG] [Thread-77262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:54:31.998 [DEBUG] [Thread-77262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:54:32.046 [DEBUG] [Thread-77262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:54:32.046 [DEBUG] [Thread-77262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:54:32.055 [DEBUG] [Thread-77262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:54:32.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:54:32.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:54:32.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:54:32.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:54:32.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:54:32.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:54:32.090 [DEBUG] [Thread-77262] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:54:42.561 [DEBUG] [Thread-77264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:54:57.603 [DEBUG] [Thread-77265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:55:02.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:55:02.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:55:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 54, 46), 1.57, 89.95, 0.0, 42.4, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:55:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:54:46
2025-12-12T21:55:02.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:55:03.109 [DEBUG] [Thread-77266] [transport.py] [_log()] starting thread (client mode): 0xf57cb640
2025-12-12T21:55:03.109 [DEBUG] [Thread-77266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:55:03.129 [DEBUG] [Thread-77266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:55:03.129 [INFO] [Thread-77266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] client lang: <none>
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] server lang: <none>
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] kex follows: False
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] Compression: none
2025-12-12T21:55:03.133 [DEBUG] [Thread-77266] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:55:03.148 [DEBUG] [Thread-77266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:55:03.148 [DEBUG] [Thread-77266] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:55:03.149 [DEBUG] [Thread-77266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:55:03.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:55:03.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:55:03.149 [DEBUG] [Thread-77266] [transport.py] [_log()] userauth is OK
2025-12-12T21:55:03.149 [DEBUG] [Thread-77266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:55:03.149 [DEBUG] [Thread-77266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:55:03.149 [DEBUG] [Thread-77266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:55:03.149 [DEBUG] [Thread-77266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:55:03.164 [INFO] [Thread-77266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:55:03.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:55:03.891 [DEBUG] [Thread-77266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:55:03.891 [DEBUG] [Thread-77266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:55:03.891 [DEBUG] [Thread-77266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:55:03.932 [DEBUG] [Thread-77266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:55:03.932 [DEBUG] [Thread-77266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:55:03.934 [DEBUG] [Thread-77266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:55:03.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:55:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:55:03.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:55:03.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:55:03.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:55:03.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:55:03.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:55:03.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:55:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:55:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.829267 -999.00  +10.30  41.74     90   +8.80 1 3 2 3 1     0    0 1.07 -21.64 ..e.. 45.0 41.7 314.8 50.4 11.8 -2.4 11.6 -2.3 11.3 -2.0 11.7 -1.7
2025-12-12T21:55:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:55:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:55:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.829267
2025-12-12T21:55:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:55:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:55:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:55:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:55:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:55:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:54:46', tmtdew=1.57, humidity=89.95, cloud=0.0, wind=42.4, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:54:08.669', atlas_cloud=3, atlas_rain=1, zp_data=[1.1447500000000002, 1.914250000000001, nan, nan, nan, 1.263250000000001, 0.9909999999999997, 1.3172500000000014, 1.3984999999999994, 1.7320000000000002, 2.4907500000000002, nan, nan, 1.7402499999999996, nan, nan, 1.86475, 1.6879999999999997, nan, nan, nan, nan, nan, nan, nan, 1.6865000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:47:00')
2025-12-12T21:55:03.950 [DEBUG] [Thread-77266] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:55:04.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:55:04.046 [DEBUG] [Thread-77269] [transport.py] [_log()] starting thread (client mode): 0xf57c80a0
2025-12-12T21:55:04.046 [DEBUG] [Thread-77269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:55:04.061 [DEBUG] [Thread-77269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:55:04.061 [INFO] [Thread-77269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] client lang: <none>
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] server lang: <none>
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] kex follows: False
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] Compression: none
2025-12-12T21:55:04.068 [DEBUG] [Thread-77269] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:55:04.124 [DEBUG] [Thread-77269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:55:04.124 [DEBUG] [Thread-77269] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:55:04.124 [DEBUG] [Thread-77269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:55:04.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:55:04.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:55:04.182 [DEBUG] [Thread-77269] [transport.py] [_log()] userauth is OK
2025-12-12T21:55:04.182 [DEBUG] [Thread-77269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:55:04.182 [DEBUG] [Thread-77269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:55:04.182 [DEBUG] [Thread-77269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:55:04.182 [DEBUG] [Thread-77269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:55:04.195 [INFO] [Thread-77269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:55:04.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:55:04.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:55:05.087 [DEBUG] [Thread-77269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:55:05.087 [DEBUG] [Thread-77269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:55:05.139 [DEBUG] [Thread-77269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:55:05.139 [DEBUG] [Thread-77269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:55:05.149 [DEBUG] [Thread-77269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:55:05.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:55:05.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:55:05.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:55:05.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:55:05.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:55:05.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:55:05.193 [DEBUG] [Thread-77269] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:55:12.631 [DEBUG] [Thread-77271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:13.625 [DEBUG] [Thread-77272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:27.678 [DEBUG] [Thread-77273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:30.786 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:30.787 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:55:35.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:55:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:55:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 55, 18), 1.58, 89.91, 0.0, 41.82, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:55:35.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:55:18
2025-12-12T21:55:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:55:36.173 [DEBUG] [Thread-77274] [transport.py] [_log()] starting thread (client mode): 0xf57c88b0
2025-12-12T21:55:36.173 [DEBUG] [Thread-77274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:55:36.193 [DEBUG] [Thread-77274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:55:36.193 [INFO] [Thread-77274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:55:36.197 [DEBUG] [Thread-77274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] client lang: <none>
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] server lang: <none>
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] kex follows: False
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] Compression: none
2025-12-12T21:55:36.198 [DEBUG] [Thread-77274] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:55:36.215 [DEBUG] [Thread-77274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:55:36.215 [DEBUG] [Thread-77274] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:55:36.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:55:36.216 [DEBUG] [Thread-77274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:55:36.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:55:36.218 [DEBUG] [Thread-77274] [transport.py] [_log()] userauth is OK
2025-12-12T21:55:36.218 [DEBUG] [Thread-77274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:55:36.218 [DEBUG] [Thread-77274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:55:36.218 [DEBUG] [Thread-77274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:55:36.218 [DEBUG] [Thread-77274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:55:36.242 [INFO] [Thread-77274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:55:36.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:55:36.905 [DEBUG] [Thread-77274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:55:36.905 [DEBUG] [Thread-77274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:55:36.906 [DEBUG] [Thread-77274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:55:36.946 [DEBUG] [Thread-77274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:55:36.946 [DEBUG] [Thread-77274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:55:36.949 [DEBUG] [Thread-77274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:55:36.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:55:36.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:55:36.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:55:36.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:55:36.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:55:36.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:55:36.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:55:36.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:55:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:55:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.829961 -999.00  +10.30  36.26     90   +8.70 1 3 2 3 1     0    0 0.99 -23.35 ----- 30.9 36.3 317.8 55.0 11.8 -2.4 11.5 -2.3 11.3 -2.8 11.6 -2.0
2025-12-12T21:55:36.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:55:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:55:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.829961
2025-12-12T21:55:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:55:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:55:36.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:55:36.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:55:36.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:55:36.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:55:18', tmtdew=1.58, humidity=89.91, cloud=0.0, wind=41.82, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:55:08.630', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:55:36.974 [DEBUG] [Thread-77274] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:55:37.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:55:37.071 [DEBUG] [Thread-77277] [transport.py] [_log()] starting thread (client mode): 0xf578b130
2025-12-12T21:55:37.071 [DEBUG] [Thread-77277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:55:37.086 [DEBUG] [Thread-77277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:55:37.086 [INFO] [Thread-77277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:55:37.094 [DEBUG] [Thread-77277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:55:37.094 [DEBUG] [Thread-77277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:55:37.094 [DEBUG] [Thread-77277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:55:37.094 [DEBUG] [Thread-77277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] client lang: <none>
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] server lang: <none>
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] kex follows: False
2025-12-12T21:55:37.095 [DEBUG] [Thread-77277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:55:37.096 [DEBUG] [Thread-77277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:55:37.096 [DEBUG] [Thread-77277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:55:37.096 [DEBUG] [Thread-77277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:55:37.096 [DEBUG] [Thread-77277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:55:37.096 [DEBUG] [Thread-77277] [transport.py] [_log()] Compression: none
2025-12-12T21:55:37.096 [DEBUG] [Thread-77277] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:55:37.151 [DEBUG] [Thread-77277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:55:37.151 [DEBUG] [Thread-77277] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:55:37.152 [DEBUG] [Thread-77277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:55:37.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:55:37.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:55:37.206 [DEBUG] [Thread-77277] [transport.py] [_log()] userauth is OK
2025-12-12T21:55:37.206 [DEBUG] [Thread-77277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:55:37.206 [DEBUG] [Thread-77277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:55:37.206 [DEBUG] [Thread-77277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:55:37.206 [DEBUG] [Thread-77277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:55:37.220 [INFO] [Thread-77277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:55:37.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:55:37.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:55:38.059 [DEBUG] [Thread-77277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:55:38.060 [DEBUG] [Thread-77277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:55:38.108 [DEBUG] [Thread-77277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:55:38.108 [DEBUG] [Thread-77277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:55:38.117 [DEBUG] [Thread-77277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:55:38.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:55:38.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:55:38.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:55:38.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:55:38.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:55:38.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:55:38.151 [DEBUG] [Thread-77277] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:55:42.704 [DEBUG] [Thread-77279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:55:57.740 [DEBUG] [Thread-77280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:56:08.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:56:08.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:56:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 55, 50), 1.59, 89.86, 0.0, 48.15, 10.42, 1, 1, 0, 2, 1, 0),)
2025-12-12T21:56:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:55:50
2025-12-12T21:56:08.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:56:09.136 [DEBUG] [Thread-77281] [transport.py] [_log()] starting thread (client mode): 0xf578a1a0
2025-12-12T21:56:09.136 [DEBUG] [Thread-77281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:56:09.156 [DEBUG] [Thread-77281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:56:09.156 [INFO] [Thread-77281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] client lang: <none>
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] server lang: <none>
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] kex follows: False
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] Compression: none
2025-12-12T21:56:09.158 [DEBUG] [Thread-77281] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:56:09.167 [DEBUG] [Thread-77281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:56:09.167 [DEBUG] [Thread-77281] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:56:09.167 [DEBUG] [Thread-77281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:56:09.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:56:09.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:56:09.169 [DEBUG] [Thread-77281] [transport.py] [_log()] userauth is OK
2025-12-12T21:56:09.169 [DEBUG] [Thread-77281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:56:09.169 [DEBUG] [Thread-77281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:56:09.169 [DEBUG] [Thread-77281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:56:09.169 [DEBUG] [Thread-77281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:56:09.186 [INFO] [Thread-77281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:56:09.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:56:09.877 [DEBUG] [Thread-77281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:56:09.877 [DEBUG] [Thread-77281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:56:09.877 [DEBUG] [Thread-77281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:56:09.918 [DEBUG] [Thread-77281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:56:09.918 [DEBUG] [Thread-77281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:56:09.921 [DEBUG] [Thread-77281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:56:09.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:56:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:56:09.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:56:09.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:56:09.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:56:09.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:56:09.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:56:09.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:56:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:56:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.830308 -999.00  +10.30  39.41     90   +8.80 1 3 2 3 1     0    0 1.04 -22.25 ----- 45.9 39.4 317.2 50.9 11.8 -3.1 11.6 -3.6 11.3 -2.8 11.6 -2.0
2025-12-12T21:56:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:56:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:56:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.830308
2025-12-12T21:56:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:56:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:56:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:56:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:56:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:56:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:55:50', tmtdew=1.59, humidity=89.86, cloud=0.0, wind=48.15, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:55:38.611', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:56:09.948 [DEBUG] [Thread-77281] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:56:10.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:56:10.044 [DEBUG] [Thread-77284] [transport.py] [_log()] starting thread (client mode): 0xf5789a50
2025-12-12T21:56:10.044 [DEBUG] [Thread-77284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:56:10.058 [DEBUG] [Thread-77284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:56:10.059 [INFO] [Thread-77284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:56:10.066 [DEBUG] [Thread-77284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:56:10.066 [DEBUG] [Thread-77284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] client lang: <none>
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] server lang: <none>
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] kex follows: False
2025-12-12T21:56:10.067 [DEBUG] [Thread-77284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:56:10.068 [DEBUG] [Thread-77284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:56:10.068 [DEBUG] [Thread-77284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:56:10.068 [DEBUG] [Thread-77284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:56:10.068 [DEBUG] [Thread-77284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:56:10.068 [DEBUG] [Thread-77284] [transport.py] [_log()] Compression: none
2025-12-12T21:56:10.068 [DEBUG] [Thread-77284] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:56:10.122 [DEBUG] [Thread-77284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:56:10.123 [DEBUG] [Thread-77284] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:56:10.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:56:10.123 [DEBUG] [Thread-77284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:56:10.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:56:10.179 [DEBUG] [Thread-77284] [transport.py] [_log()] userauth is OK
2025-12-12T21:56:10.179 [DEBUG] [Thread-77284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:56:10.179 [DEBUG] [Thread-77284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:56:10.179 [DEBUG] [Thread-77284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:56:10.179 [DEBUG] [Thread-77284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:56:10.198 [INFO] [Thread-77284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:56:10.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:56:10.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:56:11.042 [DEBUG] [Thread-77284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:56:11.042 [DEBUG] [Thread-77284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:56:11.090 [DEBUG] [Thread-77284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:56:11.090 [DEBUG] [Thread-77284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:56:11.099 [DEBUG] [Thread-77284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:56:11.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:56:11.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:56:11.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:56:11.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:56:11.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:56:11.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:56:11.134 [DEBUG] [Thread-77284] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:56:12.769 [DEBUG] [Thread-77286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:13.697 [DEBUG] [Thread-77287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:27.822 [DEBUG] [Thread-77288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:30.993 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:30.994 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:56:41.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:56:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:56:41.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 56, 22), 1.6, 89.76, 0.0, 42.84, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:56:41.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:56:22
2025-12-12T21:56:41.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:56:42.114 [DEBUG] [Thread-77289] [transport.py] [_log()] starting thread (client mode): 0xf578a710
2025-12-12T21:56:42.114 [DEBUG] [Thread-77289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:56:42.134 [DEBUG] [Thread-77289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:56:42.135 [INFO] [Thread-77289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:56:42.138 [DEBUG] [Thread-77289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] client lang: <none>
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] server lang: <none>
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] kex follows: False
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] Compression: none
2025-12-12T21:56:42.139 [DEBUG] [Thread-77289] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:56:42.161 [DEBUG] [Thread-77289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:56:42.161 [DEBUG] [Thread-77289] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:56:42.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:56:42.162 [DEBUG] [Thread-77289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:56:42.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:56:42.166 [DEBUG] [Thread-77289] [transport.py] [_log()] userauth is OK
2025-12-12T21:56:42.166 [DEBUG] [Thread-77289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:56:42.166 [DEBUG] [Thread-77289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:56:42.166 [DEBUG] [Thread-77289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:56:42.167 [DEBUG] [Thread-77289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:56:42.203 [INFO] [Thread-77289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:56:42.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:56:42.843 [DEBUG] [Thread-77289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:56:42.843 [DEBUG] [Thread-77289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:56:42.844 [DEBUG] [Thread-77289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:56:42.853 [DEBUG] [Thread-77291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:56:42.883 [DEBUG] [Thread-77289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:56:42.883 [DEBUG] [Thread-77289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:56:42.885 [DEBUG] [Thread-77289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:56:42.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:56:42.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:56:42.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:56:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:56:42.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:56:42.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:56:42.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:56:42.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:56:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:56:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.830656 -999.00  +10.20  40.98     90   +8.70 1 3 2 3 1     0    0 1.08 -21.31 ----- 40.7 41.0 313.0 48.1 11.8 -4.0 11.6 -3.4 11.3 -4.2 11.7 -3.3
2025-12-12T21:56:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:56:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:56:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.830656
2025-12-12T21:56:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:56:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:56:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:56:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:56:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:56:42.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:56:22', tmtdew=1.6, humidity=89.76, cloud=0.0, wind=42.84, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:56:08.678', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:56:42.912 [DEBUG] [Thread-77289] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:56:42.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:56:43.008 [DEBUG] [Thread-77293] [transport.py] [_log()] starting thread (client mode): 0xf5789450
2025-12-12T21:56:43.008 [DEBUG] [Thread-77293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:56:43.023 [DEBUG] [Thread-77293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:56:43.023 [INFO] [Thread-77293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:56:43.030 [DEBUG] [Thread-77293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:56:43.030 [DEBUG] [Thread-77293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:56:43.031 [DEBUG] [Thread-77293] [transport.py] [_log()] client lang: <none>
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] server lang: <none>
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] kex follows: False
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:56:43.032 [DEBUG] [Thread-77293] [transport.py] [_log()] Compression: none
2025-12-12T21:56:43.033 [DEBUG] [Thread-77293] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:56:43.087 [DEBUG] [Thread-77293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:56:43.088 [DEBUG] [Thread-77293] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:56:43.089 [DEBUG] [Thread-77293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:56:43.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:56:43.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:56:43.144 [DEBUG] [Thread-77293] [transport.py] [_log()] userauth is OK
2025-12-12T21:56:43.144 [DEBUG] [Thread-77293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:56:43.144 [DEBUG] [Thread-77293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:56:43.144 [DEBUG] [Thread-77293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:56:43.144 [DEBUG] [Thread-77293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:56:43.163 [INFO] [Thread-77293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:56:43.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:56:43.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:56:43.989 [DEBUG] [Thread-77293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:56:43.990 [DEBUG] [Thread-77293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:56:44.038 [DEBUG] [Thread-77293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:56:44.038 [DEBUG] [Thread-77293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:56:44.047 [DEBUG] [Thread-77293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:56:44.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:56:44.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:56: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
2025-12-12T21:56:44.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:56:44.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:56:44.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:56:44.082 [DEBUG] [Thread-77293] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:56:57.886 [DEBUG] [Thread-77295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:12.918 [DEBUG] [Thread-77296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:13.784 [DEBUG] [Thread-77297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:14.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:57:14.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:57:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:57:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 56, 54), 1.6, 89.78, 0.0, 39.05, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:57:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:56:54
2025-12-12T21:57:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:57:15.062 [DEBUG] [Thread-77298] [transport.py] [_log()] starting thread (client mode): 0xf578af50
2025-12-12T21:57:15.062 [DEBUG] [Thread-77298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:57:15.083 [DEBUG] [Thread-77298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:57:15.083 [INFO] [Thread-77298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] client lang: <none>
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] server lang: <none>
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] kex follows: False
2025-12-12T21:57:15.087 [DEBUG] [Thread-77298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:57:15.088 [DEBUG] [Thread-77298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:57:15.088 [DEBUG] [Thread-77298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:57:15.088 [DEBUG] [Thread-77298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:57:15.088 [DEBUG] [Thread-77298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:57:15.088 [DEBUG] [Thread-77298] [transport.py] [_log()] Compression: none
2025-12-12T21:57:15.088 [DEBUG] [Thread-77298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:57:15.105 [DEBUG] [Thread-77298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:57:15.106 [DEBUG] [Thread-77298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:57:15.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:57:15.107 [DEBUG] [Thread-77298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:57:15.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:57:15.108 [DEBUG] [Thread-77298] [transport.py] [_log()] userauth is OK
2025-12-12T21:57:15.109 [DEBUG] [Thread-77298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:57:15.109 [DEBUG] [Thread-77298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:57:15.109 [DEBUG] [Thread-77298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:57:15.109 [DEBUG] [Thread-77298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:57:15.126 [INFO] [Thread-77298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:57:15.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:57:15.776 [DEBUG] [Thread-77298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:57:15.776 [DEBUG] [Thread-77298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:57:15.776 [DEBUG] [Thread-77298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:57:15.817 [DEBUG] [Thread-77298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:57:15.817 [DEBUG] [Thread-77298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:57:15.820 [DEBUG] [Thread-77298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:57:15.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:57:15.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:57:15.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:57:15.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:57:15.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:57:15.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:57:15.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:57:15.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:57:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:57:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.831003 -999.00  +10.30  32.24     90   +8.80 1 3 2 3 1     0    0 1.08 -20.56 ----- 33.0 32.2 325.8 47.4 11.8 -4.2 11.6 -3.6 11.3 -2.9 11.6 -3.1
2025-12-12T21:57:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:57:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:57:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.831003
2025-12-12T21:57:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:57:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:57:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:57:15.846 [DEBUG] [Thread-77298] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:57:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:57:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:57:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:56:54', tmtdew=1.6, humidity=89.78, cloud=0.0, wind=39.05, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:56:38.659', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:57:15.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:57:15.954 [DEBUG] [Thread-77301] [transport.py] [_log()] starting thread (client mode): 0xf5788670
2025-12-12T21:57:15.954 [DEBUG] [Thread-77301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:57:15.969 [DEBUG] [Thread-77301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:57:15.969 [INFO] [Thread-77301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:15.977 [DEBUG] [Thread-77301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] client lang: <none>
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] server lang: <none>
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] kex follows: False
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] Compression: none
2025-12-12T21:57:15.978 [DEBUG] [Thread-77301] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:57:16.035 [DEBUG] [Thread-77301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:57:16.036 [DEBUG] [Thread-77301] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:57:16.036 [DEBUG] [Thread-77301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:57:16.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:57:16.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:57:16.092 [DEBUG] [Thread-77301] [transport.py] [_log()] userauth is OK
2025-12-12T21:57:16.092 [DEBUG] [Thread-77301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:57:16.092 [DEBUG] [Thread-77301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:57:16.092 [DEBUG] [Thread-77301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:57:16.092 [DEBUG] [Thread-77301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:57:16.115 [INFO] [Thread-77301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:57:16.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:57:16.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:57:17.005 [DEBUG] [Thread-77301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:57:17.005 [DEBUG] [Thread-77301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:57:17.052 [DEBUG] [Thread-77301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:57:17.053 [DEBUG] [Thread-77301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:57:17.061 [DEBUG] [Thread-77301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:57:17.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:57:17.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:57:17.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:57:17.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:57:17.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:57:17.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:57:17.095 [DEBUG] [Thread-77301] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:57:27.951 [DEBUG] [Thread-77303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:31.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:31.199 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:42.986 [DEBUG] [Thread-77304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:57:47.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:57:47.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:57:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:57:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 57, 26), 1.61, 89.75, 0.0, 39.31, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:57:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:57:26
2025-12-12T21:57:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:57:48.068 [DEBUG] [Thread-77305] [transport.py] [_log()] starting thread (client mode): 0xf578b1c0
2025-12-12T21:57:48.068 [DEBUG] [Thread-77305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:57:48.090 [DEBUG] [Thread-77305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:57:48.090 [INFO] [Thread-77305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] client lang: <none>
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] server lang: <none>
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] kex follows: False
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] Compression: none
2025-12-12T21:57:48.093 [DEBUG] [Thread-77305] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:57:48.110 [DEBUG] [Thread-77305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:57:48.111 [DEBUG] [Thread-77305] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:57:48.111 [DEBUG] [Thread-77305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:57:48.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:57:48.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:57:48.113 [DEBUG] [Thread-77305] [transport.py] [_log()] userauth is OK
2025-12-12T21:57:48.113 [DEBUG] [Thread-77305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:57:48.114 [DEBUG] [Thread-77305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:57:48.114 [DEBUG] [Thread-77305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:57:48.114 [DEBUG] [Thread-77305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:57:48.137 [INFO] [Thread-77305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:57:48.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:57:48.747 [DEBUG] [Thread-77305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:57:48.747 [DEBUG] [Thread-77305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:57:48.748 [DEBUG] [Thread-77305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:57:48.788 [DEBUG] [Thread-77305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:57:48.788 [DEBUG] [Thread-77305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:57:48.791 [DEBUG] [Thread-77305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:57:48.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:57:48.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:57:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:57:48.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:57:48.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:57:48.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:57:48.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:57:48.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:57:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:57:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.831350 -999.00  +10.40  41.89     90   +8.80 1 3 2 3 1     0    0 1.09 -20.01 ----- 32.7 41.9 325.6 47.0 11.8 -3.9 11.7 -3.7 11.3 -4.0 11.6 -4.0
2025-12-12T21:57:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:57:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:57:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.831350
2025-12-12T21:57:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:57:48.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:57:48.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:57:48.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:57:48.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:57:48.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:57:26', tmtdew=1.61, humidity=89.75, cloud=0.0, wind=39.31, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:57:08.640', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:57:48.815 [DEBUG] [Thread-77305] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:57:48.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:57:48.922 [DEBUG] [Thread-77308] [transport.py] [_log()] starting thread (client mode): 0xf5788c40
2025-12-12T21:57:48.922 [DEBUG] [Thread-77308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:57:48.936 [DEBUG] [Thread-77308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:57:48.936 [INFO] [Thread-77308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:48.944 [DEBUG] [Thread-77308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] client lang: <none>
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] server lang: <none>
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] kex follows: False
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] Compression: none
2025-12-12T21:57:48.945 [DEBUG] [Thread-77308] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:57:49.000 [DEBUG] [Thread-77308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:57:49.001 [DEBUG] [Thread-77308] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:57:49.001 [DEBUG] [Thread-77308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:57:49.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:57:49.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:57:49.056 [DEBUG] [Thread-77308] [transport.py] [_log()] userauth is OK
2025-12-12T21:57:49.056 [DEBUG] [Thread-77308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:57:49.057 [DEBUG] [Thread-77308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:57:49.057 [DEBUG] [Thread-77308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:57:49.057 [DEBUG] [Thread-77308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:57:49.078 [INFO] [Thread-77308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:57:49.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:57:49.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:57:49.910 [DEBUG] [Thread-77308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:57:49.911 [DEBUG] [Thread-77308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:57:49.958 [DEBUG] [Thread-77308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:57:49.959 [DEBUG] [Thread-77308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:57:49.967 [DEBUG] [Thread-77308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:57:49.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:57: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')
2025-12-12T21:57: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
2025-12-12T21:57:49.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:57:49.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:57:49.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:57:50.002 [DEBUG] [Thread-77308] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:57:58.015 [DEBUG] [Thread-77310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:13.057 [DEBUG] [Thread-77311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:13.864 [DEBUG] [Thread-77312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:58:20.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:58:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:58:20.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 57, 58), 1.66, 89.7, 0.0, 41.71, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:58:20.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:57:58
2025-12-12T21:58:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:58:20.994 [DEBUG] [Thread-77313] [transport.py] [_log()] starting thread (client mode): 0xf5788490
2025-12-12T21:58:20.994 [DEBUG] [Thread-77313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:58:21.014 [DEBUG] [Thread-77313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:58:21.015 [INFO] [Thread-77313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] client lang: <none>
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] server lang: <none>
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] kex follows: False
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] Compression: none
2025-12-12T21:58:21.018 [DEBUG] [Thread-77313] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:58:21.035 [DEBUG] [Thread-77313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:58:21.035 [DEBUG] [Thread-77313] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:58:21.036 [DEBUG] [Thread-77313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:58:21.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:58:21.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:58:21.037 [DEBUG] [Thread-77313] [transport.py] [_log()] userauth is OK
2025-12-12T21:58:21.037 [DEBUG] [Thread-77313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:58:21.037 [DEBUG] [Thread-77313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:58:21.037 [DEBUG] [Thread-77313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:58:21.037 [DEBUG] [Thread-77313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:58:21.056 [INFO] [Thread-77313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:58:21.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:58:21.716 [DEBUG] [Thread-77313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:58:21.716 [DEBUG] [Thread-77313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:58:21.717 [DEBUG] [Thread-77313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:58:21.757 [DEBUG] [Thread-77313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:58:21.757 [DEBUG] [Thread-77313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:58:21.760 [DEBUG] [Thread-77313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:58:21.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:58:21.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:58:21.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:58:21.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:58:21.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:58:21.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:58:21.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:58:21.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:58:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:58:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.831697 -999.00  +10.40  36.76     89   +8.80 1 3 2 3 1     0    0 1.08 -19.91 ----- 39.9 36.8 320.6 49.5 11.8 -7.2 11.6 -7.4 11.3 -4.5 11.7 -4.8
2025-12-12T21:58:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:58:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:58:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.831697
2025-12-12T21:58:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:58:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:58:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:58:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:58:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:58:21.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:57:58', tmtdew=1.66, humidity=89.7, cloud=0.0, wind=41.71, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:57:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:58:21.785 [DEBUG] [Thread-77313] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:58:21.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:58:21.892 [DEBUG] [Thread-77316] [transport.py] [_log()] starting thread (client mode): 0xf5789660
2025-12-12T21:58:21.892 [DEBUG] [Thread-77316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:58:21.906 [DEBUG] [Thread-77316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:58:21.906 [INFO] [Thread-77316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] client lang: <none>
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] server lang: <none>
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] kex follows: False
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] Compression: none
2025-12-12T21:58:21.914 [DEBUG] [Thread-77316] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:58:21.972 [DEBUG] [Thread-77316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:58:21.973 [DEBUG] [Thread-77316] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:58:21.973 [DEBUG] [Thread-77316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:58:21.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:58:21.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:58:22.033 [DEBUG] [Thread-77316] [transport.py] [_log()] userauth is OK
2025-12-12T21:58:22.033 [DEBUG] [Thread-77316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:58:22.033 [DEBUG] [Thread-77316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:58:22.033 [DEBUG] [Thread-77316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:58:22.033 [DEBUG] [Thread-77316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:58:22.055 [INFO] [Thread-77316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:58:22.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:58:22.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:58:22.888 [DEBUG] [Thread-77316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:58:22.888 [DEBUG] [Thread-77316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:58:22.936 [DEBUG] [Thread-77316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:58:22.936 [DEBUG] [Thread-77316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:58:22.945 [DEBUG] [Thread-77316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:58:22.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:58:22.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:58:22.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:58:22.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:58:22.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:58:22.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:58:22.978 [DEBUG] [Thread-77316] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:58:28.085 [DEBUG] [Thread-77318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:31.402 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:31.403 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:43.129 [DEBUG] [Thread-77319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:58:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:58:53.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:58:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:58:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 58, 31), 1.66, 89.71, 0.0, 39.93, 10.44, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:58:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:58:31
2025-12-12T21:58:53.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:58:53.979 [DEBUG] [Thread-77320] [transport.py] [_log()] starting thread (client mode): 0xf57899f0
2025-12-12T21:58:53.979 [DEBUG] [Thread-77320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:58:53.999 [DEBUG] [Thread-77320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:58:53.999 [INFO] [Thread-77320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:54.001 [DEBUG] [Thread-77320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] client lang: <none>
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] server lang: <none>
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] kex follows: False
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] Compression: none
2025-12-12T21:58:54.002 [DEBUG] [Thread-77320] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:58:54.015 [DEBUG] [Thread-77320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:58:54.016 [DEBUG] [Thread-77320] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:58:54.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:58:54.017 [DEBUG] [Thread-77320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:58:54.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:58:54.019 [DEBUG] [Thread-77320] [transport.py] [_log()] userauth is OK
2025-12-12T21:58:54.019 [DEBUG] [Thread-77320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:58:54.019 [DEBUG] [Thread-77320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:58:54.019 [DEBUG] [Thread-77320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:58:54.019 [DEBUG] [Thread-77320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:58:54.037 [INFO] [Thread-77320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:58:54.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:58:54.668 [DEBUG] [Thread-77320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:58:54.668 [DEBUG] [Thread-77320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:58:54.668 [DEBUG] [Thread-77320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:58:54.709 [DEBUG] [Thread-77320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:58:54.709 [DEBUG] [Thread-77320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:58:54.711 [DEBUG] [Thread-77320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:58:54.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:58:54.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:58:54.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:58:54.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:58:54.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:58:54.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:58:54.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.832044 -999.00  +10.40  39.30     89   +8.70 1 3 2 3 1     0    0 1.13 -19.29 ----- 39.0 39.3 305.8 47.5 11.8 -5.7 11.6 -5.9 11.3 -6.5 11.7 -6.0
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.832044
2025-12-12T21:58:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:58:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:58:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:58:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:58:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:58:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:58:31', tmtdew=1.66, humidity=89.71, cloud=0.0, wind=39.93, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:58:08.602', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:58:54.731 [DEBUG] [Thread-77320] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:58:54.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:58:54.817 [DEBUG] [Thread-77323] [transport.py] [_log()] starting thread (client mode): 0xf578a5c0
2025-12-12T21:58:54.817 [DEBUG] [Thread-77323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:58:54.831 [DEBUG] [Thread-77323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:58:54.831 [INFO] [Thread-77323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] client lang: <none>
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] server lang: <none>
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] kex follows: False
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] Compression: none
2025-12-12T21:58:54.839 [DEBUG] [Thread-77323] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:58:54.895 [DEBUG] [Thread-77323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:58:54.896 [DEBUG] [Thread-77323] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:58:54.896 [DEBUG] [Thread-77323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:58:54.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:58:54.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:58:54.953 [DEBUG] [Thread-77323] [transport.py] [_log()] userauth is OK
2025-12-12T21:58:54.953 [DEBUG] [Thread-77323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:58:54.953 [DEBUG] [Thread-77323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:58:54.953 [DEBUG] [Thread-77323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:58:54.953 [DEBUG] [Thread-77323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:58:54.966 [INFO] [Thread-77323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:58:54.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:58:54.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:58:55.796 [DEBUG] [Thread-77323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:58:55.796 [DEBUG] [Thread-77323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:58:55.845 [DEBUG] [Thread-77323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:58:55.845 [DEBUG] [Thread-77323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:58:55.853 [DEBUG] [Thread-77323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:58:55.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:58:55.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:58:55.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:58:55.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:58:55.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:58:55.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:58:55.885 [DEBUG] [Thread-77323] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:58:58.156 [DEBUG] [Thread-77325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:13.190 [DEBUG] [Thread-77326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:13.941 [DEBUG] [Thread-77327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:25.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:59:25.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:59:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:59:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 59, 3), 1.67, 89.65, 0.0, 39.89, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:59:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:59:03
2025-12-12T21:59:26.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:59:26.879 [DEBUG] [Thread-77328] [transport.py] [_log()] starting thread (client mode): 0xf5788700
2025-12-12T21:59:26.879 [DEBUG] [Thread-77328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:59:26.895 [DEBUG] [Thread-77328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:59:26.895 [INFO] [Thread-77328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] client lang: <none>
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] server lang: <none>
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] kex follows: False
2025-12-12T21:59:26.898 [DEBUG] [Thread-77328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:59:26.899 [DEBUG] [Thread-77328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:59:26.899 [DEBUG] [Thread-77328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:59:26.899 [DEBUG] [Thread-77328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:59:26.899 [DEBUG] [Thread-77328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:59:26.899 [DEBUG] [Thread-77328] [transport.py] [_log()] Compression: none
2025-12-12T21:59:26.899 [DEBUG] [Thread-77328] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:59:26.915 [DEBUG] [Thread-77328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:59:26.916 [DEBUG] [Thread-77328] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:59:26.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:59:26.917 [DEBUG] [Thread-77328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:59:26.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:59:26.919 [DEBUG] [Thread-77328] [transport.py] [_log()] userauth is OK
2025-12-12T21:59:26.919 [DEBUG] [Thread-77328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:59:26.919 [DEBUG] [Thread-77328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:59:26.919 [DEBUG] [Thread-77328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:59:26.919 [DEBUG] [Thread-77328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:59:26.944 [INFO] [Thread-77328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:59:26.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:59:27.669 [DEBUG] [Thread-77328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:59:27.669 [DEBUG] [Thread-77328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:59:27.669 [DEBUG] [Thread-77328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T21:59:27.710 [DEBUG] [Thread-77328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:59:27.710 [DEBUG] [Thread-77328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:59:27.712 [DEBUG] [Thread-77328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:59:27.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:59:27.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T21:59:27.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T21:59:27.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T21:59:27.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:59:27.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T21:59:27.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:59:27.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:59:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T21:59:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.832739 -999.00  +10.40  44.14     89   +8.80 1 3 2 3 1     0    0 1.12 -17.88 ----- 33.8 44.1 318.0 49.4 11.8 -5.5 11.6 -5.8 11.3 -4.7 11.7 -4.3
2025-12-12T21:59:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T21:59:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T21:59:27.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.832739
2025-12-12T21:59:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T21:59:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T21:59:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T21:59:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T21:59:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T21:59:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:59:03', tmtdew=1.67, humidity=89.65, cloud=0.0, wind=39.89, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:59:08.650', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T21:59:27.730 [DEBUG] [Thread-77328] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:59:27.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T21:59:27.828 [DEBUG] [Thread-77331] [transport.py] [_log()] starting thread (client mode): 0xf57cabc0
2025-12-12T21:59:27.828 [DEBUG] [Thread-77331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:59:27.842 [DEBUG] [Thread-77331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T21:59:27.842 [INFO] [Thread-77331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:59:27.850 [DEBUG] [Thread-77331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] client lang: <none>
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] server lang: <none>
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] kex follows: False
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] Compression: none
2025-12-12T21:59:27.851 [DEBUG] [Thread-77331] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:59:27.909 [DEBUG] [Thread-77331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:59:27.909 [DEBUG] [Thread-77331] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:59:27.910 [DEBUG] [Thread-77331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T21:59:27.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T21:59:27.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:59:27.965 [DEBUG] [Thread-77331] [transport.py] [_log()] userauth is OK
2025-12-12T21:59:27.966 [DEBUG] [Thread-77331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:59:27.966 [DEBUG] [Thread-77331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:59:27.966 [DEBUG] [Thread-77331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T21:59:27.966 [DEBUG] [Thread-77331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:59:27.985 [INFO] [Thread-77331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:59:27.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T21:59:27.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T21:59:28.223 [DEBUG] [Thread-77333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:28.855 [DEBUG] [Thread-77331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T21:59:28.855 [DEBUG] [Thread-77331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T21:59:28.903 [DEBUG] [Thread-77331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T21:59:28.903 [DEBUG] [Thread-77331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T21:59:28.912 [DEBUG] [Thread-77331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T21:59:28.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T21:59:28.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T21:59:28.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T21:59:28.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T21:59:28.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T21:59:28.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T21:59:28.948 [DEBUG] [Thread-77331] [transport.py] [_log()] EOF in transport thread
2025-12-12T21:59:31.607 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:31.608 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:43.268 [DEBUG] [Thread-77334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:58.300 [DEBUG] [Thread-77335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T21:59:58.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T21:59:58.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T21:59:58.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T21:59:59.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 21, 59, 35), 1.67, 89.18, 0.0, 41.46, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T21:59:59.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 21:59:35
2025-12-12T21:59:59.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T21:59:59.921 [DEBUG] [Thread-77336] [transport.py] [_log()] starting thread (client mode): 0xf57cae60
2025-12-12T21:59:59.921 [DEBUG] [Thread-77336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T21:59:59.940 [DEBUG] [Thread-77336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T21:59:59.941 [INFO] [Thread-77336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T21:59:59.942 [DEBUG] [Thread-77336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T21:59:59.942 [DEBUG] [Thread-77336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T21:59:59.942 [DEBUG] [Thread-77336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T21:59:59.942 [DEBUG] [Thread-77336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] client lang: <none>
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] server lang: <none>
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] kex follows: False
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] Compression: none
2025-12-12T21:59:59.943 [DEBUG] [Thread-77336] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T21:59:59.956 [DEBUG] [Thread-77336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T21:59:59.957 [DEBUG] [Thread-77336] [transport.py] [_log()] Switch to new keys ...
2025-12-12T21:59:59.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T21:59:59.958 [DEBUG] [Thread-77336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T21:59:59.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T21:59:59.960 [DEBUG] [Thread-77336] [transport.py] [_log()] userauth is OK
2025-12-12T21:59:59.960 [DEBUG] [Thread-77336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T21:59:59.960 [DEBUG] [Thread-77336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T21:59:59.960 [DEBUG] [Thread-77336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T21:59:59.960 [DEBUG] [Thread-77336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T21:59:59.999 [INFO] [Thread-77336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T21:59:59.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:00:00.652 [DEBUG] [Thread-77336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:00:00.652 [DEBUG] [Thread-77336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:00:00.652 [DEBUG] [Thread-77336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:00:00.693 [DEBUG] [Thread-77336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:00:00.693 [DEBUG] [Thread-77336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:00:00.696 [DEBUG] [Thread-77336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:00:00.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:00:00.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:00:00.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:00:00.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:00:00.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:00:00.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:00:00.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:00:00.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:00:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:00:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.833086 -999.00  +10.40  36.43     89   +8.70 1 3 2 3 1     0    0 1.12 -17.63 Z.E.. 38.8 36.4 316.4 44.6 11.8 -5.9 11.6 -6.7 11.3 -5.6 11.7 -4.5
2025-12-12T22:00:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:00:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:00:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.833086
2025-12-12T22:00:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:00:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:00:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:00:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:00:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:00:00.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T21:59:35', tmtdew=1.67, humidity=89.18, cloud=0.0, wind=41.46, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T19:59:38.630', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T22:00:00.721 [DEBUG] [Thread-77336] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:00:00.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:00:00.819 [DEBUG] [Thread-77339] [transport.py] [_log()] starting thread (client mode): 0xf5788400
2025-12-12T22:00:00.819 [DEBUG] [Thread-77339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:00:00.833 [DEBUG] [Thread-77339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:00:00.833 [INFO] [Thread-77339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:00:00.840 [DEBUG] [Thread-77339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] client lang: <none>
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] server lang: <none>
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] kex follows: False
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:00:00.841 [DEBUG] [Thread-77339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:00:00.842 [DEBUG] [Thread-77339] [transport.py] [_log()] Compression: none
2025-12-12T22:00:00.842 [DEBUG] [Thread-77339] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:00:00.898 [DEBUG] [Thread-77339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:00:00.898 [DEBUG] [Thread-77339] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:00:00.899 [DEBUG] [Thread-77339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:00:00.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:00:00.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:00:00.954 [DEBUG] [Thread-77339] [transport.py] [_log()] userauth is OK
2025-12-12T22:00:00.954 [DEBUG] [Thread-77339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:00:00.954 [DEBUG] [Thread-77339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:00:00.954 [DEBUG] [Thread-77339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:00:00.954 [DEBUG] [Thread-77339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:00:00.972 [INFO] [Thread-77339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:00:00.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:00:00.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:00:01.818 [DEBUG] [Thread-77339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:00:01.818 [DEBUG] [Thread-77339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:00:01.867 [DEBUG] [Thread-77339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:00:01.867 [DEBUG] [Thread-77339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:00:01.876 [DEBUG] [Thread-77339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:00:01.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:00:01.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:00:01.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:00:01.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:00:01.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:00:01.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:00:01.911 [DEBUG] [Thread-77339] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:00:13.325 [DEBUG] [Thread-77341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:00:14.014 [DEBUG] [Thread-77342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:00:28.359 [DEBUG] [Thread-77343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:00:31.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:00:31.813 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:00:31.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:00:31.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:00:31.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:00:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 0, 7), 1.69, 89.05, 0.0, 41.2, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:00:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:00:07
2025-12-12T22:00:32.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:00:32.900 [DEBUG] [Thread-77344] [transport.py] [_log()] starting thread (client mode): 0xf5788a60
2025-12-12T22:00:32.900 [DEBUG] [Thread-77344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:00:32.925 [DEBUG] [Thread-77344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:00:32.925 [INFO] [Thread-77344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:00:32.928 [DEBUG] [Thread-77344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] client lang: <none>
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] server lang: <none>
2025-12-12T22:00:32.929 [DEBUG] [Thread-77344] [transport.py] [_log()] kex follows: False
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] Compression: none
2025-12-12T22:00:32.930 [DEBUG] [Thread-77344] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:00:32.945 [DEBUG] [Thread-77344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:00:32.946 [DEBUG] [Thread-77344] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:00:32.947 [DEBUG] [Thread-77344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:00:32.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:00:32.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:00:32.948 [DEBUG] [Thread-77344] [transport.py] [_log()] userauth is OK
2025-12-12T22:00:32.949 [DEBUG] [Thread-77344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:00:32.949 [DEBUG] [Thread-77344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:00:32.949 [DEBUG] [Thread-77344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:00:32.949 [DEBUG] [Thread-77344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:00:32.963 [INFO] [Thread-77344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:00:32.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:00:33.717 [DEBUG] [Thread-77344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:00:33.718 [DEBUG] [Thread-77344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:00:33.718 [DEBUG] [Thread-77344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:00:33.759 [DEBUG] [Thread-77344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:00:33.759 [DEBUG] [Thread-77344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:00:33.762 [DEBUG] [Thread-77344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:00:33.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:00:33.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:00:33.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:00:33.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:00:33.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:00:33.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:00:33.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:00:33.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:00:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:00:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.833433 -999.00  +10.30  48.72     89   +8.60 1 3 2 3 1     0    0 1.13 -17.59 ...s. 50.0 48.7 315.4 56.8 11.8 -4.4 11.6 -4.9 11.3 -4.9 11.6 -3.6
2025-12-12T22:00:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:00:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:00:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.833433
2025-12-12T22:00:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:00:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:00:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:00:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:00:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:00:33.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:00:07', tmtdew=1.69, humidity=89.05, cloud=0.0, wind=41.2, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:00:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T22:00:33.787 [DEBUG] [Thread-77344] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:00:33.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:00:33.895 [DEBUG] [Thread-77347] [transport.py] [_log()] starting thread (client mode): 0xf5788940
2025-12-12T22:00:33.895 [DEBUG] [Thread-77347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:00:33.910 [DEBUG] [Thread-77347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:00:33.910 [INFO] [Thread-77347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:00:33.917 [DEBUG] [Thread-77347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] client lang: <none>
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] server lang: <none>
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] kex follows: False
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:00:33.918 [DEBUG] [Thread-77347] [transport.py] [_log()] Compression: none
2025-12-12T22:00:33.919 [DEBUG] [Thread-77347] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:00:33.974 [DEBUG] [Thread-77347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:00:33.974 [DEBUG] [Thread-77347] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:00:33.975 [DEBUG] [Thread-77347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:00:33.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:00:33.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:00:34.030 [DEBUG] [Thread-77347] [transport.py] [_log()] userauth is OK
2025-12-12T22:00:34.031 [DEBUG] [Thread-77347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:00:34.031 [DEBUG] [Thread-77347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:00:34.031 [DEBUG] [Thread-77347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:00:34.031 [DEBUG] [Thread-77347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:00:34.050 [INFO] [Thread-77347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:00:34.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:00:34.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:00:34.877 [DEBUG] [Thread-77347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:00:34.877 [DEBUG] [Thread-77347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:00:34.925 [DEBUG] [Thread-77347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:00:34.925 [DEBUG] [Thread-77347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:00:34.934 [DEBUG] [Thread-77347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:00:34.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:00:34.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:00:34.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:00:34.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:00:34.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:00:34.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:00:34.968 [DEBUG] [Thread-77347] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:00:43.392 [DEBUG] [Thread-77349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:00:58.436 [DEBUG] [Thread-77350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:01:04.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:01:04.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:01:05.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 0, 39), 1.69, 89.06, 0.0, 45.57, 10.47, 1, 1, 0, 2, 1, 0),)
2025-12-12T22:01:05.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:00:39
2025-12-12T22:01:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:01:05.943 [DEBUG] [Thread-77351] [transport.py] [_log()] starting thread (client mode): 0xf57cb850
2025-12-12T22:01:05.943 [DEBUG] [Thread-77351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:01:05.965 [DEBUG] [Thread-77351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:01:05.965 [INFO] [Thread-77351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] client lang: <none>
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] server lang: <none>
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] kex follows: False
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] Compression: none
2025-12-12T22:01:05.968 [DEBUG] [Thread-77351] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:01:05.976 [DEBUG] [Thread-77351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:01:05.976 [DEBUG] [Thread-77351] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:01:05.976 [DEBUG] [Thread-77351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:01:05.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:01:05.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:01:05.977 [DEBUG] [Thread-77351] [transport.py] [_log()] userauth is OK
2025-12-12T22:01:05.977 [DEBUG] [Thread-77351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:01:05.977 [DEBUG] [Thread-77351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:01:05.977 [DEBUG] [Thread-77351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:01:05.977 [DEBUG] [Thread-77351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:01:05.996 [INFO] [Thread-77351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:01:05.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:01:06.670 [DEBUG] [Thread-77351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:01:06.670 [DEBUG] [Thread-77351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:01:06.671 [DEBUG] [Thread-77351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:01:06.711 [DEBUG] [Thread-77351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:01:06.711 [DEBUG] [Thread-77351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:01:06.714 [DEBUG] [Thread-77351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:01:06.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:01:06.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:01:06.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:01:06.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:01:06.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:01:06.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:01:06.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:01:06.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.833780 -999.00  +10.30  51.53     89   +8.60 1 3 2 3 1     0    0 1.15 -16.54 ..ES. 49.4 51.5 315.0 55.7 11.8 -2.8 11.5 -2.9 11.3 -2.7 11.6 -2.0
2025-12-12T22:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.833780
2025-12-12T22:01:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:01:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:01:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:01:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:01:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:01:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:00:39', tmtdew=1.69, humidity=89.06, cloud=0.0, wind=45.57, temperature=10.47, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:00:38.592', atlas_cloud=3, atlas_rain=1, zp_data=[1.2402499999999996, 1.1632500000000006, 1.0602500000000008, 1.4044999999999996, 0.8194999999999997, 1.2192500000000006, 1.4159999999999995, 1.6262500000000006, 1.6374999999999993, 1.0175, 0.8542499999999995, 1.7930000000000001, 1.1879999999999988, 1.3382499999999995, 1.8579999999999988, 1.9899999999999993, 1.8627500000000001, 1.1405000000000003, 1.4749999999999996, 1.9002499999999989, 1.5009999999999986, 1.6232499999999987, nan, nan, nan, 1.6494999999999997, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T19:52:00')
2025-12-12T22:01:06.739 [DEBUG] [Thread-77351] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:01:06.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:01:06.836 [DEBUG] [Thread-77354] [transport.py] [_log()] starting thread (client mode): 0xf57c97b0
2025-12-12T22:01:06.837 [DEBUG] [Thread-77354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:01:06.851 [DEBUG] [Thread-77354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:01:06.851 [INFO] [Thread-77354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] client lang: <none>
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] server lang: <none>
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] kex follows: False
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:01:06.859 [DEBUG] [Thread-77354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:01:06.860 [DEBUG] [Thread-77354] [transport.py] [_log()] Compression: none
2025-12-12T22:01:06.860 [DEBUG] [Thread-77354] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:01:06.923 [DEBUG] [Thread-77354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:01:06.924 [DEBUG] [Thread-77354] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:01:06.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:01:06.925 [DEBUG] [Thread-77354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:01:06.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:01:06.979 [DEBUG] [Thread-77354] [transport.py] [_log()] userauth is OK
2025-12-12T22:01:06.979 [DEBUG] [Thread-77354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:01:06.979 [DEBUG] [Thread-77354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:01:06.979 [DEBUG] [Thread-77354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:01:06.979 [DEBUG] [Thread-77354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:01:06.998 [INFO] [Thread-77354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:01:06.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:01:06.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:01:07.808 [DEBUG] [Thread-77354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:01:07.808 [DEBUG] [Thread-77354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:01:07.857 [DEBUG] [Thread-77354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:01:07.857 [DEBUG] [Thread-77354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:01:07.866 [DEBUG] [Thread-77354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:01:07.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:01:07.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:01:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:01:07.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:01:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:01:07.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:01:07.900 [DEBUG] [Thread-77354] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:01:13.462 [DEBUG] [Thread-77356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:14.086 [DEBUG] [Thread-77357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:28.507 [DEBUG] [Thread-77358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:32.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:32.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:37.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:01:37.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:01:37.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:01:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 1, 11), 1.7, 89.0, 0.0, 44.02, 10.47, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:01:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:01:11
2025-12-12T22:01:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:01:38.902 [DEBUG] [Thread-77359] [transport.py] [_log()] starting thread (client mode): 0xf57896c0
2025-12-12T22:01:38.902 [DEBUG] [Thread-77359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:01:38.923 [DEBUG] [Thread-77359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:01:38.923 [INFO] [Thread-77359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:01:38.926 [DEBUG] [Thread-77359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:01:38.926 [DEBUG] [Thread-77359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:01:38.926 [DEBUG] [Thread-77359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:01:38.926 [DEBUG] [Thread-77359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:38.926 [DEBUG] [Thread-77359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] client lang: <none>
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] server lang: <none>
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] kex follows: False
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] Compression: none
2025-12-12T22:01:38.927 [DEBUG] [Thread-77359] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:01:38.945 [DEBUG] [Thread-77359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:01:38.945 [DEBUG] [Thread-77359] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:01:38.946 [DEBUG] [Thread-77359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:01:38.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:01:38.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:01:38.947 [DEBUG] [Thread-77359] [transport.py] [_log()] userauth is OK
2025-12-12T22:01:38.948 [DEBUG] [Thread-77359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:01:38.948 [DEBUG] [Thread-77359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:01:38.948 [DEBUG] [Thread-77359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:01:38.948 [DEBUG] [Thread-77359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:01:38.971 [INFO] [Thread-77359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:01:38.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:01:39.596 [DEBUG] [Thread-77359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:01:39.596 [DEBUG] [Thread-77359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:01:39.597 [DEBUG] [Thread-77359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:01:39.637 [DEBUG] [Thread-77359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:01:39.637 [DEBUG] [Thread-77359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:01:39.638 [DEBUG] [Thread-77359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:01:39.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:01:39.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:01:39.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:01:39.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:01:39.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:01:39.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:01:39.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:01:39.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:01:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.834128 -999.00  +10.20  47.84     89   +8.60 1 3 2 3 1     0    0 1.15 -15.92 ..ES. 46.9 47.8 312.4 51.7 11.8 -2.6 11.5 -2.8 11.3 -2.6 11.6 -2.2
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.834128
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:01:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:01:39.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:01:39.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:01:39.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:01:11', tmtdew=1.7, humidity=89.0, cloud=0.0, wind=44.02, temperature=10.47, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:01:08.659', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:00:00')
2025-12-12T22:01:39.656 [DEBUG] [Thread-77359] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:01:39.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:01:39.752 [DEBUG] [Thread-77362] [transport.py] [_log()] starting thread (client mode): 0xf578a290
2025-12-12T22:01:39.752 [DEBUG] [Thread-77362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:01:39.767 [DEBUG] [Thread-77362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:01:39.767 [INFO] [Thread-77362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] client lang: <none>
2025-12-12T22:01:39.775 [DEBUG] [Thread-77362] [transport.py] [_log()] server lang: <none>
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] kex follows: False
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] Compression: none
2025-12-12T22:01:39.776 [DEBUG] [Thread-77362] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:01:39.834 [DEBUG] [Thread-77362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:01:39.835 [DEBUG] [Thread-77362] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:01:39.835 [DEBUG] [Thread-77362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:01:39.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:01:39.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:01:39.891 [DEBUG] [Thread-77362] [transport.py] [_log()] userauth is OK
2025-12-12T22:01:39.891 [DEBUG] [Thread-77362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:01:39.891 [DEBUG] [Thread-77362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:01:39.891 [DEBUG] [Thread-77362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:01:39.891 [DEBUG] [Thread-77362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:01:39.910 [INFO] [Thread-77362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:01:39.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:01:39.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:01:40.737 [DEBUG] [Thread-77362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:01:40.738 [DEBUG] [Thread-77362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:01:40.786 [DEBUG] [Thread-77362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:01:40.786 [DEBUG] [Thread-77362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:01:40.795 [DEBUG] [Thread-77362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:01:40.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:01:40.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:01:40.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:01:40.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:01:40.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:01:40.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:01:40.829 [DEBUG] [Thread-77362] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:01:43.534 [DEBUG] [Thread-77364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:01:58.577 [DEBUG] [Thread-77365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:10.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:02:10.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:02:10.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:02:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 1, 43), 1.77, 88.88, 0.0, 38.6, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:02:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:01:43
2025-12-12T22:02:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:02:11.865 [DEBUG] [Thread-77366] [transport.py] [_log()] starting thread (client mode): 0xf578baf0
2025-12-12T22:02:11.865 [DEBUG] [Thread-77366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:02:11.880 [DEBUG] [Thread-77366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:02:11.880 [INFO] [Thread-77366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] client lang: <none>
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] server lang: <none>
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] kex follows: False
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:02:11.883 [DEBUG] [Thread-77366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:02:11.884 [DEBUG] [Thread-77366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:02:11.884 [DEBUG] [Thread-77366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:02:11.884 [DEBUG] [Thread-77366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:02:11.884 [DEBUG] [Thread-77366] [transport.py] [_log()] Compression: none
2025-12-12T22:02:11.884 [DEBUG] [Thread-77366] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:02:11.899 [DEBUG] [Thread-77366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:02:11.900 [DEBUG] [Thread-77366] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:02:11.900 [DEBUG] [Thread-77366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:02:11.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:02:11.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:02:11.901 [DEBUG] [Thread-77366] [transport.py] [_log()] userauth is OK
2025-12-12T22:02:11.901 [DEBUG] [Thread-77366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:02:11.901 [DEBUG] [Thread-77366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:02:11.901 [DEBUG] [Thread-77366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:02:11.901 [DEBUG] [Thread-77366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:02:11.919 [INFO] [Thread-77366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:02:11.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:02:12.565 [DEBUG] [Thread-77366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:02:12.565 [DEBUG] [Thread-77366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:02:12.565 [DEBUG] [Thread-77366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:02:12.606 [DEBUG] [Thread-77366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:02:12.606 [DEBUG] [Thread-77366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:02:12.608 [DEBUG] [Thread-77366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:02:12.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:02:12.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:02:12.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:02:12.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:02:12.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:02:12.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:02:12.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:02:12.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:02:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:02:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.834475 -999.00  +10.30  26.68     89   +8.70 1 3 1 3 1     0    0 1.20 -16.13 ..E.. 29.6 26.7 325.2 52.3 11.8 -4.0 11.6 -3.3 11.3 -3.2 11.6 -2.9
2025-12-12T22:02:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:02:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:02:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.834475
2025-12-12T22:02:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:02:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:02:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:02:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:02:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:02:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:01:43', tmtdew=1.77, humidity=88.88, cloud=0.0, wind=38.6, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:01:38.640', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:00:00')
2025-12-12T22:02:12.626 [DEBUG] [Thread-77366] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:02:12.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:02:12.714 [DEBUG] [Thread-77369] [transport.py] [_log()] starting thread (client mode): 0xf5772800
2025-12-12T22:02:12.715 [DEBUG] [Thread-77369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:02:12.729 [DEBUG] [Thread-77369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:02:12.729 [INFO] [Thread-77369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:02:12.736 [DEBUG] [Thread-77369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:02:12.736 [DEBUG] [Thread-77369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:02:12.736 [DEBUG] [Thread-77369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:02:12.736 [DEBUG] [Thread-77369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] client lang: <none>
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] server lang: <none>
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] kex follows: False
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] Compression: none
2025-12-12T22:02:12.737 [DEBUG] [Thread-77369] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:02:12.794 [DEBUG] [Thread-77369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:02:12.794 [DEBUG] [Thread-77369] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:02:12.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:02:12.794 [DEBUG] [Thread-77369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:02:12.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:02:12.851 [DEBUG] [Thread-77369] [transport.py] [_log()] userauth is OK
2025-12-12T22:02:12.851 [DEBUG] [Thread-77369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:02:12.851 [DEBUG] [Thread-77369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:02:12.851 [DEBUG] [Thread-77369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:02:12.851 [DEBUG] [Thread-77369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:02:12.865 [INFO] [Thread-77369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:02:12.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:02:12.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:02:13.608 [DEBUG] [Thread-77371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:13.707 [DEBUG] [Thread-77369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:02:13.707 [DEBUG] [Thread-77369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:02:13.754 [DEBUG] [Thread-77369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:02:13.754 [DEBUG] [Thread-77369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:02:13.763 [DEBUG] [Thread-77369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:02:13.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:02:13.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:02:13.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:02:13.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:02:13.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:02:13.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:02:13.794 [DEBUG] [Thread-77369] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:02:14.155 [DEBUG] [Thread-77372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:28.642 [DEBUG] [Thread-77373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:32.226 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:32.227 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:43.676 [DEBUG] [Thread-77374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:02:43.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:02:43.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:02:43.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:02:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 2, 15), 1.77, 88.88, 0.0, 37.28, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:02:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:02:15
2025-12-12T22:02:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:02:44.785 [DEBUG] [Thread-77375] [transport.py] [_log()] starting thread (client mode): 0xf578a4a0
2025-12-12T22:02:44.785 [DEBUG] [Thread-77375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:02:44.805 [DEBUG] [Thread-77375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:02:44.805 [INFO] [Thread-77375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:02:44.806 [DEBUG] [Thread-77375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:02:44.806 [DEBUG] [Thread-77375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:02:44.806 [DEBUG] [Thread-77375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] client lang: <none>
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] server lang: <none>
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] kex follows: False
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:02:44.807 [DEBUG] [Thread-77375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:02:44.808 [DEBUG] [Thread-77375] [transport.py] [_log()] Compression: none
2025-12-12T22:02:44.808 [DEBUG] [Thread-77375] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:02:44.817 [DEBUG] [Thread-77375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:02:44.818 [DEBUG] [Thread-77375] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:02:44.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:02:44.819 [DEBUG] [Thread-77375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:02:44.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:02:44.821 [DEBUG] [Thread-77375] [transport.py] [_log()] userauth is OK
2025-12-12T22:02:44.821 [DEBUG] [Thread-77375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:02:44.821 [DEBUG] [Thread-77375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:02:44.821 [DEBUG] [Thread-77375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:02:44.822 [DEBUG] [Thread-77375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:02:44.848 [INFO] [Thread-77375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:02:44.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:02:45.476 [DEBUG] [Thread-77375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:02:45.476 [DEBUG] [Thread-77375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:02:45.476 [DEBUG] [Thread-77375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:02:45.517 [DEBUG] [Thread-77375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:02:45.517 [DEBUG] [Thread-77375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:02:45.520 [DEBUG] [Thread-77375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:02:45.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:02:45.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:02:45.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:02:45.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:02:45.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:02:45.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:02:45.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:02:45.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:02:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:02:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.834822 -999.00  +10.40  30.30     89   +8.80 1 3 2 3 1     0    0 1.18 -15.20 ..E.. 32.9 30.3 319.8 45.0 11.8 -2.6 11.6 -2.3 11.3 -2.1 11.6 -1.9
2025-12-12T22:02:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:02:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:02:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.834822
2025-12-12T22:02:45.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:02:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:02:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:02:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:02:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:02:45.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:02:15', tmtdew=1.77, humidity=88.88, cloud=0.0, wind=37.28, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:02:08.621', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:00:00')
2025-12-12T22:02:45.537 [DEBUG] [Thread-77375] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:02:45.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:02:45.627 [DEBUG] [Thread-77378] [transport.py] [_log()] starting thread (client mode): 0xf5788d00
2025-12-12T22:02:45.627 [DEBUG] [Thread-77378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:02:45.642 [DEBUG] [Thread-77378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:02:45.642 [INFO] [Thread-77378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:02:45.649 [DEBUG] [Thread-77378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:02:45.650 [DEBUG] [Thread-77378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] client lang: <none>
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] server lang: <none>
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] kex follows: False
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] Compression: none
2025-12-12T22:02:45.651 [DEBUG] [Thread-77378] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:02:45.707 [DEBUG] [Thread-77378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:02:45.708 [DEBUG] [Thread-77378] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:02:45.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:02:45.709 [DEBUG] [Thread-77378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:02:45.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:02:45.764 [DEBUG] [Thread-77378] [transport.py] [_log()] userauth is OK
2025-12-12T22:02:45.764 [DEBUG] [Thread-77378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:02:45.764 [DEBUG] [Thread-77378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:02:45.764 [DEBUG] [Thread-77378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:02:45.764 [DEBUG] [Thread-77378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:02:45.783 [INFO] [Thread-77378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:02:45.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:02:45.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:02:46.696 [DEBUG] [Thread-77378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:02:46.696 [DEBUG] [Thread-77378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:02:46.744 [DEBUG] [Thread-77378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:02:46.744 [DEBUG] [Thread-77378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:02:46.753 [DEBUG] [Thread-77378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:02:46.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:02:46.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:02:46.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:02:46.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:02:46.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:02:46.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:02:46.787 [DEBUG] [Thread-77378] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:02:58.704 [DEBUG] [Thread-77380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:13.746 [DEBUG] [Thread-77381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:14.231 [DEBUG] [Thread-77382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:16.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:03:16.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:03:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:03:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 2, 47), 1.77, 88.88, 0.0, 44.52, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:03:17.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:02:47
2025-12-12T22:03:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:03:17.749 [DEBUG] [Thread-77383] [transport.py] [_log()] starting thread (client mode): 0xf57cab30
2025-12-12T22:03:17.749 [DEBUG] [Thread-77383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:03:17.771 [DEBUG] [Thread-77383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:03:17.771 [INFO] [Thread-77383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:03:17.774 [DEBUG] [Thread-77383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:03:17.774 [DEBUG] [Thread-77383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] client lang: <none>
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] server lang: <none>
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] kex follows: False
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] Compression: none
2025-12-12T22:03:17.775 [DEBUG] [Thread-77383] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:03:17.792 [DEBUG] [Thread-77383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:03:17.792 [DEBUG] [Thread-77383] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:03:17.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:03:17.793 [DEBUG] [Thread-77383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:03:17.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:03:17.795 [DEBUG] [Thread-77383] [transport.py] [_log()] userauth is OK
2025-12-12T22:03:17.795 [DEBUG] [Thread-77383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:03:17.796 [DEBUG] [Thread-77383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:03:17.796 [DEBUG] [Thread-77383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:03:17.796 [DEBUG] [Thread-77383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:03:17.814 [INFO] [Thread-77383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:03:17.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:03:18.416 [DEBUG] [Thread-77383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:03:18.416 [DEBUG] [Thread-77383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:03:18.416 [DEBUG] [Thread-77383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:03:18.457 [DEBUG] [Thread-77383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:03:18.457 [DEBUG] [Thread-77383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:03:18.460 [DEBUG] [Thread-77383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:03:18.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:03:18.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:03:18.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:03:18.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:03:18.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:03:18.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:03:18.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:03:18.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:03:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:03:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.835517 -999.00  +10.40  36.61     89   +8.70 1 3 2 3 1     0    0 1.26 -12.76 .NE.. 28.7 36.6 320.6 50.4 11.8 -2.8 11.6 -2.7 11.3 -3.4 11.7 -2.8
2025-12-12T22:03:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:03:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:03:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.835517
2025-12-12T22:03:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:03:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:03:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:03:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:03:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:03:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:02:47', tmtdew=1.77, humidity=88.88, cloud=0.0, wind=44.52, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:03:08.669', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:00:00')
2025-12-12T22:03:18.482 [DEBUG] [Thread-77383] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:03:18.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:03:18.575 [DEBUG] [Thread-77386] [transport.py] [_log()] starting thread (client mode): 0xf578a590
2025-12-12T22:03:18.575 [DEBUG] [Thread-77386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:03:18.590 [DEBUG] [Thread-77386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:03:18.590 [INFO] [Thread-77386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:03:18.598 [DEBUG] [Thread-77386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] client lang: <none>
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] server lang: <none>
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] kex follows: False
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] Compression: none
2025-12-12T22:03:18.599 [DEBUG] [Thread-77386] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:03:18.656 [DEBUG] [Thread-77386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:03:18.656 [DEBUG] [Thread-77386] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:03:18.657 [DEBUG] [Thread-77386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:03:18.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:03:18.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:03:18.712 [DEBUG] [Thread-77386] [transport.py] [_log()] userauth is OK
2025-12-12T22:03:18.712 [DEBUG] [Thread-77386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:03:18.712 [DEBUG] [Thread-77386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:03:18.713 [DEBUG] [Thread-77386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:03:18.713 [DEBUG] [Thread-77386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:03:18.732 [INFO] [Thread-77386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:03:18.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:03:18.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:03:19.573 [DEBUG] [Thread-77386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:03:19.573 [DEBUG] [Thread-77386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:03:19.620 [DEBUG] [Thread-77386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:03:19.621 [DEBUG] [Thread-77386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:03:19.629 [DEBUG] [Thread-77386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:03:19.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:03:19.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:03: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
2025-12-12T22:03:19.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:03:19.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:03:19.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:03:19.664 [DEBUG] [Thread-77386] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:03:28.774 [DEBUG] [Thread-77388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:32.429 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:32.430 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:43.811 [DEBUG] [Thread-77389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:03:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:03:49.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:03:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:03:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 3, 19), 1.78, 88.8, 0.0, 44.64, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:03:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:03:19
2025-12-12T22:03:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:03:50.619 [DEBUG] [Thread-77390] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-12T22:03:50.619 [DEBUG] [Thread-77390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:03:50.637 [DEBUG] [Thread-77390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:03:50.637 [INFO] [Thread-77390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:03:50.641 [DEBUG] [Thread-77390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] client lang: <none>
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] server lang: <none>
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] kex follows: False
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] Compression: none
2025-12-12T22:03:50.642 [DEBUG] [Thread-77390] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:03:50.662 [DEBUG] [Thread-77390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:03:50.663 [DEBUG] [Thread-77390] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:03:50.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:03:50.663 [DEBUG] [Thread-77390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:03:50.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:03:50.666 [DEBUG] [Thread-77390] [transport.py] [_log()] userauth is OK
2025-12-12T22:03:50.666 [DEBUG] [Thread-77390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:03:50.666 [DEBUG] [Thread-77390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:03:50.666 [DEBUG] [Thread-77390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:03:50.666 [DEBUG] [Thread-77390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:03:50.689 [INFO] [Thread-77390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:03:50.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:03:51.275 [DEBUG] [Thread-77390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:03:51.275 [DEBUG] [Thread-77390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:03:51.275 [DEBUG] [Thread-77390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:03:51.316 [DEBUG] [Thread-77390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:03:51.316 [DEBUG] [Thread-77390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:03:51.319 [DEBUG] [Thread-77390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:03:51.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:03:51.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:03:51.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:03:51.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:03:51.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:03:51.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:03:51.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:03:51.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:03:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:03:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.835864 -999.00  +10.40  33.75     89   +8.70 1 3 2 3 1     0    0 1.24 -13.99 ----- 37.0 33.8 338.2 46.5 11.9 -2.7 11.6 -2.6 11.3 -2.3 11.7 -2.2
2025-12-12T22:03:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:03:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:03:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.835864
2025-12-12T22:03:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:03:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:03:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:03:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:03:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:03:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:03:19', tmtdew=1.78, humidity=88.8, cloud=0.0, wind=44.64, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:03:38.650', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:00:00')
2025-12-12T22:03:51.345 [DEBUG] [Thread-77390] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:03:51.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:03:51.441 [DEBUG] [Thread-77393] [transport.py] [_log()] starting thread (client mode): 0xf5773610
2025-12-12T22:03:51.441 [DEBUG] [Thread-77393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:03:51.456 [DEBUG] [Thread-77393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:03:51.456 [INFO] [Thread-77393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:03:51.464 [DEBUG] [Thread-77393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:03:51.464 [DEBUG] [Thread-77393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:03:51.464 [DEBUG] [Thread-77393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:03:51.464 [DEBUG] [Thread-77393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:51.464 [DEBUG] [Thread-77393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:03:51.464 [DEBUG] [Thread-77393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] client lang: <none>
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] server lang: <none>
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] kex follows: False
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:03:51.465 [DEBUG] [Thread-77393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:03:51.466 [DEBUG] [Thread-77393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:03:51.466 [DEBUG] [Thread-77393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:03:51.466 [DEBUG] [Thread-77393] [transport.py] [_log()] Compression: none
2025-12-12T22:03:51.466 [DEBUG] [Thread-77393] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:03:51.525 [DEBUG] [Thread-77393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:03:51.525 [DEBUG] [Thread-77393] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:03:51.526 [DEBUG] [Thread-77393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:03:51.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:03:51.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:03:51.584 [DEBUG] [Thread-77393] [transport.py] [_log()] userauth is OK
2025-12-12T22:03:51.584 [DEBUG] [Thread-77393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:03:51.584 [DEBUG] [Thread-77393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:03:51.584 [DEBUG] [Thread-77393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:03:51.584 [DEBUG] [Thread-77393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:03:51.598 [INFO] [Thread-77393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:03:51.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:03:51.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:03:52.437 [DEBUG] [Thread-77393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:03:52.437 [DEBUG] [Thread-77393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:03:52.485 [DEBUG] [Thread-77393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:03:52.485 [DEBUG] [Thread-77393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:03:52.494 [DEBUG] [Thread-77393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:03:52.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:03:52.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:03:52.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:03:52.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:03:52.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:03:52.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:03:52.525 [DEBUG] [Thread-77393] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:03:58.838 [DEBUG] [Thread-77395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:13.882 [DEBUG] [Thread-77396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:14.310 [DEBUG] [Thread-77397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:04:22.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:04:22.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:04:23.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 3, 51), 1.78, 88.82, 0.0, 35.5, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:04:23.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:03:51
2025-12-12T22:04:23.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:04:23.514 [DEBUG] [Thread-77398] [transport.py] [_log()] starting thread (client mode): 0xf578b250
2025-12-12T22:04:23.514 [DEBUG] [Thread-77398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:04:23.535 [DEBUG] [Thread-77398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:04:23.535 [INFO] [Thread-77398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] client lang: <none>
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] server lang: <none>
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] kex follows: False
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] Compression: none
2025-12-12T22:04:23.539 [DEBUG] [Thread-77398] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:04:23.557 [DEBUG] [Thread-77398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:04:23.558 [DEBUG] [Thread-77398] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:04:23.558 [DEBUG] [Thread-77398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:04:23.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:04:23.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:04:23.560 [DEBUG] [Thread-77398] [transport.py] [_log()] userauth is OK
2025-12-12T22:04:23.560 [DEBUG] [Thread-77398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:04:23.560 [DEBUG] [Thread-77398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:04:23.560 [DEBUG] [Thread-77398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:04:23.561 [DEBUG] [Thread-77398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:04:23.584 [INFO] [Thread-77398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:04:23.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:04:24.242 [DEBUG] [Thread-77398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:04:24.242 [DEBUG] [Thread-77398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:04:24.242 [DEBUG] [Thread-77398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:04:24.283 [DEBUG] [Thread-77398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:04:24.283 [DEBUG] [Thread-77398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:04:24.285 [DEBUG] [Thread-77398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:04:24.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:04:24.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:04:24.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:04:24.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:04:24.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:04:24.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:04:24.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:04:24.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:04:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.836211 -999.00  +10.40  32.96     89   +8.70 1 3 2 3 1     0    0 1.30 -13.20 ----- 35.2 33.0 320.6 38.5 11.9 -4.2 11.7 -4.7 11.4 -2.7 11.7 -2.9
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.836211
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:04:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:03:51', tmtdew=1.78, humidity=88.82, cloud=0.0, wind=35.5, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:04:08.630', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:00:00')
2025-12-12T22:04:24.304 [DEBUG] [Thread-77398] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:04:24.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:04:24.389 [DEBUG] [Thread-77401] [transport.py] [_log()] starting thread (client mode): 0xf578bbe0
2025-12-12T22:04:24.390 [DEBUG] [Thread-77401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:04:24.403 [DEBUG] [Thread-77401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:04:24.404 [INFO] [Thread-77401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] client lang: <none>
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] server lang: <none>
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] kex follows: False
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:04:24.411 [DEBUG] [Thread-77401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:04:24.412 [DEBUG] [Thread-77401] [transport.py] [_log()] Compression: none
2025-12-12T22:04:24.412 [DEBUG] [Thread-77401] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:04:24.467 [DEBUG] [Thread-77401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:04:24.468 [DEBUG] [Thread-77401] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:04:24.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:04:24.468 [DEBUG] [Thread-77401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:04:24.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:04:24.528 [DEBUG] [Thread-77401] [transport.py] [_log()] userauth is OK
2025-12-12T22:04:24.529 [DEBUG] [Thread-77401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:04:24.529 [DEBUG] [Thread-77401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:04:24.529 [DEBUG] [Thread-77401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:04:24.529 [DEBUG] [Thread-77401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:04:24.544 [INFO] [Thread-77401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:04:24.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:04:24.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:04:25.368 [DEBUG] [Thread-77401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:04:25.369 [DEBUG] [Thread-77401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:04:25.416 [DEBUG] [Thread-77401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:04:25.416 [DEBUG] [Thread-77401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:04:25.425 [DEBUG] [Thread-77401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:04:25.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:04: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')
2025-12-12T22:04:25.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:04:25.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:04:25.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:04:25.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:04:25.456 [DEBUG] [Thread-77401] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:04:28.913 [DEBUG] [Thread-77403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:32.631 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:32.632 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:43.957 [DEBUG] [Thread-77404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:04:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:04:55.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:04:55.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:04:56.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 4, 23), 1.78, 88.83, 0.0, 41.23, 10.47, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:04:56.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:04:23
2025-12-12T22:04:56.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:04:56.498 [DEBUG] [Thread-77405] [transport.py] [_log()] starting thread (client mode): 0xf57c9fc0
2025-12-12T22:04:56.498 [DEBUG] [Thread-77405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:04:56.519 [DEBUG] [Thread-77405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:04:56.519 [INFO] [Thread-77405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:04:56.522 [DEBUG] [Thread-77405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:04:56.522 [DEBUG] [Thread-77405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] client lang: <none>
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] server lang: <none>
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] kex follows: False
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] Compression: none
2025-12-12T22:04:56.523 [DEBUG] [Thread-77405] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:04:56.539 [DEBUG] [Thread-77405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:04:56.539 [DEBUG] [Thread-77405] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:04:56.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:04:56.539 [DEBUG] [Thread-77405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:04:56.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:04:56.541 [DEBUG] [Thread-77405] [transport.py] [_log()] userauth is OK
2025-12-12T22:04:56.541 [DEBUG] [Thread-77405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:04:56.541 [DEBUG] [Thread-77405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:04:56.541 [DEBUG] [Thread-77405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:04:56.541 [DEBUG] [Thread-77405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:04:56.568 [INFO] [Thread-77405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:04:56.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:04:57.214 [DEBUG] [Thread-77405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:04:57.215 [DEBUG] [Thread-77405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:04:57.215 [DEBUG] [Thread-77405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:04:57.256 [DEBUG] [Thread-77405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:04:57.256 [DEBUG] [Thread-77405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:04:57.259 [DEBUG] [Thread-77405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:04:57.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:04:57.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:04:57.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:04:57.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:04:57.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:04:57.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:04:57.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.836558 -999.00  +10.40  35.28     89   +8.70 1 3 2 3 1     0    0 1.36 -10.12 ----- 38.1 35.3 323.2 42.0 11.9 -5.4 11.7 -5.1 11.4 -6.0 11.7 -5.3
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.836558
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:04:57.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:04:23', tmtdew=1.78, humidity=88.83, cloud=0.0, wind=41.23, temperature=10.47, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:04:38.611', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:04:57.282 [DEBUG] [Thread-77405] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:04:57.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:04:57.365 [DEBUG] [Thread-77408] [transport.py] [_log()] starting thread (client mode): 0xf57f0a00
2025-12-12T22:04:57.365 [DEBUG] [Thread-77408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:04:57.379 [DEBUG] [Thread-77408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:04:57.379 [INFO] [Thread-77408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] client lang: <none>
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] server lang: <none>
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] kex follows: False
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] Compression: none
2025-12-12T22:04:57.387 [DEBUG] [Thread-77408] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:04:57.445 [DEBUG] [Thread-77408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:04:57.445 [DEBUG] [Thread-77408] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:04:57.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:04:57.445 [DEBUG] [Thread-77408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:04:57.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:04:57.501 [DEBUG] [Thread-77408] [transport.py] [_log()] userauth is OK
2025-12-12T22:04:57.501 [DEBUG] [Thread-77408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:04:57.501 [DEBUG] [Thread-77408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:04:57.501 [DEBUG] [Thread-77408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:04:57.501 [DEBUG] [Thread-77408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:04:57.518 [INFO] [Thread-77408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:04:57.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:04:57.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:04:58.327 [DEBUG] [Thread-77408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:04:58.327 [DEBUG] [Thread-77408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:04:58.375 [DEBUG] [Thread-77408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:04:58.375 [DEBUG] [Thread-77408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:04:58.384 [DEBUG] [Thread-77408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:04:58.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:04:58.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:04:58.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:04:58.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:04:58.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:04:58.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:04:58.429 [DEBUG] [Thread-77408] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:04:58.980 [DEBUG] [Thread-77410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:14.026 [DEBUG] [Thread-77411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:14.386 [DEBUG] [Thread-77412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:05:28.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:05:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:05:29.055 [DEBUG] [Thread-77413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 4, 55), 1.79, 88.73, 0.0, 38.0, 10.34, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:05:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:04:55
2025-12-12T22:05:29.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:05:29.489 [DEBUG] [Thread-77414] [transport.py] [_log()] starting thread (client mode): 0xf57f3ee0
2025-12-12T22:05:29.489 [DEBUG] [Thread-77414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:05:29.509 [DEBUG] [Thread-77414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:05:29.509 [INFO] [Thread-77414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] client lang: <none>
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] server lang: <none>
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] kex follows: False
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] Compression: none
2025-12-12T22:05:29.512 [DEBUG] [Thread-77414] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:05:29.527 [DEBUG] [Thread-77414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:05:29.527 [DEBUG] [Thread-77414] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:05:29.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:05:29.527 [DEBUG] [Thread-77414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:05:29.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:05:29.528 [DEBUG] [Thread-77414] [transport.py] [_log()] userauth is OK
2025-12-12T22:05:29.528 [DEBUG] [Thread-77414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:05:29.528 [DEBUG] [Thread-77414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:05:29.528 [DEBUG] [Thread-77414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:05:29.528 [DEBUG] [Thread-77414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:05:29.546 [INFO] [Thread-77414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:05:29.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:05:30.147 [DEBUG] [Thread-77414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:05:30.147 [DEBUG] [Thread-77414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:05:30.147 [DEBUG] [Thread-77414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:05:30.188 [DEBUG] [Thread-77414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:05:30.188 [DEBUG] [Thread-77414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:05:30.190 [DEBUG] [Thread-77414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:05:30.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:05:30.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:05:30.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:05:30.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:05:30.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:05:30.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:05:30.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.836905 -999.00  +10.40  41.31     89   +8.70 1 3 2 3 1     0    0 1.38 -9.64 ----- 41.1 41.3 312.2 47.6 11.8 -5.4 11.7 -5.2 11.3 -5.6 11.7 -5.0
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.836905
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:05:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:04:55', tmtdew=1.79, humidity=88.73, cloud=0.0, wind=38.0, temperature=10.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:05:08.592', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:05:30.210 [DEBUG] [Thread-77414] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:05:30.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:05:30.296 [DEBUG] [Thread-77417] [transport.py] [_log()] starting thread (client mode): 0xf57c9ed0
2025-12-12T22:05:30.296 [DEBUG] [Thread-77417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:05:30.310 [DEBUG] [Thread-77417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:05:30.310 [INFO] [Thread-77417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] client lang: <none>
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] server lang: <none>
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] kex follows: False
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] Compression: none
2025-12-12T22:05:30.318 [DEBUG] [Thread-77417] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:05:30.380 [DEBUG] [Thread-77417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:05:30.380 [DEBUG] [Thread-77417] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:05:30.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:05:30.381 [DEBUG] [Thread-77417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:05:30.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:05:30.437 [DEBUG] [Thread-77417] [transport.py] [_log()] userauth is OK
2025-12-12T22:05:30.437 [DEBUG] [Thread-77417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:05:30.437 [DEBUG] [Thread-77417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:05:30.437 [DEBUG] [Thread-77417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:05:30.437 [DEBUG] [Thread-77417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:05:30.451 [INFO] [Thread-77417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:05:30.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:05:30.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:05:31.276 [DEBUG] [Thread-77417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:05:31.276 [DEBUG] [Thread-77417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:05:31.323 [DEBUG] [Thread-77417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:05:31.324 [DEBUG] [Thread-77417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:05:31.332 [DEBUG] [Thread-77417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:05:31.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:05:31.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:05:31.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:05:31.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:05:31.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:05:31.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:05:31.364 [DEBUG] [Thread-77417] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:05:32.836 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:32.837 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:44.084 [DEBUG] [Thread-77419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:05:59.142 [DEBUG] [Thread-77420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:06:01.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:06:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:06:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 5, 27), 1.79, 88.78, 0.0, 38.45, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:06:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:05:27
2025-12-12T22:06:02.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:06:02.343 [DEBUG] [Thread-77421] [transport.py] [_log()] starting thread (client mode): 0xf5772ec0
2025-12-12T22:06:02.343 [DEBUG] [Thread-77421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:06:02.363 [DEBUG] [Thread-77421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:06:02.363 [INFO] [Thread-77421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] client lang: <none>
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] server lang: <none>
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] kex follows: False
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] Compression: none
2025-12-12T22:06:02.366 [DEBUG] [Thread-77421] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:06:02.376 [DEBUG] [Thread-77421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:06:02.376 [DEBUG] [Thread-77421] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:06:02.376 [DEBUG] [Thread-77421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:06:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:06:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:06:02.378 [DEBUG] [Thread-77421] [transport.py] [_log()] userauth is OK
2025-12-12T22:06:02.378 [DEBUG] [Thread-77421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:06:02.378 [DEBUG] [Thread-77421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:06:02.378 [DEBUG] [Thread-77421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:06:02.378 [DEBUG] [Thread-77421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:06:02.391 [INFO] [Thread-77421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:06:02.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:06:02.984 [DEBUG] [Thread-77421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:06:02.984 [DEBUG] [Thread-77421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:06:02.985 [DEBUG] [Thread-77421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:06:03.025 [DEBUG] [Thread-77421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:06:03.025 [DEBUG] [Thread-77421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:06:03.027 [DEBUG] [Thread-77421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:06:03.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:06:03.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:06:03.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:06:03.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:06:03.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:06:03.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:06:03.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:06:03.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:06:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:06:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.837253 -999.00  +10.40  35.29     89   +8.70 1 3 2 3 1     0    0 1.40 -8.27 ----- 34.1 35.3 309.0 42.7 11.8 -4.3 11.7 -4.3 11.3 -3.8 11.7 -3.6
2025-12-12T22:06:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:06:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:06:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.837253
2025-12-12T22:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:06:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:05:27', tmtdew=1.79, humidity=88.78, cloud=0.0, wind=38.45, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:05:38.659', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:06:03.052 [DEBUG] [Thread-77421] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:06:03.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:06:03.162 [DEBUG] [Thread-77424] [transport.py] [_log()] starting thread (client mode): 0xf57705b0
2025-12-12T22:06:03.162 [DEBUG] [Thread-77424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:06:03.178 [DEBUG] [Thread-77424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:06:03.178 [INFO] [Thread-77424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:06:03.185 [DEBUG] [Thread-77424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:06:03.185 [DEBUG] [Thread-77424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] client lang: <none>
2025-12-12T22:06:03.186 [DEBUG] [Thread-77424] [transport.py] [_log()] server lang: <none>
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] kex follows: False
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] Compression: none
2025-12-12T22:06:03.187 [DEBUG] [Thread-77424] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:06:03.247 [DEBUG] [Thread-77424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:06:03.247 [DEBUG] [Thread-77424] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:06:03.248 [DEBUG] [Thread-77424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:06:03.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:06:03.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:06:03.306 [DEBUG] [Thread-77424] [transport.py] [_log()] userauth is OK
2025-12-12T22:06:03.306 [DEBUG] [Thread-77424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:06:03.306 [DEBUG] [Thread-77424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:06:03.306 [DEBUG] [Thread-77424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:06:03.306 [DEBUG] [Thread-77424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:06:03.325 [INFO] [Thread-77424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:06:03.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:06:03.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:06:04.174 [DEBUG] [Thread-77424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:06:04.175 [DEBUG] [Thread-77424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:06:04.222 [DEBUG] [Thread-77424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:06:04.223 [DEBUG] [Thread-77424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:06:04.231 [DEBUG] [Thread-77424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:06:04.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:06:04.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:06:04.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:06:04.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:06:04.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:06:04.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:06:04.266 [DEBUG] [Thread-77424] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:06:14.176 [DEBUG] [Thread-77426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:14.466 [DEBUG] [Thread-77427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:29.221 [DEBUG] [Thread-77428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:33.041 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:33.042 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:06:34.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:06:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:06:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 6, 31), 1.84, 88.25, 0.0, 32.94, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:06:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:06:31
2025-12-12T22:06:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:06:35.270 [DEBUG] [Thread-77429] [transport.py] [_log()] starting thread (client mode): 0xf57f0af0
2025-12-12T22:06:35.271 [DEBUG] [Thread-77429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:06:35.293 [DEBUG] [Thread-77429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:06:35.293 [INFO] [Thread-77429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:06:35.296 [DEBUG] [Thread-77429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:06:35.296 [DEBUG] [Thread-77429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:06:35.296 [DEBUG] [Thread-77429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] client lang: <none>
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] server lang: <none>
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] kex follows: False
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] Compression: none
2025-12-12T22:06:35.297 [DEBUG] [Thread-77429] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:06:35.317 [DEBUG] [Thread-77429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:06:35.318 [DEBUG] [Thread-77429] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:06:35.318 [DEBUG] [Thread-77429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:06:35.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:06:35.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:06:35.322 [DEBUG] [Thread-77429] [transport.py] [_log()] userauth is OK
2025-12-12T22:06:35.323 [DEBUG] [Thread-77429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:06:35.323 [DEBUG] [Thread-77429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:06:35.323 [DEBUG] [Thread-77429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:06:35.323 [DEBUG] [Thread-77429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:06:35.348 [INFO] [Thread-77429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:06:35.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:06:35.958 [DEBUG] [Thread-77429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:06:35.958 [DEBUG] [Thread-77429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:06:35.959 [DEBUG] [Thread-77429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:06:36.001 [DEBUG] [Thread-77429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:06:36.001 [DEBUG] [Thread-77429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:06:36.005 [DEBUG] [Thread-77429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:06:36.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:06:36.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:06:36.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:06:36.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:06:36.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:06:36.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:06:36.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:06:36.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:06:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:06:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.837600 -999.00  +10.40  37.26     89   +8.60 1 3 2 3 1     0    0 1.45 -7.25 z.E.. 37.0 37.3 317.4 48.9 11.8 -5.6 11.6 -5.1 11.3 -5.3 11.7 -4.8
2025-12-12T22:06:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:06:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:06:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.837600
2025-12-12T22:06:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:06:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:06:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:06:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:06:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:06:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:06:31', tmtdew=1.84, humidity=88.25, cloud=0.0, wind=32.94, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:06:08.640', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:06:36.047 [DEBUG] [Thread-77429] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:06:36.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:06:36.144 [DEBUG] [Thread-77432] [transport.py] [_log()] starting thread (client mode): 0xf57cbe20
2025-12-12T22:06:36.144 [DEBUG] [Thread-77432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:06:36.161 [DEBUG] [Thread-77432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:06:36.161 [INFO] [Thread-77432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:06:36.172 [DEBUG] [Thread-77432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] client lang: <none>
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] server lang: <none>
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] kex follows: False
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:06:36.173 [DEBUG] [Thread-77432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:06:36.174 [DEBUG] [Thread-77432] [transport.py] [_log()] Compression: none
2025-12-12T22:06:36.174 [DEBUG] [Thread-77432] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:06:36.229 [DEBUG] [Thread-77432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:06:36.230 [DEBUG] [Thread-77432] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:06:36.230 [DEBUG] [Thread-77432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:06:36.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:06:36.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:06:36.286 [DEBUG] [Thread-77432] [transport.py] [_log()] userauth is OK
2025-12-12T22:06:36.286 [DEBUG] [Thread-77432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:06:36.286 [DEBUG] [Thread-77432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:06:36.287 [DEBUG] [Thread-77432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:06:36.287 [DEBUG] [Thread-77432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:06:36.305 [INFO] [Thread-77432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:06:36.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:06:36.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:06:37.120 [DEBUG] [Thread-77432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:06:37.121 [DEBUG] [Thread-77432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:06:37.169 [DEBUG] [Thread-77432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:06:37.169 [DEBUG] [Thread-77432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:06:37.178 [DEBUG] [Thread-77432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:06:37.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:06:37.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:06:37.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:06:37.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:06:37.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:06:37.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:06:37.213 [DEBUG] [Thread-77432] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:06:44.243 [DEBUG] [Thread-77434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:06:59.284 [DEBUG] [Thread-77435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:07:07.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:07:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:07:07.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 7, 3), 1.85, 88.18, 0.0, 34.55, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:07:07.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:07:03
2025-12-12T22:07:08.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:07:08.206 [DEBUG] [Thread-77436] [transport.py] [_log()] starting thread (client mode): 0xf57f1300
2025-12-12T22:07:08.206 [DEBUG] [Thread-77436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:07:08.227 [DEBUG] [Thread-77436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:07:08.227 [INFO] [Thread-77436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:07:08.230 [DEBUG] [Thread-77436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:07:08.230 [DEBUG] [Thread-77436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] client lang: <none>
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] server lang: <none>
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] kex follows: False
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] Compression: none
2025-12-12T22:07:08.231 [DEBUG] [Thread-77436] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:07:08.248 [DEBUG] [Thread-77436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:07:08.248 [DEBUG] [Thread-77436] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:07:08.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:07:08.249 [DEBUG] [Thread-77436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:07:08.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:07:08.251 [DEBUG] [Thread-77436] [transport.py] [_log()] userauth is OK
2025-12-12T22:07:08.251 [DEBUG] [Thread-77436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:07:08.251 [DEBUG] [Thread-77436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:07:08.251 [DEBUG] [Thread-77436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:07:08.251 [DEBUG] [Thread-77436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:07:08.274 [INFO] [Thread-77436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:07:08.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:07:08.989 [DEBUG] [Thread-77436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:07:08.989 [DEBUG] [Thread-77436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:07:08.990 [DEBUG] [Thread-77436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:07:09.030 [DEBUG] [Thread-77436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:07:09.030 [DEBUG] [Thread-77436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:07:09.033 [DEBUG] [Thread-77436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:07:09.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:07:09.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:07:09.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:07:09.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:07:09.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:07:09.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:07:09.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:07:09.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:07:09.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:07:09.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.837947 -999.00  +10.30  42.31     89   +8.60 1 3 2 3 1     0    0 1.47 -5.94 ----- 40.8 42.3 314.8 49.2 11.8 -4.5 11.6 -4.7 11.3 -3.8 11.6 -3.2
2025-12-12T22:07:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:07:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:07:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.837947
2025-12-12T22:07:09.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:07:09.058 [DEBUG] [Thread-77436] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:07:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:07:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:07:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:07:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:07:09.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:07:03', tmtdew=1.85, humidity=88.18, cloud=0.0, wind=34.55, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:06:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:07:09.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:07:09.153 [DEBUG] [Thread-77438] [transport.py] [_log()] starting thread (client mode): 0xf57f1210
2025-12-12T22:07:09.153 [DEBUG] [Thread-77438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:07:09.169 [DEBUG] [Thread-77438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:07:09.169 [INFO] [Thread-77438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:07:09.176 [DEBUG] [Thread-77438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:09.177 [DEBUG] [Thread-77438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] client lang: <none>
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] server lang: <none>
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] kex follows: False
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:07:09.178 [DEBUG] [Thread-77438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:07:09.179 [DEBUG] [Thread-77438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:07:09.179 [DEBUG] [Thread-77438] [transport.py] [_log()] Compression: none
2025-12-12T22:07:09.179 [DEBUG] [Thread-77438] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:07:09.236 [DEBUG] [Thread-77438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:07:09.237 [DEBUG] [Thread-77438] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:07:09.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:07:09.238 [DEBUG] [Thread-77438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:07:09.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:07:09.295 [DEBUG] [Thread-77438] [transport.py] [_log()] userauth is OK
2025-12-12T22:07:09.295 [DEBUG] [Thread-77438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:07:09.296 [DEBUG] [Thread-77438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:07:09.296 [DEBUG] [Thread-77438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:07:09.296 [DEBUG] [Thread-77438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:07:09.315 [INFO] [Thread-77438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:07:09.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:07:09.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:07:10.122 [DEBUG] [Thread-77438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:07:10.122 [DEBUG] [Thread-77438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:07:10.170 [DEBUG] [Thread-77438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:07:10.170 [DEBUG] [Thread-77438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:07:10.179 [DEBUG] [Thread-77438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:07:10.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:07:10.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:07:10.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:07:10.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:07:10.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:07:10.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:07:10.213 [DEBUG] [Thread-77438] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:07:14.319 [DEBUG] [Thread-77440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:14.548 [DEBUG] [Thread-77441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:29.364 [DEBUG] [Thread-77442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:33.246 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:33.248 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:40.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:07:40.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:07:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:07:40.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 7, 35), 1.86, 88.12, 0.0, 39.49, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:07:40.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:07:35
2025-12-12T22:07:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:07:41.199 [DEBUG] [Thread-77443] [transport.py] [_log()] starting thread (client mode): 0xf57f2da0
2025-12-12T22:07:41.199 [DEBUG] [Thread-77443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:07:41.222 [DEBUG] [Thread-77443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:07:41.222 [INFO] [Thread-77443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] client lang: <none>
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] server lang: <none>
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] kex follows: False
2025-12-12T22:07:41.225 [DEBUG] [Thread-77443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:07:41.226 [DEBUG] [Thread-77443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:07:41.226 [DEBUG] [Thread-77443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:07:41.226 [DEBUG] [Thread-77443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:07:41.226 [DEBUG] [Thread-77443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:07:41.226 [DEBUG] [Thread-77443] [transport.py] [_log()] Compression: none
2025-12-12T22:07:41.226 [DEBUG] [Thread-77443] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:07:41.246 [DEBUG] [Thread-77443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:07:41.247 [DEBUG] [Thread-77443] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:07:41.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:07:41.247 [DEBUG] [Thread-77443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:07:41.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:07:41.251 [DEBUG] [Thread-77443] [transport.py] [_log()] userauth is OK
2025-12-12T22:07:41.252 [DEBUG] [Thread-77443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:07:41.252 [DEBUG] [Thread-77443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:07:41.252 [DEBUG] [Thread-77443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:07:41.252 [DEBUG] [Thread-77443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:07:41.278 [INFO] [Thread-77443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:07:41.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:07:41.890 [DEBUG] [Thread-77443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:07:41.890 [DEBUG] [Thread-77443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:07:41.890 [DEBUG] [Thread-77443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:07:41.931 [DEBUG] [Thread-77443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:07:41.931 [DEBUG] [Thread-77443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:07:41.934 [DEBUG] [Thread-77443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:07:41.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:07:41.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:07:41.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:07:41.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:07:41.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:07:41.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:07:41.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:07:41.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:07:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:07:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.837947 -999.00  +10.30  42.31     89   +8.60 1 3 2 3 1     0    0 1.47 -5.94 ----- 40.8 42.3 314.8 49.2 11.8 -4.5 11.6 -4.7 11.3 -3.8 11.6 -3.2
2025-12-12T22:07:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:07:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:07:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.837947
2025-12-12T22:07:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:07:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:07:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:07:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:07:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:07:41.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:07:35', tmtdew=1.86, humidity=88.12, cloud=0.0, wind=39.49, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:06:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:07:41.960 [DEBUG] [Thread-77443] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:07:42.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:07:42.057 [DEBUG] [Thread-77446] [transport.py] [_log()] starting thread (client mode): 0xf5771720
2025-12-12T22:07:42.057 [DEBUG] [Thread-77446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:07:42.071 [DEBUG] [Thread-77446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:07:42.071 [INFO] [Thread-77446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:07:42.079 [DEBUG] [Thread-77446] [transport.py] [_log()] client lang: <none>
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] server lang: <none>
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] kex follows: False
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] Compression: none
2025-12-12T22:07:42.080 [DEBUG] [Thread-77446] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:07:42.138 [DEBUG] [Thread-77446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:07:42.139 [DEBUG] [Thread-77446] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:07:42.139 [DEBUG] [Thread-77446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:07:42.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:07:42.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:07:42.195 [DEBUG] [Thread-77446] [transport.py] [_log()] userauth is OK
2025-12-12T22:07:42.195 [DEBUG] [Thread-77446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:07:42.195 [DEBUG] [Thread-77446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:07:42.195 [DEBUG] [Thread-77446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:07:42.195 [DEBUG] [Thread-77446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:07:42.218 [INFO] [Thread-77446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:07:42.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:07:42.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:07:43.041 [DEBUG] [Thread-77446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:07:43.041 [DEBUG] [Thread-77446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:07:43.090 [DEBUG] [Thread-77446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:07:43.090 [DEBUG] [Thread-77446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:07:43.099 [DEBUG] [Thread-77446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:07:43.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:07:43.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:07:43.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:07:43.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:07:43.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:07:43.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:07:43.134 [DEBUG] [Thread-77446] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:07:44.393 [DEBUG] [Thread-77448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:07:59.436 [DEBUG] [Thread-77449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:13.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:08:13.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:08:13.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:08:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 8, 7), 1.85, 88.2, 0.0, 38.38, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:08:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:08:07
2025-12-12T22:08:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:08:14.118 [DEBUG] [Thread-77450] [transport.py] [_log()] starting thread (client mode): 0xf5770850
2025-12-12T22:08:14.118 [DEBUG] [Thread-77450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:08:14.133 [DEBUG] [Thread-77450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:08:14.133 [INFO] [Thread-77450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] client lang: <none>
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] server lang: <none>
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] kex follows: False
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] Compression: none
2025-12-12T22:08:14.136 [DEBUG] [Thread-77450] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:08:14.145 [DEBUG] [Thread-77450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:08:14.145 [DEBUG] [Thread-77450] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:08:14.145 [DEBUG] [Thread-77450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:08:14.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:08:14.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:08:14.146 [DEBUG] [Thread-77450] [transport.py] [_log()] userauth is OK
2025-12-12T22:08:14.147 [DEBUG] [Thread-77450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:08:14.147 [DEBUG] [Thread-77450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:08:14.147 [DEBUG] [Thread-77450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:08:14.147 [DEBUG] [Thread-77450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:08:14.158 [INFO] [Thread-77450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:08:14.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:08:14.468 [DEBUG] [Thread-77452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:14.625 [DEBUG] [Thread-77453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:14.974 [DEBUG] [Thread-77450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:08:14.975 [DEBUG] [Thread-77450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:08:14.975 [DEBUG] [Thread-77450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:08:15.016 [DEBUG] [Thread-77450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:08:15.016 [DEBUG] [Thread-77450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:08:15.020 [DEBUG] [Thread-77450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:08:15.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:08:15.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:08:15.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:08:15.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:08:15.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:08:15.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:08:15.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:08:15.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:08:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:08:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.838641 -999.00  +10.40  32.80     89   +8.70 1 3 2 3 1     0    0 1.51 -3.72 .N... 37.0 32.8 316.8 36.9 11.8 -6.3 11.6 -5.6 11.3 -4.4 11.7 -4.5
2025-12-12T22:08:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:08:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:08:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.838641
2025-12-12T22:08:15.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:08:15.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:08:15.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:08:15.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:08:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:08:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:08:07', tmtdew=1.85, humidity=88.2, cloud=0.0, wind=38.38, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:07:38.582', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:08:15.044 [DEBUG] [Thread-77450] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:08:15.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:08:15.141 [DEBUG] [Thread-77455] [transport.py] [_log()] starting thread (client mode): 0xf57f3610
2025-12-12T22:08:15.141 [DEBUG] [Thread-77455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:08:15.156 [DEBUG] [Thread-77455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:08:15.156 [INFO] [Thread-77455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:08:15.164 [DEBUG] [Thread-77455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:08:15.164 [DEBUG] [Thread-77455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:08:15.164 [DEBUG] [Thread-77455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:08:15.164 [DEBUG] [Thread-77455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] client lang: <none>
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] server lang: <none>
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] kex follows: False
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] Compression: none
2025-12-12T22:08:15.165 [DEBUG] [Thread-77455] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:08:15.222 [DEBUG] [Thread-77455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:08:15.223 [DEBUG] [Thread-77455] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:08:15.223 [DEBUG] [Thread-77455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:08:15.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:08:15.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:08:15.282 [DEBUG] [Thread-77455] [transport.py] [_log()] userauth is OK
2025-12-12T22:08:15.282 [DEBUG] [Thread-77455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:08:15.282 [DEBUG] [Thread-77455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:08:15.283 [DEBUG] [Thread-77455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:08:15.283 [DEBUG] [Thread-77455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:08:15.301 [INFO] [Thread-77455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:08:15.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:08:15.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:08:16.148 [DEBUG] [Thread-77455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:08:16.149 [DEBUG] [Thread-77455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:08:16.197 [DEBUG] [Thread-77455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:08:16.198 [DEBUG] [Thread-77455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:08:16.207 [DEBUG] [Thread-77455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:08:16.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:08:16.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:08:16.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:08:16.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:08:16.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:08:16.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:08:16.243 [DEBUG] [Thread-77455] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:08:29.500 [DEBUG] [Thread-77457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:33.452 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:33.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:44.548 [DEBUG] [Thread-77458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:08:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:08:46.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:08:46.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:08:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 8, 39), 1.86, 88.13, 0.0, 37.85, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:08:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:08:39
2025-12-12T22:08:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:08:47.212 [DEBUG] [Thread-77459] [transport.py] [_log()] starting thread (client mode): 0xf57f06a0
2025-12-12T22:08:47.212 [DEBUG] [Thread-77459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:08:47.229 [DEBUG] [Thread-77459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:08:47.229 [INFO] [Thread-77459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:08:47.232 [DEBUG] [Thread-77459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] client lang: <none>
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] server lang: <none>
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] kex follows: False
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] Compression: none
2025-12-12T22:08:47.233 [DEBUG] [Thread-77459] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:08:47.250 [DEBUG] [Thread-77459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:08:47.251 [DEBUG] [Thread-77459] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:08:47.251 [DEBUG] [Thread-77459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:08:47.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:08:47.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:08:47.253 [DEBUG] [Thread-77459] [transport.py] [_log()] userauth is OK
2025-12-12T22:08:47.253 [DEBUG] [Thread-77459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:08:47.254 [DEBUG] [Thread-77459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:08:47.254 [DEBUG] [Thread-77459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:08:47.254 [DEBUG] [Thread-77459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:08:47.277 [INFO] [Thread-77459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:08:47.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:08:47.886 [DEBUG] [Thread-77459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:08:47.886 [DEBUG] [Thread-77459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:08:47.886 [DEBUG] [Thread-77459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:08:47.927 [DEBUG] [Thread-77459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:08:47.927 [DEBUG] [Thread-77459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:08:47.930 [DEBUG] [Thread-77459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:08:47.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:08:47.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:08:47.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:08:47.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:08:47.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:08:47.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:08:47.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:08:47.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:08:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:08:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.838989 -999.00  +10.30  37.02     89   +8.60 1 3 2 3 1     0    0 1.57 -2.20 .N... 36.5 37.0 318.6 45.9 11.8 -9.2 11.6 -7.2 11.2 -6.2 11.6 -7.4
2025-12-12T22:08:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:08:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:08:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.838989
2025-12-12T22:08:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:08:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:08:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:08:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:08:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:08:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:08:39', tmtdew=1.86, humidity=88.13, cloud=0.0, wind=37.85, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:08:08.650', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:08:47.954 [DEBUG] [Thread-77459] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:08:48.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:08:48.051 [DEBUG] [Thread-77462] [transport.py] [_log()] starting thread (client mode): 0xf57f2d40
2025-12-12T22:08:48.051 [DEBUG] [Thread-77462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:08:48.066 [DEBUG] [Thread-77462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:08:48.066 [INFO] [Thread-77462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:08:48.073 [DEBUG] [Thread-77462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:08:48.074 [DEBUG] [Thread-77462] [transport.py] [_log()] client lang: <none>
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] server lang: <none>
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] kex follows: False
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:08:48.075 [DEBUG] [Thread-77462] [transport.py] [_log()] Compression: none
2025-12-12T22:08:48.076 [DEBUG] [Thread-77462] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:08:48.131 [DEBUG] [Thread-77462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:08:48.131 [DEBUG] [Thread-77462] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:08:48.132 [DEBUG] [Thread-77462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:08:48.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:08:48.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:08:48.187 [DEBUG] [Thread-77462] [transport.py] [_log()] userauth is OK
2025-12-12T22:08:48.187 [DEBUG] [Thread-77462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:08:48.187 [DEBUG] [Thread-77462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:08:48.187 [DEBUG] [Thread-77462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:08:48.188 [DEBUG] [Thread-77462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:08:48.210 [INFO] [Thread-77462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:08:48.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:08:48.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:08:49.061 [DEBUG] [Thread-77462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:08:49.061 [DEBUG] [Thread-77462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:08:49.109 [DEBUG] [Thread-77462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:08:49.109 [DEBUG] [Thread-77462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:08:49.118 [DEBUG] [Thread-77462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:08:49.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:08:49.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:08:49.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:08:49.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:08:49.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:08:49.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:08:49.154 [DEBUG] [Thread-77462] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:08:59.579 [DEBUG] [Thread-77464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:14.634 [DEBUG] [Thread-77465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:14.703 [DEBUG] [Thread-77466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:19.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:09:19.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:09:19.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:09:19.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 9, 11), 1.87, 88.08, 0.0, 40.19, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:09:19.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:09:11
2025-12-12T22:09:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:09:20.168 [DEBUG] [Thread-77467] [transport.py] [_log()] starting thread (client mode): 0xf57f3460
2025-12-12T22:09:20.169 [DEBUG] [Thread-77467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:09:20.189 [DEBUG] [Thread-77467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:09:20.189 [INFO] [Thread-77467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:09:20.190 [DEBUG] [Thread-77467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] client lang: <none>
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] server lang: <none>
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] kex follows: False
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] Compression: none
2025-12-12T22:09:20.191 [DEBUG] [Thread-77467] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:09:20.206 [DEBUG] [Thread-77467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:09:20.206 [DEBUG] [Thread-77467] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:09:20.206 [DEBUG] [Thread-77467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:09:20.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:09:20.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:09:20.207 [DEBUG] [Thread-77467] [transport.py] [_log()] userauth is OK
2025-12-12T22:09:20.207 [DEBUG] [Thread-77467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:09:20.207 [DEBUG] [Thread-77467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:09:20.207 [DEBUG] [Thread-77467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:09:20.207 [DEBUG] [Thread-77467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:09:20.222 [INFO] [Thread-77467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:09:20.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:09:21.020 [DEBUG] [Thread-77467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:09:21.020 [DEBUG] [Thread-77467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:09:21.020 [DEBUG] [Thread-77467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:09:21.060 [DEBUG] [Thread-77467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:09:21.061 [DEBUG] [Thread-77467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:09:21.063 [DEBUG] [Thread-77467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:09:21.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:09:21.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:09:21.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:09:21.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:09:21.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:09:21.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:09:21.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.839336 -999.00  +10.30  41.35     88   +8.50 1 3 2 3 1     0    0 1.63 -0.58 .N... 36.8 41.4 316.6 49.7 11.8 -8.6 11.6 -7.6 11.2 -6.6 11.6 -6.8
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.839336
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:09:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:09:11', tmtdew=1.87, humidity=88.08, cloud=0.0, wind=40.19, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:08:38.630', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:09:21.081 [DEBUG] [Thread-77467] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:09:21.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:09:21.167 [DEBUG] [Thread-77470] [transport.py] [_log()] starting thread (client mode): 0xf5770e20
2025-12-12T22:09:21.167 [DEBUG] [Thread-77470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:09:21.182 [DEBUG] [Thread-77470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:09:21.182 [INFO] [Thread-77470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] client lang: <none>
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] server lang: <none>
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] kex follows: False
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] Compression: none
2025-12-12T22:09:21.189 [DEBUG] [Thread-77470] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:09:21.249 [DEBUG] [Thread-77470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:09:21.250 [DEBUG] [Thread-77470] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:09:21.250 [DEBUG] [Thread-77470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:09:21.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:09:21.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:09:21.313 [DEBUG] [Thread-77470] [transport.py] [_log()] userauth is OK
2025-12-12T22:09:21.313 [DEBUG] [Thread-77470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:09:21.313 [DEBUG] [Thread-77470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:09:21.313 [DEBUG] [Thread-77470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:09:21.313 [DEBUG] [Thread-77470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:09:21.329 [INFO] [Thread-77470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:09:21.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:09:21.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:09:22.153 [DEBUG] [Thread-77470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:09:22.153 [DEBUG] [Thread-77470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:09:22.201 [DEBUG] [Thread-77470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:09:22.201 [DEBUG] [Thread-77470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:09:22.209 [DEBUG] [Thread-77470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:09:22.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:09:22.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:09:22.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:09:22.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:09:22.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:09:22.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:09:22.246 [DEBUG] [Thread-77470] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:09:29.665 [DEBUG] [Thread-77472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:33.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:33.659 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:44.709 [DEBUG] [Thread-77473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:09:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:09:52.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:09:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:09:52.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 9, 43), 1.89, 87.95, 0.0, 37.49, 10.4, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:09:52.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:09:43
2025-12-12T22:09:53.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:09:53.241 [DEBUG] [Thread-77474] [transport.py] [_log()] starting thread (client mode): 0xf5773460
2025-12-12T22:09:53.241 [DEBUG] [Thread-77474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:09:53.265 [DEBUG] [Thread-77474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:09:53.265 [INFO] [Thread-77474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:09:53.267 [DEBUG] [Thread-77474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] client lang: <none>
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] server lang: <none>
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] kex follows: False
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] Compression: none
2025-12-12T22:09:53.268 [DEBUG] [Thread-77474] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:09:53.286 [DEBUG] [Thread-77474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:09:53.287 [DEBUG] [Thread-77474] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:09:53.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:09:53.288 [DEBUG] [Thread-77474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:09:53.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:09:53.290 [DEBUG] [Thread-77474] [transport.py] [_log()] userauth is OK
2025-12-12T22:09:53.291 [DEBUG] [Thread-77474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:09:53.291 [DEBUG] [Thread-77474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:09:53.291 [DEBUG] [Thread-77474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:09:53.291 [DEBUG] [Thread-77474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:09:53.327 [INFO] [Thread-77474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:09:53.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:09:53.985 [DEBUG] [Thread-77474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:09:53.986 [DEBUG] [Thread-77474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:09:53.986 [DEBUG] [Thread-77474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:09:54.027 [DEBUG] [Thread-77474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:09:54.027 [DEBUG] [Thread-77474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:09:54.030 [DEBUG] [Thread-77474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:09:54.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:09:54.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:09:54.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:09:54.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:09:54.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:09:54.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:09:54.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:09:54.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:09:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:09:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.839683 -999.00  +10.30  37.77     89   +8.60 1 3 2 3 1     0    0 1.65 0.74 .N... 41.6 37.8 320.4 53.4 11.8 -7.3 11.6 -6.5 11.2 -5.6 11.5 -5.6
2025-12-12T22:09:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:09:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:09:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.839683
2025-12-12T22:09:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:09:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:09:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:09:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:09:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:09:54.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:09:43', tmtdew=1.89, humidity=87.95, cloud=0.0, wind=37.49, temperature=10.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:09:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:09:54.054 [DEBUG] [Thread-77474] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:09:54.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:09:54.152 [DEBUG] [Thread-77477] [transport.py] [_log()] starting thread (client mode): 0xf57f3910
2025-12-12T22:09:54.152 [DEBUG] [Thread-77477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:09:54.166 [DEBUG] [Thread-77477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:09:54.166 [INFO] [Thread-77477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:09:54.173 [DEBUG] [Thread-77477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:09:54.173 [DEBUG] [Thread-77477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] client lang: <none>
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] server lang: <none>
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] kex follows: False
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:09:54.174 [DEBUG] [Thread-77477] [transport.py] [_log()] Compression: none
2025-12-12T22:09:54.175 [DEBUG] [Thread-77477] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:09:54.231 [DEBUG] [Thread-77477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:09:54.232 [DEBUG] [Thread-77477] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:09:54.232 [DEBUG] [Thread-77477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:09:54.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:09:54.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:09:54.288 [DEBUG] [Thread-77477] [transport.py] [_log()] userauth is OK
2025-12-12T22:09:54.288 [DEBUG] [Thread-77477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:09:54.288 [DEBUG] [Thread-77477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:09:54.288 [DEBUG] [Thread-77477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:09:54.288 [DEBUG] [Thread-77477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:09:54.306 [INFO] [Thread-77477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:09:54.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:09:54.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:09:55.119 [DEBUG] [Thread-77477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:09:55.119 [DEBUG] [Thread-77477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:09:55.167 [DEBUG] [Thread-77477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:09:55.167 [DEBUG] [Thread-77477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:09:55.176 [DEBUG] [Thread-77477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:09:55.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:09:55.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:09:55.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:09:55.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:09:55.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:09:55.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:09:55.210 [DEBUG] [Thread-77477] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:09:59.737 [DEBUG] [Thread-77479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:14.778 [DEBUG] [Thread-77480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:14.780 [DEBUG] [Thread-77481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:10:25.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:10:25.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
2025-12-12T22:10:25.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 10, 15), 1.89, 87.98, 0.0, 37.25, 10.44, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:10:25.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:10:15
2025-12-12T22:10:26.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:10:26.184 [DEBUG] [Thread-77482] [transport.py] [_log()] starting thread (client mode): 0xf57f1660
2025-12-12T22:10:26.184 [DEBUG] [Thread-77482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:10:26.204 [DEBUG] [Thread-77482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:10:26.205 [INFO] [Thread-77482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] client lang: <none>
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] server lang: <none>
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] kex follows: False
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] Compression: none
2025-12-12T22:10:26.208 [DEBUG] [Thread-77482] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:10:26.227 [DEBUG] [Thread-77482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:10:26.228 [DEBUG] [Thread-77482] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:10:26.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:10:26.229 [DEBUG] [Thread-77482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:10:26.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:10:26.231 [DEBUG] [Thread-77482] [transport.py] [_log()] userauth is OK
2025-12-12T22:10:26.231 [DEBUG] [Thread-77482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:10:26.231 [DEBUG] [Thread-77482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:10:26.231 [DEBUG] [Thread-77482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:10:26.231 [DEBUG] [Thread-77482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:10:26.265 [INFO] [Thread-77482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:10:26.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:10:26.895 [DEBUG] [Thread-77482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:10:26.895 [DEBUG] [Thread-77482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:10:26.895 [DEBUG] [Thread-77482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:10:26.936 [DEBUG] [Thread-77482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:10:26.936 [DEBUG] [Thread-77482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:10:26.940 [DEBUG] [Thread-77482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:10:26.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:10:26.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:10:26.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:10:26.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:10:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:10:26.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:10:26.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:10:26.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:10:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:10:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.840030 -999.00  +10.40  37.72     88   +8.60 1 3 2 3 1     0    0 1.69 2.12 ZNES. 39.7 37.7 311.8 44.6 11.8 -6.0 11.5 -4.8 11.2 -4.3 11.5 -4.4
2025-12-12T22:10:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:10:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:10:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.840030
2025-12-12T22:10:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:10:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:10:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:10:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:10:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:10:26.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:10:15', tmtdew=1.89, humidity=87.98, cloud=0.0, wind=37.25, temperature=10.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:09:38.592', atlas_cloud=3, atlas_rain=1, zp_data=[1.7747499999999992, nan, nan, nan, nan, nan, 1.9689999999999994, 1.6902500000000007, 1.8834999999999997, nan, nan, nan, nan, nan, 1.8619999999999992, 1.9319999999999995, 1.60825, nan, nan, nan, nan, nan, nan, nan, 2.1999999999999993, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:02:00')
2025-12-12T22:10:26.965 [DEBUG] [Thread-77482] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:10:27.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:10:27.066 [DEBUG] [Thread-77485] [transport.py] [_log()] starting thread (client mode): 0xf57c8c70
2025-12-12T22:10:27.066 [DEBUG] [Thread-77485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:10:27.084 [DEBUG] [Thread-77485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:10:27.084 [INFO] [Thread-77485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:10:27.092 [DEBUG] [Thread-77485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] client lang: <none>
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] server lang: <none>
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] kex follows: False
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] Compression: none
2025-12-12T22:10:27.093 [DEBUG] [Thread-77485] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:10:27.153 [DEBUG] [Thread-77485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:10:27.154 [DEBUG] [Thread-77485] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:10:27.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:10:27.155 [DEBUG] [Thread-77485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:10:27.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:10:27.212 [DEBUG] [Thread-77485] [transport.py] [_log()] userauth is OK
2025-12-12T22:10:27.212 [DEBUG] [Thread-77485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:10:27.212 [DEBUG] [Thread-77485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:10:27.213 [DEBUG] [Thread-77485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:10:27.213 [DEBUG] [Thread-77485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:10:27.232 [INFO] [Thread-77485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:10:27.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:10:27.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:10:28.135 [DEBUG] [Thread-77485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:10:28.136 [DEBUG] [Thread-77485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:10:28.184 [DEBUG] [Thread-77485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:10:28.184 [DEBUG] [Thread-77485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:10:28.193 [DEBUG] [Thread-77485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:10:28.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:10:28.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:10:28.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:10:28.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:10:28.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:10:28.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:10:28.229 [DEBUG] [Thread-77485] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:10:29.809 [DEBUG] [Thread-77487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:33.865 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:33.866 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:44.853 [DEBUG] [Thread-77488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:58.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:10:58.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:10:58.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:10:58.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 10, 47), 1.96, 87.35, 0.0, 44.66, 10.42, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:10:58.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:10:47
2025-12-12T22:10:59.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:10:59.201 [DEBUG] [Thread-77489] [transport.py] [_log()] starting thread (client mode): 0xf57c82b0
2025-12-12T22:10:59.201 [DEBUG] [Thread-77489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:10:59.224 [DEBUG] [Thread-77489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:10:59.224 [INFO] [Thread-77489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:10:59.227 [DEBUG] [Thread-77489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] client lang: <none>
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] server lang: <none>
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] kex follows: False
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] Compression: none
2025-12-12T22:10:59.228 [DEBUG] [Thread-77489] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:10:59.247 [DEBUG] [Thread-77489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:10:59.248 [DEBUG] [Thread-77489] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:10:59.248 [DEBUG] [Thread-77489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:10:59.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:10:59.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:10:59.250 [DEBUG] [Thread-77489] [transport.py] [_log()] userauth is OK
2025-12-12T22:10:59.250 [DEBUG] [Thread-77489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:10:59.250 [DEBUG] [Thread-77489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:10:59.250 [DEBUG] [Thread-77489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:10:59.250 [DEBUG] [Thread-77489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:10:59.269 [INFO] [Thread-77489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:10:59.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:10:59.881 [DEBUG] [Thread-77491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:10:59.910 [DEBUG] [Thread-77489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:10:59.910 [DEBUG] [Thread-77489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:10:59.910 [DEBUG] [Thread-77489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:10:59.951 [DEBUG] [Thread-77489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:10:59.951 [DEBUG] [Thread-77489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:10:59.954 [DEBUG] [Thread-77489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:10:59.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:10:59.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:10:59.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:10:59.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:10:59.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:10:59.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:10:59.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:10:59.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:10:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:10:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.840377 -999.00  +10.40  34.15     88   +8.60 1 3 2 3 1     0    0 1.73 3.13 .NES. 37.1 34.1 322.8 51.6 11.8 -5.0 11.5 -4.2 11.3 -3.9 11.6 -4.0
2025-12-12T22:10:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:10:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:10:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.840377
2025-12-12T22:10:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:10:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:10:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:10:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:10:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:10:59.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:10:47', tmtdew=1.96, humidity=87.35, cloud=0.0, wind=44.66, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:10:08.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:09:00')
2025-12-12T22:10:59.976 [DEBUG] [Thread-77489] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:11:00.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:11:00.072 [DEBUG] [Thread-77493] [transport.py] [_log()] starting thread (client mode): 0xf57f14b0
2025-12-12T22:11:00.072 [DEBUG] [Thread-77493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:11:00.085 [DEBUG] [Thread-77493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:11:00.085 [INFO] [Thread-77493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:11:00.093 [DEBUG] [Thread-77493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:11:00.093 [DEBUG] [Thread-77493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:11:00.093 [DEBUG] [Thread-77493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:11:00.093 [DEBUG] [Thread-77493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:11:00.093 [DEBUG] [Thread-77493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:11:00.093 [DEBUG] [Thread-77493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] client lang: <none>
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] server lang: <none>
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] kex follows: False
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:11:00.094 [DEBUG] [Thread-77493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:11:00.095 [DEBUG] [Thread-77493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:11:00.095 [DEBUG] [Thread-77493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:11:00.095 [DEBUG] [Thread-77493] [transport.py] [_log()] Compression: none
2025-12-12T22:11:00.095 [DEBUG] [Thread-77493] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:11:00.153 [DEBUG] [Thread-77493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:11:00.153 [DEBUG] [Thread-77493] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:11:00.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:11:00.155 [DEBUG] [Thread-77493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:11:00.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:11:00.208 [DEBUG] [Thread-77493] [transport.py] [_log()] userauth is OK
2025-12-12T22:11:00.209 [DEBUG] [Thread-77493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:11:00.209 [DEBUG] [Thread-77493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:11:00.209 [DEBUG] [Thread-77493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:11:00.209 [DEBUG] [Thread-77493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:11:00.228 [INFO] [Thread-77493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:11:00.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:11:00.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:11:01.042 [DEBUG] [Thread-77493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:11:01.042 [DEBUG] [Thread-77493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:11:01.091 [DEBUG] [Thread-77493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:11:01.092 [DEBUG] [Thread-77493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:11:01.101 [DEBUG] [Thread-77493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:11:01.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:11:01.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:11:01.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:11:01.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:11:01.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:11:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:11:01.140 [DEBUG] [Thread-77493] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:11:14.855 [DEBUG] [Thread-77495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:11:14.910 [DEBUG] [Thread-77496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:11:29.964 [DEBUG] [Thread-77497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:11:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:11:31.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:11:31.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:11:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 11, 19), 1.96, 87.32, 0.0, 45.04, 10.42, 1, 1, 0, 2, 1, 0),)
2025-12-12T22:11:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:11:19
2025-12-12T22:11:31.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:11:32.124 [DEBUG] [Thread-77498] [transport.py] [_log()] starting thread (client mode): 0xf57f3490
2025-12-12T22:11:32.124 [DEBUG] [Thread-77498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:11:32.144 [DEBUG] [Thread-77498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:11:32.145 [INFO] [Thread-77498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] client lang: <none>
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] server lang: <none>
2025-12-12T22:11:32.148 [DEBUG] [Thread-77498] [transport.py] [_log()] kex follows: False
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] Compression: none
2025-12-12T22:11:32.149 [DEBUG] [Thread-77498] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:11:32.167 [DEBUG] [Thread-77498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:11:32.168 [DEBUG] [Thread-77498] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:11:32.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:11:32.169 [DEBUG] [Thread-77498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:11:32.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:11:32.171 [DEBUG] [Thread-77498] [transport.py] [_log()] userauth is OK
2025-12-12T22:11:32.171 [DEBUG] [Thread-77498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:11:32.172 [DEBUG] [Thread-77498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:11:32.172 [DEBUG] [Thread-77498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:11:32.172 [DEBUG] [Thread-77498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:11:32.208 [INFO] [Thread-77498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:11:32.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:11:32.832 [DEBUG] [Thread-77498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:11:32.833 [DEBUG] [Thread-77498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:11:32.833 [DEBUG] [Thread-77498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:11:32.874 [DEBUG] [Thread-77498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:11:32.874 [DEBUG] [Thread-77498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:11:32.877 [DEBUG] [Thread-77498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:11:32.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:11:32.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:11:32.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:11:32.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:11:32.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:11:32.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:11:32.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.841072 -999.00  +10.40  45.46     88   +8.50 1 3 2 3 1     0    0 1.83 4.80 ----- 42.9 45.5 324.2 50.9 11.7 -4.4 11.5 -4.1 11.2 -3.8 11.6 -3.6
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.841072
2025-12-12T22:11:32.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:11:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:11:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:11:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:11:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:11:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:11:19', tmtdew=1.96, humidity=87.32, cloud=0.0, wind=45.04, temperature=10.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:11:08.621', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:09:00')
2025-12-12T22:11:32.899 [DEBUG] [Thread-77498] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:11:32.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:11:32.999 [DEBUG] [Thread-77501] [transport.py] [_log()] starting thread (client mode): 0xf5772980
2025-12-12T22:11:32.999 [DEBUG] [Thread-77501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:11:33.014 [DEBUG] [Thread-77501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:11:33.014 [INFO] [Thread-77501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:11:33.021 [DEBUG] [Thread-77501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:11:33.021 [DEBUG] [Thread-77501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:11:33.021 [DEBUG] [Thread-77501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:11:33.021 [DEBUG] [Thread-77501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:11:33.021 [DEBUG] [Thread-77501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:11:33.021 [DEBUG] [Thread-77501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] client lang: <none>
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] server lang: <none>
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] kex follows: False
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] Compression: none
2025-12-12T22:11:33.022 [DEBUG] [Thread-77501] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:11:33.079 [DEBUG] [Thread-77501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:11:33.079 [DEBUG] [Thread-77501] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:11:33.080 [DEBUG] [Thread-77501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:11:33.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:11:33.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:11:33.136 [DEBUG] [Thread-77501] [transport.py] [_log()] userauth is OK
2025-12-12T22:11:33.136 [DEBUG] [Thread-77501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:11:33.136 [DEBUG] [Thread-77501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:11:33.136 [DEBUG] [Thread-77501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:11:33.136 [DEBUG] [Thread-77501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:11:33.152 [INFO] [Thread-77501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:11:33.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:11:33.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:11:33.975 [DEBUG] [Thread-77501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:11:33.975 [DEBUG] [Thread-77501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:11:34.023 [DEBUG] [Thread-77501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:11:34.023 [DEBUG] [Thread-77501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:11:34.032 [DEBUG] [Thread-77501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:11:34.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:11:34.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:11:34.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:11:34.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:11:34.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:11:34.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:11:34.067 [DEBUG] [Thread-77501] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:11:34.072 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:11:34.073 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:11:44.992 [DEBUG] [Thread-77503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:00.043 [DEBUG] [Thread-77504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:04.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:12:04.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:12:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:12:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 11, 51), 1.97, 87.29, 0.0, 42.35, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:12:04.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:11:51
2025-12-12T22:12:04.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:12:05.047 [DEBUG] [Thread-77505] [transport.py] [_log()] starting thread (client mode): 0xf57cb4f0
2025-12-12T22:12:05.047 [DEBUG] [Thread-77505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:12:05.067 [DEBUG] [Thread-77505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:12:05.067 [INFO] [Thread-77505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:12:05.070 [DEBUG] [Thread-77505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] client lang: <none>
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] server lang: <none>
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] kex follows: False
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] Compression: none
2025-12-12T22:12:05.071 [DEBUG] [Thread-77505] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:12:05.090 [DEBUG] [Thread-77505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:12:05.091 [DEBUG] [Thread-77505] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:12:05.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:12:05.092 [DEBUG] [Thread-77505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:12:05.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:12:05.093 [DEBUG] [Thread-77505] [transport.py] [_log()] userauth is OK
2025-12-12T22:12:05.094 [DEBUG] [Thread-77505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:12:05.094 [DEBUG] [Thread-77505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:12:05.094 [DEBUG] [Thread-77505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:12:05.094 [DEBUG] [Thread-77505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:12:05.129 [INFO] [Thread-77505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:12:05.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:12:05.736 [DEBUG] [Thread-77505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:12:05.737 [DEBUG] [Thread-77505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:12:05.737 [DEBUG] [Thread-77505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:12:05.778 [DEBUG] [Thread-77505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:12:05.778 [DEBUG] [Thread-77505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:12:05.781 [DEBUG] [Thread-77505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:12:05.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:12:05.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:12:05.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:12:05.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:12:05.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:12:05.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:12:05.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:12:05.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:12:05.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:12:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.841419 -999.00  +10.30  42.18     88   +8.50 1 3 2 3 1     0    0 1.83 5.25 ----- 44.0 42.2 316.6 54.6 11.7 -3.8 11.6 -3.5 11.2 -3.2 11.6 -3.2
2025-12-12T22:12:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:12:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:12:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.841419
2025-12-12T22:12:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:12:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:12:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:12:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:12:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:12:05.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:11:51', tmtdew=1.97, humidity=87.29, cloud=0.0, wind=42.35, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:11:38.602', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:09:00')
2025-12-12T22:12:05.806 [DEBUG] [Thread-77505] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:12:05.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:12:05.902 [DEBUG] [Thread-77508] [transport.py] [_log()] starting thread (client mode): 0xf57c8f70
2025-12-12T22:12:05.902 [DEBUG] [Thread-77508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:12:05.917 [DEBUG] [Thread-77508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:12:05.917 [INFO] [Thread-77508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:12:05.924 [DEBUG] [Thread-77508] [transport.py] [_log()] client lang: <none>
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] server lang: <none>
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] kex follows: False
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] Compression: none
2025-12-12T22:12:05.925 [DEBUG] [Thread-77508] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:12:05.983 [DEBUG] [Thread-77508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:12:05.983 [DEBUG] [Thread-77508] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:12:05.983 [DEBUG] [Thread-77508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:12:05.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:12:05.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:12:06.040 [DEBUG] [Thread-77508] [transport.py] [_log()] userauth is OK
2025-12-12T22:12:06.041 [DEBUG] [Thread-77508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:12:06.041 [DEBUG] [Thread-77508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:12:06.041 [DEBUG] [Thread-77508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:12:06.041 [DEBUG] [Thread-77508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:12:06.055 [INFO] [Thread-77508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:12:06.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:12:06.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:12:06.900 [DEBUG] [Thread-77508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:12:06.900 [DEBUG] [Thread-77508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:12:06.948 [DEBUG] [Thread-77508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:12:06.948 [DEBUG] [Thread-77508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:12:06.957 [DEBUG] [Thread-77508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:12:06.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:12:06.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:12:06.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:12:06.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:12:06.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:12:06.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:12:06.992 [DEBUG] [Thread-77508] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:12:14.930 [DEBUG] [Thread-77510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:15.075 [DEBUG] [Thread-77511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:30.120 [DEBUG] [Thread-77512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:34.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:34.277 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:12:37.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:12:37.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:12:37.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:12:37.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 12, 23), 1.98, 87.2, 0.0, 45.66, 10.36, 1, 1, 0, 2, 1, 0),)
2025-12-12T22:12:37.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:12:23
2025-12-12T22:12:37.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:12:37.969 [DEBUG] [Thread-77513] [transport.py] [_log()] starting thread (client mode): 0xf57ca050
2025-12-12T22:12:37.969 [DEBUG] [Thread-77513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:12:37.989 [DEBUG] [Thread-77513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:12:37.989 [INFO] [Thread-77513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:12:37.992 [DEBUG] [Thread-77513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] client lang: <none>
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] server lang: <none>
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] kex follows: False
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] Compression: none
2025-12-12T22:12:37.993 [DEBUG] [Thread-77513] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:12:38.011 [DEBUG] [Thread-77513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:12:38.011 [DEBUG] [Thread-77513] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:12:38.011 [DEBUG] [Thread-77513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:12:38.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:12:38.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:12:38.012 [DEBUG] [Thread-77513] [transport.py] [_log()] userauth is OK
2025-12-12T22:12:38.012 [DEBUG] [Thread-77513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:12:38.012 [DEBUG] [Thread-77513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:12:38.012 [DEBUG] [Thread-77513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:12:38.012 [DEBUG] [Thread-77513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:12:38.022 [INFO] [Thread-77513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:12:38.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:12:38.644 [DEBUG] [Thread-77513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:12:38.644 [DEBUG] [Thread-77513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:12:38.644 [DEBUG] [Thread-77513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:12:38.685 [DEBUG] [Thread-77513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:12:38.685 [DEBUG] [Thread-77513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:12:38.687 [DEBUG] [Thread-77513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:12:38.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:12:38.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:12:38.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:12:38.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:12:38.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:12:38.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:12:38.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:12:38.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.841766 -999.00  +10.40  36.80     88   +8.60 1 3 2 3 1     0    0 1.87 6.04 ----- 34.9 36.8 314.8 46.3 11.7 -3.1 11.5 -3.1 11.2 -2.9 11.6 -2.7
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.841766
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:12:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:12:23', tmtdew=1.98, humidity=87.2, cloud=0.0, wind=45.66, temperature=10.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:12:08.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:09:00')
2025-12-12T22:12:38.709 [DEBUG] [Thread-77513] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:12:38.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:12:38.793 [DEBUG] [Thread-77516] [transport.py] [_log()] starting thread (client mode): 0xf57f3ee0
2025-12-12T22:12:38.793 [DEBUG] [Thread-77516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:12:38.808 [DEBUG] [Thread-77516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:12:38.808 [INFO] [Thread-77516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:12:38.816 [DEBUG] [Thread-77516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] client lang: <none>
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] server lang: <none>
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] kex follows: False
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:12:38.817 [DEBUG] [Thread-77516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:12:38.818 [DEBUG] [Thread-77516] [transport.py] [_log()] Compression: none
2025-12-12T22:12:38.818 [DEBUG] [Thread-77516] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:12:38.873 [DEBUG] [Thread-77516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:12:38.873 [DEBUG] [Thread-77516] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:12:38.874 [DEBUG] [Thread-77516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:12:38.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:12:38.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:12:38.930 [DEBUG] [Thread-77516] [transport.py] [_log()] userauth is OK
2025-12-12T22:12:38.930 [DEBUG] [Thread-77516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:12:38.930 [DEBUG] [Thread-77516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:12:38.930 [DEBUG] [Thread-77516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:12:38.930 [DEBUG] [Thread-77516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:12:38.949 [INFO] [Thread-77516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:12:38.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:12:38.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:12:39.799 [DEBUG] [Thread-77516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:12:39.799 [DEBUG] [Thread-77516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:12:39.847 [DEBUG] [Thread-77516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:12:39.847 [DEBUG] [Thread-77516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:12:39.856 [DEBUG] [Thread-77516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:12:39.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:12:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:12:39.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:12:39.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:12:39.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:12:39.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:12:39.890 [DEBUG] [Thread-77516] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:12:45.147 [DEBUG] [Thread-77518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:00.192 [DEBUG] [Thread-77519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:13:09.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:13:09.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:13:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 12, 55), 2.04, 87.15, 0.0, 41.34, 10.34, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:13:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:12:55
2025-12-12T22:13:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:13:10.860 [DEBUG] [Thread-77520] [transport.py] [_log()] starting thread (client mode): 0xf57f3580
2025-12-12T22:13:10.860 [DEBUG] [Thread-77520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:13:10.881 [DEBUG] [Thread-77520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:13:10.881 [INFO] [Thread-77520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] client lang: <none>
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] server lang: <none>
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] kex follows: False
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] Compression: none
2025-12-12T22:13:10.882 [DEBUG] [Thread-77520] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:13:10.899 [DEBUG] [Thread-77520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:13:10.899 [DEBUG] [Thread-77520] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:13:10.900 [DEBUG] [Thread-77520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:13:10.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:13:10.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:13:10.903 [DEBUG] [Thread-77520] [transport.py] [_log()] userauth is OK
2025-12-12T22:13:10.903 [DEBUG] [Thread-77520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:13:10.903 [DEBUG] [Thread-77520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:13:10.903 [DEBUG] [Thread-77520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:13:10.903 [DEBUG] [Thread-77520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:13:10.928 [INFO] [Thread-77520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:13:10.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:13:11.622 [DEBUG] [Thread-77520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:13:11.623 [DEBUG] [Thread-77520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:13:11.623 [DEBUG] [Thread-77520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:13:11.665 [DEBUG] [Thread-77520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:13:11.665 [DEBUG] [Thread-77520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:13:11.668 [DEBUG] [Thread-77520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:13:11.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:13:11.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:13:11.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:13:11.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:13:11.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:13:11.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:13:11.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.842114 -999.00  +10.50  37.83     88   +8.60 1 3 2 3 1     0    0 1.89 7.24 ----- 33.9 37.8 326.0 43.7 11.7 -2.7 11.5 -2.5 11.2 -2.7 11.6 -2.2
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.842114
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:13:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:12:55', tmtdew=2.04, humidity=87.15, cloud=0.0, wind=41.34, temperature=10.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:12:38.650', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:09:00')
2025-12-12T22:13:11.688 [DEBUG] [Thread-77520] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:13:11.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:13:11.777 [DEBUG] [Thread-77523] [transport.py] [_log()] starting thread (client mode): 0xf578a170
2025-12-12T22:13:11.777 [DEBUG] [Thread-77523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:13:11.792 [DEBUG] [Thread-77523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:13:11.792 [INFO] [Thread-77523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] client lang: <none>
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] server lang: <none>
2025-12-12T22:13:11.799 [DEBUG] [Thread-77523] [transport.py] [_log()] kex follows: False
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] Compression: none
2025-12-12T22:13:11.800 [DEBUG] [Thread-77523] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:13:11.856 [DEBUG] [Thread-77523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:13:11.856 [DEBUG] [Thread-77523] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:13:11.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:13:11.857 [DEBUG] [Thread-77523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:13:11.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:13:11.913 [DEBUG] [Thread-77523] [transport.py] [_log()] userauth is OK
2025-12-12T22:13:11.913 [DEBUG] [Thread-77523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:13:11.913 [DEBUG] [Thread-77523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:13:11.913 [DEBUG] [Thread-77523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:13:11.913 [DEBUG] [Thread-77523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:13:11.931 [INFO] [Thread-77523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:13:11.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:13:11.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:13:12.771 [DEBUG] [Thread-77523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:13:12.771 [DEBUG] [Thread-77523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:13:12.818 [DEBUG] [Thread-77523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:13:12.818 [DEBUG] [Thread-77523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:13:12.827 [DEBUG] [Thread-77523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:13:12.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:13:12.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:13:12.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:13:12.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:13:12.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:13:12.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:13:12.859 [DEBUG] [Thread-77523] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:13:15.004 [DEBUG] [Thread-77525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:15.218 [DEBUG] [Thread-77526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:30.251 [DEBUG] [Thread-77527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:34.485 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:34.487 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:42.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:13:42.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:13:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:13:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 13, 28), 2.02, 87.29, 0.0, 41.13, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:13:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:13:28
2025-12-12T22:13:43.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:13:43.811 [DEBUG] [Thread-77528] [transport.py] [_log()] starting thread (client mode): 0xf57711b0
2025-12-12T22:13:43.811 [DEBUG] [Thread-77528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:13:43.830 [DEBUG] [Thread-77528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:13:43.830 [INFO] [Thread-77528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:13:43.833 [DEBUG] [Thread-77528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] client lang: <none>
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] server lang: <none>
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] kex follows: False
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] Compression: none
2025-12-12T22:13:43.834 [DEBUG] [Thread-77528] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:13:43.852 [DEBUG] [Thread-77528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:13:43.852 [DEBUG] [Thread-77528] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:13:43.853 [DEBUG] [Thread-77528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:13:43.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:13:43.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:13:43.853 [DEBUG] [Thread-77528] [transport.py] [_log()] userauth is OK
2025-12-12T22:13:43.853 [DEBUG] [Thread-77528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:13:43.853 [DEBUG] [Thread-77528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:13:43.853 [DEBUG] [Thread-77528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:13:43.853 [DEBUG] [Thread-77528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:13:43.876 [INFO] [Thread-77528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:13:43.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:13:44.521 [DEBUG] [Thread-77528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:13:44.521 [DEBUG] [Thread-77528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:13:44.521 [DEBUG] [Thread-77528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:13:44.565 [DEBUG] [Thread-77528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:13:44.566 [DEBUG] [Thread-77528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:13:44.572 [DEBUG] [Thread-77528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:13:44.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:13:44.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:13:44.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:13:44.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:13:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:13:44.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:13:44.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:13:44.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:13:44.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:13:44.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.842461 -999.00  +10.40  36.23     88   +8.60 1 3 2 3 1     0    0 1.90 7.83 ----- 36.3 36.2 332.6 49.8 11.8 -2.7 11.6 -2.5 11.3 -2.4 11.7 -2.2
2025-12-12T22:13:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:13:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:13:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.842461
2025-12-12T22:13:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:13:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:13:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:13:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:13:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:13:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:13:28', tmtdew=2.02, humidity=87.29, cloud=0.0, wind=41.13, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:13:08.630', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:13:44.612 [DEBUG] [Thread-77528] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:13:44.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:13:44.704 [DEBUG] [Thread-77531] [transport.py] [_log()] starting thread (client mode): 0xf57f26b0
2025-12-12T22:13:44.704 [DEBUG] [Thread-77531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:13:44.720 [DEBUG] [Thread-77531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:13:44.720 [INFO] [Thread-77531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] client lang: <none>
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] server lang: <none>
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] kex follows: False
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:13:44.729 [DEBUG] [Thread-77531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:13:44.730 [DEBUG] [Thread-77531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:13:44.730 [DEBUG] [Thread-77531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:13:44.730 [DEBUG] [Thread-77531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:13:44.730 [DEBUG] [Thread-77531] [transport.py] [_log()] Compression: none
2025-12-12T22:13:44.730 [DEBUG] [Thread-77531] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:13:44.784 [DEBUG] [Thread-77531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:13:44.785 [DEBUG] [Thread-77531] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:13:44.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:13:44.786 [DEBUG] [Thread-77531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:13:44.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:13:44.841 [DEBUG] [Thread-77531] [transport.py] [_log()] userauth is OK
2025-12-12T22:13:44.841 [DEBUG] [Thread-77531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:13:44.841 [DEBUG] [Thread-77531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:13:44.841 [DEBUG] [Thread-77531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:13:44.841 [DEBUG] [Thread-77531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:13:44.861 [INFO] [Thread-77531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:13:44.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:13:44.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:13:45.278 [DEBUG] [Thread-77533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:13:45.695 [DEBUG] [Thread-77531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:13:45.695 [DEBUG] [Thread-77531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:13:45.743 [DEBUG] [Thread-77531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:13:45.743 [DEBUG] [Thread-77531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:13:45.752 [DEBUG] [Thread-77531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:13:45.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:13:45.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:13:45.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:13:45.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:13:45.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:13:45.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:13:45.788 [DEBUG] [Thread-77531] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:14:00.321 [DEBUG] [Thread-77534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:15.081 [DEBUG] [Thread-77535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:15.352 [DEBUG] [Thread-77536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:15.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:14:15.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:14:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:14:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 13, 28), 2.02, 87.29, 0.0, 41.13, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:14:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:13:28
2025-12-12T22:14:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:14:16.752 [DEBUG] [Thread-77537] [transport.py] [_log()] starting thread (client mode): 0xf57c9420
2025-12-12T22:14:16.752 [DEBUG] [Thread-77537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:14:16.773 [DEBUG] [Thread-77537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:14:16.773 [INFO] [Thread-77537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] client lang: <none>
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] server lang: <none>
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] kex follows: False
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] Compression: none
2025-12-12T22:14:16.777 [DEBUG] [Thread-77537] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:14:16.793 [DEBUG] [Thread-77537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:14:16.794 [DEBUG] [Thread-77537] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:14:16.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:14:16.795 [DEBUG] [Thread-77537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:14:16.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:14:16.796 [DEBUG] [Thread-77537] [transport.py] [_log()] userauth is OK
2025-12-12T22:14:16.797 [DEBUG] [Thread-77537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:14:16.797 [DEBUG] [Thread-77537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:14:16.797 [DEBUG] [Thread-77537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:14:16.797 [DEBUG] [Thread-77537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:14:16.820 [INFO] [Thread-77537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:14:16.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:14:17.477 [DEBUG] [Thread-77537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:14:17.477 [DEBUG] [Thread-77537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:14:17.478 [DEBUG] [Thread-77537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:14:17.518 [DEBUG] [Thread-77537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:14:17.518 [DEBUG] [Thread-77537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:14:17.521 [DEBUG] [Thread-77537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:14:17.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:14:17.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:14:17.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:14:17.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:14:17.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:14:17.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:14:17.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:14:17.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:14:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:14:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.842808 -999.00  +10.30  38.42     88   +8.50 1 3 2 3 1     0    0 1.93 8.38 ----- 36.1 38.4 329.8 53.1 11.8 -2.7 11.6 -2.5 11.3 -2.3 11.7 -2.0
2025-12-12T22:14:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:14:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:14:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.842808
2025-12-12T22:14:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:14:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:14:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:14:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:14:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:14:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:13:28', tmtdew=2.02, humidity=87.29, cloud=0.0, wind=41.13, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:13:38.611', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:14:17.545 [DEBUG] [Thread-77537] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:14:17.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:14:17.640 [DEBUG] [Thread-77540] [transport.py] [_log()] starting thread (client mode): 0xf57c9810
2025-12-12T22:14:17.640 [DEBUG] [Thread-77540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:14:17.655 [DEBUG] [Thread-77540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:14:17.655 [INFO] [Thread-77540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:14:17.663 [DEBUG] [Thread-77540] [transport.py] [_log()] client lang: <none>
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] server lang: <none>
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] kex follows: False
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] Compression: none
2025-12-12T22:14:17.664 [DEBUG] [Thread-77540] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:14:17.719 [DEBUG] [Thread-77540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:14:17.719 [DEBUG] [Thread-77540] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:14:17.720 [DEBUG] [Thread-77540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:14:17.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:14:17.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:14:17.777 [DEBUG] [Thread-77540] [transport.py] [_log()] userauth is OK
2025-12-12T22:14:17.777 [DEBUG] [Thread-77540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:14:17.777 [DEBUG] [Thread-77540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:14:17.777 [DEBUG] [Thread-77540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:14:17.777 [DEBUG] [Thread-77540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:14:17.801 [INFO] [Thread-77540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:14:17.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:14:17.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:14:18.629 [DEBUG] [Thread-77540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:14:18.629 [DEBUG] [Thread-77540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:14:18.677 [DEBUG] [Thread-77540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:14:18.677 [DEBUG] [Thread-77540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:14:18.685 [DEBUG] [Thread-77540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:14:18.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:14:18.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:14:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:14:18.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:14:18.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:14:18.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:14:18.720 [DEBUG] [Thread-77540] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:14:30.377 [DEBUG] [Thread-77542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:34.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:34.691 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:45.411 [DEBUG] [Thread-77543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:14:48.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:14:48.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:14:48.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:14:49.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 14, 32), 2.0, 87.42, 0.0, 39.28, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:14:49.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:14:32
2025-12-12T22:14:49.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:14:49.662 [DEBUG] [Thread-77544] [transport.py] [_log()] starting thread (client mode): 0xf578a230
2025-12-12T22:14:49.663 [DEBUG] [Thread-77544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:14:49.686 [DEBUG] [Thread-77544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:14:49.687 [INFO] [Thread-77544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:14:49.690 [DEBUG] [Thread-77544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:14:49.690 [DEBUG] [Thread-77544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:14:49.690 [DEBUG] [Thread-77544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:14:49.690 [DEBUG] [Thread-77544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:49.690 [DEBUG] [Thread-77544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:49.690 [DEBUG] [Thread-77544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] client lang: <none>
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] server lang: <none>
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] kex follows: False
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:14:49.691 [DEBUG] [Thread-77544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:14:49.692 [DEBUG] [Thread-77544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:14:49.692 [DEBUG] [Thread-77544] [transport.py] [_log()] Compression: none
2025-12-12T22:14:49.692 [DEBUG] [Thread-77544] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:14:49.710 [DEBUG] [Thread-77544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:14:49.711 [DEBUG] [Thread-77544] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:14:49.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:14:49.711 [DEBUG] [Thread-77544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:14:49.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:14:49.714 [DEBUG] [Thread-77544] [transport.py] [_log()] userauth is OK
2025-12-12T22:14:49.715 [DEBUG] [Thread-77544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:14:49.715 [DEBUG] [Thread-77544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:14:49.715 [DEBUG] [Thread-77544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:14:49.715 [DEBUG] [Thread-77544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:14:49.739 [INFO] [Thread-77544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:14:49.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:14:50.372 [DEBUG] [Thread-77544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:14:50.372 [DEBUG] [Thread-77544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:14:50.373 [DEBUG] [Thread-77544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:14:50.414 [DEBUG] [Thread-77544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:14:50.414 [DEBUG] [Thread-77544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:14:50.418 [DEBUG] [Thread-77544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:14:50.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:14:50.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:14:50.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:14:50.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:14:50.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:14:50.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:14:50.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:14:50.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:14:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:14:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.843155 -999.00  +10.30  33.08     89   +8.50 1 3 2 3 1     0    0 1.98 9.94 ----- 37.1 33.1 323.2 50.0 11.8 -2.5 11.7 -2.5 11.3 -2.8 11.6 -2.2
2025-12-12T22:14:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:14:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:14:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.843155
2025-12-12T22:14:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:14:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:14:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:14:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:14:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:14:50.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:14:32', tmtdew=2.0, humidity=87.42, cloud=0.0, wind=39.28, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:14:08.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:14:50.450 [DEBUG] [Thread-77544] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:14:50.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:14:50.537 [DEBUG] [Thread-77547] [transport.py] [_log()] starting thread (client mode): 0xf578bac0
2025-12-12T22:14:50.537 [DEBUG] [Thread-77547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:14:50.554 [DEBUG] [Thread-77547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:14:50.554 [INFO] [Thread-77547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:14:50.562 [DEBUG] [Thread-77547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:14:50.562 [DEBUG] [Thread-77547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:14:50.562 [DEBUG] [Thread-77547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:14:50.562 [DEBUG] [Thread-77547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] client lang: <none>
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] server lang: <none>
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] kex follows: False
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] Compression: none
2025-12-12T22:14:50.563 [DEBUG] [Thread-77547] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:14:50.619 [DEBUG] [Thread-77547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:14:50.620 [DEBUG] [Thread-77547] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:14:50.620 [DEBUG] [Thread-77547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:14:50.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:14:50.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:14:50.675 [DEBUG] [Thread-77547] [transport.py] [_log()] userauth is OK
2025-12-12T22:14:50.675 [DEBUG] [Thread-77547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:14:50.675 [DEBUG] [Thread-77547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:14:50.676 [DEBUG] [Thread-77547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:14:50.676 [DEBUG] [Thread-77547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:14:50.695 [INFO] [Thread-77547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:14:50.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:14:50.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:14:51.572 [DEBUG] [Thread-77547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:14:51.572 [DEBUG] [Thread-77547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:14:51.620 [DEBUG] [Thread-77547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:14:51.620 [DEBUG] [Thread-77547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:14:51.628 [DEBUG] [Thread-77547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:14:51.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:14:51.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:14:51.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:14:51.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:14:51.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:14:51.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:14:51.662 [DEBUG] [Thread-77547] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:15:00.441 [DEBUG] [Thread-77549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:15.155 [DEBUG] [Thread-77550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:15.492 [DEBUG] [Thread-77551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:15:21.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:15:21.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:15:22.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 15, 4), 2.01, 87.35, 0.0, 42.86, 10.39, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:15:22.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:15:04
2025-12-12T22:15:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:15:22.631 [DEBUG] [Thread-77552] [transport.py] [_log()] starting thread (client mode): 0xf57897e0
2025-12-12T22:15:22.631 [DEBUG] [Thread-77552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:15:22.652 [DEBUG] [Thread-77552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:15:22.652 [INFO] [Thread-77552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:15:22.653 [DEBUG] [Thread-77552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:15:22.653 [DEBUG] [Thread-77552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:15:22.653 [DEBUG] [Thread-77552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] client lang: <none>
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] server lang: <none>
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] kex follows: False
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] Compression: none
2025-12-12T22:15:22.654 [DEBUG] [Thread-77552] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:15:22.670 [DEBUG] [Thread-77552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:15:22.670 [DEBUG] [Thread-77552] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:15:22.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:15:22.671 [DEBUG] [Thread-77552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:15:22.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:15:22.672 [DEBUG] [Thread-77552] [transport.py] [_log()] userauth is OK
2025-12-12T22:15:22.672 [DEBUG] [Thread-77552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:15:22.672 [DEBUG] [Thread-77552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:15:22.672 [DEBUG] [Thread-77552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:15:22.672 [DEBUG] [Thread-77552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:15:22.686 [INFO] [Thread-77552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:15:22.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:15:23.287 [DEBUG] [Thread-77552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:15:23.287 [DEBUG] [Thread-77552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:15:23.288 [DEBUG] [Thread-77552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:15:23.335 [DEBUG] [Thread-77552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:15:23.335 [DEBUG] [Thread-77552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:15:23.339 [DEBUG] [Thread-77552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:15:23.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:15:23.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:15:23.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:15:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:15:23.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:15:23.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:15:23.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:15:23.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:15:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:15:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.843849 -999.00  +10.20  40.84     89   +8.50 1 3 2 3 1     0    0 2.04 11.32 ----- 40.2 40.8 314.8 55.8 11.8 -3.0 11.6 -3.0 11.2 -2.5 11.5 -2.3
2025-12-12T22:15:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:15:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:15:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.843849
2025-12-12T22:15:23.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:15:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:15:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:15:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:15:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:15:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:15:04', tmtdew=2.01, humidity=87.35, cloud=0.0, wind=42.86, temperature=10.39, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:15:08.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:15:23.365 [DEBUG] [Thread-77552] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:15:23.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:15:23.466 [DEBUG] [Thread-77555] [transport.py] [_log()] starting thread (client mode): 0xf57f1330
2025-12-12T22:15:23.466 [DEBUG] [Thread-77555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:15:23.481 [DEBUG] [Thread-77555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:15:23.481 [INFO] [Thread-77555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:23.489 [DEBUG] [Thread-77555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] client lang: <none>
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] server lang: <none>
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] kex follows: False
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] Compression: none
2025-12-12T22:15:23.490 [DEBUG] [Thread-77555] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:15:23.546 [DEBUG] [Thread-77555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:15:23.547 [DEBUG] [Thread-77555] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:15:23.547 [DEBUG] [Thread-77555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:15:23.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:15:23.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:15:23.603 [DEBUG] [Thread-77555] [transport.py] [_log()] userauth is OK
2025-12-12T22:15:23.603 [DEBUG] [Thread-77555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:15:23.603 [DEBUG] [Thread-77555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:15:23.603 [DEBUG] [Thread-77555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:15:23.603 [DEBUG] [Thread-77555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:15:23.623 [INFO] [Thread-77555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:15:23.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:15:23.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:15:24.423 [DEBUG] [Thread-77555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:15:24.423 [DEBUG] [Thread-77555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:15:24.472 [DEBUG] [Thread-77555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:15:24.472 [DEBUG] [Thread-77555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:15:24.481 [DEBUG] [Thread-77555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:15:24.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:15:24.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:15:24.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:15:24.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:15:24.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:15:24.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:15:24.517 [DEBUG] [Thread-77555] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:15:30.519 [DEBUG] [Thread-77557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:34.896 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:34.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:45.561 [DEBUG] [Thread-77558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:15:54.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:15:54.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:15:54.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:15:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 15, 36), 2.01, 87.34, 0.0, 41.15, 10.37, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:15:55.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:15:36
2025-12-12T22:15:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:15:55.493 [DEBUG] [Thread-77559] [transport.py] [_log()] starting thread (client mode): 0xf57f1e70
2025-12-12T22:15:55.493 [DEBUG] [Thread-77559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:15:55.513 [DEBUG] [Thread-77559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:15:55.514 [INFO] [Thread-77559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:15:55.516 [DEBUG] [Thread-77559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] client lang: <none>
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] server lang: <none>
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] kex follows: False
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] Compression: none
2025-12-12T22:15:55.517 [DEBUG] [Thread-77559] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:15:55.534 [DEBUG] [Thread-77559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:15:55.535 [DEBUG] [Thread-77559] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:15:55.535 [DEBUG] [Thread-77559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:15:55.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:15:55.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:15:55.537 [DEBUG] [Thread-77559] [transport.py] [_log()] userauth is OK
2025-12-12T22:15:55.537 [DEBUG] [Thread-77559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:15:55.537 [DEBUG] [Thread-77559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:15:55.537 [DEBUG] [Thread-77559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:15:55.538 [DEBUG] [Thread-77559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:15:55.557 [INFO] [Thread-77559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:15:55.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:15:56.183 [DEBUG] [Thread-77559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:15:56.183 [DEBUG] [Thread-77559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:15:56.183 [DEBUG] [Thread-77559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:15:56.225 [DEBUG] [Thread-77559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:15:56.225 [DEBUG] [Thread-77559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:15:56.229 [DEBUG] [Thread-77559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:15:56.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:15:56.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:15:56.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:15:56.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:15:56.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:15:56.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:15:56.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:15:56.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:15:56.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:15:56.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.844197 -999.00  +10.10  45.58     90   +8.60 1 3 2 3 1     0    0 2.01 10.56 ----- 54.2 45.6 317.0 51.5 11.7 -3.1 11.5 -3.0 11.1 -2.5 11.4 -2.2
2025-12-12T22:15:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:15:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:15:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.844197
2025-12-12T22:15:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:15:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:15:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:15:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:15:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:15:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:15:36', tmtdew=2.01, humidity=87.34, cloud=0.0, wind=41.15, temperature=10.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:15:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:15:56.264 [DEBUG] [Thread-77559] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:15:56.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:15:56.360 [DEBUG] [Thread-77562] [transport.py] [_log()] starting thread (client mode): 0xf57f3fd0
2025-12-12T22:15:56.360 [DEBUG] [Thread-77562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:15:56.376 [DEBUG] [Thread-77562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:15:56.376 [INFO] [Thread-77562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:15:56.383 [DEBUG] [Thread-77562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] client lang: <none>
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] server lang: <none>
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] kex follows: False
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] Compression: none
2025-12-12T22:15:56.384 [DEBUG] [Thread-77562] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:15:56.442 [DEBUG] [Thread-77562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:15:56.443 [DEBUG] [Thread-77562] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:15:56.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:15:56.444 [DEBUG] [Thread-77562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:15:56.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:15:56.498 [DEBUG] [Thread-77562] [transport.py] [_log()] userauth is OK
2025-12-12T22:15:56.498 [DEBUG] [Thread-77562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:15:56.498 [DEBUG] [Thread-77562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:15:56.498 [DEBUG] [Thread-77562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:15:56.499 [DEBUG] [Thread-77562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:15:56.518 [INFO] [Thread-77562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:15:56.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:15:56.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:15:57.363 [DEBUG] [Thread-77562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:15:57.363 [DEBUG] [Thread-77562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:15:57.412 [DEBUG] [Thread-77562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:15:57.412 [DEBUG] [Thread-77562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:15:57.421 [DEBUG] [Thread-77562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:15:57.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:15:57.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:15:57.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:15:57.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:15:57.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:15:57.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:15:57.456 [DEBUG] [Thread-77562] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:16:00.589 [DEBUG] [Thread-77564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:16:15.233 [DEBUG] [Thread-77565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:16:15.630 [DEBUG] [Thread-77566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:16:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:16:27.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:16:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:16:28.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 16, 8), 1.98, 87.49, 0.0, 42.54, 10.36, 1, 1, 2, 2, 0, 0),)
2025-12-12T22:16:28.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:16:08
2025-12-12T22:16:28.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:16:28.468 [DEBUG] [Thread-77567] [transport.py] [_log()] starting thread (client mode): 0xf5773790
2025-12-12T22:16:28.468 [DEBUG] [Thread-77567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:16:28.488 [DEBUG] [Thread-77567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:16:28.488 [INFO] [Thread-77567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] client lang: <none>
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] server lang: <none>
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] kex follows: False
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] Compression: none
2025-12-12T22:16:28.491 [DEBUG] [Thread-77567] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:16:28.507 [DEBUG] [Thread-77567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:16:28.507 [DEBUG] [Thread-77567] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:16:28.507 [DEBUG] [Thread-77567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:16:28.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:16:28.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:16:28.508 [DEBUG] [Thread-77567] [transport.py] [_log()] userauth is OK
2025-12-12T22:16:28.508 [DEBUG] [Thread-77567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:16:28.508 [DEBUG] [Thread-77567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:16:28.508 [DEBUG] [Thread-77567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:16:28.508 [DEBUG] [Thread-77567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:16:28.523 [INFO] [Thread-77567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:16:28.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:16:29.143 [DEBUG] [Thread-77567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:16:29.143 [DEBUG] [Thread-77567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:16:29.143 [DEBUG] [Thread-77567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:16:29.184 [DEBUG] [Thread-77567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:16:29.184 [DEBUG] [Thread-77567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:16:29.185 [DEBUG] [Thread-77567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:16:29.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:16:29.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:16:29.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:16:29.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:16:29.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:16:29.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:16:29.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:16:29.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:16:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:16:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.844544 -999.00  +10.00  43.50     90   +8.50 1 3 2 3 1     0    0 1.99 11.05 ----- 49.9 43.5 316.4 56.8 11.6 -2.7 11.5 -2.7 11.0 -2.7 11.3 -1.9
2025-12-12T22:16:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:16:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:16:29.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.844544
2025-12-12T22:16:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:16:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:16:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:16:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:16:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:16:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:16:08', tmtdew=1.98, humidity=87.49, cloud=0.0, wind=42.54, temperature=10.36, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:16:08.602', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:16:29.203 [DEBUG] [Thread-77567] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:16:29.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:16:29.291 [DEBUG] [Thread-77570] [transport.py] [_log()] starting thread (client mode): 0xf5773430
2025-12-12T22:16:29.291 [DEBUG] [Thread-77570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:16:29.305 [DEBUG] [Thread-77570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:16:29.305 [INFO] [Thread-77570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] client lang: <none>
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] server lang: <none>
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] kex follows: False
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] Compression: none
2025-12-12T22:16:29.313 [DEBUG] [Thread-77570] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:16:29.368 [DEBUG] [Thread-77570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:16:29.368 [DEBUG] [Thread-77570] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:16:29.368 [DEBUG] [Thread-77570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:16:29.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:16:29.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:16:29.425 [DEBUG] [Thread-77570] [transport.py] [_log()] userauth is OK
2025-12-12T22:16:29.425 [DEBUG] [Thread-77570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:16:29.425 [DEBUG] [Thread-77570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:16:29.425 [DEBUG] [Thread-77570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:16:29.425 [DEBUG] [Thread-77570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:16:29.438 [INFO] [Thread-77570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:16:29.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:16:29.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:16:30.252 [DEBUG] [Thread-77570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:16:30.252 [DEBUG] [Thread-77570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:16:30.301 [DEBUG] [Thread-77570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:16:30.301 [DEBUG] [Thread-77570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:16:30.309 [DEBUG] [Thread-77570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:16:30.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:16:30.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:16:30.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:16:30.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:16:30.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:16:30.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:16:30.346 [DEBUG] [Thread-77570] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:16:30.657 [DEBUG] [Thread-77572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:16:35.103 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:16:35.104 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:16:45.691 [DEBUG] [Thread-77573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:00.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:17:00.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:17:00.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:17:00.718 [DEBUG] [Thread-77574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:01.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 16, 40), 1.88, 88.02, 0.0, 45.57, 10.31, 1, 1, 2, 2, 1, 0),)
2025-12-12T22:17:01.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:16:40
2025-12-12T22:17:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:17:01.338 [DEBUG] [Thread-77575] [transport.py] [_log()] starting thread (client mode): 0xf57c9cc0
2025-12-12T22:17:01.338 [DEBUG] [Thread-77575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:17:01.358 [DEBUG] [Thread-77575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:17:01.358 [INFO] [Thread-77575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:17:01.362 [DEBUG] [Thread-77575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] client lang: <none>
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] server lang: <none>
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] kex follows: False
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] Compression: none
2025-12-12T22:17:01.363 [DEBUG] [Thread-77575] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:17:01.382 [DEBUG] [Thread-77575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:17:01.382 [DEBUG] [Thread-77575] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:17:01.383 [DEBUG] [Thread-77575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:17:01.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:17:01.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:17:01.385 [DEBUG] [Thread-77575] [transport.py] [_log()] userauth is OK
2025-12-12T22:17:01.385 [DEBUG] [Thread-77575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:17:01.385 [DEBUG] [Thread-77575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:17:01.385 [DEBUG] [Thread-77575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:17:01.386 [DEBUG] [Thread-77575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:17:01.410 [INFO] [Thread-77575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:17:01.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:17:02.055 [DEBUG] [Thread-77575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:17:02.055 [DEBUG] [Thread-77575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:17:02.056 [DEBUG] [Thread-77575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:17:02.098 [DEBUG] [Thread-77575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:17:02.099 [DEBUG] [Thread-77575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:17:02.103 [DEBUG] [Thread-77575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:17:02.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:17:02.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:17:02.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:17:02.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:17:02.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:17:02.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:17:02.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:17:02.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:17:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:17:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.844891 -999.00  +10.00  47.77     90   +8.50 1 3 2 3 1     0    0 1.95 9.82 ----- 39.2 47.8 316.0 56.6 11.6 -2.6 11.4 -2.6 10.9 -1.9 11.1 -1.7
2025-12-12T22:17:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:17:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:17:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.844891
2025-12-12T22:17:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:17:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:17:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:17:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:17:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:17:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:16:40', tmtdew=1.88, humidity=88.02, cloud=0.0, wind=45.57, temperature=10.31, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:16:38.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:17:02.139 [DEBUG] [Thread-77575] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:17:02.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:17:02.233 [DEBUG] [Thread-77578] [transport.py] [_log()] starting thread (client mode): 0xf5789d50
2025-12-12T22:17:02.233 [DEBUG] [Thread-77578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:17:02.248 [DEBUG] [Thread-77578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:17:02.248 [INFO] [Thread-77578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] client lang: <none>
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] server lang: <none>
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] kex follows: False
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] Compression: none
2025-12-12T22:17:02.256 [DEBUG] [Thread-77578] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:17:02.313 [DEBUG] [Thread-77578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:17:02.313 [DEBUG] [Thread-77578] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:17:02.314 [DEBUG] [Thread-77578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:17:02.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:17:02.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:17:02.370 [DEBUG] [Thread-77578] [transport.py] [_log()] userauth is OK
2025-12-12T22:17:02.371 [DEBUG] [Thread-77578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:17:02.371 [DEBUG] [Thread-77578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:17:02.371 [DEBUG] [Thread-77578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:17:02.371 [DEBUG] [Thread-77578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:17:02.390 [INFO] [Thread-77578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:17:02.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:17:02.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:17:03.233 [DEBUG] [Thread-77578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:17:03.233 [DEBUG] [Thread-77578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:17:03.281 [DEBUG] [Thread-77578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:17:03.281 [DEBUG] [Thread-77578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:17:03.290 [DEBUG] [Thread-77578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:17:03.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:17:03.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:17:03.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:17:03.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:17:03.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:17:03.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:17:03.325 [DEBUG] [Thread-77578] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:17:15.309 [DEBUG] [Thread-77580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:15.741 [DEBUG] [Thread-77581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:30.788 [DEBUG] [Thread-77582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:17:33.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:17:33.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:17:34.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 17, 12), 1.85, 88.2, 0.0, 47.57, 10.34, 1, 1, 2, 2, 1, 0),)
2025-12-12T22:17:34.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:17:12
2025-12-12T22:17:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:17:34.294 [DEBUG] [Thread-77583] [transport.py] [_log()] starting thread (client mode): 0xf57f3490
2025-12-12T22:17:34.294 [DEBUG] [Thread-77583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:17:34.314 [DEBUG] [Thread-77583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:17:34.314 [INFO] [Thread-77583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] client lang: <none>
2025-12-12T22:17:34.318 [DEBUG] [Thread-77583] [transport.py] [_log()] server lang: <none>
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] kex follows: False
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] Compression: none
2025-12-12T22:17:34.319 [DEBUG] [Thread-77583] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:17:34.340 [DEBUG] [Thread-77583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:17:34.340 [DEBUG] [Thread-77583] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:17:34.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:17:34.341 [DEBUG] [Thread-77583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:17:34.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:17:34.343 [DEBUG] [Thread-77583] [transport.py] [_log()] userauth is OK
2025-12-12T22:17:34.343 [DEBUG] [Thread-77583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:17:34.343 [DEBUG] [Thread-77583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:17:34.343 [DEBUG] [Thread-77583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:17:34.343 [DEBUG] [Thread-77583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:17:34.378 [INFO] [Thread-77583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:17:34.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:17:35.007 [DEBUG] [Thread-77583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:17:35.007 [DEBUG] [Thread-77583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:17:35.007 [DEBUG] [Thread-77583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:17:35.049 [DEBUG] [Thread-77583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:17:35.049 [DEBUG] [Thread-77583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:17:35.053 [DEBUG] [Thread-77583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:17:35.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:17:35.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:17:35.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:17:35.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:17:35.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:17:35.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:17:35.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:17:35.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:17:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:17:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.845239 -999.00  +10.00  44.31     90   +8.50 1 3 2 3 1     0    0 1.94 8.75 ----- 48.2 44.3 333.4 53.5 11.6 -3.0 11.4 -3.2 10.9 -2.7 11.0 -2.1
2025-12-12T22:17:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:17:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:17:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.845239
2025-12-12T22:17:35.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:17:35.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:17:35.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:17:35.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:17:35.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:17:35.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:17:12', tmtdew=1.85, humidity=88.2, cloud=0.0, wind=47.57, temperature=10.34, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:17:08.650', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:17:35.078 [DEBUG] [Thread-77583] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:17:35.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:17:35.187 [DEBUG] [Thread-77586] [transport.py] [_log()] starting thread (client mode): 0xf57f13f0
2025-12-12T22:17:35.187 [DEBUG] [Thread-77586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:17:35.203 [DEBUG] [Thread-77586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:17:35.203 [INFO] [Thread-77586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:17:35.211 [DEBUG] [Thread-77586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] client lang: <none>
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] server lang: <none>
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] kex follows: False
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] Compression: none
2025-12-12T22:17:35.212 [DEBUG] [Thread-77586] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:17:35.268 [DEBUG] [Thread-77586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:17:35.268 [DEBUG] [Thread-77586] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:17:35.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:17:35.269 [DEBUG] [Thread-77586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:17:35.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:17:35.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:35.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:17:35.329 [DEBUG] [Thread-77586] [transport.py] [_log()] userauth is OK
2025-12-12T22:17:35.329 [DEBUG] [Thread-77586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:17:35.329 [DEBUG] [Thread-77586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:17:35.329 [DEBUG] [Thread-77586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:17:35.329 [DEBUG] [Thread-77586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:17:35.352 [INFO] [Thread-77586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:17:35.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:17:35.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:17:36.195 [DEBUG] [Thread-77586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:17:36.195 [DEBUG] [Thread-77586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:17:36.245 [DEBUG] [Thread-77586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:17:36.245 [DEBUG] [Thread-77586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:17:36.254 [DEBUG] [Thread-77586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:17:36.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:17:36.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:17:36.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:17:36.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:17:36.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:17:36.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:17:36.289 [DEBUG] [Thread-77586] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:17:45.816 [DEBUG] [Thread-77588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:00.859 [DEBUG] [Thread-77589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:06.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:18:06.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:18:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:18:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 17, 44), 1.79, 88.75, 0.0, 45.94, 10.22, 1, 1, 2, 2, 1, 0),)
2025-12-12T22:18:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:17:44
2025-12-12T22:18:07.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:18:07.243 [DEBUG] [Thread-77590] [transport.py] [_log()] starting thread (client mode): 0xf57bfac0
2025-12-12T22:18:07.243 [DEBUG] [Thread-77590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:18:07.265 [DEBUG] [Thread-77590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:18:07.265 [INFO] [Thread-77590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:18:07.265 [DEBUG] [Thread-77590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] client lang: <none>
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] server lang: <none>
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] kex follows: False
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] Compression: none
2025-12-12T22:18:07.266 [DEBUG] [Thread-77590] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:18:07.279 [DEBUG] [Thread-77590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:18:07.279 [DEBUG] [Thread-77590] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:18:07.280 [DEBUG] [Thread-77590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:18:07.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:18:07.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:18:07.283 [DEBUG] [Thread-77590] [transport.py] [_log()] userauth is OK
2025-12-12T22:18:07.283 [DEBUG] [Thread-77590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:18:07.283 [DEBUG] [Thread-77590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:18:07.283 [DEBUG] [Thread-77590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:18:07.283 [DEBUG] [Thread-77590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:18:07.301 [INFO] [Thread-77590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:18:07.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:18:07.953 [DEBUG] [Thread-77590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:18:07.953 [DEBUG] [Thread-77590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:18:07.954 [DEBUG] [Thread-77590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:18:07.994 [DEBUG] [Thread-77590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:18:07.994 [DEBUG] [Thread-77590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:18:07.997 [DEBUG] [Thread-77590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:18:08.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:18:08.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:18:08.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:18:08.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:18:08.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:18:08.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:18:08.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:18:08.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:18:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.845586 -999.00  +10.00  35.58     90   +8.60 1 3 2 3 1     0    0 1.95 8.97 ----- 42.5 35.6 323.9 48.6 11.5 -2.6 11.3 -2.7 10.7 -2.4 11.0 -2.0
2025-12-12T22:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.845586
2025-12-12T22:18:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:18:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:17:44', tmtdew=1.79, humidity=88.75, cloud=0.0, wind=45.94, temperature=10.22, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:17:38.630', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:18:08.023 [DEBUG] [Thread-77590] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:18:08.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:18:08.120 [DEBUG] [Thread-77593] [transport.py] [_log()] starting thread (client mode): 0xf57bd8a0
2025-12-12T22:18:08.120 [DEBUG] [Thread-77593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:18:08.135 [DEBUG] [Thread-77593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:18:08.135 [INFO] [Thread-77593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:18:08.142 [DEBUG] [Thread-77593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:18:08.142 [DEBUG] [Thread-77593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] client lang: <none>
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] server lang: <none>
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] kex follows: False
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:18:08.143 [DEBUG] [Thread-77593] [transport.py] [_log()] Compression: none
2025-12-12T22:18:08.144 [DEBUG] [Thread-77593] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:18:08.199 [DEBUG] [Thread-77593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:18:08.200 [DEBUG] [Thread-77593] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:18:08.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:18:08.201 [DEBUG] [Thread-77593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:18:08.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:18:08.256 [DEBUG] [Thread-77593] [transport.py] [_log()] userauth is OK
2025-12-12T22:18:08.256 [DEBUG] [Thread-77593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:18:08.256 [DEBUG] [Thread-77593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:18:08.257 [DEBUG] [Thread-77593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:18:08.257 [DEBUG] [Thread-77593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:18:08.275 [INFO] [Thread-77593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:18:08.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:18:08.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:18:09.137 [DEBUG] [Thread-77593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:18:09.137 [DEBUG] [Thread-77593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:18:09.185 [DEBUG] [Thread-77593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:18:09.185 [DEBUG] [Thread-77593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:18:09.194 [DEBUG] [Thread-77593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:18:09.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:18:09.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:18:09.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:18:09.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:18:09.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:18:09.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:18:09.230 [DEBUG] [Thread-77593] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:18:15.380 [DEBUG] [Thread-77595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:15.888 [DEBUG] [Thread-77596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:30.931 [DEBUG] [Thread-77597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:35.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:35.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:18:39.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:18:39.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:18:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:18:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 18, 16), 1.76, 88.9, 0.0, 43.9, 10.26, 1, 1, 2, 2, 0, 0),)
2025-12-12T22:18:39.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:18:16
2025-12-12T22:18:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:18:40.221 [DEBUG] [Thread-77598] [transport.py] [_log()] starting thread (client mode): 0xf57bea40
2025-12-12T22:18:40.221 [DEBUG] [Thread-77598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:18:40.243 [DEBUG] [Thread-77598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:18:40.244 [INFO] [Thread-77598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] client lang: <none>
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] server lang: <none>
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] kex follows: False
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:18:40.247 [DEBUG] [Thread-77598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:18:40.248 [DEBUG] [Thread-77598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:18:40.248 [DEBUG] [Thread-77598] [transport.py] [_log()] Compression: none
2025-12-12T22:18:40.248 [DEBUG] [Thread-77598] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:18:40.258 [DEBUG] [Thread-77598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:18:40.259 [DEBUG] [Thread-77598] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:18:40.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:18:40.260 [DEBUG] [Thread-77598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:18:40.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:18:40.264 [DEBUG] [Thread-77598] [transport.py] [_log()] userauth is OK
2025-12-12T22:18:40.264 [DEBUG] [Thread-77598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:18:40.265 [DEBUG] [Thread-77598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:18:40.265 [DEBUG] [Thread-77598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:18:40.265 [DEBUG] [Thread-77598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:18:40.289 [INFO] [Thread-77598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:18:40.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:18:40.900 [DEBUG] [Thread-77598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:18:40.900 [DEBUG] [Thread-77598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:18:40.901 [DEBUG] [Thread-77598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:18:40.941 [DEBUG] [Thread-77598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:18:40.941 [DEBUG] [Thread-77598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:18:40.944 [DEBUG] [Thread-77598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:18:40.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:18:40.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:18:40.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:18:40.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:18:40.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:18:40.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:18:40.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:18:40.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:18:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:18:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.845933 -999.00   +9.90  46.51     91   +8.50 1 3 2 3 1     0    0 1.90 7.54 ----- 41.2 46.5 313.0 52.9 11.4 -2.5 11.2 -2.5 10.7 -2.0 10.9 -1.5
2025-12-12T22:18:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:18:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:18:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.845933
2025-12-12T22:18:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:18:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:18:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:18:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:18:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:18:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:18:16', tmtdew=1.76, humidity=88.9, cloud=0.0, wind=43.9, temperature=10.26, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:18:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:18:40.978 [DEBUG] [Thread-77598] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:18:41.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:18:41.083 [DEBUG] [Thread-77601] [transport.py] [_log()] starting thread (client mode): 0xf57bd0f0
2025-12-12T22:18:41.083 [DEBUG] [Thread-77601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:18:41.098 [DEBUG] [Thread-77601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:18:41.098 [INFO] [Thread-77601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:18:41.106 [DEBUG] [Thread-77601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] client lang: <none>
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] server lang: <none>
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] kex follows: False
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:18:41.107 [DEBUG] [Thread-77601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:18:41.108 [DEBUG] [Thread-77601] [transport.py] [_log()] Compression: none
2025-12-12T22:18:41.108 [DEBUG] [Thread-77601] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:18:41.164 [DEBUG] [Thread-77601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:18:41.165 [DEBUG] [Thread-77601] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:18:41.165 [DEBUG] [Thread-77601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:18:41.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:18:41.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:18:41.220 [DEBUG] [Thread-77601] [transport.py] [_log()] userauth is OK
2025-12-12T22:18:41.220 [DEBUG] [Thread-77601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:18:41.220 [DEBUG] [Thread-77601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:18:41.220 [DEBUG] [Thread-77601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:18:41.221 [DEBUG] [Thread-77601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:18:41.242 [INFO] [Thread-77601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:18:41.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:18:41.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:18:42.069 [DEBUG] [Thread-77601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:18:42.069 [DEBUG] [Thread-77601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:18:42.117 [DEBUG] [Thread-77601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:18:42.117 [DEBUG] [Thread-77601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:18:42.126 [DEBUG] [Thread-77601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:18:42.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:18:42.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:18:42.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:18:42.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:18:42.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:18:42.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:18:42.160 [DEBUG] [Thread-77601] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:18:45.961 [DEBUG] [Thread-77603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:01.013 [DEBUG] [Thread-77604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:12.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:19:12.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:19:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 18, 48), 1.64, 89.05, 0.0, 43.33, 10.12, 1, 1, 2, 2, 0, 0),)
2025-12-12T22:19:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:18:48
2025-12-12T22:19:12.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:19:13.131 [DEBUG] [Thread-77605] [transport.py] [_log()] starting thread (client mode): 0xf57bd510
2025-12-12T22:19:13.131 [DEBUG] [Thread-77605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:19:13.150 [DEBUG] [Thread-77605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:19:13.150 [INFO] [Thread-77605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:19:13.152 [DEBUG] [Thread-77605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] client lang: <none>
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] server lang: <none>
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] kex follows: False
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] Compression: none
2025-12-12T22:19:13.153 [DEBUG] [Thread-77605] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:19:13.170 [DEBUG] [Thread-77605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:19:13.170 [DEBUG] [Thread-77605] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:19:13.171 [DEBUG] [Thread-77605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:19:13.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:19:13.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:19:13.173 [DEBUG] [Thread-77605] [transport.py] [_log()] userauth is OK
2025-12-12T22:19:13.173 [DEBUG] [Thread-77605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:19:13.173 [DEBUG] [Thread-77605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:19:13.173 [DEBUG] [Thread-77605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:19:13.173 [DEBUG] [Thread-77605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:19:13.189 [INFO] [Thread-77605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:19:13.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:19:13.787 [DEBUG] [Thread-77605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:19:13.787 [DEBUG] [Thread-77605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:19:13.788 [DEBUG] [Thread-77605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:19:13.829 [DEBUG] [Thread-77605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:19:13.829 [DEBUG] [Thread-77605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:19:13.832 [DEBUG] [Thread-77605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:19:13.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:19:13.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:19:13.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:19:13.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:19:13.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:19:13.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:19:13.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:19:13.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:19:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:19:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.846627 -999.00   +9.90  29.28     91   +8.60 1 3 1 3 1     0    0 1.77 3.84 ----- 26.4 29.3 323.6 53.2 11.4 -2.1 11.2 -2.0 10.7 -1.5 10.9 -1.3
2025-12-12T22:19:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:19:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:19:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.846627
2025-12-12T22:19:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:19:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:19:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:19:13.858 [DEBUG] [Thread-77605] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:19:13.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:19:13.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:19:13.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:18:48', tmtdew=1.64, humidity=89.05, cloud=0.0, wind=43.33, temperature=10.12, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:19:08.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:19:13.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:19:13.954 [DEBUG] [Thread-77608] [transport.py] [_log()] starting thread (client mode): 0xf57bc5e0
2025-12-12T22:19:13.954 [DEBUG] [Thread-77608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:19:13.969 [DEBUG] [Thread-77608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:19:13.970 [INFO] [Thread-77608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:19:13.977 [DEBUG] [Thread-77608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:19:13.977 [DEBUG] [Thread-77608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:19:13.977 [DEBUG] [Thread-77608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:19:13.977 [DEBUG] [Thread-77608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] client lang: <none>
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] server lang: <none>
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] kex follows: False
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:19:13.978 [DEBUG] [Thread-77608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:19:13.979 [DEBUG] [Thread-77608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:19:13.979 [DEBUG] [Thread-77608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:19:13.979 [DEBUG] [Thread-77608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:19:13.979 [DEBUG] [Thread-77608] [transport.py] [_log()] Compression: none
2025-12-12T22:19:13.979 [DEBUG] [Thread-77608] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:19:14.035 [DEBUG] [Thread-77608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:19:14.036 [DEBUG] [Thread-77608] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:19:14.037 [DEBUG] [Thread-77608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:19:14.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:19:14.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:19:14.091 [DEBUG] [Thread-77608] [transport.py] [_log()] userauth is OK
2025-12-12T22:19:14.092 [DEBUG] [Thread-77608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:19:14.092 [DEBUG] [Thread-77608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:19:14.092 [DEBUG] [Thread-77608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:19:14.092 [DEBUG] [Thread-77608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:19:14.111 [INFO] [Thread-77608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:19:14.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:19:14.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:19:14.972 [DEBUG] [Thread-77608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:19:14.972 [DEBUG] [Thread-77608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:19:15.020 [DEBUG] [Thread-77608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:19:15.020 [DEBUG] [Thread-77608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:19:15.029 [DEBUG] [Thread-77608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:19:15.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:19:15.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:19: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') -> 00000000
2025-12-12T22:19:15.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:19:15.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:19:15.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:19:15.066 [DEBUG] [Thread-77608] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:19:15.453 [DEBUG] [Thread-77610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:16.042 [DEBUG] [Thread-77611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:31.088 [DEBUG] [Thread-77612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:35.727 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:35.728 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:19:45.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:19:45.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:19:45.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 19, 20), 1.62, 89.13, 0.0, 42.28, 10.11, 1, 1, 2, 2, 0, 0),)
2025-12-12T22:19:45.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:19:20
2025-12-12T22:19:45.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:19:46.029 [DEBUG] [Thread-77613] [transport.py] [_log()] starting thread (client mode): 0xf578aa40
2025-12-12T22:19:46.029 [DEBUG] [Thread-77613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:19:46.039 [DEBUG] [Thread-77613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:19:46.039 [INFO] [Thread-77613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] client lang: <none>
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] server lang: <none>
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] kex follows: False
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] Compression: none
2025-12-12T22:19:46.040 [DEBUG] [Thread-77613] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:19:46.048 [DEBUG] [Thread-77613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:19:46.048 [DEBUG] [Thread-77613] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:19:46.049 [DEBUG] [Thread-77613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:19:46.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:19:46.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:19:46.049 [DEBUG] [Thread-77613] [transport.py] [_log()] userauth is OK
2025-12-12T22:19:46.049 [DEBUG] [Thread-77613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:19:46.050 [DEBUG] [Thread-77613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:19:46.050 [DEBUG] [Thread-77613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:19:46.050 [DEBUG] [Thread-77613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:19:46.061 [INFO] [Thread-77613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:19:46.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:19:46.119 [DEBUG] [Thread-77615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:19:46.632 [DEBUG] [Thread-77613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:19:46.632 [DEBUG] [Thread-77613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:19:46.632 [DEBUG] [Thread-77613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:19:46.673 [DEBUG] [Thread-77613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:19:46.673 [DEBUG] [Thread-77613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:19:46.674 [DEBUG] [Thread-77613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:19:46.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:19:46.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:19:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:19:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:19:46.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:19:46.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.846975 -999.00  +10.00  29.44     91   +8.60 1 3 1 3 1     0    0 1.66 2.03 ----- 37.3 29.4 335.0 42.0 11.4 -2.0 11.2 -2.0 10.6 -1.8 10.9 -1.4
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:19:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.846975
2025-12-12T22:19:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:19:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:19:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:19:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:19:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:19:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:19:20', tmtdew=1.62, humidity=89.13, cloud=0.0, wind=42.28, temperature=10.11, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:19:38.640', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:19:46.686 [DEBUG] [Thread-77613] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:19:46.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:19:46.772 [DEBUG] [Thread-77617] [transport.py] [_log()] starting thread (client mode): 0xf578a4a0
2025-12-12T22:19:46.772 [DEBUG] [Thread-77617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:19:46.787 [DEBUG] [Thread-77617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:19:46.787 [INFO] [Thread-77617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] client lang: <none>
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] server lang: <none>
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] kex follows: False
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:19:46.795 [DEBUG] [Thread-77617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:19:46.796 [DEBUG] [Thread-77617] [transport.py] [_log()] Compression: none
2025-12-12T22:19:46.796 [DEBUG] [Thread-77617] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:19:46.854 [DEBUG] [Thread-77617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:19:46.854 [DEBUG] [Thread-77617] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:19:46.854 [DEBUG] [Thread-77617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:19:46.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:19:46.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:19:46.915 [DEBUG] [Thread-77617] [transport.py] [_log()] userauth is OK
2025-12-12T22:19:46.915 [DEBUG] [Thread-77617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:19:46.915 [DEBUG] [Thread-77617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:19:46.915 [DEBUG] [Thread-77617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:19:46.915 [DEBUG] [Thread-77617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:19:46.938 [INFO] [Thread-77617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:19:46.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:19:46.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:19:47.780 [DEBUG] [Thread-77617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:19:47.780 [DEBUG] [Thread-77617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:19:47.828 [DEBUG] [Thread-77617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:19:47.828 [DEBUG] [Thread-77617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:19:47.837 [DEBUG] [Thread-77617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:19:47.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:19: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')
2025-12-12T22:19: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
2025-12-12T22:19:47.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:19:47.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:19:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:19:47.872 [DEBUG] [Thread-77617] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:20:01.146 [DEBUG] [Thread-77619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:15.529 [DEBUG] [Thread-77620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:16.190 [DEBUG] [Thread-77621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:20:17.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:20:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:20:18.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 19, 52), 1.59, 89.85, 0.0, 38.06, 10.14, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:20:18.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:19:52
2025-12-12T22:20:18.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:20:18.818 [DEBUG] [Thread-77622] [transport.py] [_log()] starting thread (client mode): 0xf57bf0d0
2025-12-12T22:20:18.819 [DEBUG] [Thread-77622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:20:18.839 [DEBUG] [Thread-77622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:20:18.839 [INFO] [Thread-77622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] client lang: <none>
2025-12-12T22:20:18.842 [DEBUG] [Thread-77622] [transport.py] [_log()] server lang: <none>
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] kex follows: False
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] Compression: none
2025-12-12T22:20:18.843 [DEBUG] [Thread-77622] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:20:18.863 [DEBUG] [Thread-77622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:20:18.863 [DEBUG] [Thread-77622] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:20:18.864 [DEBUG] [Thread-77622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:20:18.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:20:18.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:20:18.865 [DEBUG] [Thread-77622] [transport.py] [_log()] userauth is OK
2025-12-12T22:20:18.866 [DEBUG] [Thread-77622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:20:18.866 [DEBUG] [Thread-77622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:20:18.866 [DEBUG] [Thread-77622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:20:18.866 [DEBUG] [Thread-77622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:20:18.890 [INFO] [Thread-77622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:20:18.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:20:19.491 [DEBUG] [Thread-77622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:20:19.491 [DEBUG] [Thread-77622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:20:19.491 [DEBUG] [Thread-77622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:20:19.533 [DEBUG] [Thread-77622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:20:19.533 [DEBUG] [Thread-77622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:20:19.543 [DEBUG] [Thread-77622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:20:19.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:20:19.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:20:19.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:20:19.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:20:19.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:20:19.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:20:19.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:20:19.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:20:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:20:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.846975 -999.00  +10.00  29.44     91   +8.60 1 3 1 3 1     0    0 1.66 2.03 ----- 37.3 29.4 335.0 42.0 11.4 -2.0 11.2 -2.0 10.6 -1.8 10.9 -1.4
2025-12-12T22:20:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:20:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:20:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.846975
2025-12-12T22:20:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:20:19.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:20:19.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:20:19.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:20:19.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:20:19.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:19:52', tmtdew=1.59, humidity=89.85, cloud=0.0, wind=38.06, temperature=10.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:19:38.640', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:20:19.581 [DEBUG] [Thread-77622] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:20:19.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:20:19.679 [DEBUG] [Thread-77625] [transport.py] [_log()] starting thread (client mode): 0xf57bd3f0
2025-12-12T22:20:19.680 [DEBUG] [Thread-77625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:20:19.693 [DEBUG] [Thread-77625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:20:19.694 [INFO] [Thread-77625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:19.701 [DEBUG] [Thread-77625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] client lang: <none>
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] server lang: <none>
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] kex follows: False
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] Compression: none
2025-12-12T22:20:19.702 [DEBUG] [Thread-77625] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:20:19.762 [DEBUG] [Thread-77625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:20:19.763 [DEBUG] [Thread-77625] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:20:19.763 [DEBUG] [Thread-77625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:20:19.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:20:19.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:20:19.820 [DEBUG] [Thread-77625] [transport.py] [_log()] userauth is OK
2025-12-12T22:20:19.820 [DEBUG] [Thread-77625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:20:19.820 [DEBUG] [Thread-77625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:20:19.820 [DEBUG] [Thread-77625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:20:19.820 [DEBUG] [Thread-77625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:20:19.843 [INFO] [Thread-77625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:20:19.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:20:19.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:20:20.650 [DEBUG] [Thread-77625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:20:20.650 [DEBUG] [Thread-77625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:20:20.698 [DEBUG] [Thread-77625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:20:20.698 [DEBUG] [Thread-77625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:20:20.706 [DEBUG] [Thread-77625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:20:20.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:20:20.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:20:20.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
2025-12-12T22:20:20.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:20:20.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:20:20.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:20:20.740 [DEBUG] [Thread-77625] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:20:31.218 [DEBUG] [Thread-77627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:35.931 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:35.932 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:46.288 [DEBUG] [Thread-77628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:20:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:20:50.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:20:50.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:20:51.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 20, 24), 1.57, 89.95, 0.0, 40.0, 10.12, 1, 1, 0, 2, 0, 0),)
2025-12-12T22:20:51.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:20:24
2025-12-12T22:20:51.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:20:51.716 [DEBUG] [Thread-77629] [transport.py] [_log()] starting thread (client mode): 0xf57bf7f0
2025-12-12T22:20:51.716 [DEBUG] [Thread-77629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:20:51.737 [DEBUG] [Thread-77629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:20:51.737 [INFO] [Thread-77629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] client lang: <none>
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] server lang: <none>
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] kex follows: False
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] Compression: none
2025-12-12T22:20:51.740 [DEBUG] [Thread-77629] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:20:51.759 [DEBUG] [Thread-77629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:20:51.760 [DEBUG] [Thread-77629] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:20:51.760 [DEBUG] [Thread-77629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:20:51.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:20:51.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:20:51.762 [DEBUG] [Thread-77629] [transport.py] [_log()] userauth is OK
2025-12-12T22:20:51.762 [DEBUG] [Thread-77629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:20:51.762 [DEBUG] [Thread-77629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:20:51.762 [DEBUG] [Thread-77629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:20:51.762 [DEBUG] [Thread-77629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:20:51.787 [INFO] [Thread-77629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:20:51.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:20:52.549 [DEBUG] [Thread-77629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:20:52.550 [DEBUG] [Thread-77629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:20:52.550 [DEBUG] [Thread-77629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:20:52.591 [DEBUG] [Thread-77629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:20:52.591 [DEBUG] [Thread-77629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:20:52.594 [DEBUG] [Thread-77629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:20:52.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:20:52.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:20:52.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:20:52.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:20:52.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:20:52.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:20:52.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:20:52.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:20:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:20:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.847322 -999.00   +9.90  37.59     91   +8.60 1 3 2 3 1     0    0 1.62 -0.00 ----- 38.8 37.6 328.6 54.1 11.4 -2.1 11.3 -2.2 10.6 -1.5 10.9 -1.3
2025-12-12T22:20:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:20:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:20:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.847322
2025-12-12T22:20:52.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:20:52.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:20:52.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:20:52.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:20:52.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:20:52.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:20:24', tmtdew=1.57, humidity=89.95, cloud=0.0, wind=40.0, temperature=10.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:20:08.621', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:20:52.620 [DEBUG] [Thread-77629] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:20:52.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:20:52.721 [DEBUG] [Thread-77632] [transport.py] [_log()] starting thread (client mode): 0xf57bd060
2025-12-12T22:20:52.721 [DEBUG] [Thread-77632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:20:52.735 [DEBUG] [Thread-77632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:20:52.735 [INFO] [Thread-77632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:20:52.743 [DEBUG] [Thread-77632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:20:52.743 [DEBUG] [Thread-77632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:20:52.743 [DEBUG] [Thread-77632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:20:52.743 [DEBUG] [Thread-77632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:52.743 [DEBUG] [Thread-77632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:20:52.743 [DEBUG] [Thread-77632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] client lang: <none>
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] server lang: <none>
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] kex follows: False
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:20:52.744 [DEBUG] [Thread-77632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:20:52.745 [DEBUG] [Thread-77632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:20:52.745 [DEBUG] [Thread-77632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:20:52.745 [DEBUG] [Thread-77632] [transport.py] [_log()] Compression: none
2025-12-12T22:20:52.745 [DEBUG] [Thread-77632] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:20:52.807 [DEBUG] [Thread-77632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:20:52.808 [DEBUG] [Thread-77632] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:20:52.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:20:52.809 [DEBUG] [Thread-77632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:20:52.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:20:52.862 [DEBUG] [Thread-77632] [transport.py] [_log()] userauth is OK
2025-12-12T22:20:52.862 [DEBUG] [Thread-77632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:20:52.862 [DEBUG] [Thread-77632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:20:52.863 [DEBUG] [Thread-77632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:20:52.863 [DEBUG] [Thread-77632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:20:52.885 [INFO] [Thread-77632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:20:52.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:20:52.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:20:53.711 [DEBUG] [Thread-77632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:20:53.711 [DEBUG] [Thread-77632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:20:53.759 [DEBUG] [Thread-77632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:20:53.759 [DEBUG] [Thread-77632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:20:53.767 [DEBUG] [Thread-77632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:20:53.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:20:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:20:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:20:53.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:20:53.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:20:53.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:20:53.802 [DEBUG] [Thread-77632] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:21:01.315 [DEBUG] [Thread-77634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:15.605 [DEBUG] [Thread-77635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:16.360 [DEBUG] [Thread-77636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:21:23.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:21:23.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:21:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 20, 56), 1.52, 90.46, 0.0, 44.04, 10.09, 1, 2, 0, 2, 0, 0),)
2025-12-12T22:21:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:20:56
2025-12-12T22:21:24.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:21:24.755 [DEBUG] [Thread-77637] [transport.py] [_log()] starting thread (client mode): 0xf5789660
2025-12-12T22:21:24.756 [DEBUG] [Thread-77637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:21:24.777 [DEBUG] [Thread-77637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:21:24.777 [INFO] [Thread-77637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] client lang: <none>
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] server lang: <none>
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] kex follows: False
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:21:24.780 [DEBUG] [Thread-77637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:21:24.781 [DEBUG] [Thread-77637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:21:24.781 [DEBUG] [Thread-77637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:21:24.781 [DEBUG] [Thread-77637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:21:24.781 [DEBUG] [Thread-77637] [transport.py] [_log()] Compression: none
2025-12-12T22:21:24.781 [DEBUG] [Thread-77637] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:21:24.798 [DEBUG] [Thread-77637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:21:24.799 [DEBUG] [Thread-77637] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:21:24.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:21:24.800 [DEBUG] [Thread-77637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:21:24.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:21:24.802 [DEBUG] [Thread-77637] [transport.py] [_log()] userauth is OK
2025-12-12T22:21:24.802 [DEBUG] [Thread-77637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:21:24.802 [DEBUG] [Thread-77637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:21:24.802 [DEBUG] [Thread-77637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:21:24.802 [DEBUG] [Thread-77637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:21:24.829 [INFO] [Thread-77637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:21:24.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:21:25.444 [DEBUG] [Thread-77637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:21:25.444 [DEBUG] [Thread-77637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:21:25.444 [DEBUG] [Thread-77637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:21:25.485 [DEBUG] [Thread-77637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:21:25.485 [DEBUG] [Thread-77637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:21:25.488 [DEBUG] [Thread-77637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:21:25.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:21:25.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:21:25.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:21:25.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:21:25.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:21:25.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:21:25.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:21:25.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:21:25.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:21:25.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.847669 -999.00   +9.90  39.19     91   +8.60 1 3 2 3 1     0    0 1.57 -1.84 ----- 37.5 39.2 326.4 45.2 11.4 -2.4 11.2 -2.2 10.7 -1.5 10.9 -1.5
2025-12-12T22:21:25.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:21:25.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:21:25.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.847669
2025-12-12T22:21:25.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:21:25.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:21:25.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:21:25.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:21:25.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:21:25.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:20:56', tmtdew=1.52, humidity=90.46, cloud=0.0, wind=44.04, temperature=10.09, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:20:38.602', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:21:25.513 [DEBUG] [Thread-77637] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:21:25.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:21:25.608 [DEBUG] [Thread-77640] [transport.py] [_log()] starting thread (client mode): 0xf57bdb40
2025-12-12T22:21:25.608 [DEBUG] [Thread-77640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:21:25.623 [DEBUG] [Thread-77640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:21:25.623 [INFO] [Thread-77640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:21:25.630 [DEBUG] [Thread-77640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:21:25.630 [DEBUG] [Thread-77640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] client lang: <none>
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] server lang: <none>
2025-12-12T22:21:25.631 [DEBUG] [Thread-77640] [transport.py] [_log()] kex follows: False
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] Compression: none
2025-12-12T22:21:25.632 [DEBUG] [Thread-77640] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:21:25.690 [DEBUG] [Thread-77640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:21:25.690 [DEBUG] [Thread-77640] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:21:25.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:21:25.691 [DEBUG] [Thread-77640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:21:25.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:21:25.750 [DEBUG] [Thread-77640] [transport.py] [_log()] userauth is OK
2025-12-12T22:21:25.750 [DEBUG] [Thread-77640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:21:25.750 [DEBUG] [Thread-77640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:21:25.750 [DEBUG] [Thread-77640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:21:25.751 [DEBUG] [Thread-77640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:21:25.768 [INFO] [Thread-77640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:21:25.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:21:25.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:21:26.596 [DEBUG] [Thread-77640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:21:26.596 [DEBUG] [Thread-77640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:21:26.646 [DEBUG] [Thread-77640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:21:26.646 [DEBUG] [Thread-77640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:21:26.655 [DEBUG] [Thread-77640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:21:26.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:21:26.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:21:26.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:21:26.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:21:26.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:21:26.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:21:26.690 [DEBUG] [Thread-77640] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:21:31.391 [DEBUG] [Thread-77642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:36.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:36.138 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:46.443 [DEBUG] [Thread-77643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:21:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:21:56.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:21:56.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:21:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 21, 28), 1.5, 90.6, 0.0, 47.76, 10.07, 2, 2, 0, 2, 1, 0),)
2025-12-12T22:21:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:21:28
2025-12-12T22:21:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:21:57.646 [DEBUG] [Thread-77644] [transport.py] [_log()] starting thread (client mode): 0xf5789930
2025-12-12T22:21:57.646 [DEBUG] [Thread-77644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:21:57.666 [DEBUG] [Thread-77644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:21:57.666 [INFO] [Thread-77644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] client lang: <none>
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] server lang: <none>
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] kex follows: False
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] Compression: none
2025-12-12T22:21:57.668 [DEBUG] [Thread-77644] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:21:57.678 [DEBUG] [Thread-77644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:21:57.679 [DEBUG] [Thread-77644] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:21:57.679 [DEBUG] [Thread-77644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:21:57.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:21:57.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:21:57.681 [DEBUG] [Thread-77644] [transport.py] [_log()] userauth is OK
2025-12-12T22:21:57.681 [DEBUG] [Thread-77644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:21:57.681 [DEBUG] [Thread-77644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:21:57.681 [DEBUG] [Thread-77644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:21:57.681 [DEBUG] [Thread-77644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:21:57.698 [INFO] [Thread-77644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:21:57.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:21:58.477 [DEBUG] [Thread-77644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:21:58.477 [DEBUG] [Thread-77644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:21:58.478 [DEBUG] [Thread-77644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:21:58.518 [DEBUG] [Thread-77644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:21:58.518 [DEBUG] [Thread-77644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:21:58.521 [DEBUG] [Thread-77644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:21:58.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:21:58.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:21:58.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:21:58.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:21:58.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:21:58.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:21:58.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:21:58.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:21:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:21:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.848016 -999.00  +10.00  38.10     91   +8.70 1 3 2 3 1     0    0 1.49 -3.84 ----- 37.1 38.1 319.4 54.8 11.4 -2.4 11.2 -2.2 10.7 -1.5 10.9 -1.4
2025-12-12T22:21:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:21:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:21:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.848016
2025-12-12T22:21:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:21:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:21:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:21:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:21:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:21:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:21:28', tmtdew=1.5, humidity=90.6, cloud=0.0, wind=47.76, temperature=10.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:21:08.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:21:58.546 [DEBUG] [Thread-77644] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:21:58.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:21:58.643 [DEBUG] [Thread-77647] [transport.py] [_log()] starting thread (client mode): 0xf5788820
2025-12-12T22:21:58.643 [DEBUG] [Thread-77647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:21:58.659 [DEBUG] [Thread-77647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:21:58.659 [INFO] [Thread-77647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:21:58.666 [DEBUG] [Thread-77647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] client lang: <none>
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] server lang: <none>
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] kex follows: False
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] Compression: none
2025-12-12T22:21:58.667 [DEBUG] [Thread-77647] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:21:58.726 [DEBUG] [Thread-77647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:21:58.726 [DEBUG] [Thread-77647] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:21:58.727 [DEBUG] [Thread-77647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:21:58.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:21:58.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:21:58.782 [DEBUG] [Thread-77647] [transport.py] [_log()] userauth is OK
2025-12-12T22:21:58.782 [DEBUG] [Thread-77647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:21:58.783 [DEBUG] [Thread-77647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:21:58.783 [DEBUG] [Thread-77647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:21:58.783 [DEBUG] [Thread-77647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:21:58.800 [INFO] [Thread-77647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:21:58.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:21:58.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:21:59.620 [DEBUG] [Thread-77647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:21:59.621 [DEBUG] [Thread-77647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:21:59.669 [DEBUG] [Thread-77647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:21:59.669 [DEBUG] [Thread-77647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:21:59.678 [DEBUG] [Thread-77647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:21:59.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:21:59.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:21:59.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:21:59.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:21:59.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:21:59.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:21:59.712 [DEBUG] [Thread-77647] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:22:01.471 [DEBUG] [Thread-77649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:22:15.693 [DEBUG] [Thread-77650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:22:16.508 [DEBUG] [Thread-77651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:22:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:22:29.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:22:29.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:22:30.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 22), 1.43, 90.71, 0.0, 42.01, 9.94, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:22:30.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:22:00
2025-12-12T22:22:30.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:22:30.671 [DEBUG] [Thread-77652] [transport.py] [_log()] starting thread (client mode): 0xf57bcbb0
2025-12-12T22:22:30.671 [DEBUG] [Thread-77652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:22:30.691 [DEBUG] [Thread-77652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:22:30.691 [INFO] [Thread-77652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] client lang: <none>
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] server lang: <none>
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] kex follows: False
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:22:30.695 [DEBUG] [Thread-77652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:22:30.696 [DEBUG] [Thread-77652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:22:30.696 [DEBUG] [Thread-77652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:22:30.696 [DEBUG] [Thread-77652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:22:30.696 [DEBUG] [Thread-77652] [transport.py] [_log()] Compression: none
2025-12-12T22:22:30.696 [DEBUG] [Thread-77652] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:22:30.710 [DEBUG] [Thread-77652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:22:30.711 [DEBUG] [Thread-77652] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:22:30.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:22:30.712 [DEBUG] [Thread-77652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:22:30.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:22:30.714 [DEBUG] [Thread-77652] [transport.py] [_log()] userauth is OK
2025-12-12T22:22:30.714 [DEBUG] [Thread-77652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:22:30.715 [DEBUG] [Thread-77652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:22:30.715 [DEBUG] [Thread-77652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:22:30.715 [DEBUG] [Thread-77652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:22:30.739 [INFO] [Thread-77652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:22:30.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:22:31.388 [DEBUG] [Thread-77652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:22:31.388 [DEBUG] [Thread-77652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:22:31.389 [DEBUG] [Thread-77652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:22:31.429 [DEBUG] [Thread-77652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:22:31.429 [DEBUG] [Thread-77652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:22:31.432 [DEBUG] [Thread-77652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:22:31.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:22:31.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:22:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:22:31.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:22:31.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:22:31.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:22:31.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:22:31.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:22:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:22:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.848363 -999.00  +10.00  38.09     91   +8.60 1 3 2 3 1     0    0 1.45 -5.31 ----- 41.4 38.1 312.6 55.1 11.3 -5.0 11.2 -5.6 10.6 -2.7 10.9 -2.4
2025-12-12T22:22:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:22:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:22:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.848363
2025-12-12T22:22:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:22:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:22:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:22:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:22:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:22:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:22:00', tmtdew=1.43, humidity=90.71, cloud=0.0, wind=42.01, temperature=9.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:21:38.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:22:31.456 [DEBUG] [Thread-77652] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:22:31.538 [DEBUG] [Thread-77655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:22:31.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:22:31.548 [DEBUG] [Thread-77656] [transport.py] [_log()] starting thread (client mode): 0xf57bee90
2025-12-12T22:22:31.548 [DEBUG] [Thread-77656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:22:31.563 [DEBUG] [Thread-77656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:22:31.563 [INFO] [Thread-77656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:22:31.570 [DEBUG] [Thread-77656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] client lang: <none>
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] server lang: <none>
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] kex follows: False
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:22:31.571 [DEBUG] [Thread-77656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:22:31.572 [DEBUG] [Thread-77656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:22:31.572 [DEBUG] [Thread-77656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:22:31.572 [DEBUG] [Thread-77656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:22:31.572 [DEBUG] [Thread-77656] [transport.py] [_log()] Compression: none
2025-12-12T22:22:31.572 [DEBUG] [Thread-77656] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:22:31.629 [DEBUG] [Thread-77656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:22:31.630 [DEBUG] [Thread-77656] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:22:31.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:22:31.630 [DEBUG] [Thread-77656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:22:31.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:22:31.686 [DEBUG] [Thread-77656] [transport.py] [_log()] userauth is OK
2025-12-12T22:22:31.686 [DEBUG] [Thread-77656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:22:31.686 [DEBUG] [Thread-77656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:22:31.686 [DEBUG] [Thread-77656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:22:31.687 [DEBUG] [Thread-77656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:22:31.709 [INFO] [Thread-77656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:22:31.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:22:31.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:22:32.536 [DEBUG] [Thread-77656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:22:32.536 [DEBUG] [Thread-77656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:22:32.584 [DEBUG] [Thread-77656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:22:32.584 [DEBUG] [Thread-77656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:22:32.594 [DEBUG] [Thread-77656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:22:32.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:22:32.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:22:32.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:22:32.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:22:32.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:22:32.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:22:32.629 [DEBUG] [Thread-77656] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:22:36.340 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:22:36.341 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:22:46.571 [DEBUG] [Thread-77658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:01.598 [DEBUG] [Thread-77659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:02.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:23:02.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:23:02.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:23:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 22, 32), 1.42, 90.75, 0.0, 44.3, 10.09, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:23:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:22:32
2025-12-12T22:23:03.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:23:03.609 [DEBUG] [Thread-77660] [transport.py] [_log()] starting thread (client mode): 0xf578add0
2025-12-12T22:23:03.609 [DEBUG] [Thread-77660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:23:03.629 [DEBUG] [Thread-77660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:23:03.629 [INFO] [Thread-77660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] client lang: <none>
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] server lang: <none>
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] kex follows: False
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:23:03.632 [DEBUG] [Thread-77660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:23:03.633 [DEBUG] [Thread-77660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:23:03.633 [DEBUG] [Thread-77660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:23:03.633 [DEBUG] [Thread-77660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:23:03.633 [DEBUG] [Thread-77660] [transport.py] [_log()] Compression: none
2025-12-12T22:23:03.633 [DEBUG] [Thread-77660] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:23:03.645 [DEBUG] [Thread-77660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:23:03.646 [DEBUG] [Thread-77660] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:23:03.646 [DEBUG] [Thread-77660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:23:03.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:23:03.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:23:03.648 [DEBUG] [Thread-77660] [transport.py] [_log()] userauth is OK
2025-12-12T22:23:03.648 [DEBUG] [Thread-77660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:23:03.648 [DEBUG] [Thread-77660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:23:03.649 [DEBUG] [Thread-77660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:23:03.649 [DEBUG] [Thread-77660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:23:03.667 [INFO] [Thread-77660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:23:03.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:23:04.432 [DEBUG] [Thread-77660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:23:04.432 [DEBUG] [Thread-77660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:23:04.433 [DEBUG] [Thread-77660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:23:04.474 [DEBUG] [Thread-77660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:23:04.474 [DEBUG] [Thread-77660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:23:04.477 [DEBUG] [Thread-77660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:23:04.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:23:04.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:23:04.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:23:04.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:23:04.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:23:04.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:23:04.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:23:04.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:23:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:23:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.848711 -999.00  +10.00  31.33     91   +8.70 1 3 2 3 1     0    0 1.39 -7.21 ----- 34.8 31.3 315.9 48.0 11.3 -5.9 11.1 -6.6 10.7 -8.2 10.9 -6.5
2025-12-12T22:23:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:23:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:23:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.848711
2025-12-12T22:23:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:23:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:23:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:23:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:23:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:23:04.504 [DEBUG] [Thread-77660] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:23:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:22:32', tmtdew=1.42, humidity=90.75, cloud=0.0, wind=44.3, temperature=10.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:22:08.630', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:23:04.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:23:04.601 [DEBUG] [Thread-77663] [transport.py] [_log()] starting thread (client mode): 0xf5772350
2025-12-12T22:23:04.601 [DEBUG] [Thread-77663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:23:04.615 [DEBUG] [Thread-77663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:23:04.616 [INFO] [Thread-77663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:23:04.623 [DEBUG] [Thread-77663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:23:04.623 [DEBUG] [Thread-77663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:23:04.623 [DEBUG] [Thread-77663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:23:04.623 [DEBUG] [Thread-77663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:04.623 [DEBUG] [Thread-77663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:04.623 [DEBUG] [Thread-77663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] client lang: <none>
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] server lang: <none>
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] kex follows: False
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] Compression: none
2025-12-12T22:23:04.624 [DEBUG] [Thread-77663] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:23:04.685 [DEBUG] [Thread-77663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:23:04.686 [DEBUG] [Thread-77663] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:23:04.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:23:04.687 [DEBUG] [Thread-77663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:23:04.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:23:04.742 [DEBUG] [Thread-77663] [transport.py] [_log()] userauth is OK
2025-12-12T22:23:04.742 [DEBUG] [Thread-77663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:23:04.742 [DEBUG] [Thread-77663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:23:04.742 [DEBUG] [Thread-77663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:23:04.742 [DEBUG] [Thread-77663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:23:04.761 [INFO] [Thread-77663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:23:04.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:23:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:23:05.619 [DEBUG] [Thread-77663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:23:05.619 [DEBUG] [Thread-77663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:23:05.673 [DEBUG] [Thread-77663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:23:05.673 [DEBUG] [Thread-77663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:23:05.681 [DEBUG] [Thread-77663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:23:05.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:23:05.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:23:05.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:23:05.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:23:05.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:23:05.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:23:05.713 [DEBUG] [Thread-77663] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:23:15.768 [DEBUG] [Thread-77665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:16.625 [DEBUG] [Thread-77666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:31.669 [DEBUG] [Thread-77667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:35.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:23:35.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:23:35.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:23:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 23, 4), 1.42, 90.73, 0.0, 41.69, 10.06, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:23:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:23:04
2025-12-12T22:23:36.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:23:36.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:36.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:23:36.669 [DEBUG] [Thread-77668] [transport.py] [_log()] starting thread (client mode): 0xf5788ca0
2025-12-12T22:23:36.669 [DEBUG] [Thread-77668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:23:36.689 [DEBUG] [Thread-77668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:23:36.689 [INFO] [Thread-77668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:23:36.692 [DEBUG] [Thread-77668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] client lang: <none>
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] server lang: <none>
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] kex follows: False
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] Compression: none
2025-12-12T22:23:36.693 [DEBUG] [Thread-77668] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:23:36.709 [DEBUG] [Thread-77668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:23:36.709 [DEBUG] [Thread-77668] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:23:36.709 [DEBUG] [Thread-77668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:23:36.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:23:36.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:23:36.710 [DEBUG] [Thread-77668] [transport.py] [_log()] userauth is OK
2025-12-12T22:23:36.710 [DEBUG] [Thread-77668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:23:36.710 [DEBUG] [Thread-77668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:23:36.710 [DEBUG] [Thread-77668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:23:36.710 [DEBUG] [Thread-77668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:23:36.720 [INFO] [Thread-77668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:23:36.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:23:37.365 [DEBUG] [Thread-77668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:23:37.365 [DEBUG] [Thread-77668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:23:37.365 [DEBUG] [Thread-77668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:23:37.406 [DEBUG] [Thread-77668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:23:37.406 [DEBUG] [Thread-77668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:23:37.408 [DEBUG] [Thread-77668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:23:37.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:23:37.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:23:37.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:23:37.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:23:37.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:23:37.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.849405 -999.00  +10.00  34.48     91   +8.70 1 3 2 3 1     0    0 1.25 -11.53 ----- 36.4 34.5 305.0 41.8 11.4 -6.7 11.1 -7.2 10.7 -5.1 10.9 -4.6
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:23:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.849405
2025-12-12T22:23:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:23:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:23:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:23:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:23:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:23:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:23:04', tmtdew=1.42, humidity=90.73, cloud=0.0, wind=41.69, temperature=10.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:23:08.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:23:37.426 [DEBUG] [Thread-77668] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:23:37.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:23:37.512 [DEBUG] [Thread-77671] [transport.py] [_log()] starting thread (client mode): 0xf57bce80
2025-12-12T22:23:37.512 [DEBUG] [Thread-77671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:23:37.527 [DEBUG] [Thread-77671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:23:37.528 [INFO] [Thread-77671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] client lang: <none>
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] server lang: <none>
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] kex follows: False
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:23:37.535 [DEBUG] [Thread-77671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:23:37.536 [DEBUG] [Thread-77671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:23:37.536 [DEBUG] [Thread-77671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:23:37.536 [DEBUG] [Thread-77671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:23:37.536 [DEBUG] [Thread-77671] [transport.py] [_log()] Compression: none
2025-12-12T22:23:37.536 [DEBUG] [Thread-77671] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:23:37.592 [DEBUG] [Thread-77671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:23:37.592 [DEBUG] [Thread-77671] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:23:37.593 [DEBUG] [Thread-77671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:23:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:23:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:23:37.649 [DEBUG] [Thread-77671] [transport.py] [_log()] userauth is OK
2025-12-12T22:23:37.649 [DEBUG] [Thread-77671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:23:37.649 [DEBUG] [Thread-77671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:23:37.649 [DEBUG] [Thread-77671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:23:37.649 [DEBUG] [Thread-77671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:23:37.665 [INFO] [Thread-77671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:23:37.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:23:37.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:23:38.540 [DEBUG] [Thread-77671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:23:38.540 [DEBUG] [Thread-77671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:23:38.587 [DEBUG] [Thread-77671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:23:38.587 [DEBUG] [Thread-77671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:23:38.595 [DEBUG] [Thread-77671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:23:38.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:23:38.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:23:38.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:23:38.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:23:38.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:23:38.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:23:38.627 [DEBUG] [Thread-77671] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:23:46.697 [DEBUG] [Thread-77673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:01.743 [DEBUG] [Thread-77674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:08.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:24:08.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:24:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:24:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 23, 36), 1.42, 90.76, 0.0, 42.13, 10.01, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:24:09.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:23:36
2025-12-12T22:24:09.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:24:09.614 [DEBUG] [Thread-77675] [transport.py] [_log()] starting thread (client mode): 0xf57f2680
2025-12-12T22:24:09.614 [DEBUG] [Thread-77675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:24:09.635 [DEBUG] [Thread-77675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:24:09.635 [INFO] [Thread-77675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] client lang: <none>
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] server lang: <none>
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] kex follows: False
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] Compression: none
2025-12-12T22:24:09.638 [DEBUG] [Thread-77675] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:24:09.654 [DEBUG] [Thread-77675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:24:09.654 [DEBUG] [Thread-77675] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:24:09.654 [DEBUG] [Thread-77675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:24:09.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:24:09.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:24:09.655 [DEBUG] [Thread-77675] [transport.py] [_log()] userauth is OK
2025-12-12T22:24:09.655 [DEBUG] [Thread-77675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:24:09.655 [DEBUG] [Thread-77675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:24:09.655 [DEBUG] [Thread-77675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:24:09.655 [DEBUG] [Thread-77675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:24:09.665 [INFO] [Thread-77675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:24:09.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:24:10.461 [DEBUG] [Thread-77675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:24:10.462 [DEBUG] [Thread-77675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:24:10.462 [DEBUG] [Thread-77675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:24:10.503 [DEBUG] [Thread-77675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:24:10.503 [DEBUG] [Thread-77675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:24:10.505 [DEBUG] [Thread-77675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:24:10.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:24:10.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:24:10.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:24:10.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:24:10.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:24:10.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:24:10.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:24:10.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:24:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:24:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.849752 -999.00  +10.00  38.92     91   +8.60 1 3 2 3 1     0    0 1.25 -12.63 ...S. 44.0 38.9 311.6 51.1 11.3 -5.2 11.2 -5.5 10.6 -4.0 10.9 -3.6
2025-12-12T22:24:10.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.849752
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:24:10.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:23:36', tmtdew=1.42, humidity=90.76, cloud=0.0, wind=42.13, temperature=10.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:23:38.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:24:10.522 [DEBUG] [Thread-77675] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:24:10.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:24:10.622 [DEBUG] [Thread-77678] [transport.py] [_log()] starting thread (client mode): 0xf57f38e0
2025-12-12T22:24:10.622 [DEBUG] [Thread-77678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:24:10.636 [DEBUG] [Thread-77678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:24:10.636 [INFO] [Thread-77678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] client lang: <none>
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] server lang: <none>
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] kex follows: False
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] Compression: none
2025-12-12T22:24:10.643 [DEBUG] [Thread-77678] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:24:10.699 [DEBUG] [Thread-77678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:24:10.700 [DEBUG] [Thread-77678] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:24:10.700 [DEBUG] [Thread-77678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:24:10.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:24:10.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:24:10.757 [DEBUG] [Thread-77678] [transport.py] [_log()] userauth is OK
2025-12-12T22:24:10.757 [DEBUG] [Thread-77678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:24:10.757 [DEBUG] [Thread-77678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:24:10.757 [DEBUG] [Thread-77678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:24:10.757 [DEBUG] [Thread-77678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:24:10.770 [INFO] [Thread-77678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:24:10.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:24:10.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:24:11.599 [DEBUG] [Thread-77678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:24:11.599 [DEBUG] [Thread-77678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:24:11.647 [DEBUG] [Thread-77678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:24:11.647 [DEBUG] [Thread-77678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:24:11.656 [DEBUG] [Thread-77678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:24:11.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:24:11.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:24: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') -> 00000000
2025-12-12T22:24:11.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:24:11.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:24:11.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:24:11.690 [DEBUG] [Thread-77678] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:24:15.843 [DEBUG] [Thread-77680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:16.769 [DEBUG] [Thread-77681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:31.805 [DEBUG] [Thread-77682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:36.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:36.753 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:24:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:24:41.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:24:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:24:42.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 24, 8), 1.39, 90.91, 0.0, 34.64, 10.04, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:24:42.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:24:08
2025-12-12T22:24:42.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:24:42.709 [DEBUG] [Thread-77683] [transport.py] [_log()] starting thread (client mode): 0xf57892a0
2025-12-12T22:24:42.709 [DEBUG] [Thread-77683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:24:42.730 [DEBUG] [Thread-77683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:24:42.730 [INFO] [Thread-77683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] client lang: <none>
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] server lang: <none>
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] kex follows: False
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:24:42.734 [DEBUG] [Thread-77683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:24:42.735 [DEBUG] [Thread-77683] [transport.py] [_log()] Compression: none
2025-12-12T22:24:42.735 [DEBUG] [Thread-77683] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:24:42.752 [DEBUG] [Thread-77683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:24:42.752 [DEBUG] [Thread-77683] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:24:42.752 [DEBUG] [Thread-77683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:24:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:24:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:24:42.753 [DEBUG] [Thread-77683] [transport.py] [_log()] userauth is OK
2025-12-12T22:24:42.753 [DEBUG] [Thread-77683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:24:42.753 [DEBUG] [Thread-77683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:24:42.753 [DEBUG] [Thread-77683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:24:42.753 [DEBUG] [Thread-77683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:24:42.764 [INFO] [Thread-77683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:24:42.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:24:43.330 [DEBUG] [Thread-77683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:24:43.330 [DEBUG] [Thread-77683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:24:43.331 [DEBUG] [Thread-77683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:24:43.373 [DEBUG] [Thread-77683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:24:43.373 [DEBUG] [Thread-77683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:24:43.377 [DEBUG] [Thread-77683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:24:43.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:24:43.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:24:43.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:24:43.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:24:43.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:24:43.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:24:43.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:24:43.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:24:43.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:24:43.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.850100 -999.00   +9.90  38.42     90   +8.50 1 3 2 3 1     0    0 1.13 -14.47 ..ES. 43.0 38.4 314.0 53.9 11.3 -4.2 11.1 -4.4 10.6 -3.5 10.9 -3.1
2025-12-12T22:24:43.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:24:43.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:24:43.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.850100
2025-12-12T22:24:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:24:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:24:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:24:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:24:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:24:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:24:08', tmtdew=1.39, humidity=90.91, cloud=0.0, wind=34.64, temperature=10.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:24:08.640', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:24:43.408 [DEBUG] [Thread-77683] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:24:43.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:24:43.508 [DEBUG] [Thread-77686] [transport.py] [_log()] starting thread (client mode): 0xf5788820
2025-12-12T22:24:43.508 [DEBUG] [Thread-77686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:24:43.523 [DEBUG] [Thread-77686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:24:43.523 [INFO] [Thread-77686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:24:43.530 [DEBUG] [Thread-77686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] client lang: <none>
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] server lang: <none>
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] kex follows: False
2025-12-12T22:24:43.531 [DEBUG] [Thread-77686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:24:43.532 [DEBUG] [Thread-77686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:24:43.532 [DEBUG] [Thread-77686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:24:43.532 [DEBUG] [Thread-77686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:24:43.532 [DEBUG] [Thread-77686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:24:43.532 [DEBUG] [Thread-77686] [transport.py] [_log()] Compression: none
2025-12-12T22:24:43.532 [DEBUG] [Thread-77686] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:24:43.589 [DEBUG] [Thread-77686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:24:43.589 [DEBUG] [Thread-77686] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:24:43.590 [DEBUG] [Thread-77686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:24:43.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:24:43.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:24:43.645 [DEBUG] [Thread-77686] [transport.py] [_log()] userauth is OK
2025-12-12T22:24:43.645 [DEBUG] [Thread-77686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:24:43.645 [DEBUG] [Thread-77686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:24:43.645 [DEBUG] [Thread-77686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:24:43.646 [DEBUG] [Thread-77686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:24:43.664 [INFO] [Thread-77686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:24:43.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:24:43.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:24:44.518 [DEBUG] [Thread-77686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:24:44.519 [DEBUG] [Thread-77686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:24:44.567 [DEBUG] [Thread-77686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:24:44.567 [DEBUG] [Thread-77686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:24:44.576 [DEBUG] [Thread-77686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:24:44.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:24:44.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:24:44.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:24:44.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:24:44.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:24:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:24:44.612 [DEBUG] [Thread-77686] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:24:46.837 [DEBUG] [Thread-77688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:01.881 [DEBUG] [Thread-77689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:14.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:25:14.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:25:14.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:25:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 24, 40), 1.39, 90.91, 0.0, 34.49, 10.06, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:25:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:24:40
2025-12-12T22:25:15.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:25:15.633 [DEBUG] [Thread-77690] [transport.py] [_log()] starting thread (client mode): 0xf57c88b0
2025-12-12T22:25:15.633 [DEBUG] [Thread-77690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:25:15.651 [DEBUG] [Thread-77690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:25:15.652 [INFO] [Thread-77690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:25:15.653 [DEBUG] [Thread-77690] [transport.py] [_log()] client lang: <none>
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] server lang: <none>
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] kex follows: False
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] Compression: none
2025-12-12T22:25:15.654 [DEBUG] [Thread-77690] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:25:15.662 [DEBUG] [Thread-77690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:25:15.662 [DEBUG] [Thread-77690] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:25:15.663 [DEBUG] [Thread-77690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:25:15.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:25:15.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:25:15.665 [DEBUG] [Thread-77690] [transport.py] [_log()] userauth is OK
2025-12-12T22:25:15.665 [DEBUG] [Thread-77690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:25:15.665 [DEBUG] [Thread-77690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:25:15.665 [DEBUG] [Thread-77690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:25:15.665 [DEBUG] [Thread-77690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:25:15.682 [INFO] [Thread-77690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:25:15.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:25:15.918 [DEBUG] [Thread-77692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:16.906 [DEBUG] [Thread-77693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:16.995 [DEBUG] [Thread-77690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:25:16.995 [DEBUG] [Thread-77690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:25:16.996 [DEBUG] [Thread-77690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:25:17.037 [DEBUG] [Thread-77690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:25:17.037 [DEBUG] [Thread-77690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:25:17.040 [DEBUG] [Thread-77690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:25:17.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:25:17.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:25:17.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:25:17.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:25:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:25:17.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:25:17.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:25:17.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:25:17.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:25:17.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.850447 -999.00  +10.00  36.31     90   +8.50 1 3 2 3 1     0    0 1.12 -15.17 ..ES. 40.4 36.3 308.6 47.3 11.3 -2.8 11.1 -2.9 10.6 -2.2 10.9 -1.9
2025-12-12T22:25:17.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:25:17.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:25:17.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.850447
2025-12-12T22:25:17.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:25:17.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:25:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:25:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:25:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:25:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:24:40', tmtdew=1.39, humidity=90.91, cloud=0.0, wind=34.49, temperature=10.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:24:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2030000000000003, 0.8497500000000002, nan, nan, nan, nan, 1.5809999999999995, 1.0242500000000012, 1.0894999999999992, 0.4894999999999996, nan, nan, nan, nan, 0.6737500000000001, 0.732499999999999, 0.9375, nan, nan, nan, nan, nan, 0.6410000000000009, 0.47274999999999956], zp_timestamp='2025-12-12T20:11:00')
2025-12-12T22:25:17.066 [DEBUG] [Thread-77690] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:25:17.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:25:17.162 [DEBUG] [Thread-77695] [transport.py] [_log()] starting thread (client mode): 0xf57bee90
2025-12-12T22:25:17.162 [DEBUG] [Thread-77695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:25:17.177 [DEBUG] [Thread-77695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:25:17.177 [INFO] [Thread-77695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:25:17.184 [DEBUG] [Thread-77695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:25:17.184 [DEBUG] [Thread-77695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:25:17.184 [DEBUG] [Thread-77695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] client lang: <none>
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] server lang: <none>
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] kex follows: False
2025-12-12T22:25:17.185 [DEBUG] [Thread-77695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:25:17.186 [DEBUG] [Thread-77695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:25:17.186 [DEBUG] [Thread-77695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:25:17.186 [DEBUG] [Thread-77695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:25:17.186 [DEBUG] [Thread-77695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:25:17.186 [DEBUG] [Thread-77695] [transport.py] [_log()] Compression: none
2025-12-12T22:25:17.186 [DEBUG] [Thread-77695] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:25:17.241 [DEBUG] [Thread-77695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:25:17.241 [DEBUG] [Thread-77695] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:25:17.242 [DEBUG] [Thread-77695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:25:17.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:25:17.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:25:17.297 [DEBUG] [Thread-77695] [transport.py] [_log()] userauth is OK
2025-12-12T22:25:17.297 [DEBUG] [Thread-77695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:25:17.297 [DEBUG] [Thread-77695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:25:17.297 [DEBUG] [Thread-77695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:25:17.297 [DEBUG] [Thread-77695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:25:17.319 [INFO] [Thread-77695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:25:17.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:25:17.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:25:18.162 [DEBUG] [Thread-77695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:25:18.162 [DEBUG] [Thread-77695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:25:18.209 [DEBUG] [Thread-77695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:25:18.210 [DEBUG] [Thread-77695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:25:18.218 [DEBUG] [Thread-77695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:25:18.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:25:18.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:25:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:25:18.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:25:18.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:25:18.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:25:18.252 [DEBUG] [Thread-77695] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:25:31.940 [DEBUG] [Thread-77697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:36.958 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:36.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:46.983 [DEBUG] [Thread-77698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:25:48.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:25:48.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:25:48.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:25:48.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 25, 45), 1.46, 90.81, 0.0, 35.27, 10.04, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:25:48.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:25:45
2025-12-12T22:25:49.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:25:49.234 [DEBUG] [Thread-77699] [transport.py] [_log()] starting thread (client mode): 0xf57710c0
2025-12-12T22:25:49.234 [DEBUG] [Thread-77699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:25:49.254 [DEBUG] [Thread-77699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:25:49.254 [INFO] [Thread-77699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] client lang: <none>
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] server lang: <none>
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] kex follows: False
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:25:49.258 [DEBUG] [Thread-77699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:25:49.259 [DEBUG] [Thread-77699] [transport.py] [_log()] Compression: none
2025-12-12T22:25:49.259 [DEBUG] [Thread-77699] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:25:49.275 [DEBUG] [Thread-77699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:25:49.276 [DEBUG] [Thread-77699] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:25:49.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:25:49.276 [DEBUG] [Thread-77699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:25:49.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:25:49.278 [DEBUG] [Thread-77699] [transport.py] [_log()] userauth is OK
2025-12-12T22:25:49.279 [DEBUG] [Thread-77699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:25:49.279 [DEBUG] [Thread-77699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:25:49.279 [DEBUG] [Thread-77699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:25:49.279 [DEBUG] [Thread-77699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:25:49.300 [INFO] [Thread-77699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:25:49.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:25:49.893 [DEBUG] [Thread-77699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:25:49.894 [DEBUG] [Thread-77699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:25:49.894 [DEBUG] [Thread-77699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:25:49.935 [DEBUG] [Thread-77699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:25:49.935 [DEBUG] [Thread-77699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:25:49.938 [DEBUG] [Thread-77699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:25:49.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:25:49.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:25:49.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:25:49.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:25:49.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:25:49.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:25:49.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:25:49.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:25:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:25:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.850794 -999.00  +10.00  37.45     90   +8.60 1 3 2 3 1     0    0 1.12 -15.36 ..ES. 36.1 37.5 308.6 42.5 11.3 -2.4 11.1 -2.5 10.7 -2.4 10.9 -1.8
2025-12-12T22:25:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:25:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:25:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.850794
2025-12-12T22:25:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:25:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:25:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:25:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:25:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:25:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:25:45', tmtdew=1.46, humidity=90.81, cloud=0.0, wind=35.27, temperature=10.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:25:08.602', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:25:49.965 [DEBUG] [Thread-77699] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:25:50.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:25:50.062 [DEBUG] [Thread-77702] [transport.py] [_log()] starting thread (client mode): 0xf5770940
2025-12-12T22:25:50.062 [DEBUG] [Thread-77702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:25:50.077 [DEBUG] [Thread-77702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:25:50.077 [INFO] [Thread-77702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:25:50.084 [DEBUG] [Thread-77702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:25:50.084 [DEBUG] [Thread-77702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:25:50.084 [DEBUG] [Thread-77702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] client lang: <none>
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] server lang: <none>
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] kex follows: False
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] Compression: none
2025-12-12T22:25:50.085 [DEBUG] [Thread-77702] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:25:50.141 [DEBUG] [Thread-77702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:25:50.141 [DEBUG] [Thread-77702] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:25:50.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:25:50.142 [DEBUG] [Thread-77702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:25:50.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:25:50.197 [DEBUG] [Thread-77702] [transport.py] [_log()] userauth is OK
2025-12-12T22:25:50.197 [DEBUG] [Thread-77702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:25:50.197 [DEBUG] [Thread-77702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:25:50.197 [DEBUG] [Thread-77702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:25:50.197 [DEBUG] [Thread-77702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:25:50.216 [INFO] [Thread-77702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:25:50.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:25:50.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:25:51.078 [DEBUG] [Thread-77702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:25:51.079 [DEBUG] [Thread-77702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:25:51.127 [DEBUG] [Thread-77702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:25:51.127 [DEBUG] [Thread-77702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:25:51.136 [DEBUG] [Thread-77702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:25:51.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:25:51.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:25:51.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:25:51.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:25:51.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:25:51.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:25:51.170 [DEBUG] [Thread-77702] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:26:02.006 [DEBUG] [Thread-77704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:15.988 [DEBUG] [Thread-77705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:17.051 [DEBUG] [Thread-77706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:26:21.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:26:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:26:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 26, 17), 1.45, 90.88, 0.0, 35.39, 10.07, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:26:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:26:17
2025-12-12T22:26:22.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:26:22.163 [DEBUG] [Thread-77707] [transport.py] [_log()] starting thread (client mode): 0xf5789450
2025-12-12T22:26:22.163 [DEBUG] [Thread-77707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:26:22.184 [DEBUG] [Thread-77707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:26:22.185 [INFO] [Thread-77707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] client lang: <none>
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] server lang: <none>
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] kex follows: False
2025-12-12T22:26:22.186 [DEBUG] [Thread-77707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:26:22.187 [DEBUG] [Thread-77707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:26:22.187 [DEBUG] [Thread-77707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:26:22.187 [DEBUG] [Thread-77707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:26:22.187 [DEBUG] [Thread-77707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:26:22.187 [DEBUG] [Thread-77707] [transport.py] [_log()] Compression: none
2025-12-12T22:26:22.187 [DEBUG] [Thread-77707] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:26:22.200 [DEBUG] [Thread-77707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:26:22.200 [DEBUG] [Thread-77707] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:26:22.201 [DEBUG] [Thread-77707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:26:22.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:26:22.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:26:22.202 [DEBUG] [Thread-77707] [transport.py] [_log()] userauth is OK
2025-12-12T22:26:22.203 [DEBUG] [Thread-77707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:26:22.203 [DEBUG] [Thread-77707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:26:22.203 [DEBUG] [Thread-77707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:26:22.203 [DEBUG] [Thread-77707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:26:22.221 [INFO] [Thread-77707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:26:22.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:26:23.025 [DEBUG] [Thread-77707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:26:23.026 [DEBUG] [Thread-77707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:26:23.026 [DEBUG] [Thread-77707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:26:23.067 [DEBUG] [Thread-77707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:26:23.067 [DEBUG] [Thread-77707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:26:23.068 [DEBUG] [Thread-77707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:26:23.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:26:23.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:26:23.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:26:23.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:26:23.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:26:23.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:26:23.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:26:23.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:26:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:26:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.851141 -999.00  +10.00  24.90     90   +8.60 1 3 1 3 1     0    0 1.08 -17.03 ..E.. 31.9 24.9 311.6 44.9 11.3 -1.8 11.1 -1.9 10.6 -1.7 10.9 -1.4
2025-12-12T22:26:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:26:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:26:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.851141
2025-12-12T22:26:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:26:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:26:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:26:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:26:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:26:23.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:26:17', tmtdew=1.45, humidity=90.88, cloud=0.0, wind=35.39, temperature=10.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:25:38.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:26:23.090 [DEBUG] [Thread-77707] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:26:23.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:26:23.195 [DEBUG] [Thread-77710] [transport.py] [_log()] starting thread (client mode): 0xf57f0e50
2025-12-12T22:26:23.195 [DEBUG] [Thread-77710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:26:23.210 [DEBUG] [Thread-77710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:26:23.210 [INFO] [Thread-77710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:23.217 [DEBUG] [Thread-77710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] client lang: <none>
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] server lang: <none>
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] kex follows: False
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] Compression: none
2025-12-12T22:26:23.218 [DEBUG] [Thread-77710] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:26:23.276 [DEBUG] [Thread-77710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:26:23.277 [DEBUG] [Thread-77710] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:26:23.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:26:23.278 [DEBUG] [Thread-77710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:26:23.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:26:23.333 [DEBUG] [Thread-77710] [transport.py] [_log()] userauth is OK
2025-12-12T22:26:23.333 [DEBUG] [Thread-77710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:26:23.333 [DEBUG] [Thread-77710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:26:23.333 [DEBUG] [Thread-77710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:26:23.333 [DEBUG] [Thread-77710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:26:23.356 [INFO] [Thread-77710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:26:23.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:26:23.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:26:24.216 [DEBUG] [Thread-77710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:26:24.216 [DEBUG] [Thread-77710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:26:24.264 [DEBUG] [Thread-77710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:26:24.265 [DEBUG] [Thread-77710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:26:24.278 [DEBUG] [Thread-77710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:26:24.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:26:24.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:26:24.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:26:24.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:26:24.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:26:24.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:26:24.313 [DEBUG] [Thread-77710] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:26:32.076 [DEBUG] [Thread-77712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:37.163 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:37.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:47.124 [DEBUG] [Thread-77713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:26:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:26:54.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:26:54.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:26:55.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 26, 49), 1.4, 90.88, 0.0, 34.67, 10.12, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:26:55.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:26:49
2025-12-12T22:26:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:26:55.321 [DEBUG] [Thread-77714] [transport.py] [_log()] starting thread (client mode): 0xf57bfa00
2025-12-12T22:26:55.321 [DEBUG] [Thread-77714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:26:55.341 [DEBUG] [Thread-77714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:26:55.341 [INFO] [Thread-77714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] client lang: <none>
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] server lang: <none>
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] kex follows: False
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] Compression: none
2025-12-12T22:26:55.345 [DEBUG] [Thread-77714] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:26:55.360 [DEBUG] [Thread-77714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:26:55.361 [DEBUG] [Thread-77714] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:26:55.361 [DEBUG] [Thread-77714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:26:55.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:26:55.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:26:55.362 [DEBUG] [Thread-77714] [transport.py] [_log()] userauth is OK
2025-12-12T22:26:55.362 [DEBUG] [Thread-77714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:26:55.362 [DEBUG] [Thread-77714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:26:55.362 [DEBUG] [Thread-77714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:26:55.362 [DEBUG] [Thread-77714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:26:55.372 [INFO] [Thread-77714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:26:55.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:26:55.995 [DEBUG] [Thread-77714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:26:55.995 [DEBUG] [Thread-77714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:26:55.995 [DEBUG] [Thread-77714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:26:56.037 [DEBUG] [Thread-77714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:26:56.037 [DEBUG] [Thread-77714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:26:56.039 [DEBUG] [Thread-77714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:26:56.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:26:56.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:26:56.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:26:56.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:26:56.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:26:56.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:26:56.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:26:56.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:26:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:26:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.851488 -999.00  +10.00  38.51     90   +8.60 1 3 2 3 1     0    0 1.03 -18.59 ..E.. 37.0 38.5 316.0 43.6 11.4 -1.8 11.2 -1.8 10.7 -1.5 11.0 -1.3
2025-12-12T22:26:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:26:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:26:56.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.851488
2025-12-12T22:26:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:26:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:26:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:26:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:26:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:26:56.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:26:49', tmtdew=1.4, humidity=90.88, cloud=0.0, wind=34.67, temperature=10.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:26:08.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:26:56.063 [DEBUG] [Thread-77714] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:26:56.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:26:56.151 [DEBUG] [Thread-77717] [transport.py] [_log()] starting thread (client mode): 0xf57bce80
2025-12-12T22:26:56.151 [DEBUG] [Thread-77717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:26:56.166 [DEBUG] [Thread-77717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:26:56.166 [INFO] [Thread-77717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] client lang: <none>
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] server lang: <none>
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] kex follows: False
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] Compression: none
2025-12-12T22:26:56.174 [DEBUG] [Thread-77717] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:26:56.231 [DEBUG] [Thread-77717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:26:56.231 [DEBUG] [Thread-77717] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:26:56.231 [DEBUG] [Thread-77717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:26:56.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:26:56.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:26:56.288 [DEBUG] [Thread-77717] [transport.py] [_log()] userauth is OK
2025-12-12T22:26:56.288 [DEBUG] [Thread-77717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:26:56.288 [DEBUG] [Thread-77717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:26:56.289 [DEBUG] [Thread-77717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:26:56.289 [DEBUG] [Thread-77717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:26:56.302 [INFO] [Thread-77717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:26:56.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:26:56.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:26:57.133 [DEBUG] [Thread-77717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:26:57.133 [DEBUG] [Thread-77717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:26:57.181 [DEBUG] [Thread-77717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:26:57.181 [DEBUG] [Thread-77717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:26:57.190 [DEBUG] [Thread-77717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:26:57.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:26:57.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:26:57.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:26:57.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:26:57.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:26:57.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:26:57.224 [DEBUG] [Thread-77717] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:27:02.150 [DEBUG] [Thread-77719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:27:16.064 [DEBUG] [Thread-77720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:27:17.203 [DEBUG] [Thread-77721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:27:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:27:27.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:27:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:27:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 27, 21), 1.41, 90.8, 0.0, 35.2, 10.16, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:27:27.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:27:21
2025-12-12T22:27:28.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:27:28.200 [DEBUG] [Thread-77722] [transport.py] [_log()] starting thread (client mode): 0xf57cbe50
2025-12-12T22:27:28.201 [DEBUG] [Thread-77722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:27:28.221 [DEBUG] [Thread-77722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:27:28.221 [INFO] [Thread-77722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] client lang: <none>
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] server lang: <none>
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] kex follows: False
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] Compression: none
2025-12-12T22:27:28.225 [DEBUG] [Thread-77722] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:27:28.242 [DEBUG] [Thread-77722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:27:28.242 [DEBUG] [Thread-77722] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:27:28.243 [DEBUG] [Thread-77722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:27:28.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:27:28.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:27:28.245 [DEBUG] [Thread-77722] [transport.py] [_log()] userauth is OK
2025-12-12T22:27:28.245 [DEBUG] [Thread-77722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:27:28.245 [DEBUG] [Thread-77722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:27:28.245 [DEBUG] [Thread-77722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:27:28.245 [DEBUG] [Thread-77722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:27:28.262 [INFO] [Thread-77722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:27:28.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:27:29.022 [DEBUG] [Thread-77722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:27:29.022 [DEBUG] [Thread-77722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:27:29.023 [DEBUG] [Thread-77722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:27:29.064 [DEBUG] [Thread-77722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:27:29.064 [DEBUG] [Thread-77722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:27:29.067 [DEBUG] [Thread-77722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:27:29.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:27:29.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:27:29.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:27:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:27:29.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:27:29.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:27:29.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:27:29.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:27:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:27:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.852183 -999.00  +10.10  38.30     90   +8.70 1 3 2 3 1     0    0 1.04 -17.81 ----- 37.6 38.3 319.6 43.5 11.4 -2.1 11.2 -2.1 10.8 -1.9 11.1 -1.7
2025-12-12T22:27:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:27:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:27:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.852183
2025-12-12T22:27:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:27:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:27:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:27:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:27:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:27:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:27:21', tmtdew=1.41, humidity=90.8, cloud=0.0, wind=35.2, temperature=10.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:27:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:27:29.093 [DEBUG] [Thread-77722] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:27:29.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:27:29.189 [DEBUG] [Thread-77725] [transport.py] [_log()] starting thread (client mode): 0xf5772770
2025-12-12T22:27:29.189 [DEBUG] [Thread-77725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:27:29.204 [DEBUG] [Thread-77725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:27:29.204 [INFO] [Thread-77725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:27:29.212 [DEBUG] [Thread-77725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:27:29.212 [DEBUG] [Thread-77725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] client lang: <none>
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] server lang: <none>
2025-12-12T22:27:29.213 [DEBUG] [Thread-77725] [transport.py] [_log()] kex follows: False
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] Compression: none
2025-12-12T22:27:29.214 [DEBUG] [Thread-77725] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:27:29.268 [DEBUG] [Thread-77725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:27:29.268 [DEBUG] [Thread-77725] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:27:29.269 [DEBUG] [Thread-77725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:27:29.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:27:29.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:27:29.324 [DEBUG] [Thread-77725] [transport.py] [_log()] userauth is OK
2025-12-12T22:27:29.324 [DEBUG] [Thread-77725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:27:29.324 [DEBUG] [Thread-77725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:27:29.324 [DEBUG] [Thread-77725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:27:29.324 [DEBUG] [Thread-77725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:27:29.338 [INFO] [Thread-77725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:27:29.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:27:29.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:27:30.188 [DEBUG] [Thread-77725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:27:30.188 [DEBUG] [Thread-77725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:27:30.236 [DEBUG] [Thread-77725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:27:30.236 [DEBUG] [Thread-77725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:27:30.244 [DEBUG] [Thread-77725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:27:30.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:27:30.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:27:30.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:27:30.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:27:30.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:27:30.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:27:30.275 [DEBUG] [Thread-77725] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:27:32.228 [DEBUG] [Thread-77727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:27:37.377 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:27:37.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:27:47.272 [DEBUG] [Thread-77728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:00.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:28:00.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:28:00.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:28:00.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 27, 53), 1.41, 90.83, 0.0, 36.86, 10.17, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:28:00.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:27:53
2025-12-12T22:28:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:28:01.230 [DEBUG] [Thread-77729] [transport.py] [_log()] starting thread (client mode): 0xf57f3310
2025-12-12T22:28:01.230 [DEBUG] [Thread-77729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:28:01.250 [DEBUG] [Thread-77729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:28:01.250 [INFO] [Thread-77729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] client lang: <none>
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] server lang: <none>
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] kex follows: False
2025-12-12T22:28:01.253 [DEBUG] [Thread-77729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:28:01.254 [DEBUG] [Thread-77729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:28:01.254 [DEBUG] [Thread-77729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:28:01.254 [DEBUG] [Thread-77729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:28:01.254 [DEBUG] [Thread-77729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:28:01.254 [DEBUG] [Thread-77729] [transport.py] [_log()] Compression: none
2025-12-12T22:28:01.254 [DEBUG] [Thread-77729] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:28:01.273 [DEBUG] [Thread-77729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:28:01.273 [DEBUG] [Thread-77729] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:28:01.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:28:01.274 [DEBUG] [Thread-77729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:28:01.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:28:01.276 [DEBUG] [Thread-77729] [transport.py] [_log()] userauth is OK
2025-12-12T22:28:01.276 [DEBUG] [Thread-77729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:28:01.276 [DEBUG] [Thread-77729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:28:01.276 [DEBUG] [Thread-77729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:28:01.276 [DEBUG] [Thread-77729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:28:01.298 [INFO] [Thread-77729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:28:01.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:28:01.892 [DEBUG] [Thread-77729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:28:01.892 [DEBUG] [Thread-77729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:28:01.893 [DEBUG] [Thread-77729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:28:01.934 [DEBUG] [Thread-77729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:28:01.934 [DEBUG] [Thread-77729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:28:01.936 [DEBUG] [Thread-77729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:28:01.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:28:01.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:28:01.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:28:01.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:28:01.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:28:01.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:28:01.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:28:01.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:28:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:28:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.852530 -999.00  +10.10  35.44     91   +8.70 1 3 2 3 1     0    0 0.98 -18.61 ----- 36.6 35.4 318.2 44.7 11.4 -2.1 11.2 -2.0 10.8 -1.5 11.1 -1.5
2025-12-12T22:28:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:28:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:28:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.852530
2025-12-12T22:28:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:28:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:28:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:28:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:28:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:28:01.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:27:53', tmtdew=1.41, humidity=90.83, cloud=0.0, wind=36.86, temperature=10.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:27:38.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:28:01.958 [DEBUG] [Thread-77729] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:28:02.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:28:02.303 [DEBUG] [Thread-77732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:16.136 [DEBUG] [Thread-77733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:17.345 [DEBUG] [Thread-77734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:32.371 [DEBUG] [Thread-77735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:37.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:37.586 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:28:47.395 [DEBUG] [Thread-77736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:02.419 [DEBUG] [Thread-77737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:16.216 [DEBUG] [Thread-77738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:17.448 [DEBUG] [Thread-77739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:32.470 [DEBUG] [Thread-77740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:37.793 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:37.794 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:29:47.501 [DEBUG] [Thread-77741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:02.531 [DEBUG] [Thread-77742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:15.786 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T22:30:16.293 [DEBUG] [Thread-77743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:17.554 [DEBUG] [Thread-77744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:32.582 [DEBUG] [Thread-77745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:37.996 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:37.997 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:30:45.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:30:45.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:30:46.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 30, 33), 1.64, 89.53, 0.0, 45.09, 10.58, 1, 1, 0, 2, 1, 0),)
2025-12-12T22:30:46.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:30:33
2025-12-12T22:30:46.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:30:46.837 [DEBUG] [Thread-77746] [transport.py] [_log()] starting thread (client mode): 0xf57c9a20
2025-12-12T22:30:46.837 [DEBUG] [Thread-77746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:30:46.857 [DEBUG] [Thread-77746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:30:46.857 [INFO] [Thread-77746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] client lang: <none>
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] server lang: <none>
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] kex follows: False
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] Compression: none
2025-12-12T22:30:46.861 [DEBUG] [Thread-77746] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:30:46.876 [DEBUG] [Thread-77746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:30:46.876 [DEBUG] [Thread-77746] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:30:46.877 [DEBUG] [Thread-77746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:30:46.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:30:46.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:30:46.877 [DEBUG] [Thread-77746] [transport.py] [_log()] userauth is OK
2025-12-12T22:30:46.877 [DEBUG] [Thread-77746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:30:46.877 [DEBUG] [Thread-77746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:30:46.877 [DEBUG] [Thread-77746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:30:46.877 [DEBUG] [Thread-77746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:30:46.888 [INFO] [Thread-77746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:30:46.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:30:47.491 [DEBUG] [Thread-77746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:30:47.491 [DEBUG] [Thread-77746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:30:47.491 [DEBUG] [Thread-77746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:30:47.532 [DEBUG] [Thread-77746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:30:47.532 [DEBUG] [Thread-77746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:30:47.534 [DEBUG] [Thread-77746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:30:47.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:30:47.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:30:47.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:30:47.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:30:47.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:30:47.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:30:47.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.854266 -999.00   +9.90  43.40     91   +8.60 1 3 2 3 1     0    0 0.97 -19.27 ----- 44.2 43.4 309.4 50.9 11.3 -3.1 11.2 -3.0 10.7 -2.4 11.0 -2.1
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.854266
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:30:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:30:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:30:33', tmtdew=1.64, humidity=89.53, cloud=0.0, wind=45.09, temperature=10.58, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:30:08.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:30:47.553 [DEBUG] [Thread-77746] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:30:47.610 [DEBUG] [Thread-77749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:30:47.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:30:47.639 [DEBUG] [Thread-77750] [transport.py] [_log()] starting thread (client mode): 0xf578b8e0
2025-12-12T22:30:47.639 [DEBUG] [Thread-77750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:30:47.657 [DEBUG] [Thread-77750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:30:47.657 [INFO] [Thread-77750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] client lang: <none>
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] server lang: <none>
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] kex follows: False
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] Compression: none
2025-12-12T22:30:47.665 [DEBUG] [Thread-77750] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:30:47.723 [DEBUG] [Thread-77750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:30:47.723 [DEBUG] [Thread-77750] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:30:47.723 [DEBUG] [Thread-77750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:30:47.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:30:47.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:30:47.784 [DEBUG] [Thread-77750] [transport.py] [_log()] userauth is OK
2025-12-12T22:30:47.785 [DEBUG] [Thread-77750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:30:47.785 [DEBUG] [Thread-77750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:30:47.785 [DEBUG] [Thread-77750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:30:47.785 [DEBUG] [Thread-77750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:30:47.799 [INFO] [Thread-77750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:30:47.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:30:47.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:30:48.636 [DEBUG] [Thread-77750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:30:48.636 [DEBUG] [Thread-77750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:30:48.685 [DEBUG] [Thread-77750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:30:48.685 [DEBUG] [Thread-77750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:30:48.693 [DEBUG] [Thread-77750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:30:48.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:30:48.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:30:48.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:30:48.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:30:48.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:30:48.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:30:48.725 [DEBUG] [Thread-77750] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:31:02.646 [DEBUG] [Thread-77752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:16.369 [DEBUG] [Thread-77753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:17.673 [DEBUG] [Thread-77754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:31:18.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:31:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:31:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 31, 5), 1.42, 90.76, 0.0, 38.22, 10.17, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:31:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:31:05
2025-12-12T22:31:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:31:19.734 [DEBUG] [Thread-77755] [transport.py] [_log()] starting thread (client mode): 0xf5773670
2025-12-12T22:31:19.734 [DEBUG] [Thread-77755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:31:19.754 [DEBUG] [Thread-77755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:31:19.754 [INFO] [Thread-77755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:31:19.757 [DEBUG] [Thread-77755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] client lang: <none>
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] server lang: <none>
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] kex follows: False
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:31:19.758 [DEBUG] [Thread-77755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:31:19.759 [DEBUG] [Thread-77755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:31:19.759 [DEBUG] [Thread-77755] [transport.py] [_log()] Compression: none
2025-12-12T22:31:19.759 [DEBUG] [Thread-77755] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:31:19.776 [DEBUG] [Thread-77755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:31:19.776 [DEBUG] [Thread-77755] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:31:19.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:31:19.777 [DEBUG] [Thread-77755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:31:19.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:31:19.779 [DEBUG] [Thread-77755] [transport.py] [_log()] userauth is OK
2025-12-12T22:31:19.779 [DEBUG] [Thread-77755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:31:19.780 [DEBUG] [Thread-77755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:31:19.780 [DEBUG] [Thread-77755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:31:19.780 [DEBUG] [Thread-77755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:31:19.798 [INFO] [Thread-77755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:31:19.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:31:20.438 [DEBUG] [Thread-77755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:31:20.438 [DEBUG] [Thread-77755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:31:20.439 [DEBUG] [Thread-77755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:31:20.479 [DEBUG] [Thread-77755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:31:20.479 [DEBUG] [Thread-77755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:31:20.482 [DEBUG] [Thread-77755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:31:20.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:31:20.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:31:20.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:31:20.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:31:20.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:31:20.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:31:20.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:31:20.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:31:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:31:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.854960 -999.00   +9.90  42.95     91   +8.50 1 3 2 3 1     0    0 0.95 -20.33 ----- 47.7 43.0 313.4 54.1 11.4 -3.2 11.1 -3.4 10.6 -4.7 10.9 -3.4
2025-12-12T22:31:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:31:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:31:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.854960
2025-12-12T22:31:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:31:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:31:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:31:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:31:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:31:20.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:31:05', tmtdew=1.42, humidity=90.76, cloud=0.0, wind=38.22, temperature=10.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:31:08.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.5945, nan, nan, nan, nan, nan, nan, 1.052999999999999, 0.17549999999999955, 0.64175, nan, nan, nan, nan, nan, 0.4392499999999995], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:31:20.512 [DEBUG] [Thread-77755] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:31:20.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:31:20.606 [DEBUG] [Thread-77758] [transport.py] [_log()] starting thread (client mode): 0xf5770970
2025-12-12T22:31:20.606 [DEBUG] [Thread-77758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:31:20.621 [DEBUG] [Thread-77758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:31:20.621 [INFO] [Thread-77758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:31:20.628 [DEBUG] [Thread-77758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:31:20.629 [DEBUG] [Thread-77758] [transport.py] [_log()] client lang: <none>
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] server lang: <none>
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] kex follows: False
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] Compression: none
2025-12-12T22:31:20.630 [DEBUG] [Thread-77758] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:31:20.691 [DEBUG] [Thread-77758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:31:20.692 [DEBUG] [Thread-77758] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:31:20.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:31:20.693 [DEBUG] [Thread-77758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:31:20.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:31:20.748 [DEBUG] [Thread-77758] [transport.py] [_log()] userauth is OK
2025-12-12T22:31:20.748 [DEBUG] [Thread-77758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:31:20.748 [DEBUG] [Thread-77758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:31:20.749 [DEBUG] [Thread-77758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:31:20.749 [DEBUG] [Thread-77758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:31:20.767 [INFO] [Thread-77758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:31:20.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:31:20.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:31:21.592 [DEBUG] [Thread-77758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:31:21.592 [DEBUG] [Thread-77758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:31:21.639 [DEBUG] [Thread-77758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:31:21.639 [DEBUG] [Thread-77758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:31:21.647 [DEBUG] [Thread-77758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:31:21.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:31:21.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:31:21.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:31:21.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:31:21.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:31:21.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:31:21.678 [DEBUG] [Thread-77758] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:31:32.701 [DEBUG] [Thread-77760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:38.203 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:38.205 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:47.744 [DEBUG] [Thread-77761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:31:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:31:51.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:31:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:31:52.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 31, 37), 1.42, 90.78, 0.0, 40.83, 10.11, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:31:52.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:31:37
2025-12-12T22:31:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:31:52.650 [DEBUG] [Thread-77762] [transport.py] [_log()] starting thread (client mode): 0xf57c8550
2025-12-12T22:31:52.650 [DEBUG] [Thread-77762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:31:52.671 [DEBUG] [Thread-77762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:31:52.671 [INFO] [Thread-77762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:31:52.674 [DEBUG] [Thread-77762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:31:52.674 [DEBUG] [Thread-77762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:31:52.674 [DEBUG] [Thread-77762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:31:52.674 [DEBUG] [Thread-77762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] client lang: <none>
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] server lang: <none>
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] kex follows: False
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] Compression: none
2025-12-12T22:31:52.675 [DEBUG] [Thread-77762] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:31:52.692 [DEBUG] [Thread-77762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:31:52.693 [DEBUG] [Thread-77762] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:31:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:31:52.694 [DEBUG] [Thread-77762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:31:52.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:31:52.696 [DEBUG] [Thread-77762] [transport.py] [_log()] userauth is OK
2025-12-12T22:31:52.696 [DEBUG] [Thread-77762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:31:52.696 [DEBUG] [Thread-77762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:31:52.696 [DEBUG] [Thread-77762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:31:52.696 [DEBUG] [Thread-77762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:31:52.711 [INFO] [Thread-77762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:31:52.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:31:53.331 [DEBUG] [Thread-77762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:31:53.331 [DEBUG] [Thread-77762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:31:53.332 [DEBUG] [Thread-77762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:31:53.372 [DEBUG] [Thread-77762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:31:53.373 [DEBUG] [Thread-77762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:31:53.376 [DEBUG] [Thread-77762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:31:53.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:31:53.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:31:53.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:31:53.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:31:53.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:31:53.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:31:53.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:31:53.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:31:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:31:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.855308 -999.00   +9.90  36.63     91   +8.50 1 3 2 3 1     0    0 0.93 -20.33 ----- 34.7 36.6 297.8 49.8 11.3 -2.4 11.1 -2.0 10.6 -2.0 10.9 -1.9
2025-12-12T22:31:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:31:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:31:53.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.855308
2025-12-12T22:31:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:31:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:31:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:31:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:31:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:31:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:31:37', tmtdew=1.42, humidity=90.78, cloud=0.0, wind=40.83, temperature=10.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:31:38.611', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:31:53.404 [DEBUG] [Thread-77762] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:31:53.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:31:53.504 [DEBUG] [Thread-77765] [transport.py] [_log()] starting thread (client mode): 0xf57cabf0
2025-12-12T22:31:53.504 [DEBUG] [Thread-77765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:31:53.519 [DEBUG] [Thread-77765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:31:53.519 [INFO] [Thread-77765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:53.527 [DEBUG] [Thread-77765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] client lang: <none>
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] server lang: <none>
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] kex follows: False
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] Compression: none
2025-12-12T22:31:53.528 [DEBUG] [Thread-77765] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:31:53.585 [DEBUG] [Thread-77765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:31:53.585 [DEBUG] [Thread-77765] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:31:53.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:31:53.586 [DEBUG] [Thread-77765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:31:53.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:31:53.644 [DEBUG] [Thread-77765] [transport.py] [_log()] userauth is OK
2025-12-12T22:31:53.645 [DEBUG] [Thread-77765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:31:53.645 [DEBUG] [Thread-77765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:31:53.645 [DEBUG] [Thread-77765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:31:53.645 [DEBUG] [Thread-77765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:31:53.664 [INFO] [Thread-77765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:31:53.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:31:53.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:31:54.513 [DEBUG] [Thread-77765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:31:54.514 [DEBUG] [Thread-77765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:31:54.563 [DEBUG] [Thread-77765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:31:54.563 [DEBUG] [Thread-77765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:31:54.572 [DEBUG] [Thread-77765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:31:54.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:31:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:31:54.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:31:54.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:31:54.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:31:54.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:31:54.607 [DEBUG] [Thread-77765] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:32:02.776 [DEBUG] [Thread-77767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:16.452 [DEBUG] [Thread-77768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:17.808 [DEBUG] [Thread-77769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:24.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:32:24.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:32:24.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:32:25.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 32, 10), 1.42, 90.78, 0.0, 39.61, 10.09, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:32:25.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:32:10
2025-12-12T22:32:25.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:32:25.593 [DEBUG] [Thread-77770] [transport.py] [_log()] starting thread (client mode): 0xf57707f0
2025-12-12T22:32:25.593 [DEBUG] [Thread-77770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:32:25.614 [DEBUG] [Thread-77770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:32:25.614 [INFO] [Thread-77770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] client lang: <none>
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] server lang: <none>
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] kex follows: False
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:32:25.617 [DEBUG] [Thread-77770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:32:25.618 [DEBUG] [Thread-77770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:32:25.618 [DEBUG] [Thread-77770] [transport.py] [_log()] Compression: none
2025-12-12T22:32:25.618 [DEBUG] [Thread-77770] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:32:25.635 [DEBUG] [Thread-77770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:32:25.636 [DEBUG] [Thread-77770] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:32:25.636 [DEBUG] [Thread-77770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:32:25.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:32:25.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:32:25.638 [DEBUG] [Thread-77770] [transport.py] [_log()] userauth is OK
2025-12-12T22:32:25.638 [DEBUG] [Thread-77770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:32:25.638 [DEBUG] [Thread-77770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:32:25.639 [DEBUG] [Thread-77770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:32:25.639 [DEBUG] [Thread-77770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:32:25.662 [INFO] [Thread-77770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:32:25.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:32:26.313 [DEBUG] [Thread-77770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:32:26.313 [DEBUG] [Thread-77770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:32:26.313 [DEBUG] [Thread-77770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:32:26.354 [DEBUG] [Thread-77770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:32:26.354 [DEBUG] [Thread-77770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:32:26.357 [DEBUG] [Thread-77770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:32:26.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:32:26.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:32:26.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:32:26.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:32:26.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:32:26.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:32:26.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:32:26.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:32:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:32:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.855655 -999.00  +10.00  37.42     91   +8.60 1 3 2 3 1     0    0 0.90 -19.72 ..E.. 43.2 37.4 313.6 44.9 11.3 -2.4 11.2 -2.2 10.6 -1.5 10.9 -1.5
2025-12-12T22:32:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:32:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:32:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.855655
2025-12-12T22:32:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:32:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:32:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:32:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:32:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:32:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:32:10', tmtdew=1.42, humidity=90.78, cloud=0.0, wind=39.61, temperature=10.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:32:08.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:32:26.376 [DEBUG] [Thread-77770] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:32:26.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:32:26.469 [DEBUG] [Thread-77773] [transport.py] [_log()] starting thread (client mode): 0xf57711e0
2025-12-12T22:32:26.469 [DEBUG] [Thread-77773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:32:26.483 [DEBUG] [Thread-77773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:32:26.484 [INFO] [Thread-77773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:32:26.491 [DEBUG] [Thread-77773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:32:26.491 [DEBUG] [Thread-77773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:32:26.491 [DEBUG] [Thread-77773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:32:26.491 [DEBUG] [Thread-77773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:26.491 [DEBUG] [Thread-77773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:26.491 [DEBUG] [Thread-77773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] client lang: <none>
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] server lang: <none>
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] kex follows: False
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] Compression: none
2025-12-12T22:32:26.492 [DEBUG] [Thread-77773] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:32:26.549 [DEBUG] [Thread-77773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:32:26.549 [DEBUG] [Thread-77773] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:32:26.550 [DEBUG] [Thread-77773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:32:26.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:32:26.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:32:26.604 [DEBUG] [Thread-77773] [transport.py] [_log()] userauth is OK
2025-12-12T22:32:26.605 [DEBUG] [Thread-77773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:32:26.605 [DEBUG] [Thread-77773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:32:26.605 [DEBUG] [Thread-77773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:32:26.605 [DEBUG] [Thread-77773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:32:26.624 [INFO] [Thread-77773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:32:26.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:32:26.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:32:27.429 [DEBUG] [Thread-77773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:32:27.429 [DEBUG] [Thread-77773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:32:27.478 [DEBUG] [Thread-77773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:32:27.478 [DEBUG] [Thread-77773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:32:27.486 [DEBUG] [Thread-77773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:32:27.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:32:27.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:32:27.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:32:27.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:32:27.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:32:27.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:32:27.518 [DEBUG] [Thread-77773] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:32:32.837 [DEBUG] [Thread-77775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:38.408 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:38.409 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:47.877 [DEBUG] [Thread-77776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:32:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:32:57.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:32:57.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:32:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 32, 42), 1.42, 90.78, 0.0, 43.21, 10.06, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:32:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:32:42
2025-12-12T22:32:58.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:32:58.507 [DEBUG] [Thread-77777] [transport.py] [_log()] starting thread (client mode): 0xf57bc550
2025-12-12T22:32:58.507 [DEBUG] [Thread-77777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:32:58.527 [DEBUG] [Thread-77777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:32:58.527 [INFO] [Thread-77777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] client lang: <none>
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] server lang: <none>
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] kex follows: False
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:32:58.530 [DEBUG] [Thread-77777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:32:58.531 [DEBUG] [Thread-77777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:32:58.531 [DEBUG] [Thread-77777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:32:58.531 [DEBUG] [Thread-77777] [transport.py] [_log()] Compression: none
2025-12-12T22:32:58.531 [DEBUG] [Thread-77777] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:32:58.547 [DEBUG] [Thread-77777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:32:58.548 [DEBUG] [Thread-77777] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:32:58.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:32:58.549 [DEBUG] [Thread-77777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:32:58.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:32:58.593 [DEBUG] [Thread-77777] [transport.py] [_log()] userauth is OK
2025-12-12T22:32:58.594 [DEBUG] [Thread-77777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:32:58.594 [DEBUG] [Thread-77777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:32:58.594 [DEBUG] [Thread-77777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:32:58.594 [DEBUG] [Thread-77777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:32:58.616 [INFO] [Thread-77777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:32:58.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:32:59.237 [DEBUG] [Thread-77777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:32:59.237 [DEBUG] [Thread-77777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:32:59.237 [DEBUG] [Thread-77777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:32:59.278 [DEBUG] [Thread-77777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:32:59.278 [DEBUG] [Thread-77777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:32:59.281 [DEBUG] [Thread-77777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:32:59.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:32:59.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:32:59.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:32:59.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:32:59.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:32:59.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:32:59.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.856002 -999.00   +9.90  53.15     91   +8.50 1 3 2 3 1     0    0 0.93 -19.54 ..E.. 55.2 53.1 314.8 58.9 11.3 -2.8 11.1 -2.6 10.7 -2.4 10.9 -1.9
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.856002
2025-12-12T22:32:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:32:59.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:32:59.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:32:59.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:32:59.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:32:59.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:32:42', tmtdew=1.42, humidity=90.78, cloud=0.0, wind=43.21, temperature=10.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:32:38.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:32:59.303 [DEBUG] [Thread-77777] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:32:59.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:32:59.392 [DEBUG] [Thread-77780] [transport.py] [_log()] starting thread (client mode): 0xf57bfdc0
2025-12-12T22:32:59.392 [DEBUG] [Thread-77780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:32:59.408 [DEBUG] [Thread-77780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:32:59.408 [INFO] [Thread-77780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:32:59.415 [DEBUG] [Thread-77780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:32:59.416 [DEBUG] [Thread-77780] [transport.py] [_log()] client lang: <none>
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] server lang: <none>
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] kex follows: False
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] Compression: none
2025-12-12T22:32:59.417 [DEBUG] [Thread-77780] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:32:59.473 [DEBUG] [Thread-77780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:32:59.474 [DEBUG] [Thread-77780] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:32:59.475 [DEBUG] [Thread-77780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:32:59.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:32:59.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:32:59.528 [DEBUG] [Thread-77780] [transport.py] [_log()] userauth is OK
2025-12-12T22:32:59.529 [DEBUG] [Thread-77780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:32:59.529 [DEBUG] [Thread-77780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:32:59.529 [DEBUG] [Thread-77780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:32:59.529 [DEBUG] [Thread-77780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:32:59.553 [INFO] [Thread-77780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:32:59.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:32:59.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:33:00.360 [DEBUG] [Thread-77780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:33:00.361 [DEBUG] [Thread-77780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:33:00.409 [DEBUG] [Thread-77780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:33:00.409 [DEBUG] [Thread-77780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:33:00.418 [DEBUG] [Thread-77780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:33:00.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:33:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:33:00.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:33:00.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:33:00.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:33:00.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:33:00.454 [DEBUG] [Thread-77780] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:33:02.908 [DEBUG] [Thread-77782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:33:16.524 [DEBUG] [Thread-77783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:33:17.956 [DEBUG] [Thread-77784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:33:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:33:30.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:33:30.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:33:31.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 33, 14), 1.41, 90.8, 0.0, 41.23, 10.07, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:33:31.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:33:14
2025-12-12T22:33:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:33:31.456 [DEBUG] [Thread-77785] [transport.py] [_log()] starting thread (client mode): 0xf5772830
2025-12-12T22:33:31.456 [DEBUG] [Thread-77785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:33:31.470 [DEBUG] [Thread-77785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:33:31.470 [INFO] [Thread-77785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:33:31.473 [DEBUG] [Thread-77785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:33:31.473 [DEBUG] [Thread-77785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:33:31.473 [DEBUG] [Thread-77785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:33:31.473 [DEBUG] [Thread-77785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] client lang: <none>
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] server lang: <none>
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] kex follows: False
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] Compression: none
2025-12-12T22:33:31.474 [DEBUG] [Thread-77785] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:33:31.490 [DEBUG] [Thread-77785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:33:31.490 [DEBUG] [Thread-77785] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:33:31.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:33:31.491 [DEBUG] [Thread-77785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:33:31.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:33:31.492 [DEBUG] [Thread-77785] [transport.py] [_log()] userauth is OK
2025-12-12T22:33:31.493 [DEBUG] [Thread-77785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:33:31.493 [DEBUG] [Thread-77785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:33:31.493 [DEBUG] [Thread-77785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:33:31.493 [DEBUG] [Thread-77785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:33:31.511 [INFO] [Thread-77785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:33:31.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:33:32.165 [DEBUG] [Thread-77785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:33:32.165 [DEBUG] [Thread-77785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:33:32.166 [DEBUG] [Thread-77785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:33:32.206 [DEBUG] [Thread-77785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:33:32.206 [DEBUG] [Thread-77785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:33:32.209 [DEBUG] [Thread-77785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:33:32.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:33:32.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:33:32.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:33:32.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:33:32.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:33:32.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:33:32.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:33:32.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:33:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:33:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.856349 -999.00   +9.80  55.61     91   +8.40 1 3 2 3 1     0    0 0.94 -18.83 ----- 63.2 55.6 316.0 64.6 11.3 -2.9 11.1 -2.6 10.6 -2.1 10.9 -2.0
2025-12-12T22:33:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:33:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:33:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.856349
2025-12-12T22:33:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:33:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:33:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:33:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:33:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:33:32.234 [DEBUG] [Thread-77785] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:33:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:33:14', tmtdew=1.41, humidity=90.8, cloud=0.0, wind=41.23, temperature=10.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:33:08.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:33:32.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:33:32.329 [DEBUG] [Thread-77788] [transport.py] [_log()] starting thread (client mode): 0xf57cad40
2025-12-12T22:33:32.329 [DEBUG] [Thread-77788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:33:32.344 [DEBUG] [Thread-77788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:33:32.344 [INFO] [Thread-77788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] client lang: <none>
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] server lang: <none>
2025-12-12T22:33:32.351 [DEBUG] [Thread-77788] [transport.py] [_log()] kex follows: False
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] Compression: none
2025-12-12T22:33:32.352 [DEBUG] [Thread-77788] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:33:32.407 [DEBUG] [Thread-77788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:33:32.407 [DEBUG] [Thread-77788] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:33:32.407 [DEBUG] [Thread-77788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:33:32.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:33:32.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:33:32.464 [DEBUG] [Thread-77788] [transport.py] [_log()] userauth is OK
2025-12-12T22:33:32.464 [DEBUG] [Thread-77788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:33:32.464 [DEBUG] [Thread-77788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:33:32.464 [DEBUG] [Thread-77788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:33:32.464 [DEBUG] [Thread-77788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:33:32.478 [INFO] [Thread-77788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:33:32.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:33:32.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:33:32.989 [DEBUG] [Thread-77790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:33:33.296 [DEBUG] [Thread-77788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:33:33.296 [DEBUG] [Thread-77788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:33:33.344 [DEBUG] [Thread-77788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:33:33.344 [DEBUG] [Thread-77788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:33:33.352 [DEBUG] [Thread-77788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:33:33.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:33:33.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')
2025-12-12T22:33: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') -> 00000000
2025-12-12T22:33:33.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:33:33.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:33:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:33:33.386 [DEBUG] [Thread-77788] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:33:38.613 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:33:38.615 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:33:48.035 [DEBUG] [Thread-77791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:03.060 [DEBUG] [Thread-77792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:34:03.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:34:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:34:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 33, 46), 1.42, 90.73, 0.0, 40.88, 9.97, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:34:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:33:46
2025-12-12T22:34:04.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:34:04.418 [DEBUG] [Thread-77793] [transport.py] [_log()] starting thread (client mode): 0xf57c8f70
2025-12-12T22:34:04.418 [DEBUG] [Thread-77793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:34:04.439 [DEBUG] [Thread-77793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:34:04.439 [INFO] [Thread-77793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] client lang: <none>
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] server lang: <none>
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] kex follows: False
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] Compression: none
2025-12-12T22:34:04.442 [DEBUG] [Thread-77793] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:34:04.458 [DEBUG] [Thread-77793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:34:04.458 [DEBUG] [Thread-77793] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:34:04.458 [DEBUG] [Thread-77793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:34:04.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:34:04.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:34:04.459 [DEBUG] [Thread-77793] [transport.py] [_log()] userauth is OK
2025-12-12T22:34:04.459 [DEBUG] [Thread-77793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:34:04.459 [DEBUG] [Thread-77793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:34:04.459 [DEBUG] [Thread-77793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:34:04.459 [DEBUG] [Thread-77793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:34:04.468 [INFO] [Thread-77793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:34:04.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:34:05.092 [DEBUG] [Thread-77793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:34:05.092 [DEBUG] [Thread-77793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:34:05.092 [DEBUG] [Thread-77793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:34:05.132 [DEBUG] [Thread-77793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:34:05.132 [DEBUG] [Thread-77793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:34:05.134 [DEBUG] [Thread-77793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:34:05.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:34:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:34:05.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:34:05.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:34:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:34:05.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:34:05.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.856697 -999.00   +9.70  49.78     91   +8.40 1 3 2 3 1     0    0 0.95 -18.31 ----- 50.4 49.8 312.4 66.4 11.3 -2.7 11.1 -2.5 10.6 -2.4 10.9 -1.8
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.856697
2025-12-12T22:34:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:34:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:34:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:34:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:34:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:34:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:33:46', tmtdew=1.42, humidity=90.73, cloud=0.0, wind=40.88, temperature=9.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:33:38.621', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:25:00')
2025-12-12T22:34:05.151 [DEBUG] [Thread-77793] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:34:05.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:34:16.602 [DEBUG] [Thread-77796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:18.088 [DEBUG] [Thread-77797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:33.131 [DEBUG] [Thread-77798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:38.819 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:38.820 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:34:48.162 [DEBUG] [Thread-77799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:03.193 [DEBUG] [Thread-77800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:16.679 [DEBUG] [Thread-77801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:18.221 [DEBUG] [Thread-77802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:33.245 [DEBUG] [Thread-77803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:39.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:39.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:35:48.268 [DEBUG] [Thread-77804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:03.297 [DEBUG] [Thread-77805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:16.752 [DEBUG] [Thread-77806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:18.331 [DEBUG] [Thread-77807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:20.330 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T22:36:33.359 [DEBUG] [Thread-77808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:39.226 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:39.227 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:48.387 [DEBUG] [Thread-77809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:36:50.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:36:50.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:36:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:36:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 36, 26), 1.49, 90.61, 0.0, 33.84, 9.99, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:36:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:36:26
2025-12-12T22:36:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:36:51.329 [DEBUG] [Thread-77810] [transport.py] [_log()] starting thread (client mode): 0xf57c96c0
2025-12-12T22:36:51.329 [DEBUG] [Thread-77810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:36:51.346 [DEBUG] [Thread-77810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:36:51.346 [INFO] [Thread-77810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:36:51.349 [DEBUG] [Thread-77810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] client lang: <none>
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] server lang: <none>
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] kex follows: False
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] Compression: none
2025-12-12T22:36:51.350 [DEBUG] [Thread-77810] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:36:51.369 [DEBUG] [Thread-77810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:36:51.369 [DEBUG] [Thread-77810] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:36:51.370 [DEBUG] [Thread-77810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:36:51.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:36:51.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:36:51.372 [DEBUG] [Thread-77810] [transport.py] [_log()] userauth is OK
2025-12-12T22:36:51.373 [DEBUG] [Thread-77810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:36:51.373 [DEBUG] [Thread-77810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:36:51.373 [DEBUG] [Thread-77810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:36:51.373 [DEBUG] [Thread-77810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:36:51.393 [INFO] [Thread-77810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:36:51.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:36:51.938 [DEBUG] [Thread-77810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:36:51.938 [DEBUG] [Thread-77810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:36:51.938 [DEBUG] [Thread-77810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:36:51.979 [DEBUG] [Thread-77810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:36:51.979 [DEBUG] [Thread-77810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:36:51.983 [DEBUG] [Thread-77810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:36:51.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:36:51.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:36:51.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:36:51.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:36:52.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:36:52.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:36:52.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:36:52.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:36:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:36:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.858433 -999.00   +9.80  37.08     90   +8.40 1 3 2 3 1     0    0 0.95 -17.98 ----- 33.9 37.1 303.6 54.7 11.2 -6.1 11.0 -7.5 10.6 -5.5 10.9 -3.9
2025-12-12T22:36:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:36:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:36:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.858433
2025-12-12T22:36:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:36:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:36:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:36:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:36:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:36:52.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:36:26', tmtdew=1.49, humidity=90.61, cloud=0.0, wind=33.84, temperature=9.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:36:08.611', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:31:00')
2025-12-12T22:36:52.006 [DEBUG] [Thread-77810] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:36:52.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:36:52.102 [DEBUG] [Thread-77813] [transport.py] [_log()] starting thread (client mode): 0xf5772ec0
2025-12-12T22:36:52.102 [DEBUG] [Thread-77813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:36:52.117 [DEBUG] [Thread-77813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:36:52.117 [INFO] [Thread-77813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:36:52.125 [DEBUG] [Thread-77813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] client lang: <none>
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] server lang: <none>
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] kex follows: False
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] Compression: none
2025-12-12T22:36:52.126 [DEBUG] [Thread-77813] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:36:52.184 [DEBUG] [Thread-77813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:36:52.185 [DEBUG] [Thread-77813] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:36:52.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:36:52.186 [DEBUG] [Thread-77813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:36:52.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:36:52.240 [DEBUG] [Thread-77813] [transport.py] [_log()] userauth is OK
2025-12-12T22:36:52.241 [DEBUG] [Thread-77813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:36:52.241 [DEBUG] [Thread-77813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:36:52.241 [DEBUG] [Thread-77813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:36:52.241 [DEBUG] [Thread-77813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:36:52.260 [INFO] [Thread-77813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:36:52.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:36:52.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:36:53.100 [DEBUG] [Thread-77813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:36:53.100 [DEBUG] [Thread-77813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:36:53.148 [DEBUG] [Thread-77813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:36:53.148 [DEBUG] [Thread-77813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:36:53.157 [DEBUG] [Thread-77813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:36:53.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:36:53.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:36:53.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:36:53.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:36:53.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:36:53.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:36:53.191 [DEBUG] [Thread-77813] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:37:03.420 [DEBUG] [Thread-77815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:16.823 [DEBUG] [Thread-77816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:18.466 [DEBUG] [Thread-77817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:37:23.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:37:23.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:37:23.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 36, 58), 1.5, 90.55, 0.0, 47.11, 9.96, 1, 2, 0, 2, 1, 0),)
2025-12-12T22:37:23.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:36:58
2025-12-12T22:37:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:37:24.189 [DEBUG] [Thread-77818] [transport.py] [_log()] starting thread (client mode): 0xf57bf8e0
2025-12-12T22:37:24.189 [DEBUG] [Thread-77818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:37:24.209 [DEBUG] [Thread-77818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:37:24.209 [INFO] [Thread-77818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:37:24.210 [DEBUG] [Thread-77818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:37:24.210 [DEBUG] [Thread-77818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] client lang: <none>
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] server lang: <none>
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] kex follows: False
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] Compression: none
2025-12-12T22:37:24.211 [DEBUG] [Thread-77818] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:37:24.218 [DEBUG] [Thread-77818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:37:24.219 [DEBUG] [Thread-77818] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:37:24.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:37:24.220 [DEBUG] [Thread-77818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:37:24.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:37:24.221 [DEBUG] [Thread-77818] [transport.py] [_log()] userauth is OK
2025-12-12T22:37:24.221 [DEBUG] [Thread-77818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:37:24.221 [DEBUG] [Thread-77818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:37:24.221 [DEBUG] [Thread-77818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:37:24.221 [DEBUG] [Thread-77818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:37:24.234 [INFO] [Thread-77818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:37:24.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:37:25.031 [DEBUG] [Thread-77818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:37:25.031 [DEBUG] [Thread-77818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:37:25.032 [DEBUG] [Thread-77818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:37:25.072 [DEBUG] [Thread-77818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:37:25.072 [DEBUG] [Thread-77818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:37:25.077 [DEBUG] [Thread-77818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:37:25.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:37:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:37:25.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:37:25.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:37:25.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:37:25.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:37:25.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:37:25.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:37:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:37:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.858780 -999.00   +9.80  46.74     90   +8.30 1 3 2 3 1     0    0 0.98 -17.11 ----- 39.7 46.7 302.0 56.2 11.2 -5.1 11.0 -6.2 10.6 -7.1 10.9 -4.7
2025-12-12T22:37:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:37:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:37:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.858780
2025-12-12T22:37:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:37:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:37:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:37:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:37:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:37:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:36:58', tmtdew=1.5, humidity=90.55, cloud=0.0, wind=47.11, temperature=9.96, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:36:38.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.5925000000000002, nan, nan, nan, nan, nan, nan, nan, 0.4195000000000002, nan, nan, nan, nan, nan, nan, 0.5562499999999986], zp_timestamp='2025-12-12T20:31:00')
2025-12-12T22:37:25.101 [DEBUG] [Thread-77818] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:37:25.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:37:25.195 [DEBUG] [Thread-77821] [transport.py] [_log()] starting thread (client mode): 0xf5771810
2025-12-12T22:37:25.195 [DEBUG] [Thread-77821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:37:25.210 [DEBUG] [Thread-77821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:37:25.210 [INFO] [Thread-77821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:37:25.217 [DEBUG] [Thread-77821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] client lang: <none>
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] server lang: <none>
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] kex follows: False
2025-12-12T22:37:25.218 [DEBUG] [Thread-77821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:37:25.219 [DEBUG] [Thread-77821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:37:25.219 [DEBUG] [Thread-77821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:37:25.219 [DEBUG] [Thread-77821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:37:25.219 [DEBUG] [Thread-77821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:37:25.219 [DEBUG] [Thread-77821] [transport.py] [_log()] Compression: none
2025-12-12T22:37:25.219 [DEBUG] [Thread-77821] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:37:25.276 [DEBUG] [Thread-77821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:37:25.277 [DEBUG] [Thread-77821] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:37:25.277 [DEBUG] [Thread-77821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:37:25.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:37:25.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:37:25.333 [DEBUG] [Thread-77821] [transport.py] [_log()] userauth is OK
2025-12-12T22:37:25.333 [DEBUG] [Thread-77821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:37:25.333 [DEBUG] [Thread-77821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:37:25.333 [DEBUG] [Thread-77821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:37:25.333 [DEBUG] [Thread-77821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:37:25.352 [INFO] [Thread-77821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:37:25.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:37:25.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:37:26.182 [DEBUG] [Thread-77821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:37:26.182 [DEBUG] [Thread-77821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:37:26.230 [DEBUG] [Thread-77821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:37:26.230 [DEBUG] [Thread-77821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:37:26.239 [DEBUG] [Thread-77821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:37:26.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:37:26.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:37:26.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:37:26.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:37:26.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:37:26.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:37:26.273 [DEBUG] [Thread-77821] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:37:33.493 [DEBUG] [Thread-77823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:39.430 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:39.431 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:48.540 [DEBUG] [Thread-77824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:37:56.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:37:56.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:37:56.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:37:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 37, 30), 1.51, 90.48, 0.0, 47.87, 9.94, 1, 2, 0, 2, 1, 0),)
2025-12-12T22:37:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:37:30
2025-12-12T22:37:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:37:57.312 [DEBUG] [Thread-77825] [transport.py] [_log()] starting thread (client mode): 0xf5772710
2025-12-12T22:37:57.312 [DEBUG] [Thread-77825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:37:57.332 [DEBUG] [Thread-77825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:37:57.332 [INFO] [Thread-77825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] client lang: <none>
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] server lang: <none>
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] kex follows: False
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] Compression: none
2025-12-12T22:37:57.335 [DEBUG] [Thread-77825] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:37:57.351 [DEBUG] [Thread-77825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:37:57.352 [DEBUG] [Thread-77825] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:37:57.352 [DEBUG] [Thread-77825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:37:57.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:37:57.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:37:57.354 [DEBUG] [Thread-77825] [transport.py] [_log()] userauth is OK
2025-12-12T22:37:57.354 [DEBUG] [Thread-77825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:37:57.354 [DEBUG] [Thread-77825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:37:57.354 [DEBUG] [Thread-77825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:37:57.354 [DEBUG] [Thread-77825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:37:57.371 [INFO] [Thread-77825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:37:57.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:37:57.987 [DEBUG] [Thread-77825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:37:57.987 [DEBUG] [Thread-77825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:37:57.987 [DEBUG] [Thread-77825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:37:58.028 [DEBUG] [Thread-77825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:37:58.028 [DEBUG] [Thread-77825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:37:58.031 [DEBUG] [Thread-77825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:37:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:37:58.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:37:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:37:58.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:37:58.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:37:58.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:37:58.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.859127 -999.00   +9.90  32.95     91   +8.50 1 3 2 3 1     0    0 0.97 -17.05 ----- 40.9 33.0 296.4 49.6 11.2 -2.7 11.0 -3.1 10.6 -3.0 10.8 -2.0
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.859127
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:37:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:37:30', tmtdew=1.51, humidity=90.48, cloud=0.0, wind=47.87, temperature=9.94, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:37:08.573', atlas_cloud=3, atlas_rain=1, zp_data=[1.8547499999999992, 1.1402500000000009, nan, nan, nan, nan, nan, nan, nan, 0.9500000000000002, 1.4762499999999994, nan, nan, nan, nan, nan, 1.1282499999999995, 1.2480000000000002, 1.9505, nan, nan, nan, nan, nan, 1.3644999999999996, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:37:58.054 [DEBUG] [Thread-77825] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:37:58.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:37:58.139 [DEBUG] [Thread-77828] [transport.py] [_log()] starting thread (client mode): 0xf5771d80
2025-12-12T22:37:58.139 [DEBUG] [Thread-77828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:37:58.154 [DEBUG] [Thread-77828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:37:58.154 [INFO] [Thread-77828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] client lang: <none>
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] server lang: <none>
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] kex follows: False
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] Compression: none
2025-12-12T22:37:58.162 [DEBUG] [Thread-77828] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:37:58.220 [DEBUG] [Thread-77828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:37:58.220 [DEBUG] [Thread-77828] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:37:58.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:37:58.220 [DEBUG] [Thread-77828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:37:58.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:37:58.277 [DEBUG] [Thread-77828] [transport.py] [_log()] userauth is OK
2025-12-12T22:37:58.277 [DEBUG] [Thread-77828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:37:58.277 [DEBUG] [Thread-77828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:37:58.277 [DEBUG] [Thread-77828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:37:58.277 [DEBUG] [Thread-77828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:37:58.292 [INFO] [Thread-77828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:37:58.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:37:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:37:59.126 [DEBUG] [Thread-77828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:37:59.126 [DEBUG] [Thread-77828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:37:59.174 [DEBUG] [Thread-77828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:37:59.174 [DEBUG] [Thread-77828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:37:59.182 [DEBUG] [Thread-77828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:37:59.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:37:59.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:37:59.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:37:59.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:37:59.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:37:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:37:59.213 [DEBUG] [Thread-77828] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:38:03.567 [DEBUG] [Thread-77830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:38:16.895 [DEBUG] [Thread-77831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:38:18.601 [DEBUG] [Thread-77832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:38:29.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:38:29.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:38:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:38:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 38, 2), 1.49, 90.63, 0.0, 43.7, 9.97, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:38:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:38:02
2025-12-12T22:38:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:38:30.194 [DEBUG] [Thread-77833] [transport.py] [_log()] starting thread (client mode): 0xf57ca920
2025-12-12T22:38:30.194 [DEBUG] [Thread-77833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:38:30.211 [DEBUG] [Thread-77833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:38:30.211 [INFO] [Thread-77833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] client lang: <none>
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] server lang: <none>
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] kex follows: False
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] Compression: none
2025-12-12T22:38:30.215 [DEBUG] [Thread-77833] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:38:30.233 [DEBUG] [Thread-77833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:38:30.233 [DEBUG] [Thread-77833] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:38:30.234 [DEBUG] [Thread-77833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:38:30.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:38:30.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:38:30.236 [DEBUG] [Thread-77833] [transport.py] [_log()] userauth is OK
2025-12-12T22:38:30.237 [DEBUG] [Thread-77833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:38:30.237 [DEBUG] [Thread-77833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:38:30.237 [DEBUG] [Thread-77833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:38:30.237 [DEBUG] [Thread-77833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:38:30.260 [INFO] [Thread-77833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:38:30.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:38:31.047 [DEBUG] [Thread-77833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:38:31.047 [DEBUG] [Thread-77833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:38:31.048 [DEBUG] [Thread-77833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:38:31.088 [DEBUG] [Thread-77833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:38:31.088 [DEBUG] [Thread-77833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:38:31.091 [DEBUG] [Thread-77833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:38:31.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:38:31.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:38:31.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:38:31.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:38:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:38:31.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:38:31.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:38:31.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:38:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:38:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.859474 -999.00   +9.80  36.78     91   +8.40 1 3 2 3 1     0    0 1.01 -16.44 Z.eS. 34.6 36.8 302.6 52.7 11.2 -2.7 11.0 -2.9 10.6 -2.3 10.9 -1.9
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.859474
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:38:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:38:02', tmtdew=1.49, humidity=90.63, cloud=0.0, wind=43.7, temperature=9.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:37:38.554', atlas_cloud=3, atlas_rain=1, zp_data=[1.8547499999999992, 1.1402500000000009, nan, nan, nan, nan, nan, nan, nan, 0.9500000000000002, 1.4762499999999994, nan, nan, nan, nan, nan, 1.1282499999999995, 1.2480000000000002, 1.9505, nan, nan, nan, nan, nan, 1.3644999999999996, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:38:31.110 [DEBUG] [Thread-77833] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:38:31.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:38:31.205 [DEBUG] [Thread-77836] [transport.py] [_log()] starting thread (client mode): 0xf57899c0
2025-12-12T22:38:31.205 [DEBUG] [Thread-77836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:38:31.220 [DEBUG] [Thread-77836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:38:31.221 [INFO] [Thread-77836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:38:31.228 [DEBUG] [Thread-77836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:38:31.228 [DEBUG] [Thread-77836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:38:31.228 [DEBUG] [Thread-77836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] client lang: <none>
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] server lang: <none>
2025-12-12T22:38:31.229 [DEBUG] [Thread-77836] [transport.py] [_log()] kex follows: False
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] Compression: none
2025-12-12T22:38:31.230 [DEBUG] [Thread-77836] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:38:31.285 [DEBUG] [Thread-77836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:38:31.286 [DEBUG] [Thread-77836] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:38:31.287 [DEBUG] [Thread-77836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:38:31.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:38:31.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:38:31.341 [DEBUG] [Thread-77836] [transport.py] [_log()] userauth is OK
2025-12-12T22:38:31.341 [DEBUG] [Thread-77836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:38:31.341 [DEBUG] [Thread-77836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:38:31.342 [DEBUG] [Thread-77836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:38:31.342 [DEBUG] [Thread-77836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:38:31.361 [INFO] [Thread-77836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:38:31.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:38:31.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:38:32.188 [DEBUG] [Thread-77836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:38:32.188 [DEBUG] [Thread-77836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:38:32.236 [DEBUG] [Thread-77836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:38:32.236 [DEBUG] [Thread-77836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:38:32.245 [DEBUG] [Thread-77836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:38:32.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:38:32.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:38:32.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:38:32.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:38:32.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:38:32.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:38:32.279 [DEBUG] [Thread-77836] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:38:33.632 [DEBUG] [Thread-77838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:38:39.634 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:38:39.636 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:38:48.667 [DEBUG] [Thread-77839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:02.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:39:02.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:39:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:39:02.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 38, 34), 1.45, 90.6, 0.0, 43.16, 9.97, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:39:02.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:38:34
2025-12-12T22:39:03.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:39:03.260 [DEBUG] [Thread-77840] [transport.py] [_log()] starting thread (client mode): 0xf57cbdc0
2025-12-12T22:39:03.260 [DEBUG] [Thread-77840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:39:03.280 [DEBUG] [Thread-77840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:39:03.281 [INFO] [Thread-77840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:39:03.283 [DEBUG] [Thread-77840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] client lang: <none>
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] server lang: <none>
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] kex follows: False
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] Compression: none
2025-12-12T22:39:03.284 [DEBUG] [Thread-77840] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:39:03.300 [DEBUG] [Thread-77840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:39:03.300 [DEBUG] [Thread-77840] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:39:03.301 [DEBUG] [Thread-77840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:39:03.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:39:03.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:39:03.303 [DEBUG] [Thread-77840] [transport.py] [_log()] userauth is OK
2025-12-12T22:39:03.303 [DEBUG] [Thread-77840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:39:03.303 [DEBUG] [Thread-77840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:39:03.303 [DEBUG] [Thread-77840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:39:03.303 [DEBUG] [Thread-77840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:39:03.339 [INFO] [Thread-77840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:39:03.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:39:03.701 [DEBUG] [Thread-77842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:03.971 [DEBUG] [Thread-77840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:39:03.972 [DEBUG] [Thread-77840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:39:03.972 [DEBUG] [Thread-77840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:39:04.014 [DEBUG] [Thread-77840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:39:04.014 [DEBUG] [Thread-77840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:39:04.017 [DEBUG] [Thread-77840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:39:04.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:39:04.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:39:04.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:39:04.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:39:04.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:39:04.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:39:04.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:39:04.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:39:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:39:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.859821 -999.00   +9.90  34.03     91   +8.50 1 3 2 3 1     0    0 0.97 -16.13 Z.eS. 27.6 34.0 309.2 41.8 11.3 -2.1 11.1 -1.9 10.6 -1.7 10.9 -1.5
2025-12-12T22:39:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:39:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:39:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.859821
2025-12-12T22:39:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:39:04.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:39:04.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:39:04.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:39:04.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:39:04.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:38:34', tmtdew=1.45, humidity=90.6, cloud=0.0, wind=43.16, temperature=9.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:38:08.534', atlas_cloud=3, atlas_rain=1, zp_data=[1.8547499999999992, 1.1402500000000009, nan, nan, nan, nan, nan, nan, nan, 0.9500000000000002, 1.4762499999999994, nan, nan, nan, nan, nan, 1.1282499999999995, 1.2480000000000002, 1.9505, nan, nan, nan, nan, nan, 1.3644999999999996, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:39:04.046 [DEBUG] [Thread-77840] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:39:04.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:39:04.141 [DEBUG] [Thread-77844] [transport.py] [_log()] starting thread (client mode): 0xf57c8040
2025-12-12T22:39:04.142 [DEBUG] [Thread-77844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:39:04.157 [DEBUG] [Thread-77844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:39:04.157 [INFO] [Thread-77844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] client lang: <none>
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] server lang: <none>
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] kex follows: False
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:39:04.165 [DEBUG] [Thread-77844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:39:04.166 [DEBUG] [Thread-77844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:39:04.166 [DEBUG] [Thread-77844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:39:04.166 [DEBUG] [Thread-77844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:39:04.166 [DEBUG] [Thread-77844] [transport.py] [_log()] Compression: none
2025-12-12T22:39:04.166 [DEBUG] [Thread-77844] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:39:04.221 [DEBUG] [Thread-77844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:39:04.221 [DEBUG] [Thread-77844] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:39:04.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:39:04.222 [DEBUG] [Thread-77844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:39:04.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:39:04.278 [DEBUG] [Thread-77844] [transport.py] [_log()] userauth is OK
2025-12-12T22:39:04.278 [DEBUG] [Thread-77844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:39:04.278 [DEBUG] [Thread-77844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:39:04.278 [DEBUG] [Thread-77844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:39:04.279 [DEBUG] [Thread-77844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:39:04.297 [INFO] [Thread-77844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:39:04.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:39:04.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:39:05.192 [DEBUG] [Thread-77844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:39:05.192 [DEBUG] [Thread-77844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:39:05.243 [DEBUG] [Thread-77844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:39:05.243 [DEBUG] [Thread-77844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:39:05.256 [DEBUG] [Thread-77844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:39:05.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:39:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:39:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:39:05.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:39:05.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:39:05.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:39:05.304 [DEBUG] [Thread-77844] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:39:16.983 [DEBUG] [Thread-77846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:18.727 [DEBUG] [Thread-77847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:33.782 [DEBUG] [Thread-77848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:39:35.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:39:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:39:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 39, 6), 1.45, 90.58, 0.0, 42.68, 9.91, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:39:36.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:39:06
2025-12-12T22:39:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:39:36.293 [DEBUG] [Thread-77849] [transport.py] [_log()] starting thread (client mode): 0xf57cbb80
2025-12-12T22:39:36.293 [DEBUG] [Thread-77849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:39:36.313 [DEBUG] [Thread-77849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:39:36.313 [INFO] [Thread-77849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] client lang: <none>
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] server lang: <none>
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] kex follows: False
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:39:36.315 [DEBUG] [Thread-77849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:39:36.316 [DEBUG] [Thread-77849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:39:36.316 [DEBUG] [Thread-77849] [transport.py] [_log()] Compression: none
2025-12-12T22:39:36.316 [DEBUG] [Thread-77849] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:39:36.334 [DEBUG] [Thread-77849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:39:36.335 [DEBUG] [Thread-77849] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:39:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:39:36.336 [DEBUG] [Thread-77849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:39:36.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:39:36.339 [DEBUG] [Thread-77849] [transport.py] [_log()] userauth is OK
2025-12-12T22:39:36.339 [DEBUG] [Thread-77849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:39:36.339 [DEBUG] [Thread-77849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:39:36.339 [DEBUG] [Thread-77849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:39:36.339 [DEBUG] [Thread-77849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:39:36.354 [INFO] [Thread-77849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:39:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:39:37.119 [DEBUG] [Thread-77849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:39:37.119 [DEBUG] [Thread-77849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:39:37.120 [DEBUG] [Thread-77849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:39:37.160 [DEBUG] [Thread-77849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:39:37.160 [DEBUG] [Thread-77849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:39:37.163 [DEBUG] [Thread-77849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:39:37.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:39:37.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:39:37.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:39:37.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:39:37.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:39:37.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:39:37.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:39:37.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:39:37.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:39:37.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.860516 -999.00   +9.90  33.37     90   +8.50 1 3 2 3 1     0    0 0.97 -16.09 ----- 26.2 33.4 302.0 44.2 11.3 -2.0 11.1 -1.9 10.7 -1.8 11.0 -1.5
2025-12-12T22:39:37.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:39:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:39:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.860516
2025-12-12T22:39:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:39:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:39:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:39:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:39:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:39:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:39:06', tmtdew=1.45, humidity=90.58, cloud=0.0, wind=42.68, temperature=9.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:39:08.582', atlas_cloud=3, atlas_rain=1, zp_data=[1.8547499999999992, 1.1402500000000009, nan, nan, nan, nan, nan, nan, nan, 0.9500000000000002, 1.4762499999999994, nan, nan, nan, nan, nan, 1.1282499999999995, 1.2480000000000002, 1.9505, nan, nan, nan, nan, nan, 1.3644999999999996, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:39:37.192 [DEBUG] [Thread-77849] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:39:37.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:39:37.283 [DEBUG] [Thread-77852] [transport.py] [_log()] starting thread (client mode): 0xf57898d0
2025-12-12T22:39:37.284 [DEBUG] [Thread-77852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:39:37.298 [DEBUG] [Thread-77852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:39:37.298 [INFO] [Thread-77852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:37.306 [DEBUG] [Thread-77852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] client lang: <none>
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] server lang: <none>
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] kex follows: False
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] Compression: none
2025-12-12T22:39:37.307 [DEBUG] [Thread-77852] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:39:37.365 [DEBUG] [Thread-77852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:39:37.366 [DEBUG] [Thread-77852] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:39:37.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:39:37.366 [DEBUG] [Thread-77852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:39:37.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:39:37.421 [DEBUG] [Thread-77852] [transport.py] [_log()] userauth is OK
2025-12-12T22:39:37.421 [DEBUG] [Thread-77852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:39:37.421 [DEBUG] [Thread-77852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:39:37.422 [DEBUG] [Thread-77852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:39:37.422 [DEBUG] [Thread-77852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:39:37.440 [INFO] [Thread-77852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:39:37.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:39:37.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:39:38.280 [DEBUG] [Thread-77852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:39:38.281 [DEBUG] [Thread-77852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:39:38.329 [DEBUG] [Thread-77852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:39:38.329 [DEBUG] [Thread-77852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:39:38.338 [DEBUG] [Thread-77852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:39:38.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:39:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:39: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
2025-12-12T22:39:38.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:39:38.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:39:38.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:39:38.373 [DEBUG] [Thread-77852] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:39:39.840 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:39.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:39:48.812 [DEBUG] [Thread-77854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:03.849 [DEBUG] [Thread-77855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:08.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:40:08.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:40:08.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:40:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 39, 38), 1.45, 90.6, 0.0, 37.53, 9.91, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:40:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:39:38
2025-12-12T22:40:09.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:40:09.358 [DEBUG] [Thread-77856] [transport.py] [_log()] starting thread (client mode): 0xf5789930
2025-12-12T22:40:09.358 [DEBUG] [Thread-77856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:40:09.377 [DEBUG] [Thread-77856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:40:09.377 [INFO] [Thread-77856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:40:09.380 [DEBUG] [Thread-77856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] client lang: <none>
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] server lang: <none>
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] kex follows: False
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] Compression: none
2025-12-12T22:40:09.381 [DEBUG] [Thread-77856] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:40:09.398 [DEBUG] [Thread-77856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:40:09.399 [DEBUG] [Thread-77856] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:40:09.399 [DEBUG] [Thread-77856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:40:09.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:40:09.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:40:09.401 [DEBUG] [Thread-77856] [transport.py] [_log()] userauth is OK
2025-12-12T22:40:09.401 [DEBUG] [Thread-77856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:40:09.401 [DEBUG] [Thread-77856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:40:09.401 [DEBUG] [Thread-77856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:40:09.401 [DEBUG] [Thread-77856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:40:09.425 [INFO] [Thread-77856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:40:09.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:40:10.203 [DEBUG] [Thread-77856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:40:10.203 [DEBUG] [Thread-77856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:40:10.203 [DEBUG] [Thread-77856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:40:10.244 [DEBUG] [Thread-77856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:40:10.244 [DEBUG] [Thread-77856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:40:10.247 [DEBUG] [Thread-77856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:40:10.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:40:10.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:40:10.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:40:10.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:40:10.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:40:10.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:40:10.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:40:10.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:40:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:40:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.860863 -999.00  +10.00  38.16     90   +8.50 1 3 2 3 1     0    0 1.01 -14.71 ----- 39.6 38.2 313.2 45.7 11.3 -2.3 11.1 -2.3 10.7 -1.6 11.0 -1.4
2025-12-12T22:40:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:40:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:40:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.860863
2025-12-12T22:40:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:40:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:40:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:40:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:40:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:40:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:39:38', tmtdew=1.45, humidity=90.6, cloud=0.0, wind=37.53, temperature=9.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:39:38.563', atlas_cloud=3, atlas_rain=1, zp_data=[1.8547499999999992, 1.1402500000000009, nan, nan, nan, nan, nan, nan, nan, 0.9500000000000002, 1.4762499999999994, nan, nan, nan, nan, nan, 1.1282499999999995, 1.2480000000000002, 1.9505, nan, nan, nan, nan, nan, 1.3644999999999996, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:40:10.275 [DEBUG] [Thread-77856] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:40:10.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:40:10.370 [DEBUG] [Thread-77859] [transport.py] [_log()] starting thread (client mode): 0xf578a980
2025-12-12T22:40:10.371 [DEBUG] [Thread-77859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:40:10.385 [DEBUG] [Thread-77859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:40:10.386 [INFO] [Thread-77859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:40:10.393 [DEBUG] [Thread-77859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:40:10.393 [DEBUG] [Thread-77859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:40:10.393 [DEBUG] [Thread-77859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:40:10.393 [DEBUG] [Thread-77859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] client lang: <none>
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] server lang: <none>
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] kex follows: False
2025-12-12T22:40:10.394 [DEBUG] [Thread-77859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:40:10.395 [DEBUG] [Thread-77859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:40:10.395 [DEBUG] [Thread-77859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:40:10.395 [DEBUG] [Thread-77859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:40:10.395 [DEBUG] [Thread-77859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:40:10.395 [DEBUG] [Thread-77859] [transport.py] [_log()] Compression: none
2025-12-12T22:40:10.395 [DEBUG] [Thread-77859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:40:10.453 [DEBUG] [Thread-77859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:40:10.453 [DEBUG] [Thread-77859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:40:10.453 [DEBUG] [Thread-77859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:40:10.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:40:10.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:40:10.509 [DEBUG] [Thread-77859] [transport.py] [_log()] userauth is OK
2025-12-12T22:40:10.509 [DEBUG] [Thread-77859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:40:10.509 [DEBUG] [Thread-77859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:40:10.509 [DEBUG] [Thread-77859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:40:10.510 [DEBUG] [Thread-77859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:40:10.529 [INFO] [Thread-77859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:40:10.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:40:10.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:40:11.388 [DEBUG] [Thread-77859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:40:11.388 [DEBUG] [Thread-77859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:40:11.436 [DEBUG] [Thread-77859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:40:11.436 [DEBUG] [Thread-77859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:40:11.445 [DEBUG] [Thread-77859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:40:11.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:40:11.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:40:11.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:40:11.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:40:11.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:40:11.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:40:11.479 [DEBUG] [Thread-77859] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:40:17.061 [DEBUG] [Thread-77861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:18.878 [DEBUG] [Thread-77862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:33.918 [DEBUG] [Thread-77863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:40.049 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:40.050 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:40:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:40:41.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:40:41.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:40:42.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 40, 11), 1.43, 90.67, 0.0, 42.89, 9.96, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:40:42.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:40:11
2025-12-12T22:40:42.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:40:42.470 [DEBUG] [Thread-77864] [transport.py] [_log()] starting thread (client mode): 0xf57720b0
2025-12-12T22:40:42.470 [DEBUG] [Thread-77864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:40:42.493 [DEBUG] [Thread-77864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:40:42.494 [INFO] [Thread-77864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:40:42.497 [DEBUG] [Thread-77864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] client lang: <none>
2025-12-12T22:40:42.498 [DEBUG] [Thread-77864] [transport.py] [_log()] server lang: <none>
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] kex follows: False
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] Compression: none
2025-12-12T22:40:42.499 [DEBUG] [Thread-77864] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:40:42.516 [DEBUG] [Thread-77864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:40:42.517 [DEBUG] [Thread-77864] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:40:42.517 [DEBUG] [Thread-77864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:40:42.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:40:42.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:40:42.520 [DEBUG] [Thread-77864] [transport.py] [_log()] userauth is OK
2025-12-12T22:40:42.521 [DEBUG] [Thread-77864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:40:42.521 [DEBUG] [Thread-77864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:40:42.521 [DEBUG] [Thread-77864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:40:42.521 [DEBUG] [Thread-77864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:40:42.546 [INFO] [Thread-77864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:40:42.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:40:43.320 [DEBUG] [Thread-77864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:40:43.320 [DEBUG] [Thread-77864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:40:43.320 [DEBUG] [Thread-77864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:40:43.361 [DEBUG] [Thread-77864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:40:43.362 [DEBUG] [Thread-77864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:40:43.365 [DEBUG] [Thread-77864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:40:43.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:40:43.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:40:43.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:40:43.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:40:43.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:40:43.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:40:43.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:40:43.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:40:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:40:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.861210 -999.00  +10.00  35.11     91   +8.60 1 3 2 3 1     0    0 1.05 -13.15 ----- 37.3 35.1 308.4 41.4 11.3 -4.6 11.1 -5.8 10.7 -3.6 11.0 -2.7
2025-12-12T22:40:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:40:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:40:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.861210
2025-12-12T22:40:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:40:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:40:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:40:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:40:43.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:40:43.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:40:11', tmtdew=1.43, humidity=90.67, cloud=0.0, wind=42.89, temperature=9.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:40:08.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:40:43.393 [DEBUG] [Thread-77864] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:40:43.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:40:43.489 [DEBUG] [Thread-77867] [transport.py] [_log()] starting thread (client mode): 0xf572d0f0
2025-12-12T22:40:43.489 [DEBUG] [Thread-77867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:40:43.503 [DEBUG] [Thread-77867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:40:43.504 [INFO] [Thread-77867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:40:43.511 [DEBUG] [Thread-77867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:40:43.511 [DEBUG] [Thread-77867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:40:43.511 [DEBUG] [Thread-77867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] client lang: <none>
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] server lang: <none>
2025-12-12T22:40:43.512 [DEBUG] [Thread-77867] [transport.py] [_log()] kex follows: False
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] Compression: none
2025-12-12T22:40:43.513 [DEBUG] [Thread-77867] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:40:43.569 [DEBUG] [Thread-77867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:40:43.569 [DEBUG] [Thread-77867] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:40:43.570 [DEBUG] [Thread-77867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:40:43.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:40:43.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:40:43.625 [DEBUG] [Thread-77867] [transport.py] [_log()] userauth is OK
2025-12-12T22:40:43.625 [DEBUG] [Thread-77867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:40:43.625 [DEBUG] [Thread-77867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:40:43.625 [DEBUG] [Thread-77867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:40:43.625 [DEBUG] [Thread-77867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:40:43.645 [INFO] [Thread-77867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:40:43.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:40:43.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:40:44.468 [DEBUG] [Thread-77867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:40:44.468 [DEBUG] [Thread-77867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:40:44.515 [DEBUG] [Thread-77867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:40:44.516 [DEBUG] [Thread-77867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:40:44.524 [DEBUG] [Thread-77867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:40:44.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:40:44.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:40:44.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:40:44.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:40:44.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:40:44.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:40:44.555 [DEBUG] [Thread-77867] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:40:48.946 [DEBUG] [Thread-77869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:03.991 [DEBUG] [Thread-77870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:41:14.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:41:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:41:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 40, 43), 1.44, 90.6, 0.0, 42.8, 9.88, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:41:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:40:43
2025-12-12T22:41:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:41:15.589 [DEBUG] [Thread-77871] [transport.py] [_log()] starting thread (client mode): 0xf572ecb0
2025-12-12T22:41:15.589 [DEBUG] [Thread-77871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:41:15.609 [DEBUG] [Thread-77871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:41:15.609 [INFO] [Thread-77871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] client lang: <none>
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] server lang: <none>
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] kex follows: False
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:41:15.612 [DEBUG] [Thread-77871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:41:15.613 [DEBUG] [Thread-77871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:41:15.613 [DEBUG] [Thread-77871] [transport.py] [_log()] Compression: none
2025-12-12T22:41:15.613 [DEBUG] [Thread-77871] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:41:15.626 [DEBUG] [Thread-77871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:41:15.626 [DEBUG] [Thread-77871] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:41:15.626 [DEBUG] [Thread-77871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:41:15.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:41:15.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:41:15.627 [DEBUG] [Thread-77871] [transport.py] [_log()] userauth is OK
2025-12-12T22:41:15.627 [DEBUG] [Thread-77871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:41:15.627 [DEBUG] [Thread-77871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:41:15.627 [DEBUG] [Thread-77871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:41:15.627 [DEBUG] [Thread-77871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:41:15.643 [INFO] [Thread-77871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:41:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:41:16.282 [DEBUG] [Thread-77871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:41:16.282 [DEBUG] [Thread-77871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:41:16.282 [DEBUG] [Thread-77871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:41:16.323 [DEBUG] [Thread-77871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:41:16.323 [DEBUG] [Thread-77871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:41:16.325 [DEBUG] [Thread-77871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:41:16.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:41:16.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:41:16.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:41:16.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:41:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:41:16.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:41:16.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:41:16.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:41:16.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:41:16.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.861558 -999.00   +9.90  32.95     90   +8.40 1 3 2 3 1     0    0 1.06 -12.61 ----- 32.0 33.0 299.2 52.4 11.3 -4.3 11.1 -5.7 10.7 -4.4 11.0 -3.1
2025-12-12T22:41:16.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:41:16.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:41:16.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.861558
2025-12-12T22:41:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:41:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:41:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:41:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:41:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:41:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:40:43', tmtdew=1.44, humidity=90.6, cloud=0.0, wind=42.8, temperature=9.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:40:38.611', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:41:16.342 [DEBUG] [Thread-77871] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:41:16.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:41:16.433 [DEBUG] [Thread-77874] [transport.py] [_log()] starting thread (client mode): 0xf578add0
2025-12-12T22:41:16.433 [DEBUG] [Thread-77874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:41:16.452 [DEBUG] [Thread-77874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:41:16.452 [INFO] [Thread-77874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:41:16.460 [DEBUG] [Thread-77874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] client lang: <none>
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] server lang: <none>
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] kex follows: False
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] Compression: none
2025-12-12T22:41:16.461 [DEBUG] [Thread-77874] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:41:16.516 [DEBUG] [Thread-77874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:41:16.516 [DEBUG] [Thread-77874] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:41:16.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:41:16.516 [DEBUG] [Thread-77874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:41:16.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:41:16.573 [DEBUG] [Thread-77874] [transport.py] [_log()] userauth is OK
2025-12-12T22:41:16.573 [DEBUG] [Thread-77874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:41:16.573 [DEBUG] [Thread-77874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:41:16.573 [DEBUG] [Thread-77874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:41:16.573 [DEBUG] [Thread-77874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:41:16.590 [INFO] [Thread-77874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:41:16.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:41:16.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:41:17.137 [DEBUG] [Thread-77876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:17.397 [DEBUG] [Thread-77874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:41:17.397 [DEBUG] [Thread-77874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:41:17.446 [DEBUG] [Thread-77874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:41:17.446 [DEBUG] [Thread-77874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:41:17.454 [DEBUG] [Thread-77874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:41:17.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:41: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')
2025-12-12T22:41:17.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:41:17.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:41:17.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:41:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:41:17.486 [DEBUG] [Thread-77874] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:41:19.024 [DEBUG] [Thread-77877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:34.080 [DEBUG] [Thread-77878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:40.256 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:40.258 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:41:47.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:41:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:41:48.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 41, 15), 1.44, 90.65, 0.0, 40.1, 9.89, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:41:48.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:41:15
2025-12-12T22:41:48.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:41:48.506 [DEBUG] [Thread-77879] [transport.py] [_log()] starting thread (client mode): 0xf5772380
2025-12-12T22:41:48.506 [DEBUG] [Thread-77879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:41:48.526 [DEBUG] [Thread-77879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:41:48.526 [INFO] [Thread-77879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:48.529 [DEBUG] [Thread-77879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] client lang: <none>
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] server lang: <none>
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] kex follows: False
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] Compression: none
2025-12-12T22:41:48.530 [DEBUG] [Thread-77879] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:41:48.545 [DEBUG] [Thread-77879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:41:48.546 [DEBUG] [Thread-77879] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:41:48.546 [DEBUG] [Thread-77879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:41:48.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:41:48.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:41:48.547 [DEBUG] [Thread-77879] [transport.py] [_log()] userauth is OK
2025-12-12T22:41:48.547 [DEBUG] [Thread-77879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:41:48.547 [DEBUG] [Thread-77879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:41:48.547 [DEBUG] [Thread-77879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:41:48.547 [DEBUG] [Thread-77879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:41:48.556 [INFO] [Thread-77879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:41:48.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:41:49.108 [DEBUG] [Thread-77881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:41:49.308 [DEBUG] [Thread-77879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:41:49.308 [DEBUG] [Thread-77879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:41:49.308 [DEBUG] [Thread-77879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:41:49.350 [DEBUG] [Thread-77879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:41:49.350 [DEBUG] [Thread-77879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:41:49.352 [DEBUG] [Thread-77879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:41:49.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:41:49.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:41:49.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:41:49.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:41:49.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:41:49.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:41:49.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.861905 -999.00   +9.80  39.54     91   +8.40 1 3 2 3 1     0    0 1.11 -11.53 ----- 40.4 39.5 298.6 50.6 11.3 -4.3 11.0 -3.4 10.7 -2.8 10.9 -2.0
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.861905
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:41:49.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:41:15', tmtdew=1.44, humidity=90.65, cloud=0.0, wind=40.1, temperature=9.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:41:08.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:41:49.371 [DEBUG] [Thread-77879] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:41:49.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:41:49.461 [DEBUG] [Thread-77883] [transport.py] [_log()] starting thread (client mode): 0xf5789210
2025-12-12T22:41:49.461 [DEBUG] [Thread-77883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:41:49.475 [DEBUG] [Thread-77883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:41:49.475 [INFO] [Thread-77883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] client lang: <none>
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] server lang: <none>
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] kex follows: False
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] Compression: none
2025-12-12T22:41:49.483 [DEBUG] [Thread-77883] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:41:49.540 [DEBUG] [Thread-77883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:41:49.540 [DEBUG] [Thread-77883] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:41:49.540 [DEBUG] [Thread-77883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:41:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:41:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:41:49.597 [DEBUG] [Thread-77883] [transport.py] [_log()] userauth is OK
2025-12-12T22:41:49.597 [DEBUG] [Thread-77883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:41:49.597 [DEBUG] [Thread-77883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:41:49.597 [DEBUG] [Thread-77883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:41:49.597 [DEBUG] [Thread-77883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:41:49.611 [INFO] [Thread-77883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:41:49.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:41:49.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:41:50.421 [DEBUG] [Thread-77883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:41:50.422 [DEBUG] [Thread-77883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:41:50.469 [DEBUG] [Thread-77883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:41:50.469 [DEBUG] [Thread-77883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:41:50.478 [DEBUG] [Thread-77883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:41:50.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:41:50.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:41:50.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:41:50.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:41:50.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:41:50.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:41:50.509 [DEBUG] [Thread-77883] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:42:04.137 [DEBUG] [Thread-77885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:17.212 [DEBUG] [Thread-77886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:19.192 [DEBUG] [Thread-77887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:42:20.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:42:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:42:21.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 41, 47), 1.43, 90.68, 0.0, 35.45, 9.83, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:42:21.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:41:47
2025-12-12T22:42:21.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:42:21.538 [DEBUG] [Thread-77888] [transport.py] [_log()] starting thread (client mode): 0xf572cac0
2025-12-12T22:42:21.538 [DEBUG] [Thread-77888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:42:21.559 [DEBUG] [Thread-77888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:42:21.559 [INFO] [Thread-77888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:42:21.562 [DEBUG] [Thread-77888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] client lang: <none>
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] server lang: <none>
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] kex follows: False
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] Compression: none
2025-12-12T22:42:21.563 [DEBUG] [Thread-77888] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:42:21.577 [DEBUG] [Thread-77888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:42:21.577 [DEBUG] [Thread-77888] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:42:21.578 [DEBUG] [Thread-77888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:42:21.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:42:21.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:42:21.578 [DEBUG] [Thread-77888] [transport.py] [_log()] userauth is OK
2025-12-12T22:42:21.579 [DEBUG] [Thread-77888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:42:21.579 [DEBUG] [Thread-77888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:42:21.579 [DEBUG] [Thread-77888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:42:21.579 [DEBUG] [Thread-77888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:42:21.588 [INFO] [Thread-77888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:42:21.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:42:22.229 [DEBUG] [Thread-77888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:42:22.230 [DEBUG] [Thread-77888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:42:22.230 [DEBUG] [Thread-77888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:42:22.271 [DEBUG] [Thread-77888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:42:22.271 [DEBUG] [Thread-77888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:42:22.274 [DEBUG] [Thread-77888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:42:22.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:42:22.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:42:22.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:42:22.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:42:22.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:42:22.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:42:22.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:42:22.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:42:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:42:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.862252 -999.00   +9.80  40.67     90   +8.30 1 3 2 3 1     0    0 1.13 -10.12 ..ES. 35.7 40.7 291.8 52.7 11.3 -3.0 11.0 -9.6 10.7 -7.1 10.9 -4.9
2025-12-12T22:42:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:42:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:42:22.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.862252
2025-12-12T22:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:42:22.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:41:47', tmtdew=1.43, humidity=90.68, cloud=0.0, wind=35.45, temperature=9.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:41:38.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:42:22.299 [DEBUG] [Thread-77888] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:42:22.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:42:22.398 [DEBUG] [Thread-77891] [transport.py] [_log()] starting thread (client mode): 0xf572dbd0
2025-12-12T22:42:22.398 [DEBUG] [Thread-77891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:42:22.412 [DEBUG] [Thread-77891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:42:22.412 [INFO] [Thread-77891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:42:22.420 [DEBUG] [Thread-77891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:42:22.420 [DEBUG] [Thread-77891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] client lang: <none>
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] server lang: <none>
2025-12-12T22:42:22.421 [DEBUG] [Thread-77891] [transport.py] [_log()] kex follows: False
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] Compression: none
2025-12-12T22:42:22.422 [DEBUG] [Thread-77891] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:42:22.477 [DEBUG] [Thread-77891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:42:22.478 [DEBUG] [Thread-77891] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:42:22.478 [DEBUG] [Thread-77891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:42:22.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:42:22.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:42:22.538 [DEBUG] [Thread-77891] [transport.py] [_log()] userauth is OK
2025-12-12T22:42:22.538 [DEBUG] [Thread-77891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:42:22.538 [DEBUG] [Thread-77891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:42:22.539 [DEBUG] [Thread-77891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:42:22.539 [DEBUG] [Thread-77891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:42:22.562 [INFO] [Thread-77891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:42:22.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:42:22.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:42:23.392 [DEBUG] [Thread-77891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:42:23.392 [DEBUG] [Thread-77891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:42:23.445 [DEBUG] [Thread-77891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:42:23.445 [DEBUG] [Thread-77891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:42:23.454 [DEBUG] [Thread-77891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:42:23.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:42:23.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:42:23.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:42:23.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:42:23.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:42:23.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:42:23.489 [DEBUG] [Thread-77891] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:42:34.221 [DEBUG] [Thread-77893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:40.463 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:40.464 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:49.266 [DEBUG] [Thread-77894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:42:53.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:42:53.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:42:53.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:42:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 42, 19), 1.43, 90.71, 0.0, 34.58, 9.91, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:42:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:42:19
2025-12-12T22:42:54.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:42:54.499 [DEBUG] [Thread-77895] [transport.py] [_log()] starting thread (client mode): 0xf572f040
2025-12-12T22:42:54.499 [DEBUG] [Thread-77895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:42:54.519 [DEBUG] [Thread-77895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:42:54.520 [INFO] [Thread-77895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] client lang: <none>
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] server lang: <none>
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] kex follows: False
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:42:54.523 [DEBUG] [Thread-77895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:42:54.524 [DEBUG] [Thread-77895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:42:54.524 [DEBUG] [Thread-77895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:42:54.524 [DEBUG] [Thread-77895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:42:54.524 [DEBUG] [Thread-77895] [transport.py] [_log()] Compression: none
2025-12-12T22:42:54.524 [DEBUG] [Thread-77895] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:42:54.541 [DEBUG] [Thread-77895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:42:54.541 [DEBUG] [Thread-77895] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:42:54.542 [DEBUG] [Thread-77895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:42:54.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:42:54.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:42:54.544 [DEBUG] [Thread-77895] [transport.py] [_log()] userauth is OK
2025-12-12T22:42:54.544 [DEBUG] [Thread-77895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:42:54.544 [DEBUG] [Thread-77895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:42:54.545 [DEBUG] [Thread-77895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:42:54.545 [DEBUG] [Thread-77895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:42:54.558 [INFO] [Thread-77895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:42:54.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:42:55.331 [DEBUG] [Thread-77895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:42:55.331 [DEBUG] [Thread-77895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:42:55.331 [DEBUG] [Thread-77895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:42:55.372 [DEBUG] [Thread-77895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:42:55.372 [DEBUG] [Thread-77895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:42:55.374 [DEBUG] [Thread-77895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:42:55.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:42:55.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:42:55.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:42:55.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:42:55.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:42:55.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:42:55.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:42:55.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:42:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:42:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.862599 -999.00   +9.60  49.41     90   +8.10 1 3 2 3 1     0    0 1.20 -8.46 ..ES. 40.1 49.4 297.6 53.1 11.3 -7.7 11.0 -7.9 10.6 -6.1 10.9 -4.5
2025-12-12T22:42:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:42:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:42:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.862599
2025-12-12T22:42:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:42:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:42:19', tmtdew=1.43, humidity=90.71, cloud=0.0, wind=34.58, temperature=9.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:42:08.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:42:55.403 [DEBUG] [Thread-77895] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:42:55.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:42:55.504 [DEBUG] [Thread-77898] [transport.py] [_log()] starting thread (client mode): 0xf572ead0
2025-12-12T22:42:55.504 [DEBUG] [Thread-77898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:42:55.519 [DEBUG] [Thread-77898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:42:55.519 [INFO] [Thread-77898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:42:55.526 [DEBUG] [Thread-77898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] client lang: <none>
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] server lang: <none>
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] kex follows: False
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] Compression: none
2025-12-12T22:42:55.527 [DEBUG] [Thread-77898] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:42:55.585 [DEBUG] [Thread-77898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:42:55.585 [DEBUG] [Thread-77898] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:42:55.586 [DEBUG] [Thread-77898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:42:55.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:42:55.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:42:55.641 [DEBUG] [Thread-77898] [transport.py] [_log()] userauth is OK
2025-12-12T22:42:55.642 [DEBUG] [Thread-77898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:42:55.642 [DEBUG] [Thread-77898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:42:55.642 [DEBUG] [Thread-77898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:42:55.642 [DEBUG] [Thread-77898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:42:55.661 [INFO] [Thread-77898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:42:55.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:42:55.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:42:56.464 [DEBUG] [Thread-77898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:42:56.464 [DEBUG] [Thread-77898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:42:56.513 [DEBUG] [Thread-77898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:42:56.513 [DEBUG] [Thread-77898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:42:56.522 [DEBUG] [Thread-77898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:42:56.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:42:56.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:42:56.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:42:56.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:42:56.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:42:56.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:42:56.556 [DEBUG] [Thread-77898] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:43:04.296 [DEBUG] [Thread-77900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:17.291 [DEBUG] [Thread-77901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:19.345 [DEBUG] [Thread-77902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:26.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:43:26.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:43:26.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:43:27.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 43, 23), 1.48, 90.67, 0.0, 31.6, 9.86, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:43:27.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:43:23
2025-12-12T22:43:27.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:43:27.542 [DEBUG] [Thread-77903] [transport.py] [_log()] starting thread (client mode): 0xf572f8e0
2025-12-12T22:43:27.542 [DEBUG] [Thread-77903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:43:27.563 [DEBUG] [Thread-77903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:43:27.563 [INFO] [Thread-77903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:43:27.565 [DEBUG] [Thread-77903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:43:27.565 [DEBUG] [Thread-77903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:43:27.565 [DEBUG] [Thread-77903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] client lang: <none>
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] server lang: <none>
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] kex follows: False
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] Compression: none
2025-12-12T22:43:27.566 [DEBUG] [Thread-77903] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:43:27.585 [DEBUG] [Thread-77903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:43:27.585 [DEBUG] [Thread-77903] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:43:27.586 [DEBUG] [Thread-77903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:43:27.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:43:27.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:43:27.588 [DEBUG] [Thread-77903] [transport.py] [_log()] userauth is OK
2025-12-12T22:43:27.588 [DEBUG] [Thread-77903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:43:27.588 [DEBUG] [Thread-77903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:43:27.588 [DEBUG] [Thread-77903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:43:27.588 [DEBUG] [Thread-77903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:43:27.612 [INFO] [Thread-77903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:43:27.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:43:28.247 [DEBUG] [Thread-77903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:43:28.247 [DEBUG] [Thread-77903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:43:28.247 [DEBUG] [Thread-77903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:43:28.288 [DEBUG] [Thread-77903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:43:28.288 [DEBUG] [Thread-77903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:43:28.291 [DEBUG] [Thread-77903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:43:28.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:43:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:43:28.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:43:28.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:43:28.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:43:28.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:43:28.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:43:28.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:43:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:43:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.862946 -999.00   +9.60  38.51     90   +8.20 1 3 2 3 1     0    0 1.21 -6.74 ..ES. 41.4 38.5 300.8 50.9 11.2 -5.8 11.0 -2.9 10.6 -2.8 10.9 -2.0
2025-12-12T22:43:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:43:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:43:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.862946
2025-12-12T22:43:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:43:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:43:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:43:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:43:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:43:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:43:23', tmtdew=1.48, humidity=90.67, cloud=0.0, wind=31.6, temperature=9.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:42:38.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:37:00')
2025-12-12T22:43:28.318 [DEBUG] [Thread-77903] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:43:28.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:43:28.414 [DEBUG] [Thread-77906] [transport.py] [_log()] starting thread (client mode): 0xf572d720
2025-12-12T22:43:28.414 [DEBUG] [Thread-77906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:43:28.429 [DEBUG] [Thread-77906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:43:28.429 [INFO] [Thread-77906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:43:28.437 [DEBUG] [Thread-77906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] client lang: <none>
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] server lang: <none>
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] kex follows: False
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] Compression: none
2025-12-12T22:43:28.438 [DEBUG] [Thread-77906] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:43:28.493 [DEBUG] [Thread-77906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:43:28.494 [DEBUG] [Thread-77906] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:43:28.494 [DEBUG] [Thread-77906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:43:28.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:43:28.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:43:28.549 [DEBUG] [Thread-77906] [transport.py] [_log()] userauth is OK
2025-12-12T22:43:28.550 [DEBUG] [Thread-77906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:43:28.550 [DEBUG] [Thread-77906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:43:28.550 [DEBUG] [Thread-77906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:43:28.550 [DEBUG] [Thread-77906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:43:28.569 [INFO] [Thread-77906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:43:28.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:43:28.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:43:29.410 [DEBUG] [Thread-77906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:43:29.410 [DEBUG] [Thread-77906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:43:29.458 [DEBUG] [Thread-77906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:43:29.458 [DEBUG] [Thread-77906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:43:29.467 [DEBUG] [Thread-77906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:43:29.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:43:29.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:43:29.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:43:29.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:43:29.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:43:29.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:43:29.501 [DEBUG] [Thread-77906] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:43:34.373 [DEBUG] [Thread-77908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:40.670 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:40.671 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:49.414 [DEBUG] [Thread-77909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:43:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:43:59.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:43:59.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:44:00.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 43, 55), 1.43, 90.68, 0.0, 39.61, 9.81, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:44:00.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:43:55
2025-12-12T22:44:00.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:44:00.457 [DEBUG] [Thread-77910] [transport.py] [_log()] starting thread (client mode): 0xfabc7d90
2025-12-12T22:44:00.457 [DEBUG] [Thread-77910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:44:00.478 [DEBUG] [Thread-77910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:44:00.478 [INFO] [Thread-77910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] client lang: <none>
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] server lang: <none>
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] kex follows: False
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:44:00.481 [DEBUG] [Thread-77910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:44:00.482 [DEBUG] [Thread-77910] [transport.py] [_log()] Compression: none
2025-12-12T22:44:00.482 [DEBUG] [Thread-77910] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:44:00.498 [DEBUG] [Thread-77910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:44:00.499 [DEBUG] [Thread-77910] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:44:00.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:44:00.500 [DEBUG] [Thread-77910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:44:00.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:44:00.502 [DEBUG] [Thread-77910] [transport.py] [_log()] userauth is OK
2025-12-12T22:44:00.502 [DEBUG] [Thread-77910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:44:00.502 [DEBUG] [Thread-77910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:44:00.502 [DEBUG] [Thread-77910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:44:00.502 [DEBUG] [Thread-77910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:44:00.527 [INFO] [Thread-77910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:44:00.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:44:01.325 [DEBUG] [Thread-77910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:44:01.326 [DEBUG] [Thread-77910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:44:01.326 [DEBUG] [Thread-77910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:44:01.368 [DEBUG] [Thread-77910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:44:01.368 [DEBUG] [Thread-77910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:44:01.370 [DEBUG] [Thread-77910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:44:01.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:44:01.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:44:01.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:44:01.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:44:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:44:01.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:44:01.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:44:01.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:44:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:44:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.863641 -999.00   +9.50  33.30     91   +8.10 1 3 2 3 1     0    0 1.32 -3.60 ----- 44.1 33.3 310.2 58.1 11.2 -2.9 10.9 -2.2 10.6 -2.2 10.8 -1.7
2025-12-12T22:44:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:44:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:44:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.863641
2025-12-12T22:44:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:44:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:44:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:44:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:44:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:44:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:43:55', tmtdew=1.43, humidity=90.68, cloud=0.0, wind=39.61, temperature=9.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:43:38.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:44:01.393 [DEBUG] [Thread-77910] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:44:01.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:44:01.488 [DEBUG] [Thread-77913] [transport.py] [_log()] starting thread (client mode): 0xf578a8c0
2025-12-12T22:44:01.489 [DEBUG] [Thread-77913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:44:01.503 [DEBUG] [Thread-77913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:44:01.503 [INFO] [Thread-77913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] client lang: <none>
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] server lang: <none>
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] kex follows: False
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:44:01.511 [DEBUG] [Thread-77913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:44:01.512 [DEBUG] [Thread-77913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:44:01.512 [DEBUG] [Thread-77913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:44:01.512 [DEBUG] [Thread-77913] [transport.py] [_log()] Compression: none
2025-12-12T22:44:01.512 [DEBUG] [Thread-77913] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:44:01.569 [DEBUG] [Thread-77913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:44:01.570 [DEBUG] [Thread-77913] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:44:01.570 [DEBUG] [Thread-77913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:44:01.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:44:01.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:44:01.626 [DEBUG] [Thread-77913] [transport.py] [_log()] userauth is OK
2025-12-12T22:44:01.626 [DEBUG] [Thread-77913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:44:01.626 [DEBUG] [Thread-77913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:44:01.626 [DEBUG] [Thread-77913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:44:01.627 [DEBUG] [Thread-77913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:44:01.646 [INFO] [Thread-77913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:44:01.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:44:01.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:44:02.529 [DEBUG] [Thread-77913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:44:02.529 [DEBUG] [Thread-77913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:44:02.577 [DEBUG] [Thread-77913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:44:02.577 [DEBUG] [Thread-77913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:44:02.589 [DEBUG] [Thread-77913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:44:02.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:44:02.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:44:02.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:44:02.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:44:02.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:44:02.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:44:02.631 [DEBUG] [Thread-77913] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:44:04.441 [DEBUG] [Thread-77915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:44:17.367 [DEBUG] [Thread-77916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:44:19.485 [DEBUG] [Thread-77917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:44:32.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:44:32.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:44:32.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:44:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 44, 27), 1.44, 90.62, 0.0, 37.55, 9.84, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:44:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:44:27
2025-12-12T22:44:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:44:33.637 [DEBUG] [Thread-77918] [transport.py] [_log()] starting thread (client mode): 0xf57f3a90
2025-12-12T22:44:33.638 [DEBUG] [Thread-77918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:44:33.658 [DEBUG] [Thread-77918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:44:33.659 [INFO] [Thread-77918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:44:33.662 [DEBUG] [Thread-77918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:44:33.662 [DEBUG] [Thread-77918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:44:33.662 [DEBUG] [Thread-77918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] client lang: <none>
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] server lang: <none>
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] kex follows: False
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:44:33.663 [DEBUG] [Thread-77918] [transport.py] [_log()] Compression: none
2025-12-12T22:44:33.664 [DEBUG] [Thread-77918] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:44:33.681 [DEBUG] [Thread-77918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:44:33.682 [DEBUG] [Thread-77918] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:44:33.682 [DEBUG] [Thread-77918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:44:33.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:44:33.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:44:33.684 [DEBUG] [Thread-77918] [transport.py] [_log()] userauth is OK
2025-12-12T22:44:33.684 [DEBUG] [Thread-77918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:44:33.684 [DEBUG] [Thread-77918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:44:33.685 [DEBUG] [Thread-77918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:44:33.685 [DEBUG] [Thread-77918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:44:33.708 [INFO] [Thread-77918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:44:33.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:44:34.387 [DEBUG] [Thread-77918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:44:34.387 [DEBUG] [Thread-77918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:44:34.387 [DEBUG] [Thread-77918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:44:34.428 [DEBUG] [Thread-77918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:44:34.428 [DEBUG] [Thread-77918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:44:34.431 [DEBUG] [Thread-77918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:44:34.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:44:34.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:44:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:44:34.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:44:34.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:44:34.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:44:34.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:44:34.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:44:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:44:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.863988 -999.00   +9.50  39.34     91   +8.20 1 3 2 3 1     0    0 1.33 -2.63 ----- 38.6 39.3 305.0 52.7 11.1 -2.4 10.9 -2.0 10.5 -1.6 10.8 -1.5
2025-12-12T22:44:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:44:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:44:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.863988
2025-12-12T22:44:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:44:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:44:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:44:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:44:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:44:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:44:27', tmtdew=1.44, humidity=90.62, cloud=0.0, wind=37.55, temperature=9.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:44:08.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:44:34.455 [DEBUG] [Thread-77918] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:44:34.513 [DEBUG] [Thread-77921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:44:34.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:44:34.553 [DEBUG] [Thread-77922] [transport.py] [_log()] starting thread (client mode): 0xf5789db0
2025-12-12T22:44:34.554 [DEBUG] [Thread-77922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:44:34.568 [DEBUG] [Thread-77922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:44:34.569 [INFO] [Thread-77922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:44:34.576 [DEBUG] [Thread-77922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] client lang: <none>
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] server lang: <none>
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] kex follows: False
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] Compression: none
2025-12-12T22:44:34.577 [DEBUG] [Thread-77922] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:44:34.633 [DEBUG] [Thread-77922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:44:34.634 [DEBUG] [Thread-77922] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:44:34.634 [DEBUG] [Thread-77922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:44:34.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:44:34.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:44:34.690 [DEBUG] [Thread-77922] [transport.py] [_log()] userauth is OK
2025-12-12T22:44:34.690 [DEBUG] [Thread-77922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:44:34.690 [DEBUG] [Thread-77922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:44:34.690 [DEBUG] [Thread-77922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:44:34.690 [DEBUG] [Thread-77922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:44:34.711 [INFO] [Thread-77922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:44:34.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:44:34.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:44:35.586 [DEBUG] [Thread-77922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:44:35.587 [DEBUG] [Thread-77922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:44:35.635 [DEBUG] [Thread-77922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:44:35.635 [DEBUG] [Thread-77922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:44:35.644 [DEBUG] [Thread-77922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:44:35.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:44:35.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:44:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:44:35.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:44:35.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:44:35.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:44:35.679 [DEBUG] [Thread-77922] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:44:40.875 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:44:40.876 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:44:49.548 [DEBUG] [Thread-77924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:04.575 [DEBUG] [Thread-77925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:05.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:45:05.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:45:05.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:45:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 44, 27), 1.44, 90.62, 0.0, 37.55, 9.84, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:45:06.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:44:27
2025-12-12T22:45:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:45:06.690 [DEBUG] [Thread-77926] [transport.py] [_log()] starting thread (client mode): 0xfabc5180
2025-12-12T22:45:06.690 [DEBUG] [Thread-77926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:45:06.711 [DEBUG] [Thread-77926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:45:06.711 [INFO] [Thread-77926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:06.714 [DEBUG] [Thread-77926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] client lang: <none>
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] server lang: <none>
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] kex follows: False
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] Compression: none
2025-12-12T22:45:06.715 [DEBUG] [Thread-77926] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:45:06.723 [DEBUG] [Thread-77926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:45:06.723 [DEBUG] [Thread-77926] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:45:06.723 [DEBUG] [Thread-77926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:45:06.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:45:06.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:45:06.724 [DEBUG] [Thread-77926] [transport.py] [_log()] userauth is OK
2025-12-12T22:45:06.724 [DEBUG] [Thread-77926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:45:06.724 [DEBUG] [Thread-77926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:45:06.724 [DEBUG] [Thread-77926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:45:06.724 [DEBUG] [Thread-77926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:45:06.734 [INFO] [Thread-77926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:45:06.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:45:07.656 [DEBUG] [Thread-77926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:45:07.656 [DEBUG] [Thread-77926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:45:07.656 [DEBUG] [Thread-77926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:45:07.697 [DEBUG] [Thread-77926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:45:07.697 [DEBUG] [Thread-77926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:45:07.699 [DEBUG] [Thread-77926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:45:07.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:45:07.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:45:07.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:45:07.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:45:07.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:45:07.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:45:07.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:45:07.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.864335 -999.00   +9.50  42.95     91   +8.20 1 3 2 3 1     0    0 1.35 -1.66 ----- 41.6 43.0 299.6 57.1 11.2 -2.3 10.9 -2.6 10.5 -2.2 10.8 -2.0
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.864335
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:45:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:44:27', tmtdew=1.44, humidity=90.62, cloud=0.0, wind=37.55, temperature=9.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:44:38.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:45:07.732 [DEBUG] [Thread-77926] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:45:07.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:45:07.817 [DEBUG] [Thread-77929] [transport.py] [_log()] starting thread (client mode): 0xfabc5ae0
2025-12-12T22:45:07.817 [DEBUG] [Thread-77929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:45:07.831 [DEBUG] [Thread-77929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:45:07.831 [INFO] [Thread-77929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] client lang: <none>
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] server lang: <none>
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] kex follows: False
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] Compression: none
2025-12-12T22:45:07.839 [DEBUG] [Thread-77929] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:45:07.897 [DEBUG] [Thread-77929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:45:07.897 [DEBUG] [Thread-77929] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:45:07.897 [DEBUG] [Thread-77929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:45:07.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:45:07.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:45:07.954 [DEBUG] [Thread-77929] [transport.py] [_log()] userauth is OK
2025-12-12T22:45:07.954 [DEBUG] [Thread-77929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:45:07.954 [DEBUG] [Thread-77929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:45:07.954 [DEBUG] [Thread-77929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:45:07.954 [DEBUG] [Thread-77929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:45:07.971 [INFO] [Thread-77929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:45:07.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:45:07.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:45:08.813 [DEBUG] [Thread-77929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:45:08.813 [DEBUG] [Thread-77929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:45:08.862 [DEBUG] [Thread-77929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:45:08.862 [DEBUG] [Thread-77929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:45:08.870 [DEBUG] [Thread-77929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:45:08.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:45:08.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:45:08.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:45:08.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:45:08.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:45:08.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:45:08.902 [DEBUG] [Thread-77929] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:45:17.440 [DEBUG] [Thread-77931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:19.600 [DEBUG] [Thread-77932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:34.651 [DEBUG] [Thread-77933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:45:38.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:45:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:45:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 45, 32), 1.49, 90.65, 0.0, 43.51, 9.84, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:45:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:45:32
2025-12-12T22:45:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:45:39.889 [DEBUG] [Thread-77934] [transport.py] [_log()] starting thread (client mode): 0xf57898a0
2025-12-12T22:45:39.889 [DEBUG] [Thread-77934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:45:39.909 [DEBUG] [Thread-77934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:45:39.909 [INFO] [Thread-77934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:45:39.912 [DEBUG] [Thread-77934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] client lang: <none>
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] server lang: <none>
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] kex follows: False
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] Compression: none
2025-12-12T22:45:39.913 [DEBUG] [Thread-77934] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:45:39.920 [DEBUG] [Thread-77934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:45:39.920 [DEBUG] [Thread-77934] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:45:39.920 [DEBUG] [Thread-77934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:45:39.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:45:39.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:45:39.921 [DEBUG] [Thread-77934] [transport.py] [_log()] userauth is OK
2025-12-12T22:45:39.921 [DEBUG] [Thread-77934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:45:39.921 [DEBUG] [Thread-77934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:45:39.921 [DEBUG] [Thread-77934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:45:39.921 [DEBUG] [Thread-77934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:45:39.931 [INFO] [Thread-77934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:45:39.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:45:40.561 [DEBUG] [Thread-77934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:45:40.561 [DEBUG] [Thread-77934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:45:40.561 [DEBUG] [Thread-77934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:45:40.602 [DEBUG] [Thread-77934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:45:40.602 [DEBUG] [Thread-77934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:45:40.605 [DEBUG] [Thread-77934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:45:40.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:45:40.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:45:40.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:45:40.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:45:40.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:45:40.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:45:40.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:45:40.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:45:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:45:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.864682 -999.00   +9.50  36.85     91   +8.20 1 3 2 3 1     0    0 1.38 -0.66 ----- 40.8 36.9 313.0 57.1 11.1 -2.9 10.9 -2.6 10.5 -2.3 10.8 -1.9
2025-12-12T22:45:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:45:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:45:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.864682
2025-12-12T22:45:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:45:40.624 [DEBUG] [Thread-77934] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:45:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:45:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:45:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:45:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:45:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:45:32', tmtdew=1.49, humidity=90.65, cloud=0.0, wind=43.51, temperature=9.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:45:08.525', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:45:40.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:45:40.724 [DEBUG] [Thread-77937] [transport.py] [_log()] starting thread (client mode): 0xf578b040
2025-12-12T22:45:40.724 [DEBUG] [Thread-77937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:45:40.739 [DEBUG] [Thread-77937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:45:40.739 [INFO] [Thread-77937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:40.747 [DEBUG] [Thread-77937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] client lang: <none>
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] server lang: <none>
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] kex follows: False
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:45:40.748 [DEBUG] [Thread-77937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:45:40.749 [DEBUG] [Thread-77937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:45:40.749 [DEBUG] [Thread-77937] [transport.py] [_log()] Compression: none
2025-12-12T22:45:40.749 [DEBUG] [Thread-77937] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:45:40.805 [DEBUG] [Thread-77937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:45:40.806 [DEBUG] [Thread-77937] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:45:40.806 [DEBUG] [Thread-77937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:45:40.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:45:40.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:45:40.862 [DEBUG] [Thread-77937] [transport.py] [_log()] userauth is OK
2025-12-12T22:45:40.862 [DEBUG] [Thread-77937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:45:40.863 [DEBUG] [Thread-77937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:45:40.863 [DEBUG] [Thread-77937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:45:40.863 [DEBUG] [Thread-77937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:45:40.882 [INFO] [Thread-77937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:45:40.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:45:40.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:45:41.079 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:41.080 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:45:41.714 [DEBUG] [Thread-77937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:45:41.714 [DEBUG] [Thread-77937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:45:41.763 [DEBUG] [Thread-77937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:45:41.763 [DEBUG] [Thread-77937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:45:41.772 [DEBUG] [Thread-77937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:45:41.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:45: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')
2025-12-12T22:45: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
2025-12-12T22:45:41.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:45:41.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:45:41.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:45:41.807 [DEBUG] [Thread-77937] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:45:49.683 [DEBUG] [Thread-77939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:04.724 [DEBUG] [Thread-77940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:46:11.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:46:11.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
2025-12-12T22:46:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 46, 4), 1.5, 90.57, 0.0, 46.42, 9.81, 1, 2, 0, 2, 1, 0),)
2025-12-12T22:46:12.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:46:04
2025-12-12T22:46:12.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:46:12.802 [DEBUG] [Thread-77941] [transport.py] [_log()] starting thread (client mode): 0xf578a530
2025-12-12T22:46:12.802 [DEBUG] [Thread-77941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:46:12.822 [DEBUG] [Thread-77941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:46:12.822 [INFO] [Thread-77941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] client lang: <none>
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] server lang: <none>
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] kex follows: False
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] Compression: none
2025-12-12T22:46:12.825 [DEBUG] [Thread-77941] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:46:12.842 [DEBUG] [Thread-77941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:46:12.843 [DEBUG] [Thread-77941] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:46:12.843 [DEBUG] [Thread-77941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:46:12.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:46:12.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:46:12.845 [DEBUG] [Thread-77941] [transport.py] [_log()] userauth is OK
2025-12-12T22:46:12.845 [DEBUG] [Thread-77941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:46:12.845 [DEBUG] [Thread-77941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:46:12.845 [DEBUG] [Thread-77941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:46:12.845 [DEBUG] [Thread-77941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:46:12.876 [INFO] [Thread-77941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:46:12.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:46:13.651 [DEBUG] [Thread-77941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:46:13.651 [DEBUG] [Thread-77941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:46:13.651 [DEBUG] [Thread-77941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:46:13.691 [DEBUG] [Thread-77941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:46:13.692 [DEBUG] [Thread-77941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:46:13.694 [DEBUG] [Thread-77941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:46:13.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:46:13.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:46:13.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:46:13.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:46:13.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:46:13.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:46:13.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:46:13.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:46:13.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:46:13.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.865030 -999.00   +9.50  45.30     91   +8.20 1 3 2 3 1     0    0 1.41 0.09 ----- 45.2 45.3 318.4 64.5 11.1 -2.8 10.8 -3.0 10.4 -3.3 10.8 -3.1
2025-12-12T22:46:13.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:46:13.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:46:13.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.865030
2025-12-12T22:46:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:46:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:46:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:46:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:46:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:46:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:46:04', tmtdew=1.5, humidity=90.57, cloud=0.0, wind=46.42, temperature=9.81, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:45:38.592', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:46:13.711 [DEBUG] [Thread-77941] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:46:13.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:46:13.809 [DEBUG] [Thread-77944] [transport.py] [_log()] starting thread (client mode): 0xf5772890
2025-12-12T22:46:13.809 [DEBUG] [Thread-77944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:46:13.823 [DEBUG] [Thread-77944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:46:13.823 [INFO] [Thread-77944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:46:13.830 [DEBUG] [Thread-77944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] client lang: <none>
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] server lang: <none>
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] kex follows: False
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:46:13.831 [DEBUG] [Thread-77944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:46:13.832 [DEBUG] [Thread-77944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:46:13.832 [DEBUG] [Thread-77944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:46:13.832 [DEBUG] [Thread-77944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:46:13.832 [DEBUG] [Thread-77944] [transport.py] [_log()] Compression: none
2025-12-12T22:46:13.832 [DEBUG] [Thread-77944] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:46:13.889 [DEBUG] [Thread-77944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:46:13.889 [DEBUG] [Thread-77944] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:46:13.890 [DEBUG] [Thread-77944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:46:13.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:46:13.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:46:13.946 [DEBUG] [Thread-77944] [transport.py] [_log()] userauth is OK
2025-12-12T22:46:13.946 [DEBUG] [Thread-77944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:46:13.946 [DEBUG] [Thread-77944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:46:13.946 [DEBUG] [Thread-77944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:46:13.946 [DEBUG] [Thread-77944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:46:13.964 [INFO] [Thread-77944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:46:13.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:46:13.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:46:14.742 [DEBUG] [Thread-77944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:46:14.742 [DEBUG] [Thread-77944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:46:14.790 [DEBUG] [Thread-77944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:46:14.790 [DEBUG] [Thread-77944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:46:14.799 [DEBUG] [Thread-77944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:46:14.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:46:14.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:46:14.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:46:14.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:46:14.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:46:14.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:46:14.832 [DEBUG] [Thread-77944] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:46:17.518 [DEBUG] [Thread-77946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:19.755 [DEBUG] [Thread-77947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:34.797 [DEBUG] [Thread-77948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:41.284 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:41.285 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:46:44.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:46:44.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:46: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
2025-12-12T22:46:45.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 46, 36), 1.45, 90.55, 0.0, 38.76, 9.71, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:46:45.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:46:36
2025-12-12T22:46:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:46:45.823 [DEBUG] [Thread-77949] [transport.py] [_log()] starting thread (client mode): 0xf57f3820
2025-12-12T22:46:45.823 [DEBUG] [Thread-77949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:46:45.844 [DEBUG] [Thread-77949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:46:45.844 [INFO] [Thread-77949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] client lang: <none>
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] server lang: <none>
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] kex follows: False
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:46:45.848 [DEBUG] [Thread-77949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:46:45.849 [DEBUG] [Thread-77949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:46:45.849 [DEBUG] [Thread-77949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:46:45.849 [DEBUG] [Thread-77949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:46:45.849 [DEBUG] [Thread-77949] [transport.py] [_log()] Compression: none
2025-12-12T22:46:45.849 [DEBUG] [Thread-77949] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:46:45.866 [DEBUG] [Thread-77949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:46:45.866 [DEBUG] [Thread-77949] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:46:45.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:46:45.867 [DEBUG] [Thread-77949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:46:45.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:46:45.869 [DEBUG] [Thread-77949] [transport.py] [_log()] userauth is OK
2025-12-12T22:46:45.869 [DEBUG] [Thread-77949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:46:45.870 [DEBUG] [Thread-77949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:46:45.870 [DEBUG] [Thread-77949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:46:45.870 [DEBUG] [Thread-77949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:46:45.893 [INFO] [Thread-77949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:46:45.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:46:46.542 [DEBUG] [Thread-77949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:46:46.542 [DEBUG] [Thread-77949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:46:46.543 [DEBUG] [Thread-77949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:46:46.583 [DEBUG] [Thread-77949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:46:46.583 [DEBUG] [Thread-77949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:46:46.586 [DEBUG] [Thread-77949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:46:46.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:46:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:46:46.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:46:46.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:46:46.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:46:46.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:46:46.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:46:46.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:46:46.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:46:46.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.865377 -999.00   +9.50  35.84     91   +8.20 1 3 2 3 1     0    0 1.41 0.43 ----- 38.3 35.8 314.0 49.9 11.0 -3.6 10.8 -1.9 10.4 -1.9 10.7 -1.5
2025-12-12T22:46:46.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:46:46.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:46:46.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.865377
2025-12-12T22:46:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:46:46.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:46:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:46:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:46:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:46:46.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:46:36', tmtdew=1.45, humidity=90.55, cloud=0.0, wind=38.76, temperature=9.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:46:08.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:46:46.611 [DEBUG] [Thread-77949] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:46:46.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:46:46.708 [DEBUG] [Thread-77952] [transport.py] [_log()] starting thread (client mode): 0xfabc5420
2025-12-12T22:46:46.708 [DEBUG] [Thread-77952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:46:46.723 [DEBUG] [Thread-77952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:46:46.723 [INFO] [Thread-77952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:46:46.730 [DEBUG] [Thread-77952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:46:46.731 [DEBUG] [Thread-77952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] client lang: <none>
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] server lang: <none>
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] kex follows: False
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:46:46.732 [DEBUG] [Thread-77952] [transport.py] [_log()] Compression: none
2025-12-12T22:46:46.733 [DEBUG] [Thread-77952] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:46:46.790 [DEBUG] [Thread-77952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:46:46.791 [DEBUG] [Thread-77952] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:46:46.791 [DEBUG] [Thread-77952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:46:46.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:46:46.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:46:46.846 [DEBUG] [Thread-77952] [transport.py] [_log()] userauth is OK
2025-12-12T22:46:46.846 [DEBUG] [Thread-77952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:46:46.847 [DEBUG] [Thread-77952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:46:46.847 [DEBUG] [Thread-77952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:46:46.847 [DEBUG] [Thread-77952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:46:46.865 [INFO] [Thread-77952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:46:46.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:46:46.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:46:47.707 [DEBUG] [Thread-77952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:46:47.707 [DEBUG] [Thread-77952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:46:47.755 [DEBUG] [Thread-77952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:46:47.755 [DEBUG] [Thread-77952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:46:47.764 [DEBUG] [Thread-77952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:46:47.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:46: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')
2025-12-12T22:46:47.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:46:47.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:46:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:46:47.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:46:47.798 [DEBUG] [Thread-77952] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:46:49.826 [DEBUG] [Thread-77954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:04.869 [DEBUG] [Thread-77955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:17.605 [DEBUG] [Thread-77956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:17.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:47:17.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:47:17.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
2025-12-12T22:47:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 47, 8), 1.44, 90.6, 0.0, 36.7, 9.66, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:47:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:47:08
2025-12-12T22:47:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:47:18.788 [DEBUG] [Thread-77957] [transport.py] [_log()] starting thread (client mode): 0xf57f3820
2025-12-12T22:47:18.788 [DEBUG] [Thread-77957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:47:18.807 [DEBUG] [Thread-77957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:47:18.807 [INFO] [Thread-77957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] client lang: <none>
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] server lang: <none>
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] kex follows: False
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:47:18.810 [DEBUG] [Thread-77957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:47:18.811 [DEBUG] [Thread-77957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:47:18.811 [DEBUG] [Thread-77957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:47:18.811 [DEBUG] [Thread-77957] [transport.py] [_log()] Compression: none
2025-12-12T22:47:18.811 [DEBUG] [Thread-77957] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:47:18.829 [DEBUG] [Thread-77957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:47:18.829 [DEBUG] [Thread-77957] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:47:18.830 [DEBUG] [Thread-77957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:47:18.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:47:18.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:47:18.832 [DEBUG] [Thread-77957] [transport.py] [_log()] userauth is OK
2025-12-12T22:47:18.832 [DEBUG] [Thread-77957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:47:18.832 [DEBUG] [Thread-77957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:47:18.832 [DEBUG] [Thread-77957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:47:18.832 [DEBUG] [Thread-77957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:47:18.857 [INFO] [Thread-77957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:47:18.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:47:19.460 [DEBUG] [Thread-77957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:47:19.460 [DEBUG] [Thread-77957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:47:19.460 [DEBUG] [Thread-77957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:47:19.501 [DEBUG] [Thread-77957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:47:19.501 [DEBUG] [Thread-77957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:47:19.504 [DEBUG] [Thread-77957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:47:19.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:47:19.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:47:19.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:47:19.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:47:19.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:47:19.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:47:19.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:47:19.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:47:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:47:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.865724 -999.00   +9.50  42.46     91   +8.20 1 3 2 3 1     0    0 1.37 0.64 .nE.. 35.6 42.5 308.8 52.1 11.1 -2.0 10.8 -1.9 10.4 -1.9 10.7 -1.5
2025-12-12T22:47:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:47:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:47:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.865724
2025-12-12T22:47:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:47:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:47:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:47:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:47:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:47:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:47:08', tmtdew=1.44, humidity=90.6, cloud=0.0, wind=36.7, temperature=9.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:46:38.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:47:19.528 [DEBUG] [Thread-77957] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:47:19.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:47:19.624 [DEBUG] [Thread-77960] [transport.py] [_log()] starting thread (client mode): 0xfabc6830
2025-12-12T22:47:19.624 [DEBUG] [Thread-77960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:47:19.639 [DEBUG] [Thread-77960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:47:19.640 [INFO] [Thread-77960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:47:19.647 [DEBUG] [Thread-77960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:47:19.647 [DEBUG] [Thread-77960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:47:19.647 [DEBUG] [Thread-77960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] client lang: <none>
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] server lang: <none>
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] kex follows: False
2025-12-12T22:47:19.648 [DEBUG] [Thread-77960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:47:19.649 [DEBUG] [Thread-77960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:47:19.649 [DEBUG] [Thread-77960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:47:19.649 [DEBUG] [Thread-77960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:47:19.649 [DEBUG] [Thread-77960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:47:19.649 [DEBUG] [Thread-77960] [transport.py] [_log()] Compression: none
2025-12-12T22:47:19.649 [DEBUG] [Thread-77960] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:47:19.710 [DEBUG] [Thread-77960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:47:19.711 [DEBUG] [Thread-77960] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:47:19.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:47:19.711 [DEBUG] [Thread-77960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:47:19.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:47:19.766 [DEBUG] [Thread-77960] [transport.py] [_log()] userauth is OK
2025-12-12T22:47:19.766 [DEBUG] [Thread-77960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:47:19.766 [DEBUG] [Thread-77960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:47:19.766 [DEBUG] [Thread-77960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:47:19.767 [DEBUG] [Thread-77960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:47:19.785 [INFO] [Thread-77960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:47:19.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:47:19.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:47:19.895 [DEBUG] [Thread-77962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:20.597 [DEBUG] [Thread-77960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:47:20.597 [DEBUG] [Thread-77960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:47:20.645 [DEBUG] [Thread-77960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:47:20.645 [DEBUG] [Thread-77960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:47:20.654 [DEBUG] [Thread-77960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:47:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:47:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:47:20.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:47:20.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:47:20.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:47:20.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:47:20.696 [DEBUG] [Thread-77960] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:47:34.939 [DEBUG] [Thread-77963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:41.489 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:41.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:49.970 [DEBUG] [Thread-77964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:47:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:47:50.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:47:50.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:47:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 47, 40), 1.34, 91.13, 0.0, 36.45, 9.56, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:47:51.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:47:40
2025-12-12T22:47:51.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:47:51.655 [DEBUG] [Thread-77965] [transport.py] [_log()] starting thread (client mode): 0xfabc7490
2025-12-12T22:47:51.655 [DEBUG] [Thread-77965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:47:51.675 [DEBUG] [Thread-77965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:47:51.675 [INFO] [Thread-77965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] client lang: <none>
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] server lang: <none>
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] kex follows: False
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:47:51.678 [DEBUG] [Thread-77965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:47:51.679 [DEBUG] [Thread-77965] [transport.py] [_log()] Compression: none
2025-12-12T22:47:51.679 [DEBUG] [Thread-77965] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:47:51.694 [DEBUG] [Thread-77965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:47:51.695 [DEBUG] [Thread-77965] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:47:51.695 [DEBUG] [Thread-77965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:47:51.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:47:51.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:47:51.697 [DEBUG] [Thread-77965] [transport.py] [_log()] userauth is OK
2025-12-12T22:47:51.697 [DEBUG] [Thread-77965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:47:51.697 [DEBUG] [Thread-77965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:47:51.697 [DEBUG] [Thread-77965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:47:51.697 [DEBUG] [Thread-77965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:47:51.711 [INFO] [Thread-77965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:47:51.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:47:52.341 [DEBUG] [Thread-77965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:47:52.341 [DEBUG] [Thread-77965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:47:52.341 [DEBUG] [Thread-77965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:47:52.382 [DEBUG] [Thread-77965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:47:52.382 [DEBUG] [Thread-77965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:47:52.386 [DEBUG] [Thread-77965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:47:52.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:47:52.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:47:52.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:47:52.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:47:52.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:47:52.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:47:52.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:47:52.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:47:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:47:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.866418 -999.00   +9.50  28.56     92   +8.30 1 3 1 3 1     0    0 1.37 -0.08 ----- 31.5 28.6 311.8 38.6 11.1 -2.1 10.8 -2.1 10.4 -1.7 10.7 -1.8
2025-12-12T22:47:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:47:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:47:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.866418
2025-12-12T22:47:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:47:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:47:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:47:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:47:52.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:47:52.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:47:40', tmtdew=1.34, humidity=91.13, cloud=0.0, wind=36.45, temperature=9.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:47:38.515', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:47:52.417 [DEBUG] [Thread-77965] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:47:52.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:47:52.513 [DEBUG] [Thread-77968] [transport.py] [_log()] starting thread (client mode): 0xf5770af0
2025-12-12T22:47:52.513 [DEBUG] [Thread-77968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:47:52.530 [DEBUG] [Thread-77968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:47:52.530 [INFO] [Thread-77968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:47:52.538 [DEBUG] [Thread-77968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:47:52.538 [DEBUG] [Thread-77968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:47:52.538 [DEBUG] [Thread-77968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] client lang: <none>
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] server lang: <none>
2025-12-12T22:47:52.539 [DEBUG] [Thread-77968] [transport.py] [_log()] kex follows: False
2025-12-12T22:47:52.540 [DEBUG] [Thread-77968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:47:52.540 [DEBUG] [Thread-77968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:47:52.540 [DEBUG] [Thread-77968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:47:52.540 [DEBUG] [Thread-77968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:47:52.540 [DEBUG] [Thread-77968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:47:52.541 [DEBUG] [Thread-77968] [transport.py] [_log()] Compression: none
2025-12-12T22:47:52.541 [DEBUG] [Thread-77968] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:47:52.596 [DEBUG] [Thread-77968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:47:52.597 [DEBUG] [Thread-77968] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:47:52.597 [DEBUG] [Thread-77968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:47:52.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:47:52.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:47:52.656 [DEBUG] [Thread-77968] [transport.py] [_log()] userauth is OK
2025-12-12T22:47:52.656 [DEBUG] [Thread-77968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:47:52.656 [DEBUG] [Thread-77968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:47:52.656 [DEBUG] [Thread-77968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:47:52.656 [DEBUG] [Thread-77968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:47:52.686 [INFO] [Thread-77968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:47:52.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:47:52.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:47:53.514 [DEBUG] [Thread-77968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:47:53.514 [DEBUG] [Thread-77968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:47:53.563 [DEBUG] [Thread-77968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:47:53.563 [DEBUG] [Thread-77968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:47:53.572 [DEBUG] [Thread-77968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:47:53.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:47: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')
2025-12-12T22:47:53.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:47:53.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:47:53.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:47:53.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:47:53.607 [DEBUG] [Thread-77968] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:48:04.999 [DEBUG] [Thread-77970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:17.680 [DEBUG] [Thread-77971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:20.039 [DEBUG] [Thread-77972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:48:23.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:48:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:48:24.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 48, 12), 1.31, 91.3, 0.0, 34.92, 9.63, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:48:24.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:48:12
2025-12-12T22:48:24.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:48:24.622 [DEBUG] [Thread-77973] [transport.py] [_log()] starting thread (client mode): 0xf5789a20
2025-12-12T22:48:24.622 [DEBUG] [Thread-77973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:48:24.642 [DEBUG] [Thread-77973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:48:24.642 [INFO] [Thread-77973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] client lang: <none>
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] server lang: <none>
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] kex follows: False
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:48:24.645 [DEBUG] [Thread-77973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:48:24.646 [DEBUG] [Thread-77973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:48:24.646 [DEBUG] [Thread-77973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:48:24.646 [DEBUG] [Thread-77973] [transport.py] [_log()] Compression: none
2025-12-12T22:48:24.646 [DEBUG] [Thread-77973] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:48:24.660 [DEBUG] [Thread-77973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:48:24.660 [DEBUG] [Thread-77973] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:48:24.660 [DEBUG] [Thread-77973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:48:24.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:48:24.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:48:24.661 [DEBUG] [Thread-77973] [transport.py] [_log()] userauth is OK
2025-12-12T22:48:24.661 [DEBUG] [Thread-77973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:48:24.661 [DEBUG] [Thread-77973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:48:24.661 [DEBUG] [Thread-77973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:48:24.661 [DEBUG] [Thread-77973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:48:24.674 [INFO] [Thread-77973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:48:24.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:48:25.267 [DEBUG] [Thread-77973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:48:25.267 [DEBUG] [Thread-77973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:48:25.268 [DEBUG] [Thread-77973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:48:25.308 [DEBUG] [Thread-77973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:48:25.308 [DEBUG] [Thread-77973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:48:25.310 [DEBUG] [Thread-77973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:48:25.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:48:25.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:48:25.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:48:25.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:48:25.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:48:25.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:48:25.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:48:25.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:48:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:48:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.866766 -999.00   +9.50  39.72     92   +8.30 1 3 2 3 1     0    0 1.37 -0.83 ----- 39.6 39.7 296.6 53.0 11.1 -2.2 10.8 -1.9 10.4 -2.1 10.7 -1.5
2025-12-12T22:48:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:48:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:48:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.866766
2025-12-12T22:48:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:48:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:48:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:48:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:48:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:48:25.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:48:12', tmtdew=1.31, humidity=91.3, cloud=0.0, wind=34.92, temperature=9.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:48:08.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:48:25.336 [DEBUG] [Thread-77973] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:48:25.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:48:25.434 [DEBUG] [Thread-77976] [transport.py] [_log()] starting thread (client mode): 0xf5788d30
2025-12-12T22:48:25.434 [DEBUG] [Thread-77976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:48:25.448 [DEBUG] [Thread-77976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:48:25.448 [INFO] [Thread-77976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:48:25.456 [DEBUG] [Thread-77976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:48:25.456 [DEBUG] [Thread-77976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:48:25.456 [DEBUG] [Thread-77976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:48:25.456 [DEBUG] [Thread-77976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:25.456 [DEBUG] [Thread-77976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:25.456 [DEBUG] [Thread-77976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] client lang: <none>
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] server lang: <none>
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] kex follows: False
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:48:25.457 [DEBUG] [Thread-77976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:48:25.458 [DEBUG] [Thread-77976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:48:25.458 [DEBUG] [Thread-77976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:48:25.458 [DEBUG] [Thread-77976] [transport.py] [_log()] Compression: none
2025-12-12T22:48:25.458 [DEBUG] [Thread-77976] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:48:25.518 [DEBUG] [Thread-77976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:48:25.519 [DEBUG] [Thread-77976] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:48:25.519 [DEBUG] [Thread-77976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:48:25.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:48:25.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:48:25.581 [DEBUG] [Thread-77976] [transport.py] [_log()] userauth is OK
2025-12-12T22:48:25.582 [DEBUG] [Thread-77976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:48:25.582 [DEBUG] [Thread-77976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:48:25.582 [DEBUG] [Thread-77976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:48:25.582 [DEBUG] [Thread-77976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:48:25.601 [INFO] [Thread-77976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:48:25.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:48:25.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:48:26.491 [DEBUG] [Thread-77976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:48:26.492 [DEBUG] [Thread-77976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:48:26.540 [DEBUG] [Thread-77976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:48:26.540 [DEBUG] [Thread-77976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:48:26.549 [DEBUG] [Thread-77976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:48:26.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:48:26.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:48:26.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:48:26.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:48:26.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:48:26.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:48:26.585 [DEBUG] [Thread-77976] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:48:35.064 [DEBUG] [Thread-77978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:41.693 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:41.694 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:50.107 [DEBUG] [Thread-77979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:48:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:48:56.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:48:56.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:48:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 48, 44), 1.29, 91.43, 0.0, 36.08, 9.68, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:48:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:48:44
2025-12-12T22:48:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:48:57.540 [DEBUG] [Thread-77980] [transport.py] [_log()] starting thread (client mode): 0xfabc7310
2025-12-12T22:48:57.540 [DEBUG] [Thread-77980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:48:57.561 [DEBUG] [Thread-77980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:48:57.561 [INFO] [Thread-77980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:48:57.564 [DEBUG] [Thread-77980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] client lang: <none>
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] server lang: <none>
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] kex follows: False
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] Compression: none
2025-12-12T22:48:57.565 [DEBUG] [Thread-77980] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:48:57.582 [DEBUG] [Thread-77980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:48:57.583 [DEBUG] [Thread-77980] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:48:57.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:48:57.583 [DEBUG] [Thread-77980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:48:57.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:48:57.585 [DEBUG] [Thread-77980] [transport.py] [_log()] userauth is OK
2025-12-12T22:48:57.585 [DEBUG] [Thread-77980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:48:57.586 [DEBUG] [Thread-77980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:48:57.586 [DEBUG] [Thread-77980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:48:57.586 [DEBUG] [Thread-77980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:48:57.612 [INFO] [Thread-77980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:48:57.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:48:58.220 [DEBUG] [Thread-77980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:48:58.220 [DEBUG] [Thread-77980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:48:58.220 [DEBUG] [Thread-77980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:48:58.261 [DEBUG] [Thread-77980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:48:58.261 [DEBUG] [Thread-77980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:48:58.263 [DEBUG] [Thread-77980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:48:58.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:48:58.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:48:58.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:48:58.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:48:58.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:48:58.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:48:58.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.867113 -999.00   +9.40  39.30     92   +8.20 1 3 2 3 1     0    0 1.34 -1.76 ----- 33.9 39.3 305.8 53.3 11.0 -2.2 10.7 -1.8 10.2 -1.8 10.6 -1.3
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.867113
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:48:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:48:44', tmtdew=1.29, humidity=91.43, cloud=0.0, wind=36.08, temperature=9.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:48:38.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:48:58.280 [DEBUG] [Thread-77980] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:48:58.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:48:58.366 [DEBUG] [Thread-77983] [transport.py] [_log()] starting thread (client mode): 0xf578a410
2025-12-12T22:48:58.366 [DEBUG] [Thread-77983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:48:58.382 [DEBUG] [Thread-77983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:48:58.382 [INFO] [Thread-77983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:48:58.389 [DEBUG] [Thread-77983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] client lang: <none>
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] server lang: <none>
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] kex follows: False
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] Compression: none
2025-12-12T22:48:58.390 [DEBUG] [Thread-77983] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:48:58.446 [DEBUG] [Thread-77983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:48:58.446 [DEBUG] [Thread-77983] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:48:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:48:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:48:58.447 [DEBUG] [Thread-77983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:48:58.510 [DEBUG] [Thread-77983] [transport.py] [_log()] userauth is OK
2025-12-12T22:48:58.510 [DEBUG] [Thread-77983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:48:58.510 [DEBUG] [Thread-77983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:48:58.510 [DEBUG] [Thread-77983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:48:58.510 [DEBUG] [Thread-77983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:48:58.524 [INFO] [Thread-77983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:48:58.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:48:58.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:48:59.340 [DEBUG] [Thread-77983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:48:59.340 [DEBUG] [Thread-77983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:48:59.388 [DEBUG] [Thread-77983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:48:59.388 [DEBUG] [Thread-77983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:48:59.397 [DEBUG] [Thread-77983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:48:59.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:48:59.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:48:59.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:48:59.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:48:59.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:48:59.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:48:59.428 [DEBUG] [Thread-77983] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:49:05.133 [DEBUG] [Thread-77985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:49:17.750 [DEBUG] [Thread-77986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:49:20.184 [DEBUG] [Thread-77987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:49:29.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:49:29.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:49:29.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:49:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 49, 16), 1.28, 91.46, 0.0, 39.31, 9.69, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:49:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:49:16
2025-12-12T22:49:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:49:30.414 [DEBUG] [Thread-77988] [transport.py] [_log()] starting thread (client mode): 0xf572ea40
2025-12-12T22:49:30.414 [DEBUG] [Thread-77988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:49:30.434 [DEBUG] [Thread-77988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:49:30.434 [INFO] [Thread-77988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:49:30.437 [DEBUG] [Thread-77988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:49:30.437 [DEBUG] [Thread-77988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:49:30.437 [DEBUG] [Thread-77988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:49:30.437 [DEBUG] [Thread-77988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:49:30.437 [DEBUG] [Thread-77988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:49:30.437 [DEBUG] [Thread-77988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] client lang: <none>
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] server lang: <none>
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] kex follows: False
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] Compression: none
2025-12-12T22:49:30.438 [DEBUG] [Thread-77988] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:49:30.445 [DEBUG] [Thread-77988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:49:30.445 [DEBUG] [Thread-77988] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:49:30.446 [DEBUG] [Thread-77988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:49:30.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:49:30.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:49:30.447 [DEBUG] [Thread-77988] [transport.py] [_log()] userauth is OK
2025-12-12T22:49:30.447 [DEBUG] [Thread-77988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:49:30.447 [DEBUG] [Thread-77988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:49:30.447 [DEBUG] [Thread-77988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:49:30.447 [DEBUG] [Thread-77988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:49:30.458 [INFO] [Thread-77988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:49:30.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:49:31.037 [DEBUG] [Thread-77988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:49:31.038 [DEBUG] [Thread-77988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:49:31.038 [DEBUG] [Thread-77988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:49:31.079 [DEBUG] [Thread-77988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:49:31.079 [DEBUG] [Thread-77988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:49:31.082 [DEBUG] [Thread-77988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:49:31.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:49:31.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:49:31.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:49:31.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:49:31.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:49:31.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:49:31.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:49:31.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:49:31.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:49:31.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.867460 -999.00   +9.40  43.25     92   +8.30 1 3 2 3 1     0    0 1.24 -3.82 ----- 41.6 43.2 294.4 48.2 11.0 -2.0 10.7 -2.0 10.2 -1.6 10.6 -1.4
2025-12-12T22:49:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:49:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:49:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.867460
2025-12-12T22:49:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:49:31.109 [DEBUG] [Thread-77988] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:49:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:49:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:49:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:49:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:49:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:49:16', tmtdew=1.28, humidity=91.46, cloud=0.0, wind=39.31, temperature=9.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:49:08.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:49:31.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:49:31.203 [DEBUG] [Thread-77991] [transport.py] [_log()] starting thread (client mode): 0xf5773490
2025-12-12T22:49:31.203 [DEBUG] [Thread-77991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:49:31.219 [DEBUG] [Thread-77991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:49:31.219 [INFO] [Thread-77991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:49:31.227 [DEBUG] [Thread-77991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] client lang: <none>
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] server lang: <none>
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] kex follows: False
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] Compression: none
2025-12-12T22:49:31.228 [DEBUG] [Thread-77991] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:49:31.285 [DEBUG] [Thread-77991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:49:31.286 [DEBUG] [Thread-77991] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:49:31.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:49:31.287 [DEBUG] [Thread-77991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:49:31.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:49:31.341 [DEBUG] [Thread-77991] [transport.py] [_log()] userauth is OK
2025-12-12T22:49:31.342 [DEBUG] [Thread-77991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:49:31.342 [DEBUG] [Thread-77991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:49:31.342 [DEBUG] [Thread-77991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:49:31.342 [DEBUG] [Thread-77991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:49:31.361 [INFO] [Thread-77991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:49:31.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:49:31.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:49:32.212 [DEBUG] [Thread-77991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:49:32.213 [DEBUG] [Thread-77991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:49:32.261 [DEBUG] [Thread-77991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:49:32.261 [DEBUG] [Thread-77991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:49:32.270 [DEBUG] [Thread-77991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:49:32.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:49: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')
2025-12-12T22:49: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
2025-12-12T22:49:32.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:49:32.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:49:32.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:49:32.304 [DEBUG] [Thread-77991] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:49:35.214 [DEBUG] [Thread-77993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:49:41.901 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:49:41.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:49:50.257 [DEBUG] [Thread-77994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:50:02.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:50:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:50:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 49, 48), 1.28, 91.96, 0.0, 35.3, 9.63, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:50:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:49:48
2025-12-12T22:50:03.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:50:03.294 [DEBUG] [Thread-77995] [transport.py] [_log()] starting thread (client mode): 0xf5788d00
2025-12-12T22:50:03.294 [DEBUG] [Thread-77995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:50:03.308 [DEBUG] [Thread-77995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:50:03.308 [INFO] [Thread-77995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:50:03.311 [DEBUG] [Thread-77995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:50:03.311 [DEBUG] [Thread-77995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:50:03.311 [DEBUG] [Thread-77995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:50:03.311 [DEBUG] [Thread-77995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:03.311 [DEBUG] [Thread-77995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] client lang: <none>
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] server lang: <none>
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] kex follows: False
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] Compression: none
2025-12-12T22:50:03.312 [DEBUG] [Thread-77995] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:50:03.326 [DEBUG] [Thread-77995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:50:03.327 [DEBUG] [Thread-77995] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:50:03.327 [DEBUG] [Thread-77995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:50:03.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:50:03.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:50:03.329 [DEBUG] [Thread-77995] [transport.py] [_log()] userauth is OK
2025-12-12T22:50:03.329 [DEBUG] [Thread-77995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:50:03.329 [DEBUG] [Thread-77995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:50:03.329 [DEBUG] [Thread-77995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:50:03.329 [DEBUG] [Thread-77995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:50:03.353 [INFO] [Thread-77995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:50:03.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:50:04.050 [DEBUG] [Thread-77995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:50:04.050 [DEBUG] [Thread-77995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:50:04.051 [DEBUG] [Thread-77995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:50:04.091 [DEBUG] [Thread-77995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:50:04.091 [DEBUG] [Thread-77995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:50:04.094 [DEBUG] [Thread-77995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:50:04.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:50:04.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:50:04.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:50:04.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:50:04.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:50:04.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:50:04.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:50:04.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:50:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:50:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.867807 -999.00   +9.30  41.39     93   +8.30 1 3 2 3 1     0    0 1.18 -5.76 ----- 47.9 41.4 308.4 51.1 10.9 -2.0 10.6 -2.0 10.2 -1.8 10.5 -1.3
2025-12-12T22:50:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:50:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:50:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.867807
2025-12-12T22:50:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:50:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:50:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:50:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:50:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:50:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:49:48', tmtdew=1.28, humidity=91.96, cloud=0.0, wind=35.3, temperature=9.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:49:38.525', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:50:04.117 [DEBUG] [Thread-77995] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:50:04.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:50:04.214 [DEBUG] [Thread-77998] [transport.py] [_log()] starting thread (client mode): 0xf57c8820
2025-12-12T22:50:04.214 [DEBUG] [Thread-77998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:50:04.228 [DEBUG] [Thread-77998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:50:04.229 [INFO] [Thread-77998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:50:04.237 [DEBUG] [Thread-77998] [transport.py] [_log()] client lang: <none>
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] server lang: <none>
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] kex follows: False
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] Compression: none
2025-12-12T22:50:04.238 [DEBUG] [Thread-77998] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:50:04.294 [DEBUG] [Thread-77998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:50:04.295 [DEBUG] [Thread-77998] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:50:04.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:50:04.296 [DEBUG] [Thread-77998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:50:04.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:50:04.351 [DEBUG] [Thread-77998] [transport.py] [_log()] userauth is OK
2025-12-12T22:50:04.351 [DEBUG] [Thread-77998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:50:04.351 [DEBUG] [Thread-77998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:50:04.351 [DEBUG] [Thread-77998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:50:04.351 [DEBUG] [Thread-77998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:50:04.369 [INFO] [Thread-77998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:50:04.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:50:04.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:50:05.212 [DEBUG] [Thread-77998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:50:05.212 [DEBUG] [Thread-77998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:50:05.260 [DEBUG] [Thread-77998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:50:05.260 [DEBUG] [Thread-77998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:50:05.269 [DEBUG] [Thread-77998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:50:05.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:50:05.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:50:05.284 [DEBUG] [Thread-78000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:05.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:50:05.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:50:05.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:50:05.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:50:05.303 [DEBUG] [Thread-77998] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:50:17.826 [DEBUG] [Thread-78001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:20.325 [DEBUG] [Thread-78002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:50:35.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:50:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:50:35.354 [DEBUG] [Thread-78003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 50, 20), 1.28, 92.0, 0.0, 38.48, 9.59, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:50:20
2025-12-12T22:50:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:50:36.301 [DEBUG] [Thread-78004] [transport.py] [_log()] starting thread (client mode): 0xfabc6da0
2025-12-12T22:50:36.301 [DEBUG] [Thread-78004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:50:36.321 [DEBUG] [Thread-78004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:50:36.321 [INFO] [Thread-78004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:50:36.324 [DEBUG] [Thread-78004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] client lang: <none>
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] server lang: <none>
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] kex follows: False
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] Compression: none
2025-12-12T22:50:36.325 [DEBUG] [Thread-78004] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:50:36.343 [DEBUG] [Thread-78004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:50:36.343 [DEBUG] [Thread-78004] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:50:36.344 [DEBUG] [Thread-78004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:50:36.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:50:36.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:50:36.346 [DEBUG] [Thread-78004] [transport.py] [_log()] userauth is OK
2025-12-12T22:50:36.346 [DEBUG] [Thread-78004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:50:36.346 [DEBUG] [Thread-78004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:50:36.347 [DEBUG] [Thread-78004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:50:36.347 [DEBUG] [Thread-78004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:50:36.370 [INFO] [Thread-78004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:50:36.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:50:37.038 [DEBUG] [Thread-78004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:50:37.038 [DEBUG] [Thread-78004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:50:37.039 [DEBUG] [Thread-78004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:50:37.079 [DEBUG] [Thread-78004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:50:37.079 [DEBUG] [Thread-78004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:50:37.082 [DEBUG] [Thread-78004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:50:37.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:50:37.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:50:37.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:50:37.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:50:37.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:50:37.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:50:37.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:50:37.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:50:37.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:50:37.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.868154 -999.00   +9.20  35.84     93   +8.20 1 3 2 3 1     0    0 1.11 -8.49 ----- 36.9 35.8 298.0 55.5 10.9 -2.4 10.6 -1.6 10.0 -1.8 10.4 -1.1
2025-12-12T22:50:37.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:50:37.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:50:37.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.868154
2025-12-12T22:50:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:50:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:50:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:50:37.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:50:37.105 [DEBUG] [Thread-78004] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:50:37.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:50:37.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:50:20', tmtdew=1.28, humidity=92.0, cloud=0.0, wind=38.48, temperature=9.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:50:08.506', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:50:37.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:50:37.202 [DEBUG] [Thread-78007] [transport.py] [_log()] starting thread (client mode): 0xf572d6c0
2025-12-12T22:50:37.202 [DEBUG] [Thread-78007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:50:37.217 [DEBUG] [Thread-78007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:50:37.217 [INFO] [Thread-78007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:50:37.225 [DEBUG] [Thread-78007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] client lang: <none>
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] server lang: <none>
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] kex follows: False
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] Compression: none
2025-12-12T22:50:37.226 [DEBUG] [Thread-78007] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:50:37.281 [DEBUG] [Thread-78007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:50:37.281 [DEBUG] [Thread-78007] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:50:37.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:50:37.282 [DEBUG] [Thread-78007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:50:37.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:50:37.337 [DEBUG] [Thread-78007] [transport.py] [_log()] userauth is OK
2025-12-12T22:50:37.337 [DEBUG] [Thread-78007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:50:37.338 [DEBUG] [Thread-78007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:50:37.338 [DEBUG] [Thread-78007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:50:37.338 [DEBUG] [Thread-78007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:50:37.362 [INFO] [Thread-78007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:50:37.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:50:37.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:50:38.164 [DEBUG] [Thread-78007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:50:38.164 [DEBUG] [Thread-78007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:50:38.212 [DEBUG] [Thread-78007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:50:38.212 [DEBUG] [Thread-78007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:50:38.221 [DEBUG] [Thread-78007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:50:38.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:50: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')
2025-12-12T22:50:38.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:50:38.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:50:38.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:50:38.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:50:38.255 [DEBUG] [Thread-78007] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:50:42.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:42.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:50:50.381 [DEBUG] [Thread-78009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:05.432 [DEBUG] [Thread-78010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:08.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:51:08.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:51:08.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:51:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 50, 52), 1.2, 92.2, 0.0, 42.45, 9.58, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:51:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:50:52
2025-12-12T22:51:09.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:51:09.211 [DEBUG] [Thread-78011] [transport.py] [_log()] starting thread (client mode): 0xf57c9a20
2025-12-12T22:51:09.211 [DEBUG] [Thread-78011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:51:09.232 [DEBUG] [Thread-78011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:51:09.232 [INFO] [Thread-78011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] client lang: <none>
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] server lang: <none>
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] kex follows: False
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] Compression: none
2025-12-12T22:51:09.236 [DEBUG] [Thread-78011] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:51:09.253 [DEBUG] [Thread-78011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:51:09.254 [DEBUG] [Thread-78011] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:51:09.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:51:09.255 [DEBUG] [Thread-78011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:51:09.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:51:09.257 [DEBUG] [Thread-78011] [transport.py] [_log()] userauth is OK
2025-12-12T22:51:09.257 [DEBUG] [Thread-78011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:51:09.257 [DEBUG] [Thread-78011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:51:09.257 [DEBUG] [Thread-78011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:51:09.257 [DEBUG] [Thread-78011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:51:09.275 [INFO] [Thread-78011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:51:09.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:51:09.874 [DEBUG] [Thread-78011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:51:09.874 [DEBUG] [Thread-78011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:51:09.875 [DEBUG] [Thread-78011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:51:09.916 [DEBUG] [Thread-78011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:51:09.916 [DEBUG] [Thread-78011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:51:09.919 [DEBUG] [Thread-78011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:51:09.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:51:09.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:51:09.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:51:09.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:51:09.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:51:09.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:51:09.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:51:09.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:51:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:51:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.868502 -999.00   +9.30  36.67     93   +8.30 1 3 2 3 1     0    0 1.03 -10.18 ----- 40.5 36.7 309.8 51.1 10.8 -1.7 10.6 -1.4 10.0 -1.5 10.4 -0.9
2025-12-12T22:51:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:51:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:51:09.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.868502
2025-12-12T22:51:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:51:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:51:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:51:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:51:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:51:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:50:52', tmtdew=1.2, humidity=92.2, cloud=0.0, wind=42.45, temperature=9.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:50:38.573', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:51:09.944 [DEBUG] [Thread-78011] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:51:10.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:51:10.040 [DEBUG] [Thread-78014] [transport.py] [_log()] starting thread (client mode): 0xfabc6e00
2025-12-12T22:51:10.040 [DEBUG] [Thread-78014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:51:10.057 [DEBUG] [Thread-78014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:51:10.057 [INFO] [Thread-78014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:51:10.065 [DEBUG] [Thread-78014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:51:10.065 [DEBUG] [Thread-78014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:51:10.065 [DEBUG] [Thread-78014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:51:10.065 [DEBUG] [Thread-78014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:10.065 [DEBUG] [Thread-78014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:10.065 [DEBUG] [Thread-78014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] client lang: <none>
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] server lang: <none>
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] kex follows: False
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] Compression: none
2025-12-12T22:51:10.066 [DEBUG] [Thread-78014] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:51:10.123 [DEBUG] [Thread-78014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:51:10.123 [DEBUG] [Thread-78014] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:51:10.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:51:10.125 [DEBUG] [Thread-78014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:51:10.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:51:10.179 [DEBUG] [Thread-78014] [transport.py] [_log()] userauth is OK
2025-12-12T22:51:10.180 [DEBUG] [Thread-78014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:51:10.180 [DEBUG] [Thread-78014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:51:10.180 [DEBUG] [Thread-78014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:51:10.180 [DEBUG] [Thread-78014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:51:10.202 [INFO] [Thread-78014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:51:10.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:51:10.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:51:11.004 [DEBUG] [Thread-78014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:51:11.004 [DEBUG] [Thread-78014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:51:11.052 [DEBUG] [Thread-78014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:51:11.052 [DEBUG] [Thread-78014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:51:11.060 [DEBUG] [Thread-78014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:51:11.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:51:11.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:51:11.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:51:11.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:51:11.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:51:11.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:51:11.095 [DEBUG] [Thread-78014] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:51:17.900 [DEBUG] [Thread-78016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:20.461 [DEBUG] [Thread-78017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:35.514 [DEBUG] [Thread-78018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:41.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:51:41.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:51:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:51:41.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 51, 24), 1.19, 92.23, 0.0, 39.06, 9.53, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:51:41.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:51:24
2025-12-12T22:51:41.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:51:42.079 [DEBUG] [Thread-78019] [transport.py] [_log()] starting thread (client mode): 0xf572d2d0
2025-12-12T22:51:42.079 [DEBUG] [Thread-78019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:51:42.099 [DEBUG] [Thread-78019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:51:42.099 [INFO] [Thread-78019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] client lang: <none>
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] server lang: <none>
2025-12-12T22:51:42.102 [DEBUG] [Thread-78019] [transport.py] [_log()] kex follows: False
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] Compression: none
2025-12-12T22:51:42.103 [DEBUG] [Thread-78019] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:51:42.111 [DEBUG] [Thread-78019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:51:42.111 [DEBUG] [Thread-78019] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:51:42.112 [DEBUG] [Thread-78019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:51:42.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:51:42.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:51:42.113 [DEBUG] [Thread-78019] [transport.py] [_log()] userauth is OK
2025-12-12T22:51:42.113 [DEBUG] [Thread-78019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:51:42.113 [DEBUG] [Thread-78019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:51:42.113 [DEBUG] [Thread-78019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:51:42.113 [DEBUG] [Thread-78019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:51:42.124 [INFO] [Thread-78019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:51:42.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:51:42.311 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:42.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:51:42.754 [DEBUG] [Thread-78019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:51:42.754 [DEBUG] [Thread-78019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:51:42.754 [DEBUG] [Thread-78019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:51:42.796 [DEBUG] [Thread-78019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:51:42.796 [DEBUG] [Thread-78019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:51:42.798 [DEBUG] [Thread-78019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:51:42.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:51:42.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:51:42.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:51:42.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:51:42.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:51:42.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:51:42.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:51:42.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:51:42.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:51:42.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.869196 -999.00   +9.40  32.59     94   +8.50 1 3 2 3 1     0    0 0.87 -14.63 ----- 39.9 32.6 299.0 47.3 10.8 -1.6 10.4 -1.5 9.9 -0.9 10.3 -0.9
2025-12-12T22:51:42.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:51:42.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:51:42.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.869196
2025-12-12T22:51:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:51:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:51:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:51:42.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:51:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:51:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:51:24', tmtdew=1.19, humidity=92.23, cloud=0.0, wind=39.06, temperature=9.53, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:51:38.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:51:42.821 [DEBUG] [Thread-78019] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:51:42.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:51:42.920 [DEBUG] [Thread-78022] [transport.py] [_log()] starting thread (client mode): 0xf57c8850
2025-12-12T22:51:42.920 [DEBUG] [Thread-78022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:51:42.934 [DEBUG] [Thread-78022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:51:42.934 [INFO] [Thread-78022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:51:42.941 [DEBUG] [Thread-78022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:51:42.941 [DEBUG] [Thread-78022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:51:42.941 [DEBUG] [Thread-78022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] client lang: <none>
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] server lang: <none>
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] kex follows: False
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] Compression: none
2025-12-12T22:51:42.942 [DEBUG] [Thread-78022] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:51:42.997 [DEBUG] [Thread-78022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:51:42.997 [DEBUG] [Thread-78022] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:51:42.998 [DEBUG] [Thread-78022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:51:42.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:51:42.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:51:43.054 [DEBUG] [Thread-78022] [transport.py] [_log()] userauth is OK
2025-12-12T22:51:43.054 [DEBUG] [Thread-78022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:51:43.054 [DEBUG] [Thread-78022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:51:43.054 [DEBUG] [Thread-78022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:51:43.054 [DEBUG] [Thread-78022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:51:43.073 [INFO] [Thread-78022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:51:43.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:51:43.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:51:43.876 [DEBUG] [Thread-78022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:51:43.877 [DEBUG] [Thread-78022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:51:43.924 [DEBUG] [Thread-78022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:51:43.925 [DEBUG] [Thread-78022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:51:43.933 [DEBUG] [Thread-78022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:51:43.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:51:43.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:51:43.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:51:43.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:51:43.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:51:43.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:51:43.968 [DEBUG] [Thread-78022] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:51:50.544 [DEBUG] [Thread-78024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:05.587 [DEBUG] [Thread-78025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:52:13.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:52:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:52:14.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 51, 56), 1.13, 92.8, 0.0, 43.23, 9.46, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:52:14.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:51:56
2025-12-12T22:52:14.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:52:14.980 [DEBUG] [Thread-78026] [transport.py] [_log()] starting thread (client mode): 0xfabc7430
2025-12-12T22:52:14.980 [DEBUG] [Thread-78026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:52:15.001 [DEBUG] [Thread-78026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:52:15.001 [INFO] [Thread-78026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] client lang: <none>
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] server lang: <none>
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] kex follows: False
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] Compression: none
2025-12-12T22:52:15.004 [DEBUG] [Thread-78026] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:52:15.014 [DEBUG] [Thread-78026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:52:15.014 [DEBUG] [Thread-78026] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:52:15.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:52:15.014 [DEBUG] [Thread-78026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:52:15.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:52:15.015 [DEBUG] [Thread-78026] [transport.py] [_log()] userauth is OK
2025-12-12T22:52:15.015 [DEBUG] [Thread-78026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:52:15.015 [DEBUG] [Thread-78026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:52:15.015 [DEBUG] [Thread-78026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:52:15.015 [DEBUG] [Thread-78026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:52:15.025 [INFO] [Thread-78026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:52:15.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:52:15.624 [DEBUG] [Thread-78026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:52:15.624 [DEBUG] [Thread-78026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:52:15.624 [DEBUG] [Thread-78026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:52:15.664 [DEBUG] [Thread-78026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:52:15.664 [DEBUG] [Thread-78026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:52:15.666 [DEBUG] [Thread-78026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:52:15.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:52:15.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:52:15.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:52:15.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:52:15.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:52:15.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:52:15.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.869543 -999.00   +9.30  41.23     94   +8.40 1 3 2 3 1     0    0 0.85 -15.73 ----- 40.5 41.2 300.4 51.7 10.7 -1.6 10.4 -1.5 9.9 -0.9 10.3 -1.0
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.869543
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:52:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:51:56', tmtdew=1.13, humidity=92.8, cloud=0.0, wind=43.23, temperature=9.46, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:52:08.515', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:52:15.684 [DEBUG] [Thread-78026] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:52:15.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:52:15.770 [DEBUG] [Thread-78029] [transport.py] [_log()] starting thread (client mode): 0xfabc61d0
2025-12-12T22:52:15.770 [DEBUG] [Thread-78029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:52:15.784 [DEBUG] [Thread-78029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:52:15.784 [INFO] [Thread-78029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] client lang: <none>
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] server lang: <none>
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] kex follows: False
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] Compression: none
2025-12-12T22:52:15.792 [DEBUG] [Thread-78029] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:52:15.846 [DEBUG] [Thread-78029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:52:15.847 [DEBUG] [Thread-78029] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:52:15.847 [DEBUG] [Thread-78029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:52:15.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:52:15.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:52:15.904 [DEBUG] [Thread-78029] [transport.py] [_log()] userauth is OK
2025-12-12T22:52:15.904 [DEBUG] [Thread-78029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:52:15.904 [DEBUG] [Thread-78029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:52:15.904 [DEBUG] [Thread-78029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:52:15.904 [DEBUG] [Thread-78029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:52:15.917 [INFO] [Thread-78029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:52:15.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:52:15.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:52:16.717 [DEBUG] [Thread-78029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:52:16.717 [DEBUG] [Thread-78029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:52:16.766 [DEBUG] [Thread-78029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:52:16.766 [DEBUG] [Thread-78029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:52:16.774 [DEBUG] [Thread-78029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:52:16.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:52:16.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:52: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') -> 00000000
2025-12-12T22:52:16.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:52:16.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:52:16.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:52:16.806 [DEBUG] [Thread-78029] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:52:17.969 [DEBUG] [Thread-78031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:20.614 [DEBUG] [Thread-78032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:35.654 [DEBUG] [Thread-78033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:42.520 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:42.521 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:52:46.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:52:46.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:52:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:52:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 52, 28), 1.11, 92.93, 0.0, 41.83, 9.49, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:52:47.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:52:28
2025-12-12T22:52:47.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:52:47.803 [DEBUG] [Thread-78034] [transport.py] [_log()] starting thread (client mode): 0xf57f1450
2025-12-12T22:52:47.803 [DEBUG] [Thread-78034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:52:47.823 [DEBUG] [Thread-78034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:52:47.824 [INFO] [Thread-78034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] client lang: <none>
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] server lang: <none>
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] kex follows: False
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] Compression: none
2025-12-12T22:52:47.827 [DEBUG] [Thread-78034] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:52:47.841 [DEBUG] [Thread-78034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:52:47.841 [DEBUG] [Thread-78034] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:52:47.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:52:47.842 [DEBUG] [Thread-78034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:52:47.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:52:47.884 [DEBUG] [Thread-78034] [transport.py] [_log()] userauth is OK
2025-12-12T22:52:47.885 [DEBUG] [Thread-78034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:52:47.885 [DEBUG] [Thread-78034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:52:47.885 [DEBUG] [Thread-78034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:52:47.885 [DEBUG] [Thread-78034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:52:47.907 [INFO] [Thread-78034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:52:47.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:52:48.454 [DEBUG] [Thread-78034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:52:48.454 [DEBUG] [Thread-78034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:52:48.455 [DEBUG] [Thread-78034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:52:48.496 [DEBUG] [Thread-78034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:52:48.496 [DEBUG] [Thread-78034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:52:48.498 [DEBUG] [Thread-78034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:52:48.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:52:48.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:52:48.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:52:48.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:52:48.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:52:48.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:52:48.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:52:48.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:52:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:52:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.869891 -999.00   +9.30  40.85     94   +8.50 1 3 2 3 1     0    0 0.79 -17.71 ----- 44.8 40.9 302.4 49.1 10.7 -1.9 10.4 -1.8 9.9 -1.9 10.4 -1.5
2025-12-12T22:52:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:52:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:52:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.869891
2025-12-12T22:52:48.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:52:48.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:52:48.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:52:48.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:52:48.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:52:48.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:52:28', tmtdew=1.11, humidity=92.93, cloud=0.0, wind=41.83, temperature=9.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:52:38.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:52:48.524 [DEBUG] [Thread-78034] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:52:48.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:52:48.622 [DEBUG] [Thread-78037] [transport.py] [_log()] starting thread (client mode): 0xf57bdde0
2025-12-12T22:52:48.622 [DEBUG] [Thread-78037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:52:48.637 [DEBUG] [Thread-78037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:52:48.637 [INFO] [Thread-78037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:52:48.644 [DEBUG] [Thread-78037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:52:48.644 [DEBUG] [Thread-78037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:52:48.644 [DEBUG] [Thread-78037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:52:48.644 [DEBUG] [Thread-78037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:48.644 [DEBUG] [Thread-78037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] client lang: <none>
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] server lang: <none>
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] kex follows: False
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] Compression: none
2025-12-12T22:52:48.645 [DEBUG] [Thread-78037] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:52:48.703 [DEBUG] [Thread-78037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:52:48.703 [DEBUG] [Thread-78037] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:52:48.703 [DEBUG] [Thread-78037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:52:48.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:52:48.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:52:48.758 [DEBUG] [Thread-78037] [transport.py] [_log()] userauth is OK
2025-12-12T22:52:48.758 [DEBUG] [Thread-78037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:52:48.758 [DEBUG] [Thread-78037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:52:48.758 [DEBUG] [Thread-78037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:52:48.759 [DEBUG] [Thread-78037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:52:48.777 [INFO] [Thread-78037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:52:48.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:52:48.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:52:49.594 [DEBUG] [Thread-78037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:52:49.594 [DEBUG] [Thread-78037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:52:49.642 [DEBUG] [Thread-78037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:52:49.643 [DEBUG] [Thread-78037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:52:49.651 [DEBUG] [Thread-78037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:52:49.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:52:49.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:52:49.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:52:49.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:52:49.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:52:49.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:52:49.684 [DEBUG] [Thread-78037] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:52:50.683 [DEBUG] [Thread-78039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:05.724 [DEBUG] [Thread-78040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:18.046 [DEBUG] [Thread-78041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:53:19.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:53:19.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:53:20.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 52, 28), 1.11, 92.93, 0.0, 41.83, 9.49, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:53:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:52:28
2025-12-12T22:53:20.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:53:20.653 [DEBUG] [Thread-78042] [transport.py] [_log()] starting thread (client mode): 0xf572d930
2025-12-12T22:53:20.653 [DEBUG] [Thread-78042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:53:20.681 [DEBUG] [Thread-78042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:53:20.681 [INFO] [Thread-78042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:53:20.684 [DEBUG] [Thread-78042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:53:20.684 [DEBUG] [Thread-78042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:53:20.684 [DEBUG] [Thread-78042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:53:20.684 [DEBUG] [Thread-78042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:20.684 [DEBUG] [Thread-78042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] client lang: <none>
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] server lang: <none>
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] kex follows: False
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] Compression: none
2025-12-12T22:53:20.685 [DEBUG] [Thread-78042] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:53:20.704 [DEBUG] [Thread-78042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:53:20.704 [DEBUG] [Thread-78042] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:53:20.705 [DEBUG] [Thread-78042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:53:20.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:53:20.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:53:20.707 [DEBUG] [Thread-78042] [transport.py] [_log()] userauth is OK
2025-12-12T22:53:20.707 [DEBUG] [Thread-78042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:53:20.707 [DEBUG] [Thread-78042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:53:20.708 [DEBUG] [Thread-78042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:53:20.708 [DEBUG] [Thread-78042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:53:20.725 [INFO] [Thread-78042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:53:20.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:53:20.753 [DEBUG] [Thread-78044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:21.287 [DEBUG] [Thread-78042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:53:21.287 [DEBUG] [Thread-78042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:53:21.288 [DEBUG] [Thread-78042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:53:21.328 [DEBUG] [Thread-78042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:53:21.328 [DEBUG] [Thread-78042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:53:21.331 [DEBUG] [Thread-78042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:53:21.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:53:21.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:53:21.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:53:21.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:53:21.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:53:21.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:53:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:53:21.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:53:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:53:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.870238 -999.00   +9.30  44.10     94   +8.40 1 3 2 3 1     0    0 0.67 -20.16 ----- 41.9 44.1 309.8 46.4 10.7 -1.8 10.4 -1.5 9.9 -1.0 10.4 -1.1
2025-12-12T22:53:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:53:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:53:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.870238
2025-12-12T22:53:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:53:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:53:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:53:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:53:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:53:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:52:28', tmtdew=1.11, humidity=92.93, cloud=0.0, wind=41.83, temperature=9.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:53:08.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:53:21.359 [DEBUG] [Thread-78042] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:53:21.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:53:21.456 [DEBUG] [Thread-78046] [transport.py] [_log()] starting thread (client mode): 0xf572f820
2025-12-12T22:53:21.456 [DEBUG] [Thread-78046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:53:21.471 [DEBUG] [Thread-78046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:53:21.471 [INFO] [Thread-78046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:53:21.478 [DEBUG] [Thread-78046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:53:21.478 [DEBUG] [Thread-78046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:53:21.478 [DEBUG] [Thread-78046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] client lang: <none>
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] server lang: <none>
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] kex follows: False
2025-12-12T22:53:21.479 [DEBUG] [Thread-78046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:53:21.480 [DEBUG] [Thread-78046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:53:21.480 [DEBUG] [Thread-78046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:53:21.480 [DEBUG] [Thread-78046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:53:21.480 [DEBUG] [Thread-78046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:53:21.481 [DEBUG] [Thread-78046] [transport.py] [_log()] Compression: none
2025-12-12T22:53:21.481 [DEBUG] [Thread-78046] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:53:21.541 [DEBUG] [Thread-78046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:53:21.541 [DEBUG] [Thread-78046] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:53:21.542 [DEBUG] [Thread-78046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:53:21.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:53:21.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:53:21.597 [DEBUG] [Thread-78046] [transport.py] [_log()] userauth is OK
2025-12-12T22:53:21.598 [DEBUG] [Thread-78046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:53:21.598 [DEBUG] [Thread-78046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:53:21.598 [DEBUG] [Thread-78046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:53:21.598 [DEBUG] [Thread-78046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:53:21.617 [INFO] [Thread-78046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:53:21.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:53:21.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:53:22.425 [DEBUG] [Thread-78046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:53:22.425 [DEBUG] [Thread-78046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:53:22.473 [DEBUG] [Thread-78046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:53:22.473 [DEBUG] [Thread-78046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:53:22.482 [DEBUG] [Thread-78046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:53:22.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:53:22.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:53:22.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:53:22.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:53:22.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:53:22.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:53:22.516 [DEBUG] [Thread-78046] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:53:35.778 [DEBUG] [Thread-78048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:42.726 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:42.726 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:50.813 [DEBUG] [Thread-78049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:53:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:53:52.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:53:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:53:53.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 53, 32), 1.05, 92.96, 0.0, 40.63, 9.48, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:53:53.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:53:32
2025-12-12T22:53:53.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:53:53.500 [DEBUG] [Thread-78050] [transport.py] [_log()] starting thread (client mode): 0xfabc7fa0
2025-12-12T22:53:53.500 [DEBUG] [Thread-78050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:53:53.521 [DEBUG] [Thread-78050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:53:53.521 [INFO] [Thread-78050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:53:53.524 [DEBUG] [Thread-78050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:53:53.524 [DEBUG] [Thread-78050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:53:53.524 [DEBUG] [Thread-78050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] client lang: <none>
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] server lang: <none>
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] kex follows: False
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:53:53.525 [DEBUG] [Thread-78050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:53:53.526 [DEBUG] [Thread-78050] [transport.py] [_log()] Compression: none
2025-12-12T22:53:53.526 [DEBUG] [Thread-78050] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:53:53.543 [DEBUG] [Thread-78050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:53:53.543 [DEBUG] [Thread-78050] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:53:53.544 [DEBUG] [Thread-78050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:53:53.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:53:53.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:53:53.546 [DEBUG] [Thread-78050] [transport.py] [_log()] userauth is OK
2025-12-12T22:53:53.546 [DEBUG] [Thread-78050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:53:53.547 [DEBUG] [Thread-78050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:53:53.547 [DEBUG] [Thread-78050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:53:53.547 [DEBUG] [Thread-78050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:53:53.566 [INFO] [Thread-78050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:53:53.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:53:54.203 [DEBUG] [Thread-78050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:53:54.204 [DEBUG] [Thread-78050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:53:54.204 [DEBUG] [Thread-78050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:53:54.245 [DEBUG] [Thread-78050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:53:54.245 [DEBUG] [Thread-78050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:53:54.248 [DEBUG] [Thread-78050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:53:54.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:53:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:53:54.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:53:54.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:53:54.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:53:54.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:53:54.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:53:54.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:53:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:53:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.870238 -999.00   +9.30  44.10     94   +8.40 1 3 2 3 1     0    0 0.67 -20.16 ----- 41.9 44.1 309.8 46.4 10.7 -1.8 10.4 -1.5 9.9 -1.0 10.4 -1.1
2025-12-12T22:53:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:53:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:53:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.870238
2025-12-12T22:53:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:53:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:53:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:53:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:53:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:53:54.273 [DEBUG] [Thread-78050] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:53:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:53:32', tmtdew=1.05, humidity=92.96, cloud=0.0, wind=40.63, temperature=9.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:53:08.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:53:54.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:53:54.371 [DEBUG] [Thread-78053] [transport.py] [_log()] starting thread (client mode): 0xfabc7610
2025-12-12T22:53:54.371 [DEBUG] [Thread-78053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:53:54.386 [DEBUG] [Thread-78053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:53:54.386 [INFO] [Thread-78053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] client lang: <none>
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] server lang: <none>
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] kex follows: False
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:53:54.394 [DEBUG] [Thread-78053] [transport.py] [_log()] Compression: none
2025-12-12T22:53:54.395 [DEBUG] [Thread-78053] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:53:54.451 [DEBUG] [Thread-78053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:53:54.452 [DEBUG] [Thread-78053] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:53:54.452 [DEBUG] [Thread-78053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:53:54.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:53:54.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:53:54.508 [DEBUG] [Thread-78053] [transport.py] [_log()] userauth is OK
2025-12-12T22:53:54.508 [DEBUG] [Thread-78053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:53:54.508 [DEBUG] [Thread-78053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:53:54.508 [DEBUG] [Thread-78053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:53:54.508 [DEBUG] [Thread-78053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:53:54.530 [INFO] [Thread-78053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:53:54.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:53:54.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:53:55.375 [DEBUG] [Thread-78053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:53:55.375 [DEBUG] [Thread-78053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:53:55.423 [DEBUG] [Thread-78053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:53:55.423 [DEBUG] [Thread-78053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:53:55.431 [DEBUG] [Thread-78053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:53:55.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:53:55.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:53:55.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:53:55.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:53:55.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:53:55.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:53:55.469 [DEBUG] [Thread-78053] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:54:05.840 [DEBUG] [Thread-78055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:18.124 [DEBUG] [Thread-78056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:20.871 [DEBUG] [Thread-78057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:54:25.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:54:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:54:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 54, 4), 1.04, 93.06, 0.0, 37.6, 9.49, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:54:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:54:04
2025-12-12T22:54:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:54:26.426 [DEBUG] [Thread-78058] [transport.py] [_log()] starting thread (client mode): 0xfabc5c30
2025-12-12T22:54:26.426 [DEBUG] [Thread-78058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:54:26.446 [DEBUG] [Thread-78058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:54:26.446 [INFO] [Thread-78058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] client lang: <none>
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] server lang: <none>
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] kex follows: False
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:54:26.449 [DEBUG] [Thread-78058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:54:26.450 [DEBUG] [Thread-78058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:54:26.450 [DEBUG] [Thread-78058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:54:26.450 [DEBUG] [Thread-78058] [transport.py] [_log()] Compression: none
2025-12-12T22:54:26.450 [DEBUG] [Thread-78058] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:54:26.469 [DEBUG] [Thread-78058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:54:26.470 [DEBUG] [Thread-78058] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:54:26.471 [DEBUG] [Thread-78058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:54:26.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:54:26.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:54:26.473 [DEBUG] [Thread-78058] [transport.py] [_log()] userauth is OK
2025-12-12T22:54:26.473 [DEBUG] [Thread-78058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:54:26.473 [DEBUG] [Thread-78058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:54:26.474 [DEBUG] [Thread-78058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:54:26.474 [DEBUG] [Thread-78058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:54:26.494 [INFO] [Thread-78058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:54:26.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:54:27.147 [DEBUG] [Thread-78058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:54:27.148 [DEBUG] [Thread-78058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:54:27.148 [DEBUG] [Thread-78058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:54:27.189 [DEBUG] [Thread-78058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:54:27.189 [DEBUG] [Thread-78058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:54:27.192 [DEBUG] [Thread-78058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:54:27.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:54:27.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:54:27.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:54:27.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:54:27.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:54:27.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:54:27.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:54:27.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:54:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:54:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.870585 -999.00   +9.30  45.89     94   +8.40 1 3 2 3 1     0    0 0.64 -21.47 ----- 40.8 45.9 311.8 53.9 10.7 -1.6 10.4 -1.9 9.9 -1.1 10.3 -1.1
2025-12-12T22:54:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:54:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:54:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.870585
2025-12-12T22:54:27.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:54:27.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:54:27.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:54:27.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:54:27.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:54:27.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:54:04', tmtdew=1.04, humidity=93.06, cloud=0.0, wind=37.6, temperature=9.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:53:38.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:54:27.220 [DEBUG] [Thread-78058] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:54:27.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:54:27.317 [DEBUG] [Thread-78061] [transport.py] [_log()] starting thread (client mode): 0xfabc70a0
2025-12-12T22:54:27.318 [DEBUG] [Thread-78061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:54:27.332 [DEBUG] [Thread-78061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:54:27.332 [INFO] [Thread-78061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] client lang: <none>
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] server lang: <none>
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] kex follows: False
2025-12-12T22:54:27.340 [DEBUG] [Thread-78061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:54:27.341 [DEBUG] [Thread-78061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:54:27.341 [DEBUG] [Thread-78061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:54:27.341 [DEBUG] [Thread-78061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:54:27.341 [DEBUG] [Thread-78061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:54:27.341 [DEBUG] [Thread-78061] [transport.py] [_log()] Compression: none
2025-12-12T22:54:27.341 [DEBUG] [Thread-78061] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:54:27.399 [DEBUG] [Thread-78061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:54:27.399 [DEBUG] [Thread-78061] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:54:27.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:54:27.400 [DEBUG] [Thread-78061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:54:27.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:54:27.454 [DEBUG] [Thread-78061] [transport.py] [_log()] userauth is OK
2025-12-12T22:54:27.455 [DEBUG] [Thread-78061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:54:27.455 [DEBUG] [Thread-78061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:54:27.455 [DEBUG] [Thread-78061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:54:27.455 [DEBUG] [Thread-78061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:54:27.474 [INFO] [Thread-78061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:54:27.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:54:27.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:54:28.326 [DEBUG] [Thread-78061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:54:28.327 [DEBUG] [Thread-78061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:54:28.375 [DEBUG] [Thread-78061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:54:28.375 [DEBUG] [Thread-78061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:54:28.384 [DEBUG] [Thread-78061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:54:28.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:54: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')
2025-12-12T22:54: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') -> 00000000
2025-12-12T22:54:28.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:54:28.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:54:28.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:54:28.423 [DEBUG] [Thread-78061] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:54:35.901 [DEBUG] [Thread-78063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:42.931 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:42.932 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:50.952 [DEBUG] [Thread-78064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:54:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:54:58.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:54:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:54:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 54, 36), 0.98, 93.61, 0.0, 39.84, 9.38, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:54:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:54:36
2025-12-12T22:54:59.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:54:59.407 [DEBUG] [Thread-78065] [transport.py] [_log()] starting thread (client mode): 0xf57bdae0
2025-12-12T22:54:59.407 [DEBUG] [Thread-78065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:54:59.428 [DEBUG] [Thread-78065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:54:59.428 [INFO] [Thread-78065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:54:59.431 [DEBUG] [Thread-78065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] client lang: <none>
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] server lang: <none>
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] kex follows: False
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:54:59.432 [DEBUG] [Thread-78065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:54:59.433 [DEBUG] [Thread-78065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:54:59.433 [DEBUG] [Thread-78065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:54:59.433 [DEBUG] [Thread-78065] [transport.py] [_log()] Compression: none
2025-12-12T22:54:59.433 [DEBUG] [Thread-78065] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:54:59.450 [DEBUG] [Thread-78065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:54:59.450 [DEBUG] [Thread-78065] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:54:59.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:54:59.451 [DEBUG] [Thread-78065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:54:59.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:54:59.453 [DEBUG] [Thread-78065] [transport.py] [_log()] userauth is OK
2025-12-12T22:54:59.453 [DEBUG] [Thread-78065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:54:59.453 [DEBUG] [Thread-78065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:54:59.453 [DEBUG] [Thread-78065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:54:59.453 [DEBUG] [Thread-78065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:54:59.476 [INFO] [Thread-78065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:54:59.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:55:00.102 [DEBUG] [Thread-78065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:55:00.102 [DEBUG] [Thread-78065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:55:00.102 [DEBUG] [Thread-78065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:55:00.143 [DEBUG] [Thread-78065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:55:00.143 [DEBUG] [Thread-78065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:55:00.146 [DEBUG] [Thread-78065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:55:00.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:55:00.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:55:00.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:55:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:55:00.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:55:00.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:55:00.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:55:00.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:55:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:55:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.870932 -999.00   +9.10  40.13     94   +8.20 1 3 2 3 1     0    0 0.58 -23.55 ----- 53.8 40.1 306.4 55.5 10.7 -2.9 10.3 -2.0 9.9 -1.3 10.3 -1.3
2025-12-12T22:55:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:55:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:55:00.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.870932
2025-12-12T22:55:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:55:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:55:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:55:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:55:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:55:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:54:36', tmtdew=0.98, humidity=93.61, cloud=0.0, wind=39.84, temperature=9.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:54:08.525', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:55:00.172 [DEBUG] [Thread-78065] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:55:00.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:55:00.268 [DEBUG] [Thread-78068] [transport.py] [_log()] starting thread (client mode): 0xf57beec0
2025-12-12T22:55:00.268 [DEBUG] [Thread-78068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:55:00.283 [DEBUG] [Thread-78068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:55:00.283 [INFO] [Thread-78068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:55:00.290 [DEBUG] [Thread-78068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] client lang: <none>
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] server lang: <none>
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] kex follows: False
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] Compression: none
2025-12-12T22:55:00.291 [DEBUG] [Thread-78068] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:55:00.348 [DEBUG] [Thread-78068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:55:00.349 [DEBUG] [Thread-78068] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:55:00.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:55:00.350 [DEBUG] [Thread-78068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:55:00.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:55:00.405 [DEBUG] [Thread-78068] [transport.py] [_log()] userauth is OK
2025-12-12T22:55:00.405 [DEBUG] [Thread-78068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:55:00.405 [DEBUG] [Thread-78068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:55:00.406 [DEBUG] [Thread-78068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:55:00.406 [DEBUG] [Thread-78068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:55:00.424 [INFO] [Thread-78068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:55:00.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:55:00.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:55:01.220 [DEBUG] [Thread-78068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:55:01.220 [DEBUG] [Thread-78068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:55:01.268 [DEBUG] [Thread-78068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:55:01.268 [DEBUG] [Thread-78068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:55:01.277 [DEBUG] [Thread-78068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:55:01.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:55:01.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:55:01.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:55:01.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:55:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:55:01.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:55:01.312 [DEBUG] [Thread-78068] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:55:05.977 [DEBUG] [Thread-78070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:55:18.201 [DEBUG] [Thread-78071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:55:21.011 [DEBUG] [Thread-78072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:55:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:55:31.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:55:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:55:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 55, 8), 0.97, 93.66, 0.0, 38.75, 9.36, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:55:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:55:08
2025-12-12T22:55:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:55:32.344 [DEBUG] [Thread-78073] [transport.py] [_log()] starting thread (client mode): 0xf57f1450
2025-12-12T22:55:32.345 [DEBUG] [Thread-78073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:55:32.364 [DEBUG] [Thread-78073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:55:32.364 [INFO] [Thread-78073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] client lang: <none>
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] server lang: <none>
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] kex follows: False
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:55:32.367 [DEBUG] [Thread-78073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:55:32.368 [DEBUG] [Thread-78073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:55:32.368 [DEBUG] [Thread-78073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:55:32.368 [DEBUG] [Thread-78073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:55:32.368 [DEBUG] [Thread-78073] [transport.py] [_log()] Compression: none
2025-12-12T22:55:32.368 [DEBUG] [Thread-78073] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:55:32.383 [DEBUG] [Thread-78073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:55:32.383 [DEBUG] [Thread-78073] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:55:32.383 [DEBUG] [Thread-78073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:55:32.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:55:32.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:55:32.384 [DEBUG] [Thread-78073] [transport.py] [_log()] userauth is OK
2025-12-12T22:55:32.384 [DEBUG] [Thread-78073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:55:32.384 [DEBUG] [Thread-78073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:55:32.384 [DEBUG] [Thread-78073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:55:32.385 [DEBUG] [Thread-78073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:55:32.403 [INFO] [Thread-78073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:55:32.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:55:33.038 [DEBUG] [Thread-78073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:55:33.038 [DEBUG] [Thread-78073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:55:33.038 [DEBUG] [Thread-78073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:55:33.079 [DEBUG] [Thread-78073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:55:33.082 [DEBUG] [Thread-78073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:55:33.084 [DEBUG] [Thread-78073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:55:33.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:55:33.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:55:33.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:55:33.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:55:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:55:33.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:55:33.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.871279 -999.00   +8.90  49.05     94   +8.00 1 3 2 3 1     0    0 0.56 -24.20 ----- 47.9 49.0 312.2 59.8 10.6 -2.1 10.4 -1.8 9.9 -1.4 10.2 -1.3
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.871279
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:55:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:55:08', tmtdew=0.97, humidity=93.66, cloud=0.0, wind=38.75, temperature=9.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:54:38.506', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:55:33.104 [DEBUG] [Thread-78073] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:55:33.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:55:33.206 [DEBUG] [Thread-78076] [transport.py] [_log()] starting thread (client mode): 0xf5742320
2025-12-12T22:55:33.206 [DEBUG] [Thread-78076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:55:33.221 [DEBUG] [Thread-78076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:55:33.221 [INFO] [Thread-78076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:55:33.228 [DEBUG] [Thread-78076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] client lang: <none>
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] server lang: <none>
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] kex follows: False
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] Compression: none
2025-12-12T22:55:33.229 [DEBUG] [Thread-78076] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:55:33.286 [DEBUG] [Thread-78076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:55:33.286 [DEBUG] [Thread-78076] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:55:33.286 [DEBUG] [Thread-78076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:55:33.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:55:33.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:55:33.348 [DEBUG] [Thread-78076] [transport.py] [_log()] userauth is OK
2025-12-12T22:55:33.349 [DEBUG] [Thread-78076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:55:33.349 [DEBUG] [Thread-78076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:55:33.349 [DEBUG] [Thread-78076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:55:33.349 [DEBUG] [Thread-78076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:55:33.363 [INFO] [Thread-78076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:55:33.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:55:33.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:55:34.207 [DEBUG] [Thread-78076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:55:34.207 [DEBUG] [Thread-78076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:55:34.255 [DEBUG] [Thread-78076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:55:34.255 [DEBUG] [Thread-78076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:55:34.264 [DEBUG] [Thread-78076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:55:34.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:55:34.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:55:34.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:55:34.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:55:34.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:55:34.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:55:34.298 [DEBUG] [Thread-78076] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:55:36.045 [DEBUG] [Thread-78078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:55:43.135 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:55:43.137 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:55:51.098 [DEBUG] [Thread-78079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:04.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:56:04.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:56:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:56:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 55, 40), 0.9, 93.76, 0.0, 36.08, 9.41, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:56:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:55:40
2025-12-12T22:56:05.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:56:05.297 [DEBUG] [Thread-78080] [transport.py] [_log()] starting thread (client mode): 0xf5740700
2025-12-12T22:56:05.298 [DEBUG] [Thread-78080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:56:05.317 [DEBUG] [Thread-78080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:56:05.317 [INFO] [Thread-78080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] client lang: <none>
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] server lang: <none>
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] kex follows: False
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] Compression: none
2025-12-12T22:56:05.321 [DEBUG] [Thread-78080] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:56:05.340 [DEBUG] [Thread-78080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:56:05.341 [DEBUG] [Thread-78080] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:56:05.341 [DEBUG] [Thread-78080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:56:05.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:56:05.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:56:05.343 [DEBUG] [Thread-78080] [transport.py] [_log()] userauth is OK
2025-12-12T22:56:05.343 [DEBUG] [Thread-78080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:56:05.344 [DEBUG] [Thread-78080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:56:05.344 [DEBUG] [Thread-78080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:56:05.344 [DEBUG] [Thread-78080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:56:05.379 [INFO] [Thread-78080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:56:05.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:56:06.013 [DEBUG] [Thread-78080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:56:06.013 [DEBUG] [Thread-78080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:56:06.013 [DEBUG] [Thread-78080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:56:06.053 [DEBUG] [Thread-78080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:56:06.053 [DEBUG] [Thread-78080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:56:06.055 [DEBUG] [Thread-78080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:56:06.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:56:06.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:56:06.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:56:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:56:06.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:56:06.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:56:06.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.871626 -999.00   +9.00  41.44     94   +8.10 1 3 2 3 1     0    0 0.49 -25.14 ----- 36.4 41.4 307.4 54.6 10.7 -1.8 10.4 -1.5 9.9 -1.6 10.2 -1.1
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.871626
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:56:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:55:40', tmtdew=0.9, humidity=93.76, cloud=0.0, wind=36.08, temperature=9.41, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:55:08.486', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:56:06.074 [DEBUG] [Thread-78080] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:56:06.126 [DEBUG] [Thread-78083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:06.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:56:06.163 [DEBUG] [Thread-78084] [transport.py] [_log()] starting thread (client mode): 0xf57423b0
2025-12-12T22:56:06.163 [DEBUG] [Thread-78084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:56:06.178 [DEBUG] [Thread-78084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:56:06.178 [INFO] [Thread-78084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:56:06.185 [DEBUG] [Thread-78084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:56:06.185 [DEBUG] [Thread-78084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:56:06.185 [DEBUG] [Thread-78084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:56:06.185 [DEBUG] [Thread-78084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:06.185 [DEBUG] [Thread-78084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] client lang: <none>
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] server lang: <none>
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] kex follows: False
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:56:06.186 [DEBUG] [Thread-78084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:56:06.187 [DEBUG] [Thread-78084] [transport.py] [_log()] Compression: none
2025-12-12T22:56:06.187 [DEBUG] [Thread-78084] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:56:06.242 [DEBUG] [Thread-78084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:56:06.243 [DEBUG] [Thread-78084] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:56:06.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:56:06.243 [DEBUG] [Thread-78084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:56:06.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:56:06.300 [DEBUG] [Thread-78084] [transport.py] [_log()] userauth is OK
2025-12-12T22:56:06.300 [DEBUG] [Thread-78084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:56:06.300 [DEBUG] [Thread-78084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:56:06.300 [DEBUG] [Thread-78084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:56:06.300 [DEBUG] [Thread-78084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:56:06.319 [INFO] [Thread-78084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:56:06.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:56:06.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:56:07.179 [DEBUG] [Thread-78084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:56:07.179 [DEBUG] [Thread-78084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:56:07.227 [DEBUG] [Thread-78084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:56:07.227 [DEBUG] [Thread-78084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:56:07.235 [DEBUG] [Thread-78084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:56:07.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:56:07.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:56:07.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:56:07.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:56:07.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:56:07.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:56:07.267 [DEBUG] [Thread-78084] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:56:18.280 [DEBUG] [Thread-78086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:21.160 [DEBUG] [Thread-78087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:36.190 [DEBUG] [Thread-78088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:37.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:56:37.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:56:37.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:56:37.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 56, 12), 0.9, 93.79, 0.0, 34.65, 9.39, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:56:37.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:56:12
2025-12-12T22:56:38.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:56:38.263 [DEBUG] [Thread-78089] [transport.py] [_log()] starting thread (client mode): 0xf57406a0
2025-12-12T22:56:38.263 [DEBUG] [Thread-78089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:56:38.285 [DEBUG] [Thread-78089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:56:38.285 [INFO] [Thread-78089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:38.288 [DEBUG] [Thread-78089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] client lang: <none>
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] server lang: <none>
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] kex follows: False
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] Compression: none
2025-12-12T22:56:38.289 [DEBUG] [Thread-78089] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:56:38.307 [DEBUG] [Thread-78089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:56:38.307 [DEBUG] [Thread-78089] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:56:38.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:56:38.308 [DEBUG] [Thread-78089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:56:38.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:56:38.310 [DEBUG] [Thread-78089] [transport.py] [_log()] userauth is OK
2025-12-12T22:56:38.311 [DEBUG] [Thread-78089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:56:38.311 [DEBUG] [Thread-78089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:56:38.311 [DEBUG] [Thread-78089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:56:38.311 [DEBUG] [Thread-78089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:56:38.336 [INFO] [Thread-78089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:56:38.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:56:38.983 [DEBUG] [Thread-78089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:56:38.983 [DEBUG] [Thread-78089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:56:38.984 [DEBUG] [Thread-78089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:56:39.025 [DEBUG] [Thread-78089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:56:39.025 [DEBUG] [Thread-78089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:56:39.028 [DEBUG] [Thread-78089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:56:39.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:56:39.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:56:39.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:56:39.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:56:39.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:56:39.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:56:39.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:56:39.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:56:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:56:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.872321 -999.00   +9.10  38.28     94   +8.20 1 3 2 3 1     0    0 0.50 -24.45 ----- 49.2 38.3 292.8 54.7 10.6 -1.6 10.3 -1.6 9.8 -1.0 10.2 -1.0
2025-12-12T22:56:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:56:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:56:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.872321
2025-12-12T22:56:39.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:56:39.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:56:39.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:56:39.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:56:39.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:56:39.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:56:12', tmtdew=0.9, humidity=93.79, cloud=0.0, wind=34.65, temperature=9.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:56:08.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:56:39.056 [DEBUG] [Thread-78089] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:56:39.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:56:39.145 [DEBUG] [Thread-78092] [transport.py] [_log()] starting thread (client mode): 0xf5740a00
2025-12-12T22:56:39.145 [DEBUG] [Thread-78092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:56:39.160 [DEBUG] [Thread-78092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:56:39.160 [INFO] [Thread-78092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:56:39.168 [DEBUG] [Thread-78092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:56:39.168 [DEBUG] [Thread-78092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:56:39.168 [DEBUG] [Thread-78092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:56:39.168 [DEBUG] [Thread-78092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:39.168 [DEBUG] [Thread-78092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] client lang: <none>
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] server lang: <none>
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] kex follows: False
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] Compression: none
2025-12-12T22:56:39.169 [DEBUG] [Thread-78092] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:56:39.225 [DEBUG] [Thread-78092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:56:39.226 [DEBUG] [Thread-78092] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:56:39.226 [DEBUG] [Thread-78092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:56:39.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:56:39.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:56:39.282 [DEBUG] [Thread-78092] [transport.py] [_log()] userauth is OK
2025-12-12T22:56:39.282 [DEBUG] [Thread-78092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:56:39.282 [DEBUG] [Thread-78092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:56:39.282 [DEBUG] [Thread-78092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:56:39.282 [DEBUG] [Thread-78092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:56:39.301 [INFO] [Thread-78092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:56:39.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:56:39.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:56:40.127 [DEBUG] [Thread-78092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:56:40.128 [DEBUG] [Thread-78092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:56:40.176 [DEBUG] [Thread-78092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:56:40.176 [DEBUG] [Thread-78092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:56:40.185 [DEBUG] [Thread-78092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:56:40.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:56:40.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:56:40.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:56:40.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:56:40.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:56:40.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:56:40.220 [DEBUG] [Thread-78092] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:56:43.342 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:43.343 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:56:51.217 [DEBUG] [Thread-78094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:06.252 [DEBUG] [Thread-78095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:10.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:57:10.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:57:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:57:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 56, 44), 0.89, 93.84, 0.0, 36.22, 9.26, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:57:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:56:44
2025-12-12T22:57:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:57:11.208 [DEBUG] [Thread-78096] [transport.py] [_log()] starting thread (client mode): 0xf57424d0
2025-12-12T22:57:11.208 [DEBUG] [Thread-78096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:57:11.228 [DEBUG] [Thread-78096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:57:11.228 [INFO] [Thread-78096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:11.231 [DEBUG] [Thread-78096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] client lang: <none>
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] server lang: <none>
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] kex follows: False
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] Compression: none
2025-12-12T22:57:11.232 [DEBUG] [Thread-78096] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:57:11.246 [DEBUG] [Thread-78096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:57:11.247 [DEBUG] [Thread-78096] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:57:11.247 [DEBUG] [Thread-78096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:57:11.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:57:11.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:57:11.249 [DEBUG] [Thread-78096] [transport.py] [_log()] userauth is OK
2025-12-12T22:57:11.249 [DEBUG] [Thread-78096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:57:11.249 [DEBUG] [Thread-78096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:57:11.249 [DEBUG] [Thread-78096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:57:11.249 [DEBUG] [Thread-78096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:57:11.272 [INFO] [Thread-78096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:57:11.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:57:11.906 [DEBUG] [Thread-78096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:57:11.907 [DEBUG] [Thread-78096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:57:11.907 [DEBUG] [Thread-78096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:57:11.953 [DEBUG] [Thread-78096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:57:11.953 [DEBUG] [Thread-78096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:57:11.956 [DEBUG] [Thread-78096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:57:11.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:57:11.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:57:11.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:57:11.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:57:11.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:57:11.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:57:11.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:57:11.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:57:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:57:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.872668 -999.00   +9.00  42.04     94   +8.20 1 3 2 3 1     0    0 0.38 -27.96 ----- 47.5 42.0 300.4 57.4 10.5 -1.6 10.2 -1.5 9.8 -1.3 10.2 -1.0
2025-12-12T22:57:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:57:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:57:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.872668
2025-12-12T22:57:11.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:57:11.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:57:11.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:57:11.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:57:11.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:57:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:56:44', tmtdew=0.89, humidity=93.84, cloud=0.0, wind=36.22, temperature=9.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:56:38.515', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:57:11.982 [DEBUG] [Thread-78096] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:57:12.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:57:12.079 [DEBUG] [Thread-78099] [transport.py] [_log()] starting thread (client mode): 0xf57bd090
2025-12-12T22:57:12.079 [DEBUG] [Thread-78099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:57:12.094 [DEBUG] [Thread-78099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:57:12.094 [INFO] [Thread-78099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:57:12.102 [DEBUG] [Thread-78099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:57:12.102 [DEBUG] [Thread-78099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:57:12.102 [DEBUG] [Thread-78099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:57:12.102 [DEBUG] [Thread-78099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:12.102 [DEBUG] [Thread-78099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:12.102 [DEBUG] [Thread-78099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] client lang: <none>
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] server lang: <none>
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] kex follows: False
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:57:12.103 [DEBUG] [Thread-78099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:57:12.104 [DEBUG] [Thread-78099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:57:12.104 [DEBUG] [Thread-78099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:57:12.104 [DEBUG] [Thread-78099] [transport.py] [_log()] Compression: none
2025-12-12T22:57:12.104 [DEBUG] [Thread-78099] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:57:12.161 [DEBUG] [Thread-78099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:57:12.161 [DEBUG] [Thread-78099] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:57:12.161 [DEBUG] [Thread-78099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:57:12.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:57:12.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:57:12.217 [DEBUG] [Thread-78099] [transport.py] [_log()] userauth is OK
2025-12-12T22:57:12.217 [DEBUG] [Thread-78099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:57:12.217 [DEBUG] [Thread-78099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:57:12.217 [DEBUG] [Thread-78099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:57:12.217 [DEBUG] [Thread-78099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:57:12.235 [INFO] [Thread-78099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:57:12.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:57:12.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:57:13.067 [DEBUG] [Thread-78099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:57:13.067 [DEBUG] [Thread-78099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:57:13.115 [DEBUG] [Thread-78099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:57:13.115 [DEBUG] [Thread-78099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:57:13.124 [DEBUG] [Thread-78099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:57:13.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:57:13.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:57:13.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:57:13.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:57:13.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:57:13.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:57:13.158 [DEBUG] [Thread-78099] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:57:18.354 [DEBUG] [Thread-78101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:21.280 [DEBUG] [Thread-78102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:36.328 [DEBUG] [Thread-78103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:57:43.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:57:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:57:43.548 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:43.549 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:57:43.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 57, 16), 0.88, 93.93, 0.0, 35.32, 9.34, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:57:43.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:57:16
2025-12-12T22:57:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:57:44.139 [DEBUG] [Thread-78104] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-12T22:57:44.139 [DEBUG] [Thread-78104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:57:44.159 [DEBUG] [Thread-78104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:57:44.159 [INFO] [Thread-78104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:57:44.162 [DEBUG] [Thread-78104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] client lang: <none>
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] server lang: <none>
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] kex follows: False
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] Compression: none
2025-12-12T22:57:44.163 [DEBUG] [Thread-78104] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:57:44.179 [DEBUG] [Thread-78104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:57:44.180 [DEBUG] [Thread-78104] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:57:44.181 [DEBUG] [Thread-78104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:57:44.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:57:44.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:57:44.225 [DEBUG] [Thread-78104] [transport.py] [_log()] userauth is OK
2025-12-12T22:57:44.225 [DEBUG] [Thread-78104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:57:44.225 [DEBUG] [Thread-78104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:57:44.225 [DEBUG] [Thread-78104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:57:44.225 [DEBUG] [Thread-78104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:57:44.247 [INFO] [Thread-78104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:57:44.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:57:44.894 [DEBUG] [Thread-78104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:57:44.894 [DEBUG] [Thread-78104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:57:44.894 [DEBUG] [Thread-78104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:57:44.935 [DEBUG] [Thread-78104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:57:44.935 [DEBUG] [Thread-78104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:57:44.938 [DEBUG] [Thread-78104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:57:44.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:57:44.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:57:44.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:57:44.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:57:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:57:44.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:57:44.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:57:44.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:57:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:57:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.873016 -999.00   +9.00  44.69     94   +8.20 1 3 2 3 1     0    0 0.32 -29.62 ----- 44.3 44.7 293.2 57.6 10.5 -1.7 10.2 -1.4 9.7 -1.3 10.2 -0.8
2025-12-12T22:57:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:57:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:57:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.873016
2025-12-12T22:57:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:57:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:57:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:57:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:57:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:57:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:57:16', tmtdew=0.88, humidity=93.93, cloud=0.0, wind=35.32, temperature=9.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:57:08.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:57:44.963 [DEBUG] [Thread-78104] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:57:45.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:57:45.060 [DEBUG] [Thread-78107] [transport.py] [_log()] starting thread (client mode): 0xf5742830
2025-12-12T22:57:45.060 [DEBUG] [Thread-78107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:57:45.074 [DEBUG] [Thread-78107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:57:45.074 [INFO] [Thread-78107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:57:45.082 [DEBUG] [Thread-78107] [transport.py] [_log()] client lang: <none>
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] server lang: <none>
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] kex follows: False
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] Compression: none
2025-12-12T22:57:45.083 [DEBUG] [Thread-78107] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:57:45.139 [DEBUG] [Thread-78107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:57:45.140 [DEBUG] [Thread-78107] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:57:45.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:57:45.141 [DEBUG] [Thread-78107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:57:45.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:57:45.196 [DEBUG] [Thread-78107] [transport.py] [_log()] userauth is OK
2025-12-12T22:57:45.196 [DEBUG] [Thread-78107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:57:45.196 [DEBUG] [Thread-78107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:57:45.196 [DEBUG] [Thread-78107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:57:45.196 [DEBUG] [Thread-78107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:57:45.215 [INFO] [Thread-78107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:57:45.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:57:45.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:57:46.102 [DEBUG] [Thread-78107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:57:46.102 [DEBUG] [Thread-78107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:57:46.153 [DEBUG] [Thread-78107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:57:46.154 [DEBUG] [Thread-78107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:57:46.162 [DEBUG] [Thread-78107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:57:46.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:57:46.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:57:46.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:57:46.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:57:46.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:57:46.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:57:46.196 [DEBUG] [Thread-78107] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:57:51.354 [DEBUG] [Thread-78109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:06.394 [DEBUG] [Thread-78110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:16.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:58:16.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:58:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:58:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 57, 48), 0.89, 94.36, 0.0, 35.99, 9.28, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:58:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:57:48
2025-12-12T22:58:17.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:58:17.181 [DEBUG] [Thread-78111] [transport.py] [_log()] starting thread (client mode): 0xf57ca080
2025-12-12T22:58:17.181 [DEBUG] [Thread-78111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:58:17.201 [DEBUG] [Thread-78111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:58:17.201 [INFO] [Thread-78111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:58:17.204 [DEBUG] [Thread-78111] [transport.py] [_log()] client lang: <none>
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] server lang: <none>
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] kex follows: False
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] Compression: none
2025-12-12T22:58:17.205 [DEBUG] [Thread-78111] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:58:17.213 [DEBUG] [Thread-78111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:58:17.214 [DEBUG] [Thread-78111] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:58:17.214 [DEBUG] [Thread-78111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:58:17.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:58:17.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:58:17.216 [DEBUG] [Thread-78111] [transport.py] [_log()] userauth is OK
2025-12-12T22:58:17.216 [DEBUG] [Thread-78111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:58:17.216 [DEBUG] [Thread-78111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:58:17.216 [DEBUG] [Thread-78111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:58:17.216 [DEBUG] [Thread-78111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:58:17.237 [INFO] [Thread-78111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:58:17.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:58:17.833 [DEBUG] [Thread-78111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:58:17.833 [DEBUG] [Thread-78111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:58:17.834 [DEBUG] [Thread-78111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:58:17.874 [DEBUG] [Thread-78111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:58:17.874 [DEBUG] [Thread-78111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:58:17.877 [DEBUG] [Thread-78111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:58:17.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:58:17.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:58:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:58:17.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:58:17.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:58:17.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:58:17.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:58:17.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:58:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:58:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.873363 -999.00   +9.00  43.28     94   +8.10 1 3 2 3 1     0    0 0.27 -31.41 ----- 44.2 43.3 303.2 49.2 10.4 -1.7 10.2 -1.3 9.7 -1.3 10.2 -1.0
2025-12-12T22:58:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:58:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:58:17.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.873363
2025-12-12T22:58:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:58:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:58:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:58:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:58:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:58:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:57:48', tmtdew=0.89, humidity=94.36, cloud=0.0, wind=35.99, temperature=9.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:57:38.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:58:17.903 [DEBUG] [Thread-78111] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:58:17.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:58:18.001 [DEBUG] [Thread-78114] [transport.py] [_log()] starting thread (client mode): 0xf57cb490
2025-12-12T22:58:18.001 [DEBUG] [Thread-78114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:58:18.018 [DEBUG] [Thread-78114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:58:18.018 [INFO] [Thread-78114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:58:18.026 [DEBUG] [Thread-78114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:58:18.026 [DEBUG] [Thread-78114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:58:18.026 [DEBUG] [Thread-78114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:58:18.026 [DEBUG] [Thread-78114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:18.026 [DEBUG] [Thread-78114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:18.026 [DEBUG] [Thread-78114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] client lang: <none>
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] server lang: <none>
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] kex follows: False
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] Compression: none
2025-12-12T22:58:18.027 [DEBUG] [Thread-78114] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:58:18.084 [DEBUG] [Thread-78114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:58:18.085 [DEBUG] [Thread-78114] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:58:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:58:18.085 [DEBUG] [Thread-78114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:58:18.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:58:18.142 [DEBUG] [Thread-78114] [transport.py] [_log()] userauth is OK
2025-12-12T22:58:18.142 [DEBUG] [Thread-78114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:58:18.143 [DEBUG] [Thread-78114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:58:18.143 [DEBUG] [Thread-78114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:58:18.143 [DEBUG] [Thread-78114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:58:18.162 [INFO] [Thread-78114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:58:18.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:58:18.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:58:18.447 [DEBUG] [Thread-78116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:19.008 [DEBUG] [Thread-78114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:58:19.008 [DEBUG] [Thread-78114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:58:19.056 [DEBUG] [Thread-78114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:58:19.056 [DEBUG] [Thread-78114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:58:19.065 [DEBUG] [Thread-78114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:58:19.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:58:19.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:58:19.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:58:19.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:58:19.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:58:19.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:58:19.100 [DEBUG] [Thread-78114] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:58:21.423 [DEBUG] [Thread-78117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:36.467 [DEBUG] [Thread-78118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:43.751 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:43.752 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:49.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:58:49.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:58:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:58:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 58, 20), 0.88, 94.43, 0.0, 34.55, 9.24, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:58:49.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:58:20
2025-12-12T22:58:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:58:50.088 [DEBUG] [Thread-78119] [transport.py] [_log()] starting thread (client mode): 0xf5742ad0
2025-12-12T22:58:50.088 [DEBUG] [Thread-78119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:58:50.107 [DEBUG] [Thread-78119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:58:50.107 [INFO] [Thread-78119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:58:50.110 [DEBUG] [Thread-78119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] client lang: <none>
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] server lang: <none>
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] kex follows: False
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] Compression: none
2025-12-12T22:58:50.111 [DEBUG] [Thread-78119] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:58:50.128 [DEBUG] [Thread-78119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:58:50.129 [DEBUG] [Thread-78119] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:58:50.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:58:50.129 [DEBUG] [Thread-78119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:58:50.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:58:50.131 [DEBUG] [Thread-78119] [transport.py] [_log()] userauth is OK
2025-12-12T22:58:50.131 [DEBUG] [Thread-78119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:58:50.132 [DEBUG] [Thread-78119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:58:50.132 [DEBUG] [Thread-78119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:58:50.132 [DEBUG] [Thread-78119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:58:50.153 [INFO] [Thread-78119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:58:50.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:58:50.759 [DEBUG] [Thread-78119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:58:50.760 [DEBUG] [Thread-78119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:58:50.760 [DEBUG] [Thread-78119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:58:50.801 [DEBUG] [Thread-78119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:58:50.801 [DEBUG] [Thread-78119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:58:50.804 [DEBUG] [Thread-78119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:58:50.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:58:50.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:58:50.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:58:50.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:58:50.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:58:50.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:58:50.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:58:50.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:58:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:58:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.873710 -999.00   +9.00  36.69     94   +8.10 1 3 2 3 1     0    0 0.26 -31.24 ----- 39.7 36.7 300.6 48.3 10.4 -1.7 10.2 -1.4 9.8 -1.0 10.1 -0.9
2025-12-12T22:58:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:58:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:58:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.873710
2025-12-12T22:58:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:58:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:58:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:58:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:58:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:58:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:58:20', tmtdew=0.88, humidity=94.43, cloud=0.0, wind=34.55, temperature=9.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:58:08.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:58:50.831 [DEBUG] [Thread-78119] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:58:50.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:58:50.928 [DEBUG] [Thread-78122] [transport.py] [_log()] starting thread (client mode): 0xf57bf790
2025-12-12T22:58:50.928 [DEBUG] [Thread-78122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:58:50.942 [DEBUG] [Thread-78122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:58:50.942 [INFO] [Thread-78122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] client lang: <none>
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] server lang: <none>
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] kex follows: False
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:58:50.950 [DEBUG] [Thread-78122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:58:50.951 [DEBUG] [Thread-78122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:58:50.951 [DEBUG] [Thread-78122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:58:50.951 [DEBUG] [Thread-78122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:58:50.951 [DEBUG] [Thread-78122] [transport.py] [_log()] Compression: none
2025-12-12T22:58:50.951 [DEBUG] [Thread-78122] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:58:51.010 [DEBUG] [Thread-78122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:58:51.010 [DEBUG] [Thread-78122] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:58:51.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:58:51.011 [DEBUG] [Thread-78122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:58:51.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:58:51.066 [DEBUG] [Thread-78122] [transport.py] [_log()] userauth is OK
2025-12-12T22:58:51.066 [DEBUG] [Thread-78122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:58:51.066 [DEBUG] [Thread-78122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:58:51.066 [DEBUG] [Thread-78122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:58:51.066 [DEBUG] [Thread-78122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:58:51.084 [INFO] [Thread-78122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:58:51.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:58:51.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:58:51.501 [DEBUG] [Thread-78124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:58:51.905 [DEBUG] [Thread-78122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:58:51.905 [DEBUG] [Thread-78122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:58:51.953 [DEBUG] [Thread-78122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:58:51.953 [DEBUG] [Thread-78122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:58:51.961 [DEBUG] [Thread-78122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:58:51.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:58:51.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:58:51.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:58:51.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:58:51.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:58:51.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:58:51.995 [DEBUG] [Thread-78122] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:59:06.543 [DEBUG] [Thread-78125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:18.529 [DEBUG] [Thread-78126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:21.572 [DEBUG] [Thread-78127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:59:21.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:59:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:59:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 58, 52), 0.82, 94.46, 0.0, 36.7, 9.24, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:59:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:58:52
2025-12-12T22:59:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:59:23.048 [DEBUG] [Thread-78128] [transport.py] [_log()] starting thread (client mode): 0xf5771de0
2025-12-12T22:59:23.048 [DEBUG] [Thread-78128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:59:23.068 [DEBUG] [Thread-78128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:59:23.068 [INFO] [Thread-78128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] client lang: <none>
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] server lang: <none>
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] kex follows: False
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] Compression: none
2025-12-12T22:59:23.071 [DEBUG] [Thread-78128] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:59:23.087 [DEBUG] [Thread-78128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:59:23.087 [DEBUG] [Thread-78128] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:59:23.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:59:23.087 [DEBUG] [Thread-78128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:59:23.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:59:23.088 [DEBUG] [Thread-78128] [transport.py] [_log()] userauth is OK
2025-12-12T22:59:23.088 [DEBUG] [Thread-78128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:59:23.088 [DEBUG] [Thread-78128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:59:23.088 [DEBUG] [Thread-78128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:59:23.088 [DEBUG] [Thread-78128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:59:23.098 [INFO] [Thread-78128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:59:23.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:59:23.722 [DEBUG] [Thread-78128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:59:23.722 [DEBUG] [Thread-78128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:59:23.723 [DEBUG] [Thread-78128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:59:23.764 [DEBUG] [Thread-78128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:59:23.764 [DEBUG] [Thread-78128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:59:23.766 [DEBUG] [Thread-78128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:59:23.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:59:23.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:59:23.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:59:23.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:59:23.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:59:23.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.874057 -999.00   +9.10  33.72     94   +8.40 1 3 2 3 1     0    0 0.18 -33.13 ----- 33.0 33.7 306.0 45.7 10.4 -1.3 10.2 -1.5 9.8 -1.3 10.1 -1.1
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:59:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.874057
2025-12-12T22:59:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:59:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:59:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:59:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:59:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:59:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:58:52', tmtdew=0.82, humidity=94.46, cloud=0.0, wind=36.7, temperature=9.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:58:38.525', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:59:23.783 [DEBUG] [Thread-78128] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:59:23.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:59:23.877 [DEBUG] [Thread-78131] [transport.py] [_log()] starting thread (client mode): 0xf57be980
2025-12-12T22:59:23.877 [DEBUG] [Thread-78131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:59:23.895 [DEBUG] [Thread-78131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:59:23.895 [INFO] [Thread-78131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:59:23.902 [DEBUG] [Thread-78131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] client lang: <none>
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] server lang: <none>
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] kex follows: False
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] Compression: none
2025-12-12T22:59:23.903 [DEBUG] [Thread-78131] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:59:23.959 [DEBUG] [Thread-78131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:59:23.959 [DEBUG] [Thread-78131] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:59:23.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:59:23.959 [DEBUG] [Thread-78131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:59:23.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:59:24.016 [DEBUG] [Thread-78131] [transport.py] [_log()] userauth is OK
2025-12-12T22:59:24.017 [DEBUG] [Thread-78131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:59:24.017 [DEBUG] [Thread-78131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:59:24.017 [DEBUG] [Thread-78131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:59:24.017 [DEBUG] [Thread-78131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:59:24.030 [INFO] [Thread-78131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:59:24.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:59:24.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:59:24.869 [DEBUG] [Thread-78131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:59:24.869 [DEBUG] [Thread-78131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:59:24.917 [DEBUG] [Thread-78131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:59:24.917 [DEBUG] [Thread-78131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:59:24.925 [DEBUG] [Thread-78131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:59:24.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:59:24.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:59:24.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:59:24.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:59:24.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:59:24.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:59:24.956 [DEBUG] [Thread-78131] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:59:36.597 [DEBUG] [Thread-78133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:43.957 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:43.959 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:51.654 [DEBUG] [Thread-78134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T22:59:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T22:59:54.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T22:59:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T22:59:55.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 59, 24), 0.83, 94.43, 0.0, 34.62, 9.19, 2, 2, 0, 2, 0, 0),)
2025-12-12T22:59:55.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:59:24
2025-12-12T22:59:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T22:59:55.954 [DEBUG] [Thread-78135] [transport.py] [_log()] starting thread (client mode): 0xf57ca410
2025-12-12T22:59:55.954 [DEBUG] [Thread-78135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:59:55.973 [DEBUG] [Thread-78135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T22:59:55.973 [INFO] [Thread-78135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] client lang: <none>
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] server lang: <none>
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] kex follows: False
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:59:55.977 [DEBUG] [Thread-78135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:59:55.978 [DEBUG] [Thread-78135] [transport.py] [_log()] Compression: none
2025-12-12T22:59:55.978 [DEBUG] [Thread-78135] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:59:55.994 [DEBUG] [Thread-78135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:59:55.994 [DEBUG] [Thread-78135] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:59:55.994 [DEBUG] [Thread-78135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T22:59:55.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T22:59:55.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:59:55.996 [DEBUG] [Thread-78135] [transport.py] [_log()] userauth is OK
2025-12-12T22:59:55.996 [DEBUG] [Thread-78135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:59:55.997 [DEBUG] [Thread-78135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:59:55.997 [DEBUG] [Thread-78135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T22:59:55.997 [DEBUG] [Thread-78135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:59:56.020 [INFO] [Thread-78135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:59:56.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:59:56.614 [DEBUG] [Thread-78135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:59:56.615 [DEBUG] [Thread-78135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:59:56.615 [DEBUG] [Thread-78135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T22:59:56.657 [DEBUG] [Thread-78135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:59:56.657 [DEBUG] [Thread-78135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:59:56.660 [DEBUG] [Thread-78135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:59:56.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:59:56.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T22:59:56.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T22:59:56.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T22:59:56.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:59:56.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T22:59:56.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:59:56.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:59:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T22:59:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.874404 -999.00   +9.10  40.16     94   +8.30 1 3 2 3 1     0    0 0.10 -35.42 ----- 35.0 40.2 301.6 43.7 10.4 -1.8 10.3 -1.9 9.8 -1.3 10.2 -1.3
2025-12-12T22:59:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T22:59:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T22:59:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.874404
2025-12-12T22:59:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T22:59:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T22:59:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T22:59:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T22:59:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T22:59:56.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:59:24', tmtdew=0.83, humidity=94.43, cloud=0.0, wind=34.62, temperature=9.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T20:59:08.506', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T22:59:56.689 [DEBUG] [Thread-78135] [transport.py] [_log()] EOF in transport thread
2025-12-12T22:59:56.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T22:59:56.786 [DEBUG] [Thread-78138] [transport.py] [_log()] starting thread (client mode): 0xf5772a70
2025-12-12T22:59:56.786 [DEBUG] [Thread-78138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T22:59:56.801 [DEBUG] [Thread-78138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T22:59:56.801 [INFO] [Thread-78138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T22:59:56.808 [DEBUG] [Thread-78138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T22:59:56.808 [DEBUG] [Thread-78138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T22:59:56.808 [DEBUG] [Thread-78138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T22:59:56.808 [DEBUG] [Thread-78138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] client lang: <none>
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] server lang: <none>
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] kex follows: False
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] Compression: none
2025-12-12T22:59:56.809 [DEBUG] [Thread-78138] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T22:59:56.868 [DEBUG] [Thread-78138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T22:59:56.868 [DEBUG] [Thread-78138] [transport.py] [_log()] Switch to new keys ...
2025-12-12T22:59:56.869 [DEBUG] [Thread-78138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T22:59:56.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T22:59:56.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T22:59:56.924 [DEBUG] [Thread-78138] [transport.py] [_log()] userauth is OK
2025-12-12T22:59:56.924 [DEBUG] [Thread-78138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T22:59:56.924 [DEBUG] [Thread-78138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T22:59:56.925 [DEBUG] [Thread-78138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T22:59:56.925 [DEBUG] [Thread-78138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T22:59:56.944 [INFO] [Thread-78138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T22:59:56.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T22:59:56.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T22:59:57.780 [DEBUG] [Thread-78138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T22:59:57.780 [DEBUG] [Thread-78138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T22:59:57.827 [DEBUG] [Thread-78138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T22:59:57.827 [DEBUG] [Thread-78138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T22:59:57.835 [DEBUG] [Thread-78138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T22:59:57.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T22:59:57.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T22:59:57.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T22:59:57.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T22:59:57.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T22:59:57.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T22:59:57.867 [DEBUG] [Thread-78138] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:00:06.681 [DEBUG] [Thread-78140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:00:18.602 [DEBUG] [Thread-78141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:00:21.717 [DEBUG] [Thread-78142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:00:27.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:00:27.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:00:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:00:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 22, 59, 57), 0.81, 94.53, 0.0, 37.42, 9.29, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:00:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 22:59:57
2025-12-12T23:00:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:00:28.881 [DEBUG] [Thread-78143] [transport.py] [_log()] starting thread (client mode): 0xf57bdff0
2025-12-12T23:00:28.881 [DEBUG] [Thread-78143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:00:28.903 [DEBUG] [Thread-78143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:00:28.903 [INFO] [Thread-78143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:00:28.906 [DEBUG] [Thread-78143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] client lang: <none>
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] server lang: <none>
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] kex follows: False
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] Compression: none
2025-12-12T23:00:28.907 [DEBUG] [Thread-78143] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:00:28.926 [DEBUG] [Thread-78143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:00:28.926 [DEBUG] [Thread-78143] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:00:28.927 [DEBUG] [Thread-78143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:00:28.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:00:28.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:00:28.929 [DEBUG] [Thread-78143] [transport.py] [_log()] userauth is OK
2025-12-12T23:00:28.929 [DEBUG] [Thread-78143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:00:28.929 [DEBUG] [Thread-78143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:00:28.929 [DEBUG] [Thread-78143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:00:28.929 [DEBUG] [Thread-78143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:00:28.961 [INFO] [Thread-78143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:00:28.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:00:29.586 [DEBUG] [Thread-78143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:00:29.587 [DEBUG] [Thread-78143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:00:29.587 [DEBUG] [Thread-78143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:00:29.628 [DEBUG] [Thread-78143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:00:29.628 [DEBUG] [Thread-78143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:00:29.630 [DEBUG] [Thread-78143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:00:29.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:00:29.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:00:29.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:00:29.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:00:29.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:00:29.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:00:29.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:00:29.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:00:29.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.875099 -999.00   +9.00  30.35     94   +8.20 1 3 2 3 1     0    0 -0.11 -41.29 ----- 30.5 30.4 309.6 47.2 10.5 -2.4 10.2 -1.9 9.8 -2.0 10.2 -1.5
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.875099
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:00:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T22:59:57', tmtdew=0.81, humidity=94.53, cloud=0.0, wind=37.42, temperature=9.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:00:08.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:00:29.651 [DEBUG] [Thread-78143] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:00:29.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:00:29.734 [DEBUG] [Thread-78146] [transport.py] [_log()] starting thread (client mode): 0xf5742740
2025-12-12T23:00:29.735 [DEBUG] [Thread-78146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:00:29.753 [DEBUG] [Thread-78146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:00:29.753 [INFO] [Thread-78146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] client lang: <none>
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] server lang: <none>
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] kex follows: False
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] Compression: none
2025-12-12T23:00:29.761 [DEBUG] [Thread-78146] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:00:29.818 [DEBUG] [Thread-78146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:00:29.819 [DEBUG] [Thread-78146] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:00:29.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:00:29.819 [DEBUG] [Thread-78146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:00:29.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:00:29.875 [DEBUG] [Thread-78146] [transport.py] [_log()] userauth is OK
2025-12-12T23:00:29.875 [DEBUG] [Thread-78146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:00:29.875 [DEBUG] [Thread-78146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:00:29.875 [DEBUG] [Thread-78146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:00:29.875 [DEBUG] [Thread-78146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:00:29.893 [INFO] [Thread-78146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:00:29.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:00:29.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:00:30.743 [DEBUG] [Thread-78146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:00:30.744 [DEBUG] [Thread-78146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:00:30.791 [DEBUG] [Thread-78146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:00:30.792 [DEBUG] [Thread-78146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:00:30.800 [DEBUG] [Thread-78146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:00:30.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:00:30.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:00:30.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:00:30.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:00:30.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:00:30.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:00:30.831 [DEBUG] [Thread-78146] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:00:36.745 [DEBUG] [Thread-78148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:00:44.166 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:00:44.167 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:00:51.801 [DEBUG] [Thread-78149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:00.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:01:00.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:01:00.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:01:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 0, 29), 0.8, 94.59, 0.0, 39.47, 9.29, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:01:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:00:29
2025-12-12T23:01:01.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:01:01.847 [DEBUG] [Thread-78150] [transport.py] [_log()] starting thread (client mode): 0xf57cba00
2025-12-12T23:01:01.847 [DEBUG] [Thread-78150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:01:01.867 [DEBUG] [Thread-78150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:01:01.867 [INFO] [Thread-78150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] client lang: <none>
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] server lang: <none>
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] kex follows: False
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:01:01.870 [DEBUG] [Thread-78150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:01:01.871 [DEBUG] [Thread-78150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:01:01.871 [DEBUG] [Thread-78150] [transport.py] [_log()] Compression: none
2025-12-12T23:01:01.871 [DEBUG] [Thread-78150] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:01:01.885 [DEBUG] [Thread-78150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:01:01.885 [DEBUG] [Thread-78150] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:01:01.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:01:01.886 [DEBUG] [Thread-78150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:01:01.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:01:01.887 [DEBUG] [Thread-78150] [transport.py] [_log()] userauth is OK
2025-12-12T23:01:01.887 [DEBUG] [Thread-78150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:01:01.887 [DEBUG] [Thread-78150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:01:01.887 [DEBUG] [Thread-78150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:01:01.887 [DEBUG] [Thread-78150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:01:01.902 [INFO] [Thread-78150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:01:01.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:01:02.533 [DEBUG] [Thread-78150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:01:02.533 [DEBUG] [Thread-78150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:01:02.533 [DEBUG] [Thread-78150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:01:02.574 [DEBUG] [Thread-78150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:01:02.574 [DEBUG] [Thread-78150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:01:02.576 [DEBUG] [Thread-78150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:01:02.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:01:02.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:01:02.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:01:02.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:01:02.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:01:02.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:01:02.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.875446 -999.00   +9.00  42.08     94   +8.20 1 3 2 3 1     0    0 -0.11 -41.18 ----- 40.2 42.1 295.0 50.0 10.5 -2.2 10.2 -1.9 9.7 -1.3 10.1 -1.1
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.875446
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:01:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:00:29', tmtdew=0.8, humidity=94.59, cloud=0.0, wind=39.47, temperature=9.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:00:38.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:01:02.594 [DEBUG] [Thread-78150] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:01:02.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:01:02.680 [DEBUG] [Thread-78153] [transport.py] [_log()] starting thread (client mode): 0xf5742800
2025-12-12T23:01:02.680 [DEBUG] [Thread-78153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:01:02.694 [DEBUG] [Thread-78153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:01:02.694 [INFO] [Thread-78153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:01:02.701 [DEBUG] [Thread-78153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] client lang: <none>
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] server lang: <none>
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] kex follows: False
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] Compression: none
2025-12-12T23:01:02.702 [DEBUG] [Thread-78153] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:01:02.757 [DEBUG] [Thread-78153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:01:02.757 [DEBUG] [Thread-78153] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:01:02.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:01:02.757 [DEBUG] [Thread-78153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:01:02.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:01:02.814 [DEBUG] [Thread-78153] [transport.py] [_log()] userauth is OK
2025-12-12T23:01:02.814 [DEBUG] [Thread-78153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:01:02.814 [DEBUG] [Thread-78153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:01:02.814 [DEBUG] [Thread-78153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:01:02.814 [DEBUG] [Thread-78153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:01:02.828 [INFO] [Thread-78153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:01:02.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:01:02.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:01:03.693 [DEBUG] [Thread-78153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:01:03.694 [DEBUG] [Thread-78153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:01:03.742 [DEBUG] [Thread-78153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:01:03.742 [DEBUG] [Thread-78153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:01:03.750 [DEBUG] [Thread-78153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:01:03.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:01:03.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:01:03.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:01:03.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:01:03.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:01:03.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:01:03.784 [DEBUG] [Thread-78153] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:01:06.834 [DEBUG] [Thread-78155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:18.674 [DEBUG] [Thread-78156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:21.877 [DEBUG] [Thread-78157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:01:33.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:01:33.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:01:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 1, 1), 0.81, 94.53, 0.0, 39.03, 9.14, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:01:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:01:01
2025-12-12T23:01:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:01:34.851 [DEBUG] [Thread-78158] [transport.py] [_log()] starting thread (client mode): 0xf572fdc0
2025-12-12T23:01:34.851 [DEBUG] [Thread-78158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:01:34.870 [DEBUG] [Thread-78158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:01:34.870 [INFO] [Thread-78158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] client lang: <none>
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] server lang: <none>
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] kex follows: False
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] Compression: none
2025-12-12T23:01:34.873 [DEBUG] [Thread-78158] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:01:34.888 [DEBUG] [Thread-78158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:01:34.888 [DEBUG] [Thread-78158] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:01:34.888 [DEBUG] [Thread-78158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:01:34.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:01:34.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:01:34.889 [DEBUG] [Thread-78158] [transport.py] [_log()] userauth is OK
2025-12-12T23:01:34.889 [DEBUG] [Thread-78158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:01:34.889 [DEBUG] [Thread-78158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:01:34.889 [DEBUG] [Thread-78158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:01:34.889 [DEBUG] [Thread-78158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:01:34.899 [INFO] [Thread-78158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:01:34.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:01:35.535 [DEBUG] [Thread-78158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:01:35.536 [DEBUG] [Thread-78158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:01:35.536 [DEBUG] [Thread-78158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:01:35.577 [DEBUG] [Thread-78158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:01:35.577 [DEBUG] [Thread-78158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:01:35.579 [DEBUG] [Thread-78158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:01:35.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:01:35.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:01:35.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:01:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:01:35.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:01:35.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:01:35.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.875793 -999.00   +8.90  48.17     94   +8.10 1 3 2 3 1     0    0 -0.00 -36.56 ----- 44.0 48.2 300.6 53.1 10.4 -1.9 10.2 -3.3 9.7 -2.4 10.1 -1.9
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.875793
2025-12-12T23:01:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:01:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:01:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:01:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:01:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:01:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:01:01', tmtdew=0.81, humidity=94.53, cloud=0.0, wind=39.03, temperature=9.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:01:08.515', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:01:35.596 [DEBUG] [Thread-78158] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:01:35.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:01:35.682 [DEBUG] [Thread-78161] [transport.py] [_log()] starting thread (client mode): 0xf57bd030
2025-12-12T23:01:35.682 [DEBUG] [Thread-78161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:01:35.697 [DEBUG] [Thread-78161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:01:35.697 [INFO] [Thread-78161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:01:35.704 [DEBUG] [Thread-78161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:01:35.704 [DEBUG] [Thread-78161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] client lang: <none>
2025-12-12T23:01:35.705 [DEBUG] [Thread-78161] [transport.py] [_log()] server lang: <none>
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] kex follows: False
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] Compression: none
2025-12-12T23:01:35.706 [DEBUG] [Thread-78161] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:01:35.761 [DEBUG] [Thread-78161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:01:35.762 [DEBUG] [Thread-78161] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:01:35.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:01:35.763 [DEBUG] [Thread-78161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:01:35.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:01:35.818 [DEBUG] [Thread-78161] [transport.py] [_log()] userauth is OK
2025-12-12T23:01:35.818 [DEBUG] [Thread-78161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:01:35.818 [DEBUG] [Thread-78161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:01:35.818 [DEBUG] [Thread-78161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:01:35.818 [DEBUG] [Thread-78161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:01:35.838 [INFO] [Thread-78161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:01:35.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:01:35.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:01:36.696 [DEBUG] [Thread-78161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:01:36.696 [DEBUG] [Thread-78161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:01:36.744 [DEBUG] [Thread-78161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:01:36.744 [DEBUG] [Thread-78161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:01:36.753 [DEBUG] [Thread-78161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:01:36.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:01:36.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:01:36.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:01:36.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:01:36.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:01:36.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:01:36.787 [DEBUG] [Thread-78161] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:01:36.904 [DEBUG] [Thread-78163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:44.370 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:44.371 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:01:51.956 [DEBUG] [Thread-78164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:02:06.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:02:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:02:06.981 [DEBUG] [Thread-78165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:07.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 1, 33), 0.8, 94.59, 0.0, 38.87, 9.16, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:02:07.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:01:33
2025-12-12T23:02:07.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:02:07.823 [DEBUG] [Thread-78166] [transport.py] [_log()] starting thread (client mode): 0xf57be230
2025-12-12T23:02:07.823 [DEBUG] [Thread-78166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:02:07.838 [DEBUG] [Thread-78166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:02:07.838 [INFO] [Thread-78166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] client lang: <none>
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] server lang: <none>
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] kex follows: False
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:02:07.842 [DEBUG] [Thread-78166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:02:07.843 [DEBUG] [Thread-78166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:02:07.843 [DEBUG] [Thread-78166] [transport.py] [_log()] Compression: none
2025-12-12T23:02:07.843 [DEBUG] [Thread-78166] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:02:07.861 [DEBUG] [Thread-78166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:02:07.861 [DEBUG] [Thread-78166] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:02:07.862 [DEBUG] [Thread-78166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:02:07.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:02:07.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:02:07.864 [DEBUG] [Thread-78166] [transport.py] [_log()] userauth is OK
2025-12-12T23:02:07.865 [DEBUG] [Thread-78166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:02:07.865 [DEBUG] [Thread-78166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:02:07.865 [DEBUG] [Thread-78166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:02:07.865 [DEBUG] [Thread-78166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:02:07.883 [INFO] [Thread-78166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:02:07.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:02:08.557 [DEBUG] [Thread-78166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:02:08.557 [DEBUG] [Thread-78166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:02:08.558 [DEBUG] [Thread-78166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:02:08.598 [DEBUG] [Thread-78166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:02:08.598 [DEBUG] [Thread-78166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:02:08.601 [DEBUG] [Thread-78166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:02:08.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:02:08.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:02:08.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:02:08.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:02:08.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:02:08.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:02:08.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:02:08.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:02:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:02:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.876141 -999.00   +8.80  38.53     94   +8.00 1 3 2 3 1     0    0 0.01 -36.56 ----- 35.1 38.5 301.0 50.5 10.4 -3.0 10.2 -1.7 9.7 -1.6 10.1 -1.2
2025-12-12T23:02:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:02:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:02:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.876141
2025-12-12T23:02:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:02:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:02:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:02:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:02:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:02:08.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:01:33', tmtdew=0.8, humidity=94.59, cloud=0.0, wind=38.87, temperature=9.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:01:38.582', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:02:08.623 [DEBUG] [Thread-78166] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:02:08.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:02:08.719 [DEBUG] [Thread-78169] [transport.py] [_log()] starting thread (client mode): 0xf5741600
2025-12-12T23:02:08.719 [DEBUG] [Thread-78169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:02:08.733 [DEBUG] [Thread-78169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:02:08.733 [INFO] [Thread-78169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:02:08.740 [DEBUG] [Thread-78169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:02:08.740 [DEBUG] [Thread-78169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] client lang: <none>
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] server lang: <none>
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] kex follows: False
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:02:08.741 [DEBUG] [Thread-78169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:02:08.742 [DEBUG] [Thread-78169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:02:08.742 [DEBUG] [Thread-78169] [transport.py] [_log()] Compression: none
2025-12-12T23:02:08.742 [DEBUG] [Thread-78169] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:02:08.797 [DEBUG] [Thread-78169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:02:08.797 [DEBUG] [Thread-78169] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:02:08.798 [DEBUG] [Thread-78169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:02:08.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:02:08.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:02:08.853 [DEBUG] [Thread-78169] [transport.py] [_log()] userauth is OK
2025-12-12T23:02:08.853 [DEBUG] [Thread-78169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:02:08.854 [DEBUG] [Thread-78169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:02:08.854 [DEBUG] [Thread-78169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:02:08.854 [DEBUG] [Thread-78169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:02:08.873 [INFO] [Thread-78169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:02:08.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:02:08.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:02:09.741 [DEBUG] [Thread-78169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:02:09.741 [DEBUG] [Thread-78169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:02:09.789 [DEBUG] [Thread-78169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:02:09.789 [DEBUG] [Thread-78169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:02:09.798 [DEBUG] [Thread-78169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:02:09.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:02:09.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:02:09.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:02:09.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:02:09.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:02:09.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:02:09.833 [DEBUG] [Thread-78169] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:02:18.746 [DEBUG] [Thread-78171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:22.009 [DEBUG] [Thread-78172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:37.052 [DEBUG] [Thread-78173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:39.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:02:39.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:02:39.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:02:40.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 2, 37), 0.75, 95.09, 0.0, 35.64, 9.18, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:02:40.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:02:37
2025-12-12T23:02:40.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:02:40.874 [DEBUG] [Thread-78174] [transport.py] [_log()] starting thread (client mode): 0xf5742f50
2025-12-12T23:02:40.875 [DEBUG] [Thread-78174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:02:40.894 [DEBUG] [Thread-78174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:02:40.894 [INFO] [Thread-78174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:02:40.897 [DEBUG] [Thread-78174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:02:40.897 [DEBUG] [Thread-78174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:02:40.897 [DEBUG] [Thread-78174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:02:40.897 [DEBUG] [Thread-78174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] client lang: <none>
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] server lang: <none>
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] kex follows: False
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] Compression: none
2025-12-12T23:02:40.898 [DEBUG] [Thread-78174] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:02:40.914 [DEBUG] [Thread-78174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:02:40.914 [DEBUG] [Thread-78174] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:02:40.914 [DEBUG] [Thread-78174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:02:40.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:02:40.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:02:40.915 [DEBUG] [Thread-78174] [transport.py] [_log()] userauth is OK
2025-12-12T23:02:40.915 [DEBUG] [Thread-78174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:02:40.915 [DEBUG] [Thread-78174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:02:40.915 [DEBUG] [Thread-78174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:02:40.915 [DEBUG] [Thread-78174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:02:40.934 [INFO] [Thread-78174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:02:40.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:02:41.585 [DEBUG] [Thread-78174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:02:41.585 [DEBUG] [Thread-78174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:02:41.585 [DEBUG] [Thread-78174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:02:41.626 [DEBUG] [Thread-78174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:02:41.626 [DEBUG] [Thread-78174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:02:41.628 [DEBUG] [Thread-78174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:02:41.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:02:41.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:02:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:02:41.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:02:41.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:02:41.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:02:41.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.876488 -999.00   +8.90  38.81     94   +8.10 1 3 2 3 1     0    0 0.00 -37.23 ----- 37.0 38.8 310.0 43.3 10.4 -1.6 10.2 -1.6 9.8 -1.0 10.0 -1.0
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.876488
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:02:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:02:37', tmtdew=0.75, humidity=95.09, cloud=0.0, wind=35.64, temperature=9.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:02:08.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:02:41.649 [DEBUG] [Thread-78174] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:02:41.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:02:41.735 [DEBUG] [Thread-78177] [transport.py] [_log()] starting thread (client mode): 0xf578a410
2025-12-12T23:02:41.735 [DEBUG] [Thread-78177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:02:41.750 [DEBUG] [Thread-78177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:02:41.750 [INFO] [Thread-78177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:02:41.757 [DEBUG] [Thread-78177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:02:41.757 [DEBUG] [Thread-78177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:02:41.757 [DEBUG] [Thread-78177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] client lang: <none>
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] server lang: <none>
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] kex follows: False
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] Compression: none
2025-12-12T23:02:41.758 [DEBUG] [Thread-78177] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:02:41.815 [DEBUG] [Thread-78177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:02:41.815 [DEBUG] [Thread-78177] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:02:41.816 [DEBUG] [Thread-78177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:02:41.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:02:41.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:02:41.872 [DEBUG] [Thread-78177] [transport.py] [_log()] userauth is OK
2025-12-12T23:02:41.872 [DEBUG] [Thread-78177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:02:41.872 [DEBUG] [Thread-78177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:02:41.872 [DEBUG] [Thread-78177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:02:41.872 [DEBUG] [Thread-78177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:02:41.890 [INFO] [Thread-78177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:02:41.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:02:41.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:02:42.702 [DEBUG] [Thread-78177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:02:42.702 [DEBUG] [Thread-78177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:02:42.749 [DEBUG] [Thread-78177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:02:42.749 [DEBUG] [Thread-78177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:02:42.757 [DEBUG] [Thread-78177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:02:42.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:02:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:02:42.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:02:42.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:02:42.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:02:42.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:02:42.789 [DEBUG] [Thread-78177] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:02:44.595 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:44.596 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:02:52.080 [DEBUG] [Thread-78179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:07.124 [DEBUG] [Thread-78180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:12.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:03:12.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:03:12.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:03:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 3, 9), 0.75, 95.09, 0.0, 36.03, 9.19, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:03:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:03:09
2025-12-12T23:03:13.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:03:13.794 [DEBUG] [Thread-78181] [transport.py] [_log()] starting thread (client mode): 0xf57415a0
2025-12-12T23:03:13.794 [DEBUG] [Thread-78181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:03:13.816 [DEBUG] [Thread-78181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:03:13.816 [INFO] [Thread-78181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] client lang: <none>
2025-12-12T23:03:13.819 [DEBUG] [Thread-78181] [transport.py] [_log()] server lang: <none>
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] kex follows: False
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] Compression: none
2025-12-12T23:03:13.820 [DEBUG] [Thread-78181] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:03:13.837 [DEBUG] [Thread-78181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:03:13.837 [DEBUG] [Thread-78181] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:03:13.838 [DEBUG] [Thread-78181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:03:13.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:03:13.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:03:13.840 [DEBUG] [Thread-78181] [transport.py] [_log()] userauth is OK
2025-12-12T23:03:13.840 [DEBUG] [Thread-78181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:03:13.840 [DEBUG] [Thread-78181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:03:13.841 [DEBUG] [Thread-78181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:03:13.841 [DEBUG] [Thread-78181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:03:13.877 [INFO] [Thread-78181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:03:13.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:03:14.484 [DEBUG] [Thread-78181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:03:14.484 [DEBUG] [Thread-78181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:03:14.484 [DEBUG] [Thread-78181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:03:14.525 [DEBUG] [Thread-78181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:03:14.525 [DEBUG] [Thread-78181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:03:14.527 [DEBUG] [Thread-78181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:03:14.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:03:14.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:03:14.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:03:14.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:03:14.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:03:14.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:03:14.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.876835 -999.00   +9.00  32.34     94   +8.20 1 3 2 3 1     0    0 0.00 -36.83 ----- 33.2 32.3 303.0 36.9 10.4 -1.6 10.2 -1.4 9.7 -1.1 10.1 -0.9
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.876835
2025-12-12T23:03:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:03:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:03:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:03:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:03:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:03:14.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:03:09', tmtdew=0.75, humidity=95.09, cloud=0.0, wind=36.03, temperature=9.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:02:38.544', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:03:14.549 [DEBUG] [Thread-78181] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:03:14.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:03:14.635 [DEBUG] [Thread-78184] [transport.py] [_log()] starting thread (client mode): 0xf572ca60
2025-12-12T23:03:14.635 [DEBUG] [Thread-78184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:03:14.650 [DEBUG] [Thread-78184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:03:14.650 [INFO] [Thread-78184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:03:14.658 [DEBUG] [Thread-78184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:03:14.658 [DEBUG] [Thread-78184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:03:14.658 [DEBUG] [Thread-78184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:03:14.658 [DEBUG] [Thread-78184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:14.658 [DEBUG] [Thread-78184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:14.658 [DEBUG] [Thread-78184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] client lang: <none>
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] server lang: <none>
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] kex follows: False
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:03:14.659 [DEBUG] [Thread-78184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:03:14.660 [DEBUG] [Thread-78184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:03:14.660 [DEBUG] [Thread-78184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:03:14.660 [DEBUG] [Thread-78184] [transport.py] [_log()] Compression: none
2025-12-12T23:03:14.660 [DEBUG] [Thread-78184] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:03:14.716 [DEBUG] [Thread-78184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:03:14.716 [DEBUG] [Thread-78184] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:03:14.717 [DEBUG] [Thread-78184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:03:14.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:03:14.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:03:14.772 [DEBUG] [Thread-78184] [transport.py] [_log()] userauth is OK
2025-12-12T23:03:14.772 [DEBUG] [Thread-78184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:03:14.773 [DEBUG] [Thread-78184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:03:14.773 [DEBUG] [Thread-78184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:03:14.773 [DEBUG] [Thread-78184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:03:14.796 [INFO] [Thread-78184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:03:14.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:03:14.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:03:15.632 [DEBUG] [Thread-78184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:03:15.632 [DEBUG] [Thread-78184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:03:15.682 [DEBUG] [Thread-78184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:03:15.682 [DEBUG] [Thread-78184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:03:15.691 [DEBUG] [Thread-78184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:03:15.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:03:15.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:03:15.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:03:15.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:03:15.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:03:15.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:03:15.725 [DEBUG] [Thread-78184] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:03:18.813 [DEBUG] [Thread-78186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:22.150 [DEBUG] [Thread-78187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:37.186 [DEBUG] [Thread-78188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:44.798 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:44.799 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:03:45.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:03:45.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:03: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
2025-12-12T23:03:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 3, 41), 0.74, 95.13, 0.0, 35.71, 9.14, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:03:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:03:41
2025-12-12T23:03:46.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:03:46.718 [DEBUG] [Thread-78189] [transport.py] [_log()] starting thread (client mode): 0xfabc6200
2025-12-12T23:03:46.718 [DEBUG] [Thread-78189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:03:46.740 [DEBUG] [Thread-78189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:03:46.740 [INFO] [Thread-78189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] client lang: <none>
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] server lang: <none>
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] kex follows: False
2025-12-12T23:03:46.744 [DEBUG] [Thread-78189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:03:46.745 [DEBUG] [Thread-78189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:03:46.745 [DEBUG] [Thread-78189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:03:46.745 [DEBUG] [Thread-78189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:03:46.745 [DEBUG] [Thread-78189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:03:46.745 [DEBUG] [Thread-78189] [transport.py] [_log()] Compression: none
2025-12-12T23:03:46.745 [DEBUG] [Thread-78189] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:03:46.761 [DEBUG] [Thread-78189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:03:46.762 [DEBUG] [Thread-78189] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:03:46.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:03:46.762 [DEBUG] [Thread-78189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:03:46.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:03:46.764 [DEBUG] [Thread-78189] [transport.py] [_log()] userauth is OK
2025-12-12T23:03:46.764 [DEBUG] [Thread-78189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:03:46.764 [DEBUG] [Thread-78189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:03:46.764 [DEBUG] [Thread-78189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:03:46.764 [DEBUG] [Thread-78189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:03:46.785 [INFO] [Thread-78189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:03:46.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:03:47.368 [DEBUG] [Thread-78189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:03:47.368 [DEBUG] [Thread-78189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:03:47.368 [DEBUG] [Thread-78189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:03:47.409 [DEBUG] [Thread-78189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:03:47.409 [DEBUG] [Thread-78189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:03:47.412 [DEBUG] [Thread-78189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:03:47.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:03:47.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:03:47.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:03:47.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:03:47.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:03:47.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:03:47.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:03:47.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:03:47.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:03:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.877182 -999.00   +9.10  31.05     94   +8.20 1 3 2 3 1     0    0 -0.00 -36.17 ----- 30.4 31.1 304.4 38.0 10.5 -1.5 10.3 -1.6 9.8 -1.4 10.2 -1.1
2025-12-12T23:03:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:03:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:03:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.877182
2025-12-12T23:03:47.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:03:47.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:03:47.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:03:47.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:03:47.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:03:47.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:03:41', tmtdew=0.74, humidity=95.13, cloud=0.0, wind=35.71, temperature=9.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:03:08.525', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:03:47.437 [DEBUG] [Thread-78189] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:03:47.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:03:47.534 [DEBUG] [Thread-78192] [transport.py] [_log()] starting thread (client mode): 0xfabc7820
2025-12-12T23:03:47.534 [DEBUG] [Thread-78192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:03:47.549 [DEBUG] [Thread-78192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:03:47.549 [INFO] [Thread-78192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:03:47.556 [DEBUG] [Thread-78192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:03:47.556 [DEBUG] [Thread-78192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:03:47.557 [DEBUG] [Thread-78192] [transport.py] [_log()] client lang: <none>
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] server lang: <none>
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] kex follows: False
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:03:47.558 [DEBUG] [Thread-78192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:03:47.559 [DEBUG] [Thread-78192] [transport.py] [_log()] Compression: none
2025-12-12T23:03:47.559 [DEBUG] [Thread-78192] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:03:47.619 [DEBUG] [Thread-78192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:03:47.619 [DEBUG] [Thread-78192] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:03:47.620 [DEBUG] [Thread-78192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:03:47.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:03:47.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:03:47.675 [DEBUG] [Thread-78192] [transport.py] [_log()] userauth is OK
2025-12-12T23:03:47.675 [DEBUG] [Thread-78192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:03:47.675 [DEBUG] [Thread-78192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:03:47.675 [DEBUG] [Thread-78192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:03:47.676 [DEBUG] [Thread-78192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:03:47.695 [INFO] [Thread-78192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:03:47.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:03:47.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:03:48.506 [DEBUG] [Thread-78192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:03:48.506 [DEBUG] [Thread-78192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:03:48.557 [DEBUG] [Thread-78192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:03:48.557 [DEBUG] [Thread-78192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:03:48.566 [DEBUG] [Thread-78192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:03:48.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:03:48.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:03:48.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:03:48.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:03:48.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:03:48.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:03:48.601 [DEBUG] [Thread-78192] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:03:52.215 [DEBUG] [Thread-78194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:07.259 [DEBUG] [Thread-78195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:04:18.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:04:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:04:18.888 [DEBUG] [Thread-78196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 4, 13), 0.74, 95.14, 0.0, 38.78, 9.13, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:04:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:04:13
2025-12-12T23:04:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:04:19.585 [DEBUG] [Thread-78197] [transport.py] [_log()] starting thread (client mode): 0xf5772b30
2025-12-12T23:04:19.586 [DEBUG] [Thread-78197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:04:19.605 [DEBUG] [Thread-78197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:04:19.606 [INFO] [Thread-78197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] client lang: <none>
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] server lang: <none>
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] kex follows: False
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:04:19.609 [DEBUG] [Thread-78197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:04:19.610 [DEBUG] [Thread-78197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:04:19.610 [DEBUG] [Thread-78197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:04:19.610 [DEBUG] [Thread-78197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:04:19.610 [DEBUG] [Thread-78197] [transport.py] [_log()] Compression: none
2025-12-12T23:04:19.610 [DEBUG] [Thread-78197] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:04:19.626 [DEBUG] [Thread-78197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:04:19.627 [DEBUG] [Thread-78197] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:04:19.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:04:19.628 [DEBUG] [Thread-78197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:04:19.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:04:19.630 [DEBUG] [Thread-78197] [transport.py] [_log()] userauth is OK
2025-12-12T23:04:19.630 [DEBUG] [Thread-78197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:04:19.630 [DEBUG] [Thread-78197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:04:19.630 [DEBUG] [Thread-78197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:04:19.630 [DEBUG] [Thread-78197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:04:19.665 [INFO] [Thread-78197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:04:19.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:04:20.296 [DEBUG] [Thread-78197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:04:20.296 [DEBUG] [Thread-78197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:04:20.296 [DEBUG] [Thread-78197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:04:20.337 [DEBUG] [Thread-78197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:04:20.337 [DEBUG] [Thread-78197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:04:20.340 [DEBUG] [Thread-78197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:04:20.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:04:20.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:04:20.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:04:20.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:04:20.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:04:20.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:04:20.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:04:20.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:04:20.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:04:20.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.877529 -999.00   +8.90  45.35     94   +8.10 1 3 2 3 1     0    0 -0.05 -37.01 ----- 41.7 45.4 298.8 49.5 10.5 -1.9 10.2 -1.7 9.8 -1.3 10.1 -1.1
2025-12-12T23:04:20.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:04:20.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:04:20.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.877529
2025-12-12T23:04:20.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:04:20.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:04:20.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:04:20.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:04:20.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:04:20.365 [DEBUG] [Thread-78197] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:04:20.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:04:13', tmtdew=0.74, humidity=95.14, cloud=0.0, wind=38.78, temperature=9.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:03:38.506', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:04:20.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:04:20.462 [DEBUG] [Thread-78200] [transport.py] [_log()] starting thread (client mode): 0xf5742a10
2025-12-12T23:04:20.462 [DEBUG] [Thread-78200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:04:20.476 [DEBUG] [Thread-78200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:04:20.476 [INFO] [Thread-78200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] client lang: <none>
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] server lang: <none>
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] kex follows: False
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:04:20.484 [DEBUG] [Thread-78200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:04:20.485 [DEBUG] [Thread-78200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:04:20.485 [DEBUG] [Thread-78200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:04:20.485 [DEBUG] [Thread-78200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:04:20.485 [DEBUG] [Thread-78200] [transport.py] [_log()] Compression: none
2025-12-12T23:04:20.485 [DEBUG] [Thread-78200] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:04:20.541 [DEBUG] [Thread-78200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:04:20.542 [DEBUG] [Thread-78200] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:04:20.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:04:20.542 [DEBUG] [Thread-78200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:04:20.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:04:20.598 [DEBUG] [Thread-78200] [transport.py] [_log()] userauth is OK
2025-12-12T23:04:20.599 [DEBUG] [Thread-78200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:04:20.599 [DEBUG] [Thread-78200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:04:20.599 [DEBUG] [Thread-78200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:04:20.599 [DEBUG] [Thread-78200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:04:20.617 [INFO] [Thread-78200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:04:20.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:04:20.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:04:21.422 [DEBUG] [Thread-78200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:04:21.422 [DEBUG] [Thread-78200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:04:21.470 [DEBUG] [Thread-78200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:04:21.470 [DEBUG] [Thread-78200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:04:21.480 [DEBUG] [Thread-78200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:04:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:04:21.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:04:21.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:04:21.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:04:21.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:04:21.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:04:21.517 [DEBUG] [Thread-78200] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:04:22.289 [DEBUG] [Thread-78202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:37.339 [DEBUG] [Thread-78203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:45.004 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:45.005 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:04:51.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:04:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:04:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 4, 45), 0.74, 95.18, 0.0, 38.59, 9.18, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:04:52.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:04:45
2025-12-12T23:04:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:04:52.363 [DEBUG] [Thread-78204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:04:52.490 [DEBUG] [Thread-78205] [transport.py] [_log()] starting thread (client mode): 0xfabc6f50
2025-12-12T23:04:52.490 [DEBUG] [Thread-78205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:04:52.505 [DEBUG] [Thread-78205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:04:52.505 [INFO] [Thread-78205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] client lang: <none>
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] server lang: <none>
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] kex follows: False
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:04:52.508 [DEBUG] [Thread-78205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:04:52.509 [DEBUG] [Thread-78205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:04:52.509 [DEBUG] [Thread-78205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:04:52.509 [DEBUG] [Thread-78205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:04:52.509 [DEBUG] [Thread-78205] [transport.py] [_log()] Compression: none
2025-12-12T23:04:52.509 [DEBUG] [Thread-78205] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:04:52.524 [DEBUG] [Thread-78205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:04:52.524 [DEBUG] [Thread-78205] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:04:52.524 [DEBUG] [Thread-78205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:04:52.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:04:52.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:04:52.525 [DEBUG] [Thread-78205] [transport.py] [_log()] userauth is OK
2025-12-12T23:04:52.525 [DEBUG] [Thread-78205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:04:52.526 [DEBUG] [Thread-78205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:04:52.526 [DEBUG] [Thread-78205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:04:52.526 [DEBUG] [Thread-78205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:04:52.538 [INFO] [Thread-78205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:04:52.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:04:53.183 [DEBUG] [Thread-78205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:04:53.183 [DEBUG] [Thread-78205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:04:53.184 [DEBUG] [Thread-78205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:04:53.225 [DEBUG] [Thread-78205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:04:53.225 [DEBUG] [Thread-78205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:04:53.228 [DEBUG] [Thread-78205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:04:53.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:04:53.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:04:53.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:04:53.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:04:53.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:04:53.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:04:53.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:04:53.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:04:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:04:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.878224 -999.00   +8.90  35.88     94   +8.00 1 3 2 3 1     0    0 -0.12 -38.39 ----- 35.8 35.9 296.0 51.5 10.4 -1.8 10.2 -1.6 9.7 -1.5 10.1 -1.2
2025-12-12T23:04:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:04:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:04:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.878224
2025-12-12T23:04:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:04:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:04:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:04:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:04:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:04:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:04:45', tmtdew=0.74, humidity=95.18, cloud=0.0, wind=38.59, temperature=9.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:04:38.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:04:53.253 [DEBUG] [Thread-78205] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:04:53.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:04:53.349 [DEBUG] [Thread-78208] [transport.py] [_log()] starting thread (client mode): 0xfabc78b0
2025-12-12T23:04:53.350 [DEBUG] [Thread-78208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:04:53.365 [DEBUG] [Thread-78208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:04:53.365 [INFO] [Thread-78208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:04:53.372 [DEBUG] [Thread-78208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] client lang: <none>
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] server lang: <none>
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] kex follows: False
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] Compression: none
2025-12-12T23:04:53.373 [DEBUG] [Thread-78208] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:04:53.431 [DEBUG] [Thread-78208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:04:53.431 [DEBUG] [Thread-78208] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:04:53.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:04:53.432 [DEBUG] [Thread-78208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:04:53.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:04:53.486 [DEBUG] [Thread-78208] [transport.py] [_log()] userauth is OK
2025-12-12T23:04:53.486 [DEBUG] [Thread-78208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:04:53.486 [DEBUG] [Thread-78208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:04:53.486 [DEBUG] [Thread-78208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:04:53.486 [DEBUG] [Thread-78208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:04:53.507 [INFO] [Thread-78208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:04:53.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:04:53.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:04:54.349 [DEBUG] [Thread-78208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:04:54.349 [DEBUG] [Thread-78208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:04:54.397 [DEBUG] [Thread-78208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:04:54.397 [DEBUG] [Thread-78208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:04:54.406 [DEBUG] [Thread-78208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:04:54.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:04: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')
2025-12-12T23:04:54.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:04:54.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:04:54.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:04:54.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:04:54.440 [DEBUG] [Thread-78208] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:05:07.393 [DEBUG] [Thread-78210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:05:18.958 [DEBUG] [Thread-78211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:05:22.436 [DEBUG] [Thread-78212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:05:24.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:05:24.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:05:24.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:05:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 5, 17), 0.73, 95.19, 0.0, 35.46, 9.18, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:05:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:05:17
2025-12-12T23:05:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:05:25.435 [DEBUG] [Thread-78213] [transport.py] [_log()] starting thread (client mode): 0xf578a980
2025-12-12T23:05:25.435 [DEBUG] [Thread-78213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:05:25.456 [DEBUG] [Thread-78213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:05:25.456 [INFO] [Thread-78213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] client lang: <none>
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] server lang: <none>
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] kex follows: False
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] Compression: none
2025-12-12T23:05:25.459 [DEBUG] [Thread-78213] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:05:25.477 [DEBUG] [Thread-78213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:05:25.477 [DEBUG] [Thread-78213] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:05:25.477 [DEBUG] [Thread-78213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:05:25.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:05:25.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:05:25.521 [DEBUG] [Thread-78213] [transport.py] [_log()] userauth is OK
2025-12-12T23:05:25.521 [DEBUG] [Thread-78213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:05:25.521 [DEBUG] [Thread-78213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:05:25.521 [DEBUG] [Thread-78213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:05:25.521 [DEBUG] [Thread-78213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:05:25.542 [INFO] [Thread-78213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:05:25.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:05:26.184 [DEBUG] [Thread-78213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:05:26.184 [DEBUG] [Thread-78213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:05:26.184 [DEBUG] [Thread-78213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:05:26.225 [DEBUG] [Thread-78213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:05:26.225 [DEBUG] [Thread-78213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:05:26.228 [DEBUG] [Thread-78213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:05:26.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:05:26.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:05:26.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:05:26.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:05:26.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:05:26.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:05:26.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:05:26.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:05:26.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:05:26.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.878571 -999.00   +9.00  42.30     94   +8.10 1 3 2 3 1     0    0 -0.05 -36.83 ----- 37.1 42.3 301.6 48.5 10.4 -1.7 10.2 -1.7 9.7 -1.8 10.1 -1.1
2025-12-12T23:05:26.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:05:26.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:05:26.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.878571
2025-12-12T23:05:26.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:05:26.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:05:26.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:05:26.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:05:26.252 [DEBUG] [Thread-78213] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:05:26.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:05:26.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:05:17', tmtdew=0.73, humidity=95.19, cloud=0.0, wind=35.46, temperature=9.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:05:08.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 0.7462500000000007, 0.5932500000000003, 0.7369999999999992, nan, nan, nan, nan, nan, 0.559000000000001, 0.41825000000000045, 0.4759999999999991, nan, nan, nan, nan, nan, 1.0315000000000003, 0.9204999999999997, 0.7982499999999986, 1.2169999999999987, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T20:42:00')
2025-12-12T23:05:26.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:05:37.466 [DEBUG] [Thread-78216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:05:45.212 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:05:45.214 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:05:52.509 [DEBUG] [Thread-78217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:07.535 [DEBUG] [Thread-78218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:19.039 [DEBUG] [Thread-78219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:22.565 [DEBUG] [Thread-78220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:37.589 [DEBUG] [Thread-78221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:45.417 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:45.418 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:06:52.617 [DEBUG] [Thread-78222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:07.649 [DEBUG] [Thread-78223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:19.114 [DEBUG] [Thread-78224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:22.677 [DEBUG] [Thread-78225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:37.708 [DEBUG] [Thread-78226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:40.394 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T23:07:45.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:45.622 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:07:52.737 [DEBUG] [Thread-78227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:07.762 [DEBUG] [Thread-78228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:08:10.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:08:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:08:11.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 7, 57), 0.74, 95.16, 0.0, 39.15, 9.13, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:08:11.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:07:57
2025-12-12T23:08:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:08:11.388 [DEBUG] [Thread-78229] [transport.py] [_log()] starting thread (client mode): 0xf5789f90
2025-12-12T23:08:11.388 [DEBUG] [Thread-78229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:08:11.408 [DEBUG] [Thread-78229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:08:11.408 [INFO] [Thread-78229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:08:11.409 [DEBUG] [Thread-78229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:08:11.409 [DEBUG] [Thread-78229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] client lang: <none>
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] server lang: <none>
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] kex follows: False
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] Compression: none
2025-12-12T23:08:11.410 [DEBUG] [Thread-78229] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:08:11.429 [DEBUG] [Thread-78229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:08:11.429 [DEBUG] [Thread-78229] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:08:11.429 [DEBUG] [Thread-78229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:08:11.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:08:11.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:08:11.431 [DEBUG] [Thread-78229] [transport.py] [_log()] userauth is OK
2025-12-12T23:08:11.432 [DEBUG] [Thread-78229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:08:11.432 [DEBUG] [Thread-78229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:08:11.432 [DEBUG] [Thread-78229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:08:11.432 [DEBUG] [Thread-78229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:08:11.455 [INFO] [Thread-78229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:08:11.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:08:12.054 [DEBUG] [Thread-78229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:08:12.054 [DEBUG] [Thread-78229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:08:12.055 [DEBUG] [Thread-78229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:08:12.095 [DEBUG] [Thread-78229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:08:12.095 [DEBUG] [Thread-78229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:08:12.098 [DEBUG] [Thread-78229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:08:12.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:08:12.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:08:12.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:08:12.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:08:12.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:08:12.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:08:12.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:08:12.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:08:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:08:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.880307 -999.00   +8.70  40.60     94   +7.90 1 3 2 3 1     0    0 -0.20 -40.05 ..ES. 39.2 40.6 301.4 56.6 10.3 -5.1 10.1 -4.8 9.6 -3.9 10.0 -2.2
2025-12-12T23:08:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:08:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:08:12.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.880307
2025-12-12T23:08:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:08:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:08:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:08:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:08:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:08:12.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:07:57', tmtdew=0.74, humidity=95.16, cloud=0.0, wind=39.15, temperature=9.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:07:38.525', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.2222500000000007, 0.8892500000000005, 0.9964999999999993, nan, nan, nan, nan, nan, 0.43299999999999983, 0.4122500000000002, nan, nan, nan, nan, nan, 2.3912499999999994, 0.29850000000000065, 0.27399999999999913, 0.7522499999999983, nan, nan, nan, nan, 2.1244999999999994, 0.5335000000000001, 0.3572500000000005, 0.4815000000000005, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:06:00')
2025-12-12T23:08:12.123 [DEBUG] [Thread-78229] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:08:12.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:08:12.220 [DEBUG] [Thread-78232] [transport.py] [_log()] starting thread (client mode): 0xf57898a0
2025-12-12T23:08:12.220 [DEBUG] [Thread-78232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:08:12.236 [DEBUG] [Thread-78232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:08:12.236 [INFO] [Thread-78232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:08:12.245 [DEBUG] [Thread-78232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:08:12.245 [DEBUG] [Thread-78232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:08:12.245 [DEBUG] [Thread-78232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:08:12.245 [DEBUG] [Thread-78232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] client lang: <none>
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] server lang: <none>
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] kex follows: False
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] Compression: none
2025-12-12T23:08:12.246 [DEBUG] [Thread-78232] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:08:12.302 [DEBUG] [Thread-78232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:08:12.303 [DEBUG] [Thread-78232] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:08:12.303 [DEBUG] [Thread-78232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:08:12.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:08:12.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:08:12.359 [DEBUG] [Thread-78232] [transport.py] [_log()] userauth is OK
2025-12-12T23:08:12.359 [DEBUG] [Thread-78232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:08:12.359 [DEBUG] [Thread-78232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:08:12.359 [DEBUG] [Thread-78232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:08:12.359 [DEBUG] [Thread-78232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:08:12.378 [INFO] [Thread-78232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:08:12.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:08:12.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:08:13.181 [DEBUG] [Thread-78232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:08:13.181 [DEBUG] [Thread-78232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:08:13.228 [DEBUG] [Thread-78232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:08:13.229 [DEBUG] [Thread-78232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:08:13.237 [DEBUG] [Thread-78232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:08:13.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:08:13.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:08:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:08:13.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:08:13.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:08:13.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:08:13.272 [DEBUG] [Thread-78232] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:08:19.188 [DEBUG] [Thread-78234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:22.790 [DEBUG] [Thread-78235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:37.836 [DEBUG] [Thread-78236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:08:43.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:08:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:08:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 8, 29), 0.72, 95.26, 0.0, 36.49, 9.14, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:08:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:08:29
2025-12-12T23:08:44.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:08:44.240 [DEBUG] [Thread-78237] [transport.py] [_log()] starting thread (client mode): 0xf572d120
2025-12-12T23:08:44.240 [DEBUG] [Thread-78237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:08:44.249 [DEBUG] [Thread-78237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:08:44.249 [INFO] [Thread-78237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] client lang: <none>
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] server lang: <none>
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] kex follows: False
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:08:44.252 [DEBUG] [Thread-78237] [transport.py] [_log()] Compression: none
2025-12-12T23:08:44.253 [DEBUG] [Thread-78237] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:08:44.272 [DEBUG] [Thread-78237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:08:44.273 [DEBUG] [Thread-78237] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:08:44.273 [DEBUG] [Thread-78237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:08:44.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:08:44.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:08:44.276 [DEBUG] [Thread-78237] [transport.py] [_log()] userauth is OK
2025-12-12T23:08:44.277 [DEBUG] [Thread-78237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:08:44.277 [DEBUG] [Thread-78237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:08:44.277 [DEBUG] [Thread-78237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:08:44.277 [DEBUG] [Thread-78237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:08:44.297 [INFO] [Thread-78237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:08:44.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:08:44.865 [DEBUG] [Thread-78237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:08:44.866 [DEBUG] [Thread-78237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:08:44.866 [DEBUG] [Thread-78237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:08:44.907 [DEBUG] [Thread-78237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:08:44.907 [DEBUG] [Thread-78237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:08:44.913 [DEBUG] [Thread-78237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:08:44.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:08:44.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:08:44.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:08:44.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:08:44.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:08:44.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:08:44.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:08:44.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:08:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:08:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.881001 -999.00   +8.90  34.54     94   +8.00 1 3 2 3 1     0    0 -0.30 -42.58 Z.Es. 33.6 34.5 304.8 45.6 10.3 -2.7 10.1 -4.4 9.7 -3.1 10.0 -2.1
2025-12-12T23:08:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:08:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:08:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.881001
2025-12-12T23:08:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:08:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:08:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:08:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:08:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:08:44.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:08:29', tmtdew=0.72, humidity=95.26, cloud=0.0, wind=36.49, temperature=9.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:08:38.486', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.2222500000000007, 0.8892500000000005, 0.9964999999999993, nan, nan, nan, nan, nan, 0.43299999999999983, 0.4122500000000002, nan, nan, nan, nan, nan, 2.3912499999999994, 0.29850000000000065, 0.27399999999999913, 0.7522499999999983, nan, nan, nan, nan, 2.1244999999999994, 0.5335000000000001, 0.3572500000000005, 0.4815000000000005, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:06:00')
2025-12-12T23:08:44.931 [DEBUG] [Thread-78237] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:08:45.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:08:45.025 [DEBUG] [Thread-78240] [transport.py] [_log()] starting thread (client mode): 0xfabc6c50
2025-12-12T23:08:45.025 [DEBUG] [Thread-78240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:08:45.039 [DEBUG] [Thread-78240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:08:45.040 [INFO] [Thread-78240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:08:45.047 [DEBUG] [Thread-78240] [transport.py] [_log()] client lang: <none>
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] server lang: <none>
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] kex follows: False
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] Compression: none
2025-12-12T23:08:45.048 [DEBUG] [Thread-78240] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:08:45.105 [DEBUG] [Thread-78240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:08:45.106 [DEBUG] [Thread-78240] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:08:45.106 [DEBUG] [Thread-78240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:08:45.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:08:45.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:08:45.162 [DEBUG] [Thread-78240] [transport.py] [_log()] userauth is OK
2025-12-12T23:08:45.163 [DEBUG] [Thread-78240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:08:45.163 [DEBUG] [Thread-78240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:08:45.163 [DEBUG] [Thread-78240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:08:45.163 [DEBUG] [Thread-78240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:08:45.181 [INFO] [Thread-78240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:08:45.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:08:45.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:08:45.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:45.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:08:46.035 [DEBUG] [Thread-78240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:08:46.036 [DEBUG] [Thread-78240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:08:46.084 [DEBUG] [Thread-78240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:08:46.084 [DEBUG] [Thread-78240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:08:46.093 [DEBUG] [Thread-78240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:08:46.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:08:46.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:08:46.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:08:46.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:08:46.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:08:46.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:08:46.127 [DEBUG] [Thread-78240] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:08:52.868 [DEBUG] [Thread-78242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:07.913 [DEBUG] [Thread-78243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:09:16.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:09:16.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:09:16.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 9, 1), 0.72, 95.26, 0.0, 35.68, 9.14, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:09:16.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:09:01
2025-12-12T23:09:16.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:09:17.130 [DEBUG] [Thread-78244] [transport.py] [_log()] starting thread (client mode): 0xfabc5ae0
2025-12-12T23:09:17.131 [DEBUG] [Thread-78244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:09:17.150 [DEBUG] [Thread-78244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:09:17.150 [INFO] [Thread-78244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:09:17.153 [DEBUG] [Thread-78244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:09:17.153 [DEBUG] [Thread-78244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:09:17.153 [DEBUG] [Thread-78244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:09:17.153 [DEBUG] [Thread-78244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] client lang: <none>
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] server lang: <none>
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] kex follows: False
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] Compression: none
2025-12-12T23:09:17.154 [DEBUG] [Thread-78244] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:09:17.170 [DEBUG] [Thread-78244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:09:17.170 [DEBUG] [Thread-78244] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:09:17.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:09:17.171 [DEBUG] [Thread-78244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:09:17.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:09:17.177 [DEBUG] [Thread-78244] [transport.py] [_log()] userauth is OK
2025-12-12T23:09:17.178 [DEBUG] [Thread-78244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:09:17.178 [DEBUG] [Thread-78244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:09:17.178 [DEBUG] [Thread-78244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:09:17.178 [DEBUG] [Thread-78244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:09:17.199 [INFO] [Thread-78244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:09:17.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:09:17.794 [DEBUG] [Thread-78244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:09:17.795 [DEBUG] [Thread-78244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:09:17.795 [DEBUG] [Thread-78244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:09:17.836 [DEBUG] [Thread-78244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:09:17.836 [DEBUG] [Thread-78244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:09:17.840 [DEBUG] [Thread-78244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:09:17.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:09:17.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:09:17.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:09:17.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:09:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:09:17.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:09:17.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:09:17.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:09:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:09:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.881349 -999.00   +8.90  38.99     94   +8.00 1 3 2 3 1     0    0 -0.18 -37.85 ----- 38.4 39.0 302.2 54.2 10.4 -4.0 10.1 -3.3 9.6 -3.1 10.0 -2.0
2025-12-12T23:09:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:09:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:09:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.881349
2025-12-12T23:09:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:09:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:09:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:09:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:09:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:09:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:09:01', tmtdew=0.72, humidity=95.26, cloud=0.0, wind=35.68, temperature=9.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:09:08.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.2222500000000007, 0.8892500000000005, 0.9964999999999993, nan, nan, nan, nan, nan, 0.43299999999999983, 0.4122500000000002, nan, nan, nan, nan, nan, 2.3912499999999994, 0.29850000000000065, 0.27399999999999913, 0.7522499999999983, nan, nan, nan, nan, 2.1244999999999994, 0.5335000000000001, 0.3572500000000005, 0.4815000000000005, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:06:00')
2025-12-12T23:09:17.863 [DEBUG] [Thread-78244] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:09:17.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:09:17.960 [DEBUG] [Thread-78247] [transport.py] [_log()] starting thread (client mode): 0xf578a470
2025-12-12T23:09:17.960 [DEBUG] [Thread-78247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:09:17.975 [DEBUG] [Thread-78247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:09:17.975 [INFO] [Thread-78247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] client lang: <none>
2025-12-12T23:09:17.983 [DEBUG] [Thread-78247] [transport.py] [_log()] server lang: <none>
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] kex follows: False
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] Compression: none
2025-12-12T23:09:17.984 [DEBUG] [Thread-78247] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:09:18.041 [DEBUG] [Thread-78247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:09:18.042 [DEBUG] [Thread-78247] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:09:18.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:09:18.043 [DEBUG] [Thread-78247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:09:18.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:09:18.098 [DEBUG] [Thread-78247] [transport.py] [_log()] userauth is OK
2025-12-12T23:09:18.098 [DEBUG] [Thread-78247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:09:18.098 [DEBUG] [Thread-78247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:09:18.098 [DEBUG] [Thread-78247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:09:18.098 [DEBUG] [Thread-78247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:09:18.121 [INFO] [Thread-78247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:09:18.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:09:18.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:09:18.921 [DEBUG] [Thread-78247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:09:18.921 [DEBUG] [Thread-78247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:09:18.969 [DEBUG] [Thread-78247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:09:18.969 [DEBUG] [Thread-78247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:09:18.978 [DEBUG] [Thread-78247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:09:18.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:09: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')
2025-12-12T23:09:18.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:09:19.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:09:19.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:09:19.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:09:19.013 [DEBUG] [Thread-78247] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:09:19.261 [DEBUG] [Thread-78249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:22.939 [DEBUG] [Thread-78250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:37.979 [DEBUG] [Thread-78251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:46.043 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:46.044 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:09:49.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:09:49.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:09:49.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:09:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 9, 33), 1.15, 92.45, 0.0, 43.72, 9.49, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:09:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:09:33
2025-12-12T23:09:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:09:50.049 [DEBUG] [Thread-78252] [transport.py] [_log()] starting thread (client mode): 0xf578b790
2025-12-12T23:09:50.049 [DEBUG] [Thread-78252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:09:50.070 [DEBUG] [Thread-78252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:09:50.070 [INFO] [Thread-78252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:50.073 [DEBUG] [Thread-78252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] client lang: <none>
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] server lang: <none>
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] kex follows: False
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] Compression: none
2025-12-12T23:09:50.074 [DEBUG] [Thread-78252] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:09:50.088 [DEBUG] [Thread-78252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:09:50.088 [DEBUG] [Thread-78252] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:09:50.088 [DEBUG] [Thread-78252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:09:50.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:09:50.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:09:50.089 [DEBUG] [Thread-78252] [transport.py] [_log()] userauth is OK
2025-12-12T23:09:50.089 [DEBUG] [Thread-78252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:09:50.089 [DEBUG] [Thread-78252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:09:50.089 [DEBUG] [Thread-78252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:09:50.089 [DEBUG] [Thread-78252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:09:50.109 [INFO] [Thread-78252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:09:50.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:09:50.680 [DEBUG] [Thread-78252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:09:50.680 [DEBUG] [Thread-78252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:09:50.680 [DEBUG] [Thread-78252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:09:50.722 [DEBUG] [Thread-78252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:09:50.722 [DEBUG] [Thread-78252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:09:50.724 [DEBUG] [Thread-78252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:09:50.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:09:50.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:09:50.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:09:50.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:09:50.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:09:50.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:09:50.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.881696 -999.00   +8.80  27.67     94   +7.90 1 3 1 3 1     0    0 -0.19 -38.37 ----- 35.3 27.7 303.8 48.6 10.3 -2.5 10.2 -2.0 9.7 -1.7 10.0 -1.4
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.881696
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:09:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:09:33', tmtdew=1.15, humidity=92.45, cloud=0.0, wind=43.72, temperature=9.49, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:09:38.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.2222500000000007, 0.8892500000000005, 0.9964999999999993, nan, nan, nan, nan, nan, 0.43299999999999983, 0.4122500000000002, nan, nan, nan, nan, nan, 2.3912499999999994, 0.29850000000000065, 0.27399999999999913, 0.7522499999999983, nan, nan, nan, nan, 2.1244999999999994, 0.5335000000000001, 0.3572500000000005, 0.4815000000000005, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:06:00')
2025-12-12T23:09:50.736 [DEBUG] [Thread-78252] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:09:50.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:09:50.822 [DEBUG] [Thread-78255] [transport.py] [_log()] starting thread (client mode): 0xfabc5d80
2025-12-12T23:09:50.822 [DEBUG] [Thread-78255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:09:50.837 [DEBUG] [Thread-78255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:09:50.837 [INFO] [Thread-78255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] client lang: <none>
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] server lang: <none>
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] kex follows: False
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] Compression: none
2025-12-12T23:09:50.844 [DEBUG] [Thread-78255] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:09:50.904 [DEBUG] [Thread-78255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:09:50.904 [DEBUG] [Thread-78255] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:09:50.904 [DEBUG] [Thread-78255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:09:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:09:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:09:50.961 [DEBUG] [Thread-78255] [transport.py] [_log()] userauth is OK
2025-12-12T23:09:50.961 [DEBUG] [Thread-78255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:09:50.961 [DEBUG] [Thread-78255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:09:50.961 [DEBUG] [Thread-78255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:09:50.961 [DEBUG] [Thread-78255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:09:50.975 [INFO] [Thread-78255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:09:50.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:09:50.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:09:51.830 [DEBUG] [Thread-78255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:09:51.830 [DEBUG] [Thread-78255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:09:51.877 [DEBUG] [Thread-78255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:09:51.878 [DEBUG] [Thread-78255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:09:51.886 [DEBUG] [Thread-78255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:09:51.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:09:51.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:09:51.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:09:51.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:09:51.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:09:51.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:09:51.917 [DEBUG] [Thread-78255] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:09:53.004 [DEBUG] [Thread-78257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:08.047 [DEBUG] [Thread-78258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:19.334 [DEBUG] [Thread-78259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:10:21.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:10:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:10:22.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 10, 5), 0.67, 95.28, 0.0, 42.61, 9.08, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:10:22.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:10:05
2025-12-12T23:10:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:10:22.919 [DEBUG] [Thread-78260] [transport.py] [_log()] starting thread (client mode): 0xfabc7460
2025-12-12T23:10:22.919 [DEBUG] [Thread-78260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:10:22.941 [DEBUG] [Thread-78260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:10:22.941 [INFO] [Thread-78260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:10:22.942 [DEBUG] [Thread-78260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:10:22.942 [DEBUG] [Thread-78260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:10:22.942 [DEBUG] [Thread-78260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] client lang: <none>
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] server lang: <none>
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] kex follows: False
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:10:22.943 [DEBUG] [Thread-78260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:10:22.944 [DEBUG] [Thread-78260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:10:22.944 [DEBUG] [Thread-78260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:10:22.944 [DEBUG] [Thread-78260] [transport.py] [_log()] Compression: none
2025-12-12T23:10:22.944 [DEBUG] [Thread-78260] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:10:22.963 [DEBUG] [Thread-78260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:10:22.964 [DEBUG] [Thread-78260] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:10:22.965 [DEBUG] [Thread-78260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:10:22.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:10:22.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:10:22.968 [DEBUG] [Thread-78260] [transport.py] [_log()] userauth is OK
2025-12-12T23:10:22.968 [DEBUG] [Thread-78260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:10:22.968 [DEBUG] [Thread-78260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:10:22.968 [DEBUG] [Thread-78260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:10:22.968 [DEBUG] [Thread-78260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:10:22.986 [INFO] [Thread-78260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:10:22.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:10:23.073 [DEBUG] [Thread-78262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:23.618 [DEBUG] [Thread-78260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:10:23.618 [DEBUG] [Thread-78260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:10:23.619 [DEBUG] [Thread-78260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:10:23.661 [DEBUG] [Thread-78260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:10:23.662 [DEBUG] [Thread-78260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:10:23.666 [DEBUG] [Thread-78260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:10:23.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:10:23.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:10:23.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:10:23.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:10:23.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:10:23.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:10:23.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:10:23.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:10:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:10:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.881696 -999.00   +8.80  27.67     94   +7.90 1 3 1 3 1     0    0 -0.19 -38.37 ----- 35.3 27.7 303.8 48.6 10.3 -2.5 10.2 -2.0 9.7 -1.7 10.0 -1.4
2025-12-12T23:10:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:10:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:10:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.881696
2025-12-12T23:10:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:10:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:10:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:10:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:10:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:10:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:10:05', tmtdew=0.67, humidity=95.28, cloud=0.0, wind=42.61, temperature=9.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:09:38.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.2222500000000007, 0.8892500000000005, 0.9964999999999993, nan, nan, nan, nan, nan, 0.43299999999999983, 0.4122500000000002, nan, nan, nan, nan, nan, 2.3912499999999994, 0.29850000000000065, 0.27399999999999913, 0.7522499999999983, nan, nan, nan, nan, 2.1244999999999994, 0.5335000000000001, 0.3572500000000005, 0.4815000000000005, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:06:00')
2025-12-12T23:10:23.703 [DEBUG] [Thread-78260] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:10:23.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:10:23.797 [DEBUG] [Thread-78264] [transport.py] [_log()] starting thread (client mode): 0xf572e3e0
2025-12-12T23:10:23.797 [DEBUG] [Thread-78264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:10:23.812 [DEBUG] [Thread-78264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:10:23.812 [INFO] [Thread-78264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:10:23.820 [DEBUG] [Thread-78264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] client lang: <none>
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] server lang: <none>
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] kex follows: False
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] Compression: none
2025-12-12T23:10:23.821 [DEBUG] [Thread-78264] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:10:23.876 [DEBUG] [Thread-78264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:10:23.877 [DEBUG] [Thread-78264] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:10:23.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:10:23.877 [DEBUG] [Thread-78264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:10:23.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:10:23.937 [DEBUG] [Thread-78264] [transport.py] [_log()] userauth is OK
2025-12-12T23:10:23.937 [DEBUG] [Thread-78264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:10:23.937 [DEBUG] [Thread-78264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:10:23.937 [DEBUG] [Thread-78264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:10:23.937 [DEBUG] [Thread-78264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:10:23.956 [INFO] [Thread-78264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:10:23.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:10:23.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:10:24.819 [DEBUG] [Thread-78264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:10:24.820 [DEBUG] [Thread-78264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:10:24.868 [DEBUG] [Thread-78264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:10:24.868 [DEBUG] [Thread-78264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:10:24.877 [DEBUG] [Thread-78264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:10:24.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:10:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:10:24.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:10:24.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:10:24.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:10:24.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:10:24.913 [DEBUG] [Thread-78264] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:10:38.105 [DEBUG] [Thread-78266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:46.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:46.251 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:53.147 [DEBUG] [Thread-78267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:10:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:10:54.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:10: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
2025-12-12T23:10:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 10, 37), 0.67, 95.26, 0.0, 31.79, 9.14, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:10:55.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:10:37
2025-12-12T23:10:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:10:55.889 [DEBUG] [Thread-78268] [transport.py] [_log()] starting thread (client mode): 0xf572c520
2025-12-12T23:10:55.889 [DEBUG] [Thread-78268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:10:55.912 [DEBUG] [Thread-78268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:10:55.912 [INFO] [Thread-78268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:10:55.913 [DEBUG] [Thread-78268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] client lang: <none>
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] server lang: <none>
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] kex follows: False
2025-12-12T23:10:55.914 [DEBUG] [Thread-78268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:10:55.915 [DEBUG] [Thread-78268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:10:55.915 [DEBUG] [Thread-78268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:10:55.915 [DEBUG] [Thread-78268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:10:55.915 [DEBUG] [Thread-78268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:10:55.915 [DEBUG] [Thread-78268] [transport.py] [_log()] Compression: none
2025-12-12T23:10:55.915 [DEBUG] [Thread-78268] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:10:55.927 [DEBUG] [Thread-78268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:10:55.928 [DEBUG] [Thread-78268] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:10:55.929 [DEBUG] [Thread-78268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:10:55.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:10:55.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:10:55.931 [DEBUG] [Thread-78268] [transport.py] [_log()] userauth is OK
2025-12-12T23:10:55.931 [DEBUG] [Thread-78268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:10:55.932 [DEBUG] [Thread-78268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:10:55.932 [DEBUG] [Thread-78268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:10:55.932 [DEBUG] [Thread-78268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:10:55.956 [INFO] [Thread-78268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:10:55.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:10:56.606 [DEBUG] [Thread-78268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:10:56.606 [DEBUG] [Thread-78268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:10:56.606 [DEBUG] [Thread-78268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:10:56.647 [DEBUG] [Thread-78268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:10:56.647 [DEBUG] [Thread-78268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:10:56.650 [DEBUG] [Thread-78268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:10:56.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:10:56.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:10:56.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:10:56.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:10:56.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:10:56.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:10:56.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.882043 -999.00   +8.90  31.82     94   +7.90 1 3 2 3 1     0    0 -0.25 -39.80 ...S. 34.0 31.8 300.8 46.4 10.3 -1.8 10.1 -5.1 9.7 -3.7 10.0 -4.5
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.882043
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:10:56.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:10:37', tmtdew=0.67, humidity=95.26, cloud=0.0, wind=31.79, temperature=9.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:10:08.515', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:09:00')
2025-12-12T23:10:56.670 [DEBUG] [Thread-78268] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:10:56.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:10:56.758 [DEBUG] [Thread-78271] [transport.py] [_log()] starting thread (client mode): 0xf572f700
2025-12-12T23:10:56.758 [DEBUG] [Thread-78271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:10:56.773 [DEBUG] [Thread-78271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:10:56.773 [INFO] [Thread-78271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:10:56.781 [DEBUG] [Thread-78271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] client lang: <none>
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] server lang: <none>
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] kex follows: False
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:10:56.782 [DEBUG] [Thread-78271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:10:56.783 [DEBUG] [Thread-78271] [transport.py] [_log()] Compression: none
2025-12-12T23:10:56.783 [DEBUG] [Thread-78271] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:10:56.840 [DEBUG] [Thread-78271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:10:56.841 [DEBUG] [Thread-78271] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:10:56.842 [DEBUG] [Thread-78271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:10:56.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:10:56.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:10:56.896 [DEBUG] [Thread-78271] [transport.py] [_log()] userauth is OK
2025-12-12T23:10:56.897 [DEBUG] [Thread-78271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:10:56.897 [DEBUG] [Thread-78271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:10:56.897 [DEBUG] [Thread-78271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:10:56.897 [DEBUG] [Thread-78271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:10:56.917 [INFO] [Thread-78271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:10:56.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:10:56.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:10:57.723 [DEBUG] [Thread-78271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:10:57.723 [DEBUG] [Thread-78271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:10:57.771 [DEBUG] [Thread-78271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:10:57.771 [DEBUG] [Thread-78271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:10:57.780 [DEBUG] [Thread-78271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:10:57.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:10:57.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:10:57.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:10:57.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:10:57.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:10:57.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:10:57.817 [DEBUG] [Thread-78271] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:11:08.178 [DEBUG] [Thread-78273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:11:19.414 [DEBUG] [Thread-78274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:11:23.221 [DEBUG] [Thread-78275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:11:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:11:27.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:11:27.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
2025-12-12T23:11:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 11, 9), 0.67, 95.26, 0.0, 38.09, 9.19, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:11:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:11:09
2025-12-12T23:11:28.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:11:28.806 [DEBUG] [Thread-78276] [transport.py] [_log()] starting thread (client mode): 0xf572d630
2025-12-12T23:11:28.807 [DEBUG] [Thread-78276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:11:28.830 [DEBUG] [Thread-78276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:11:28.830 [INFO] [Thread-78276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] client lang: <none>
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] server lang: <none>
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] kex follows: False
2025-12-12T23:11:28.832 [DEBUG] [Thread-78276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:11:28.833 [DEBUG] [Thread-78276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:11:28.833 [DEBUG] [Thread-78276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:11:28.833 [DEBUG] [Thread-78276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:11:28.833 [DEBUG] [Thread-78276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:11:28.833 [DEBUG] [Thread-78276] [transport.py] [_log()] Compression: none
2025-12-12T23:11:28.833 [DEBUG] [Thread-78276] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:11:28.852 [DEBUG] [Thread-78276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:11:28.852 [DEBUG] [Thread-78276] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:11:28.853 [DEBUG] [Thread-78276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:11:28.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:11:28.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:11:28.856 [DEBUG] [Thread-78276] [transport.py] [_log()] userauth is OK
2025-12-12T23:11:28.856 [DEBUG] [Thread-78276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:11:28.856 [DEBUG] [Thread-78276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:11:28.856 [DEBUG] [Thread-78276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:11:28.856 [DEBUG] [Thread-78276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:11:28.881 [INFO] [Thread-78276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:11:28.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:11:29.510 [DEBUG] [Thread-78276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:11:29.510 [DEBUG] [Thread-78276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:11:29.511 [DEBUG] [Thread-78276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:11:29.553 [DEBUG] [Thread-78276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:11:29.553 [DEBUG] [Thread-78276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:11:29.558 [DEBUG] [Thread-78276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:11:29.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:11:29.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:11:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:11:29.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:11:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:11:29.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:11:29.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:11:29.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:11:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:11:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.882390 -999.00   +8.90  37.61     93   +8.00 1 3 2 3 1     0    0 -0.13 -35.97 ----- 34.8 37.6 301.4 47.7 10.3 -7.4 10.1 -6.0 9.6 -5.7 10.0 -7.9
2025-12-12T23:11:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:11:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:11:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.882390
2025-12-12T23:11:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:11:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:11:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:11:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:11:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:11:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:11:09', tmtdew=0.67, humidity=95.26, cloud=0.0, wind=38.09, temperature=9.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:10:38.496', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:09:00')
2025-12-12T23:11:29.601 [DEBUG] [Thread-78276] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:11:29.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:11:29.685 [DEBUG] [Thread-78279] [transport.py] [_log()] starting thread (client mode): 0xf5789d50
2025-12-12T23:11:29.685 [DEBUG] [Thread-78279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:11:29.700 [DEBUG] [Thread-78279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:11:29.700 [INFO] [Thread-78279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:11:29.708 [DEBUG] [Thread-78279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:11:29.708 [DEBUG] [Thread-78279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:11:29.708 [DEBUG] [Thread-78279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:11:29.708 [DEBUG] [Thread-78279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:11:29.708 [DEBUG] [Thread-78279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:11:29.708 [DEBUG] [Thread-78279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] client lang: <none>
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] server lang: <none>
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] kex follows: False
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:11:29.709 [DEBUG] [Thread-78279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:11:29.710 [DEBUG] [Thread-78279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:11:29.710 [DEBUG] [Thread-78279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:11:29.710 [DEBUG] [Thread-78279] [transport.py] [_log()] Compression: none
2025-12-12T23:11:29.710 [DEBUG] [Thread-78279] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:11:29.772 [DEBUG] [Thread-78279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:11:29.773 [DEBUG] [Thread-78279] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:11:29.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:11:29.774 [DEBUG] [Thread-78279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:11:29.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:11:29.828 [DEBUG] [Thread-78279] [transport.py] [_log()] userauth is OK
2025-12-12T23:11:29.828 [DEBUG] [Thread-78279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:11:29.829 [DEBUG] [Thread-78279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:11:29.829 [DEBUG] [Thread-78279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:11:29.829 [DEBUG] [Thread-78279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:11:29.848 [INFO] [Thread-78279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:11:29.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:11:30.716 [DEBUG] [Thread-78279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:11:30.716 [DEBUG] [Thread-78279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:11:30.764 [DEBUG] [Thread-78279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:11:30.765 [DEBUG] [Thread-78279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:11:30.773 [DEBUG] [Thread-78279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:11:30.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:11:30.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:11:30.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
2025-12-12T23:11:30.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:11:30.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:11:30.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:11:30.808 [DEBUG] [Thread-78279] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:11:38.252 [DEBUG] [Thread-78281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:11:46.453 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:11:46.455 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:11:53.291 [DEBUG] [Thread-78282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:12:00.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:12:00.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:12:01.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 11, 41), 0.68, 95.23, 0.0, 30.29, 9.21, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:12:01.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:11:41
2025-12-12T23:12:01.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:12:01.784 [DEBUG] [Thread-78283] [transport.py] [_log()] starting thread (client mode): 0xf578bd00
2025-12-12T23:12:01.784 [DEBUG] [Thread-78283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:12:01.804 [DEBUG] [Thread-78283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:12:01.804 [INFO] [Thread-78283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] client lang: <none>
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] server lang: <none>
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] kex follows: False
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] Compression: none
2025-12-12T23:12:01.808 [DEBUG] [Thread-78283] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:12:01.820 [DEBUG] [Thread-78283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:12:01.821 [DEBUG] [Thread-78283] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:12:01.821 [DEBUG] [Thread-78283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:12:01.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:12:01.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:12:01.823 [DEBUG] [Thread-78283] [transport.py] [_log()] userauth is OK
2025-12-12T23:12:01.823 [DEBUG] [Thread-78283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:12:01.823 [DEBUG] [Thread-78283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:12:01.823 [DEBUG] [Thread-78283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:12:01.823 [DEBUG] [Thread-78283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:12:01.848 [INFO] [Thread-78283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:12:01.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:12:02.567 [DEBUG] [Thread-78283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:12:02.567 [DEBUG] [Thread-78283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:12:02.567 [DEBUG] [Thread-78283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:12:02.608 [DEBUG] [Thread-78283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:12:02.608 [DEBUG] [Thread-78283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:12:02.611 [DEBUG] [Thread-78283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:12:02.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:12:02.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:12:02.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:12:02.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:12:02.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:12:02.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:12:02.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:12:02.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:12:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:12:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.882738 -999.00   +8.90  31.81     93   +7.90 1 3 2 3 1     0    0 -0.02 -32.20 ----- 33.9 31.8 308.0 54.2 10.3 -7.4 10.1 -2.7 9.7 -2.5 10.0 -2.6
2025-12-12T23:12:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:12:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:12:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.882738
2025-12-12T23:12:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:12:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:12:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:12:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:12:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:12:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:11:41', tmtdew=0.68, humidity=95.23, cloud=0.0, wind=30.29, temperature=9.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:11:08.563', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:09:00')
2025-12-12T23:12:02.637 [DEBUG] [Thread-78283] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:12:02.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:12:02.736 [DEBUG] [Thread-78286] [transport.py] [_log()] starting thread (client mode): 0xfabc5db0
2025-12-12T23:12:02.736 [DEBUG] [Thread-78286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:12:02.751 [DEBUG] [Thread-78286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:12:02.751 [INFO] [Thread-78286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:12:02.758 [DEBUG] [Thread-78286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:12:02.759 [DEBUG] [Thread-78286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] client lang: <none>
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] server lang: <none>
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] kex follows: False
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] Compression: none
2025-12-12T23:12:02.760 [DEBUG] [Thread-78286] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:12:02.815 [DEBUG] [Thread-78286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:12:02.815 [DEBUG] [Thread-78286] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:12:02.816 [DEBUG] [Thread-78286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:12:02.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:12:02.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:12:02.875 [DEBUG] [Thread-78286] [transport.py] [_log()] userauth is OK
2025-12-12T23:12:02.876 [DEBUG] [Thread-78286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:12:02.876 [DEBUG] [Thread-78286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:12:02.876 [DEBUG] [Thread-78286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:12:02.876 [DEBUG] [Thread-78286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:12:02.897 [INFO] [Thread-78286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:12:02.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:12:02.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:12:03.781 [DEBUG] [Thread-78286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:12:03.782 [DEBUG] [Thread-78286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:12:03.829 [DEBUG] [Thread-78286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:12:03.829 [DEBUG] [Thread-78286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:12:03.838 [DEBUG] [Thread-78286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:12:03.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:12:03.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:12:03.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:12:03.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:12:03.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:12:03.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:12:03.873 [DEBUG] [Thread-78286] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:12:08.320 [DEBUG] [Thread-78288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:19.490 [DEBUG] [Thread-78289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:23.363 [DEBUG] [Thread-78290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:33.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:12:33.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:12:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 12, 14), 0.68, 95.19, 0.0, 34.55, 9.18, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:12:14
2025-12-12T23:12:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:12:34.849 [DEBUG] [Thread-78291] [transport.py] [_log()] starting thread (client mode): 0xf57c8250
2025-12-12T23:12:34.849 [DEBUG] [Thread-78291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:12:34.872 [DEBUG] [Thread-78291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:12:34.872 [INFO] [Thread-78291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:12:34.875 [DEBUG] [Thread-78291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:12:34.875 [DEBUG] [Thread-78291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:12:34.875 [DEBUG] [Thread-78291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:12:34.875 [DEBUG] [Thread-78291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:34.875 [DEBUG] [Thread-78291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] client lang: <none>
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] server lang: <none>
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] kex follows: False
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:12:34.876 [DEBUG] [Thread-78291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:12:34.877 [DEBUG] [Thread-78291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:12:34.877 [DEBUG] [Thread-78291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:12:34.877 [DEBUG] [Thread-78291] [transport.py] [_log()] Compression: none
2025-12-12T23:12:34.877 [DEBUG] [Thread-78291] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:12:34.899 [DEBUG] [Thread-78291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:12:34.900 [DEBUG] [Thread-78291] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:12:34.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:12:34.901 [DEBUG] [Thread-78291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:12:34.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:12:34.906 [DEBUG] [Thread-78291] [transport.py] [_log()] userauth is OK
2025-12-12T23:12:34.906 [DEBUG] [Thread-78291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:12:34.906 [DEBUG] [Thread-78291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:12:34.906 [DEBUG] [Thread-78291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:12:34.906 [DEBUG] [Thread-78291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:12:34.931 [INFO] [Thread-78291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:12:34.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:12:35.526 [DEBUG] [Thread-78291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:12:35.527 [DEBUG] [Thread-78291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:12:35.527 [DEBUG] [Thread-78291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:12:35.567 [DEBUG] [Thread-78291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:12:35.567 [DEBUG] [Thread-78291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:12:35.570 [DEBUG] [Thread-78291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:12:35.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:12:35.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:12:35.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:12:35.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:12:35.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:12:35.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:12:35.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:12:35.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.883085 -999.00   +8.90  52.75     93   +8.00 1 2 2 3 1     0    0 0.12 -27.39 ZNe.w 47.4 52.8 297.6 55.8 10.3 -2.6 10.1 -10.8 9.7 -10.2 10.0 -10.1
2025-12-12T23:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.883085
2025-12-12T23:12:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:12:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:12:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:12:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:12:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:12:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:12:14', tmtdew=0.68, humidity=95.19, cloud=0.0, wind=34.55, temperature=9.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:11:38.544', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:09:00')
2025-12-12T23:12:35.608 [DEBUG] [Thread-78291] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:12:35.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:12:35.696 [DEBUG] [Thread-78294] [transport.py] [_log()] starting thread (client mode): 0xf5771ea0
2025-12-12T23:12:35.696 [DEBUG] [Thread-78294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:12:35.710 [DEBUG] [Thread-78294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:12:35.711 [INFO] [Thread-78294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] client lang: <none>
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] server lang: <none>
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] kex follows: False
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:12:35.719 [DEBUG] [Thread-78294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:12:35.720 [DEBUG] [Thread-78294] [transport.py] [_log()] Compression: none
2025-12-12T23:12:35.720 [DEBUG] [Thread-78294] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:12:35.775 [DEBUG] [Thread-78294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:12:35.775 [DEBUG] [Thread-78294] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:12:35.775 [DEBUG] [Thread-78294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:12:35.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:12:35.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:12:35.831 [DEBUG] [Thread-78294] [transport.py] [_log()] userauth is OK
2025-12-12T23:12:35.832 [DEBUG] [Thread-78294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:12:35.832 [DEBUG] [Thread-78294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:12:35.832 [DEBUG] [Thread-78294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:12:35.832 [DEBUG] [Thread-78294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:12:35.850 [INFO] [Thread-78294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:12:35.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:12:35.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:12:36.649 [DEBUG] [Thread-78294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:12:36.649 [DEBUG] [Thread-78294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:12:36.697 [DEBUG] [Thread-78294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:12:36.697 [DEBUG] [Thread-78294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:12:36.706 [DEBUG] [Thread-78294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:12:36.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:12: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')
2025-12-12T23:12: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
2025-12-12T23:12:36.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:12:36.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:12:36.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:12:36.740 [DEBUG] [Thread-78294] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:12:38.391 [DEBUG] [Thread-78296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:46.658 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:46.659 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:12:53.442 [DEBUG] [Thread-78297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:06.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:13:06.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:13:06.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:13:07.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 12, 46), 0.69, 95.18, 0.0, 31.3, 9.11, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:13:07.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:12:46
2025-12-12T23:13:07.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:13:07.766 [DEBUG] [Thread-78298] [transport.py] [_log()] starting thread (client mode): 0xf572e890
2025-12-12T23:13:07.766 [DEBUG] [Thread-78298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:13:07.785 [DEBUG] [Thread-78298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:13:07.785 [INFO] [Thread-78298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] client lang: <none>
2025-12-12T23:13:07.788 [DEBUG] [Thread-78298] [transport.py] [_log()] server lang: <none>
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] kex follows: False
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] Compression: none
2025-12-12T23:13:07.789 [DEBUG] [Thread-78298] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:13:07.800 [DEBUG] [Thread-78298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:13:07.800 [DEBUG] [Thread-78298] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:13:07.801 [DEBUG] [Thread-78298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:13:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:13:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:13:07.801 [DEBUG] [Thread-78298] [transport.py] [_log()] userauth is OK
2025-12-12T23:13:07.801 [DEBUG] [Thread-78298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:13:07.801 [DEBUG] [Thread-78298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:13:07.801 [DEBUG] [Thread-78298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:13:07.801 [DEBUG] [Thread-78298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:13:07.810 [INFO] [Thread-78298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:13:07.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:13:08.474 [DEBUG] [Thread-78300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:08.568 [DEBUG] [Thread-78298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:13:08.568 [DEBUG] [Thread-78298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:13:08.568 [DEBUG] [Thread-78298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:13:08.608 [DEBUG] [Thread-78298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:13:08.608 [DEBUG] [Thread-78298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:13:08.610 [DEBUG] [Thread-78298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:13:08.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:13:08.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:13:08.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:13:08.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:13:08.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:13:08.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:13:08.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.883779 -999.00   +8.80  42.44     93   +7.90 1 3 2 3 1     0    0 0.28 -21.93 Z..S. 43.6 42.4 312.2 54.1 10.2 -8.7 10.1 -6.9 9.6 -6.1 9.9 -5.7
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.883779
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:13:08.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:12:46', tmtdew=0.69, humidity=95.18, cloud=0.0, wind=31.3, temperature=9.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:12:38.506', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:09:00')
2025-12-12T23:13:08.625 [DEBUG] [Thread-78298] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:13:08.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:13:08.711 [DEBUG] [Thread-78302] [transport.py] [_log()] starting thread (client mode): 0xf572d6f0
2025-12-12T23:13:08.711 [DEBUG] [Thread-78302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:13:08.725 [DEBUG] [Thread-78302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:13:08.725 [INFO] [Thread-78302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] client lang: <none>
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] server lang: <none>
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] kex follows: False
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:13:08.732 [DEBUG] [Thread-78302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:13:08.733 [DEBUG] [Thread-78302] [transport.py] [_log()] Compression: none
2025-12-12T23:13:08.733 [DEBUG] [Thread-78302] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:13:08.789 [DEBUG] [Thread-78302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:13:08.789 [DEBUG] [Thread-78302] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:13:08.789 [DEBUG] [Thread-78302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:13:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:13:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:13:08.846 [DEBUG] [Thread-78302] [transport.py] [_log()] userauth is OK
2025-12-12T23:13:08.846 [DEBUG] [Thread-78302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:13:08.846 [DEBUG] [Thread-78302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:13:08.846 [DEBUG] [Thread-78302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:13:08.846 [DEBUG] [Thread-78302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:13:08.860 [INFO] [Thread-78302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:13:08.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:13:08.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:13:09.694 [DEBUG] [Thread-78302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:13:09.694 [DEBUG] [Thread-78302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:13:09.742 [DEBUG] [Thread-78302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:13:09.742 [DEBUG] [Thread-78302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:13:09.751 [DEBUG] [Thread-78302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:13:09.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:13:09.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:13:09.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:13:09.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:13:09.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:13:09.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:13:09.782 [DEBUG] [Thread-78302] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:13:19.560 [DEBUG] [Thread-78304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:23.500 [DEBUG] [Thread-78305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:38.548 [DEBUG] [Thread-78306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:13:39.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:13: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
2025-12-12T23:13:40.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 13, 18), 0.69, 95.13, 0.0, 34.51, 9.09, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:13:40.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:13:18
2025-12-12T23:13:40.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:13:40.781 [DEBUG] [Thread-78307] [transport.py] [_log()] starting thread (client mode): 0xf5773f10
2025-12-12T23:13:40.782 [DEBUG] [Thread-78307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:13:40.802 [DEBUG] [Thread-78307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:13:40.802 [INFO] [Thread-78307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] client lang: <none>
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] server lang: <none>
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] kex follows: False
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:13:40.805 [DEBUG] [Thread-78307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:13:40.806 [DEBUG] [Thread-78307] [transport.py] [_log()] Compression: none
2025-12-12T23:13:40.806 [DEBUG] [Thread-78307] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:13:40.824 [DEBUG] [Thread-78307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:13:40.824 [DEBUG] [Thread-78307] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:13:40.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:13:40.826 [DEBUG] [Thread-78307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:13:40.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:13:40.828 [DEBUG] [Thread-78307] [transport.py] [_log()] userauth is OK
2025-12-12T23:13:40.828 [DEBUG] [Thread-78307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:13:40.828 [DEBUG] [Thread-78307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:13:40.828 [DEBUG] [Thread-78307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:13:40.828 [DEBUG] [Thread-78307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:13:40.866 [INFO] [Thread-78307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:13:40.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:13:41.517 [DEBUG] [Thread-78307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:13:41.517 [DEBUG] [Thread-78307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:13:41.517 [DEBUG] [Thread-78307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:13:41.559 [DEBUG] [Thread-78307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:13:41.560 [DEBUG] [Thread-78307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:13:41.564 [DEBUG] [Thread-78307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:13:41.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:13:41.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:13:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:13:41.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:13:41.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:13:41.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:13:41.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:13:41.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:13:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:13:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.884126 -999.00   +9.00  34.41     93   +8.00 1 3 2 3 1     0    0 0.30 -20.63 Z..S. 33.7 34.4 306.6 40.5 10.3 -4.7 10.1 -1.9 9.7 -1.6 10.0 -1.4
2025-12-12T23:13:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:13:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:13:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.884126
2025-12-12T23:13:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:13:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:13:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:13:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:13:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:13:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:13:18', tmtdew=0.69, humidity=95.13, cloud=0.0, wind=34.51, temperature=9.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:13:08.486', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:09:00')
2025-12-12T23:13:41.603 [DEBUG] [Thread-78307] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:13:41.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:13:41.688 [DEBUG] [Thread-78310] [transport.py] [_log()] starting thread (client mode): 0xf578a530
2025-12-12T23:13:41.688 [DEBUG] [Thread-78310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:13:41.703 [DEBUG] [Thread-78310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:13:41.703 [INFO] [Thread-78310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] client lang: <none>
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] server lang: <none>
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] kex follows: False
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:13:41.712 [DEBUG] [Thread-78310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:13:41.713 [DEBUG] [Thread-78310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:13:41.713 [DEBUG] [Thread-78310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:13:41.713 [DEBUG] [Thread-78310] [transport.py] [_log()] Compression: none
2025-12-12T23:13:41.713 [DEBUG] [Thread-78310] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:13:41.770 [DEBUG] [Thread-78310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:13:41.770 [DEBUG] [Thread-78310] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:13:41.771 [DEBUG] [Thread-78310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:13:41.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:13:41.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:13:41.826 [DEBUG] [Thread-78310] [transport.py] [_log()] userauth is OK
2025-12-12T23:13:41.826 [DEBUG] [Thread-78310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:13:41.826 [DEBUG] [Thread-78310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:13:41.826 [DEBUG] [Thread-78310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:13:41.826 [DEBUG] [Thread-78310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:13:41.842 [INFO] [Thread-78310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:13:41.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:13:41.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:13:42.656 [DEBUG] [Thread-78310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:13:42.656 [DEBUG] [Thread-78310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:13:42.704 [DEBUG] [Thread-78310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:13:42.704 [DEBUG] [Thread-78310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:13:42.714 [DEBUG] [Thread-78310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:13:42.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:13:42.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:13:42.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:13:42.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:13:42.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:13:42.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:13:42.748 [DEBUG] [Thread-78310] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:13:46.863 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:46.864 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:13:53.574 [DEBUG] [Thread-78312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:08.617 [DEBUG] [Thread-78313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:12.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:14:12.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:14:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:14:13.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 13, 50), 0.75, 95.06, 0.0, 33.38, 9.06, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:14:13.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:13:50
2025-12-12T23:14:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:14:13.742 [DEBUG] [Thread-78314] [transport.py] [_log()] starting thread (client mode): 0xf578a890
2025-12-12T23:14:13.742 [DEBUG] [Thread-78314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:14:13.764 [DEBUG] [Thread-78314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:14:13.764 [INFO] [Thread-78314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:14:13.767 [DEBUG] [Thread-78314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] client lang: <none>
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] server lang: <none>
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] kex follows: False
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] Compression: none
2025-12-12T23:14:13.768 [DEBUG] [Thread-78314] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:14:13.784 [DEBUG] [Thread-78314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:14:13.785 [DEBUG] [Thread-78314] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:14:13.785 [DEBUG] [Thread-78314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:14:13.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:14:13.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:14:13.788 [DEBUG] [Thread-78314] [transport.py] [_log()] userauth is OK
2025-12-12T23:14:13.788 [DEBUG] [Thread-78314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:14:13.788 [DEBUG] [Thread-78314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:14:13.788 [DEBUG] [Thread-78314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:14:13.788 [DEBUG] [Thread-78314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:14:13.808 [INFO] [Thread-78314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:14:13.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:14:14.595 [DEBUG] [Thread-78314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:14:14.595 [DEBUG] [Thread-78314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:14:14.595 [DEBUG] [Thread-78314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:14:14.636 [DEBUG] [Thread-78314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:14:14.636 [DEBUG] [Thread-78314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:14:14.639 [DEBUG] [Thread-78314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:14:14.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:14:14.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:14:14.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:14:14.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:14:14.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:14:14.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:14:14.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:14:14.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:14:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:14:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.884474 -999.00   +9.00  36.34     93   +8.00 1 3 2 3 1     0    0 0.43 -16.62 zNE.. 36.8 36.3 301.8 43.5 10.3 -1.7 10.1 -1.8 9.7 -1.6 10.0 -1.2
2025-12-12T23:14:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:14:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:14:14.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.884474
2025-12-12T23:14:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:14:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:14:14.657 [DEBUG] [Thread-78314] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:14:14.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:14:14.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:14:14.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:14:14.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:13:50', tmtdew=0.75, humidity=95.06, cloud=0.0, wind=33.38, temperature=9.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:13:38.554', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:14:14.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:14:14.748 [DEBUG] [Thread-78317] [transport.py] [_log()] starting thread (client mode): 0xf57be1a0
2025-12-12T23:14:14.748 [DEBUG] [Thread-78317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:14:14.763 [DEBUG] [Thread-78317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:14:14.763 [INFO] [Thread-78317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:14:14.770 [DEBUG] [Thread-78317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:14:14.770 [DEBUG] [Thread-78317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:14:14.770 [DEBUG] [Thread-78317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:14:14.770 [DEBUG] [Thread-78317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:14.770 [DEBUG] [Thread-78317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:14.770 [DEBUG] [Thread-78317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] client lang: <none>
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] server lang: <none>
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] kex follows: False
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] Compression: none
2025-12-12T23:14:14.771 [DEBUG] [Thread-78317] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:14:14.830 [DEBUG] [Thread-78317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:14:14.830 [DEBUG] [Thread-78317] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:14:14.831 [DEBUG] [Thread-78317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:14:14.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:14:14.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:14:14.886 [DEBUG] [Thread-78317] [transport.py] [_log()] userauth is OK
2025-12-12T23:14:14.886 [DEBUG] [Thread-78317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:14:14.887 [DEBUG] [Thread-78317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:14:14.887 [DEBUG] [Thread-78317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:14:14.887 [DEBUG] [Thread-78317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:14:14.907 [INFO] [Thread-78317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:14:14.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:14:14.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:14:15.714 [DEBUG] [Thread-78317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:14:15.714 [DEBUG] [Thread-78317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:14:15.766 [DEBUG] [Thread-78317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:14:15.766 [DEBUG] [Thread-78317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:14:15.775 [DEBUG] [Thread-78317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:14:15.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:14:15.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:14:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:14:15.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:14:15.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:14:15.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:14:15.810 [DEBUG] [Thread-78317] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:14:19.636 [DEBUG] [Thread-78319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:23.644 [DEBUG] [Thread-78320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:38.686 [DEBUG] [Thread-78321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:45.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:14:45.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:14:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:14:46.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 14, 22), 0.75, 95.09, 0.0, 34.6, 9.13, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:14:46.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:14:22
2025-12-12T23:14:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:14:46.776 [DEBUG] [Thread-78322] [transport.py] [_log()] starting thread (client mode): 0xf57cbee0
2025-12-12T23:14:46.776 [DEBUG] [Thread-78322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:14:46.790 [DEBUG] [Thread-78322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:14:46.790 [INFO] [Thread-78322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:14:46.793 [DEBUG] [Thread-78322] [transport.py] [_log()] client lang: <none>
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] server lang: <none>
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] kex follows: False
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] Compression: none
2025-12-12T23:14:46.794 [DEBUG] [Thread-78322] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:14:46.812 [DEBUG] [Thread-78322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:14:46.812 [DEBUG] [Thread-78322] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:14:46.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:14:46.813 [DEBUG] [Thread-78322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:14:46.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:14:46.815 [DEBUG] [Thread-78322] [transport.py] [_log()] userauth is OK
2025-12-12T23:14:46.815 [DEBUG] [Thread-78322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:14:46.816 [DEBUG] [Thread-78322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:14:46.816 [DEBUG] [Thread-78322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:14:46.816 [DEBUG] [Thread-78322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:14:46.839 [INFO] [Thread-78322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:14:46.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:14:47.069 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:47.071 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:14:47.493 [DEBUG] [Thread-78322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:14:47.493 [DEBUG] [Thread-78322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:14:47.493 [DEBUG] [Thread-78322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:14:47.535 [DEBUG] [Thread-78322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:14:47.535 [DEBUG] [Thread-78322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:14:47.539 [DEBUG] [Thread-78322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:14:47.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:14:47.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:14:47.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:14:47.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:14:47.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:14:47.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:14:47.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:14:47.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:14:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:14:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.884821 -999.00   +9.00  42.57     93   +8.00 1 3 2 3 1     0    0 0.46 -14.90 ----- 36.3 42.6 305.2 50.1 10.3 -3.1 10.1 -6.0 9.7 -4.1 10.1 -4.6
2025-12-12T23:14:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:14:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:14:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.884821
2025-12-12T23:14:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:14:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:14:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:14:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:14:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:14:47.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:14:22', tmtdew=0.75, humidity=95.09, cloud=0.0, wind=34.6, temperature=9.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:14:08.534', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:14:47.576 [DEBUG] [Thread-78322] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:14:47.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:14:47.673 [DEBUG] [Thread-78325] [transport.py] [_log()] starting thread (client mode): 0xfabc4d30
2025-12-12T23:14:47.673 [DEBUG] [Thread-78325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:14:47.691 [DEBUG] [Thread-78325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:14:47.691 [INFO] [Thread-78325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:14:47.698 [DEBUG] [Thread-78325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:14:47.698 [DEBUG] [Thread-78325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:14:47.698 [DEBUG] [Thread-78325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:14:47.698 [DEBUG] [Thread-78325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] client lang: <none>
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] server lang: <none>
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] kex follows: False
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] Compression: none
2025-12-12T23:14:47.699 [DEBUG] [Thread-78325] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:14:47.757 [DEBUG] [Thread-78325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:14:47.757 [DEBUG] [Thread-78325] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:14:47.758 [DEBUG] [Thread-78325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:14:47.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:14:47.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:14:47.813 [DEBUG] [Thread-78325] [transport.py] [_log()] userauth is OK
2025-12-12T23:14:47.813 [DEBUG] [Thread-78325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:14:47.813 [DEBUG] [Thread-78325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:14:47.814 [DEBUG] [Thread-78325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:14:47.814 [DEBUG] [Thread-78325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:14:47.832 [INFO] [Thread-78325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:14:47.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:14:47.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:14:48.660 [DEBUG] [Thread-78325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:14:48.660 [DEBUG] [Thread-78325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:14:48.709 [DEBUG] [Thread-78325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:14:48.709 [DEBUG] [Thread-78325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:14:48.718 [DEBUG] [Thread-78325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:14:48.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:14:48.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:14:48.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:14:48.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:14:48.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:14:48.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:14:48.753 [DEBUG] [Thread-78325] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:14:53.718 [DEBUG] [Thread-78327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:08.758 [DEBUG] [Thread-78328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:15:18.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:15:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:15:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 14, 54), 0.71, 95.01, 0.0, 36.73, 9.08, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:15:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:14:54
2025-12-12T23:15:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:15:19.705 [DEBUG] [Thread-78329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:19.730 [DEBUG] [Thread-78330] [transport.py] [_log()] starting thread (client mode): 0xf572fa30
2025-12-12T23:15:19.730 [DEBUG] [Thread-78330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:15:19.752 [DEBUG] [Thread-78330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:15:19.752 [INFO] [Thread-78330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:19.756 [DEBUG] [Thread-78330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] client lang: <none>
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] server lang: <none>
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] kex follows: False
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] Compression: none
2025-12-12T23:15:19.757 [DEBUG] [Thread-78330] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:15:19.777 [DEBUG] [Thread-78330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:15:19.778 [DEBUG] [Thread-78330] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:15:19.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:15:19.779 [DEBUG] [Thread-78330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:15:19.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:15:19.782 [DEBUG] [Thread-78330] [transport.py] [_log()] userauth is OK
2025-12-12T23:15:19.782 [DEBUG] [Thread-78330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:15:19.782 [DEBUG] [Thread-78330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:15:19.782 [DEBUG] [Thread-78330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:15:19.782 [DEBUG] [Thread-78330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:15:19.807 [INFO] [Thread-78330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:15:19.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:15:20.676 [DEBUG] [Thread-78330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:15:20.676 [DEBUG] [Thread-78330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:15:20.677 [DEBUG] [Thread-78330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:15:20.718 [DEBUG] [Thread-78330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:15:20.718 [DEBUG] [Thread-78330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:15:20.723 [DEBUG] [Thread-78330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:15:20.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:15:20.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:15:20.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:15:20.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:15:20.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:15:20.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:15:20.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:15:20.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.885168 -999.00   +9.00  31.56     93   +8.00 1 3 2 3 1     0    0 0.53 -12.78 ----- 34.2 31.6 301.5 49.3 10.3 -6.6 10.1 -5.4 9.7 -3.9 10.0 -3.2
2025-12-12T23:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.885168
2025-12-12T23:15:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:15:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:15:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:15:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:15:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:15:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:14:54', tmtdew=0.71, humidity=95.01, cloud=0.0, wind=36.73, temperature=9.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:14:38.515', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:15:20.758 [DEBUG] [Thread-78330] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:15:20.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:15:20.851 [DEBUG] [Thread-78333] [transport.py] [_log()] starting thread (client mode): 0xfabc5930
2025-12-12T23:15:20.851 [DEBUG] [Thread-78333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:15:20.867 [DEBUG] [Thread-78333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:15:20.867 [INFO] [Thread-78333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:15:20.875 [DEBUG] [Thread-78333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:15:20.875 [DEBUG] [Thread-78333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:15:20.875 [DEBUG] [Thread-78333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:15:20.875 [DEBUG] [Thread-78333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:20.875 [DEBUG] [Thread-78333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] client lang: <none>
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] server lang: <none>
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] kex follows: False
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] Compression: none
2025-12-12T23:15:20.876 [DEBUG] [Thread-78333] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:15:20.936 [DEBUG] [Thread-78333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:15:20.937 [DEBUG] [Thread-78333] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:15:20.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:15:20.938 [DEBUG] [Thread-78333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:15:20.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:15:20.993 [DEBUG] [Thread-78333] [transport.py] [_log()] userauth is OK
2025-12-12T23:15:20.993 [DEBUG] [Thread-78333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:15:20.994 [DEBUG] [Thread-78333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:15:20.994 [DEBUG] [Thread-78333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:15:20.994 [DEBUG] [Thread-78333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:15:21.012 [INFO] [Thread-78333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:15:21.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:15:21.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:15:21.824 [DEBUG] [Thread-78333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:15:21.824 [DEBUG] [Thread-78333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:15:21.872 [DEBUG] [Thread-78333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:15:21.872 [DEBUG] [Thread-78333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:15:21.881 [DEBUG] [Thread-78333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:15:21.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:15:21.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:15:21.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:15:21.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:15:21.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:15:21.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:15:21.917 [DEBUG] [Thread-78333] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:15:23.787 [DEBUG] [Thread-78335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:38.830 [DEBUG] [Thread-78336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:47.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:47.277 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:15:51.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:15:51.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:15:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 15, 26), 0.7, 95.08, 0.0, 41.82, 9.13, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:15:52.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:15:26
2025-12-12T23:15:52.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:15:52.922 [DEBUG] [Thread-78337] [transport.py] [_log()] starting thread (client mode): 0xf5771690
2025-12-12T23:15:52.922 [DEBUG] [Thread-78337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:15:52.941 [DEBUG] [Thread-78337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:15:52.941 [INFO] [Thread-78337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:15:52.943 [DEBUG] [Thread-78337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] client lang: <none>
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] server lang: <none>
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] kex follows: False
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:15:52.944 [DEBUG] [Thread-78337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:15:52.945 [DEBUG] [Thread-78337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:15:52.945 [DEBUG] [Thread-78337] [transport.py] [_log()] Compression: none
2025-12-12T23:15:52.945 [DEBUG] [Thread-78337] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:15:52.959 [DEBUG] [Thread-78337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:15:52.960 [DEBUG] [Thread-78337] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:15:52.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:15:52.961 [DEBUG] [Thread-78337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:15:52.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:15:52.963 [DEBUG] [Thread-78337] [transport.py] [_log()] userauth is OK
2025-12-12T23:15:52.964 [DEBUG] [Thread-78337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:15:52.964 [DEBUG] [Thread-78337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:15:52.964 [DEBUG] [Thread-78337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:15:52.964 [DEBUG] [Thread-78337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:15:52.989 [INFO] [Thread-78337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:15:52.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:15:53.621 [DEBUG] [Thread-78337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:15:53.621 [DEBUG] [Thread-78337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:15:53.621 [DEBUG] [Thread-78337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:15:53.662 [DEBUG] [Thread-78337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:15:53.662 [DEBUG] [Thread-78337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:15:53.665 [DEBUG] [Thread-78337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:15:53.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:15:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:15:53.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:15:53.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:15:53.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:15:53.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:15:53.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:15:53.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:15:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:15:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.885515 -999.00   +8.90  32.90     93   +7.90 1 3 2 3 1     0    0 0.58 -10.66 ----- 33.3 32.9 298.4 44.9 10.3 -3.9 10.1 -5.4 9.8 -3.0 10.1 -3.6
2025-12-12T23:15:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:15:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:15:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.885515
2025-12-12T23:15:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:15:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:15:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:15:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:15:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:15:53.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:15:26', tmtdew=0.7, humidity=95.08, cloud=0.0, wind=41.82, temperature=9.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:15:08.496', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:15:53.694 [DEBUG] [Thread-78337] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:15:53.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:15:53.790 [DEBUG] [Thread-78340] [transport.py] [_log()] starting thread (client mode): 0xf57bf8e0
2025-12-12T23:15:53.790 [DEBUG] [Thread-78340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:15:53.805 [DEBUG] [Thread-78340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:15:53.805 [INFO] [Thread-78340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:15:53.813 [DEBUG] [Thread-78340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:15:53.813 [DEBUG] [Thread-78340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:15:53.813 [DEBUG] [Thread-78340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:15:53.813 [DEBUG] [Thread-78340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:53.813 [DEBUG] [Thread-78340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:15:53.813 [DEBUG] [Thread-78340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] client lang: <none>
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] server lang: <none>
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] kex follows: False
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:15:53.814 [DEBUG] [Thread-78340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:15:53.815 [DEBUG] [Thread-78340] [transport.py] [_log()] Compression: none
2025-12-12T23:15:53.815 [DEBUG] [Thread-78340] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:15:53.865 [DEBUG] [Thread-78342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:15:53.872 [DEBUG] [Thread-78340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:15:53.872 [DEBUG] [Thread-78340] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:15:53.872 [DEBUG] [Thread-78340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:15:53.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:15:53.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:15:53.928 [DEBUG] [Thread-78340] [transport.py] [_log()] userauth is OK
2025-12-12T23:15:53.929 [DEBUG] [Thread-78340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:15:53.929 [DEBUG] [Thread-78340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:15:53.929 [DEBUG] [Thread-78340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:15:53.929 [DEBUG] [Thread-78340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:15:53.948 [INFO] [Thread-78340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:15:53.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:15:53.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:15:54.739 [DEBUG] [Thread-78340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:15:54.740 [DEBUG] [Thread-78340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:15:54.788 [DEBUG] [Thread-78340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:15:54.788 [DEBUG] [Thread-78340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:15:54.796 [DEBUG] [Thread-78340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:15:54.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:15:54.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:15:54.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:15:54.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:15:54.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:15:54.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:15:54.830 [DEBUG] [Thread-78340] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:16:08.917 [DEBUG] [Thread-78343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:19.781 [DEBUG] [Thread-78344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:23.946 [DEBUG] [Thread-78345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:16:24.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:16:24.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:16:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 15, 58), 0.7, 95.06, 0.0, 41.48, 9.1, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:16:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:15:58
2025-12-12T23:16:25.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:16:25.837 [DEBUG] [Thread-78346] [transport.py] [_log()] starting thread (client mode): 0xf5788490
2025-12-12T23:16:25.837 [DEBUG] [Thread-78346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:16:25.856 [DEBUG] [Thread-78346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:16:25.857 [INFO] [Thread-78346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] client lang: <none>
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] server lang: <none>
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] kex follows: False
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] Compression: none
2025-12-12T23:16:25.860 [DEBUG] [Thread-78346] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:16:25.876 [DEBUG] [Thread-78346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:16:25.876 [DEBUG] [Thread-78346] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:16:25.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:16:25.876 [DEBUG] [Thread-78346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:16:25.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:16:25.877 [DEBUG] [Thread-78346] [transport.py] [_log()] userauth is OK
2025-12-12T23:16:25.877 [DEBUG] [Thread-78346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:16:25.877 [DEBUG] [Thread-78346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:16:25.877 [DEBUG] [Thread-78346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:16:25.877 [DEBUG] [Thread-78346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:16:25.894 [INFO] [Thread-78346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:16:25.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:16:26.632 [DEBUG] [Thread-78346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:16:26.632 [DEBUG] [Thread-78346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:16:26.632 [DEBUG] [Thread-78346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:16:26.674 [DEBUG] [Thread-78346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:16:26.674 [DEBUG] [Thread-78346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:16:26.676 [DEBUG] [Thread-78346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:16:26.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:16:26.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:16:26.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:16:26.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:16:26.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:16:26.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:16:26.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:16:26.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.885862 -999.00   +8.90  35.04     93   +7.90 1 3 2 3 1     0    0 0.65 -8.22 ----- 42.3 35.0 305.0 53.3 10.3 -4.8 10.1 -3.8 9.8 -2.8 10.1 -3.0
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.885862
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:16:26.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:15:58', tmtdew=0.7, humidity=95.06, cloud=0.0, wind=41.48, temperature=9.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:15:38.477', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.4727499999999996, nan, nan, nan, nan, nan, nan, 1.6360000000000001, 1.112499999999999, 1.323249999999999, nan, nan, nan, nan, nan, 0.7664999999999997, 0.7487500000000002, 1.0075000000000003, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:16:26.695 [DEBUG] [Thread-78346] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:16:26.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:16:26.781 [DEBUG] [Thread-78349] [transport.py] [_log()] starting thread (client mode): 0xf57bdea0
2025-12-12T23:16:26.781 [DEBUG] [Thread-78349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:16:26.795 [DEBUG] [Thread-78349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:16:26.795 [INFO] [Thread-78349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:26.803 [DEBUG] [Thread-78349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] client lang: <none>
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] server lang: <none>
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] kex follows: False
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:16:26.804 [DEBUG] [Thread-78349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:16:26.805 [DEBUG] [Thread-78349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:16:26.805 [DEBUG] [Thread-78349] [transport.py] [_log()] Compression: none
2025-12-12T23:16:26.805 [DEBUG] [Thread-78349] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:16:26.861 [DEBUG] [Thread-78349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:16:26.862 [DEBUG] [Thread-78349] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:16:26.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:16:26.863 [DEBUG] [Thread-78349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:16:26.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:16:26.920 [DEBUG] [Thread-78349] [transport.py] [_log()] userauth is OK
2025-12-12T23:16:26.920 [DEBUG] [Thread-78349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:16:26.920 [DEBUG] [Thread-78349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:16:26.920 [DEBUG] [Thread-78349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:16:26.920 [DEBUG] [Thread-78349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:16:26.939 [INFO] [Thread-78349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:16:26.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:16:26.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:16:27.759 [DEBUG] [Thread-78349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:16:27.759 [DEBUG] [Thread-78349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:16:27.808 [DEBUG] [Thread-78349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:16:27.808 [DEBUG] [Thread-78349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:16:27.817 [DEBUG] [Thread-78349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:16:27.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:16:27.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:16:27.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:16:27.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:16:27.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:16:27.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:16:27.852 [DEBUG] [Thread-78349] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:16:38.976 [DEBUG] [Thread-78351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:47.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:47.482 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:54.020 [DEBUG] [Thread-78352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:16:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:16:57.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:16:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:16:58.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 16, 30), 0.72, 94.96, 0.0, 41.9, 9.01, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:16:58.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:16:30
2025-12-12T23:16:58.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:16:58.841 [DEBUG] [Thread-78353] [transport.py] [_log()] starting thread (client mode): 0xfabc52a0
2025-12-12T23:16:58.841 [DEBUG] [Thread-78353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:16:58.863 [DEBUG] [Thread-78353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:16:58.863 [INFO] [Thread-78353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:16:58.866 [DEBUG] [Thread-78353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] client lang: <none>
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] server lang: <none>
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] kex follows: False
2025-12-12T23:16:58.867 [DEBUG] [Thread-78353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:16:58.868 [DEBUG] [Thread-78353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:16:58.868 [DEBUG] [Thread-78353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:16:58.868 [DEBUG] [Thread-78353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:16:58.868 [DEBUG] [Thread-78353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:16:58.868 [DEBUG] [Thread-78353] [transport.py] [_log()] Compression: none
2025-12-12T23:16:58.868 [DEBUG] [Thread-78353] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:16:58.887 [DEBUG] [Thread-78353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:16:58.888 [DEBUG] [Thread-78353] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:16:58.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:16:58.889 [DEBUG] [Thread-78353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:16:58.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:16:58.891 [DEBUG] [Thread-78353] [transport.py] [_log()] userauth is OK
2025-12-12T23:16:58.891 [DEBUG] [Thread-78353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:16:58.891 [DEBUG] [Thread-78353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:16:58.891 [DEBUG] [Thread-78353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:16:58.892 [DEBUG] [Thread-78353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:16:58.927 [INFO] [Thread-78353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:16:58.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:16:59.497 [DEBUG] [Thread-78353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:16:59.497 [DEBUG] [Thread-78353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:16:59.497 [DEBUG] [Thread-78353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:16:59.538 [DEBUG] [Thread-78353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:16:59.538 [DEBUG] [Thread-78353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:16:59.541 [DEBUG] [Thread-78353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:16:59.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:16:59.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:16:59.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:16:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:16:59.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:16:59.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:16:59.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:16:59.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:16:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:16:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.886557 -999.00   +8.90  47.14     93   +7.90 1 3 2 3 1     0    0 0.80 -3.64 ----- 45.6 47.1 316.8 52.7 10.3 -3.2 10.1 -2.5 9.8 -2.6 10.1 -2.7
2025-12-12T23:16:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:16:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:16:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.886557
2025-12-12T23:16:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:16:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:16:59.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:16:59.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:16:59.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:16:59.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:16:30', tmtdew=0.72, humidity=94.96, cloud=0.0, wind=41.9, temperature=9.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:16:38.525', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:16:59.564 [DEBUG] [Thread-78353] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:16:59.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:16:59.662 [DEBUG] [Thread-78356] [transport.py] [_log()] starting thread (client mode): 0xf57bdea0
2025-12-12T23:16:59.663 [DEBUG] [Thread-78356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:16:59.679 [DEBUG] [Thread-78356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:16:59.679 [INFO] [Thread-78356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:16:59.686 [DEBUG] [Thread-78356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] client lang: <none>
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] server lang: <none>
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] kex follows: False
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:16:59.687 [DEBUG] [Thread-78356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:16:59.688 [DEBUG] [Thread-78356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:16:59.688 [DEBUG] [Thread-78356] [transport.py] [_log()] Compression: none
2025-12-12T23:16:59.688 [DEBUG] [Thread-78356] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:16:59.742 [DEBUG] [Thread-78356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:16:59.742 [DEBUG] [Thread-78356] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:16:59.743 [DEBUG] [Thread-78356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:16:59.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:16:59.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:16:59.799 [DEBUG] [Thread-78356] [transport.py] [_log()] userauth is OK
2025-12-12T23:16:59.800 [DEBUG] [Thread-78356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:16:59.800 [DEBUG] [Thread-78356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:16:59.800 [DEBUG] [Thread-78356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:16:59.800 [DEBUG] [Thread-78356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:16:59.813 [INFO] [Thread-78356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:16:59.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:16:59.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:17:00.636 [DEBUG] [Thread-78356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:17:00.636 [DEBUG] [Thread-78356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:17:00.684 [DEBUG] [Thread-78356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:17:00.684 [DEBUG] [Thread-78356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:17:00.692 [DEBUG] [Thread-78356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:17:00.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:17:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:17:00.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:17:00.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:17:00.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:17:00.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:17:00.724 [DEBUG] [Thread-78356] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:17:09.047 [DEBUG] [Thread-78358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:17:19.857 [DEBUG] [Thread-78359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:17:24.090 [DEBUG] [Thread-78360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:17:30.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:17:30.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:17:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:17:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 17, 2), 0.72, 94.96, 0.0, 40.72, 9.06, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:17:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:17:02
2025-12-12T23:17:31.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:17:31.698 [DEBUG] [Thread-78361] [transport.py] [_log()] starting thread (client mode): 0xf57cbee0
2025-12-12T23:17:31.698 [DEBUG] [Thread-78361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:17:31.719 [DEBUG] [Thread-78361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:17:31.719 [INFO] [Thread-78361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] client lang: <none>
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] server lang: <none>
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] kex follows: False
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] Compression: none
2025-12-12T23:17:31.721 [DEBUG] [Thread-78361] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:17:31.730 [DEBUG] [Thread-78361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:17:31.730 [DEBUG] [Thread-78361] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:17:31.730 [DEBUG] [Thread-78361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:17:31.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:17:31.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:17:31.732 [DEBUG] [Thread-78361] [transport.py] [_log()] userauth is OK
2025-12-12T23:17:31.732 [DEBUG] [Thread-78361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:17:31.732 [DEBUG] [Thread-78361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:17:31.732 [DEBUG] [Thread-78361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:17:31.732 [DEBUG] [Thread-78361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:17:31.755 [INFO] [Thread-78361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:17:31.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:17:32.461 [DEBUG] [Thread-78361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:17:32.461 [DEBUG] [Thread-78361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:17:32.461 [DEBUG] [Thread-78361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:17:32.502 [DEBUG] [Thread-78361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:17:32.502 [DEBUG] [Thread-78361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:17:32.503 [DEBUG] [Thread-78361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:17:32.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:17:32.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:17:32.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:17:32.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:17:32.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:17:32.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:17:32.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:17:32.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:17:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:17:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.886904 -999.00   +8.90  41.17     93   +7.80 1 3 2 3 1     0    0 0.85 -1.64 ----- 44.7 41.2 309.8 51.2 10.3 -4.4 10.1 -3.1 9.8 -2.4 10.1 -2.2
2025-12-12T23:17:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:17:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:17:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.886904
2025-12-12T23:17:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:17:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:17:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:17:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:17:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:17:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:17:02', tmtdew=0.72, humidity=94.96, cloud=0.0, wind=40.72, temperature=9.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:17:08.506', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:17:32.515 [DEBUG] [Thread-78361] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:17:32.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:17:32.600 [DEBUG] [Thread-78364] [transport.py] [_log()] starting thread (client mode): 0xfabc5ed0
2025-12-12T23:17:32.600 [DEBUG] [Thread-78364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:17:32.615 [DEBUG] [Thread-78364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:17:32.616 [INFO] [Thread-78364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:17:32.623 [DEBUG] [Thread-78364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:17:32.623 [DEBUG] [Thread-78364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:17:32.623 [DEBUG] [Thread-78364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] client lang: <none>
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] server lang: <none>
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] kex follows: False
2025-12-12T23:17:32.624 [DEBUG] [Thread-78364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:17:32.625 [DEBUG] [Thread-78364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:17:32.625 [DEBUG] [Thread-78364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:17:32.625 [DEBUG] [Thread-78364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:17:32.625 [DEBUG] [Thread-78364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:17:32.625 [DEBUG] [Thread-78364] [transport.py] [_log()] Compression: none
2025-12-12T23:17:32.625 [DEBUG] [Thread-78364] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:17:32.683 [DEBUG] [Thread-78364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:17:32.684 [DEBUG] [Thread-78364] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:17:32.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:17:32.685 [DEBUG] [Thread-78364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:17:32.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:17:32.739 [DEBUG] [Thread-78364] [transport.py] [_log()] userauth is OK
2025-12-12T23:17:32.740 [DEBUG] [Thread-78364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:17:32.740 [DEBUG] [Thread-78364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:17:32.740 [DEBUG] [Thread-78364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:17:32.740 [DEBUG] [Thread-78364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:17:32.759 [INFO] [Thread-78364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:17:32.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:17:32.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:17:33.585 [DEBUG] [Thread-78364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:17:33.585 [DEBUG] [Thread-78364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:17:33.632 [DEBUG] [Thread-78364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:17:33.633 [DEBUG] [Thread-78364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:17:33.641 [DEBUG] [Thread-78364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:17:33.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:17:33.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:17:33.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:17:33.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:17:33.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:17:33.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:17:33.675 [DEBUG] [Thread-78364] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:17:39.117 [DEBUG] [Thread-78366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:17:47.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:17:47.688 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:17:54.153 [DEBUG] [Thread-78367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:03.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:18:03.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:18:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:18:04.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 17, 34), 0.77, 94.93, 0.0, 41.59, 9.1, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:18:04.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:17:34
2025-12-12T23:18:04.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:18:04.671 [DEBUG] [Thread-78368] [transport.py] [_log()] starting thread (client mode): 0xf5743520
2025-12-12T23:18:04.671 [DEBUG] [Thread-78368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:18:04.691 [DEBUG] [Thread-78368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:18:04.691 [INFO] [Thread-78368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] client lang: <none>
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] server lang: <none>
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] kex follows: False
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:18:04.694 [DEBUG] [Thread-78368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:18:04.695 [DEBUG] [Thread-78368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:18:04.695 [DEBUG] [Thread-78368] [transport.py] [_log()] Compression: none
2025-12-12T23:18:04.695 [DEBUG] [Thread-78368] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:18:04.711 [DEBUG] [Thread-78368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:18:04.711 [DEBUG] [Thread-78368] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:18:04.712 [DEBUG] [Thread-78368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:18:04.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:18:04.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:18:04.713 [DEBUG] [Thread-78368] [transport.py] [_log()] userauth is OK
2025-12-12T23:18:04.713 [DEBUG] [Thread-78368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:18:04.713 [DEBUG] [Thread-78368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:18:04.714 [DEBUG] [Thread-78368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:18:04.714 [DEBUG] [Thread-78368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:18:04.728 [INFO] [Thread-78368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:18:04.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:18:05.346 [DEBUG] [Thread-78368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:18:05.346 [DEBUG] [Thread-78368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:18:05.347 [DEBUG] [Thread-78368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:18:05.388 [DEBUG] [Thread-78368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:18:05.388 [DEBUG] [Thread-78368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:18:05.391 [DEBUG] [Thread-78368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:18:05.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:18:05.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:18:05.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:18:05.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:18:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:18:05.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:18:05.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:18:05.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:18:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:18:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.887251 -999.00   +8.90  44.19     93   +7.90 1 3 2 3 1     0    0 0.91 -0.10 ----- 48.5 44.2 314.8 53.3 10.3 -2.6 10.2 -3.5 9.7 -1.9 10.1 -1.6
2025-12-12T23:18:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:18:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:18:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.887251
2025-12-12T23:18:05.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:18:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:18:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:18:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:18:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:18:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:17:34', tmtdew=0.77, humidity=94.93, cloud=0.0, wind=41.59, temperature=9.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:17:38.486', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:18:05.417 [DEBUG] [Thread-78368] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:18:05.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:18:05.516 [DEBUG] [Thread-78371] [transport.py] [_log()] starting thread (client mode): 0xf5743400
2025-12-12T23:18:05.516 [DEBUG] [Thread-78371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:18:05.532 [DEBUG] [Thread-78371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:18:05.532 [INFO] [Thread-78371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:18:05.540 [DEBUG] [Thread-78371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:18:05.540 [DEBUG] [Thread-78371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:18:05.540 [DEBUG] [Thread-78371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:18:05.540 [DEBUG] [Thread-78371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] client lang: <none>
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] server lang: <none>
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] kex follows: False
2025-12-12T23:18:05.541 [DEBUG] [Thread-78371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:18:05.542 [DEBUG] [Thread-78371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:18:05.542 [DEBUG] [Thread-78371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:18:05.542 [DEBUG] [Thread-78371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:18:05.542 [DEBUG] [Thread-78371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:18:05.542 [DEBUG] [Thread-78371] [transport.py] [_log()] Compression: none
2025-12-12T23:18:05.542 [DEBUG] [Thread-78371] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:18:05.598 [DEBUG] [Thread-78371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:18:05.599 [DEBUG] [Thread-78371] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:18:05.599 [DEBUG] [Thread-78371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:18:05.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:18:05.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:18:05.655 [DEBUG] [Thread-78371] [transport.py] [_log()] userauth is OK
2025-12-12T23:18:05.655 [DEBUG] [Thread-78371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:18:05.656 [DEBUG] [Thread-78371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:18:05.656 [DEBUG] [Thread-78371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:18:05.656 [DEBUG] [Thread-78371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:18:05.674 [INFO] [Thread-78371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:18:05.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:18:05.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:18:06.500 [DEBUG] [Thread-78371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:18:06.501 [DEBUG] [Thread-78371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:18:06.549 [DEBUG] [Thread-78371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:18:06.549 [DEBUG] [Thread-78371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:18:06.558 [DEBUG] [Thread-78371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:18:06.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:18:06.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:18:06.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:18:06.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:18:06.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:18:06.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:18:06.592 [DEBUG] [Thread-78371] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:18:09.187 [DEBUG] [Thread-78373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:19.930 [DEBUG] [Thread-78374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:24.236 [DEBUG] [Thread-78375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:36.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:18:36.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:18:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:18:37.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 18, 6), 0.78, 94.88, 0.0, 40.14, 9.06, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:18:37.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:18:06
2025-12-12T23:18:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:18:37.570 [DEBUG] [Thread-78376] [transport.py] [_log()] starting thread (client mode): 0xfabc5a50
2025-12-12T23:18:37.570 [DEBUG] [Thread-78376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:18:37.590 [DEBUG] [Thread-78376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:18:37.590 [INFO] [Thread-78376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:18:37.593 [DEBUG] [Thread-78376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] client lang: <none>
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] server lang: <none>
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] kex follows: False
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:18:37.594 [DEBUG] [Thread-78376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:18:37.595 [DEBUG] [Thread-78376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:18:37.595 [DEBUG] [Thread-78376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:18:37.595 [DEBUG] [Thread-78376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:18:37.595 [DEBUG] [Thread-78376] [transport.py] [_log()] Compression: none
2025-12-12T23:18:37.595 [DEBUG] [Thread-78376] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:18:37.612 [DEBUG] [Thread-78376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:18:37.612 [DEBUG] [Thread-78376] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:18:37.613 [DEBUG] [Thread-78376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:18:37.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:18:37.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:18:37.615 [DEBUG] [Thread-78376] [transport.py] [_log()] userauth is OK
2025-12-12T23:18:37.615 [DEBUG] [Thread-78376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:18:37.615 [DEBUG] [Thread-78376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:18:37.615 [DEBUG] [Thread-78376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:18:37.615 [DEBUG] [Thread-78376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:18:37.641 [INFO] [Thread-78376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:18:37.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:18:38.203 [DEBUG] [Thread-78376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:18:38.203 [DEBUG] [Thread-78376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:18:38.204 [DEBUG] [Thread-78376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:18:38.244 [DEBUG] [Thread-78376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:18:38.244 [DEBUG] [Thread-78376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:18:38.246 [DEBUG] [Thread-78376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:18:38.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:18:38.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:18:38.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:18:38.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:18:38.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:18:38.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:18:38.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:18:38.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:18:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:18:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.887599 -999.00   +8.80  46.51     93   +7.80 1 3 2 3 1     0    0 0.96 1.64 ..E.. 48.1 46.5 312.4 60.0 10.3 -2.1 10.1 -2.0 9.8 -1.8 10.1 -1.4
2025-12-12T23:18:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:18:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:18:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.887599
2025-12-12T23:18:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:18:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:18:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:18:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:18:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:18:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:18:06', tmtdew=0.78, humidity=94.88, cloud=0.0, wind=40.14, temperature=9.06, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:18:08.554', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:18:38.267 [DEBUG] [Thread-78376] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:18:38.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:18:38.376 [DEBUG] [Thread-78379] [transport.py] [_log()] starting thread (client mode): 0xf57c9e70
2025-12-12T23:18:38.376 [DEBUG] [Thread-78379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:18:38.391 [DEBUG] [Thread-78379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:18:38.392 [INFO] [Thread-78379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:18:38.399 [DEBUG] [Thread-78379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:18:38.399 [DEBUG] [Thread-78379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:18:38.400 [DEBUG] [Thread-78379] [transport.py] [_log()] client lang: <none>
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] server lang: <none>
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] kex follows: False
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] Compression: none
2025-12-12T23:18:38.401 [DEBUG] [Thread-78379] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:18:38.458 [DEBUG] [Thread-78379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:18:38.459 [DEBUG] [Thread-78379] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:18:38.459 [DEBUG] [Thread-78379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:18:38.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:18:38.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:18:38.515 [DEBUG] [Thread-78379] [transport.py] [_log()] userauth is OK
2025-12-12T23:18:38.515 [DEBUG] [Thread-78379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:18:38.515 [DEBUG] [Thread-78379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:18:38.515 [DEBUG] [Thread-78379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:18:38.516 [DEBUG] [Thread-78379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:18:38.535 [INFO] [Thread-78379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:18:38.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:18:38.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:18:39.267 [DEBUG] [Thread-78381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:39.375 [DEBUG] [Thread-78379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:18:39.375 [DEBUG] [Thread-78379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:18:39.424 [DEBUG] [Thread-78379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:18:39.424 [DEBUG] [Thread-78379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:18:39.432 [DEBUG] [Thread-78379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:18:39.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:18:39.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:18:39.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:18:39.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:18:39.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:18:39.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:18:39.463 [DEBUG] [Thread-78379] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:18:47.892 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:47.893 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:18:54.306 [DEBUG] [Thread-78382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:09.336 [DEBUG] [Thread-78383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:09.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:19:09.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:19:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:19:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 18, 38), 0.79, 94.85, 0.0, 39.01, 9.05, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:19:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:18:38
2025-12-12T23:19:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:19:10.465 [DEBUG] [Thread-78384] [transport.py] [_log()] starting thread (client mode): 0xf57bc2e0
2025-12-12T23:19:10.465 [DEBUG] [Thread-78384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:19:10.487 [DEBUG] [Thread-78384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:19:10.487 [INFO] [Thread-78384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] client lang: <none>
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] server lang: <none>
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] kex follows: False
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] Compression: none
2025-12-12T23:19:10.491 [DEBUG] [Thread-78384] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:19:10.511 [DEBUG] [Thread-78384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:19:10.511 [DEBUG] [Thread-78384] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:19:10.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:19:10.512 [DEBUG] [Thread-78384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:19:10.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:19:10.516 [DEBUG] [Thread-78384] [transport.py] [_log()] userauth is OK
2025-12-12T23:19:10.516 [DEBUG] [Thread-78384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:19:10.516 [DEBUG] [Thread-78384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:19:10.516 [DEBUG] [Thread-78384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:19:10.516 [DEBUG] [Thread-78384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:19:10.553 [INFO] [Thread-78384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:19:10.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:19:11.186 [DEBUG] [Thread-78384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:19:11.186 [DEBUG] [Thread-78384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:19:11.186 [DEBUG] [Thread-78384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:19:11.228 [DEBUG] [Thread-78384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:19:11.229 [DEBUG] [Thread-78384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:19:11.232 [DEBUG] [Thread-78384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:19:11.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:19:11.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:19:11.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:19:11.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:19:11.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:19:11.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:19:11.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.887946 -999.00   +8.80  42.66     93   +7.70 1 3 2 3 1     0    0 1.01 3.80 ..E.. 40.3 42.7 310.2 52.5 10.3 -1.9 10.1 -2.0 9.8 -1.2 10.1 -1.3
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.887946
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:19:11.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:18:38', tmtdew=0.79, humidity=94.85, cloud=0.0, wind=39.01, temperature=9.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:18:38.534', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:19:11.262 [DEBUG] [Thread-78384] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:19:11.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:19:11.345 [DEBUG] [Thread-78387] [transport.py] [_log()] starting thread (client mode): 0xf5742f80
2025-12-12T23:19:11.345 [DEBUG] [Thread-78387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:19:11.360 [DEBUG] [Thread-78387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:19:11.360 [INFO] [Thread-78387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] client lang: <none>
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] server lang: <none>
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] kex follows: False
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] Compression: none
2025-12-12T23:19:11.368 [DEBUG] [Thread-78387] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:19:11.425 [DEBUG] [Thread-78387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:19:11.425 [DEBUG] [Thread-78387] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:19:11.425 [DEBUG] [Thread-78387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:19:11.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:19:11.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:19:11.482 [DEBUG] [Thread-78387] [transport.py] [_log()] userauth is OK
2025-12-12T23:19:11.482 [DEBUG] [Thread-78387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:19:11.482 [DEBUG] [Thread-78387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:19:11.482 [DEBUG] [Thread-78387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:19:11.482 [DEBUG] [Thread-78387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:19:11.496 [INFO] [Thread-78387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:19:11.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:19:11.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:19:12.329 [DEBUG] [Thread-78387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:19:12.329 [DEBUG] [Thread-78387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:19:12.377 [DEBUG] [Thread-78387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:19:12.377 [DEBUG] [Thread-78387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:19:12.385 [DEBUG] [Thread-78387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:19:12.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:19:12.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:19:12.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:19:12.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:19:12.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:19:12.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:19:12.418 [DEBUG] [Thread-78387] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:19:20.008 [DEBUG] [Thread-78389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:24.361 [DEBUG] [Thread-78390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:39.405 [DEBUG] [Thread-78391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:42.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:19:42.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:19:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:19:43.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 19, 10), 0.79, 94.81, 0.0, 38.39, 9.03, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:19:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:19:10
2025-12-12T23:19:43.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:19:43.452 [DEBUG] [Thread-78392] [transport.py] [_log()] starting thread (client mode): 0xf572dbd0
2025-12-12T23:19:43.452 [DEBUG] [Thread-78392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:19:43.473 [DEBUG] [Thread-78392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:19:43.473 [INFO] [Thread-78392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] client lang: <none>
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] server lang: <none>
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] kex follows: False
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] Compression: none
2025-12-12T23:19:43.476 [DEBUG] [Thread-78392] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:19:43.491 [DEBUG] [Thread-78392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:19:43.491 [DEBUG] [Thread-78392] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:19:43.491 [DEBUG] [Thread-78392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:19:43.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:19:43.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:19:43.492 [DEBUG] [Thread-78392] [transport.py] [_log()] userauth is OK
2025-12-12T23:19:43.492 [DEBUG] [Thread-78392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:19:43.492 [DEBUG] [Thread-78392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:19:43.492 [DEBUG] [Thread-78392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:19:43.492 [DEBUG] [Thread-78392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:19:43.501 [INFO] [Thread-78392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:19:43.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:19:44.105 [DEBUG] [Thread-78392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:19:44.105 [DEBUG] [Thread-78392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:19:44.105 [DEBUG] [Thread-78392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:19:44.147 [DEBUG] [Thread-78392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:19:44.147 [DEBUG] [Thread-78392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:19:44.149 [DEBUG] [Thread-78392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:19:44.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:19:44.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:19:44.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:19:44.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:19:44.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:19:44.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:19:44.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.888293 -999.00   +8.90  40.18     93   +7.80 1 3 2 3 1     0    0 1.07 4.86 ----- 46.0 40.2 307.6 53.5 10.3 -1.9 10.0 -1.9 9.8 -2.3 10.1 -2.2
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.888293
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:19:44.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:19:10', tmtdew=0.79, humidity=94.81, cloud=0.0, wind=38.39, temperature=9.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:19:08.515', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:19:44.168 [DEBUG] [Thread-78392] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:19:44.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:19:44.254 [DEBUG] [Thread-78395] [transport.py] [_log()] starting thread (client mode): 0xfabc4d30
2025-12-12T23:19:44.254 [DEBUG] [Thread-78395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:19:44.268 [DEBUG] [Thread-78395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:19:44.268 [INFO] [Thread-78395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] client lang: <none>
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] server lang: <none>
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] kex follows: False
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:19:44.276 [DEBUG] [Thread-78395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:19:44.277 [DEBUG] [Thread-78395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:19:44.277 [DEBUG] [Thread-78395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:19:44.277 [DEBUG] [Thread-78395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:19:44.277 [DEBUG] [Thread-78395] [transport.py] [_log()] Compression: none
2025-12-12T23:19:44.277 [DEBUG] [Thread-78395] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:19:44.332 [DEBUG] [Thread-78395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:19:44.332 [DEBUG] [Thread-78395] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:19:44.332 [DEBUG] [Thread-78395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:19:44.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:19:44.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:19:44.396 [DEBUG] [Thread-78395] [transport.py] [_log()] userauth is OK
2025-12-12T23:19:44.396 [DEBUG] [Thread-78395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:19:44.396 [DEBUG] [Thread-78395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:19:44.396 [DEBUG] [Thread-78395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:19:44.396 [DEBUG] [Thread-78395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:19:44.418 [INFO] [Thread-78395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:19:44.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:19:44.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:19:45.242 [DEBUG] [Thread-78395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:19:45.242 [DEBUG] [Thread-78395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:19:45.291 [DEBUG] [Thread-78395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:19:45.291 [DEBUG] [Thread-78395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:19:45.300 [DEBUG] [Thread-78395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:19:45.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:19:45.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:19:45.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:19:45.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:19:45.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:19:45.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:19:45.334 [DEBUG] [Thread-78395] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:19:48.099 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:48.100 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:19:54.431 [DEBUG] [Thread-78397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:09.476 [DEBUG] [Thread-78398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:15.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:20:15.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:20:15.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:20:16.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 19, 42), 0.79, 94.83, 0.0, 44.69, 9.01, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:20:16.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:19:42
2025-12-12T23:20:16.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:20:16.408 [DEBUG] [Thread-78399] [transport.py] [_log()] starting thread (client mode): 0xfabc77f0
2025-12-12T23:20:16.408 [DEBUG] [Thread-78399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:20:16.429 [DEBUG] [Thread-78399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:20:16.429 [INFO] [Thread-78399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] client lang: <none>
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] server lang: <none>
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] kex follows: False
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:20:16.432 [DEBUG] [Thread-78399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:20:16.433 [DEBUG] [Thread-78399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:20:16.433 [DEBUG] [Thread-78399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:20:16.433 [DEBUG] [Thread-78399] [transport.py] [_log()] Compression: none
2025-12-12T23:20:16.433 [DEBUG] [Thread-78399] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:20:16.448 [DEBUG] [Thread-78399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:20:16.448 [DEBUG] [Thread-78399] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:20:16.448 [DEBUG] [Thread-78399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:20:16.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:20:16.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:20:16.451 [DEBUG] [Thread-78399] [transport.py] [_log()] userauth is OK
2025-12-12T23:20:16.451 [DEBUG] [Thread-78399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:20:16.452 [DEBUG] [Thread-78399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:20:16.452 [DEBUG] [Thread-78399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:20:16.452 [DEBUG] [Thread-78399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:20:16.467 [INFO] [Thread-78399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:20:16.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:20:17.112 [DEBUG] [Thread-78399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:20:17.112 [DEBUG] [Thread-78399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:20:17.112 [DEBUG] [Thread-78399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:20:17.153 [DEBUG] [Thread-78399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:20:17.153 [DEBUG] [Thread-78399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:20:17.155 [DEBUG] [Thread-78399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:20:17.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:20:17.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:20:17.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:20:17.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:20:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:20:17.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:20:17.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.888640 -999.00   +8.90  34.46     93   +7.90 1 3 2 3 1     0    0 1.08 6.22 ----- 40.7 34.5 312.6 53.2 10.3 -3.0 10.2 -2.9 9.7 -2.1 10.1 -1.9
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.888640
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:20:17.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:19:42', tmtdew=0.79, humidity=94.83, cloud=0.0, wind=44.69, temperature=9.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:19:38.496', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:20:17.176 [DEBUG] [Thread-78399] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:20:17.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:20:17.262 [DEBUG] [Thread-78402] [transport.py] [_log()] starting thread (client mode): 0xf575d540
2025-12-12T23:20:17.263 [DEBUG] [Thread-78402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:20:17.277 [DEBUG] [Thread-78402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:20:17.278 [INFO] [Thread-78402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] client lang: <none>
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] server lang: <none>
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] kex follows: False
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] Compression: none
2025-12-12T23:20:17.285 [DEBUG] [Thread-78402] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:20:17.340 [DEBUG] [Thread-78402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:20:17.340 [DEBUG] [Thread-78402] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:20:17.340 [DEBUG] [Thread-78402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:20:17.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:20:17.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:20:17.398 [DEBUG] [Thread-78402] [transport.py] [_log()] userauth is OK
2025-12-12T23:20:17.398 [DEBUG] [Thread-78402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:20:17.398 [DEBUG] [Thread-78402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:20:17.398 [DEBUG] [Thread-78402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:20:17.398 [DEBUG] [Thread-78402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:20:17.412 [INFO] [Thread-78402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:20:17.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:20:17.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:20:18.248 [DEBUG] [Thread-78402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:20:18.248 [DEBUG] [Thread-78402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:20:18.296 [DEBUG] [Thread-78402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:20:18.297 [DEBUG] [Thread-78402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:20:18.305 [DEBUG] [Thread-78402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:20:18.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:20:18.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')
2025-12-12T23:20:18.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:20:18.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:20:18.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:20:18.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:20:18.338 [DEBUG] [Thread-78402] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:20:20.081 [DEBUG] [Thread-78404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:24.503 [DEBUG] [Thread-78405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:39.547 [DEBUG] [Thread-78406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:48.301 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:48.302 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:20:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:20:48.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:20:48.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:20:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 20, 14), 0.79, 94.86, 0.0, 40.33, 9.05, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:20:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:20:14
2025-12-12T23:20:49.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:20:49.345 [DEBUG] [Thread-78407] [transport.py] [_log()] starting thread (client mode): 0xf575caf0
2025-12-12T23:20:49.345 [DEBUG] [Thread-78407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:20:49.367 [DEBUG] [Thread-78407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:20:49.368 [INFO] [Thread-78407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] client lang: <none>
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] server lang: <none>
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] kex follows: False
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:20:49.371 [DEBUG] [Thread-78407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:20:49.372 [DEBUG] [Thread-78407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:20:49.372 [DEBUG] [Thread-78407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:20:49.372 [DEBUG] [Thread-78407] [transport.py] [_log()] Compression: none
2025-12-12T23:20:49.372 [DEBUG] [Thread-78407] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:20:49.388 [DEBUG] [Thread-78407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:20:49.388 [DEBUG] [Thread-78407] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:20:49.389 [DEBUG] [Thread-78407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:20:49.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:20:49.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:20:49.391 [DEBUG] [Thread-78407] [transport.py] [_log()] userauth is OK
2025-12-12T23:20:49.391 [DEBUG] [Thread-78407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:20:49.391 [DEBUG] [Thread-78407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:20:49.391 [DEBUG] [Thread-78407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:20:49.391 [DEBUG] [Thread-78407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:20:49.414 [INFO] [Thread-78407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:20:49.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:20:50.058 [DEBUG] [Thread-78407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:20:50.058 [DEBUG] [Thread-78407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:20:50.058 [DEBUG] [Thread-78407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:20:50.099 [DEBUG] [Thread-78407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:20:50.099 [DEBUG] [Thread-78407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:20:50.101 [DEBUG] [Thread-78407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:20:50.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:20:50.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:20:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:20:50.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:20:50.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:20:50.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:20:50.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:20:50.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:20:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:20:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.889335 -999.00   +8.80  40.23     93   +7.80 1 3 2 3 1     0    0 1.12 7.49 ----- 41.7 40.2 314.0 53.4 10.3 -2.2 10.1 -1.9 9.8 -1.9 10.1 -1.5
2025-12-12T23:20:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:20:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:20:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.889335
2025-12-12T23:20:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:20:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:20:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:20:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:20:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:20:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:20:14', tmtdew=0.79, humidity=94.86, cloud=0.0, wind=40.33, temperature=9.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:20:38.544', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:20:50.136 [DEBUG] [Thread-78407] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:20:50.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:20:50.233 [DEBUG] [Thread-78410] [transport.py] [_log()] starting thread (client mode): 0xf575f7f0
2025-12-12T23:20:50.233 [DEBUG] [Thread-78410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:20:50.252 [DEBUG] [Thread-78410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:20:50.252 [INFO] [Thread-78410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:20:50.260 [DEBUG] [Thread-78410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:20:50.261 [DEBUG] [Thread-78410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] client lang: <none>
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] server lang: <none>
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] kex follows: False
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] Compression: none
2025-12-12T23:20:50.262 [DEBUG] [Thread-78410] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:20:50.317 [DEBUG] [Thread-78410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:20:50.317 [DEBUG] [Thread-78410] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:20:50.318 [DEBUG] [Thread-78410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:20:50.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:20:50.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:20:50.373 [DEBUG] [Thread-78410] [transport.py] [_log()] userauth is OK
2025-12-12T23:20:50.373 [DEBUG] [Thread-78410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:20:50.374 [DEBUG] [Thread-78410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:20:50.374 [DEBUG] [Thread-78410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:20:50.374 [DEBUG] [Thread-78410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:20:50.393 [INFO] [Thread-78410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:20:50.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:20:50.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:20:51.202 [DEBUG] [Thread-78410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:20:51.202 [DEBUG] [Thread-78410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:20:51.250 [DEBUG] [Thread-78410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:20:51.250 [DEBUG] [Thread-78410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:20:51.259 [DEBUG] [Thread-78410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:20:51.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:20:51.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:20:51.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:20:51.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:20:51.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:20:51.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:20:51.295 [DEBUG] [Thread-78410] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:20:54.575 [DEBUG] [Thread-78412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:09.609 [DEBUG] [Thread-78413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:20.153 [DEBUG] [Thread-78414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:21.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:21:21.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:21:21.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:21:21.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 21, 18), 0.79, 94.8, 0.0, 33.65, 9.01, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:21:21.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:21:18
2025-12-12T23:21:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:21:22.269 [DEBUG] [Thread-78415] [transport.py] [_log()] starting thread (client mode): 0xf575e470
2025-12-12T23:21:22.270 [DEBUG] [Thread-78415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:21:22.290 [DEBUG] [Thread-78415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:21:22.290 [INFO] [Thread-78415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] client lang: <none>
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] server lang: <none>
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] kex follows: False
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:21:22.292 [DEBUG] [Thread-78415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:21:22.293 [DEBUG] [Thread-78415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:21:22.293 [DEBUG] [Thread-78415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:21:22.293 [DEBUG] [Thread-78415] [transport.py] [_log()] Compression: none
2025-12-12T23:21:22.293 [DEBUG] [Thread-78415] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:21:22.301 [DEBUG] [Thread-78415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:21:22.301 [DEBUG] [Thread-78415] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:21:22.302 [DEBUG] [Thread-78415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:21:22.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:21:22.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:21:22.303 [DEBUG] [Thread-78415] [transport.py] [_log()] userauth is OK
2025-12-12T23:21:22.303 [DEBUG] [Thread-78415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:21:22.304 [DEBUG] [Thread-78415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:21:22.304 [DEBUG] [Thread-78415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:21:22.304 [DEBUG] [Thread-78415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:21:22.336 [INFO] [Thread-78415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:21:22.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:21:22.935 [DEBUG] [Thread-78415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:21:22.935 [DEBUG] [Thread-78415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:21:22.935 [DEBUG] [Thread-78415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:21:22.976 [DEBUG] [Thread-78415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:21:22.976 [DEBUG] [Thread-78415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:21:22.978 [DEBUG] [Thread-78415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:21:22.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:21:22.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:21:22.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:21:22.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:21:22.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:21:22.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:21:22.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:21:22.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:21:22.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:21:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.889682 -999.00   +8.80  49.82     93   +7.70 1 3 2 3 1     0    0 1.16 8.26 ----- 45.6 49.8 312.6 56.2 10.3 -2.2 10.1 -2.0 9.8 -4.3 10.1 -3.6
2025-12-12T23:21:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:21:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:21:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.889682
2025-12-12T23:21:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:21:22.998 [DEBUG] [Thread-78415] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:21:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:21:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:21:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:21:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:21:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:21:18', tmtdew=0.79, humidity=94.8, cloud=0.0, wind=33.65, temperature=9.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:21:08.525', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:21:23.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:21:23.093 [DEBUG] [Thread-78418] [transport.py] [_log()] starting thread (client mode): 0xfabc5960
2025-12-12T23:21:23.093 [DEBUG] [Thread-78418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:21:23.108 [DEBUG] [Thread-78418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:21:23.108 [INFO] [Thread-78418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:23.116 [DEBUG] [Thread-78418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] client lang: <none>
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] server lang: <none>
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] kex follows: False
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:21:23.117 [DEBUG] [Thread-78418] [transport.py] [_log()] Compression: none
2025-12-12T23:21:23.118 [DEBUG] [Thread-78418] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:21:23.172 [DEBUG] [Thread-78418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:21:23.173 [DEBUG] [Thread-78418] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:21:23.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:21:23.174 [DEBUG] [Thread-78418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:21:23.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:21:23.229 [DEBUG] [Thread-78418] [transport.py] [_log()] userauth is OK
2025-12-12T23:21:23.229 [DEBUG] [Thread-78418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:21:23.229 [DEBUG] [Thread-78418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:21:23.229 [DEBUG] [Thread-78418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:21:23.229 [DEBUG] [Thread-78418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:21:23.248 [INFO] [Thread-78418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:21:23.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:21:23.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:21:24.070 [DEBUG] [Thread-78418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:21:24.070 [DEBUG] [Thread-78418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:21:24.119 [DEBUG] [Thread-78418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:21:24.119 [DEBUG] [Thread-78418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:21:24.129 [DEBUG] [Thread-78418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:21:24.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:21:24.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:21:24.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:21:24.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:21:24.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:21:24.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:21:24.165 [DEBUG] [Thread-78418] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:21:24.644 [DEBUG] [Thread-78420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:39.689 [DEBUG] [Thread-78421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:48.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:48.507 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:21:54.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:21:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:21:54.721 [DEBUG] [Thread-78422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:21:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 21, 50), 0.79, 94.85, 0.0, 39.22, 8.98, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:21:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:21:50
2025-12-12T23:21:54.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:21:55.130 [DEBUG] [Thread-78423] [transport.py] [_log()] starting thread (client mode): 0xfabc7130
2025-12-12T23:21:55.130 [DEBUG] [Thread-78423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:21:55.150 [DEBUG] [Thread-78423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:21:55.150 [INFO] [Thread-78423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:21:55.153 [DEBUG] [Thread-78423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] client lang: <none>
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] server lang: <none>
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] kex follows: False
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] Compression: none
2025-12-12T23:21:55.154 [DEBUG] [Thread-78423] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:21:55.171 [DEBUG] [Thread-78423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:21:55.172 [DEBUG] [Thread-78423] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:21:55.172 [DEBUG] [Thread-78423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:21:55.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:21:55.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:21:55.174 [DEBUG] [Thread-78423] [transport.py] [_log()] userauth is OK
2025-12-12T23:21:55.174 [DEBUG] [Thread-78423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:21:55.174 [DEBUG] [Thread-78423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:21:55.174 [DEBUG] [Thread-78423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:21:55.175 [DEBUG] [Thread-78423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:21:55.192 [INFO] [Thread-78423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:21:55.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:21:55.845 [DEBUG] [Thread-78423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:21:55.845 [DEBUG] [Thread-78423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:21:55.845 [DEBUG] [Thread-78423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:21:55.886 [DEBUG] [Thread-78423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:21:55.886 [DEBUG] [Thread-78423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:21:55.889 [DEBUG] [Thread-78423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:21:55.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:21:55.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:21:55.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:21:55.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:21:55.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:21:55.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:21:55.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:21:55.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:21:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:21:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.890029 -999.00   +8.80  35.15     93   +7.70 1 3 2 3 1     0    0 1.19 9.22 ----- 49.4 35.1 318.8 53.7 10.3 -3.6 10.1 -4.5 9.8 -7.7 10.1 -9.3
2025-12-12T23:21:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:21:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:21:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.890029
2025-12-12T23:21:55.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:21:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:21:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:21:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:21:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:21:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:21:50', tmtdew=0.79, humidity=94.85, cloud=0.0, wind=39.22, temperature=8.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:21:38.506', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:21:55.912 [DEBUG] [Thread-78423] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:21:55.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:21:56.004 [DEBUG] [Thread-78426] [transport.py] [_log()] starting thread (client mode): 0xf575f550
2025-12-12T23:21:56.004 [DEBUG] [Thread-78426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:21:56.019 [DEBUG] [Thread-78426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:21:56.019 [INFO] [Thread-78426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] client lang: <none>
2025-12-12T23:21:56.027 [DEBUG] [Thread-78426] [transport.py] [_log()] server lang: <none>
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] kex follows: False
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] Compression: none
2025-12-12T23:21:56.028 [DEBUG] [Thread-78426] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:21:56.085 [DEBUG] [Thread-78426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:21:56.086 [DEBUG] [Thread-78426] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:21:56.086 [DEBUG] [Thread-78426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:21:56.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:21:56.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:21:56.142 [DEBUG] [Thread-78426] [transport.py] [_log()] userauth is OK
2025-12-12T23:21:56.142 [DEBUG] [Thread-78426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:21:56.142 [DEBUG] [Thread-78426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:21:56.142 [DEBUG] [Thread-78426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:21:56.142 [DEBUG] [Thread-78426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:21:56.161 [INFO] [Thread-78426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:21:56.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:21:56.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:21:57.015 [DEBUG] [Thread-78426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:21:57.015 [DEBUG] [Thread-78426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:21:57.063 [DEBUG] [Thread-78426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:21:57.063 [DEBUG] [Thread-78426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:21:57.072 [DEBUG] [Thread-78426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:21:57.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:21:57.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:21:57.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:21:57.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:21:57.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:21:57.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:21:57.107 [DEBUG] [Thread-78426] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:22:09.750 [DEBUG] [Thread-78428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:22:20.240 [DEBUG] [Thread-78429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:22:24.790 [DEBUG] [Thread-78430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:22:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:22:27.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:22:27.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:22:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 22, 22), 0.79, 94.83, 0.0, 38.09, 8.95, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:22:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:22:22
2025-12-12T23:22:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:22:28.090 [DEBUG] [Thread-78431] [transport.py] [_log()] starting thread (client mode): 0xf575c670
2025-12-12T23:22:28.091 [DEBUG] [Thread-78431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:22:28.110 [DEBUG] [Thread-78431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:22:28.110 [INFO] [Thread-78431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:22:28.113 [DEBUG] [Thread-78431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] client lang: <none>
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] server lang: <none>
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] kex follows: False
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:22:28.114 [DEBUG] [Thread-78431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:22:28.115 [DEBUG] [Thread-78431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:22:28.115 [DEBUG] [Thread-78431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:22:28.115 [DEBUG] [Thread-78431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:22:28.115 [DEBUG] [Thread-78431] [transport.py] [_log()] Compression: none
2025-12-12T23:22:28.115 [DEBUG] [Thread-78431] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:22:28.134 [DEBUG] [Thread-78431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:22:28.135 [DEBUG] [Thread-78431] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:22:28.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:22:28.136 [DEBUG] [Thread-78431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:22:28.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:22:28.138 [DEBUG] [Thread-78431] [transport.py] [_log()] userauth is OK
2025-12-12T23:22:28.138 [DEBUG] [Thread-78431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:22:28.138 [DEBUG] [Thread-78431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:22:28.139 [DEBUG] [Thread-78431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:22:28.139 [DEBUG] [Thread-78431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:22:28.167 [INFO] [Thread-78431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:22:28.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:22:28.763 [DEBUG] [Thread-78431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:22:28.763 [DEBUG] [Thread-78431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:22:28.764 [DEBUG] [Thread-78431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:22:28.805 [DEBUG] [Thread-78431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:22:28.805 [DEBUG] [Thread-78431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:22:28.808 [DEBUG] [Thread-78431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:22:28.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:22:28.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:22:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:22:28.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:22:28.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:22:28.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:22:28.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:22:28.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:22:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:22:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.890376 -999.00   +8.80  38.56     93   +7.70 1 3 2 3 1     0    0 1.22 10.16 ----- 43.2 38.6 314.2 52.0 10.3 -10.7 10.1 -9.2 9.7 -9.6 10.1 -8.0
2025-12-12T23:22:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:22:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:22:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.890376
2025-12-12T23:22:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:22:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:22:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:22:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:22:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:22:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:22:22', tmtdew=0.79, humidity=94.83, cloud=0.0, wind=38.09, temperature=8.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:22:08.486', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:12:00')
2025-12-12T23:22:28.834 [DEBUG] [Thread-78431] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:22:28.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:22:28.930 [DEBUG] [Thread-78434] [transport.py] [_log()] starting thread (client mode): 0xf575e8c0
2025-12-12T23:22:28.930 [DEBUG] [Thread-78434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:22:28.946 [DEBUG] [Thread-78434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:22:28.946 [INFO] [Thread-78434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:22:28.953 [DEBUG] [Thread-78434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:22:28.953 [DEBUG] [Thread-78434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:22:28.953 [DEBUG] [Thread-78434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] client lang: <none>
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] server lang: <none>
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] kex follows: False
2025-12-12T23:22:28.954 [DEBUG] [Thread-78434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:22:28.955 [DEBUG] [Thread-78434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:22:28.955 [DEBUG] [Thread-78434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:22:28.955 [DEBUG] [Thread-78434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:22:28.955 [DEBUG] [Thread-78434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:22:28.955 [DEBUG] [Thread-78434] [transport.py] [_log()] Compression: none
2025-12-12T23:22:28.955 [DEBUG] [Thread-78434] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:22:29.011 [DEBUG] [Thread-78434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:22:29.012 [DEBUG] [Thread-78434] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:22:29.012 [DEBUG] [Thread-78434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:22:29.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:22:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:22:29.067 [DEBUG] [Thread-78434] [transport.py] [_log()] userauth is OK
2025-12-12T23:22:29.067 [DEBUG] [Thread-78434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:22:29.067 [DEBUG] [Thread-78434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:22:29.067 [DEBUG] [Thread-78434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:22:29.067 [DEBUG] [Thread-78434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:22:29.086 [INFO] [Thread-78434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:22:29.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:22:29.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:22:29.922 [DEBUG] [Thread-78434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:22:29.923 [DEBUG] [Thread-78434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:22:29.971 [DEBUG] [Thread-78434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:22:29.971 [DEBUG] [Thread-78434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:22:29.980 [DEBUG] [Thread-78434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:22:29.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:22:29.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:22:29.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:22:30.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:22:30.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:22:30.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:22:30.015 [DEBUG] [Thread-78434] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:22:39.817 [DEBUG] [Thread-78436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:22:48.710 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:22:48.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:22:54.859 [DEBUG] [Thread-78437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:00.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:23:00.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:23:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:23:00.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 22, 54), 0.79, 94.81, 0.0, 38.99, 8.95, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:23:00.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:22:54
2025-12-12T23:23:00.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:23:00.982 [DEBUG] [Thread-78438] [transport.py] [_log()] starting thread (client mode): 0xf575ef20
2025-12-12T23:23:00.982 [DEBUG] [Thread-78438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:23:01.002 [DEBUG] [Thread-78438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:23:01.002 [INFO] [Thread-78438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] client lang: <none>
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] server lang: <none>
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] kex follows: False
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:23:01.005 [DEBUG] [Thread-78438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:23:01.006 [DEBUG] [Thread-78438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:23:01.006 [DEBUG] [Thread-78438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:23:01.006 [DEBUG] [Thread-78438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:23:01.006 [DEBUG] [Thread-78438] [transport.py] [_log()] Compression: none
2025-12-12T23:23:01.006 [DEBUG] [Thread-78438] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:23:01.024 [DEBUG] [Thread-78438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:23:01.024 [DEBUG] [Thread-78438] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:23:01.025 [DEBUG] [Thread-78438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:23:01.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:23:01.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:23:01.029 [DEBUG] [Thread-78438] [transport.py] [_log()] userauth is OK
2025-12-12T23:23:01.029 [DEBUG] [Thread-78438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:23:01.029 [DEBUG] [Thread-78438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:23:01.029 [DEBUG] [Thread-78438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:23:01.030 [DEBUG] [Thread-78438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:23:01.062 [INFO] [Thread-78438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:23:01.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:23:01.675 [DEBUG] [Thread-78438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:23:01.676 [DEBUG] [Thread-78438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:23:01.676 [DEBUG] [Thread-78438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:23:01.718 [DEBUG] [Thread-78438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:23:01.718 [DEBUG] [Thread-78438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:23:01.723 [DEBUG] [Thread-78438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:23:01.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:23:01.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:23:01.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:23:01.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:23:01.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:23:01.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:23:01.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:23:01.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:23:01.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:23:01.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.890723 -999.00   +8.80  44.33     93   +7.70 1 3 2 3 1     0    0 1.24 10.69 ZNESW 43.8 44.3 297.8 52.3 10.2 -9.2 10.1 -11.2 9.7 -5.4 10.0 -3.8
2025-12-12T23:23:01.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:23:01.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:23:01.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.890723
2025-12-12T23:23:01.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:23:01.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:23:01.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:23:01.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:23:01.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:23:01.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:22:54', tmtdew=0.79, humidity=94.81, cloud=0.0, wind=38.99, temperature=8.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:22:38.467', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:22:00')
2025-12-12T23:23:01.763 [DEBUG] [Thread-78438] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:23:01.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:23:01.871 [DEBUG] [Thread-78441] [transport.py] [_log()] starting thread (client mode): 0xf575d9f0
2025-12-12T23:23:01.871 [DEBUG] [Thread-78441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:23:01.886 [DEBUG] [Thread-78441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:23:01.886 [INFO] [Thread-78441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:23:01.893 [DEBUG] [Thread-78441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:23:01.893 [DEBUG] [Thread-78441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] client lang: <none>
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] server lang: <none>
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] kex follows: False
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:23:01.894 [DEBUG] [Thread-78441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:23:01.895 [DEBUG] [Thread-78441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:23:01.895 [DEBUG] [Thread-78441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:23:01.895 [DEBUG] [Thread-78441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:23:01.895 [DEBUG] [Thread-78441] [transport.py] [_log()] Compression: none
2025-12-12T23:23:01.895 [DEBUG] [Thread-78441] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:23:01.951 [DEBUG] [Thread-78441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:23:01.951 [DEBUG] [Thread-78441] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:23:01.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:23:01.952 [DEBUG] [Thread-78441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:23:01.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:23:02.007 [DEBUG] [Thread-78441] [transport.py] [_log()] userauth is OK
2025-12-12T23:23:02.008 [DEBUG] [Thread-78441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:23:02.008 [DEBUG] [Thread-78441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:23:02.008 [DEBUG] [Thread-78441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:23:02.008 [DEBUG] [Thread-78441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:23:02.026 [INFO] [Thread-78441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:23:02.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:23:02.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:23:02.921 [DEBUG] [Thread-78441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:23:02.921 [DEBUG] [Thread-78441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:23:02.970 [DEBUG] [Thread-78441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:23:02.970 [DEBUG] [Thread-78441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:23:02.979 [DEBUG] [Thread-78441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:23:02.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:23:02.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:23: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') -> 00000000
2025-12-12T23:23:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:23:03.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:23:03.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:23:03.011 [DEBUG] [Thread-78441] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:23:09.885 [DEBUG] [Thread-78443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:20.316 [DEBUG] [Thread-78444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:24.929 [DEBUG] [Thread-78445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:33.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:23:33.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:23:33.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:23:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 23, 26), 0.78, 94.88, 0.0, 38.99, 8.96, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:23:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:23:26
2025-12-12T23:23:33.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:23:34.072 [DEBUG] [Thread-78446] [transport.py] [_log()] starting thread (client mode): 0xf5771d50
2025-12-12T23:23:34.072 [DEBUG] [Thread-78446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:23:34.093 [DEBUG] [Thread-78446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:23:34.093 [INFO] [Thread-78446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] client lang: <none>
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] server lang: <none>
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] kex follows: False
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:23:34.096 [DEBUG] [Thread-78446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:23:34.097 [DEBUG] [Thread-78446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:23:34.097 [DEBUG] [Thread-78446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:23:34.097 [DEBUG] [Thread-78446] [transport.py] [_log()] Compression: none
2025-12-12T23:23:34.097 [DEBUG] [Thread-78446] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:23:34.115 [DEBUG] [Thread-78446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:23:34.115 [DEBUG] [Thread-78446] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:23:34.115 [DEBUG] [Thread-78446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:23:34.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:23:34.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:23:34.117 [DEBUG] [Thread-78446] [transport.py] [_log()] userauth is OK
2025-12-12T23:23:34.117 [DEBUG] [Thread-78446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:23:34.117 [DEBUG] [Thread-78446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:23:34.117 [DEBUG] [Thread-78446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:23:34.117 [DEBUG] [Thread-78446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:23:34.133 [INFO] [Thread-78446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:23:34.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:23:34.737 [DEBUG] [Thread-78446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:23:34.737 [DEBUG] [Thread-78446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:23:34.737 [DEBUG] [Thread-78446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:23:34.777 [DEBUG] [Thread-78446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:23:34.778 [DEBUG] [Thread-78446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:23:34.780 [DEBUG] [Thread-78446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:23:34.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:23:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:23:34.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:23:34.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:23:34.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:23:34.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:23:34.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.891071 -999.00   +8.80  40.50     92   +7.60 1 3 2 3 1     0    0 1.28 11.81 ZNESW 34.9 40.5 303.3 48.1 10.2 -3.6 10.0 -7.2 9.7 -1.7 10.0 -1.7
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.891071
2025-12-12T23:23:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:23:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:23:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:23:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:23:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:23:34.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:23:26', tmtdew=0.78, humidity=94.88, cloud=0.0, wind=38.99, temperature=8.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:23:08.534', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:22:00')
2025-12-12T23:23:34.812 [DEBUG] [Thread-78446] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:23:34.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:23:34.893 [DEBUG] [Thread-78449] [transport.py] [_log()] starting thread (client mode): 0xf5772830
2025-12-12T23:23:34.893 [DEBUG] [Thread-78449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:23:34.907 [DEBUG] [Thread-78449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:23:34.907 [INFO] [Thread-78449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:23:34.914 [DEBUG] [Thread-78449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] client lang: <none>
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] server lang: <none>
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] kex follows: False
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] Compression: none
2025-12-12T23:23:34.915 [DEBUG] [Thread-78449] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:23:34.971 [DEBUG] [Thread-78449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:23:34.971 [DEBUG] [Thread-78449] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:23:34.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:23:34.972 [DEBUG] [Thread-78449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:23:34.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:23:35.028 [DEBUG] [Thread-78449] [transport.py] [_log()] userauth is OK
2025-12-12T23:23:35.029 [DEBUG] [Thread-78449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:23:35.029 [DEBUG] [Thread-78449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:23:35.029 [DEBUG] [Thread-78449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:23:35.029 [DEBUG] [Thread-78449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:23:35.043 [INFO] [Thread-78449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:23:35.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:23:35.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:23:35.872 [DEBUG] [Thread-78449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:23:35.872 [DEBUG] [Thread-78449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:23:35.920 [DEBUG] [Thread-78449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:23:35.920 [DEBUG] [Thread-78449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:23:35.928 [DEBUG] [Thread-78449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:23:35.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:23:35.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:23:35.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:23:35.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:23:35.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:23:35.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:23:35.959 [DEBUG] [Thread-78449] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:23:39.956 [DEBUG] [Thread-78451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:48.913 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:48.914 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:23:54.999 [DEBUG] [Thread-78452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:05.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:24:05.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:24:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:24:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 23, 58), 0.79, 94.85, 0.0, 37.99, 8.91, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:24:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:23:58
2025-12-12T23:24:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:24:06.945 [DEBUG] [Thread-78453] [transport.py] [_log()] starting thread (client mode): 0xf5742cb0
2025-12-12T23:24:06.945 [DEBUG] [Thread-78453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:24:06.964 [DEBUG] [Thread-78453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:24:06.964 [INFO] [Thread-78453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] client lang: <none>
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] server lang: <none>
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] kex follows: False
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:24:06.968 [DEBUG] [Thread-78453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:24:06.969 [DEBUG] [Thread-78453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:24:06.969 [DEBUG] [Thread-78453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:24:06.969 [DEBUG] [Thread-78453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:24:06.969 [DEBUG] [Thread-78453] [transport.py] [_log()] Compression: none
2025-12-12T23:24:06.969 [DEBUG] [Thread-78453] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:24:06.990 [DEBUG] [Thread-78453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:24:06.990 [DEBUG] [Thread-78453] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:24:06.991 [DEBUG] [Thread-78453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:24:06.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:24:06.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:24:06.998 [DEBUG] [Thread-78453] [transport.py] [_log()] userauth is OK
2025-12-12T23:24:06.998 [DEBUG] [Thread-78453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:24:06.998 [DEBUG] [Thread-78453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:24:06.998 [DEBUG] [Thread-78453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:24:06.998 [DEBUG] [Thread-78453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:24:07.025 [INFO] [Thread-78453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:24:07.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:24:07.622 [DEBUG] [Thread-78453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:24:07.622 [DEBUG] [Thread-78453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:24:07.622 [DEBUG] [Thread-78453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:24:07.665 [DEBUG] [Thread-78453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:24:07.665 [DEBUG] [Thread-78453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:24:07.669 [DEBUG] [Thread-78453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:24:07.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:24:07.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:24:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:24:07.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:24:07.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:24:07.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:24:07.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:24:07.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:24:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:24:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.891418 -999.00   +8.80  32.57     92   +7.70 1 3 2 3 1     0    0 1.30 12.53 Z.ES. 27.2 32.6 301.0 50.1 10.2 -2.6 10.1 -2.0 9.7 -3.9 10.0 -4.7
2025-12-12T23:24:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:24:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:24:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.891418
2025-12-12T23:24:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:24:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:24:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:24:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:24:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:24:07.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:23:58', tmtdew=0.79, humidity=94.85, cloud=0.0, wind=37.99, temperature=8.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:23:38.515', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:22:00')
2025-12-12T23:24:07.703 [DEBUG] [Thread-78453] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:24:07.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:24:07.797 [DEBUG] [Thread-78456] [transport.py] [_log()] starting thread (client mode): 0xf575dba0
2025-12-12T23:24:07.798 [DEBUG] [Thread-78456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:24:07.812 [DEBUG] [Thread-78456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:24:07.812 [INFO] [Thread-78456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:24:07.820 [DEBUG] [Thread-78456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] client lang: <none>
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] server lang: <none>
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] kex follows: False
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] Compression: none
2025-12-12T23:24:07.821 [DEBUG] [Thread-78456] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:24:07.877 [DEBUG] [Thread-78456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:24:07.877 [DEBUG] [Thread-78456] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:24:07.878 [DEBUG] [Thread-78456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:24:07.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:24:07.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:24:07.933 [DEBUG] [Thread-78456] [transport.py] [_log()] userauth is OK
2025-12-12T23:24:07.933 [DEBUG] [Thread-78456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:24:07.934 [DEBUG] [Thread-78456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:24:07.934 [DEBUG] [Thread-78456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:24:07.934 [DEBUG] [Thread-78456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:24:07.952 [INFO] [Thread-78456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:24:07.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:24:07.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:24:08.768 [DEBUG] [Thread-78456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:24:08.768 [DEBUG] [Thread-78456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:24:08.816 [DEBUG] [Thread-78456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:24:08.816 [DEBUG] [Thread-78456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:24:08.824 [DEBUG] [Thread-78456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:24:08.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:24:08.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:24:08.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:24:08.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:24:08.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:24:08.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:24:08.859 [DEBUG] [Thread-78456] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:24:10.031 [DEBUG] [Thread-78458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:20.404 [DEBUG] [Thread-78459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:25.076 [DEBUG] [Thread-78460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:38.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:24:38.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:24:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:24:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 24, 30), 0.8, 94.76, 0.0, 39.71, 8.88, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:24:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:24:30
2025-12-12T23:24:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:24:39.845 [DEBUG] [Thread-78461] [transport.py] [_log()] starting thread (client mode): 0xf575db70
2025-12-12T23:24:39.845 [DEBUG] [Thread-78461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:24:39.866 [DEBUG] [Thread-78461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:24:39.866 [INFO] [Thread-78461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:24:39.869 [DEBUG] [Thread-78461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] client lang: <none>
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] server lang: <none>
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] kex follows: False
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] Compression: none
2025-12-12T23:24:39.870 [DEBUG] [Thread-78461] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:24:39.887 [DEBUG] [Thread-78461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:24:39.887 [DEBUG] [Thread-78461] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:24:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:24:39.888 [DEBUG] [Thread-78461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:24:39.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:24:39.889 [DEBUG] [Thread-78461] [transport.py] [_log()] userauth is OK
2025-12-12T23:24:39.889 [DEBUG] [Thread-78461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:24:39.889 [DEBUG] [Thread-78461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:24:39.889 [DEBUG] [Thread-78461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:24:39.889 [DEBUG] [Thread-78461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:24:39.908 [INFO] [Thread-78461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:24:39.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:24:40.103 [DEBUG] [Thread-78463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:40.488 [DEBUG] [Thread-78461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:24:40.488 [DEBUG] [Thread-78461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:24:40.489 [DEBUG] [Thread-78461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:24:40.528 [DEBUG] [Thread-78461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:24:40.529 [DEBUG] [Thread-78461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:24:40.531 [DEBUG] [Thread-78461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:24:40.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:24:40.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:24:40.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:24:40.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:24:40.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:24:40.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:24:40.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:24:40.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:24:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:24:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.891418 -999.00   +8.80  32.57     92   +7.70 1 3 2 3 1     0    0 1.30 12.53 Z.ES. 27.2 32.6 301.0 50.1 10.2 -2.6 10.1 -2.0 9.7 -3.9 10.0 -4.7
2025-12-12T23:24:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:24:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:24:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.891418
2025-12-12T23:24:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:24:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:24:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:24:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:24:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:24:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:24:30', tmtdew=0.8, humidity=94.76, cloud=0.0, wind=39.71, temperature=8.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:23:38.515', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:22:00')
2025-12-12T23:24:40.556 [DEBUG] [Thread-78461] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:24:40.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:24:40.650 [DEBUG] [Thread-78465] [transport.py] [_log()] starting thread (client mode): 0xf575da20
2025-12-12T23:24:40.650 [DEBUG] [Thread-78465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:24:40.664 [DEBUG] [Thread-78465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:24:40.665 [INFO] [Thread-78465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:24:40.672 [DEBUG] [Thread-78465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] client lang: <none>
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] server lang: <none>
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] kex follows: False
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] Compression: none
2025-12-12T23:24:40.673 [DEBUG] [Thread-78465] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:24:40.729 [DEBUG] [Thread-78465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:24:40.730 [DEBUG] [Thread-78465] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:24:40.730 [DEBUG] [Thread-78465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:24:40.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:24:40.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:24:40.786 [DEBUG] [Thread-78465] [transport.py] [_log()] userauth is OK
2025-12-12T23:24:40.786 [DEBUG] [Thread-78465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:24:40.786 [DEBUG] [Thread-78465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:24:40.786 [DEBUG] [Thread-78465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:24:40.786 [DEBUG] [Thread-78465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:24:40.805 [INFO] [Thread-78465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:24:40.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:24:40.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:24:41.633 [DEBUG] [Thread-78465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:24:41.633 [DEBUG] [Thread-78465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:24:41.681 [DEBUG] [Thread-78465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:24:41.681 [DEBUG] [Thread-78465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:24:41.690 [DEBUG] [Thread-78465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:24:41.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:24:41.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:24:41.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:24:41.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:24:41.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:24:41.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:24:41.725 [DEBUG] [Thread-78465] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:24:49.118 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:49.119 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:24:55.135 [DEBUG] [Thread-78467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:10.170 [DEBUG] [Thread-78468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:11.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:25:11.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:25:11.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:25:12.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 25, 2), 0.8, 94.78, 0.0, 40.1, 8.9, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:25:12.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:25:02
2025-12-12T23:25:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:25:12.700 [DEBUG] [Thread-78469] [transport.py] [_log()] starting thread (client mode): 0xf5740c10
2025-12-12T23:25:12.700 [DEBUG] [Thread-78469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:25:12.721 [DEBUG] [Thread-78469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:25:12.722 [INFO] [Thread-78469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:12.725 [DEBUG] [Thread-78469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] client lang: <none>
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] server lang: <none>
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] kex follows: False
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] Compression: none
2025-12-12T23:25:12.726 [DEBUG] [Thread-78469] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:25:12.745 [DEBUG] [Thread-78469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:25:12.745 [DEBUG] [Thread-78469] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:25:12.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:25:12.746 [DEBUG] [Thread-78469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:25:12.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:25:12.748 [DEBUG] [Thread-78469] [transport.py] [_log()] userauth is OK
2025-12-12T23:25:12.748 [DEBUG] [Thread-78469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:25:12.748 [DEBUG] [Thread-78469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:25:12.748 [DEBUG] [Thread-78469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:25:12.748 [DEBUG] [Thread-78469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:25:12.767 [INFO] [Thread-78469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:25:12.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:25:13.899 [DEBUG] [Thread-78469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:25:13.899 [DEBUG] [Thread-78469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:25:13.899 [DEBUG] [Thread-78469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:25:13.940 [DEBUG] [Thread-78469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:25:13.940 [DEBUG] [Thread-78469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:25:13.943 [DEBUG] [Thread-78469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:25:13.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:25:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:25:13.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:25:13.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:25:14.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:25:14.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:25:14.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:25:14.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:25:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:25:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.892112 -999.00   +8.80  43.34     92   +7.70 1 3 2 3 1     0    0 1.37 14.26 Z...W 39.1 43.3 306.4 51.0 10.2 -12.8 10.1 -5.9 9.7 -8.8 10.0 -8.0
2025-12-12T23:25:14.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:25:14.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:25:14.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.892112
2025-12-12T23:25:14.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:25:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:25:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:25:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:25:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:25:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:25:02', tmtdew=0.8, humidity=94.78, cloud=0.0, wind=40.1, temperature=8.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:24:38.477', atlas_cloud=3, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:22:00')
2025-12-12T23:25:14.058 [DEBUG] [Thread-78469] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:25:14.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:25:14.160 [DEBUG] [Thread-78472] [transport.py] [_log()] starting thread (client mode): 0xf57bf7f0
2025-12-12T23:25:14.160 [DEBUG] [Thread-78472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:25:14.180 [DEBUG] [Thread-78472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:25:14.180 [INFO] [Thread-78472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:25:14.191 [DEBUG] [Thread-78472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] client lang: <none>
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] server lang: <none>
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] kex follows: False
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] Compression: none
2025-12-12T23:25:14.192 [DEBUG] [Thread-78472] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:25:14.249 [DEBUG] [Thread-78472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:25:14.249 [DEBUG] [Thread-78472] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:25:14.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:25:14.250 [DEBUG] [Thread-78472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:25:14.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:25:14.307 [DEBUG] [Thread-78472] [transport.py] [_log()] userauth is OK
2025-12-12T23:25:14.307 [DEBUG] [Thread-78472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:25:14.307 [DEBUG] [Thread-78472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:25:14.307 [DEBUG] [Thread-78472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:25:14.308 [DEBUG] [Thread-78472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:25:14.327 [INFO] [Thread-78472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:25:14.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:25:14.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:25:15.116 [DEBUG] [Thread-78472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:25:15.116 [DEBUG] [Thread-78472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:25:15.165 [DEBUG] [Thread-78472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:25:15.165 [DEBUG] [Thread-78472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:25:15.175 [DEBUG] [Thread-78472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:25:15.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:25:15.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:25:15.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:25:15.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:25:15.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:25:15.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:25:15.211 [DEBUG] [Thread-78472] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:25:20.477 [DEBUG] [Thread-78474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:25.201 [DEBUG] [Thread-78475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:40.254 [DEBUG] [Thread-78476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:25:45.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:25:45.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
2025-12-12T23:25:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 25, 34), 0.86, 94.71, 0.0, 37.51, 8.98, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:25:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:25:34
2025-12-12T23:25:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:25:46.181 [DEBUG] [Thread-78477] [transport.py] [_log()] starting thread (client mode): 0xf57437c0
2025-12-12T23:25:46.181 [DEBUG] [Thread-78477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:25:46.202 [DEBUG] [Thread-78477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:25:46.202 [INFO] [Thread-78477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:25:46.205 [DEBUG] [Thread-78477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] client lang: <none>
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] server lang: <none>
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] kex follows: False
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] Compression: none
2025-12-12T23:25:46.206 [DEBUG] [Thread-78477] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:25:46.223 [DEBUG] [Thread-78477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:25:46.223 [DEBUG] [Thread-78477] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:25:46.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:25:46.224 [DEBUG] [Thread-78477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:25:46.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:25:46.227 [DEBUG] [Thread-78477] [transport.py] [_log()] userauth is OK
2025-12-12T23:25:46.227 [DEBUG] [Thread-78477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:25:46.227 [DEBUG] [Thread-78477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:25:46.227 [DEBUG] [Thread-78477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:25:46.227 [DEBUG] [Thread-78477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:25:46.264 [INFO] [Thread-78477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:25:46.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:25:46.891 [DEBUG] [Thread-78477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:25:46.891 [DEBUG] [Thread-78477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:25:46.892 [DEBUG] [Thread-78477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:25:46.933 [DEBUG] [Thread-78477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:25:46.933 [DEBUG] [Thread-78477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:25:46.936 [DEBUG] [Thread-78477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:25:46.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:25:46.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:25:46.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:25:46.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:25:46.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:25:46.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:25:46.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:25:46.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:25:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:25:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.892459 -999.00   +8.80  47.43     93   +7.80 1 2 2 3 1     0    0 1.39 15.10 Z...W 54.8 47.4 313.4 51.8 10.2 -6.0 10.0 -9.2 9.7 -11.3 10.0 -8.6
2025-12-12T23:25:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:25:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:25:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.892459
2025-12-12T23:25:46.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:25:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:25:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:25:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:25:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:25:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:25:34', tmtdew=0.86, humidity=94.71, cloud=0.0, wind=37.51, temperature=8.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:25:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[1.4667499999999993, 2.156250000000001, nan, nan, nan, 1.6742500000000007, 1.2029999999999994, 0.9112500000000008, 0.984, 2.0630000000000006, nan, nan, nan, 1.9692499999999997, 1.2239999999999993, 0.6109999999999998, 0.7742500000000012, 1.7054999999999998, nan, nan, nan, nan, 1.5532500000000011, 1.13375, 0.6324999999999994, 1.6645000000000003, nan, nan, nan, nan, 1.6800000000000006, 1.8210000000000006, 1.0642499999999995], zp_timestamp='2025-12-12T21:22:00')
2025-12-12T23:25:46.961 [DEBUG] [Thread-78477] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:25:47.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:25:47.063 [DEBUG] [Thread-78480] [transport.py] [_log()] starting thread (client mode): 0xf5740670
2025-12-12T23:25:47.063 [DEBUG] [Thread-78480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:25:47.078 [DEBUG] [Thread-78480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:25:47.078 [INFO] [Thread-78480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:25:47.086 [DEBUG] [Thread-78480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:25:47.086 [DEBUG] [Thread-78480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:25:47.086 [DEBUG] [Thread-78480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:25:47.086 [DEBUG] [Thread-78480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] client lang: <none>
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] server lang: <none>
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] kex follows: False
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] Compression: none
2025-12-12T23:25:47.087 [DEBUG] [Thread-78480] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:25:47.148 [DEBUG] [Thread-78480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:25:47.149 [DEBUG] [Thread-78480] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:25:47.149 [DEBUG] [Thread-78480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:25:47.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:25:47.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:25:47.211 [DEBUG] [Thread-78480] [transport.py] [_log()] userauth is OK
2025-12-12T23:25:47.211 [DEBUG] [Thread-78480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:25:47.211 [DEBUG] [Thread-78480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:25:47.211 [DEBUG] [Thread-78480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:25:47.211 [DEBUG] [Thread-78480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:25:47.233 [INFO] [Thread-78480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:25:47.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:25:47.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:25:48.068 [DEBUG] [Thread-78480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:25:48.068 [DEBUG] [Thread-78480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:25:48.118 [DEBUG] [Thread-78480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:25:48.118 [DEBUG] [Thread-78480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:25:48.127 [DEBUG] [Thread-78480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:25:48.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:25:48.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:25:48.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:25:48.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:25:48.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:25:48.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:25:48.163 [DEBUG] [Thread-78480] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:25:49.325 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:49.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:25:55.283 [DEBUG] [Thread-78482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:10.331 [DEBUG] [Thread-78483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:26:18.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:26:18.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:26:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 26, 6), 0.86, 94.71, 0.0, 38.5, 8.96, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:26:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:26:06
2025-12-12T23:26:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:26:19.148 [DEBUG] [Thread-78484] [transport.py] [_log()] starting thread (client mode): 0xf57c8670
2025-12-12T23:26:19.149 [DEBUG] [Thread-78484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:26:19.169 [DEBUG] [Thread-78484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:26:19.169 [INFO] [Thread-78484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] client lang: <none>
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] server lang: <none>
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] kex follows: False
2025-12-12T23:26:19.172 [DEBUG] [Thread-78484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:26:19.173 [DEBUG] [Thread-78484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:26:19.173 [DEBUG] [Thread-78484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:26:19.173 [DEBUG] [Thread-78484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:26:19.173 [DEBUG] [Thread-78484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:26:19.173 [DEBUG] [Thread-78484] [transport.py] [_log()] Compression: none
2025-12-12T23:26:19.173 [DEBUG] [Thread-78484] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:26:19.191 [DEBUG] [Thread-78484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:26:19.191 [DEBUG] [Thread-78484] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:26:19.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:26:19.193 [DEBUG] [Thread-78484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:26:19.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:26:19.194 [DEBUG] [Thread-78484] [transport.py] [_log()] userauth is OK
2025-12-12T23:26:19.195 [DEBUG] [Thread-78484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:26:19.195 [DEBUG] [Thread-78484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:26:19.195 [DEBUG] [Thread-78484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:26:19.195 [DEBUG] [Thread-78484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:26:19.214 [INFO] [Thread-78484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:26:19.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:26:20.018 [DEBUG] [Thread-78484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:26:20.019 [DEBUG] [Thread-78484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:26:20.019 [DEBUG] [Thread-78484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:26:20.061 [DEBUG] [Thread-78484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:26:20.061 [DEBUG] [Thread-78484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:26:20.066 [DEBUG] [Thread-78484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:26:20.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:26:20.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:26:20.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:26:20.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:26:20.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:26:20.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:26:20.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:26:20.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:26:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:26:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.892807 -999.00   +8.70  49.38     92   +7.60 1 2 2 3 1     0    0 1.41 15.37 ZNEs. 41.9 49.4 314.6 63.7 10.2 -16.9 10.0 -12.3 9.7 -12.8 10.0 -11.2
2025-12-12T23:26:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:26:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:26:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.892807
2025-12-12T23:26:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:26:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:26:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:26:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:26:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:26:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:26:06', tmtdew=0.86, humidity=94.71, cloud=0.0, wind=38.5, temperature=8.96, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:25:38.525', atlas_cloud=2, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:24:00')
2025-12-12T23:26:20.103 [DEBUG] [Thread-78484] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:26:20.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:26:20.192 [DEBUG] [Thread-78487] [transport.py] [_log()] starting thread (client mode): 0xf57ca950
2025-12-12T23:26:20.192 [DEBUG] [Thread-78487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:26:20.207 [DEBUG] [Thread-78487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:26:20.208 [INFO] [Thread-78487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:26:20.218 [DEBUG] [Thread-78487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:26:20.219 [DEBUG] [Thread-78487] [transport.py] [_log()] client lang: <none>
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] server lang: <none>
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] kex follows: False
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:26:20.220 [DEBUG] [Thread-78487] [transport.py] [_log()] Compression: none
2025-12-12T23:26:20.221 [DEBUG] [Thread-78487] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:26:20.275 [DEBUG] [Thread-78487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:26:20.276 [DEBUG] [Thread-78487] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:26:20.276 [DEBUG] [Thread-78487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:26:20.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:26:20.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:26:20.331 [DEBUG] [Thread-78487] [transport.py] [_log()] userauth is OK
2025-12-12T23:26:20.332 [DEBUG] [Thread-78487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:26:20.332 [DEBUG] [Thread-78487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:26:20.332 [DEBUG] [Thread-78487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:26:20.332 [DEBUG] [Thread-78487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:26:20.352 [INFO] [Thread-78487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:26:20.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:26:20.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:26:20.555 [DEBUG] [Thread-78489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:21.166 [DEBUG] [Thread-78487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:26:21.167 [DEBUG] [Thread-78487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:26:21.214 [DEBUG] [Thread-78487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:26:21.214 [DEBUG] [Thread-78487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:26:21.223 [DEBUG] [Thread-78487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:26:21.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:26:21.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:26:21.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:26:21.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:26:21.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:26:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:26:21.260 [DEBUG] [Thread-78487] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:26:25.358 [DEBUG] [Thread-78490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:40.399 [DEBUG] [Thread-78491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:49.538 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:49.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:26:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:26:51.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:26:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:26:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 26, 38), 0.87, 94.16, 0.0, 40.07, 8.9, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:26:51.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:26:38
2025-12-12T23:26:52.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:26:52.261 [DEBUG] [Thread-78492] [transport.py] [_log()] starting thread (client mode): 0xf57c8940
2025-12-12T23:26:52.261 [DEBUG] [Thread-78492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:26:52.283 [DEBUG] [Thread-78492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:26:52.283 [INFO] [Thread-78492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] client lang: <none>
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] server lang: <none>
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] kex follows: False
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] Compression: none
2025-12-12T23:26:52.287 [DEBUG] [Thread-78492] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:26:52.304 [DEBUG] [Thread-78492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:26:52.304 [DEBUG] [Thread-78492] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:26:52.304 [DEBUG] [Thread-78492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:26:52.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:26:52.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:26:52.308 [DEBUG] [Thread-78492] [transport.py] [_log()] userauth is OK
2025-12-12T23:26:52.308 [DEBUG] [Thread-78492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:26:52.308 [DEBUG] [Thread-78492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:26:52.308 [DEBUG] [Thread-78492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:26:52.308 [DEBUG] [Thread-78492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:26:52.325 [INFO] [Thread-78492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:26:52.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:26:52.959 [DEBUG] [Thread-78492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:26:52.959 [DEBUG] [Thread-78492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:26:52.960 [DEBUG] [Thread-78492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:26:53.001 [DEBUG] [Thread-78492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:26:53.002 [DEBUG] [Thread-78492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:26:53.005 [DEBUG] [Thread-78492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:26:53.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:26:53.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:26:53.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:26:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:26:53.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:26:53.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:26:53.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:26:53.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:26:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:26:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.893154 -999.00   +8.70  40.03     92   +7.60 1 2 2 3 1     0    0 1.41 15.89 ZNEs. 42.1 40.0 310.0 54.3 10.2 -10.5 9.9 -15.6 9.7 -7.2 10.0 -11.0
2025-12-12T23:26:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:26:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:26:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.893154
2025-12-12T23:26:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:26:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:26:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:26:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:26:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:26:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:26:38', tmtdew=0.87, humidity=94.16, cloud=0.0, wind=40.07, temperature=8.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:26:08.506', atlas_cloud=2, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:24:00')
2025-12-12T23:26:53.034 [DEBUG] [Thread-78492] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:26:53.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:26:53.135 [DEBUG] [Thread-78495] [transport.py] [_log()] starting thread (client mode): 0xf575db10
2025-12-12T23:26:53.135 [DEBUG] [Thread-78495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:26:53.151 [DEBUG] [Thread-78495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:26:53.151 [INFO] [Thread-78495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:26:53.158 [DEBUG] [Thread-78495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:26:53.158 [DEBUG] [Thread-78495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] client lang: <none>
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] server lang: <none>
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] kex follows: False
2025-12-12T23:26:53.159 [DEBUG] [Thread-78495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:26:53.160 [DEBUG] [Thread-78495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:26:53.160 [DEBUG] [Thread-78495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:26:53.160 [DEBUG] [Thread-78495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:26:53.160 [DEBUG] [Thread-78495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:26:53.160 [DEBUG] [Thread-78495] [transport.py] [_log()] Compression: none
2025-12-12T23:26:53.160 [DEBUG] [Thread-78495] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:26:53.216 [DEBUG] [Thread-78495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:26:53.216 [DEBUG] [Thread-78495] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:26:53.217 [DEBUG] [Thread-78495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:26:53.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:26:53.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:26:53.272 [DEBUG] [Thread-78495] [transport.py] [_log()] userauth is OK
2025-12-12T23:26:53.273 [DEBUG] [Thread-78495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:26:53.273 [DEBUG] [Thread-78495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:26:53.273 [DEBUG] [Thread-78495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:26:53.273 [DEBUG] [Thread-78495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:26:53.291 [INFO] [Thread-78495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:26:53.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:26:53.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:26:54.113 [DEBUG] [Thread-78495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:26:54.113 [DEBUG] [Thread-78495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:26:54.162 [DEBUG] [Thread-78495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:26:54.162 [DEBUG] [Thread-78495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:26:54.171 [DEBUG] [Thread-78495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:26:54.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:26:54.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:26:54.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:26:54.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:26:54.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:26:54.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:26:54.204 [DEBUG] [Thread-78495] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:26:55.425 [DEBUG] [Thread-78497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:10.476 [DEBUG] [Thread-78498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:20.632 [DEBUG] [Thread-78499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:24.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:27:24.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:27:24.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:27:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 27, 10), 0.87, 94.15, 0.0, 36.59, 8.88, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:27:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:27:10
2025-12-12T23:27:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:27:25.171 [DEBUG] [Thread-78500] [transport.py] [_log()] starting thread (client mode): 0xf578a5f0
2025-12-12T23:27:25.171 [DEBUG] [Thread-78500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:27:25.192 [DEBUG] [Thread-78500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:27:25.192 [INFO] [Thread-78500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] client lang: <none>
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] server lang: <none>
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] kex follows: False
2025-12-12T23:27:25.195 [DEBUG] [Thread-78500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:27:25.196 [DEBUG] [Thread-78500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:27:25.196 [DEBUG] [Thread-78500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:27:25.196 [DEBUG] [Thread-78500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:27:25.196 [DEBUG] [Thread-78500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:27:25.196 [DEBUG] [Thread-78500] [transport.py] [_log()] Compression: none
2025-12-12T23:27:25.196 [DEBUG] [Thread-78500] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:27:25.213 [DEBUG] [Thread-78500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:27:25.214 [DEBUG] [Thread-78500] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:27:25.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:27:25.215 [DEBUG] [Thread-78500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:27:25.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:27:25.217 [DEBUG] [Thread-78500] [transport.py] [_log()] userauth is OK
2025-12-12T23:27:25.217 [DEBUG] [Thread-78500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:27:25.217 [DEBUG] [Thread-78500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:27:25.217 [DEBUG] [Thread-78500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:27:25.217 [DEBUG] [Thread-78500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:27:25.241 [INFO] [Thread-78500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:27:25.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:27:25.505 [DEBUG] [Thread-78502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:26.030 [DEBUG] [Thread-78500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:27:26.030 [DEBUG] [Thread-78500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:27:26.030 [DEBUG] [Thread-78500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:27:26.073 [DEBUG] [Thread-78500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:27:26.073 [DEBUG] [Thread-78500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:27:26.077 [DEBUG] [Thread-78500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:27:26.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:27:26.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:27:26.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:27:26.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:27:26.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:27:26.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:27:26.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.893501 -999.00   +8.70  41.59     92   +7.60 1 3 2 3 1     0    0 1.46 16.25 zN.SW 42.2 41.6 314.4 56.5 10.2 -6.9 10.0 -9.2 9.7 -3.8 10.0 -6.2
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.893501
2025-12-12T23:27:26.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:27:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:27:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:27:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:27:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:27:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:27:10', tmtdew=0.87, humidity=94.15, cloud=0.0, wind=36.59, temperature=8.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:26:38.486', atlas_cloud=3, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:24:00')
2025-12-12T23:27:26.112 [DEBUG] [Thread-78500] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:27:26.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:27:26.195 [DEBUG] [Thread-78504] [transport.py] [_log()] starting thread (client mode): 0xf57cae90
2025-12-12T23:27:26.195 [DEBUG] [Thread-78504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:27:26.210 [DEBUG] [Thread-78504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:27:26.210 [INFO] [Thread-78504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] client lang: <none>
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] server lang: <none>
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] kex follows: False
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] Compression: none
2025-12-12T23:27:26.218 [DEBUG] [Thread-78504] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:27:26.275 [DEBUG] [Thread-78504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:27:26.275 [DEBUG] [Thread-78504] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:27:26.275 [DEBUG] [Thread-78504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:27:26.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:27:26.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:27:26.332 [DEBUG] [Thread-78504] [transport.py] [_log()] userauth is OK
2025-12-12T23:27:26.332 [DEBUG] [Thread-78504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:27:26.332 [DEBUG] [Thread-78504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:27:26.332 [DEBUG] [Thread-78504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:27:26.332 [DEBUG] [Thread-78504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:27:26.346 [INFO] [Thread-78504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:27:26.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:27:26.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:27:27.163 [DEBUG] [Thread-78504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:27:27.163 [DEBUG] [Thread-78504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:27:27.210 [DEBUG] [Thread-78504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:27:27.210 [DEBUG] [Thread-78504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:27:27.219 [DEBUG] [Thread-78504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:27:27.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:27:27.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:27:27.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:27:27.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:27:27.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:27:27.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:27:27.250 [DEBUG] [Thread-78504] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:27:40.531 [DEBUG] [Thread-78506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:49.743 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:49.744 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:55.577 [DEBUG] [Thread-78507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:27:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:27:57.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:27:57.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:27:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 27, 42), 0.88, 94.08, 0.0, 38.6, 8.93, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:27:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:27:42
2025-12-12T23:27:58.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:27:58.221 [DEBUG] [Thread-78508] [transport.py] [_log()] starting thread (client mode): 0xf57cbee0
2025-12-12T23:27:58.221 [DEBUG] [Thread-78508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:27:58.241 [DEBUG] [Thread-78508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:27:58.242 [INFO] [Thread-78508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] client lang: <none>
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] server lang: <none>
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] kex follows: False
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] Compression: none
2025-12-12T23:27:58.245 [DEBUG] [Thread-78508] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:27:58.262 [DEBUG] [Thread-78508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:27:58.262 [DEBUG] [Thread-78508] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:27:58.263 [DEBUG] [Thread-78508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:27:58.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:27:58.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:27:58.265 [DEBUG] [Thread-78508] [transport.py] [_log()] userauth is OK
2025-12-12T23:27:58.265 [DEBUG] [Thread-78508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:27:58.265 [DEBUG] [Thread-78508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:27:58.265 [DEBUG] [Thread-78508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:27:58.265 [DEBUG] [Thread-78508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:27:58.284 [INFO] [Thread-78508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:27:58.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:27:58.915 [DEBUG] [Thread-78508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:27:58.915 [DEBUG] [Thread-78508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:27:58.915 [DEBUG] [Thread-78508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:27:58.956 [DEBUG] [Thread-78508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:27:58.956 [DEBUG] [Thread-78508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:27:58.959 [DEBUG] [Thread-78508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:27:58.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:27:58.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:27:58.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:27:58.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:27:58.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:27:58.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:27:58.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:27:58.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:27:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:27:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.893848 -999.00   +8.70  43.28     92   +7.50 1 3 2 3 1     0    0 1.44 16.25 zNES. 44.8 43.3 315.6 55.8 10.2 -3.6 9.9 -4.7 9.6 -5.1 10.0 -4.0
2025-12-12T23:27:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:27:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:27:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.893848
2025-12-12T23:27:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:27:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:27:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:27:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:27:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:27:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:27:42', tmtdew=0.88, humidity=94.08, cloud=0.0, wind=38.6, temperature=8.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:27:08.467', atlas_cloud=3, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:24:00')
2025-12-12T23:27:58.983 [DEBUG] [Thread-78508] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:27:59.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:27:59.093 [DEBUG] [Thread-78511] [transport.py] [_log()] starting thread (client mode): 0xf57bd9f0
2025-12-12T23:27:59.093 [DEBUG] [Thread-78511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:27:59.111 [DEBUG] [Thread-78511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:27:59.111 [INFO] [Thread-78511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:27:59.119 [DEBUG] [Thread-78511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:27:59.119 [DEBUG] [Thread-78511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:27:59.119 [DEBUG] [Thread-78511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:27:59.119 [DEBUG] [Thread-78511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] client lang: <none>
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] server lang: <none>
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] kex follows: False
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] Compression: none
2025-12-12T23:27:59.120 [DEBUG] [Thread-78511] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:27:59.178 [DEBUG] [Thread-78511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:27:59.178 [DEBUG] [Thread-78511] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:27:59.179 [DEBUG] [Thread-78511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:27:59.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:27:59.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:27:59.237 [DEBUG] [Thread-78511] [transport.py] [_log()] userauth is OK
2025-12-12T23:27:59.237 [DEBUG] [Thread-78511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:27:59.237 [DEBUG] [Thread-78511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:27:59.237 [DEBUG] [Thread-78511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:27:59.237 [DEBUG] [Thread-78511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:27:59.257 [INFO] [Thread-78511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:27:59.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:27:59.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:28:00.104 [DEBUG] [Thread-78511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:28:00.104 [DEBUG] [Thread-78511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:28:00.152 [DEBUG] [Thread-78511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:28:00.152 [DEBUG] [Thread-78511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:28:00.161 [DEBUG] [Thread-78511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:28:00.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:28:00.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:28:00.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:28:00.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:28:00.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:28:00.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:28:00.198 [DEBUG] [Thread-78511] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:28:10.606 [DEBUG] [Thread-78513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:28:20.723 [DEBUG] [Thread-78514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:28:25.651 [DEBUG] [Thread-78515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:28:30.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:28:30.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:28:30.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:28:30.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 28, 15), 0.89, 94.01, 0.0, 42.24, 8.91, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:28:30.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:28:15
2025-12-12T23:28:31.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:28:31.173 [DEBUG] [Thread-78516] [transport.py] [_log()] starting thread (client mode): 0xf57431f0
2025-12-12T23:28:31.173 [DEBUG] [Thread-78516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:28:31.193 [DEBUG] [Thread-78516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:28:31.193 [INFO] [Thread-78516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] client lang: <none>
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] server lang: <none>
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] kex follows: False
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] Compression: none
2025-12-12T23:28:31.196 [DEBUG] [Thread-78516] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:28:31.214 [DEBUG] [Thread-78516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:28:31.215 [DEBUG] [Thread-78516] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:28:31.215 [DEBUG] [Thread-78516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:28:31.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:28:31.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:28:31.217 [DEBUG] [Thread-78516] [transport.py] [_log()] userauth is OK
2025-12-12T23:28:31.217 [DEBUG] [Thread-78516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:28:31.217 [DEBUG] [Thread-78516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:28:31.218 [DEBUG] [Thread-78516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:28:31.218 [DEBUG] [Thread-78516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:28:31.235 [INFO] [Thread-78516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:28:31.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:28:32.018 [DEBUG] [Thread-78516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:28:32.019 [DEBUG] [Thread-78516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:28:32.019 [DEBUG] [Thread-78516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:28:32.060 [DEBUG] [Thread-78516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:28:32.060 [DEBUG] [Thread-78516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:28:32.062 [DEBUG] [Thread-78516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:28:32.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:28:32.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:28:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:28:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:28:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:28:32.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:28:32.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:28:32.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:28:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:28:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.894543 -999.00   +8.70  47.89     92   +7.60 1 2 2 3 1     0    0 1.47 17.15 z...W 45.2 47.9 310.8 59.6 10.2 -13.2 9.9 -13.8 9.6 -14.4 10.0 -12.4
2025-12-12T23:28:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:28:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:28:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.894543
2025-12-12T23:28:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:28:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:28:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:28:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:28:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:28:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:28:15', tmtdew=0.89, humidity=94.01, cloud=0.0, wind=42.24, temperature=8.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:28:08.515', atlas_cloud=2, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:24:00')
2025-12-12T23:28:32.088 [DEBUG] [Thread-78516] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:28:32.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:28:32.183 [DEBUG] [Thread-78519] [transport.py] [_log()] starting thread (client mode): 0xf57ca080
2025-12-12T23:28:32.183 [DEBUG] [Thread-78519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:28:32.198 [DEBUG] [Thread-78519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:28:32.198 [INFO] [Thread-78519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:28:32.205 [DEBUG] [Thread-78519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:28:32.205 [DEBUG] [Thread-78519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:28:32.205 [DEBUG] [Thread-78519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:28:32.205 [DEBUG] [Thread-78519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:28:32.205 [DEBUG] [Thread-78519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:28:32.205 [DEBUG] [Thread-78519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] client lang: <none>
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] server lang: <none>
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] kex follows: False
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] Compression: none
2025-12-12T23:28:32.206 [DEBUG] [Thread-78519] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:28:32.265 [DEBUG] [Thread-78519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:28:32.266 [DEBUG] [Thread-78519] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:28:32.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:28:32.266 [DEBUG] [Thread-78519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:28:32.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:28:32.321 [DEBUG] [Thread-78519] [transport.py] [_log()] userauth is OK
2025-12-12T23:28:32.322 [DEBUG] [Thread-78519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:28:32.322 [DEBUG] [Thread-78519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:28:32.322 [DEBUG] [Thread-78519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:28:32.322 [DEBUG] [Thread-78519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:28:32.344 [INFO] [Thread-78519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:28:32.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:28:32.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:28:33.182 [DEBUG] [Thread-78519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:28:33.183 [DEBUG] [Thread-78519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:28:33.231 [DEBUG] [Thread-78519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:28:33.231 [DEBUG] [Thread-78519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:28:33.240 [DEBUG] [Thread-78519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:28:33.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:28:33.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:28:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:28:33.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:28:33.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:28:33.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:28:33.273 [DEBUG] [Thread-78519] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:28:40.679 [DEBUG] [Thread-78521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:28:49.948 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:28:49.949 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:28:55.715 [DEBUG] [Thread-78522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:03.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:29:03.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:29:03.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:29:03.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 28, 47), 0.91, 93.9, 0.0, 41.53, 8.86, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:29:03.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:28:47
2025-12-12T23:29:04.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:29:04.247 [DEBUG] [Thread-78523] [transport.py] [_log()] starting thread (client mode): 0xf5789180
2025-12-12T23:29:04.247 [DEBUG] [Thread-78523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:29:04.266 [DEBUG] [Thread-78523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:29:04.267 [INFO] [Thread-78523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:04.269 [DEBUG] [Thread-78523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] client lang: <none>
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] server lang: <none>
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] kex follows: False
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] Compression: none
2025-12-12T23:29:04.270 [DEBUG] [Thread-78523] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:29:04.281 [DEBUG] [Thread-78523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:29:04.282 [DEBUG] [Thread-78523] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:29:04.282 [DEBUG] [Thread-78523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:29:04.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:29:04.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:29:04.284 [DEBUG] [Thread-78523] [transport.py] [_log()] userauth is OK
2025-12-12T23:29:04.284 [DEBUG] [Thread-78523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:29:04.284 [DEBUG] [Thread-78523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:29:04.284 [DEBUG] [Thread-78523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:29:04.284 [DEBUG] [Thread-78523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:29:04.304 [INFO] [Thread-78523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:29:04.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:29:04.940 [DEBUG] [Thread-78523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:29:04.940 [DEBUG] [Thread-78523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:29:04.941 [DEBUG] [Thread-78523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:29:04.981 [DEBUG] [Thread-78523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:29:04.981 [DEBUG] [Thread-78523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:29:04.984 [DEBUG] [Thread-78523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:29:04.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:29:04.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:29:04.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:29:04.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:29:05.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:29:05.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:29:05.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:29:05.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:29:05.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:29:05.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.894890 -999.00   +8.70  40.27     92   +7.50 1 2 2 3 1     0    0 1.49 16.90 z...W 43.2 40.3 310.2 52.7 10.1 -12.7 9.9 -15.9 9.6 -12.4 9.9 -13.7
2025-12-12T23:29:05.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:29:05.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:29:05.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.894890
2025-12-12T23:29:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:29:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:29:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:29:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:29:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:29:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:28:47', tmtdew=0.91, humidity=93.9, cloud=0.0, wind=41.53, temperature=8.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:28:38.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:28:00')
2025-12-12T23:29:05.015 [DEBUG] [Thread-78523] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:29:05.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:29:05.121 [DEBUG] [Thread-78526] [transport.py] [_log()] starting thread (client mode): 0xf572eef0
2025-12-12T23:29:05.121 [DEBUG] [Thread-78526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:29:05.150 [DEBUG] [Thread-78526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:29:05.150 [INFO] [Thread-78526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] client lang: <none>
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] server lang: <none>
2025-12-12T23:29:05.167 [DEBUG] [Thread-78526] [transport.py] [_log()] kex follows: False
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] Compression: none
2025-12-12T23:29:05.168 [DEBUG] [Thread-78526] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:29:05.217 [DEBUG] [Thread-78526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:29:05.218 [DEBUG] [Thread-78526] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:29:05.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:29:05.218 [DEBUG] [Thread-78526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:29:05.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:29:05.274 [DEBUG] [Thread-78526] [transport.py] [_log()] userauth is OK
2025-12-12T23:29:05.274 [DEBUG] [Thread-78526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:29:05.274 [DEBUG] [Thread-78526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:29:05.274 [DEBUG] [Thread-78526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:29:05.274 [DEBUG] [Thread-78526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:29:05.294 [INFO] [Thread-78526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:29:05.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:29:05.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:29:06.171 [DEBUG] [Thread-78526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:29:06.171 [DEBUG] [Thread-78526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:29:06.218 [DEBUG] [Thread-78526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:29:06.219 [DEBUG] [Thread-78526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:29:06.227 [DEBUG] [Thread-78526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:29:06.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:29:06.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:29: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') -> 00000000
2025-12-12T23:29:06.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:29:06.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:29:06.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:29:06.262 [DEBUG] [Thread-78526] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:29:10.746 [DEBUG] [Thread-78528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:20.790 [DEBUG] [Thread-78529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:25.791 [DEBUG] [Thread-78530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:29:36.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:29:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:29:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 29, 19), 0.91, 93.87, 0.0, 41.0, 8.81, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:29:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:29:19
2025-12-12T23:29:37.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:29:37.253 [DEBUG] [Thread-78531] [transport.py] [_log()] starting thread (client mode): 0xf57413c0
2025-12-12T23:29:37.253 [DEBUG] [Thread-78531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:29:37.273 [DEBUG] [Thread-78531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:29:37.273 [INFO] [Thread-78531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:37.276 [DEBUG] [Thread-78531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] client lang: <none>
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] server lang: <none>
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] kex follows: False
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] Compression: none
2025-12-12T23:29:37.277 [DEBUG] [Thread-78531] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:29:37.292 [DEBUG] [Thread-78531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:29:37.292 [DEBUG] [Thread-78531] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:29:37.293 [DEBUG] [Thread-78531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:29:37.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:29:37.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:29:37.295 [DEBUG] [Thread-78531] [transport.py] [_log()] userauth is OK
2025-12-12T23:29:37.295 [DEBUG] [Thread-78531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:29:37.295 [DEBUG] [Thread-78531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:29:37.295 [DEBUG] [Thread-78531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:29:37.295 [DEBUG] [Thread-78531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:29:37.317 [INFO] [Thread-78531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:29:37.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:29:38.132 [DEBUG] [Thread-78531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:29:38.133 [DEBUG] [Thread-78531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:29:38.133 [DEBUG] [Thread-78531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:29:38.174 [DEBUG] [Thread-78531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:29:38.174 [DEBUG] [Thread-78531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:29:38.177 [DEBUG] [Thread-78531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:29:38.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:29:38.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:29:38.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:29:38.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:29:38.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:29:38.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:29:38.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:29:38.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:29:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:29:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.895237 -999.00   +8.70  40.90     92   +7.60 1 2 2 3 1     0    0 1.54 18.52 Z.EsW 34.0 40.9 305.5 53.5 10.1 -17.2 9.9 -16.3 9.5 -9.8 9.9 -13.4
2025-12-12T23:29:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:29:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:29:38.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.895237
2025-12-12T23:29:38.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:29:38.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:29:38.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:29:38.203 [DEBUG] [Thread-78531] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:29:38.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:29:38.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:29:38.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:29:19', tmtdew=0.91, humidity=93.87, cloud=0.0, wind=41.0, temperature=8.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:29:08.477', atlas_cloud=2, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:28:00')
2025-12-12T23:29:38.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:29:38.311 [DEBUG] [Thread-78534] [transport.py] [_log()] starting thread (client mode): 0xf57bded0
2025-12-12T23:29:38.311 [DEBUG] [Thread-78534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:29:38.326 [DEBUG] [Thread-78534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:29:38.326 [INFO] [Thread-78534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] client lang: <none>
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] server lang: <none>
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] kex follows: False
2025-12-12T23:29:38.334 [DEBUG] [Thread-78534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:29:38.335 [DEBUG] [Thread-78534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:29:38.335 [DEBUG] [Thread-78534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:29:38.335 [DEBUG] [Thread-78534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:29:38.335 [DEBUG] [Thread-78534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:29:38.335 [DEBUG] [Thread-78534] [transport.py] [_log()] Compression: none
2025-12-12T23:29:38.335 [DEBUG] [Thread-78534] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:29:38.393 [DEBUG] [Thread-78534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:29:38.394 [DEBUG] [Thread-78534] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:29:38.394 [DEBUG] [Thread-78534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:29:38.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:29:38.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:29:38.450 [DEBUG] [Thread-78534] [transport.py] [_log()] userauth is OK
2025-12-12T23:29:38.450 [DEBUG] [Thread-78534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:29:38.450 [DEBUG] [Thread-78534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:29:38.451 [DEBUG] [Thread-78534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:29:38.451 [DEBUG] [Thread-78534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:29:38.470 [INFO] [Thread-78534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:29:38.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:29:38.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:29:39.267 [DEBUG] [Thread-78534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:29:39.268 [DEBUG] [Thread-78534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:29:39.315 [DEBUG] [Thread-78534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:29:39.316 [DEBUG] [Thread-78534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:29:39.328 [DEBUG] [Thread-78534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:29:39.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:29:39.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:29:39.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:29:39.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:29:39.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:29:39.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:29:39.364 [DEBUG] [Thread-78534] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:29:40.816 [DEBUG] [Thread-78536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:50.155 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:50.157 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:29:55.858 [DEBUG] [Thread-78537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:09.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:30:09.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:30:09.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:30:10.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 29, 51), 0.96, 93.9, 0.0, 40.7, 8.83, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:30:10.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:29:51
2025-12-12T23:30:10.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:30:10.346 [DEBUG] [Thread-78538] [transport.py] [_log()] starting thread (client mode): 0xf5788490
2025-12-12T23:30:10.347 [DEBUG] [Thread-78538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:30:10.366 [DEBUG] [Thread-78538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:30:10.366 [INFO] [Thread-78538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:10.369 [DEBUG] [Thread-78538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] client lang: <none>
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] server lang: <none>
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] kex follows: False
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] Compression: none
2025-12-12T23:30:10.370 [DEBUG] [Thread-78538] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:30:10.386 [DEBUG] [Thread-78538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:30:10.387 [DEBUG] [Thread-78538] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:30:10.387 [DEBUG] [Thread-78538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:30:10.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:30:10.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:30:10.389 [DEBUG] [Thread-78538] [transport.py] [_log()] userauth is OK
2025-12-12T23:30:10.389 [DEBUG] [Thread-78538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:30:10.389 [DEBUG] [Thread-78538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:30:10.389 [DEBUG] [Thread-78538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:30:10.389 [DEBUG] [Thread-78538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:30:10.413 [INFO] [Thread-78538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:30:10.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:30:10.887 [DEBUG] [Thread-78540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:11.190 [DEBUG] [Thread-78538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:30:11.190 [DEBUG] [Thread-78538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:30:11.191 [DEBUG] [Thread-78538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:30:11.234 [DEBUG] [Thread-78538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:30:11.234 [DEBUG] [Thread-78538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:30:11.239 [DEBUG] [Thread-78538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:30:11.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:30:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:30:11.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:30:11.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:30:11.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:30:11.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:30:11.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:30:11.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:30:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:30:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.895584 -999.00   +8.70  34.63     92   +7.50 1 3 2 3 1     0    0 1.56 18.79 ZNES. 35.4 34.6 308.3 52.6 10.0 -11.6 9.9 -12.3 9.6 -5.9 9.6 -10.1
2025-12-12T23:30:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:30:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:30:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.895584
2025-12-12T23:30:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:30:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:30:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:30:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:30:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:30:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:29:51', tmtdew=0.96, humidity=93.9, cloud=0.0, wind=40.7, temperature=8.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:29:38.458', atlas_cloud=3, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:28:00')
2025-12-12T23:30:11.277 [DEBUG] [Thread-78538] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:30:11.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:30:11.376 [DEBUG] [Thread-78542] [transport.py] [_log()] starting thread (client mode): 0xf57bf8e0
2025-12-12T23:30:11.376 [DEBUG] [Thread-78542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:30:11.390 [DEBUG] [Thread-78542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:30:11.391 [INFO] [Thread-78542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] client lang: <none>
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] server lang: <none>
2025-12-12T23:30:11.398 [DEBUG] [Thread-78542] [transport.py] [_log()] kex follows: False
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] Compression: none
2025-12-12T23:30:11.399 [DEBUG] [Thread-78542] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:30:11.458 [DEBUG] [Thread-78542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:30:11.459 [DEBUG] [Thread-78542] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:30:11.459 [DEBUG] [Thread-78542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:30:11.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:30:11.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:30:11.514 [DEBUG] [Thread-78542] [transport.py] [_log()] userauth is OK
2025-12-12T23:30:11.514 [DEBUG] [Thread-78542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:30:11.515 [DEBUG] [Thread-78542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:30:11.515 [DEBUG] [Thread-78542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:30:11.515 [DEBUG] [Thread-78542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:30:11.533 [INFO] [Thread-78542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:30:11.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:30:11.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:30:12.377 [DEBUG] [Thread-78542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:30:12.377 [DEBUG] [Thread-78542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:30:12.425 [DEBUG] [Thread-78542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:30:12.425 [DEBUG] [Thread-78542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:30:12.434 [DEBUG] [Thread-78542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:30:12.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:30:12.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:30:12.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:30:12.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:30:12.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:30:12.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:30:12.469 [DEBUG] [Thread-78542] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:30:20.864 [DEBUG] [Thread-78544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:25.916 [DEBUG] [Thread-78545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:40.966 [DEBUG] [Thread-78546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:42.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:30:42.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:30:42.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:30:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 30, 23), 0.97, 93.85, 0.0, 35.23, 8.81, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:30:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:30:23
2025-12-12T23:30:43.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:30:43.507 [DEBUG] [Thread-78547] [transport.py] [_log()] starting thread (client mode): 0xf5742bf0
2025-12-12T23:30:43.507 [DEBUG] [Thread-78547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:30:43.528 [DEBUG] [Thread-78547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:30:43.528 [INFO] [Thread-78547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:30:43.531 [DEBUG] [Thread-78547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:30:43.531 [DEBUG] [Thread-78547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:30:43.531 [DEBUG] [Thread-78547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] client lang: <none>
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] server lang: <none>
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] kex follows: False
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] Compression: none
2025-12-12T23:30:43.532 [DEBUG] [Thread-78547] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:30:43.548 [DEBUG] [Thread-78547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:30:43.548 [DEBUG] [Thread-78547] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:30:43.549 [DEBUG] [Thread-78547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:30:43.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:30:43.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:30:43.550 [DEBUG] [Thread-78547] [transport.py] [_log()] userauth is OK
2025-12-12T23:30:43.550 [DEBUG] [Thread-78547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:30:43.550 [DEBUG] [Thread-78547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:30:43.550 [DEBUG] [Thread-78547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:30:43.550 [DEBUG] [Thread-78547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:30:43.566 [INFO] [Thread-78547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:30:43.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:30:44.389 [DEBUG] [Thread-78547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:30:44.389 [DEBUG] [Thread-78547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:30:44.389 [DEBUG] [Thread-78547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:30:44.431 [DEBUG] [Thread-78547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:30:44.431 [DEBUG] [Thread-78547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:30:44.434 [DEBUG] [Thread-78547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:30:44.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:30:44.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:30:44.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:30:44.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:30:44.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:30:44.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:30:44.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:30:44.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.895932 -999.00   +8.70  43.50     92   +7.50 1 3 2 3 1     0    0 1.59 19.42 ZNES. 38.3 43.5 305.4 54.5 10.1 -5.3 9.8 -7.8 9.6 -3.2 9.9 -6.0
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.895932
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:30:44.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:30:23', tmtdew=0.97, humidity=93.85, cloud=0.0, wind=35.23, temperature=8.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:30:08.525', atlas_cloud=3, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:28:00')
2025-12-12T23:30:44.452 [DEBUG] [Thread-78547] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:30:44.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:30:44.539 [DEBUG] [Thread-78550] [transport.py] [_log()] starting thread (client mode): 0xf57cab30
2025-12-12T23:30:44.539 [DEBUG] [Thread-78550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:30:44.554 [DEBUG] [Thread-78550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:30:44.554 [INFO] [Thread-78550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:30:44.563 [DEBUG] [Thread-78550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] client lang: <none>
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] server lang: <none>
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] kex follows: False
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] Compression: none
2025-12-12T23:30:44.564 [DEBUG] [Thread-78550] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:30:44.621 [DEBUG] [Thread-78550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:30:44.621 [DEBUG] [Thread-78550] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:30:44.621 [DEBUG] [Thread-78550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:30:44.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:30:44.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:30:44.678 [DEBUG] [Thread-78550] [transport.py] [_log()] userauth is OK
2025-12-12T23:30:44.678 [DEBUG] [Thread-78550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:30:44.678 [DEBUG] [Thread-78550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:30:44.678 [DEBUG] [Thread-78550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:30:44.678 [DEBUG] [Thread-78550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:30:44.692 [INFO] [Thread-78550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:30:44.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:30:44.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:30:45.549 [DEBUG] [Thread-78550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:30:45.549 [DEBUG] [Thread-78550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:30:45.596 [DEBUG] [Thread-78550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:30:45.597 [DEBUG] [Thread-78550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:30:45.605 [DEBUG] [Thread-78550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:30:45.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:30:45.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:30:45.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:30:45.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:30:45.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:30:45.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:30:45.637 [DEBUG] [Thread-78550] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:30:50.359 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:50.360 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:30:55.990 [DEBUG] [Thread-78552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:11.025 [DEBUG] [Thread-78553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:15.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:31:15.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:31:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:31:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 30, 55), 0.95, 93.93, 0.0, 35.3, 8.86, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:31:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:30:55
2025-12-12T23:31:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:31:16.616 [DEBUG] [Thread-78554] [transport.py] [_log()] starting thread (client mode): 0xf578be80
2025-12-12T23:31:16.616 [DEBUG] [Thread-78554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:31:16.637 [DEBUG] [Thread-78554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:31:16.637 [INFO] [Thread-78554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:31:16.640 [DEBUG] [Thread-78554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:31:16.640 [DEBUG] [Thread-78554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:31:16.640 [DEBUG] [Thread-78554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] client lang: <none>
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] server lang: <none>
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] kex follows: False
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:31:16.641 [DEBUG] [Thread-78554] [transport.py] [_log()] Compression: none
2025-12-12T23:31:16.642 [DEBUG] [Thread-78554] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:31:16.659 [DEBUG] [Thread-78554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:31:16.660 [DEBUG] [Thread-78554] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:31:16.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:31:16.661 [DEBUG] [Thread-78554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:31:16.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:31:16.663 [DEBUG] [Thread-78554] [transport.py] [_log()] userauth is OK
2025-12-12T23:31:16.663 [DEBUG] [Thread-78554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:31:16.663 [DEBUG] [Thread-78554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:31:16.663 [DEBUG] [Thread-78554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:31:16.663 [DEBUG] [Thread-78554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:31:16.687 [INFO] [Thread-78554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:31:16.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:31:17.317 [DEBUG] [Thread-78554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:31:17.317 [DEBUG] [Thread-78554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:31:17.317 [DEBUG] [Thread-78554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:31:17.359 [DEBUG] [Thread-78554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:31:17.359 [DEBUG] [Thread-78554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:31:17.363 [DEBUG] [Thread-78554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:31:17.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:31:17.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:31:17.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:31:17.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:31:17.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:31:17.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:31:17.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:31:17.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:31:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:31:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.896279 -999.00   +8.70  37.67     92   +7.50 1 3 2 3 1     0    0 1.63 20.67 ZNE.. 40.5 37.7 300.0 57.4 10.0 -4.5 9.9 -4.1 9.5 -3.5 9.9 -2.8
2025-12-12T23:31:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:31:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:31:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.896279
2025-12-12T23:31:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:31:17.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:31:17.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:31:17.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:31:17.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:31:17.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:30:55', tmtdew=0.95, humidity=93.93, cloud=0.0, wind=35.3, temperature=8.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:30:38.506', atlas_cloud=3, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:28:00')
2025-12-12T23:31:17.398 [DEBUG] [Thread-78554] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:31:17.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:31:17.496 [DEBUG] [Thread-78557] [transport.py] [_log()] starting thread (client mode): 0xf572f700
2025-12-12T23:31:17.496 [DEBUG] [Thread-78557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:31:17.512 [DEBUG] [Thread-78557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:31:17.512 [INFO] [Thread-78557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:31:17.520 [DEBUG] [Thread-78557] [transport.py] [_log()] client lang: <none>
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] server lang: <none>
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] kex follows: False
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] Compression: none
2025-12-12T23:31:17.521 [DEBUG] [Thread-78557] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:31:17.578 [DEBUG] [Thread-78557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:31:17.579 [DEBUG] [Thread-78557] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:31:17.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:31:17.580 [DEBUG] [Thread-78557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:31:17.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:31:17.635 [DEBUG] [Thread-78557] [transport.py] [_log()] userauth is OK
2025-12-12T23:31:17.635 [DEBUG] [Thread-78557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:31:17.635 [DEBUG] [Thread-78557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:31:17.635 [DEBUG] [Thread-78557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:31:17.635 [DEBUG] [Thread-78557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:31:17.658 [INFO] [Thread-78557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:31:17.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:31:17.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:31:18.557 [DEBUG] [Thread-78557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:31:18.558 [DEBUG] [Thread-78557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:31:18.605 [DEBUG] [Thread-78557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:31:18.606 [DEBUG] [Thread-78557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:31:18.614 [DEBUG] [Thread-78557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:31:18.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:31:18.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:31:18.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:31:18.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:31:18.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:31:18.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:31:18.650 [DEBUG] [Thread-78557] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:31:20.940 [DEBUG] [Thread-78559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:26.057 [DEBUG] [Thread-78560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:41.101 [DEBUG] [Thread-78561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:48.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:31:48.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:31:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:31:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 31, 27), 0.96, 93.87, 0.0, 37.83, 8.88, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:31:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:31:27
2025-12-12T23:31:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:31:49.626 [DEBUG] [Thread-78562] [transport.py] [_log()] starting thread (client mode): 0xf57bcdf0
2025-12-12T23:31:49.626 [DEBUG] [Thread-78562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:31:49.647 [DEBUG] [Thread-78562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:31:49.648 [INFO] [Thread-78562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:31:49.650 [DEBUG] [Thread-78562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] client lang: <none>
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] server lang: <none>
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] kex follows: False
2025-12-12T23:31:49.651 [DEBUG] [Thread-78562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:31:49.652 [DEBUG] [Thread-78562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:31:49.652 [DEBUG] [Thread-78562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:31:49.652 [DEBUG] [Thread-78562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:31:49.652 [DEBUG] [Thread-78562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:31:49.652 [DEBUG] [Thread-78562] [transport.py] [_log()] Compression: none
2025-12-12T23:31:49.652 [DEBUG] [Thread-78562] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:31:49.673 [DEBUG] [Thread-78562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:31:49.674 [DEBUG] [Thread-78562] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:31:49.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:31:49.675 [DEBUG] [Thread-78562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:31:49.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:31:49.679 [DEBUG] [Thread-78562] [transport.py] [_log()] userauth is OK
2025-12-12T23:31:49.679 [DEBUG] [Thread-78562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:31:49.679 [DEBUG] [Thread-78562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:31:49.679 [DEBUG] [Thread-78562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:31:49.679 [DEBUG] [Thread-78562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:31:49.700 [INFO] [Thread-78562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:31:49.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:31:50.359 [DEBUG] [Thread-78562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:31:50.359 [DEBUG] [Thread-78562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:31:50.359 [DEBUG] [Thread-78562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:31:50.400 [DEBUG] [Thread-78562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:31:50.400 [DEBUG] [Thread-78562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:31:50.403 [DEBUG] [Thread-78562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:31:50.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:31:50.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:31:50.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:31:50.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:31:50.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:31:50.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:31:50.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:31:50.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:31:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:31:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.896626 -999.00   +8.70  36.11     92   +7.60 1 3 2 3 1     0    0 1.63 20.45 ZNE.. 34.0 36.1 308.2 45.8 10.0 -3.6 9.8 -4.9 9.6 -3.5 9.9 -2.8
2025-12-12T23:31:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:31:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:31:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.896626
2025-12-12T23:31:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:31:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:31:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:31:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:31:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:31:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:31:27', tmtdew=0.96, humidity=93.87, cloud=0.0, wind=37.83, temperature=8.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:31:08.486', atlas_cloud=3, atlas_rain=1, zp_data=[1.0337499999999995, 0.5582500000000001, 0.4762500000000003, 0.8300000000000001, nan, nan, nan, nan, 1.5139999999999993, 0.3825000000000003, 0.5777499999999982, 1.0894999999999992, nan, nan, nan, 2.6599999999999993, 1.1677499999999998, 0.4294999999999991, 0.8079999999999989, 1.398249999999999, nan, nan, nan, nan, 1.0629999999999988, 0.7374999999999998, 1.6762499999999996, nan, nan, nan, nan, nan, 0.9277499999999987], zp_timestamp='2025-12-12T21:28:00')
2025-12-12T23:31:50.427 [DEBUG] [Thread-78562] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:31:50.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:31:50.523 [DEBUG] [Thread-78565] [transport.py] [_log()] starting thread (client mode): 0xf57717b0
2025-12-12T23:31:50.523 [DEBUG] [Thread-78565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:31:50.539 [DEBUG] [Thread-78565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:31:50.539 [INFO] [Thread-78565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:31:50.546 [DEBUG] [Thread-78565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:31:50.546 [DEBUG] [Thread-78565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:31:50.546 [DEBUG] [Thread-78565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] client lang: <none>
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] server lang: <none>
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] kex follows: False
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] Compression: none
2025-12-12T23:31:50.547 [DEBUG] [Thread-78565] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:31:50.565 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:50.566 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:31:50.603 [DEBUG] [Thread-78565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:31:50.603 [DEBUG] [Thread-78565] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:31:50.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:31:50.604 [DEBUG] [Thread-78565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:31:50.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:31:50.659 [DEBUG] [Thread-78565] [transport.py] [_log()] userauth is OK
2025-12-12T23:31:50.659 [DEBUG] [Thread-78565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:31:50.659 [DEBUG] [Thread-78565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:31:50.659 [DEBUG] [Thread-78565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:31:50.659 [DEBUG] [Thread-78565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:31:50.678 [INFO] [Thread-78565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:31:50.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:31:50.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:31:51.553 [DEBUG] [Thread-78565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:31:51.553 [DEBUG] [Thread-78565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:31:51.601 [DEBUG] [Thread-78565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:31:51.601 [DEBUG] [Thread-78565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:31:51.609 [DEBUG] [Thread-78565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:31:51.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:31:51.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:31:51.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:31:51.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:31:51.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:31:51.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:31:51.642 [DEBUG] [Thread-78565] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:31:56.130 [DEBUG] [Thread-78567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:11.187 [DEBUG] [Thread-78568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:21.016 [DEBUG] [Thread-78569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:21.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:32:21.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:32:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:32:22.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 31, 59), 0.97, 93.83, 0.0, 36.12, 8.88, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:32:22.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:31:59
2025-12-12T23:32:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:32:22.618 [DEBUG] [Thread-78570] [transport.py] [_log()] starting thread (client mode): 0xf572eb60
2025-12-12T23:32:22.618 [DEBUG] [Thread-78570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:32:22.640 [DEBUG] [Thread-78570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:32:22.640 [INFO] [Thread-78570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:32:22.642 [DEBUG] [Thread-78570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:32:22.642 [DEBUG] [Thread-78570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:32:22.642 [DEBUG] [Thread-78570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] client lang: <none>
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] server lang: <none>
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] kex follows: False
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:32:22.643 [DEBUG] [Thread-78570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:32:22.644 [DEBUG] [Thread-78570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:32:22.644 [DEBUG] [Thread-78570] [transport.py] [_log()] Compression: none
2025-12-12T23:32:22.644 [DEBUG] [Thread-78570] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:32:22.662 [DEBUG] [Thread-78570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:32:22.663 [DEBUG] [Thread-78570] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:32:22.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:32:22.664 [DEBUG] [Thread-78570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:32:22.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:32:22.665 [DEBUG] [Thread-78570] [transport.py] [_log()] userauth is OK
2025-12-12T23:32:22.665 [DEBUG] [Thread-78570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:32:22.666 [DEBUG] [Thread-78570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:32:22.666 [DEBUG] [Thread-78570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:32:22.666 [DEBUG] [Thread-78570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:32:22.683 [INFO] [Thread-78570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:32:22.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:32:23.294 [DEBUG] [Thread-78570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:32:23.294 [DEBUG] [Thread-78570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:32:23.294 [DEBUG] [Thread-78570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:32:23.337 [DEBUG] [Thread-78570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:32:23.337 [DEBUG] [Thread-78570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:32:23.341 [DEBUG] [Thread-78570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:32:23.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:32:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:32:23.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:32:23.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:32:23.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:32:23.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:32:23.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:32:23.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:32:23.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:32:23.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.897321 -999.00   +8.60  46.64     92   +7.50 1 3 2 3 1     0    0 1.64 20.43 ..E.. 46.5 46.6 297.8 58.2 10.1 -4.1 9.9 -4.4 9.5 -3.8 9.9 -3.7
2025-12-12T23:32:23.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:32:23.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:32:23.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.897321
2025-12-12T23:32:23.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:32:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:31:59', tmtdew=0.97, humidity=93.83, cloud=0.0, wind=36.12, temperature=8.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:32:08.534', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:31:00')
2025-12-12T23:32:23.377 [DEBUG] [Thread-78570] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:32:23.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:32:23.480 [DEBUG] [Thread-78573] [transport.py] [_log()] starting thread (client mode): 0xf572e320
2025-12-12T23:32:23.480 [DEBUG] [Thread-78573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:32:23.499 [DEBUG] [Thread-78573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:32:23.500 [INFO] [Thread-78573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:32:23.507 [DEBUG] [Thread-78573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:32:23.508 [DEBUG] [Thread-78573] [transport.py] [_log()] client lang: <none>
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] server lang: <none>
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] kex follows: False
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:32:23.509 [DEBUG] [Thread-78573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:32:23.510 [DEBUG] [Thread-78573] [transport.py] [_log()] Compression: none
2025-12-12T23:32:23.510 [DEBUG] [Thread-78573] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:32:23.566 [DEBUG] [Thread-78573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:32:23.567 [DEBUG] [Thread-78573] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:32:23.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:32:23.568 [DEBUG] [Thread-78573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:32:23.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:32:23.624 [DEBUG] [Thread-78573] [transport.py] [_log()] userauth is OK
2025-12-12T23:32:23.624 [DEBUG] [Thread-78573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:32:23.624 [DEBUG] [Thread-78573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:32:23.624 [DEBUG] [Thread-78573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:32:23.624 [DEBUG] [Thread-78573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:32:23.642 [INFO] [Thread-78573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:32:23.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:32:23.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:32:24.457 [DEBUG] [Thread-78573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:32:24.457 [DEBUG] [Thread-78573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:32:24.505 [DEBUG] [Thread-78573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:32:24.505 [DEBUG] [Thread-78573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:32:24.514 [DEBUG] [Thread-78573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:32:24.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:32:24.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:32:24.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:32:24.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:32:24.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:32:24.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:32:24.551 [DEBUG] [Thread-78573] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:32:26.221 [DEBUG] [Thread-78575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:41.269 [DEBUG] [Thread-78576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:50.769 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:50.770 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:54.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:32:54.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:32:54.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:32:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 32, 31), 0.98, 93.75, 0.0, 36.27, 8.85, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:32:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:32:31
2025-12-12T23:32:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:32:55.545 [DEBUG] [Thread-78577] [transport.py] [_log()] starting thread (client mode): 0xf5788490
2025-12-12T23:32:55.545 [DEBUG] [Thread-78577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:32:55.565 [DEBUG] [Thread-78577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:32:55.565 [INFO] [Thread-78577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] client lang: <none>
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] server lang: <none>
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] kex follows: False
2025-12-12T23:32:55.568 [DEBUG] [Thread-78577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:32:55.569 [DEBUG] [Thread-78577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:32:55.569 [DEBUG] [Thread-78577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:32:55.569 [DEBUG] [Thread-78577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:32:55.569 [DEBUG] [Thread-78577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:32:55.569 [DEBUG] [Thread-78577] [transport.py] [_log()] Compression: none
2025-12-12T23:32:55.569 [DEBUG] [Thread-78577] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:32:55.585 [DEBUG] [Thread-78577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:32:55.586 [DEBUG] [Thread-78577] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:32:55.586 [DEBUG] [Thread-78577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:32:55.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:32:55.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:32:55.588 [DEBUG] [Thread-78577] [transport.py] [_log()] userauth is OK
2025-12-12T23:32:55.588 [DEBUG] [Thread-78577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:32:55.588 [DEBUG] [Thread-78577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:32:55.588 [DEBUG] [Thread-78577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:32:55.588 [DEBUG] [Thread-78577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:32:55.606 [INFO] [Thread-78577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:32:55.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:32:56.233 [DEBUG] [Thread-78577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:32:56.233 [DEBUG] [Thread-78577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:32:56.234 [DEBUG] [Thread-78577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:32:56.274 [DEBUG] [Thread-78577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:32:56.274 [DEBUG] [Thread-78577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:32:56.276 [DEBUG] [Thread-78577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:32:56.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:32:56.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:32:56.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:32:56.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:32:56.295 [DEBUG] [Thread-78580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:32:56.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:32:56.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:32:56.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:32:56.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:32:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:32:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.897668 -999.00   +8.60  29.94     92   +7.50 1 3 1 3 1     0    0 1.64 20.52 ..... 35.5 29.9 307.4 48.4 10.0 -4.7 9.8 -4.0 9.5 -6.8 9.9 -3.2
2025-12-12T23:32:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:32:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:32:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.897668
2025-12-12T23:32:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:32:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:32:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:32:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:32:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:32:56.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:32:31', tmtdew=0.98, humidity=93.75, cloud=0.0, wind=36.27, temperature=8.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:32:38.515', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:31:00')
2025-12-12T23:32:56.300 [DEBUG] [Thread-78577] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:32:56.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:32:56.395 [DEBUG] [Thread-78581] [transport.py] [_log()] starting thread (client mode): 0xf57bc1f0
2025-12-12T23:32:56.395 [DEBUG] [Thread-78581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:32:56.410 [DEBUG] [Thread-78581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:32:56.410 [INFO] [Thread-78581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] client lang: <none>
2025-12-12T23:32:56.418 [DEBUG] [Thread-78581] [transport.py] [_log()] server lang: <none>
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] kex follows: False
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] Compression: none
2025-12-12T23:32:56.419 [DEBUG] [Thread-78581] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:32:56.474 [DEBUG] [Thread-78581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:32:56.475 [DEBUG] [Thread-78581] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:32:56.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:32:56.476 [DEBUG] [Thread-78581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:32:56.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:32:56.531 [DEBUG] [Thread-78581] [transport.py] [_log()] userauth is OK
2025-12-12T23:32:56.531 [DEBUG] [Thread-78581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:32:56.531 [DEBUG] [Thread-78581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:32:56.531 [DEBUG] [Thread-78581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:32:56.531 [DEBUG] [Thread-78581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:32:56.550 [INFO] [Thread-78581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:32:56.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:32:56.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:32:57.349 [DEBUG] [Thread-78581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:32:57.349 [DEBUG] [Thread-78581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:32:57.397 [DEBUG] [Thread-78581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:32:57.397 [DEBUG] [Thread-78581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:32:57.406 [DEBUG] [Thread-78581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:32:57.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:32:57.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:32:57.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:32:57.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:32:57.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:32:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:32:57.440 [DEBUG] [Thread-78581] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:33:11.326 [DEBUG] [Thread-78583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:33:21.087 [DEBUG] [Thread-78584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:33:26.368 [DEBUG] [Thread-78585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:33:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:33:27.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:33:27.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:33:28.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 33, 3), 0.97, 93.82, 0.0, 33.01, 8.86, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:33:28.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:33:03
2025-12-12T23:33:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:33:28.408 [DEBUG] [Thread-78586] [transport.py] [_log()] starting thread (client mode): 0xf572d900
2025-12-12T23:33:28.409 [DEBUG] [Thread-78586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:33:28.430 [DEBUG] [Thread-78586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:33:28.430 [INFO] [Thread-78586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] client lang: <none>
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] server lang: <none>
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] kex follows: False
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:33:28.432 [DEBUG] [Thread-78586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:33:28.433 [DEBUG] [Thread-78586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:33:28.433 [DEBUG] [Thread-78586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:33:28.433 [DEBUG] [Thread-78586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:33:28.433 [DEBUG] [Thread-78586] [transport.py] [_log()] Compression: none
2025-12-12T23:33:28.433 [DEBUG] [Thread-78586] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:33:28.450 [DEBUG] [Thread-78586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:33:28.450 [DEBUG] [Thread-78586] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:33:28.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:33:28.451 [DEBUG] [Thread-78586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:33:28.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:33:28.453 [DEBUG] [Thread-78586] [transport.py] [_log()] userauth is OK
2025-12-12T23:33:28.453 [DEBUG] [Thread-78586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:33:28.454 [DEBUG] [Thread-78586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:33:28.454 [DEBUG] [Thread-78586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:33:28.454 [DEBUG] [Thread-78586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:33:28.477 [INFO] [Thread-78586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:33:28.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:33:29.080 [DEBUG] [Thread-78586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:33:29.080 [DEBUG] [Thread-78586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:33:29.081 [DEBUG] [Thread-78586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:33:29.121 [DEBUG] [Thread-78586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:33:29.121 [DEBUG] [Thread-78586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:33:29.124 [DEBUG] [Thread-78586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:33:29.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:33:29.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:33:29.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:33:29.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:33:29.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:33:29.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:33:29.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:33:29.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:33:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:33:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.898015 -999.00   +8.60  47.17     92   +7.50 1 3 2 3 1     0    0 1.66 20.95 ----- 45.1 47.2 307.4 57.8 10.0 -4.7 9.8 -7.2 9.5 -2.4 9.9 -5.5
2025-12-12T23:33:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:33:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:33:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.898015
2025-12-12T23:33:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:33:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:33:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:33:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:33:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:33:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:33:03', tmtdew=0.97, humidity=93.82, cloud=0.0, wind=33.01, temperature=8.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:33:08.496', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:31:00')
2025-12-12T23:33:29.153 [DEBUG] [Thread-78586] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:33:29.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:33:29.250 [DEBUG] [Thread-78589] [transport.py] [_log()] starting thread (client mode): 0xf57ca080
2025-12-12T23:33:29.250 [DEBUG] [Thread-78589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:33:29.264 [DEBUG] [Thread-78589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:33:29.265 [INFO] [Thread-78589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:33:29.272 [DEBUG] [Thread-78589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:33:29.272 [DEBUG] [Thread-78589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] client lang: <none>
2025-12-12T23:33:29.273 [DEBUG] [Thread-78589] [transport.py] [_log()] server lang: <none>
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] kex follows: False
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] Compression: none
2025-12-12T23:33:29.274 [DEBUG] [Thread-78589] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:33:29.335 [DEBUG] [Thread-78589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:33:29.336 [DEBUG] [Thread-78589] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:33:29.336 [DEBUG] [Thread-78589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:33:29.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:33:29.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:33:29.395 [DEBUG] [Thread-78589] [transport.py] [_log()] userauth is OK
2025-12-12T23:33:29.396 [DEBUG] [Thread-78589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:33:29.396 [DEBUG] [Thread-78589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:33:29.396 [DEBUG] [Thread-78589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:33:29.396 [DEBUG] [Thread-78589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:33:29.415 [INFO] [Thread-78589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:33:29.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:33:29.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:33:30.242 [DEBUG] [Thread-78589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:33:30.242 [DEBUG] [Thread-78589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:33:30.289 [DEBUG] [Thread-78589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:33:30.290 [DEBUG] [Thread-78589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:33:30.298 [DEBUG] [Thread-78589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:33:30.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:33:30.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:33:30.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:33:30.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:33:30.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:33:30.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:33:30.332 [DEBUG] [Thread-78589] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:33:41.396 [DEBUG] [Thread-78591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:33:50.974 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:33:50.975 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:33:56.440 [DEBUG] [Thread-78592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:00.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:34:00.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:34:00.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:34:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 33, 35), 0.92, 93.83, 0.0, 37.93, 8.9, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:34:01.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:33:35
2025-12-12T23:34:01.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:34:01.289 [DEBUG] [Thread-78593] [transport.py] [_log()] starting thread (client mode): 0xf572e1a0
2025-12-12T23:34:01.289 [DEBUG] [Thread-78593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:34:01.311 [DEBUG] [Thread-78593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:34:01.311 [INFO] [Thread-78593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] client lang: <none>
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] server lang: <none>
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] kex follows: False
2025-12-12T23:34:01.313 [DEBUG] [Thread-78593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:34:01.314 [DEBUG] [Thread-78593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:34:01.314 [DEBUG] [Thread-78593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:34:01.314 [DEBUG] [Thread-78593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:34:01.314 [DEBUG] [Thread-78593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:34:01.314 [DEBUG] [Thread-78593] [transport.py] [_log()] Compression: none
2025-12-12T23:34:01.314 [DEBUG] [Thread-78593] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:34:01.330 [DEBUG] [Thread-78593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:34:01.330 [DEBUG] [Thread-78593] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:34:01.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:34:01.331 [DEBUG] [Thread-78593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:34:01.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:34:01.331 [DEBUG] [Thread-78593] [transport.py] [_log()] userauth is OK
2025-12-12T23:34:01.331 [DEBUG] [Thread-78593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:34:01.331 [DEBUG] [Thread-78593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:34:01.332 [DEBUG] [Thread-78593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:34:01.332 [DEBUG] [Thread-78593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:34:01.344 [INFO] [Thread-78593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:34:01.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:34:01.962 [DEBUG] [Thread-78593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:34:01.962 [DEBUG] [Thread-78593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:34:01.962 [DEBUG] [Thread-78593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:34:02.005 [DEBUG] [Thread-78593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:34:02.005 [DEBUG] [Thread-78593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:34:02.009 [DEBUG] [Thread-78593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:34:02.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:34:02.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:34:02.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:34:02.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:34:02.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:34:02.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:34:02.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:34:02.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:34:02.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:34:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.898362 -999.00   +8.60  42.51     93   +7.50 1 3 2 3 1     0    0 1.62 19.09 Z..S. 37.8 42.5 312.2 56.5 10.1 -4.5 9.8 -2.9 9.6 -3.7 9.9 -2.4
2025-12-12T23:34:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:34:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:34:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.898362
2025-12-12T23:34:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:34:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:34:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:34:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:34:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:34:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:33:35', tmtdew=0.92, humidity=93.83, cloud=0.0, wind=37.93, temperature=8.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:33:38.477', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:31:00')
2025-12-12T23:34:02.050 [DEBUG] [Thread-78593] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:34:02.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:34:11.466 [DEBUG] [Thread-78596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:21.162 [DEBUG] [Thread-78597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:26.510 [DEBUG] [Thread-78598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:41.537 [DEBUG] [Thread-78599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:51.179 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:51.180 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:34:56.564 [DEBUG] [Thread-78600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:11.591 [DEBUG] [Thread-78601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:21.239 [DEBUG] [Thread-78602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:26.621 [DEBUG] [Thread-78603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:41.652 [DEBUG] [Thread-78604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:51.385 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:51.386 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:35:56.678 [DEBUG] [Thread-78605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:11.707 [DEBUG] [Thread-78606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:16.618 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T23:36:21.312 [DEBUG] [Thread-78607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:26.735 [DEBUG] [Thread-78608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:41.763 [DEBUG] [Thread-78609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:46.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:36:46.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:36:46.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:36:47.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 36, 15), 0.97, 93.85, 0.0, 31.97, 8.9, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:36:47.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:36:15
2025-12-12T23:36:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:36:47.615 [DEBUG] [Thread-78610] [transport.py] [_log()] starting thread (client mode): 0xf572dde0
2025-12-12T23:36:47.615 [DEBUG] [Thread-78610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:36:47.626 [DEBUG] [Thread-78610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:36:47.626 [INFO] [Thread-78610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] client lang: <none>
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] server lang: <none>
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] kex follows: False
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] Compression: none
2025-12-12T23:36:47.629 [DEBUG] [Thread-78610] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:36:47.643 [DEBUG] [Thread-78610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:36:47.643 [DEBUG] [Thread-78610] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:36:47.643 [DEBUG] [Thread-78610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:36:47.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:36:47.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:36:47.645 [DEBUG] [Thread-78610] [transport.py] [_log()] userauth is OK
2025-12-12T23:36:47.645 [DEBUG] [Thread-78610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:36:47.645 [DEBUG] [Thread-78610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:36:47.645 [DEBUG] [Thread-78610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:36:47.645 [DEBUG] [Thread-78610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:36:47.666 [INFO] [Thread-78610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:36:47.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:36:48.251 [DEBUG] [Thread-78610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:36:48.251 [DEBUG] [Thread-78610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:36:48.251 [DEBUG] [Thread-78610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:36:48.292 [DEBUG] [Thread-78610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:36:48.292 [DEBUG] [Thread-78610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:36:48.294 [DEBUG] [Thread-78610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:36:48.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:36:48.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:36:48.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:36:48.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:36:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:36:48.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:36:48.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.900445 -999.00   +8.60  39.07     92   +7.50 1 3 2 3 1     0    0 1.43 12.13 ----- 37.0 39.1 311.6 47.2 10.0 -3.5 9.8 -3.4 9.5 -3.4 9.9 -2.3
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.900445
2025-12-12T23:36:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:36:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:36:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:36:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:36:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:36:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:36:15', tmtdew=0.97, humidity=93.85, cloud=0.0, wind=31.97, temperature=8.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:36:38.448', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:36:48.306 [DEBUG] [Thread-78610] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:36:48.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:36:48.393 [DEBUG] [Thread-78613] [transport.py] [_log()] starting thread (client mode): 0xf5742170
2025-12-12T23:36:48.394 [DEBUG] [Thread-78613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:36:48.408 [DEBUG] [Thread-78613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:36:48.408 [INFO] [Thread-78613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] client lang: <none>
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] server lang: <none>
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] kex follows: False
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] Compression: none
2025-12-12T23:36:48.416 [DEBUG] [Thread-78613] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:36:48.471 [DEBUG] [Thread-78613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:36:48.471 [DEBUG] [Thread-78613] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:36:48.471 [DEBUG] [Thread-78613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:36:48.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:36:48.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:36:48.528 [DEBUG] [Thread-78613] [transport.py] [_log()] userauth is OK
2025-12-12T23:36:48.528 [DEBUG] [Thread-78613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:36:48.528 [DEBUG] [Thread-78613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:36:48.528 [DEBUG] [Thread-78613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:36:48.528 [DEBUG] [Thread-78613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:36:48.545 [INFO] [Thread-78613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:36:48.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:36:48.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:36:49.375 [DEBUG] [Thread-78613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:36:49.375 [DEBUG] [Thread-78613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:36:49.422 [DEBUG] [Thread-78613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:36:49.422 [DEBUG] [Thread-78613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:36:49.431 [DEBUG] [Thread-78613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:36:49.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:36:49.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:36:49.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:36:49.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:36:49.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:36:49.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:36:49.462 [DEBUG] [Thread-78613] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:36:51.588 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:51.589 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:36:56.792 [DEBUG] [Thread-78615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:11.835 [DEBUG] [Thread-78616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:37:19.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:37:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:37:20.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 36, 47), 0.97, 93.32, 0.0, 35.52, 8.78, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:37:20.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:36:47
2025-12-12T23:37:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:37:20.485 [DEBUG] [Thread-78617] [transport.py] [_log()] starting thread (client mode): 0xf57be4a0
2025-12-12T23:37:20.485 [DEBUG] [Thread-78617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:37:20.506 [DEBUG] [Thread-78617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:37:20.506 [INFO] [Thread-78617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:20.507 [DEBUG] [Thread-78617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] client lang: <none>
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] server lang: <none>
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] kex follows: False
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] Compression: none
2025-12-12T23:37:20.508 [DEBUG] [Thread-78617] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:37:20.515 [DEBUG] [Thread-78617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:37:20.516 [DEBUG] [Thread-78617] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:37:20.516 [DEBUG] [Thread-78617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:37:20.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:37:20.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:37:20.517 [DEBUG] [Thread-78617] [transport.py] [_log()] userauth is OK
2025-12-12T23:37:20.517 [DEBUG] [Thread-78617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:37:20.517 [DEBUG] [Thread-78617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:37:20.517 [DEBUG] [Thread-78617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:37:20.517 [DEBUG] [Thread-78617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:37:20.526 [INFO] [Thread-78617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:37:20.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:37:21.087 [DEBUG] [Thread-78617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:37:21.087 [DEBUG] [Thread-78617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:37:21.087 [DEBUG] [Thread-78617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:37:21.128 [DEBUG] [Thread-78617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:37:21.128 [DEBUG] [Thread-78617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:37:21.130 [DEBUG] [Thread-78617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:37:21.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:37:21.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:37:21.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:37:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:37:21.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:37:21.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:37:21.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.900793 -999.00   +8.70  34.08     93   +7.60 1 3 2 3 1     0    0 1.40 11.40 z.E.. 40.4 34.1 297.4 43.5 10.1 -2.5 9.8 -3.1 9.5 -2.7 9.9 -1.9
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.900793
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:37:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:36:47', tmtdew=0.97, humidity=93.32, cloud=0.0, wind=35.52, temperature=8.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:37:08.515', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:37:21.152 [DEBUG] [Thread-78617] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:37:21.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:37:21.236 [DEBUG] [Thread-78620] [transport.py] [_log()] starting thread (client mode): 0xf57be0b0
2025-12-12T23:37:21.236 [DEBUG] [Thread-78620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:37:21.255 [DEBUG] [Thread-78620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:37:21.255 [INFO] [Thread-78620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] client lang: <none>
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] server lang: <none>
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] kex follows: False
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:37:21.262 [DEBUG] [Thread-78620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:37:21.263 [DEBUG] [Thread-78620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:37:21.263 [DEBUG] [Thread-78620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:37:21.263 [DEBUG] [Thread-78620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:37:21.263 [DEBUG] [Thread-78620] [transport.py] [_log()] Compression: none
2025-12-12T23:37:21.263 [DEBUG] [Thread-78620] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:37:21.318 [DEBUG] [Thread-78620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:37:21.318 [DEBUG] [Thread-78620] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:37:21.318 [DEBUG] [Thread-78620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:37:21.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:37:21.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:37:21.376 [DEBUG] [Thread-78620] [transport.py] [_log()] userauth is OK
2025-12-12T23:37:21.376 [DEBUG] [Thread-78620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:37:21.376 [DEBUG] [Thread-78620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:37:21.376 [DEBUG] [Thread-78620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:37:21.376 [DEBUG] [Thread-78620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:37:21.383 [DEBUG] [Thread-78622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:21.391 [INFO] [Thread-78620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:37:21.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:37:21.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:37:22.215 [DEBUG] [Thread-78620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:37:22.215 [DEBUG] [Thread-78620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:37:22.263 [DEBUG] [Thread-78620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:37:22.263 [DEBUG] [Thread-78620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:37:22.272 [DEBUG] [Thread-78620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:37:22.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:37:22.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:37:22.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:37:22.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:37:22.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:37:22.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:37:22.307 [DEBUG] [Thread-78620] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:37:26.862 [DEBUG] [Thread-78623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:41.907 [DEBUG] [Thread-78624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:51.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:51.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:37:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:37:52.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:37:52.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:37:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 37, 19), 0.97, 93.32, 0.0, 36.01, 8.76, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:37:53.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:37:19
2025-12-12T23:37:53.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:37:53.406 [DEBUG] [Thread-78625] [transport.py] [_log()] starting thread (client mode): 0xf5772980
2025-12-12T23:37:53.406 [DEBUG] [Thread-78625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:37:53.427 [DEBUG] [Thread-78625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:37:53.427 [INFO] [Thread-78625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:37:53.428 [DEBUG] [Thread-78625] [transport.py] [_log()] client lang: <none>
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] server lang: <none>
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] kex follows: False
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] Compression: none
2025-12-12T23:37:53.429 [DEBUG] [Thread-78625] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:37:53.437 [DEBUG] [Thread-78625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:37:53.437 [DEBUG] [Thread-78625] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:37:53.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:37:53.438 [DEBUG] [Thread-78625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:37:53.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:37:53.439 [DEBUG] [Thread-78625] [transport.py] [_log()] userauth is OK
2025-12-12T23:37:53.439 [DEBUG] [Thread-78625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:37:53.439 [DEBUG] [Thread-78625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:37:53.439 [DEBUG] [Thread-78625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:37:53.439 [DEBUG] [Thread-78625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:37:53.456 [INFO] [Thread-78625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:37:53.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:37:54.053 [DEBUG] [Thread-78625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:37:54.053 [DEBUG] [Thread-78625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:37:54.053 [DEBUG] [Thread-78625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:37:54.094 [DEBUG] [Thread-78625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:37:54.094 [DEBUG] [Thread-78625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:37:54.095 [DEBUG] [Thread-78625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:37:54.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:37:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:37:54.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:37:54.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:37:54.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:37:54.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:37:54.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.900793 -999.00   +8.70  34.08     93   +7.60 1 3 2 3 1     0    0 1.40 11.40 z.E.. 40.4 34.1 297.4 43.5 10.1 -2.5 9.8 -3.1 9.5 -2.7 9.9 -1.9
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.900793
2025-12-12T23:37:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:37:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:37:54.106 [DEBUG] [Thread-78625] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:37:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:37:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:37:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:37:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:37:19', tmtdew=0.97, humidity=93.32, cloud=0.0, wind=36.01, temperature=8.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:37:08.515', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:37:54.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:37:54.194 [DEBUG] [Thread-78628] [transport.py] [_log()] starting thread (client mode): 0xf572dc00
2025-12-12T23:37:54.194 [DEBUG] [Thread-78628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:37:54.209 [DEBUG] [Thread-78628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:37:54.209 [INFO] [Thread-78628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:37:54.217 [DEBUG] [Thread-78628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:37:54.217 [DEBUG] [Thread-78628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:37:54.217 [DEBUG] [Thread-78628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:37:54.217 [DEBUG] [Thread-78628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:54.217 [DEBUG] [Thread-78628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:37:54.217 [DEBUG] [Thread-78628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] client lang: <none>
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] server lang: <none>
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] kex follows: False
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] Compression: none
2025-12-12T23:37:54.218 [DEBUG] [Thread-78628] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:37:54.275 [DEBUG] [Thread-78628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:37:54.276 [DEBUG] [Thread-78628] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:37:54.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:37:54.277 [DEBUG] [Thread-78628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:37:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:37:54.332 [DEBUG] [Thread-78628] [transport.py] [_log()] userauth is OK
2025-12-12T23:37:54.332 [DEBUG] [Thread-78628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:37:54.332 [DEBUG] [Thread-78628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:37:54.332 [DEBUG] [Thread-78628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:37:54.332 [DEBUG] [Thread-78628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:37:54.351 [INFO] [Thread-78628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:37:54.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:37:54.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:37:55.162 [DEBUG] [Thread-78628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:37:55.162 [DEBUG] [Thread-78628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:37:55.210 [DEBUG] [Thread-78628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:37:55.210 [DEBUG] [Thread-78628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:37:55.219 [DEBUG] [Thread-78628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:37:55.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:37:55.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:37:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:37:55.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:37:55.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:37:55.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:37:55.256 [DEBUG] [Thread-78628] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:37:56.936 [DEBUG] [Thread-78630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:11.980 [DEBUG] [Thread-78631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:21.456 [DEBUG] [Thread-78632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:25.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:38:25.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:38:25.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:38:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 37, 51), 0.97, 93.32, 0.0, 36.17, 8.85, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:38:26.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:37:51
2025-12-12T23:38:26.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:38:26.290 [DEBUG] [Thread-78633] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-12T23:38:26.290 [DEBUG] [Thread-78633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:38:26.311 [DEBUG] [Thread-78633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:38:26.311 [INFO] [Thread-78633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:38:26.314 [DEBUG] [Thread-78633] [transport.py] [_log()] client lang: <none>
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] server lang: <none>
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] kex follows: False
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] Compression: none
2025-12-12T23:38:26.315 [DEBUG] [Thread-78633] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:38:26.332 [DEBUG] [Thread-78633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:38:26.332 [DEBUG] [Thread-78633] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:38:26.333 [DEBUG] [Thread-78633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:38:26.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:38:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:38:26.335 [DEBUG] [Thread-78633] [transport.py] [_log()] userauth is OK
2025-12-12T23:38:26.335 [DEBUG] [Thread-78633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:38:26.335 [DEBUG] [Thread-78633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:38:26.335 [DEBUG] [Thread-78633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:38:26.335 [DEBUG] [Thread-78633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:38:26.353 [INFO] [Thread-78633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:38:26.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:38:26.963 [DEBUG] [Thread-78633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:38:26.963 [DEBUG] [Thread-78633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:38:26.963 [DEBUG] [Thread-78633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:38:27.004 [DEBUG] [Thread-78633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:38:27.004 [DEBUG] [Thread-78633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:38:27.007 [DEBUG] [Thread-78633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:38:27.011 [DEBUG] [Thread-78635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:27.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:38:27.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:38:27.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:38:27.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:38:27.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:38:27.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:38:27.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.901140 -999.00   +8.70  33.53     92   +7.60 1 3 2 3 1     0    0 1.36 10.13 z.E.. 33.1 33.5 307.6 44.6 10.1 -2.8 9.9 -2.4 9.5 -2.2 9.9 -1.9
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.901140
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:38:27.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:37:51', tmtdew=0.97, humidity=93.32, cloud=0.0, wind=36.17, temperature=8.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:37:38.496', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:38:27.028 [DEBUG] [Thread-78633] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:38:27.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:38:27.113 [DEBUG] [Thread-78637] [transport.py] [_log()] starting thread (client mode): 0xf5743700
2025-12-12T23:38:27.113 [DEBUG] [Thread-78637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:38:27.127 [DEBUG] [Thread-78637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:38:27.127 [INFO] [Thread-78637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:38:27.134 [DEBUG] [Thread-78637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] client lang: <none>
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] server lang: <none>
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] kex follows: False
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] Compression: none
2025-12-12T23:38:27.135 [DEBUG] [Thread-78637] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:38:27.190 [DEBUG] [Thread-78637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:38:27.191 [DEBUG] [Thread-78637] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:38:27.191 [DEBUG] [Thread-78637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:38:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:38:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:38:27.252 [DEBUG] [Thread-78637] [transport.py] [_log()] userauth is OK
2025-12-12T23:38:27.252 [DEBUG] [Thread-78637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:38:27.252 [DEBUG] [Thread-78637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:38:27.252 [DEBUG] [Thread-78637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:38:27.252 [DEBUG] [Thread-78637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:38:27.265 [INFO] [Thread-78637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:38:27.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:38:27.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:38:28.061 [DEBUG] [Thread-78637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:38:28.062 [DEBUG] [Thread-78637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:38:28.109 [DEBUG] [Thread-78637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:38:28.109 [DEBUG] [Thread-78637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:38:28.118 [DEBUG] [Thread-78637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:38:28.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:38:28.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:38:28.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:38:28.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:38:28.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:38:28.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:38:28.150 [DEBUG] [Thread-78637] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:38:42.041 [DEBUG] [Thread-78639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:51.992 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:51.993 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:57.085 [DEBUG] [Thread-78640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:38:58.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:38:58.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:38:58.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:38:58.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 38, 23), 0.96, 93.4, 0.0, 32.29, 8.9, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:38:58.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:38:23
2025-12-12T23:38:58.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:38:59.142 [DEBUG] [Thread-78641] [transport.py] [_log()] starting thread (client mode): 0xf572f700
2025-12-12T23:38:59.142 [DEBUG] [Thread-78641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:38:59.162 [DEBUG] [Thread-78641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:38:59.162 [INFO] [Thread-78641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] client lang: <none>
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] server lang: <none>
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] kex follows: False
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:38:59.166 [DEBUG] [Thread-78641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:38:59.167 [DEBUG] [Thread-78641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:38:59.167 [DEBUG] [Thread-78641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:38:59.167 [DEBUG] [Thread-78641] [transport.py] [_log()] Compression: none
2025-12-12T23:38:59.167 [DEBUG] [Thread-78641] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:38:59.186 [DEBUG] [Thread-78641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:38:59.186 [DEBUG] [Thread-78641] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:38:59.187 [DEBUG] [Thread-78641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:38:59.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:38:59.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:38:59.188 [DEBUG] [Thread-78641] [transport.py] [_log()] userauth is OK
2025-12-12T23:38:59.189 [DEBUG] [Thread-78641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:38:59.189 [DEBUG] [Thread-78641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:38:59.189 [DEBUG] [Thread-78641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:38:59.189 [DEBUG] [Thread-78641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:38:59.213 [INFO] [Thread-78641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:38:59.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:38:59.856 [DEBUG] [Thread-78641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:38:59.857 [DEBUG] [Thread-78641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:38:59.857 [DEBUG] [Thread-78641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:38:59.898 [DEBUG] [Thread-78641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:38:59.898 [DEBUG] [Thread-78641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:38:59.901 [DEBUG] [Thread-78641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:38:59.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:38:59.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:38:59.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:38:59.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:38:59.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:38:59.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:38:59.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:38:59.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:38:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:38:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.901487 -999.00   +8.70  34.70     92   +7.60 1 3 2 3 1     0    0 1.36 9.57 ----- 32.3 34.7 312.6 44.5 10.2 -2.5 9.9 -2.2 9.6 -1.8 10.0 -1.7
2025-12-12T23:38:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:38:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:38:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.901487
2025-12-12T23:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:38:23', tmtdew=0.96, humidity=93.4, cloud=0.0, wind=32.29, temperature=8.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:38:08.477', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:38:59.927 [DEBUG] [Thread-78641] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:39:00.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:39:00.024 [DEBUG] [Thread-78644] [transport.py] [_log()] starting thread (client mode): 0xf5743c10
2025-12-12T23:39:00.024 [DEBUG] [Thread-78644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:39:00.039 [DEBUG] [Thread-78644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:39:00.039 [INFO] [Thread-78644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:39:00.046 [DEBUG] [Thread-78644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:39:00.046 [DEBUG] [Thread-78644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:39:00.046 [DEBUG] [Thread-78644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:39:00.046 [DEBUG] [Thread-78644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:39:00.046 [DEBUG] [Thread-78644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] client lang: <none>
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] server lang: <none>
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] kex follows: False
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] Compression: none
2025-12-12T23:39:00.047 [DEBUG] [Thread-78644] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:39:00.103 [DEBUG] [Thread-78644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:39:00.104 [DEBUG] [Thread-78644] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:39:00.104 [DEBUG] [Thread-78644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:39:00.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:39:00.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:39:00.160 [DEBUG] [Thread-78644] [transport.py] [_log()] userauth is OK
2025-12-12T23:39:00.160 [DEBUG] [Thread-78644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:39:00.160 [DEBUG] [Thread-78644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:39:00.160 [DEBUG] [Thread-78644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:39:00.161 [DEBUG] [Thread-78644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:39:00.179 [INFO] [Thread-78644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:39:00.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:39:00.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:39:01.001 [DEBUG] [Thread-78644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:39:01.001 [DEBUG] [Thread-78644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:39:01.049 [DEBUG] [Thread-78644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:39:01.049 [DEBUG] [Thread-78644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:39:01.058 [DEBUG] [Thread-78644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:39:01.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:39:01.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:39:01.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:39:01.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:39:01.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:39:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:39:01.092 [DEBUG] [Thread-78644] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:39:12.113 [DEBUG] [Thread-78646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:39:21.533 [DEBUG] [Thread-78647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:39:27.166 [DEBUG] [Thread-78648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:39:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:39:31.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:39:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:39:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 39, 27), 0.98, 93.25, 0.0, 38.99, 8.76, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:39:31.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:39:27
2025-12-12T23:39:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:39:32.068 [DEBUG] [Thread-78649] [transport.py] [_log()] starting thread (client mode): 0xf572d690
2025-12-12T23:39:32.069 [DEBUG] [Thread-78649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:39:32.088 [DEBUG] [Thread-78649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:39:32.088 [INFO] [Thread-78649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:39:32.091 [DEBUG] [Thread-78649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] client lang: <none>
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] server lang: <none>
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] kex follows: False
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] Compression: none
2025-12-12T23:39:32.092 [DEBUG] [Thread-78649] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:39:32.111 [DEBUG] [Thread-78649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:39:32.112 [DEBUG] [Thread-78649] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:39:32.112 [DEBUG] [Thread-78649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:39:32.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:39:32.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:39:32.117 [DEBUG] [Thread-78649] [transport.py] [_log()] userauth is OK
2025-12-12T23:39:32.117 [DEBUG] [Thread-78649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:39:32.117 [DEBUG] [Thread-78649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:39:32.117 [DEBUG] [Thread-78649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:39:32.117 [DEBUG] [Thread-78649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:39:32.152 [INFO] [Thread-78649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:39:32.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:39:32.800 [DEBUG] [Thread-78649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:39:32.800 [DEBUG] [Thread-78649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:39:32.800 [DEBUG] [Thread-78649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:39:32.843 [DEBUG] [Thread-78649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:39:32.843 [DEBUG] [Thread-78649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:39:32.847 [DEBUG] [Thread-78649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:39:32.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:39:32.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:39:32.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:39:32.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:39:32.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:39:32.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:39:32.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:39:32.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:39:32.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:39:32.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.901834 -999.00   +8.80  33.94     92   +7.70 1 3 2 3 1     0    0 1.33 8.45 ----- 34.0 33.9 310.0 39.9 10.1 -1.9 9.9 -2.3 9.6 -1.9 9.9 -1.6
2025-12-12T23:39:32.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.901834
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:39:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:39:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:39:27', tmtdew=0.98, humidity=93.25, cloud=0.0, wind=38.99, temperature=8.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:38:38.458', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:39:32.883 [DEBUG] [Thread-78649] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:39:32.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:39:32.980 [DEBUG] [Thread-78652] [transport.py] [_log()] starting thread (client mode): 0xf572d570
2025-12-12T23:39:32.980 [DEBUG] [Thread-78652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:39:32.994 [DEBUG] [Thread-78652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:39:32.994 [INFO] [Thread-78652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:39:33.002 [DEBUG] [Thread-78652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:39:33.002 [DEBUG] [Thread-78652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:39:33.002 [DEBUG] [Thread-78652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:39:33.002 [DEBUG] [Thread-78652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:39:33.002 [DEBUG] [Thread-78652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] client lang: <none>
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] server lang: <none>
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] kex follows: False
2025-12-12T23:39:33.003 [DEBUG] [Thread-78652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:39:33.004 [DEBUG] [Thread-78652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:39:33.004 [DEBUG] [Thread-78652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:39:33.004 [DEBUG] [Thread-78652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:39:33.004 [DEBUG] [Thread-78652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:39:33.004 [DEBUG] [Thread-78652] [transport.py] [_log()] Compression: none
2025-12-12T23:39:33.004 [DEBUG] [Thread-78652] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:39:33.060 [DEBUG] [Thread-78652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:39:33.061 [DEBUG] [Thread-78652] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:39:33.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:39:33.063 [DEBUG] [Thread-78652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:39:33.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:39:33.116 [DEBUG] [Thread-78652] [transport.py] [_log()] userauth is OK
2025-12-12T23:39:33.116 [DEBUG] [Thread-78652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:39:33.116 [DEBUG] [Thread-78652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:39:33.116 [DEBUG] [Thread-78652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:39:33.117 [DEBUG] [Thread-78652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:39:33.138 [INFO] [Thread-78652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:39:33.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:39:33.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:39:33.950 [DEBUG] [Thread-78652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:39:33.951 [DEBUG] [Thread-78652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:39:33.999 [DEBUG] [Thread-78652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:39:33.999 [DEBUG] [Thread-78652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:39:34.009 [DEBUG] [Thread-78652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:39:34.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:39:34.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:39:34.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:39:34.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:39:34.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:39:34.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:39:34.044 [DEBUG] [Thread-78652] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:39:42.194 [DEBUG] [Thread-78654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:39:52.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:39:52.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:39:57.249 [DEBUG] [Thread-78655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:04.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:40:04.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:40:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:40:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 39, 59), 1.03, 93.25, 0.0, 32.2, 8.83, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:40:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:39:59
2025-12-12T23:40:04.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:40:05.048 [DEBUG] [Thread-78656] [transport.py] [_log()] starting thread (client mode): 0xf575c250
2025-12-12T23:40:05.048 [DEBUG] [Thread-78656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:40:05.067 [DEBUG] [Thread-78656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:40:05.067 [INFO] [Thread-78656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:40:05.070 [DEBUG] [Thread-78656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] client lang: <none>
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] server lang: <none>
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] kex follows: False
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] Compression: none
2025-12-12T23:40:05.071 [DEBUG] [Thread-78656] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:40:05.086 [DEBUG] [Thread-78656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:40:05.086 [DEBUG] [Thread-78656] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:40:05.087 [DEBUG] [Thread-78656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:40:05.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:40:05.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:40:05.089 [DEBUG] [Thread-78656] [transport.py] [_log()] userauth is OK
2025-12-12T23:40:05.089 [DEBUG] [Thread-78656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:40:05.089 [DEBUG] [Thread-78656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:40:05.089 [DEBUG] [Thread-78656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:40:05.089 [DEBUG] [Thread-78656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:40:05.107 [INFO] [Thread-78656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:40:05.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:40:06.071 [DEBUG] [Thread-78656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:40:06.071 [DEBUG] [Thread-78656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:40:06.071 [DEBUG] [Thread-78656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:40:06.113 [DEBUG] [Thread-78656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:40:06.113 [DEBUG] [Thread-78656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:40:06.115 [DEBUG] [Thread-78656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:40:06.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:40:06.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:40:06.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:40:06.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:40:06.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:40:06.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:40:06.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:40:06.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:40:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:40:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.902181 -999.00   +8.70  45.06     92   +7.60 1 3 2 3 1     0    0 1.29 7.78 ----- 42.0 45.1 315.6 49.4 10.2 -2.0 10.0 -2.2 9.7 -2.0 10.0 -1.8
2025-12-12T23:40:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:40:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:40:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.902181
2025-12-12T23:40:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:40:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:40:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:40:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:40:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:40:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:39:59', tmtdew=1.03, humidity=93.25, cloud=0.0, wind=32.2, temperature=8.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:39:08.438', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:40:06.136 [DEBUG] [Thread-78656] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:40:06.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:40:06.220 [DEBUG] [Thread-78659] [transport.py] [_log()] starting thread (client mode): 0xf57bc070
2025-12-12T23:40:06.220 [DEBUG] [Thread-78659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:40:06.234 [DEBUG] [Thread-78659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:40:06.234 [INFO] [Thread-78659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:40:06.243 [DEBUG] [Thread-78659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] client lang: <none>
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] server lang: <none>
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] kex follows: False
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] Compression: none
2025-12-12T23:40:06.244 [DEBUG] [Thread-78659] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:40:06.299 [DEBUG] [Thread-78659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:40:06.300 [DEBUG] [Thread-78659] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:40:06.300 [DEBUG] [Thread-78659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:40:06.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:40:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:40:06.356 [DEBUG] [Thread-78659] [transport.py] [_log()] userauth is OK
2025-12-12T23:40:06.356 [DEBUG] [Thread-78659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:40:06.356 [DEBUG] [Thread-78659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:40:06.356 [DEBUG] [Thread-78659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:40:06.356 [DEBUG] [Thread-78659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:40:06.375 [INFO] [Thread-78659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:40:06.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:40:06.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:40:07.213 [DEBUG] [Thread-78659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:40:07.213 [DEBUG] [Thread-78659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:40:07.261 [DEBUG] [Thread-78659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:40:07.261 [DEBUG] [Thread-78659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:40:07.270 [DEBUG] [Thread-78659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:40:07.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:40:07.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:40:07.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:40:07.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:40:07.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:40:07.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:40:07.305 [DEBUG] [Thread-78659] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:40:12.280 [DEBUG] [Thread-78661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:21.605 [DEBUG] [Thread-78662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:27.320 [DEBUG] [Thread-78663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:37.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:40:37.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:40:37.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:40:38.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 40, 31), 1.03, 93.23, 0.0, 31.92, 8.78, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:40:38.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:40:31
2025-12-12T23:40:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:40:38.310 [DEBUG] [Thread-78664] [transport.py] [_log()] starting thread (client mode): 0xfabc5a50
2025-12-12T23:40:38.310 [DEBUG] [Thread-78664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:40:38.331 [DEBUG] [Thread-78664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:40:38.331 [INFO] [Thread-78664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:40:38.334 [DEBUG] [Thread-78664] [transport.py] [_log()] client lang: <none>
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] server lang: <none>
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] kex follows: False
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] Compression: none
2025-12-12T23:40:38.335 [DEBUG] [Thread-78664] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:40:38.344 [DEBUG] [Thread-78664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:40:38.344 [DEBUG] [Thread-78664] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:40:38.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:40:38.345 [DEBUG] [Thread-78664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:40:38.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:40:38.348 [DEBUG] [Thread-78664] [transport.py] [_log()] userauth is OK
2025-12-12T23:40:38.348 [DEBUG] [Thread-78664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:40:38.348 [DEBUG] [Thread-78664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:40:38.348 [DEBUG] [Thread-78664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:40:38.348 [DEBUG] [Thread-78664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:40:38.372 [INFO] [Thread-78664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:40:38.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:40:38.953 [DEBUG] [Thread-78664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:40:38.954 [DEBUG] [Thread-78664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:40:38.954 [DEBUG] [Thread-78664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:40:38.994 [DEBUG] [Thread-78664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:40:38.994 [DEBUG] [Thread-78664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:40:38.997 [DEBUG] [Thread-78664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:40:39.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:40:39.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:40:39.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:40:39.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:40:39.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:40:39.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:40:39.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:40:39.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:40:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:40:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.902876 -999.00   +8.70  37.39     92   +7.60 1 3 2 3 1     0    0 1.29 6.93 ----- 31.0 37.4 310.8 47.8 10.2 -3.1 9.9 -1.9 9.7 -1.8 10.0 -2.3
2025-12-12T23:40:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:40:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:40:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.902876
2025-12-12T23:40:39.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:40:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:40:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:40:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:40:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:40:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:40:31', tmtdew=1.03, humidity=93.23, cloud=0.0, wind=31.92, temperature=8.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:40:08.486', atlas_cloud=3, atlas_rain=1, zp_data=[0.4377499999999994, 0.3882500000000011, 0.6892500000000004, 0.7219999999999995, 1.2400000000000002, 1.6342500000000006, 0.6749999999999989, 0.46724999999999994, 0.3559999999999981, 0.4930000000000003, 1.1372499999999999, nan, nan, nan, 0.6830000000000007, 0.4129999999999985, 0.38175000000000026, 0.6284999999999998, 1.347999999999999, nan, nan, nan, 0.7592500000000006, 0.6307499999999999, 0.5559999999999992, 0.8224999999999998, 1.21875, nan, nan, nan, 2.6240000000000014, 1.7645, 0.5627499999999994], zp_timestamp='2025-12-12T21:34:00')
2025-12-12T23:40:39.025 [DEBUG] [Thread-78664] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:40:39.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:40:39.121 [DEBUG] [Thread-78667] [transport.py] [_log()] starting thread (client mode): 0xf57bf580
2025-12-12T23:40:39.122 [DEBUG] [Thread-78667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:40:39.136 [DEBUG] [Thread-78667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:40:39.137 [INFO] [Thread-78667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:40:39.144 [DEBUG] [Thread-78667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] client lang: <none>
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] server lang: <none>
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] kex follows: False
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] Compression: none
2025-12-12T23:40:39.145 [DEBUG] [Thread-78667] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:40:39.204 [DEBUG] [Thread-78667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:40:39.205 [DEBUG] [Thread-78667] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:40:39.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:40:39.206 [DEBUG] [Thread-78667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:40:39.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:40:39.260 [DEBUG] [Thread-78667] [transport.py] [_log()] userauth is OK
2025-12-12T23:40:39.260 [DEBUG] [Thread-78667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:40:39.261 [DEBUG] [Thread-78667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:40:39.261 [DEBUG] [Thread-78667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:40:39.261 [DEBUG] [Thread-78667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:40:39.279 [INFO] [Thread-78667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:40:39.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:40:39.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:40:40.080 [DEBUG] [Thread-78667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:40:40.081 [DEBUG] [Thread-78667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:40:40.129 [DEBUG] [Thread-78667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:40:40.129 [DEBUG] [Thread-78667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:40:40.138 [DEBUG] [Thread-78667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:40:40.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:40:40.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:40:40.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:40:40.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:40:40.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:40:40.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:40:40.174 [DEBUG] [Thread-78667] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:40:42.348 [DEBUG] [Thread-78669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:52.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:52.406 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:40:57.394 [DEBUG] [Thread-78670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:10.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:41:10.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:41:10.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
2025-12-12T23:41:10.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 41, 4), 1.03, 93.27, 0.0, 32.74, 8.78, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:41:10.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:41:04
2025-12-12T23:41:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:41:11.170 [DEBUG] [Thread-78671] [transport.py] [_log()] starting thread (client mode): 0xf5743ee0
2025-12-12T23:41:11.170 [DEBUG] [Thread-78671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:41:11.192 [DEBUG] [Thread-78671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:41:11.193 [INFO] [Thread-78671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:11.196 [DEBUG] [Thread-78671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] client lang: <none>
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] server lang: <none>
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] kex follows: False
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] Compression: none
2025-12-12T23:41:11.197 [DEBUG] [Thread-78671] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:41:11.215 [DEBUG] [Thread-78671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:41:11.216 [DEBUG] [Thread-78671] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:41:11.216 [DEBUG] [Thread-78671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:41:11.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:41:11.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:41:11.220 [DEBUG] [Thread-78671] [transport.py] [_log()] userauth is OK
2025-12-12T23:41:11.220 [DEBUG] [Thread-78671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:41:11.220 [DEBUG] [Thread-78671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:41:11.220 [DEBUG] [Thread-78671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:41:11.220 [DEBUG] [Thread-78671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:41:11.246 [INFO] [Thread-78671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:41:11.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:41:11.903 [DEBUG] [Thread-78671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:41:11.903 [DEBUG] [Thread-78671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:41:11.903 [DEBUG] [Thread-78671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:41:11.945 [DEBUG] [Thread-78671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:41:11.945 [DEBUG] [Thread-78671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:41:11.950 [DEBUG] [Thread-78671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:41:11.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:41:11.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:41:11.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:41:11.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:41:11.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:41:11.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:41:11.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:41:11.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:41:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:41:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.903223 -999.00   +8.70  47.33     92   +7.50 1 3 2 3 1     0    0 1.31 7.32 ----- 46.2 47.3 325.4 53.2 10.2 -3.5 10.0 -2.1 9.7 -1.8 10.0 -2.4
2025-12-12T23:41:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:41:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:41:11.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.903223
2025-12-12T23:41:11.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:41:11.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:41:11.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:41:11.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:41:11.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:41:11.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:41:04', tmtdew=1.03, humidity=93.27, cloud=0.0, wind=32.74, temperature=8.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:40:38.467', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:40:00')
2025-12-12T23:41:11.985 [DEBUG] [Thread-78671] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:41:12.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:41:12.080 [DEBUG] [Thread-78674] [transport.py] [_log()] starting thread (client mode): 0xf572da80
2025-12-12T23:41:12.080 [DEBUG] [Thread-78674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:41:12.094 [DEBUG] [Thread-78674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:41:12.094 [INFO] [Thread-78674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] client lang: <none>
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] server lang: <none>
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] kex follows: False
2025-12-12T23:41:12.102 [DEBUG] [Thread-78674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:41:12.103 [DEBUG] [Thread-78674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:41:12.103 [DEBUG] [Thread-78674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:41:12.103 [DEBUG] [Thread-78674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:41:12.103 [DEBUG] [Thread-78674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:41:12.103 [DEBUG] [Thread-78674] [transport.py] [_log()] Compression: none
2025-12-12T23:41:12.103 [DEBUG] [Thread-78674] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:41:12.164 [DEBUG] [Thread-78674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:41:12.164 [DEBUG] [Thread-78674] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:41:12.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:41:12.165 [DEBUG] [Thread-78674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:41:12.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:41:12.220 [DEBUG] [Thread-78674] [transport.py] [_log()] userauth is OK
2025-12-12T23:41:12.220 [DEBUG] [Thread-78674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:41:12.220 [DEBUG] [Thread-78674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:41:12.220 [DEBUG] [Thread-78674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:41:12.220 [DEBUG] [Thread-78674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:41:12.240 [INFO] [Thread-78674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:41:12.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:41:12.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:41:12.421 [DEBUG] [Thread-78676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:13.019 [DEBUG] [Thread-78674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:41:13.019 [DEBUG] [Thread-78674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:41:13.068 [DEBUG] [Thread-78674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:41:13.068 [DEBUG] [Thread-78674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:41:13.076 [DEBUG] [Thread-78674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:41:13.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:41:13.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:41: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') -> 00000000
2025-12-12T23:41:13.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:41:13.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:41:13.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:41:13.110 [DEBUG] [Thread-78674] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:41:21.670 [DEBUG] [Thread-78677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:27.462 [DEBUG] [Thread-78678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:42.489 [DEBUG] [Thread-78679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:41:43.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:41:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:41:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 41, 36), 1.08, 93.23, 0.0, 37.92, 8.8, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:41:43.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:41:36
2025-12-12T23:41:44.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:41:44.160 [DEBUG] [Thread-78680] [transport.py] [_log()] starting thread (client mode): 0xf575d450
2025-12-12T23:41:44.160 [DEBUG] [Thread-78680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:41:44.183 [DEBUG] [Thread-78680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:41:44.183 [INFO] [Thread-78680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] client lang: <none>
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] server lang: <none>
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] kex follows: False
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:41:44.187 [DEBUG] [Thread-78680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:41:44.188 [DEBUG] [Thread-78680] [transport.py] [_log()] Compression: none
2025-12-12T23:41:44.188 [DEBUG] [Thread-78680] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:41:44.205 [DEBUG] [Thread-78680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:41:44.205 [DEBUG] [Thread-78680] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:41:44.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:41:44.205 [DEBUG] [Thread-78680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:41:44.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:41:44.209 [DEBUG] [Thread-78680] [transport.py] [_log()] userauth is OK
2025-12-12T23:41:44.209 [DEBUG] [Thread-78680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:41:44.209 [DEBUG] [Thread-78680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:41:44.209 [DEBUG] [Thread-78680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:41:44.209 [DEBUG] [Thread-78680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:41:44.221 [INFO] [Thread-78680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:41:44.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:41:44.895 [DEBUG] [Thread-78680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:41:44.895 [DEBUG] [Thread-78680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:41:44.895 [DEBUG] [Thread-78680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:41:44.938 [DEBUG] [Thread-78680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:41:44.938 [DEBUG] [Thread-78680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:41:44.943 [DEBUG] [Thread-78680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:41:44.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:41:44.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:41:44.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:41:44.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:41:44.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:41:44.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:41:44.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.903570 -999.00   +8.60  51.10     92   +7.40 1 3 2 3 1     0    0 1.27 6.81 ----- 41.7 51.1 311.2 56.4 10.1 -4.5 9.9 -3.4 9.7 -3.4 10.0 -4.6
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.903570
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:41:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:41:36', tmtdew=1.08, humidity=93.23, cloud=0.0, wind=37.92, temperature=8.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:41:08.448', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:40:00')
2025-12-12T23:41:44.980 [DEBUG] [Thread-78680] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:41:45.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:41:45.063 [DEBUG] [Thread-78683] [transport.py] [_log()] starting thread (client mode): 0xf575d000
2025-12-12T23:41:45.063 [DEBUG] [Thread-78683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:41:45.077 [DEBUG] [Thread-78683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:41:45.077 [INFO] [Thread-78683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:41:45.084 [DEBUG] [Thread-78683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:41:45.084 [DEBUG] [Thread-78683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:41:45.084 [DEBUG] [Thread-78683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:41:45.084 [DEBUG] [Thread-78683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:45.084 [DEBUG] [Thread-78683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:41:45.084 [DEBUG] [Thread-78683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] client lang: <none>
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] server lang: <none>
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] kex follows: False
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] Compression: none
2025-12-12T23:41:45.085 [DEBUG] [Thread-78683] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:41:45.142 [DEBUG] [Thread-78683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:41:45.142 [DEBUG] [Thread-78683] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:41:45.143 [DEBUG] [Thread-78683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:41:45.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:41:45.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:41:45.200 [DEBUG] [Thread-78683] [transport.py] [_log()] userauth is OK
2025-12-12T23:41:45.200 [DEBUG] [Thread-78683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:41:45.200 [DEBUG] [Thread-78683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:41:45.200 [DEBUG] [Thread-78683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:41:45.200 [DEBUG] [Thread-78683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:41:45.214 [INFO] [Thread-78683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:41:45.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:41:45.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:41:46.017 [DEBUG] [Thread-78683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:41:46.017 [DEBUG] [Thread-78683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:41:46.065 [DEBUG] [Thread-78683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:41:46.065 [DEBUG] [Thread-78683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:41:46.073 [DEBUG] [Thread-78683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:41:46.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:41:46.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:41:46.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:41:46.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:41:46.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:41:46.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:41:46.105 [DEBUG] [Thread-78683] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:41:52.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:52.611 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:41:57.514 [DEBUG] [Thread-78685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:12.568 [DEBUG] [Thread-78686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:16.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:42:16.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:42: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
2025-12-12T23:42:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 42, 8), 1.09, 93.22, 0.0, 37.11, 8.78, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:42:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:42:08
2025-12-12T23:42:16.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:42:17.105 [DEBUG] [Thread-78687] [transport.py] [_log()] starting thread (client mode): 0xf575d630
2025-12-12T23:42:17.105 [DEBUG] [Thread-78687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:42:17.128 [DEBUG] [Thread-78687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:42:17.129 [INFO] [Thread-78687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:42:17.131 [DEBUG] [Thread-78687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:42:17.131 [DEBUG] [Thread-78687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] client lang: <none>
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] server lang: <none>
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] kex follows: False
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:42:17.132 [DEBUG] [Thread-78687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:42:17.133 [DEBUG] [Thread-78687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:42:17.133 [DEBUG] [Thread-78687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:42:17.133 [DEBUG] [Thread-78687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:42:17.133 [DEBUG] [Thread-78687] [transport.py] [_log()] Compression: none
2025-12-12T23:42:17.133 [DEBUG] [Thread-78687] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:42:17.153 [DEBUG] [Thread-78687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:42:17.153 [DEBUG] [Thread-78687] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:42:17.154 [DEBUG] [Thread-78687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:42:17.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:42:17.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:42:17.156 [DEBUG] [Thread-78687] [transport.py] [_log()] userauth is OK
2025-12-12T23:42:17.156 [DEBUG] [Thread-78687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:42:17.156 [DEBUG] [Thread-78687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:42:17.156 [DEBUG] [Thread-78687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:42:17.156 [DEBUG] [Thread-78687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:42:17.179 [INFO] [Thread-78687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:42:17.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:42:17.817 [DEBUG] [Thread-78687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:42:17.817 [DEBUG] [Thread-78687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:42:17.818 [DEBUG] [Thread-78687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:42:17.858 [DEBUG] [Thread-78687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:42:17.858 [DEBUG] [Thread-78687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:42:17.861 [DEBUG] [Thread-78687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:42:17.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:42:17.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:42:17.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:42:17.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:42:17.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:42:17.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:42:17.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:42:17.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:42:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:42:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.903917 -999.00   +8.60  38.26     92   +7.40 1 3 2 3 1     0    0 1.28 6.61 .N... 41.5 38.3 313.8 53.7 10.1 -5.6 9.9 -3.1 9.7 -3.5 9.9 -5.0
2025-12-12T23:42:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:42:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:42:17.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.903917
2025-12-12T23:42:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:42:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:42:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:42:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:42:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:42:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:42:08', tmtdew=1.09, humidity=93.22, cloud=0.0, wind=37.11, temperature=8.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:41:38.429', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:40:00')
2025-12-12T23:42:17.889 [DEBUG] [Thread-78687] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:42:17.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:42:17.985 [DEBUG] [Thread-78690] [transport.py] [_log()] starting thread (client mode): 0xf575e500
2025-12-12T23:42:17.985 [DEBUG] [Thread-78690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:42:18.000 [DEBUG] [Thread-78690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:42:18.000 [INFO] [Thread-78690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:18.008 [DEBUG] [Thread-78690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] client lang: <none>
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] server lang: <none>
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] kex follows: False
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] Compression: none
2025-12-12T23:42:18.009 [DEBUG] [Thread-78690] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:42:18.067 [DEBUG] [Thread-78690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:42:18.068 [DEBUG] [Thread-78690] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:42:18.068 [DEBUG] [Thread-78690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:42:18.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:42:18.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:42:18.124 [DEBUG] [Thread-78690] [transport.py] [_log()] userauth is OK
2025-12-12T23:42:18.124 [DEBUG] [Thread-78690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:42:18.124 [DEBUG] [Thread-78690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:42:18.124 [DEBUG] [Thread-78690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:42:18.124 [DEBUG] [Thread-78690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:42:18.147 [INFO] [Thread-78690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:42:18.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:42:18.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:42:18.956 [DEBUG] [Thread-78690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:42:18.957 [DEBUG] [Thread-78690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:42:19.007 [DEBUG] [Thread-78690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:42:19.007 [DEBUG] [Thread-78690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:42:19.017 [DEBUG] [Thread-78690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:42:19.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:42:19.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:42:19.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:42:19.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:42:19.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:42:19.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:42:19.051 [DEBUG] [Thread-78690] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:42:21.737 [DEBUG] [Thread-78692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:27.594 [DEBUG] [Thread-78693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:42.637 [DEBUG] [Thread-78694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:42:49.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:42:49.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:42:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 42, 40), 1.08, 92.78, 0.0, 39.52, 8.76, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:42:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:42:40
2025-12-12T23:42:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:42:50.034 [DEBUG] [Thread-78695] [transport.py] [_log()] starting thread (client mode): 0xf81e4fd0
2025-12-12T23:42:50.034 [DEBUG] [Thread-78695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:42:50.056 [DEBUG] [Thread-78695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:42:50.056 [INFO] [Thread-78695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:42:50.058 [DEBUG] [Thread-78695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] client lang: <none>
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] server lang: <none>
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] kex follows: False
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:42:50.059 [DEBUG] [Thread-78695] [transport.py] [_log()] Compression: none
2025-12-12T23:42:50.060 [DEBUG] [Thread-78695] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:42:50.080 [DEBUG] [Thread-78695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:42:50.080 [DEBUG] [Thread-78695] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:42:50.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:42:50.081 [DEBUG] [Thread-78695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:42:50.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:42:50.084 [DEBUG] [Thread-78695] [transport.py] [_log()] userauth is OK
2025-12-12T23:42:50.085 [DEBUG] [Thread-78695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:42:50.085 [DEBUG] [Thread-78695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:42:50.085 [DEBUG] [Thread-78695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:42:50.085 [DEBUG] [Thread-78695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:42:50.110 [INFO] [Thread-78695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:42:50.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:42:50.732 [DEBUG] [Thread-78695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:42:50.732 [DEBUG] [Thread-78695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:42:50.733 [DEBUG] [Thread-78695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:42:50.775 [DEBUG] [Thread-78695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:42:50.775 [DEBUG] [Thread-78695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:42:50.780 [DEBUG] [Thread-78695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:42:50.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:42:50.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:42:50.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:42:50.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:42:50.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:42:50.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:42:50.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:42:50.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:42:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:42:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.904265 -999.00   +8.60  46.52     92   +7.40 1 3 2 3 1     0    0 1.27 6.16 .N... 43.0 46.5 311.6 54.9 10.1 -4.7 9.9 -3.2 9.6 -2.8 9.9 -4.3
2025-12-12T23:42:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:42:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:42:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.904265
2025-12-12T23:42:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:42:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:42:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:42:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:42:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:42:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:42:40', tmtdew=1.08, humidity=92.78, cloud=0.0, wind=39.52, temperature=8.76, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:42:08.496', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:40:00')
2025-12-12T23:42:50.822 [DEBUG] [Thread-78695] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:42:50.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:42:50.916 [DEBUG] [Thread-78698] [transport.py] [_log()] starting thread (client mode): 0xf81e78e0
2025-12-12T23:42:50.916 [DEBUG] [Thread-78698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:42:50.931 [DEBUG] [Thread-78698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:42:50.931 [INFO] [Thread-78698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:42:50.938 [DEBUG] [Thread-78698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:42:50.938 [DEBUG] [Thread-78698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] client lang: <none>
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] server lang: <none>
2025-12-12T23:42:50.939 [DEBUG] [Thread-78698] [transport.py] [_log()] kex follows: False
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] Compression: none
2025-12-12T23:42:50.940 [DEBUG] [Thread-78698] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:42:51.000 [DEBUG] [Thread-78698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:42:51.001 [DEBUG] [Thread-78698] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:42:51.001 [DEBUG] [Thread-78698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:42:51.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:42:51.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:42:51.056 [DEBUG] [Thread-78698] [transport.py] [_log()] userauth is OK
2025-12-12T23:42:51.056 [DEBUG] [Thread-78698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:42:51.056 [DEBUG] [Thread-78698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:42:51.056 [DEBUG] [Thread-78698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:42:51.056 [DEBUG] [Thread-78698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:42:51.075 [INFO] [Thread-78698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:42:51.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:42:51.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:42:51.844 [DEBUG] [Thread-78698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:42:51.844 [DEBUG] [Thread-78698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:42:51.892 [DEBUG] [Thread-78698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:42:51.892 [DEBUG] [Thread-78698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:42:51.901 [DEBUG] [Thread-78698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:42:51.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:42:51.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:42:51.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:42:51.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:42:51.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:42:51.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:42:51.935 [DEBUG] [Thread-78698] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:42:52.812 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:52.813 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:42:57.666 [DEBUG] [Thread-78700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:12.709 [DEBUG] [Thread-78701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:21.811 [DEBUG] [Thread-78702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:43:21.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:43:21.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:43:22.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 43, 12), 1.08, 92.75, 0.0, 36.88, 8.73, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:43:22.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:43:12
2025-12-12T23:43:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:43:22.920 [DEBUG] [Thread-78703] [transport.py] [_log()] starting thread (client mode): 0xfabc5ae0
2025-12-12T23:43:22.920 [DEBUG] [Thread-78703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:43:22.941 [DEBUG] [Thread-78703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:43:22.941 [INFO] [Thread-78703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:43:22.944 [DEBUG] [Thread-78703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] client lang: <none>
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] server lang: <none>
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] kex follows: False
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] Compression: none
2025-12-12T23:43:22.945 [DEBUG] [Thread-78703] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:43:22.961 [DEBUG] [Thread-78703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:43:22.961 [DEBUG] [Thread-78703] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:43:22.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:43:22.962 [DEBUG] [Thread-78703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:43:22.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:43:22.964 [DEBUG] [Thread-78703] [transport.py] [_log()] userauth is OK
2025-12-12T23:43:22.964 [DEBUG] [Thread-78703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:43:22.964 [DEBUG] [Thread-78703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:43:22.964 [DEBUG] [Thread-78703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:43:22.964 [DEBUG] [Thread-78703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:43:22.985 [INFO] [Thread-78703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:43:22.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:43:23.603 [DEBUG] [Thread-78703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:43:23.603 [DEBUG] [Thread-78703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:43:23.604 [DEBUG] [Thread-78703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:43:23.644 [DEBUG] [Thread-78703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:43:23.644 [DEBUG] [Thread-78703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:43:23.647 [DEBUG] [Thread-78703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:43:23.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:43:23.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:43:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:43:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:43:23.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:43:23.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:43:23.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:43:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:43:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:43:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.904612 -999.00   +8.50  45.42     92   +7.30 1 3 2 3 1     0    0 1.27 5.71 .N... 38.4 45.4 316.8 59.6 10.1 -5.6 9.9 -2.7 9.6 -3.0 9.9 -3.2
2025-12-12T23:43:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:43:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:43:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.904612
2025-12-12T23:43:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:43:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:43:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:43:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:43:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:43:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:43:12', tmtdew=1.08, humidity=92.75, cloud=0.0, wind=36.88, temperature=8.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:42:38.477', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:40:00')
2025-12-12T23:43:23.673 [DEBUG] [Thread-78703] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:43:23.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:43:23.770 [DEBUG] [Thread-78706] [transport.py] [_log()] starting thread (client mode): 0xf81e5660
2025-12-12T23:43:23.770 [DEBUG] [Thread-78706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:43:23.786 [DEBUG] [Thread-78706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:43:23.786 [INFO] [Thread-78706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] client lang: <none>
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] server lang: <none>
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] kex follows: False
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] Compression: none
2025-12-12T23:43:23.794 [DEBUG] [Thread-78706] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:43:23.852 [DEBUG] [Thread-78706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:43:23.852 [DEBUG] [Thread-78706] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:43:23.853 [DEBUG] [Thread-78706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:43:23.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:43:23.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:43:23.908 [DEBUG] [Thread-78706] [transport.py] [_log()] userauth is OK
2025-12-12T23:43:23.908 [DEBUG] [Thread-78706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:43:23.908 [DEBUG] [Thread-78706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:43:23.908 [DEBUG] [Thread-78706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:43:23.908 [DEBUG] [Thread-78706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:43:23.927 [INFO] [Thread-78706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:43:23.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:43:23.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:43:24.774 [DEBUG] [Thread-78706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:43:24.774 [DEBUG] [Thread-78706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:43:24.822 [DEBUG] [Thread-78706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:43:24.822 [DEBUG] [Thread-78706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:43:24.831 [DEBUG] [Thread-78706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:43:24.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:43:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:43:24.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:43:24.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:43:24.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:43:24.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:43:24.866 [DEBUG] [Thread-78706] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:43:27.739 [DEBUG] [Thread-78708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:42.782 [DEBUG] [Thread-78709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:53.018 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:53.019 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:43:54.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:43:54.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:43:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:43:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 43, 44), 1.13, 92.78, 0.0, 36.58, 8.7, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:43:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:43:44
2025-12-12T23:43:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:43:55.864 [DEBUG] [Thread-78710] [transport.py] [_log()] starting thread (client mode): 0xf575e770
2025-12-12T23:43:55.864 [DEBUG] [Thread-78710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:43:55.884 [DEBUG] [Thread-78710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:43:55.884 [INFO] [Thread-78710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:43:55.887 [DEBUG] [Thread-78710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] client lang: <none>
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] server lang: <none>
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] kex follows: False
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:43:55.888 [DEBUG] [Thread-78710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:43:55.889 [DEBUG] [Thread-78710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:43:55.889 [DEBUG] [Thread-78710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:43:55.889 [DEBUG] [Thread-78710] [transport.py] [_log()] Compression: none
2025-12-12T23:43:55.889 [DEBUG] [Thread-78710] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:43:55.908 [DEBUG] [Thread-78710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:43:55.909 [DEBUG] [Thread-78710] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:43:55.909 [DEBUG] [Thread-78710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:43:55.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:43:55.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:43:55.912 [DEBUG] [Thread-78710] [transport.py] [_log()] userauth is OK
2025-12-12T23:43:55.912 [DEBUG] [Thread-78710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:43:55.912 [DEBUG] [Thread-78710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:43:55.912 [DEBUG] [Thread-78710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:43:55.912 [DEBUG] [Thread-78710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:43:55.948 [INFO] [Thread-78710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:43:55.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:43:56.568 [DEBUG] [Thread-78710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:43:56.568 [DEBUG] [Thread-78710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:43:56.569 [DEBUG] [Thread-78710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:43:56.610 [DEBUG] [Thread-78710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:43:56.610 [DEBUG] [Thread-78710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:43:56.615 [DEBUG] [Thread-78710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:43:56.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:43:56.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:43:56.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:43:56.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:43:56.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:43:56.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:43:56.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:43:56.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:43:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:43:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.904959 -999.00   +8.50  55.32     91   +7.30 1 3 2 3 1     0    0 1.29 5.86 .N... 48.4 55.3 310.8 65.6 10.1 -7.0 9.8 -4.9 9.6 -4.7 9.9 -5.7
2025-12-12T23:43:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:43:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:43:56.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.904959
2025-12-12T23:43:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:43:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:43:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:43:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:43:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:43:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:43:44', tmtdew=1.13, humidity=92.78, cloud=0.0, wind=36.58, temperature=8.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:43:08.458', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:40:00')
2025-12-12T23:43:56.649 [DEBUG] [Thread-78710] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:43:56.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:43:56.747 [DEBUG] [Thread-78713] [transport.py] [_log()] starting thread (client mode): 0xf57bd720
2025-12-12T23:43:56.747 [DEBUG] [Thread-78713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:43:56.761 [DEBUG] [Thread-78713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:43:56.761 [INFO] [Thread-78713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] client lang: <none>
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] server lang: <none>
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] kex follows: False
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:43:56.769 [DEBUG] [Thread-78713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:43:56.771 [DEBUG] [Thread-78713] [transport.py] [_log()] Compression: none
2025-12-12T23:43:56.771 [DEBUG] [Thread-78713] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:43:56.827 [DEBUG] [Thread-78713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:43:56.827 [DEBUG] [Thread-78713] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:43:56.828 [DEBUG] [Thread-78713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:43:56.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:43:56.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:43:56.884 [DEBUG] [Thread-78713] [transport.py] [_log()] userauth is OK
2025-12-12T23:43:56.884 [DEBUG] [Thread-78713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:43:56.884 [DEBUG] [Thread-78713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:43:56.884 [DEBUG] [Thread-78713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:43:56.884 [DEBUG] [Thread-78713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:43:56.902 [INFO] [Thread-78713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:43:56.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:43:56.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:43:57.703 [DEBUG] [Thread-78713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:43:57.703 [DEBUG] [Thread-78713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:43:57.752 [DEBUG] [Thread-78713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:43:57.752 [DEBUG] [Thread-78713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:43:57.761 [DEBUG] [Thread-78713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:43:57.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:43:57.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:43:57.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:43:57.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:43:57.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:43:57.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:43:57.796 [DEBUG] [Thread-78713] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:43:57.809 [DEBUG] [Thread-78715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:12.854 [DEBUG] [Thread-78716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:21.888 [DEBUG] [Thread-78717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:44:27.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:44:27.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:44:27.882 [DEBUG] [Thread-78718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:28.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 44, 16), 1.12, 92.8, 0.0, 39.34, 8.73, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:44:28.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:44:16
2025-12-12T23:44:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:44:28.779 [DEBUG] [Thread-78719] [transport.py] [_log()] starting thread (client mode): 0xf57beec0
2025-12-12T23:44:28.779 [DEBUG] [Thread-78719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:44:28.800 [DEBUG] [Thread-78719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:44:28.800 [INFO] [Thread-78719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] client lang: <none>
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] server lang: <none>
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] kex follows: False
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:44:28.803 [DEBUG] [Thread-78719] [transport.py] [_log()] Compression: none
2025-12-12T23:44:28.804 [DEBUG] [Thread-78719] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:44:28.823 [DEBUG] [Thread-78719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:44:28.823 [DEBUG] [Thread-78719] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:44:28.824 [DEBUG] [Thread-78719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:44:28.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:44:28.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:44:28.826 [DEBUG] [Thread-78719] [transport.py] [_log()] userauth is OK
2025-12-12T23:44:28.826 [DEBUG] [Thread-78719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:44:28.826 [DEBUG] [Thread-78719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:44:28.827 [DEBUG] [Thread-78719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:44:28.827 [DEBUG] [Thread-78719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:44:28.851 [INFO] [Thread-78719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:44:28.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:44:29.435 [DEBUG] [Thread-78719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:44:29.435 [DEBUG] [Thread-78719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:44:29.435 [DEBUG] [Thread-78719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:44:29.476 [DEBUG] [Thread-78719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:44:29.476 [DEBUG] [Thread-78719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:44:29.478 [DEBUG] [Thread-78719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:44:29.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:44:29.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:44:29.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:44:29.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:44:29.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:44:29.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:44:29.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:44:29.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:44:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:44:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.905654 -999.00   +8.60  40.62     92   +7.40 1 3 2 3 1     0    0 1.31 6.18 ZNE.W 40.0 40.6 313.6 54.2 10.0 -7.8 9.8 -7.2 9.5 -6.0 9.9 -6.3
2025-12-12T23:44:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:44:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:44:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.905654
2025-12-12T23:44:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:44:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:44:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:44:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:44:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:44:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:44:16', tmtdew=1.12, humidity=92.8, cloud=0.0, wind=39.34, temperature=8.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:44:08.506', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:43:00')
2025-12-12T23:44:29.505 [DEBUG] [Thread-78719] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:44:29.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:44:29.601 [DEBUG] [Thread-78722] [transport.py] [_log()] starting thread (client mode): 0xf57be950
2025-12-12T23:44:29.601 [DEBUG] [Thread-78722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:44:29.615 [DEBUG] [Thread-78722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:44:29.615 [INFO] [Thread-78722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] client lang: <none>
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] server lang: <none>
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] kex follows: False
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] Compression: none
2025-12-12T23:44:29.623 [DEBUG] [Thread-78722] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:44:29.679 [DEBUG] [Thread-78722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:44:29.680 [DEBUG] [Thread-78722] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:44:29.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:44:29.681 [DEBUG] [Thread-78722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:44:29.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:44:29.735 [DEBUG] [Thread-78722] [transport.py] [_log()] userauth is OK
2025-12-12T23:44:29.736 [DEBUG] [Thread-78722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:44:29.736 [DEBUG] [Thread-78722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:44:29.736 [DEBUG] [Thread-78722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:44:29.736 [DEBUG] [Thread-78722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:44:29.755 [INFO] [Thread-78722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:44:29.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:44:29.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:44:30.571 [DEBUG] [Thread-78722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:44:30.572 [DEBUG] [Thread-78722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:44:30.620 [DEBUG] [Thread-78722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:44:30.620 [DEBUG] [Thread-78722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:44:30.629 [DEBUG] [Thread-78722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:44:30.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:44:30.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:44:30.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:44:30.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:44:30.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:44:30.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:44:30.664 [DEBUG] [Thread-78722] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:44:42.912 [DEBUG] [Thread-78724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:53.221 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:53.223 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:44:57.956 [DEBUG] [Thread-78725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:00.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:45:00.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:45:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:45:01.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 44, 48), 1.13, 92.78, 0.0, 37.03, 8.7, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:45:01.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:44:48
2025-12-12T23:45:01.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:45:01.697 [DEBUG] [Thread-78726] [transport.py] [_log()] starting thread (client mode): 0xfabc5780
2025-12-12T23:45:01.698 [DEBUG] [Thread-78726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:45:01.718 [DEBUG] [Thread-78726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:45:01.718 [INFO] [Thread-78726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] client lang: <none>
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] server lang: <none>
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] kex follows: False
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:45:01.721 [DEBUG] [Thread-78726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:45:01.722 [DEBUG] [Thread-78726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:45:01.722 [DEBUG] [Thread-78726] [transport.py] [_log()] Compression: none
2025-12-12T23:45:01.722 [DEBUG] [Thread-78726] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:45:01.742 [DEBUG] [Thread-78726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:45:01.742 [DEBUG] [Thread-78726] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:45:01.742 [DEBUG] [Thread-78726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:45:01.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:45:01.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:45:01.743 [DEBUG] [Thread-78726] [transport.py] [_log()] userauth is OK
2025-12-12T23:45:01.743 [DEBUG] [Thread-78726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:45:01.743 [DEBUG] [Thread-78726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:45:01.743 [DEBUG] [Thread-78726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:45:01.743 [DEBUG] [Thread-78726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:45:01.770 [INFO] [Thread-78726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:45:01.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:45:02.373 [DEBUG] [Thread-78726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:45:02.373 [DEBUG] [Thread-78726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:45:02.373 [DEBUG] [Thread-78726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:45:02.415 [DEBUG] [Thread-78726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:45:02.415 [DEBUG] [Thread-78726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:45:02.417 [DEBUG] [Thread-78726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:45:02.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:45:02.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:45:02.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:45:02.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:45:02.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:45:02.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:45:02.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.906001 -999.00   +8.50  49.60     92   +7.40 1 3 2 3 1     0    0 1.29 5.78 ZNE.W 47.9 49.6 313.2 55.4 9.9 -3.8 9.8 -4.6 9.5 -3.7 9.8 -4.2
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.906001
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:45:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:44:48', tmtdew=1.13, humidity=92.78, cloud=0.0, wind=37.03, temperature=8.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:44:38.486', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:43:00')
2025-12-12T23:45:02.427 [DEBUG] [Thread-78726] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:45:02.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:45:02.514 [DEBUG] [Thread-78729] [transport.py] [_log()] starting thread (client mode): 0xf57c8130
2025-12-12T23:45:02.514 [DEBUG] [Thread-78729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:45:02.529 [DEBUG] [Thread-78729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:45:02.529 [INFO] [Thread-78729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:45:02.536 [DEBUG] [Thread-78729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:45:02.536 [DEBUG] [Thread-78729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:45:02.536 [DEBUG] [Thread-78729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:45:02.536 [DEBUG] [Thread-78729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] client lang: <none>
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] server lang: <none>
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] kex follows: False
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] Compression: none
2025-12-12T23:45:02.537 [DEBUG] [Thread-78729] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:45:02.595 [DEBUG] [Thread-78729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:45:02.595 [DEBUG] [Thread-78729] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:45:02.595 [DEBUG] [Thread-78729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:45:02.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:45:02.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:45:02.651 [DEBUG] [Thread-78729] [transport.py] [_log()] userauth is OK
2025-12-12T23:45:02.651 [DEBUG] [Thread-78729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:45:02.651 [DEBUG] [Thread-78729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:45:02.651 [DEBUG] [Thread-78729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:45:02.651 [DEBUG] [Thread-78729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:45:02.665 [INFO] [Thread-78729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:45:02.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:45:02.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:45:03.514 [DEBUG] [Thread-78729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:45:03.514 [DEBUG] [Thread-78729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:45:03.562 [DEBUG] [Thread-78729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:45:03.563 [DEBUG] [Thread-78729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:45:03.571 [DEBUG] [Thread-78729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:45:03.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:45:03.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:45:03.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:45:03.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:45:03.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:45:03.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:45:03.602 [DEBUG] [Thread-78729] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:45:12.982 [DEBUG] [Thread-78731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:21.954 [DEBUG] [Thread-78732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:28.035 [DEBUG] [Thread-78733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:45:33.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:45:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:45:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 45, 20), 1.12, 92.8, 0.0, 43.17, 8.73, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:45:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:45:20
2025-12-12T23:45:34.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:45:34.585 [DEBUG] [Thread-78734] [transport.py] [_log()] starting thread (client mode): 0xf81e79d0
2025-12-12T23:45:34.586 [DEBUG] [Thread-78734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:45:34.606 [DEBUG] [Thread-78734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:45:34.606 [INFO] [Thread-78734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:45:34.609 [DEBUG] [Thread-78734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] client lang: <none>
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] server lang: <none>
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] kex follows: False
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] Compression: none
2025-12-12T23:45:34.610 [DEBUG] [Thread-78734] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:45:34.631 [DEBUG] [Thread-78734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:45:34.631 [DEBUG] [Thread-78734] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:45:34.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:45:34.632 [DEBUG] [Thread-78734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:45:34.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:45:34.634 [DEBUG] [Thread-78734] [transport.py] [_log()] userauth is OK
2025-12-12T23:45:34.634 [DEBUG] [Thread-78734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:45:34.634 [DEBUG] [Thread-78734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:45:34.634 [DEBUG] [Thread-78734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:45:34.634 [DEBUG] [Thread-78734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:45:34.657 [INFO] [Thread-78734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:45:34.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:45:35.264 [DEBUG] [Thread-78734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:45:35.264 [DEBUG] [Thread-78734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:45:35.265 [DEBUG] [Thread-78734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:45:35.306 [DEBUG] [Thread-78734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:45:35.306 [DEBUG] [Thread-78734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:45:35.309 [DEBUG] [Thread-78734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:45:35.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:45:35.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:45:35.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:45:35.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:45:35.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:45:35.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:45:35.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:45:35.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:45:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:45:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.906348 -999.00   +8.60  44.83     92   +7.30 1 3 2 3 1     0    0 1.30 5.90 ZNE.. 52.0 44.8 312.4 53.2 10.0 -3.7 9.8 -2.8 9.5 -2.8 9.8 -3.2
2025-12-12T23:45:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:45:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:45:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.906348
2025-12-12T23:45:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:45:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:45:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:45:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:45:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:45:35.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:45:20', tmtdew=1.12, humidity=92.8, cloud=0.0, wind=43.17, temperature=8.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:45:08.467', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:43:00')
2025-12-12T23:45:35.334 [DEBUG] [Thread-78734] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:45:35.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:45:35.433 [DEBUG] [Thread-78737] [transport.py] [_log()] starting thread (client mode): 0xf81e61d0
2025-12-12T23:45:35.433 [DEBUG] [Thread-78737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:45:35.448 [DEBUG] [Thread-78737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:45:35.448 [INFO] [Thread-78737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:35.456 [DEBUG] [Thread-78737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] client lang: <none>
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] server lang: <none>
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] kex follows: False
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] Compression: none
2025-12-12T23:45:35.457 [DEBUG] [Thread-78737] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:45:35.515 [DEBUG] [Thread-78737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:45:35.516 [DEBUG] [Thread-78737] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:45:35.516 [DEBUG] [Thread-78737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:45:35.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:45:35.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:45:35.571 [DEBUG] [Thread-78737] [transport.py] [_log()] userauth is OK
2025-12-12T23:45:35.571 [DEBUG] [Thread-78737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:45:35.571 [DEBUG] [Thread-78737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:45:35.571 [DEBUG] [Thread-78737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:45:35.572 [DEBUG] [Thread-78737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:45:35.590 [INFO] [Thread-78737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:45:35.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:45:35.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:45:36.377 [DEBUG] [Thread-78737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:45:36.378 [DEBUG] [Thread-78737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:45:36.426 [DEBUG] [Thread-78737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:45:36.426 [DEBUG] [Thread-78737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:45:36.434 [DEBUG] [Thread-78737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:45:36.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:45:36.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:45:36.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:45:36.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:45:36.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:45:36.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:45:36.469 [DEBUG] [Thread-78737] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:45:43.061 [DEBUG] [Thread-78739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:53.428 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:53.428 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:45:58.113 [DEBUG] [Thread-78740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:46:06.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:46:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:46:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 45, 52), 1.14, 92.69, 0.0, 48.31, 8.72, 2, 2, 0, 2, 1, 0),)
2025-12-12T23:46:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:45:52
2025-12-12T23:46:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:46:07.454 [DEBUG] [Thread-78741] [transport.py] [_log()] starting thread (client mode): 0xf5772b30
2025-12-12T23:46:07.454 [DEBUG] [Thread-78741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:46:07.476 [DEBUG] [Thread-78741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:46:07.476 [INFO] [Thread-78741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] client lang: <none>
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] server lang: <none>
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] kex follows: False
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:46:07.479 [DEBUG] [Thread-78741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:46:07.480 [DEBUG] [Thread-78741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:46:07.480 [DEBUG] [Thread-78741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:46:07.480 [DEBUG] [Thread-78741] [transport.py] [_log()] Compression: none
2025-12-12T23:46:07.480 [DEBUG] [Thread-78741] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:46:07.501 [DEBUG] [Thread-78741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:46:07.502 [DEBUG] [Thread-78741] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:46:07.502 [DEBUG] [Thread-78741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:46:07.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:46:07.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:46:07.507 [DEBUG] [Thread-78741] [transport.py] [_log()] userauth is OK
2025-12-12T23:46:07.507 [DEBUG] [Thread-78741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:46:07.507 [DEBUG] [Thread-78741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:46:07.507 [DEBUG] [Thread-78741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:46:07.507 [DEBUG] [Thread-78741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:46:07.532 [INFO] [Thread-78741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:46:07.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:46:08.202 [DEBUG] [Thread-78741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:46:08.203 [DEBUG] [Thread-78741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:46:08.203 [DEBUG] [Thread-78741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:46:08.244 [DEBUG] [Thread-78741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:46:08.244 [DEBUG] [Thread-78741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:46:08.247 [DEBUG] [Thread-78741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:46:08.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:46:08.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:46:08.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:46:08.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:46:08.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:46:08.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:46:08.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:46:08.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:46:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:46:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.906695 -999.00   +8.50  50.79     91   +7.30 1 3 2 3 1     0    0 1.28 5.60 .NE.. 48.7 50.8 309.0 62.1 9.9 -17.3 9.8 -5.0 9.6 -5.8 9.8 -10.1
2025-12-12T23:46:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:46:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:46:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.906695
2025-12-12T23:46:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:46:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:46:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:46:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:46:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:46:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:45:52', tmtdew=1.14, humidity=92.69, cloud=0.0, wind=48.31, temperature=8.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:45:38.448', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:43:00')
2025-12-12T23:46:08.272 [DEBUG] [Thread-78741] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:46:08.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:46:08.373 [DEBUG] [Thread-78744] [transport.py] [_log()] starting thread (client mode): 0xf5770f10
2025-12-12T23:46:08.373 [DEBUG] [Thread-78744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:46:08.387 [DEBUG] [Thread-78744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:46:08.387 [INFO] [Thread-78744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:46:08.395 [DEBUG] [Thread-78744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:46:08.395 [DEBUG] [Thread-78744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:46:08.395 [DEBUG] [Thread-78744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:46:08.395 [DEBUG] [Thread-78744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:08.395 [DEBUG] [Thread-78744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] client lang: <none>
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] server lang: <none>
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] kex follows: False
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] Compression: none
2025-12-12T23:46:08.396 [DEBUG] [Thread-78744] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:46:08.454 [DEBUG] [Thread-78744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:46:08.455 [DEBUG] [Thread-78744] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:46:08.456 [DEBUG] [Thread-78744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:46:08.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:46:08.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:46:08.511 [DEBUG] [Thread-78744] [transport.py] [_log()] userauth is OK
2025-12-12T23:46:08.511 [DEBUG] [Thread-78744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:46:08.512 [DEBUG] [Thread-78744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:46:08.512 [DEBUG] [Thread-78744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:46:08.512 [DEBUG] [Thread-78744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:46:08.530 [INFO] [Thread-78744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:46:08.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:46:08.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:46:09.341 [DEBUG] [Thread-78744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:46:09.341 [DEBUG] [Thread-78744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:46:09.389 [DEBUG] [Thread-78744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:46:09.389 [DEBUG] [Thread-78744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:46:09.397 [DEBUG] [Thread-78744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:46:09.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:46:09.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:46:09.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:46:09.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:46:09.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:46:09.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:46:09.432 [DEBUG] [Thread-78744] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:46:13.142 [DEBUG] [Thread-78746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:22.029 [DEBUG] [Thread-78747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:28.182 [DEBUG] [Thread-78748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:46:39.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:46:39.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:46:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 46, 24), 1.13, 92.74, 0.0, 46.7, 8.77, 2, 2, 0, 2, 1, 0),)
2025-12-12T23:46:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:46:24
2025-12-12T23:46:40.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:46:40.398 [DEBUG] [Thread-78749] [transport.py] [_log()] starting thread (client mode): 0xf81e5a20
2025-12-12T23:46:40.398 [DEBUG] [Thread-78749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:46:40.420 [DEBUG] [Thread-78749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:46:40.420 [INFO] [Thread-78749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:46:40.423 [DEBUG] [Thread-78749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:46:40.423 [DEBUG] [Thread-78749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] client lang: <none>
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] server lang: <none>
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] kex follows: False
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:46:40.424 [DEBUG] [Thread-78749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:46:40.425 [DEBUG] [Thread-78749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:46:40.425 [DEBUG] [Thread-78749] [transport.py] [_log()] Compression: none
2025-12-12T23:46:40.425 [DEBUG] [Thread-78749] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:46:40.433 [DEBUG] [Thread-78749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:46:40.434 [DEBUG] [Thread-78749] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:46:40.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:46:40.435 [DEBUG] [Thread-78749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:46:40.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:46:40.437 [DEBUG] [Thread-78749] [transport.py] [_log()] userauth is OK
2025-12-12T23:46:40.437 [DEBUG] [Thread-78749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:46:40.437 [DEBUG] [Thread-78749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:46:40.437 [DEBUG] [Thread-78749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:46:40.437 [DEBUG] [Thread-78749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:46:40.474 [INFO] [Thread-78749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:46:40.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:46:41.109 [DEBUG] [Thread-78749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:46:41.109 [DEBUG] [Thread-78749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:46:41.109 [DEBUG] [Thread-78749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:46:41.150 [DEBUG] [Thread-78749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:46:41.150 [DEBUG] [Thread-78749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:46:41.153 [DEBUG] [Thread-78749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:46:41.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:46:41.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:46:41.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:46:41.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:46:41.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:46:41.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:46:41.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:46:41.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:46:41.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:46:41.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.907042 -999.00   +8.60  37.93     92   +7.30 1 3 2 3 1     0    0 1.29 5.47 .NE.. 33.9 37.9 314.2 48.0 9.9 -6.1 9.7 -8.7 9.4 -6.2 9.8 -6.3
2025-12-12T23:46:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:46:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:46:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.907042
2025-12-12T23:46:41.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:46:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:46:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:46:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:46:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:46:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:46:24', tmtdew=1.13, humidity=92.74, cloud=0.0, wind=46.7, temperature=8.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:46:08.429', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 2.0835, 2.3049999999999997, nan, nan, nan, nan, nan, nan, 1.2830000000000004, 0.6857500000000014, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:43:00')
2025-12-12T23:46:41.180 [DEBUG] [Thread-78749] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:46:41.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:46:41.278 [DEBUG] [Thread-78752] [transport.py] [_log()] starting thread (client mode): 0xf81e5450
2025-12-12T23:46:41.278 [DEBUG] [Thread-78752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:46:41.294 [DEBUG] [Thread-78752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:46:41.294 [INFO] [Thread-78752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:46:41.301 [DEBUG] [Thread-78752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:46:41.301 [DEBUG] [Thread-78752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] client lang: <none>
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] server lang: <none>
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] kex follows: False
2025-12-12T23:46:41.302 [DEBUG] [Thread-78752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:46:41.303 [DEBUG] [Thread-78752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:46:41.303 [DEBUG] [Thread-78752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:46:41.303 [DEBUG] [Thread-78752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:46:41.303 [DEBUG] [Thread-78752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:46:41.303 [DEBUG] [Thread-78752] [transport.py] [_log()] Compression: none
2025-12-12T23:46:41.303 [DEBUG] [Thread-78752] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:46:41.364 [DEBUG] [Thread-78752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:46:41.364 [DEBUG] [Thread-78752] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:46:41.365 [DEBUG] [Thread-78752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:46:41.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:46:41.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:46:41.420 [DEBUG] [Thread-78752] [transport.py] [_log()] userauth is OK
2025-12-12T23:46:41.420 [DEBUG] [Thread-78752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:46:41.420 [DEBUG] [Thread-78752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:46:41.420 [DEBUG] [Thread-78752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:46:41.420 [DEBUG] [Thread-78752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:46:41.439 [INFO] [Thread-78752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:46:41.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:46:41.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:46:42.278 [DEBUG] [Thread-78752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:46:42.278 [DEBUG] [Thread-78752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:46:42.326 [DEBUG] [Thread-78752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:46:42.326 [DEBUG] [Thread-78752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:46:42.335 [DEBUG] [Thread-78752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:46:42.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:46:42.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:46:42.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:46:42.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:46:42.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:46:42.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:46:42.371 [DEBUG] [Thread-78752] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:46:43.211 [DEBUG] [Thread-78754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:53.633 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:53.634 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:46:58.264 [DEBUG] [Thread-78755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:47:12.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:47:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:47:13.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 46, 56), 1.19, 92.72, 0.0, 49.26, 8.77, 2, 2, 0, 2, 1, 0),)
2025-12-12T23:47:13.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:46:56
2025-12-12T23:47:13.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:47:13.289 [DEBUG] [Thread-78756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:13.361 [DEBUG] [Thread-78757] [transport.py] [_log()] starting thread (client mode): 0xfabc5ed0
2025-12-12T23:47:13.361 [DEBUG] [Thread-78757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:47:13.383 [DEBUG] [Thread-78757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:47:13.383 [INFO] [Thread-78757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:47:13.386 [DEBUG] [Thread-78757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:47:13.386 [DEBUG] [Thread-78757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] client lang: <none>
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] server lang: <none>
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] kex follows: False
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:47:13.387 [DEBUG] [Thread-78757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:47:13.388 [DEBUG] [Thread-78757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:47:13.388 [DEBUG] [Thread-78757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:47:13.388 [DEBUG] [Thread-78757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:47:13.388 [DEBUG] [Thread-78757] [transport.py] [_log()] Compression: none
2025-12-12T23:47:13.388 [DEBUG] [Thread-78757] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:47:13.409 [DEBUG] [Thread-78757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:47:13.410 [DEBUG] [Thread-78757] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:47:13.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:47:13.411 [DEBUG] [Thread-78757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:47:13.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:47:13.415 [DEBUG] [Thread-78757] [transport.py] [_log()] userauth is OK
2025-12-12T23:47:13.415 [DEBUG] [Thread-78757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:47:13.415 [DEBUG] [Thread-78757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:47:13.415 [DEBUG] [Thread-78757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:47:13.415 [DEBUG] [Thread-78757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:47:13.440 [INFO] [Thread-78757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:47:13.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:47:14.033 [DEBUG] [Thread-78757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:47:14.034 [DEBUG] [Thread-78757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:47:14.034 [DEBUG] [Thread-78757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:47:14.076 [DEBUG] [Thread-78757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:47:14.076 [DEBUG] [Thread-78757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:47:14.081 [DEBUG] [Thread-78757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:47:14.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:47:14.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:47:14.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:47:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:47:14.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:47:14.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:47:14.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:47:14.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:47:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:47:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.907390 -999.00   +8.60  41.35     92   +7.40 1 3 2 3 1     0    0 1.29 5.68 .NE.. 47.3 41.4 312.2 53.0 9.9 -5.6 9.8 -2.6 9.5 -2.4 9.8 -4.0
2025-12-12T23:47:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:47:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:47:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.907390
2025-12-12T23:47:14.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:47:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:47:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:47:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:47:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:47:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:46:56', tmtdew=1.19, humidity=92.72, cloud=0.0, wind=49.26, temperature=8.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:46:38.496', atlas_cloud=3, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:46:00')
2025-12-12T23:47:14.117 [DEBUG] [Thread-78757] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:47:14.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:47:14.213 [DEBUG] [Thread-78760] [transport.py] [_log()] starting thread (client mode): 0xf575ff10
2025-12-12T23:47:14.213 [DEBUG] [Thread-78760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:47:14.228 [DEBUG] [Thread-78760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:47:14.228 [INFO] [Thread-78760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:47:14.236 [DEBUG] [Thread-78760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:47:14.236 [DEBUG] [Thread-78760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:47:14.236 [DEBUG] [Thread-78760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:47:14.236 [DEBUG] [Thread-78760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:14.236 [DEBUG] [Thread-78760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:14.236 [DEBUG] [Thread-78760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] client lang: <none>
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] server lang: <none>
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] kex follows: False
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] Compression: none
2025-12-12T23:47:14.237 [DEBUG] [Thread-78760] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:47:14.294 [DEBUG] [Thread-78760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:47:14.295 [DEBUG] [Thread-78760] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:47:14.295 [DEBUG] [Thread-78760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:47:14.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:47:14.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:47:14.351 [DEBUG] [Thread-78760] [transport.py] [_log()] userauth is OK
2025-12-12T23:47:14.351 [DEBUG] [Thread-78760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:47:14.352 [DEBUG] [Thread-78760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:47:14.352 [DEBUG] [Thread-78760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:47:14.352 [DEBUG] [Thread-78760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:47:14.371 [INFO] [Thread-78760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:47:14.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:47:14.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:47:15.180 [DEBUG] [Thread-78760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:47:15.180 [DEBUG] [Thread-78760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:47:15.229 [DEBUG] [Thread-78760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:47:15.229 [DEBUG] [Thread-78760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:47:15.239 [DEBUG] [Thread-78760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:47:15.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:47:15.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:47: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
2025-12-12T23:47:15.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:47:15.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:47:15.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:47:15.277 [DEBUG] [Thread-78760] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:47:22.103 [DEBUG] [Thread-78762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:28.319 [DEBUG] [Thread-78763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:43.375 [DEBUG] [Thread-78764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:47:45.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:47:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:47:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 47, 28), 1.19, 92.69, 0.0, 44.59, 8.75, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:47:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:47:28
2025-12-12T23:47:46.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:47:46.241 [DEBUG] [Thread-78765] [transport.py] [_log()] starting thread (client mode): 0xf81e74c0
2025-12-12T23:47:46.241 [DEBUG] [Thread-78765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:47:46.261 [DEBUG] [Thread-78765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:47:46.261 [INFO] [Thread-78765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] client lang: <none>
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] server lang: <none>
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] kex follows: False
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] Compression: none
2025-12-12T23:47:46.263 [DEBUG] [Thread-78765] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:47:46.274 [DEBUG] [Thread-78765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:47:46.274 [DEBUG] [Thread-78765] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:47:46.275 [DEBUG] [Thread-78765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:47:46.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:47:46.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:47:46.278 [DEBUG] [Thread-78765] [transport.py] [_log()] userauth is OK
2025-12-12T23:47:46.278 [DEBUG] [Thread-78765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:47:46.278 [DEBUG] [Thread-78765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:47:46.278 [DEBUG] [Thread-78765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:47:46.278 [DEBUG] [Thread-78765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:47:46.297 [INFO] [Thread-78765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:47:46.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:47:46.968 [DEBUG] [Thread-78765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:47:46.968 [DEBUG] [Thread-78765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:47:46.969 [DEBUG] [Thread-78765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:47:47.011 [DEBUG] [Thread-78765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:47:47.012 [DEBUG] [Thread-78765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:47:47.017 [DEBUG] [Thread-78765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:47:47.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:47:47.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:47:47.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:47:47.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:47:47.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:47:47.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:47:47.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:47:47.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:47:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:47:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.908084 -999.00   +8.60  47.12     92   +7.40 1 3 2 3 1     0    0 1.32 6.26 ZNE.. 46.4 47.1 314.8 55.8 9.9 -9.7 9.8 -2.8 9.5 -2.8 9.8 -3.0
2025-12-12T23:47:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:47:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:47:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.908084
2025-12-12T23:47:47.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:47:47.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:47:47.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:47:47.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:47:47.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:47:47.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:47:28', tmtdew=1.19, humidity=92.69, cloud=0.0, wind=44.59, temperature=8.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:47:38.458', atlas_cloud=3, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:46:00')
2025-12-12T23:47:47.058 [DEBUG] [Thread-78765] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:47:47.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:47:47.153 [DEBUG] [Thread-78768] [transport.py] [_log()] starting thread (client mode): 0xf81e6890
2025-12-12T23:47:47.153 [DEBUG] [Thread-78768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:47:47.167 [DEBUG] [Thread-78768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:47:47.167 [INFO] [Thread-78768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:47:47.175 [DEBUG] [Thread-78768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:47:47.175 [DEBUG] [Thread-78768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:47:47.175 [DEBUG] [Thread-78768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:47:47.175 [DEBUG] [Thread-78768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:47.175 [DEBUG] [Thread-78768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:47:47.175 [DEBUG] [Thread-78768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] client lang: <none>
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] server lang: <none>
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] kex follows: False
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:47:47.176 [DEBUG] [Thread-78768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:47:47.177 [DEBUG] [Thread-78768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:47:47.177 [DEBUG] [Thread-78768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:47:47.177 [DEBUG] [Thread-78768] [transport.py] [_log()] Compression: none
2025-12-12T23:47:47.177 [DEBUG] [Thread-78768] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:47:47.234 [DEBUG] [Thread-78768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:47:47.235 [DEBUG] [Thread-78768] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:47:47.235 [DEBUG] [Thread-78768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:47:47.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:47:47.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:47:47.294 [DEBUG] [Thread-78768] [transport.py] [_log()] userauth is OK
2025-12-12T23:47:47.294 [DEBUG] [Thread-78768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:47:47.294 [DEBUG] [Thread-78768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:47:47.294 [DEBUG] [Thread-78768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:47:47.294 [DEBUG] [Thread-78768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:47:47.313 [INFO] [Thread-78768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:47:47.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:47:47.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:47:48.150 [DEBUG] [Thread-78768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:47:48.150 [DEBUG] [Thread-78768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:47:48.197 [DEBUG] [Thread-78768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:47:48.197 [DEBUG] [Thread-78768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:47:48.206 [DEBUG] [Thread-78768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:47:48.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:47:48.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:47:48.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:47:48.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:47:48.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:47:48.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:47:48.239 [DEBUG] [Thread-78768] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:47:53.841 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:53.842 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:47:58.404 [DEBUG] [Thread-78770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:13.456 [DEBUG] [Thread-78771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:48:18.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:48:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:48:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 48), 1.15, 92.14, 0.0, 38.83, 8.65, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:48:18.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:48:00
2025-12-12T23:48:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:48:19.219 [DEBUG] [Thread-78772] [transport.py] [_log()] starting thread (client mode): 0xf575c2b0
2025-12-12T23:48:19.220 [DEBUG] [Thread-78772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:48:19.238 [DEBUG] [Thread-78772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:48:19.238 [INFO] [Thread-78772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] client lang: <none>
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] server lang: <none>
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] kex follows: False
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] Compression: none
2025-12-12T23:48:19.241 [DEBUG] [Thread-78772] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:48:19.258 [DEBUG] [Thread-78772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:48:19.259 [DEBUG] [Thread-78772] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:48:19.259 [DEBUG] [Thread-78772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:48:19.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:48:19.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:48:19.261 [DEBUG] [Thread-78772] [transport.py] [_log()] userauth is OK
2025-12-12T23:48:19.261 [DEBUG] [Thread-78772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:48:19.261 [DEBUG] [Thread-78772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:48:19.261 [DEBUG] [Thread-78772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:48:19.261 [DEBUG] [Thread-78772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:48:19.285 [INFO] [Thread-78772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:48:19.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:48:19.851 [DEBUG] [Thread-78772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:48:19.852 [DEBUG] [Thread-78772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:48:19.852 [DEBUG] [Thread-78772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:48:19.893 [DEBUG] [Thread-78772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:48:19.893 [DEBUG] [Thread-78772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:48:19.896 [DEBUG] [Thread-78772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:48:19.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:48:19.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:48:19.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:48:19.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:48:19.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:48:19.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:48:19.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:48:19.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:48:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:48:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.908431 -999.00   +8.60  39.86     92   +7.40 1 2 2 3 1     0    0 1.34 6.83 ZNE.. 36.9 39.9 306.8 57.5 9.9 -8.1 9.7 -12.6 9.5 -9.1 9.8 -7.4
2025-12-12T23:48:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:48:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:48:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.908431
2025-12-12T23:48:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:48:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:48:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:48:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:48:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:48:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:48:00', tmtdew=1.15, humidity=92.14, cloud=0.0, wind=38.83, temperature=8.65, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:48:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:46:00')
2025-12-12T23:48:19.915 [DEBUG] [Thread-78772] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:48:19.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:48:20.010 [DEBUG] [Thread-78775] [transport.py] [_log()] starting thread (client mode): 0xf575ff10
2025-12-12T23:48:20.011 [DEBUG] [Thread-78775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:48:20.027 [DEBUG] [Thread-78775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:48:20.028 [INFO] [Thread-78775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:48:20.035 [DEBUG] [Thread-78775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:48:20.036 [DEBUG] [Thread-78775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] client lang: <none>
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] server lang: <none>
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] kex follows: False
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:48:20.037 [DEBUG] [Thread-78775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:48:20.038 [DEBUG] [Thread-78775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:48:20.038 [DEBUG] [Thread-78775] [transport.py] [_log()] Compression: none
2025-12-12T23:48:20.038 [DEBUG] [Thread-78775] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:48:20.095 [DEBUG] [Thread-78775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:48:20.095 [DEBUG] [Thread-78775] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:48:20.096 [DEBUG] [Thread-78775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:48:20.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:48:20.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:48:20.151 [DEBUG] [Thread-78775] [transport.py] [_log()] userauth is OK
2025-12-12T23:48:20.151 [DEBUG] [Thread-78775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:48:20.151 [DEBUG] [Thread-78775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:48:20.151 [DEBUG] [Thread-78775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:48:20.151 [DEBUG] [Thread-78775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:48:20.172 [INFO] [Thread-78775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:48:20.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:48:20.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:48:21.000 [DEBUG] [Thread-78775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:48:21.000 [DEBUG] [Thread-78775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:48:21.048 [DEBUG] [Thread-78775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:48:21.048 [DEBUG] [Thread-78775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:48:21.057 [DEBUG] [Thread-78775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:48:21.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:48:21.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:48:21.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:48:21.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:48:21.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:48:21.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:48:21.091 [DEBUG] [Thread-78775] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:48:22.175 [DEBUG] [Thread-78777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:28.481 [DEBUG] [Thread-78778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:43.527 [DEBUG] [Thread-78779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:51.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:48:51.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:48: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
2025-12-12T23:48:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 48, 32), 1.15, 92.17, 0.0, 38.13, 8.75, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:48:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:48:32
2025-12-12T23:48:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:48:52.127 [DEBUG] [Thread-78780] [transport.py] [_log()] starting thread (client mode): 0xf57c99c0
2025-12-12T23:48:52.128 [DEBUG] [Thread-78780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:48:52.147 [DEBUG] [Thread-78780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:48:52.147 [INFO] [Thread-78780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] client lang: <none>
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] server lang: <none>
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] kex follows: False
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] Compression: none
2025-12-12T23:48:52.149 [DEBUG] [Thread-78780] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:48:52.157 [DEBUG] [Thread-78780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:48:52.157 [DEBUG] [Thread-78780] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:48:52.158 [DEBUG] [Thread-78780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:48:52.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:48:52.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:48:52.158 [DEBUG] [Thread-78780] [transport.py] [_log()] userauth is OK
2025-12-12T23:48:52.158 [DEBUG] [Thread-78780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:48:52.158 [DEBUG] [Thread-78780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:48:52.158 [DEBUG] [Thread-78780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:48:52.158 [DEBUG] [Thread-78780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:48:52.168 [INFO] [Thread-78780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:48:52.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:48:52.798 [DEBUG] [Thread-78780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:48:52.799 [DEBUG] [Thread-78780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:48:52.799 [DEBUG] [Thread-78780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:48:52.840 [DEBUG] [Thread-78780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:48:52.840 [DEBUG] [Thread-78780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:48:52.841 [DEBUG] [Thread-78780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:48:52.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:48:52.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:48:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:48:52.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:48:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:48:52.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:48:52.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.908778 -999.00   +8.60  39.46     91   +7.30 1 3 2 3 1     0    0 1.37 7.95 ----- 38.7 39.5 314.4 49.9 9.9 -4.0 9.8 -7.1 9.5 -5.3 9.8 -3.6
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.908778
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:48:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:48:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:48:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:48:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:48:32', tmtdew=1.15, humidity=92.17, cloud=0.0, wind=38.13, temperature=8.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:48:38.419', atlas_cloud=3, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:46:00')
2025-12-12T23:48:52.860 [DEBUG] [Thread-78780] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:48:52.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:48:54.046 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:54.047 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:48:58.561 [DEBUG] [Thread-78783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:13.602 [DEBUG] [Thread-78784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:22.257 [DEBUG] [Thread-78785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:28.632 [DEBUG] [Thread-78786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:43.660 [DEBUG] [Thread-78787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:54.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:54.251 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:49:58.689 [DEBUG] [Thread-78788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:13.716 [DEBUG] [Thread-78789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:22.334 [DEBUG] [Thread-78790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:28.745 [DEBUG] [Thread-78791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:43.776 [DEBUG] [Thread-78792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:54.458 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:54.459 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:50:58.806 [DEBUG] [Thread-78793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:05.450 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-12T23:51:13.835 [DEBUG] [Thread-78794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:22.424 [DEBUG] [Thread-78795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:28.864 [DEBUG] [Thread-78796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:35.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:51:35.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:51:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:51:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 51, 12), 1.13, 92.27, 0.0, 41.43, 8.75, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:51:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:51:12
2025-12-12T23:51:36.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:51:36.450 [DEBUG] [Thread-78797] [transport.py] [_log()] starting thread (client mode): 0xf575fe20
2025-12-12T23:51:36.450 [DEBUG] [Thread-78797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:51:36.470 [DEBUG] [Thread-78797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:51:36.470 [INFO] [Thread-78797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:51:36.473 [DEBUG] [Thread-78797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:51:36.473 [DEBUG] [Thread-78797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:51:36.473 [DEBUG] [Thread-78797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] client lang: <none>
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] server lang: <none>
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] kex follows: False
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:51:36.474 [DEBUG] [Thread-78797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:51:36.475 [DEBUG] [Thread-78797] [transport.py] [_log()] Compression: none
2025-12-12T23:51:36.475 [DEBUG] [Thread-78797] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:51:36.494 [DEBUG] [Thread-78797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:51:36.494 [DEBUG] [Thread-78797] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:51:36.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:51:36.495 [DEBUG] [Thread-78797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:51:36.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:51:36.497 [DEBUG] [Thread-78797] [transport.py] [_log()] userauth is OK
2025-12-12T23:51:36.497 [DEBUG] [Thread-78797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:51:36.498 [DEBUG] [Thread-78797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:51:36.498 [DEBUG] [Thread-78797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:51:36.498 [DEBUG] [Thread-78797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:51:36.533 [INFO] [Thread-78797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:51:36.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:51:37.185 [DEBUG] [Thread-78797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:51:37.185 [DEBUG] [Thread-78797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:51:37.185 [DEBUG] [Thread-78797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:51:37.227 [DEBUG] [Thread-78797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:51:37.227 [DEBUG] [Thread-78797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:51:37.232 [DEBUG] [Thread-78797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:51:37.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:51:37.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:51:37.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:51:37.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:51:37.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:51:37.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:51:37.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:51:37.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:51:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:51:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.910515 -999.00   +8.50  50.67     92   +7.30 1 2 2 3 1     0    0 1.36 6.97 .N.S. 41.4 50.7 315.2 56.8 9.8 -20.7 9.7 -18.2 9.5 -16.7 9.8 -17.9
2025-12-12T23:51:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:51:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:51:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.910515
2025-12-12T23:51:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:51:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:51:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:51:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:51:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:51:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:51:12', tmtdew=1.13, humidity=92.27, cloud=0.0, wind=41.43, temperature=8.75, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:51:08.496', atlas_cloud=2, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:48:00')
2025-12-12T23:51:37.266 [DEBUG] [Thread-78797] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:51:37.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:51:37.361 [DEBUG] [Thread-78800] [transport.py] [_log()] starting thread (client mode): 0xf578b100
2025-12-12T23:51:37.361 [DEBUG] [Thread-78800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:51:37.376 [DEBUG] [Thread-78800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:51:37.376 [INFO] [Thread-78800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:51:37.384 [DEBUG] [Thread-78800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] client lang: <none>
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] server lang: <none>
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] kex follows: False
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] Compression: none
2025-12-12T23:51:37.385 [DEBUG] [Thread-78800] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:51:37.442 [DEBUG] [Thread-78800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:51:37.443 [DEBUG] [Thread-78800] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:51:37.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:51:37.444 [DEBUG] [Thread-78800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:51:37.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:51:37.498 [DEBUG] [Thread-78800] [transport.py] [_log()] userauth is OK
2025-12-12T23:51:37.498 [DEBUG] [Thread-78800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:51:37.499 [DEBUG] [Thread-78800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:51:37.499 [DEBUG] [Thread-78800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:51:37.499 [DEBUG] [Thread-78800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:51:37.518 [INFO] [Thread-78800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:51:37.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:51:37.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:51:38.319 [DEBUG] [Thread-78800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:51:38.320 [DEBUG] [Thread-78800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:51:38.368 [DEBUG] [Thread-78800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:51:38.368 [DEBUG] [Thread-78800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:51:38.377 [DEBUG] [Thread-78800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:51:38.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:51:38.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:51:38.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:51:38.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:51:38.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:51:38.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:51:38.412 [DEBUG] [Thread-78800] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:51:43.889 [DEBUG] [Thread-78802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:54.672 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:54.673 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:51:58.940 [DEBUG] [Thread-78803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:08.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:52:08.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:52:08.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:52:09.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 51, 44), 1.17, 92.34, 0.0, 35.41, 8.68, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:52:09.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:51:44
2025-12-12T23:52:09.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:52:09.462 [DEBUG] [Thread-78804] [transport.py] [_log()] starting thread (client mode): 0xf81e41f0
2025-12-12T23:52:09.462 [DEBUG] [Thread-78804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:52:09.484 [DEBUG] [Thread-78804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:52:09.484 [INFO] [Thread-78804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] client lang: <none>
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] server lang: <none>
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] kex follows: False
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:52:09.487 [DEBUG] [Thread-78804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:52:09.488 [DEBUG] [Thread-78804] [transport.py] [_log()] Compression: none
2025-12-12T23:52:09.488 [DEBUG] [Thread-78804] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:52:09.498 [DEBUG] [Thread-78804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:52:09.498 [DEBUG] [Thread-78804] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:52:09.498 [DEBUG] [Thread-78804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:52:09.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:52:09.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:52:09.503 [DEBUG] [Thread-78804] [transport.py] [_log()] userauth is OK
2025-12-12T23:52:09.503 [DEBUG] [Thread-78804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:52:09.503 [DEBUG] [Thread-78804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:52:09.503 [DEBUG] [Thread-78804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:52:09.503 [DEBUG] [Thread-78804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:52:09.519 [INFO] [Thread-78804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:52:09.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:52:10.158 [DEBUG] [Thread-78804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:52:10.158 [DEBUG] [Thread-78804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:52:10.158 [DEBUG] [Thread-78804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:52:10.200 [DEBUG] [Thread-78804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:52:10.200 [DEBUG] [Thread-78804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:52:10.204 [DEBUG] [Thread-78804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:52:10.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:52:10.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:52:10.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:52:10.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:52:10.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:52:10.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:52:10.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.910862 -999.00   +8.50  42.74     92   +7.40 1 2 2 3 1     0    0 1.33 5.92 ZNE.W 41.6 42.7 310.0 55.3 9.8 -17.3 9.7 -18.7 9.4 -14.8 9.8 -14.8
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.910862
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:52:10.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:51:44', tmtdew=1.17, humidity=92.34, cloud=0.0, wind=35.41, temperature=8.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:51:38.477', atlas_cloud=2, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:48:00')
2025-12-12T23:52:10.238 [DEBUG] [Thread-78804] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:52:10.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:52:10.323 [DEBUG] [Thread-78807] [transport.py] [_log()] starting thread (client mode): 0xf5789bd0
2025-12-12T23:52:10.323 [DEBUG] [Thread-78807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:52:10.341 [DEBUG] [Thread-78807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:52:10.341 [INFO] [Thread-78807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] client lang: <none>
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] server lang: <none>
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] kex follows: False
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] Compression: none
2025-12-12T23:52:10.349 [DEBUG] [Thread-78807] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:52:10.405 [DEBUG] [Thread-78807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:52:10.405 [DEBUG] [Thread-78807] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:52:10.405 [DEBUG] [Thread-78807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:52:10.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:52:10.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:52:10.462 [DEBUG] [Thread-78807] [transport.py] [_log()] userauth is OK
2025-12-12T23:52:10.462 [DEBUG] [Thread-78807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:52:10.462 [DEBUG] [Thread-78807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:52:10.462 [DEBUG] [Thread-78807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:52:10.462 [DEBUG] [Thread-78807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:52:10.476 [INFO] [Thread-78807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:52:10.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:52:10.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:52:11.349 [DEBUG] [Thread-78807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:52:11.349 [DEBUG] [Thread-78807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:52:11.397 [DEBUG] [Thread-78807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:52:11.397 [DEBUG] [Thread-78807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:52:11.406 [DEBUG] [Thread-78807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:52:11.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:52:11.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:52:11.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:52:11.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:52:11.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:52:11.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:52:11.438 [DEBUG] [Thread-78807] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:52:13.972 [DEBUG] [Thread-78809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:22.504 [DEBUG] [Thread-78810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:29.028 [DEBUG] [Thread-78811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:41.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:52:41.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:52:41.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:52:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 52, 16), 1.17, 92.32, 0.0, 36.1, 8.67, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:52:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:52:16
2025-12-12T23:52:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:52:42.430 [DEBUG] [Thread-78812] [transport.py] [_log()] starting thread (client mode): 0xfabc7790
2025-12-12T23:52:42.430 [DEBUG] [Thread-78812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:52:42.450 [DEBUG] [Thread-78812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:52:42.450 [INFO] [Thread-78812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:52:42.453 [DEBUG] [Thread-78812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] client lang: <none>
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] server lang: <none>
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] kex follows: False
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] Compression: none
2025-12-12T23:52:42.454 [DEBUG] [Thread-78812] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:52:42.472 [DEBUG] [Thread-78812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:52:42.472 [DEBUG] [Thread-78812] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:52:42.473 [DEBUG] [Thread-78812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:52:42.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:52:42.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:52:42.475 [DEBUG] [Thread-78812] [transport.py] [_log()] userauth is OK
2025-12-12T23:52:42.475 [DEBUG] [Thread-78812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:52:42.475 [DEBUG] [Thread-78812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:52:42.475 [DEBUG] [Thread-78812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:52:42.475 [DEBUG] [Thread-78812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:52:42.510 [INFO] [Thread-78812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:52:42.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:52:43.135 [DEBUG] [Thread-78812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:52:43.135 [DEBUG] [Thread-78812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:52:43.136 [DEBUG] [Thread-78812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:52:43.176 [DEBUG] [Thread-78812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:52:43.176 [DEBUG] [Thread-78812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:52:43.179 [DEBUG] [Thread-78812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:52:43.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:52:43.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:52:43.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:52:43.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:52:43.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:52:43.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:52:43.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:52:43.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:52:43.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:52:43.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.911209 -999.00   +8.50  43.33     92   +7.30 1 2 2 3 1     0    0 1.34 6.09 ZNE.W 45.3 43.3 310.2 51.8 9.8 -14.8 9.7 -14.2 9.4 -11.2 9.8 -11.5
2025-12-12T23:52:43.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:52:43.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:52:43.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.911209
2025-12-12T23:52:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:52:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:52:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:52:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:52:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:52:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:52:16', tmtdew=1.17, humidity=92.32, cloud=0.0, wind=36.1, temperature=8.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:52:08.458', atlas_cloud=2, atlas_rain=1, zp_data=[1.396749999999999, 1.0042500000000008, 1.88525, nan, nan, 2.2527500000000007, 2.285499999999999, nan, 1.3364999999999991, 1.5750000000000002, nan, nan, nan, nan, 2.135, 2.298, 1.8572499999999996, nan, nan, nan, nan, 2.3557499999999987, 1.7372500000000004, 1.72675, 1.0119999999999996, nan, nan, nan, nan, nan, 0.8740000000000014, 0.5755000000000008, 0.7457499999999992], zp_timestamp='2025-12-12T21:48:00')
2025-12-12T23:52:43.204 [DEBUG] [Thread-78812] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:52:43.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:52:43.302 [DEBUG] [Thread-78815] [transport.py] [_log()] starting thread (client mode): 0xf5742500
2025-12-12T23:52:43.302 [DEBUG] [Thread-78815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:52:43.317 [DEBUG] [Thread-78815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:52:43.318 [INFO] [Thread-78815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:52:43.325 [DEBUG] [Thread-78815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:52:43.325 [DEBUG] [Thread-78815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:52:43.325 [DEBUG] [Thread-78815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] client lang: <none>
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] server lang: <none>
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] kex follows: False
2025-12-12T23:52:43.326 [DEBUG] [Thread-78815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:52:43.327 [DEBUG] [Thread-78815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:52:43.327 [DEBUG] [Thread-78815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:52:43.327 [DEBUG] [Thread-78815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:52:43.327 [DEBUG] [Thread-78815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:52:43.327 [DEBUG] [Thread-78815] [transport.py] [_log()] Compression: none
2025-12-12T23:52:43.327 [DEBUG] [Thread-78815] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:52:43.381 [DEBUG] [Thread-78815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:52:43.382 [DEBUG] [Thread-78815] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:52:43.382 [DEBUG] [Thread-78815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:52:43.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:52:43.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:52:43.438 [DEBUG] [Thread-78815] [transport.py] [_log()] userauth is OK
2025-12-12T23:52:43.438 [DEBUG] [Thread-78815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:52:43.438 [DEBUG] [Thread-78815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:52:43.438 [DEBUG] [Thread-78815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:52:43.439 [DEBUG] [Thread-78815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:52:43.457 [INFO] [Thread-78815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:52:43.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:52:43.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:52:44.058 [DEBUG] [Thread-78817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:44.257 [DEBUG] [Thread-78815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:52:44.258 [DEBUG] [Thread-78815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:52:44.307 [DEBUG] [Thread-78815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:52:44.307 [DEBUG] [Thread-78815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:52:44.315 [DEBUG] [Thread-78815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:52:44.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:52:44.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:52:44.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:52:44.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:52:44.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:52:44.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:52:44.350 [DEBUG] [Thread-78815] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:52:54.878 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:54.879 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:52:59.104 [DEBUG] [Thread-78818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:14.139 [DEBUG] [Thread-78819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:14.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:53:14.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:53:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:53:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 52, 48), 1.2, 92.42, 0.0, 41.9, 8.63, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:53:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:52:48
2025-12-12T23:53:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:53:15.332 [DEBUG] [Thread-78820] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-12T23:53:15.332 [DEBUG] [Thread-78820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:53:15.344 [DEBUG] [Thread-78820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:53:15.344 [INFO] [Thread-78820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] client lang: <none>
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] server lang: <none>
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] kex follows: False
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] Compression: none
2025-12-12T23:53:15.347 [DEBUG] [Thread-78820] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:53:15.363 [DEBUG] [Thread-78820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:53:15.364 [DEBUG] [Thread-78820] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:53:15.364 [DEBUG] [Thread-78820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:53:15.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:53:15.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:53:15.366 [DEBUG] [Thread-78820] [transport.py] [_log()] userauth is OK
2025-12-12T23:53:15.366 [DEBUG] [Thread-78820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:53:15.366 [DEBUG] [Thread-78820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:53:15.366 [DEBUG] [Thread-78820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:53:15.366 [DEBUG] [Thread-78820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:53:15.385 [INFO] [Thread-78820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:53:15.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:53:15.956 [DEBUG] [Thread-78820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:53:15.956 [DEBUG] [Thread-78820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:53:15.956 [DEBUG] [Thread-78820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:53:15.998 [DEBUG] [Thread-78820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:53:15.999 [DEBUG] [Thread-78820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:53:16.003 [DEBUG] [Thread-78820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:53:16.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:53:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:53:16.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:53:16.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:53:16.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:53:16.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:53:16.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:53:16.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:53:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:53:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.911556 -999.00   +8.40  47.84     91   +7.20 1 2 2 3 1     0    0 1.30 5.57 ZNE.W 42.2 47.8 318.2 58.7 9.8 -10.9 9.6 -13.4 9.4 -9.6 9.7 -9.4
2025-12-12T23:53:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:53:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:53:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.911556
2025-12-12T23:53:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:53:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:53:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:53:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:53:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:53:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:52:48', tmtdew=1.2, humidity=92.42, cloud=0.0, wind=41.9, temperature=8.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:52:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.8052499999999991, nan, nan, nan, nan, nan, nan, 1.4665, 1.208499999999999, 2.0502499999999992, nan, nan, nan, nan, nan, 0.6720000000000006, 0.8382500000000004, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:51:00')
2025-12-12T23:53:16.042 [DEBUG] [Thread-78820] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:53:16.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:53:16.131 [DEBUG] [Thread-78823] [transport.py] [_log()] starting thread (client mode): 0xf57897b0
2025-12-12T23:53:16.131 [DEBUG] [Thread-78823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:53:16.147 [DEBUG] [Thread-78823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:53:16.147 [INFO] [Thread-78823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:16.155 [DEBUG] [Thread-78823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] client lang: <none>
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] server lang: <none>
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] kex follows: False
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] Compression: none
2025-12-12T23:53:16.156 [DEBUG] [Thread-78823] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:53:16.213 [DEBUG] [Thread-78823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:53:16.214 [DEBUG] [Thread-78823] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:53:16.214 [DEBUG] [Thread-78823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:53:16.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:53:16.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:53:16.270 [DEBUG] [Thread-78823] [transport.py] [_log()] userauth is OK
2025-12-12T23:53:16.270 [DEBUG] [Thread-78823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:53:16.270 [DEBUG] [Thread-78823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:53:16.270 [DEBUG] [Thread-78823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:53:16.270 [DEBUG] [Thread-78823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:53:16.294 [INFO] [Thread-78823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:53:16.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:53:16.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:53:17.105 [DEBUG] [Thread-78823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:53:17.105 [DEBUG] [Thread-78823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:53:17.153 [DEBUG] [Thread-78823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:53:17.153 [DEBUG] [Thread-78823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:53:17.162 [DEBUG] [Thread-78823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:53:17.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:53:17.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:53:17.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:53:17.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:53:17.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:53:17.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:53:17.196 [DEBUG] [Thread-78823] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:53:22.577 [DEBUG] [Thread-78825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:29.166 [DEBUG] [Thread-78826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:44.208 [DEBUG] [Thread-78827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:53:47.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:53:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:53:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 53, 21), 1.22, 92.34, 0.0, 43.9, 8.62, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:53:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:53:21
2025-12-12T23:53:48.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:53:48.183 [DEBUG] [Thread-78828] [transport.py] [_log()] starting thread (client mode): 0xf5742410
2025-12-12T23:53:48.183 [DEBUG] [Thread-78828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:53:48.204 [DEBUG] [Thread-78828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:53:48.204 [INFO] [Thread-78828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:53:48.207 [DEBUG] [Thread-78828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:53:48.207 [DEBUG] [Thread-78828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:53:48.207 [DEBUG] [Thread-78828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:53:48.207 [DEBUG] [Thread-78828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:48.207 [DEBUG] [Thread-78828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] client lang: <none>
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] server lang: <none>
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] kex follows: False
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] Compression: none
2025-12-12T23:53:48.208 [DEBUG] [Thread-78828] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:53:48.225 [DEBUG] [Thread-78828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:53:48.225 [DEBUG] [Thread-78828] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:53:48.226 [DEBUG] [Thread-78828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:53:48.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:53:48.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:53:48.228 [DEBUG] [Thread-78828] [transport.py] [_log()] userauth is OK
2025-12-12T23:53:48.228 [DEBUG] [Thread-78828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:53:48.228 [DEBUG] [Thread-78828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:53:48.228 [DEBUG] [Thread-78828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:53:48.228 [DEBUG] [Thread-78828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:53:48.252 [INFO] [Thread-78828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:53:48.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:53:48.898 [DEBUG] [Thread-78828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:53:48.898 [DEBUG] [Thread-78828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:53:48.898 [DEBUG] [Thread-78828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:53:48.939 [DEBUG] [Thread-78828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:53:48.939 [DEBUG] [Thread-78828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:53:48.942 [DEBUG] [Thread-78828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:53:48.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:53:48.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:53:48.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:53:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:53:48.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:53:48.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:53:48.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:53:48.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:53:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:53:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.911903 -999.00   +8.50  36.42     91   +7.20 1 3 2 3 1     0    0 1.31 5.11 .NES. 36.2 36.4 303.8 49.4 9.8 -6.0 9.6 -7.9 9.4 -5.7 9.7 -4.6
2025-12-12T23:53:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:53:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:53:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.911903
2025-12-12T23:53:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:53:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:53:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:53:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:53:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:53:48.970 [DEBUG] [Thread-78828] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:53:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:53:21', tmtdew=1.22, humidity=92.34, cloud=0.0, wind=43.9, temperature=8.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:53:08.419', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.8052499999999991, nan, nan, nan, nan, nan, nan, 1.4665, 1.208499999999999, 2.0502499999999992, nan, nan, nan, nan, nan, 0.6720000000000006, 0.8382500000000004, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:51:00')
2025-12-12T23:53:49.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:53:49.076 [DEBUG] [Thread-78831] [transport.py] [_log()] starting thread (client mode): 0xf5742da0
2025-12-12T23:53:49.076 [DEBUG] [Thread-78831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:53:49.090 [DEBUG] [Thread-78831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:53:49.090 [INFO] [Thread-78831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] client lang: <none>
2025-12-12T23:53:49.098 [DEBUG] [Thread-78831] [transport.py] [_log()] server lang: <none>
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] kex follows: False
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] Compression: none
2025-12-12T23:53:49.099 [DEBUG] [Thread-78831] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:53:49.157 [DEBUG] [Thread-78831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:53:49.158 [DEBUG] [Thread-78831] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:53:49.158 [DEBUG] [Thread-78831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:53:49.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:53:49.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:53:49.214 [DEBUG] [Thread-78831] [transport.py] [_log()] userauth is OK
2025-12-12T23:53:49.214 [DEBUG] [Thread-78831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:53:49.214 [DEBUG] [Thread-78831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:53:49.214 [DEBUG] [Thread-78831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:53:49.214 [DEBUG] [Thread-78831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:53:49.231 [INFO] [Thread-78831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:53:49.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:53:49.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:53:50.086 [DEBUG] [Thread-78831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:53:50.086 [DEBUG] [Thread-78831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:53:50.134 [DEBUG] [Thread-78831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:53:50.134 [DEBUG] [Thread-78831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:53:50.143 [DEBUG] [Thread-78831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:53:50.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:53:50.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:53:50.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:53:50.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:53:50.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:53:50.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:53:50.178 [DEBUG] [Thread-78831] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:53:55.099 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:55.100 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:53:59.239 [DEBUG] [Thread-78833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:14.289 [DEBUG] [Thread-78834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:54:20.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:54:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:54:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 53, 53), 1.22, 92.32, 0.0, 39.5, 8.62, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:54:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:53:53
2025-12-12T23:54:21.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:54:21.171 [DEBUG] [Thread-78835] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-12T23:54:21.171 [DEBUG] [Thread-78835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:54:21.197 [DEBUG] [Thread-78835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:54:21.198 [INFO] [Thread-78835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:54:21.199 [DEBUG] [Thread-78835] [transport.py] [_log()] client lang: <none>
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] server lang: <none>
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] kex follows: False
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] Compression: none
2025-12-12T23:54:21.200 [DEBUG] [Thread-78835] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:54:21.215 [DEBUG] [Thread-78835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:54:21.215 [DEBUG] [Thread-78835] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:54:21.216 [DEBUG] [Thread-78835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:54:21.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:54:21.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:54:21.219 [DEBUG] [Thread-78835] [transport.py] [_log()] userauth is OK
2025-12-12T23:54:21.220 [DEBUG] [Thread-78835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:54:21.220 [DEBUG] [Thread-78835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:54:21.220 [DEBUG] [Thread-78835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:54:21.220 [DEBUG] [Thread-78835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:54:21.238 [INFO] [Thread-78835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:54:21.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:54:21.895 [DEBUG] [Thread-78835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:54:21.895 [DEBUG] [Thread-78835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:54:21.895 [DEBUG] [Thread-78835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:54:21.937 [DEBUG] [Thread-78835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:54:21.937 [DEBUG] [Thread-78835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:54:21.941 [DEBUG] [Thread-78835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:54:21.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:54:21.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:54:21.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:54:21.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:54:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:54:21.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:54:21.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:54:21.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:54:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:54:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.912251 -999.00   +8.50  49.74     91   +7.20 1 3 2 3 1     0    0 1.36 5.82 znES. 39.9 49.7 311.2 57.9 9.8 -5.7 9.6 -5.5 9.4 -4.5 9.7 -5.0
2025-12-12T23:54:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:54:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:54:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.912251
2025-12-12T23:54:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:54:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:54:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:54:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:54:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:54:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:53:53', tmtdew=1.22, humidity=92.32, cloud=0.0, wind=39.5, temperature=8.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:53:38.486', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.8052499999999991, nan, nan, nan, nan, nan, nan, 1.4665, 1.208499999999999, 2.0502499999999992, nan, nan, nan, nan, nan, 0.6720000000000006, 0.8382500000000004, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:51:00')
2025-12-12T23:54:21.972 [DEBUG] [Thread-78835] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:54:22.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:54:22.074 [DEBUG] [Thread-78838] [transport.py] [_log()] starting thread (client mode): 0xf572d690
2025-12-12T23:54:22.074 [DEBUG] [Thread-78838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:54:22.089 [DEBUG] [Thread-78838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:54:22.089 [INFO] [Thread-78838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:54:22.097 [DEBUG] [Thread-78838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:54:22.097 [DEBUG] [Thread-78838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:54:22.097 [DEBUG] [Thread-78838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:54:22.097 [DEBUG] [Thread-78838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:22.097 [DEBUG] [Thread-78838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:22.097 [DEBUG] [Thread-78838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] client lang: <none>
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] server lang: <none>
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] kex follows: False
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:54:22.098 [DEBUG] [Thread-78838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:54:22.099 [DEBUG] [Thread-78838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:54:22.099 [DEBUG] [Thread-78838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:54:22.099 [DEBUG] [Thread-78838] [transport.py] [_log()] Compression: none
2025-12-12T23:54:22.099 [DEBUG] [Thread-78838] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:54:22.154 [DEBUG] [Thread-78838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:54:22.154 [DEBUG] [Thread-78838] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:54:22.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:54:22.155 [DEBUG] [Thread-78838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:54:22.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:54:22.210 [DEBUG] [Thread-78838] [transport.py] [_log()] userauth is OK
2025-12-12T23:54:22.210 [DEBUG] [Thread-78838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:54:22.210 [DEBUG] [Thread-78838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:54:22.210 [DEBUG] [Thread-78838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:54:22.210 [DEBUG] [Thread-78838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:54:22.229 [INFO] [Thread-78838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:54:22.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:54:22.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:54:22.651 [DEBUG] [Thread-78840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:23.076 [DEBUG] [Thread-78838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:54:23.077 [DEBUG] [Thread-78838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:54:23.125 [DEBUG] [Thread-78838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:54:23.125 [DEBUG] [Thread-78838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:54:23.134 [DEBUG] [Thread-78838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:54:23.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:54:23.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:54:23.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:54:23.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:54:23.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:54:23.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:54:23.169 [DEBUG] [Thread-78838] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:54:29.319 [DEBUG] [Thread-78841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:44.358 [DEBUG] [Thread-78842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:53.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:54:53.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:54:53.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
2025-12-12T23:54:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 54, 25), 1.22, 92.32, 0.0, 39.26, 8.63, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:54:53.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:54:25
2025-12-12T23:54:54.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:54:54.149 [DEBUG] [Thread-78843] [transport.py] [_log()] starting thread (client mode): 0xf81e7dc0
2025-12-12T23:54:54.149 [DEBUG] [Thread-78843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:54:54.169 [DEBUG] [Thread-78843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:54:54.169 [INFO] [Thread-78843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] client lang: <none>
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] server lang: <none>
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] kex follows: False
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:54:54.173 [DEBUG] [Thread-78843] [transport.py] [_log()] Compression: none
2025-12-12T23:54:54.174 [DEBUG] [Thread-78843] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:54:54.193 [DEBUG] [Thread-78843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:54:54.194 [DEBUG] [Thread-78843] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:54:54.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:54:54.194 [DEBUG] [Thread-78843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:54:54.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:54:54.198 [DEBUG] [Thread-78843] [transport.py] [_log()] userauth is OK
2025-12-12T23:54:54.198 [DEBUG] [Thread-78843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:54:54.198 [DEBUG] [Thread-78843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:54:54.198 [DEBUG] [Thread-78843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:54:54.198 [DEBUG] [Thread-78843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:54:54.223 [INFO] [Thread-78843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:54:54.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:54:54.832 [DEBUG] [Thread-78843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:54:54.833 [DEBUG] [Thread-78843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:54:54.833 [DEBUG] [Thread-78843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:54:54.877 [DEBUG] [Thread-78843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:54:54.877 [DEBUG] [Thread-78843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:54:54.884 [DEBUG] [Thread-78843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:54:54.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:54:54.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:54:54.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:54:54.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:54:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:54:54.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:54:54.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:54:54.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:54:54.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:54:54.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.912945 -999.00   +8.40  47.55     92   +7.20 1 3 2 3 1     0    0 1.37 6.22 ZNE.. 45.0 47.5 309.8 54.8 9.7 -8.4 9.6 -10.0 9.3 -8.8 9.7 -9.9
2025-12-12T23:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.912945
2025-12-12T23:54:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:54:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:54:25', tmtdew=1.22, humidity=92.32, cloud=0.0, wind=39.26, temperature=8.63, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:54:38.448', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.8052499999999991, nan, nan, nan, nan, nan, nan, 1.4665, 1.208499999999999, 2.0502499999999992, nan, nan, nan, nan, nan, 0.6720000000000006, 0.8382500000000004, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:51:00')
2025-12-12T23:54:54.927 [DEBUG] [Thread-78843] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:54:55.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:54:55.027 [DEBUG] [Thread-78846] [transport.py] [_log()] starting thread (client mode): 0xf57ca530
2025-12-12T23:54:55.027 [DEBUG] [Thread-78846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:54:55.041 [DEBUG] [Thread-78846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:54:55.041 [INFO] [Thread-78846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:54:55.048 [DEBUG] [Thread-78846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:54:55.048 [DEBUG] [Thread-78846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:54:55.048 [DEBUG] [Thread-78846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:54:55.048 [DEBUG] [Thread-78846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] client lang: <none>
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] server lang: <none>
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] kex follows: False
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] Compression: none
2025-12-12T23:54:55.049 [DEBUG] [Thread-78846] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:54:55.109 [DEBUG] [Thread-78846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:54:55.109 [DEBUG] [Thread-78846] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:54:55.110 [DEBUG] [Thread-78846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:54:55.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:54:55.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:54:55.165 [DEBUG] [Thread-78846] [transport.py] [_log()] userauth is OK
2025-12-12T23:54:55.166 [DEBUG] [Thread-78846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:54:55.166 [DEBUG] [Thread-78846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:54:55.166 [DEBUG] [Thread-78846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:54:55.166 [DEBUG] [Thread-78846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:54:55.183 [INFO] [Thread-78846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:54:55.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:54:55.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:54:55.304 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:55.305 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:54:56.006 [DEBUG] [Thread-78846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:54:56.006 [DEBUG] [Thread-78846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:54:56.054 [DEBUG] [Thread-78846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:54:56.054 [DEBUG] [Thread-78846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:54:56.063 [DEBUG] [Thread-78846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:54:56.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:54:56.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:54:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:54:56.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:54:56.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:54:56.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:54:56.097 [DEBUG] [Thread-78846] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:54:59.383 [DEBUG] [Thread-78848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:14.420 [DEBUG] [Thread-78849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:22.726 [DEBUG] [Thread-78850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:55:26.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:55:26.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:55:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 54, 57), 1.23, 92.25, 0.0, 37.54, 8.57, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:55:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:54:57
2025-12-12T23:55:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:55:27.077 [DEBUG] [Thread-78851] [transport.py] [_log()] starting thread (client mode): 0xf572d9c0
2025-12-12T23:55:27.077 [DEBUG] [Thread-78851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:55:27.096 [DEBUG] [Thread-78851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:55:27.097 [INFO] [Thread-78851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] client lang: <none>
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] server lang: <none>
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] kex follows: False
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] Compression: none
2025-12-12T23:55:27.102 [DEBUG] [Thread-78851] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:55:27.110 [DEBUG] [Thread-78851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:55:27.111 [DEBUG] [Thread-78851] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:55:27.111 [DEBUG] [Thread-78851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:55:27.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:55:27.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:55:27.113 [DEBUG] [Thread-78851] [transport.py] [_log()] userauth is OK
2025-12-12T23:55:27.113 [DEBUG] [Thread-78851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:55:27.113 [DEBUG] [Thread-78851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:55:27.113 [DEBUG] [Thread-78851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:55:27.113 [DEBUG] [Thread-78851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:55:27.126 [INFO] [Thread-78851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:55:27.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:55:27.664 [DEBUG] [Thread-78851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:55:27.664 [DEBUG] [Thread-78851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:55:27.664 [DEBUG] [Thread-78851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:55:27.707 [DEBUG] [Thread-78851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:55:27.707 [DEBUG] [Thread-78851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:55:27.711 [DEBUG] [Thread-78851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:55:27.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:55:27.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:55:27.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:55:27.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:55:27.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:55:27.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:55:27.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:55:27.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:55:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:55:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.913292 -999.00   +8.40  34.24     92   +7.20 1 3 2 3 1     0    0 1.33 6.08 ZNE.. 38.4 34.2 307.0 47.2 9.8 -6.8 9.6 -5.8 9.3 -4.8 9.7 -4.9
2025-12-12T23:55:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:55:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:55:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.913292
2025-12-12T23:55:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:55:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:55:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:55:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:55:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:55:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:54:57', tmtdew=1.23, humidity=92.25, cloud=0.0, wind=37.54, temperature=8.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:55:08.429', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.8052499999999991, nan, nan, nan, nan, nan, nan, 1.4665, 1.208499999999999, 2.0502499999999992, nan, nan, nan, nan, nan, 0.6720000000000006, 0.8382500000000004, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:51:00')
2025-12-12T23:55:27.742 [DEBUG] [Thread-78851] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:55:27.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:55:27.841 [DEBUG] [Thread-78854] [transport.py] [_log()] starting thread (client mode): 0xf572e9b0
2025-12-12T23:55:27.841 [DEBUG] [Thread-78854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:55:27.855 [DEBUG] [Thread-78854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:55:27.856 [INFO] [Thread-78854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:55:27.863 [DEBUG] [Thread-78854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:55:27.863 [DEBUG] [Thread-78854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:55:27.863 [DEBUG] [Thread-78854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:55:27.863 [DEBUG] [Thread-78854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:55:27.863 [DEBUG] [Thread-78854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] client lang: <none>
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] server lang: <none>
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] kex follows: False
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] Compression: none
2025-12-12T23:55:27.864 [DEBUG] [Thread-78854] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:55:27.926 [DEBUG] [Thread-78854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:55:27.926 [DEBUG] [Thread-78854] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:55:27.927 [DEBUG] [Thread-78854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:55:27.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:55:27.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:55:27.981 [DEBUG] [Thread-78854] [transport.py] [_log()] userauth is OK
2025-12-12T23:55:27.982 [DEBUG] [Thread-78854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:55:27.982 [DEBUG] [Thread-78854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:55:27.982 [DEBUG] [Thread-78854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:55:27.982 [DEBUG] [Thread-78854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:55:28.001 [INFO] [Thread-78854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:55:28.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:55:28.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:55:28.849 [DEBUG] [Thread-78854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:55:28.849 [DEBUG] [Thread-78854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:55:28.897 [DEBUG] [Thread-78854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:55:28.897 [DEBUG] [Thread-78854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:55:28.907 [DEBUG] [Thread-78854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:55:28.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:55:28.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:55:28.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:55:28.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:55:28.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:55:28.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:55:28.944 [DEBUG] [Thread-78854] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:55:29.445 [DEBUG] [Thread-78856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:44.489 [DEBUG] [Thread-78857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:55.509 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:55.511 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:58.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:55:58.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:55:58.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:55:59.517 [DEBUG] [Thread-78858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:55:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 55, 29), 1.22, 92.29, 0.0, 37.9, 8.58, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:55:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:55:29
2025-12-12T23:55:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:55:59.990 [DEBUG] [Thread-78859] [transport.py] [_log()] starting thread (client mode): 0xf57ca530
2025-12-12T23:55:59.990 [DEBUG] [Thread-78859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:56:00.011 [DEBUG] [Thread-78859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:56:00.011 [INFO] [Thread-78859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] client lang: <none>
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] server lang: <none>
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] kex follows: False
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] Compression: none
2025-12-12T23:56:00.014 [DEBUG] [Thread-78859] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:56:00.031 [DEBUG] [Thread-78859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:56:00.031 [DEBUG] [Thread-78859] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:56:00.031 [DEBUG] [Thread-78859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:56:00.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:56:00.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:56:00.032 [DEBUG] [Thread-78859] [transport.py] [_log()] userauth is OK
2025-12-12T23:56:00.032 [DEBUG] [Thread-78859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:56:00.032 [DEBUG] [Thread-78859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:56:00.032 [DEBUG] [Thread-78859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:56:00.032 [DEBUG] [Thread-78859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:56:00.041 [INFO] [Thread-78859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:56:00.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:56:00.687 [DEBUG] [Thread-78859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:56:00.687 [DEBUG] [Thread-78859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:56:00.687 [DEBUG] [Thread-78859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:56:00.728 [DEBUG] [Thread-78859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:56:00.728 [DEBUG] [Thread-78859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:56:00.730 [DEBUG] [Thread-78859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:56:00.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:56:00.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:56:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:56:00.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:56:00.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:56:00.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:56:00.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.913639 -999.00   +8.40  44.03     92   +7.30 1 3 2 3 1     0    0 1.30 4.91 ZNESW 40.5 44.0 310.4 50.3 9.8 -4.3 9.6 -5.5 9.3 -5.0 9.7 -4.8
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.913639
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:56:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:55:29', tmtdew=1.22, humidity=92.29, cloud=0.0, wind=37.9, temperature=8.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:55:38.410', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.8052499999999991, nan, nan, nan, nan, nan, nan, 1.4665, 1.208499999999999, 2.0502499999999992, nan, nan, nan, nan, nan, 0.6720000000000006, 0.8382500000000004, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T21:51:00')
2025-12-12T23:56:00.750 [DEBUG] [Thread-78859] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:56:00.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:56:00.836 [DEBUG] [Thread-78862] [transport.py] [_log()] starting thread (client mode): 0xf81e4bb0
2025-12-12T23:56:00.837 [DEBUG] [Thread-78862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:56:00.851 [DEBUG] [Thread-78862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:56:00.851 [INFO] [Thread-78862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] client lang: <none>
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] server lang: <none>
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] kex follows: False
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] Compression: none
2025-12-12T23:56:00.859 [DEBUG] [Thread-78862] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:56:00.913 [DEBUG] [Thread-78862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:56:00.913 [DEBUG] [Thread-78862] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:56:00.914 [DEBUG] [Thread-78862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:56:00.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:56:00.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:56:00.971 [DEBUG] [Thread-78862] [transport.py] [_log()] userauth is OK
2025-12-12T23:56:00.971 [DEBUG] [Thread-78862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:56:00.971 [DEBUG] [Thread-78862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:56:00.971 [DEBUG] [Thread-78862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:56:00.971 [DEBUG] [Thread-78862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:56:00.984 [INFO] [Thread-78862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:56:00.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:56:00.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:56:01.804 [DEBUG] [Thread-78862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:56:01.804 [DEBUG] [Thread-78862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:56:01.852 [DEBUG] [Thread-78862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:56:01.852 [DEBUG] [Thread-78862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:56:01.864 [DEBUG] [Thread-78862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:56:01.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:56:01.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:56:01.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:56:01.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:56:01.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:56:01.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:56:01.896 [DEBUG] [Thread-78862] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:56:14.545 [DEBUG] [Thread-78864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:56:22.813 [DEBUG] [Thread-78865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:56:29.588 [DEBUG] [Thread-78866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:56:31.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:56:31.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:56:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:56:32.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 56, 1), 1.17, 92.34, 0.0, 42.31, 8.5, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:56:32.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:56:01
2025-12-12T23:56:32.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:56:32.881 [DEBUG] [Thread-78867] [transport.py] [_log()] starting thread (client mode): 0xf5701a20
2025-12-12T23:56:32.881 [DEBUG] [Thread-78867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:56:32.903 [DEBUG] [Thread-78867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:56:32.903 [INFO] [Thread-78867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:56:32.906 [DEBUG] [Thread-78867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] client lang: <none>
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] server lang: <none>
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] kex follows: False
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:56:32.907 [DEBUG] [Thread-78867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:56:32.908 [DEBUG] [Thread-78867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:56:32.908 [DEBUG] [Thread-78867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:56:32.908 [DEBUG] [Thread-78867] [transport.py] [_log()] Compression: none
2025-12-12T23:56:32.908 [DEBUG] [Thread-78867] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:56:32.924 [DEBUG] [Thread-78867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:56:32.925 [DEBUG] [Thread-78867] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:56:32.925 [DEBUG] [Thread-78867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:56:32.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:56:32.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:56:32.927 [DEBUG] [Thread-78867] [transport.py] [_log()] userauth is OK
2025-12-12T23:56:32.927 [DEBUG] [Thread-78867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:56:32.927 [DEBUG] [Thread-78867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:56:32.927 [DEBUG] [Thread-78867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:56:32.928 [DEBUG] [Thread-78867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:56:32.950 [INFO] [Thread-78867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:56:32.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:56:33.561 [DEBUG] [Thread-78867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:56:33.561 [DEBUG] [Thread-78867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:56:33.561 [DEBUG] [Thread-78867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:56:33.602 [DEBUG] [Thread-78867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:56:33.602 [DEBUG] [Thread-78867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:56:33.605 [DEBUG] [Thread-78867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:56:33.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:56:33.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:56:33.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:56:33.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:56:33.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:56:33.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:56:33.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.913987 -999.00   +8.40  42.10     92   +7.30 1 3 2 3 1     0    0 1.30 4.60 ZN... 42.0 42.1 310.8 51.1 9.8 -8.9 9.6 -3.8 9.3 -4.0 9.7 -5.0
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.913987
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:56:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:56:01', tmtdew=1.17, humidity=92.34, cloud=0.0, wind=42.31, temperature=8.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:56:08.477', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:55:00')
2025-12-12T23:56:33.622 [DEBUG] [Thread-78867] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:56:33.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:56:33.714 [DEBUG] [Thread-78870] [transport.py] [_log()] starting thread (client mode): 0xf5703670
2025-12-12T23:56:33.714 [DEBUG] [Thread-78870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:56:33.728 [DEBUG] [Thread-78870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:56:33.728 [INFO] [Thread-78870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] client lang: <none>
2025-12-12T23:56:33.736 [DEBUG] [Thread-78870] [transport.py] [_log()] server lang: <none>
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] kex follows: False
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] Compression: none
2025-12-12T23:56:33.737 [DEBUG] [Thread-78870] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:56:33.792 [DEBUG] [Thread-78870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:56:33.792 [DEBUG] [Thread-78870] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:56:33.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:56:33.793 [DEBUG] [Thread-78870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:56:33.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:56:33.850 [DEBUG] [Thread-78870] [transport.py] [_log()] userauth is OK
2025-12-12T23:56:33.850 [DEBUG] [Thread-78870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:56:33.850 [DEBUG] [Thread-78870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:56:33.850 [DEBUG] [Thread-78870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:56:33.850 [DEBUG] [Thread-78870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:56:33.864 [INFO] [Thread-78870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:56:33.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:56:33.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:56:34.723 [DEBUG] [Thread-78870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:56:34.723 [DEBUG] [Thread-78870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:56:34.771 [DEBUG] [Thread-78870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:56:34.771 [DEBUG] [Thread-78870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:56:34.780 [DEBUG] [Thread-78870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:56:34.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:56: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')
2025-12-12T23:56:34.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:56:34.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:56:34.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:56:34.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:56:34.812 [DEBUG] [Thread-78870] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:56:44.615 [DEBUG] [Thread-78872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:56:55.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:56:55.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:56:59.667 [DEBUG] [Thread-78873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:04.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:57:04.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:57:04.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
2025-12-12T23:57:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 56, 33), 1.16, 92.37, 0.0, 42.29, 8.52, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:57:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:56:33
2025-12-12T23:57:05.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:57:05.810 [DEBUG] [Thread-78874] [transport.py] [_log()] starting thread (client mode): 0xf81e52a0
2025-12-12T23:57:05.810 [DEBUG] [Thread-78874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:57:05.830 [DEBUG] [Thread-78874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:57:05.830 [INFO] [Thread-78874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] client lang: <none>
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] server lang: <none>
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] kex follows: False
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] Compression: none
2025-12-12T23:57:05.833 [DEBUG] [Thread-78874] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:57:05.848 [DEBUG] [Thread-78874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:57:05.848 [DEBUG] [Thread-78874] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:57:05.848 [DEBUG] [Thread-78874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:57:05.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:57:05.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:57:05.849 [DEBUG] [Thread-78874] [transport.py] [_log()] userauth is OK
2025-12-12T23:57:05.849 [DEBUG] [Thread-78874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:57:05.849 [DEBUG] [Thread-78874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:57:05.849 [DEBUG] [Thread-78874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:57:05.849 [DEBUG] [Thread-78874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:57:05.858 [INFO] [Thread-78874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:57:05.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:57:06.462 [DEBUG] [Thread-78874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:57:06.463 [DEBUG] [Thread-78874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:57:06.463 [DEBUG] [Thread-78874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:57:06.504 [DEBUG] [Thread-78874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:57:06.504 [DEBUG] [Thread-78874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:57:06.506 [DEBUG] [Thread-78874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:57:06.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:57:06.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:57:06.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:57:06.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:57:06.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:57:06.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:57:06.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.914334 -999.00   +8.50  46.78     92   +7.30 1 2 2 3 1     0    0 1.30 4.73 ZN... 45.8 46.8 315.2 52.7 9.8 -9.8 9.7 -10.8 9.3 -9.3 9.7 -9.1
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.914334
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:57:06.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:57:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:57:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:57:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-12T23:57:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:56:33', tmtdew=1.16, humidity=92.37, cloud=0.0, wind=42.29, temperature=8.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:56:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:55:00')
2025-12-12T23:57:06.527 [DEBUG] [Thread-78874] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:57:06.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:57:06.613 [DEBUG] [Thread-78877] [transport.py] [_log()] starting thread (client mode): 0xf572cfd0
2025-12-12T23:57:06.613 [DEBUG] [Thread-78877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:57:06.627 [DEBUG] [Thread-78877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:57:06.627 [INFO] [Thread-78877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] client lang: <none>
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] server lang: <none>
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] kex follows: False
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] Compression: none
2025-12-12T23:57:06.635 [DEBUG] [Thread-78877] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:57:06.693 [DEBUG] [Thread-78877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:57:06.694 [DEBUG] [Thread-78877] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:57:06.694 [DEBUG] [Thread-78877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:57:06.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:57:06.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:57:06.755 [DEBUG] [Thread-78877] [transport.py] [_log()] userauth is OK
2025-12-12T23:57:06.755 [DEBUG] [Thread-78877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:57:06.755 [DEBUG] [Thread-78877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:57:06.755 [DEBUG] [Thread-78877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:57:06.755 [DEBUG] [Thread-78877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:57:06.773 [INFO] [Thread-78877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:57:06.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:57:06.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:57:07.612 [DEBUG] [Thread-78877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:57:07.613 [DEBUG] [Thread-78877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:57:07.661 [DEBUG] [Thread-78877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:57:07.661 [DEBUG] [Thread-78877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:57:07.670 [DEBUG] [Thread-78877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:57:07.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:57:07.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:57:07.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:57:07.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:57:07.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:57:07.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:57:07.705 [DEBUG] [Thread-78877] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:57:14.698 [DEBUG] [Thread-78879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:22.893 [DEBUG] [Thread-78880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:29.750 [DEBUG] [Thread-78881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:37.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:57:37.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:57:37.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:57:38.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 57, 5), 1.16, 92.4, 0.0, 38.18, 8.57, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:57:38.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:57:05
2025-12-12T23:57:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:57:38.733 [DEBUG] [Thread-78882] [transport.py] [_log()] starting thread (client mode): 0xfabc5d80
2025-12-12T23:57:38.733 [DEBUG] [Thread-78882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:57:38.753 [DEBUG] [Thread-78882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:57:38.753 [INFO] [Thread-78882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] client lang: <none>
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] server lang: <none>
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] kex follows: False
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:57:38.756 [DEBUG] [Thread-78882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:57:38.757 [DEBUG] [Thread-78882] [transport.py] [_log()] Compression: none
2025-12-12T23:57:38.757 [DEBUG] [Thread-78882] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:57:38.772 [DEBUG] [Thread-78882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:57:38.772 [DEBUG] [Thread-78882] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:57:38.772 [DEBUG] [Thread-78882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:57:38.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:57:38.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:57:38.773 [DEBUG] [Thread-78882] [transport.py] [_log()] userauth is OK
2025-12-12T23:57:38.773 [DEBUG] [Thread-78882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:57:38.773 [DEBUG] [Thread-78882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:57:38.773 [DEBUG] [Thread-78882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:57:38.773 [DEBUG] [Thread-78882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:57:38.782 [INFO] [Thread-78882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:57:38.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:57:39.379 [DEBUG] [Thread-78882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:57:39.379 [DEBUG] [Thread-78882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:57:39.380 [DEBUG] [Thread-78882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:57:39.421 [DEBUG] [Thread-78882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:57:39.421 [DEBUG] [Thread-78882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:57:39.423 [DEBUG] [Thread-78882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:57:39.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:57:39.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:57:39.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:57:39.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:57:39.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:57:39.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:57:39.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.914681 -999.00   +8.40  53.27     92   +7.30 1 3 2 3 1     0    0 1.32 4.86 .N... 49.0 53.3 313.0 57.6 9.7 -12.6 9.6 -10.7 9.3 -8.3 9.7 -10.1
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.914681
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:57:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:57:05', tmtdew=1.16, humidity=92.4, cloud=0.0, wind=38.18, temperature=8.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:57:08.438', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:55:00')
2025-12-12T23:57:39.441 [DEBUG] [Thread-78882] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:57:39.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:57:39.527 [DEBUG] [Thread-78885] [transport.py] [_log()] starting thread (client mode): 0xf5701c60
2025-12-12T23:57:39.527 [DEBUG] [Thread-78885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:57:39.542 [DEBUG] [Thread-78885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:57:39.543 [INFO] [Thread-78885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] client lang: <none>
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] server lang: <none>
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] kex follows: False
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:57:39.550 [DEBUG] [Thread-78885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:57:39.551 [DEBUG] [Thread-78885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:57:39.551 [DEBUG] [Thread-78885] [transport.py] [_log()] Compression: none
2025-12-12T23:57:39.551 [DEBUG] [Thread-78885] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:57:39.609 [DEBUG] [Thread-78885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:57:39.609 [DEBUG] [Thread-78885] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:57:39.609 [DEBUG] [Thread-78885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:57:39.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:57:39.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:57:39.666 [DEBUG] [Thread-78885] [transport.py] [_log()] userauth is OK
2025-12-12T23:57:39.666 [DEBUG] [Thread-78885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:57:39.666 [DEBUG] [Thread-78885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:57:39.666 [DEBUG] [Thread-78885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:57:39.666 [DEBUG] [Thread-78885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:57:39.686 [INFO] [Thread-78885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:57:39.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:57:39.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:57:40.485 [DEBUG] [Thread-78885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:57:40.485 [DEBUG] [Thread-78885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:57:40.533 [DEBUG] [Thread-78885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:57:40.533 [DEBUG] [Thread-78885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:57:40.542 [DEBUG] [Thread-78885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:57:40.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:57:40.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:57:40.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:57:40.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:57:40.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:57:40.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:57:40.576 [DEBUG] [Thread-78885] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:57:44.779 [DEBUG] [Thread-78887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:55.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:55.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:57:59.821 [DEBUG] [Thread-78888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:58:10.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:58:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:58:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 57, 37), 1.15, 92.44, 0.0, 42.93, 8.55, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:58:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:57:37
2025-12-12T23:58:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:58:11.627 [DEBUG] [Thread-78889] [transport.py] [_log()] starting thread (client mode): 0xf5700e20
2025-12-12T23:58:11.627 [DEBUG] [Thread-78889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:58:11.647 [DEBUG] [Thread-78889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:58:11.647 [INFO] [Thread-78889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] client lang: <none>
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] server lang: <none>
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] kex follows: False
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] Compression: none
2025-12-12T23:58:11.650 [DEBUG] [Thread-78889] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:58:11.665 [DEBUG] [Thread-78889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:58:11.666 [DEBUG] [Thread-78889] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:58:11.666 [DEBUG] [Thread-78889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:58:11.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:58:11.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:58:11.667 [DEBUG] [Thread-78889] [transport.py] [_log()] userauth is OK
2025-12-12T23:58:11.667 [DEBUG] [Thread-78889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:58:11.667 [DEBUG] [Thread-78889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:58:11.667 [DEBUG] [Thread-78889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:58:11.667 [DEBUG] [Thread-78889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:58:11.682 [INFO] [Thread-78889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:58:11.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:58:12.321 [DEBUG] [Thread-78889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:58:12.321 [DEBUG] [Thread-78889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:58:12.321 [DEBUG] [Thread-78889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:58:12.362 [DEBUG] [Thread-78889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:58:12.362 [DEBUG] [Thread-78889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:58:12.365 [DEBUG] [Thread-78889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:58:12.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:58:12.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:58:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:58:12.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:58:12.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:58:12.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:58:12.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:58:12.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:58:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:58:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.915028 -999.00   +8.30  45.50     92   +7.20 1 3 2 3 1     0    0 1.28 4.28 .N... 37.5 45.5 313.0 52.3 9.7 -11.1 9.6 -9.5 9.3 -8.9 9.7 -10.5
2025-12-12T23:58:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:58:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:58:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.915028
2025-12-12T23:58:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:58:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:58:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:58:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:58:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:58:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:57:37', tmtdew=1.15, humidity=92.44, cloud=0.0, wind=42.93, temperature=8.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:57:38.419', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:55:00')
2025-12-12T23:58:12.390 [DEBUG] [Thread-78889] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:58:12.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:58:12.494 [DEBUG] [Thread-78892] [transport.py] [_log()] starting thread (client mode): 0xf57007c0
2025-12-12T23:58:12.495 [DEBUG] [Thread-78892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:58:12.509 [DEBUG] [Thread-78892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:58:12.509 [INFO] [Thread-78892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] client lang: <none>
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] server lang: <none>
2025-12-12T23:58:12.517 [DEBUG] [Thread-78892] [transport.py] [_log()] kex follows: False
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] Compression: none
2025-12-12T23:58:12.518 [DEBUG] [Thread-78892] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:58:12.576 [DEBUG] [Thread-78892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:58:12.576 [DEBUG] [Thread-78892] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:58:12.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:58:12.577 [DEBUG] [Thread-78892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:58:12.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:58:12.632 [DEBUG] [Thread-78892] [transport.py] [_log()] userauth is OK
2025-12-12T23:58:12.632 [DEBUG] [Thread-78892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:58:12.632 [DEBUG] [Thread-78892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:58:12.632 [DEBUG] [Thread-78892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:58:12.632 [DEBUG] [Thread-78892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:58:12.654 [INFO] [Thread-78892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:58:12.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:58:12.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:58:13.466 [DEBUG] [Thread-78892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:58:13.466 [DEBUG] [Thread-78892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:58:13.516 [DEBUG] [Thread-78892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:58:13.516 [DEBUG] [Thread-78892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:58:13.525 [DEBUG] [Thread-78892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:58:13.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:58:13.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:58:13.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:58:13.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:58:13.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:58:13.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:58:13.564 [DEBUG] [Thread-78892] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:58:14.847 [DEBUG] [Thread-78894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:22.978 [DEBUG] [Thread-78895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:29.891 [DEBUG] [Thread-78896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:43.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:58:43.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:58:43.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:58:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 58, 9), 1.15, 92.42, 0.0, 40.14, 8.52, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:58:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:58:09
2025-12-12T23:58:44.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:58:44.549 [DEBUG] [Thread-78897] [transport.py] [_log()] starting thread (client mode): 0xf578a380
2025-12-12T23:58:44.549 [DEBUG] [Thread-78897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:58:44.568 [DEBUG] [Thread-78897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:58:44.569 [INFO] [Thread-78897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] client lang: <none>
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] server lang: <none>
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] kex follows: False
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] Compression: none
2025-12-12T23:58:44.572 [DEBUG] [Thread-78897] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:58:44.588 [DEBUG] [Thread-78897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:58:44.589 [DEBUG] [Thread-78897] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:58:44.589 [DEBUG] [Thread-78897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:58:44.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:58:44.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:58:44.591 [DEBUG] [Thread-78897] [transport.py] [_log()] userauth is OK
2025-12-12T23:58:44.591 [DEBUG] [Thread-78897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:58:44.591 [DEBUG] [Thread-78897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:58:44.591 [DEBUG] [Thread-78897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:58:44.591 [DEBUG] [Thread-78897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:58:44.607 [INFO] [Thread-78897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:58:44.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:58:44.917 [DEBUG] [Thread-78899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:45.187 [DEBUG] [Thread-78897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:58:45.187 [DEBUG] [Thread-78897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:58:45.188 [DEBUG] [Thread-78897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:58:45.228 [DEBUG] [Thread-78897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:58:45.228 [DEBUG] [Thread-78897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:58:45.231 [DEBUG] [Thread-78897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:58:45.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:58:45.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:58:45.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:58:45.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:58:45.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:58:45.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:58:45.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:58:45.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:58:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:58:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.915723 -999.00   +8.40  38.33     92   +7.20 1 3 2 3 1     0    0 1.33 4.59 Z.E.W 39.6 38.3 317.0 42.6 9.7 -6.1 9.5 -5.9 9.3 -5.5 9.7 -4.6
2025-12-12T23:58:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:58:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:58:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.915723
2025-12-12T23:58:45.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:58:45.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:58:45.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:58:45.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:58:45.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:58:45.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:58:09', tmtdew=1.15, humidity=92.42, cloud=0.0, wind=40.14, temperature=8.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:58:38.467', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:55:00')
2025-12-12T23:58:45.256 [DEBUG] [Thread-78897] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:58:45.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:58:45.355 [DEBUG] [Thread-78901] [transport.py] [_log()] starting thread (client mode): 0xf572fac0
2025-12-12T23:58:45.355 [DEBUG] [Thread-78901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:58:45.370 [DEBUG] [Thread-78901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:58:45.370 [INFO] [Thread-78901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:58:45.377 [DEBUG] [Thread-78901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] client lang: <none>
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] server lang: <none>
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] kex follows: False
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] Compression: none
2025-12-12T23:58:45.378 [DEBUG] [Thread-78901] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:58:45.433 [DEBUG] [Thread-78901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:58:45.433 [DEBUG] [Thread-78901] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:58:45.434 [DEBUG] [Thread-78901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:58:45.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:58:45.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:58:45.490 [DEBUG] [Thread-78901] [transport.py] [_log()] userauth is OK
2025-12-12T23:58:45.490 [DEBUG] [Thread-78901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:58:45.490 [DEBUG] [Thread-78901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:58:45.490 [DEBUG] [Thread-78901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:58:45.491 [DEBUG] [Thread-78901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:58:45.510 [INFO] [Thread-78901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:58:45.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:58:45.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:58:46.329 [DEBUG] [Thread-78901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:58:46.329 [DEBUG] [Thread-78901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:58:46.377 [DEBUG] [Thread-78901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:58:46.377 [DEBUG] [Thread-78901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:58:46.386 [DEBUG] [Thread-78901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:58:46.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:58:46.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:58:46.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:58:46.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:58:46.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:58:46.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:58:46.421 [DEBUG] [Thread-78901] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:58:56.128 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:56.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:58:59.948 [DEBUG] [Thread-78903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:59:14.992 [DEBUG] [Thread-78904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:59:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:59:16.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:59:16.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:59:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 59, 13), 1.15, 92.44, 0.0, 34.46, 8.58, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:59:17.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:59:13
2025-12-12T23:59:17.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:59:17.406 [DEBUG] [Thread-78905] [transport.py] [_log()] starting thread (client mode): 0xf572dd20
2025-12-12T23:59:17.406 [DEBUG] [Thread-78905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:59:17.427 [DEBUG] [Thread-78905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:59:17.427 [INFO] [Thread-78905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:59:17.430 [DEBUG] [Thread-78905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:59:17.430 [DEBUG] [Thread-78905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:59:17.430 [DEBUG] [Thread-78905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] client lang: <none>
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] server lang: <none>
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] kex follows: False
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] Compression: none
2025-12-12T23:59:17.431 [DEBUG] [Thread-78905] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:59:17.446 [DEBUG] [Thread-78905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:59:17.446 [DEBUG] [Thread-78905] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:59:17.446 [DEBUG] [Thread-78905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:59:17.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:59:17.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:59:17.447 [DEBUG] [Thread-78905] [transport.py] [_log()] userauth is OK
2025-12-12T23:59:17.447 [DEBUG] [Thread-78905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:59:17.447 [DEBUG] [Thread-78905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:59:17.447 [DEBUG] [Thread-78905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:59:17.447 [DEBUG] [Thread-78905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:59:17.457 [INFO] [Thread-78905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:59:17.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:59:18.032 [DEBUG] [Thread-78905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:59:18.032 [DEBUG] [Thread-78905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:59:18.032 [DEBUG] [Thread-78905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:59:18.074 [DEBUG] [Thread-78905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:59:18.074 [DEBUG] [Thread-78905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:59:18.078 [DEBUG] [Thread-78905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:59:18.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:59:18.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:59:18.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:59:18.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:59:18.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:59:18.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:59:18.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.915723 -999.00   +8.40  38.33     92   +7.20 1 3 2 3 1     0    0 1.33 4.59 Z.E.W 39.6 38.3 317.0 42.6 9.7 -6.1 9.5 -5.9 9.3 -5.5 9.7 -4.6
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.915723
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:59:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:59:13', tmtdew=1.15, humidity=92.44, cloud=0.0, wind=34.46, temperature=8.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:58:38.467', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:58:00')
2025-12-12T23:59:18.100 [DEBUG] [Thread-78905] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:59:18.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:59:18.189 [DEBUG] [Thread-78908] [transport.py] [_log()] starting thread (client mode): 0xf5702590
2025-12-12T23:59:18.189 [DEBUG] [Thread-78908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:59:18.205 [DEBUG] [Thread-78908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:59:18.205 [INFO] [Thread-78908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] client lang: <none>
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] server lang: <none>
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] kex follows: False
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:59:18.212 [DEBUG] [Thread-78908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:59:18.213 [DEBUG] [Thread-78908] [transport.py] [_log()] Compression: none
2025-12-12T23:59:18.213 [DEBUG] [Thread-78908] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:59:18.270 [DEBUG] [Thread-78908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:59:18.270 [DEBUG] [Thread-78908] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:59:18.270 [DEBUG] [Thread-78908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:59:18.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:59:18.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:59:18.328 [DEBUG] [Thread-78908] [transport.py] [_log()] userauth is OK
2025-12-12T23:59:18.328 [DEBUG] [Thread-78908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:59:18.329 [DEBUG] [Thread-78908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:59:18.329 [DEBUG] [Thread-78908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:59:18.329 [DEBUG] [Thread-78908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:59:18.343 [INFO] [Thread-78908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:59:18.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:59:18.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:59:19.195 [DEBUG] [Thread-78908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:59:19.195 [DEBUG] [Thread-78908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:59:19.243 [DEBUG] [Thread-78908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:59:19.243 [DEBUG] [Thread-78908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:59:19.252 [DEBUG] [Thread-78908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:59:19.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:59:19.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:59:19.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:59:19.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:59:19.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:59:19.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:59:19.288 [DEBUG] [Thread-78908] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:59:23.074 [DEBUG] [Thread-78910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:59:30.021 [DEBUG] [Thread-78911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:59:45.076 [DEBUG] [Thread-78912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:59:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-12T23:59:49.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-12T23:59:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-12T23:59:49.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 12, 23, 59, 45), 1.11, 92.4, 0.0, 38.67, 8.5, 2, 2, 0, 2, 0, 0),)
2025-12-12T23:59:49.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-12 23:59:45
2025-12-12T23:59:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-12T23:59:50.264 [DEBUG] [Thread-78913] [transport.py] [_log()] starting thread (client mode): 0xf572f190
2025-12-12T23:59:50.264 [DEBUG] [Thread-78913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:59:50.285 [DEBUG] [Thread-78913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-12T23:59:50.285 [INFO] [Thread-78913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-12T23:59:50.288 [DEBUG] [Thread-78913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:59:50.288 [DEBUG] [Thread-78913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-12T23:59:50.288 [DEBUG] [Thread-78913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] client lang: <none>
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] server lang: <none>
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] kex follows: False
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] Compression: none
2025-12-12T23:59:50.289 [DEBUG] [Thread-78913] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:59:50.306 [DEBUG] [Thread-78913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:59:50.306 [DEBUG] [Thread-78913] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:59:50.307 [DEBUG] [Thread-78913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-12T23:59:50.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-12T23:59:50.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:59:50.309 [DEBUG] [Thread-78913] [transport.py] [_log()] userauth is OK
2025-12-12T23:59:50.309 [DEBUG] [Thread-78913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:59:50.309 [DEBUG] [Thread-78913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:59:50.309 [DEBUG] [Thread-78913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-12T23:59:50.309 [DEBUG] [Thread-78913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:59:50.333 [INFO] [Thread-78913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:59:50.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:59:51.115 [DEBUG] [Thread-78913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:59:51.116 [DEBUG] [Thread-78913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:59:51.116 [DEBUG] [Thread-78913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-12T23:59:51.157 [DEBUG] [Thread-78913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:59:51.157 [DEBUG] [Thread-78913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:59:51.159 [DEBUG] [Thread-78913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:59:51.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:59:51.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-12T23:59:51.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-12T23:59:51.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-12T23:59:51.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:59:51.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-12T23:59:51.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:59:51.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:59:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-12T23:59:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.916070 -999.00   +8.30  44.98     92   +7.20 1 3 2 3 1     0    0 1.31 4.38 ZNEs. 45.9 45.0 310.8 51.3 9.7 -7.1 9.6 -6.6 9.3 -6.0 9.6 -6.4
2025-12-12T23:59:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-12T23:59:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-12T23:59:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.916070
2025-12-12T23:59:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-12T23:59:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-12T23:59:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-12T23:59:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-12T23:59:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-12T23:59:51.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-12T23:59:45', tmtdew=1.11, humidity=92.4, cloud=0.0, wind=38.67, temperature=8.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:59:08.448', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:58:00')
2025-12-12T23:59:51.182 [DEBUG] [Thread-78913] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:59:51.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-12T23:59:51.275 [DEBUG] [Thread-78916] [transport.py] [_log()] starting thread (client mode): 0xf572e7a0
2025-12-12T23:59:51.275 [DEBUG] [Thread-78916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-12T23:59:51.290 [DEBUG] [Thread-78916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-12T23:59:51.291 [INFO] [Thread-78916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-12T23:59:51.298 [DEBUG] [Thread-78916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-12T23:59:51.298 [DEBUG] [Thread-78916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-12T23:59:51.298 [DEBUG] [Thread-78916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] client lang: <none>
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] server lang: <none>
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] kex follows: False
2025-12-12T23:59:51.299 [DEBUG] [Thread-78916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-12T23:59:51.300 [DEBUG] [Thread-78916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-12T23:59:51.300 [DEBUG] [Thread-78916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-12T23:59:51.300 [DEBUG] [Thread-78916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-12T23:59:51.300 [DEBUG] [Thread-78916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-12T23:59:51.300 [DEBUG] [Thread-78916] [transport.py] [_log()] Compression: none
2025-12-12T23:59:51.300 [DEBUG] [Thread-78916] [transport.py] [_log()] === End of kex handshake ===
2025-12-12T23:59:51.358 [DEBUG] [Thread-78916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-12T23:59:51.359 [DEBUG] [Thread-78916] [transport.py] [_log()] Switch to new keys ...
2025-12-12T23:59:51.359 [DEBUG] [Thread-78916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-12T23:59:51.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-12T23:59:51.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-12T23:59:51.417 [DEBUG] [Thread-78916] [transport.py] [_log()] userauth is OK
2025-12-12T23:59:51.417 [DEBUG] [Thread-78916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-12T23:59:51.417 [DEBUG] [Thread-78916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-12T23:59:51.417 [DEBUG] [Thread-78916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-12T23:59:51.417 [DEBUG] [Thread-78916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-12T23:59:51.436 [INFO] [Thread-78916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-12T23:59:51.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-12T23:59:51.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-12T23:59:52.251 [DEBUG] [Thread-78916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-12T23:59:52.251 [DEBUG] [Thread-78916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-12T23:59:52.299 [DEBUG] [Thread-78916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-12T23:59:52.300 [DEBUG] [Thread-78916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-12T23:59:52.308 [DEBUG] [Thread-78916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-12T23:59:52.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-12T23:59:52.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-12T23:59:52.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-12T23:59:52.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-12T23:59:52.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-12T23:59:52.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-12T23:59:52.339 [DEBUG] [Thread-78916] [transport.py] [_log()] EOF in transport thread
2025-12-12T23:59:56.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-12T23:59:56.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:00.103 [DEBUG] [Thread-78918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:15.146 [DEBUG] [Thread-78919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:22.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:00:22.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:00:22.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:00:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 0, 17), 1.11, 92.35, 0.0, 35.64, 8.48, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:00:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:00:17
2025-12-13T00:00:23.143 [DEBUG] [Thread-78920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:00:23.320 [DEBUG] [Thread-78921] [transport.py] [_log()] starting thread (client mode): 0xf572d2a0
2025-12-13T00:00:23.321 [DEBUG] [Thread-78921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:00:23.341 [DEBUG] [Thread-78921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:00:23.342 [INFO] [Thread-78921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] client lang: <none>
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] server lang: <none>
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] kex follows: False
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:00:23.345 [DEBUG] [Thread-78921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:00:23.346 [DEBUG] [Thread-78921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:00:23.346 [DEBUG] [Thread-78921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:00:23.346 [DEBUG] [Thread-78921] [transport.py] [_log()] Compression: none
2025-12-13T00:00:23.346 [DEBUG] [Thread-78921] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:00:23.364 [DEBUG] [Thread-78921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:00:23.365 [DEBUG] [Thread-78921] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:00:23.365 [DEBUG] [Thread-78921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:00:23.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:00:23.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:00:23.367 [DEBUG] [Thread-78921] [transport.py] [_log()] userauth is OK
2025-12-13T00:00:23.367 [DEBUG] [Thread-78921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:00:23.367 [DEBUG] [Thread-78921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:00:23.367 [DEBUG] [Thread-78921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:00:23.368 [DEBUG] [Thread-78921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:00:23.391 [INFO] [Thread-78921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:00:23.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:00:26.048 [DEBUG] [Thread-78921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:00:26.049 [DEBUG] [Thread-78921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:00:26.049 [DEBUG] [Thread-78921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:00:26.090 [DEBUG] [Thread-78921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:00:26.090 [DEBUG] [Thread-78921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:00:26.093 [DEBUG] [Thread-78921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:00:26.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:00:26.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:00:26.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:00:26.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:00:26.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:00:26.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:00:26.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:00:26.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:00:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:00:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.916417 -999.00   +8.30  39.03     92   +7.20 1 3 2 3 1     0    0 1.30 4.25 ZNEs. 42.0 39.0 326.9 52.5 9.7 -3.7 9.5 -4.7 9.3 -2.8 9.6 -3.1
2025-12-13T00:00:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:00:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:00:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.916417
2025-12-13T00:00:26.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:00:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:00:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:00:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:00:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:00:26.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:00:17', tmtdew=1.11, humidity=92.35, cloud=0.0, wind=35.64, temperature=8.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T21:59:38.429', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:58:00')
2025-12-13T00:00:26.120 [DEBUG] [Thread-78921] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:00:26.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:00:26.217 [DEBUG] [Thread-78924] [transport.py] [_log()] starting thread (client mode): 0xf57717b0
2025-12-13T00:00:26.217 [DEBUG] [Thread-78924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:00:26.232 [DEBUG] [Thread-78924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:00:26.232 [INFO] [Thread-78924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:00:26.240 [DEBUG] [Thread-78924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:00:26.240 [DEBUG] [Thread-78924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:00:26.240 [DEBUG] [Thread-78924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:00:26.240 [DEBUG] [Thread-78924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] client lang: <none>
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] server lang: <none>
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] kex follows: False
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] Compression: none
2025-12-13T00:00:26.241 [DEBUG] [Thread-78924] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:00:26.299 [DEBUG] [Thread-78924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:00:26.299 [DEBUG] [Thread-78924] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:00:26.300 [DEBUG] [Thread-78924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:00:26.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:00:26.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:00:26.355 [DEBUG] [Thread-78924] [transport.py] [_log()] userauth is OK
2025-12-13T00:00:26.356 [DEBUG] [Thread-78924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:00:26.356 [DEBUG] [Thread-78924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:00:26.356 [DEBUG] [Thread-78924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:00:26.356 [DEBUG] [Thread-78924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:00:26.376 [INFO] [Thread-78924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:00:26.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:00:26.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:00:27.230 [DEBUG] [Thread-78924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:00:27.230 [DEBUG] [Thread-78924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:00:27.279 [DEBUG] [Thread-78924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:00:27.280 [DEBUG] [Thread-78924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:00:27.288 [DEBUG] [Thread-78924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:00:27.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:00:27.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:00:27.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:00:27.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:00:27.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:00:27.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:00:27.325 [DEBUG] [Thread-78924] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:00:30.177 [DEBUG] [Thread-78926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:45.218 [DEBUG] [Thread-78927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:56.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:56.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:00:57.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:00:57.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:00:57.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:00:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 0, 49), 1.16, 92.4, 0.0, 42.15, 8.43, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:00:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:00:49
2025-12-13T00:00:58.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:00:58.287 [DEBUG] [Thread-78928] [transport.py] [_log()] starting thread (client mode): 0xf572f190
2025-12-13T00:00:58.287 [DEBUG] [Thread-78928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:00:58.303 [DEBUG] [Thread-78928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:00:58.303 [INFO] [Thread-78928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] client lang: <none>
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] server lang: <none>
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] kex follows: False
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] Compression: none
2025-12-13T00:00:58.305 [DEBUG] [Thread-78928] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:00:58.316 [DEBUG] [Thread-78928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:00:58.317 [DEBUG] [Thread-78928] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:00:58.317 [DEBUG] [Thread-78928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:00:58.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:00:58.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:00:58.318 [DEBUG] [Thread-78928] [transport.py] [_log()] userauth is OK
2025-12-13T00:00:58.318 [DEBUG] [Thread-78928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:00:58.318 [DEBUG] [Thread-78928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:00:58.319 [DEBUG] [Thread-78928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:00:58.319 [DEBUG] [Thread-78928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:00:58.341 [INFO] [Thread-78928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:00:58.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:00:58.973 [DEBUG] [Thread-78928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:00:58.973 [DEBUG] [Thread-78928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:00:58.974 [DEBUG] [Thread-78928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:00:59.014 [DEBUG] [Thread-78928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:00:59.014 [DEBUG] [Thread-78928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:00:59.017 [DEBUG] [Thread-78928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:00:59.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:00:59.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:00:59.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:00:59.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:00:59.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:00:59.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:00:59.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:00:59.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:00:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:00:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.916764 -999.00   +8.30  55.06     92   +7.20 1 3 2 3 1     0    0 1.34 4.66 zN... 54.4 55.1 312.2 60.8 9.7 -3.0 9.5 -2.6 9.3 -2.3 9.7 -2.8
2025-12-13T00:00:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:00:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:00:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.916764
2025-12-13T00:00:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:00:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:00:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:00:59.042 [DEBUG] [Thread-78928] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:00:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:00:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:00:59.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:00:49', tmtdew=1.16, humidity=92.4, cloud=0.0, wind=42.15, temperature=8.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:00:08.410', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:58:00')
2025-12-13T00:00:59.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:00:59.140 [DEBUG] [Thread-78931] [transport.py] [_log()] starting thread (client mode): 0xf5701ea0
2025-12-13T00:00:59.140 [DEBUG] [Thread-78931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:00:59.155 [DEBUG] [Thread-78931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:00:59.155 [INFO] [Thread-78931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] client lang: <none>
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] server lang: <none>
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] kex follows: False
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:00:59.163 [DEBUG] [Thread-78931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:00:59.164 [DEBUG] [Thread-78931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:00:59.164 [DEBUG] [Thread-78931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:00:59.164 [DEBUG] [Thread-78931] [transport.py] [_log()] Compression: none
2025-12-13T00:00:59.164 [DEBUG] [Thread-78931] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:00:59.220 [DEBUG] [Thread-78931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:00:59.221 [DEBUG] [Thread-78931] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:00:59.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:00:59.222 [DEBUG] [Thread-78931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:00:59.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:00:59.277 [DEBUG] [Thread-78931] [transport.py] [_log()] userauth is OK
2025-12-13T00:00:59.277 [DEBUG] [Thread-78931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:00:59.277 [DEBUG] [Thread-78931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:00:59.277 [DEBUG] [Thread-78931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:00:59.278 [DEBUG] [Thread-78931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:00:59.300 [INFO] [Thread-78931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:00:59.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:00:59.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:01:00.141 [DEBUG] [Thread-78931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:01:00.141 [DEBUG] [Thread-78931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:01:00.189 [DEBUG] [Thread-78931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:01:00.189 [DEBUG] [Thread-78931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:01:00.198 [DEBUG] [Thread-78931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:01:00.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:01:00.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:01:00.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:01:00.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:01:00.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:01:00.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:01:00.233 [DEBUG] [Thread-78931] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:01:00.250 [DEBUG] [Thread-78933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:01:15.300 [DEBUG] [Thread-78934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:01:23.211 [DEBUG] [Thread-78935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:01:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:01:30.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:01:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:01:30.328 [DEBUG] [Thread-78936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:01:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 1, 21), 1.16, 92.35, 0.0, 35.18, 8.37, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:01:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:01:21
2025-12-13T00:01:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:01:31.217 [DEBUG] [Thread-78937] [transport.py] [_log()] starting thread (client mode): 0xf5741db0
2025-12-13T00:01:31.217 [DEBUG] [Thread-78937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:01:31.237 [DEBUG] [Thread-78937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:01:31.237 [INFO] [Thread-78937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:01:31.240 [DEBUG] [Thread-78937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:01:31.240 [DEBUG] [Thread-78937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:01:31.240 [DEBUG] [Thread-78937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:01:31.240 [DEBUG] [Thread-78937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:01:31.240 [DEBUG] [Thread-78937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:01:31.240 [DEBUG] [Thread-78937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] client lang: <none>
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] server lang: <none>
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] kex follows: False
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] Compression: none
2025-12-13T00:01:31.241 [DEBUG] [Thread-78937] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:01:31.258 [DEBUG] [Thread-78937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:01:31.258 [DEBUG] [Thread-78937] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:01:31.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:01:31.259 [DEBUG] [Thread-78937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:01:31.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:01:31.262 [DEBUG] [Thread-78937] [transport.py] [_log()] userauth is OK
2025-12-13T00:01:31.262 [DEBUG] [Thread-78937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:01:31.262 [DEBUG] [Thread-78937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:01:31.262 [DEBUG] [Thread-78937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:01:31.262 [DEBUG] [Thread-78937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:01:31.286 [INFO] [Thread-78937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:01:31.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:01:32.018 [DEBUG] [Thread-78937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:01:32.018 [DEBUG] [Thread-78937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:01:32.019 [DEBUG] [Thread-78937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:01:32.059 [DEBUG] [Thread-78937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:01:32.059 [DEBUG] [Thread-78937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:01:32.062 [DEBUG] [Thread-78937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:01:32.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:01:32.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:01:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:01:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:01:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:01:32.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:01:32.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:01:32.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:01:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:01:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.917112 -999.00   +8.40  35.63     92   +7.20 1 3 2 3 1     0    0 1.34 5.20 ..E.. 40.2 35.6 323.8 57.0 9.7 -2.7 9.5 -2.2 9.3 -1.9 9.6 -2.3
2025-12-13T00:01:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:01:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:01:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.917112
2025-12-13T00:01:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:01:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:01:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:01:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:01:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:01:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:01:21', tmtdew=1.16, humidity=92.35, cloud=0.0, wind=35.18, temperature=8.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:00:38.477', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.0154999999999994, 2.0735, nan, 2.962999999999999, nan, nan, nan, 1.2719999999999994, 1.1832500000000001, 1.5095, 2.7154999999999987, nan, 1.581999999999999, nan, 1.9727500000000004, 1.6477500000000003, 0.9239999999999995, 1.0955000000000004, 1.1397500000000003, nan, nan, nan, 1.9940000000000007, nan, 1.026749999999999], zp_timestamp='2025-12-12T21:58:00')
2025-12-13T00:01:32.088 [DEBUG] [Thread-78937] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:01:32.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:01:32.185 [DEBUG] [Thread-78940] [transport.py] [_log()] starting thread (client mode): 0xf57c88b0
2025-12-13T00:01:32.185 [DEBUG] [Thread-78940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:01:32.202 [DEBUG] [Thread-78940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:01:32.202 [INFO] [Thread-78940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:01:32.210 [DEBUG] [Thread-78940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] client lang: <none>
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] server lang: <none>
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] kex follows: False
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:01:32.211 [DEBUG] [Thread-78940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:01:32.212 [DEBUG] [Thread-78940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:01:32.212 [DEBUG] [Thread-78940] [transport.py] [_log()] Compression: none
2025-12-13T00:01:32.212 [DEBUG] [Thread-78940] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:01:32.275 [DEBUG] [Thread-78940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:01:32.276 [DEBUG] [Thread-78940] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:01:32.276 [DEBUG] [Thread-78940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:01:32.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:01:32.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:01:32.340 [DEBUG] [Thread-78940] [transport.py] [_log()] userauth is OK
2025-12-13T00:01:32.340 [DEBUG] [Thread-78940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:01:32.340 [DEBUG] [Thread-78940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:01:32.341 [DEBUG] [Thread-78940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:01:32.341 [DEBUG] [Thread-78940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:01:32.363 [INFO] [Thread-78940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:01:32.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:01:32.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:01:33.207 [DEBUG] [Thread-78940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:01:33.207 [DEBUG] [Thread-78940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:01:33.255 [DEBUG] [Thread-78940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:01:33.255 [DEBUG] [Thread-78940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:01:33.263 [DEBUG] [Thread-78940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:01:33.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:01:33.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:01:33.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:01:33.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:01:33.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:01:33.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:01:33.296 [DEBUG] [Thread-78940] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:01:45.354 [DEBUG] [Thread-78942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:01:56.746 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:01:56.748 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:00.395 [DEBUG] [Thread-78943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:03.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:02:03.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:02:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:02:03.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 1, 53), 1.16, 92.39, 0.0, 43.67, 8.33, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:02:03.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:01:53
2025-12-13T00:02:04.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:02:04.267 [DEBUG] [Thread-78944] [transport.py] [_log()] starting thread (client mode): 0xf57ca530
2025-12-13T00:02:04.267 [DEBUG] [Thread-78944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:02:04.287 [DEBUG] [Thread-78944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:02:04.287 [INFO] [Thread-78944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] client lang: <none>
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] server lang: <none>
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] kex follows: False
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:02:04.291 [DEBUG] [Thread-78944] [transport.py] [_log()] Compression: none
2025-12-13T00:02:04.292 [DEBUG] [Thread-78944] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:02:04.309 [DEBUG] [Thread-78944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:02:04.309 [DEBUG] [Thread-78944] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:02:04.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:02:04.310 [DEBUG] [Thread-78944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:02:04.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:02:04.312 [DEBUG] [Thread-78944] [transport.py] [_log()] userauth is OK
2025-12-13T00:02:04.313 [DEBUG] [Thread-78944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:02:04.313 [DEBUG] [Thread-78944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:02:04.313 [DEBUG] [Thread-78944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:02:04.313 [DEBUG] [Thread-78944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:02:04.336 [INFO] [Thread-78944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:02:04.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:02:04.969 [DEBUG] [Thread-78944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:02:04.970 [DEBUG] [Thread-78944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:02:04.970 [DEBUG] [Thread-78944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:02:05.011 [DEBUG] [Thread-78944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:02:05.011 [DEBUG] [Thread-78944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:02:05.018 [DEBUG] [Thread-78944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:02:05.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:02:05.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:02:05.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:02:05.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:02:05.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:02:05.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:02:05.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:02:05.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:02:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:02:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.917459 -999.00   +8.40  47.22     92   +7.20 1 3 2 3 1     0    0 1.32 5.22 ..E.. 54.3 47.2 315.8 61.2 9.8 -9.2 9.6 -2.1 9.3 -2.3 9.6 -4.1
2025-12-13T00:02:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:02:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:02:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.917459
2025-12-13T00:02:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:02:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:02:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:02:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:02:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:02:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:01:53', tmtdew=1.16, humidity=92.39, cloud=0.0, wind=43.67, temperature=8.33, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:01:08.458', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:01:00')
2025-12-13T00:02:05.043 [DEBUG] [Thread-78944] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:02:05.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:02:05.141 [DEBUG] [Thread-78947] [transport.py] [_log()] starting thread (client mode): 0xf5703eb0
2025-12-13T00:02:05.141 [DEBUG] [Thread-78947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:02:05.156 [DEBUG] [Thread-78947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:02:05.156 [INFO] [Thread-78947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:02:05.163 [DEBUG] [Thread-78947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] client lang: <none>
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] server lang: <none>
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] kex follows: False
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] Compression: none
2025-12-13T00:02:05.164 [DEBUG] [Thread-78947] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:02:05.223 [DEBUG] [Thread-78947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:02:05.223 [DEBUG] [Thread-78947] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:02:05.224 [DEBUG] [Thread-78947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:02:05.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:02:05.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:02:05.279 [DEBUG] [Thread-78947] [transport.py] [_log()] userauth is OK
2025-12-13T00:02:05.279 [DEBUG] [Thread-78947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:02:05.279 [DEBUG] [Thread-78947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:02:05.280 [DEBUG] [Thread-78947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:02:05.280 [DEBUG] [Thread-78947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:02:05.299 [INFO] [Thread-78947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:02:05.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:02:05.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:02:06.108 [DEBUG] [Thread-78947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:02:06.108 [DEBUG] [Thread-78947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:02:06.156 [DEBUG] [Thread-78947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:02:06.156 [DEBUG] [Thread-78947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:02:06.164 [DEBUG] [Thread-78947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:02:06.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:02:06.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:02:06.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:02:06.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:02:06.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:02:06.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:02:06.207 [DEBUG] [Thread-78947] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:02:15.429 [DEBUG] [Thread-78949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:23.295 [DEBUG] [Thread-78950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:30.471 [DEBUG] [Thread-78951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:36.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:02:36.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:02:36.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:02:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 2, 25), 1.16, 92.4, 0.0, 45.06, 8.42, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:02:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:02:25
2025-12-13T00:02:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:02:37.174 [DEBUG] [Thread-78952] [transport.py] [_log()] starting thread (client mode): 0xf5742ec0
2025-12-13T00:02:37.174 [DEBUG] [Thread-78952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:02:37.194 [DEBUG] [Thread-78952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:02:37.195 [INFO] [Thread-78952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] client lang: <none>
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] server lang: <none>
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] kex follows: False
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:02:37.198 [DEBUG] [Thread-78952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:02:37.199 [DEBUG] [Thread-78952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:02:37.199 [DEBUG] [Thread-78952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:02:37.199 [DEBUG] [Thread-78952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:02:37.199 [DEBUG] [Thread-78952] [transport.py] [_log()] Compression: none
2025-12-13T00:02:37.199 [DEBUG] [Thread-78952] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:02:37.214 [DEBUG] [Thread-78952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:02:37.215 [DEBUG] [Thread-78952] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:02:37.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:02:37.215 [DEBUG] [Thread-78952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:02:37.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:02:37.216 [DEBUG] [Thread-78952] [transport.py] [_log()] userauth is OK
2025-12-13T00:02:37.216 [DEBUG] [Thread-78952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:02:37.216 [DEBUG] [Thread-78952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:02:37.216 [DEBUG] [Thread-78952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:02:37.216 [DEBUG] [Thread-78952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:02:37.228 [INFO] [Thread-78952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:02:37.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:02:37.941 [DEBUG] [Thread-78952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:02:37.942 [DEBUG] [Thread-78952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:02:37.942 [DEBUG] [Thread-78952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:02:37.983 [DEBUG] [Thread-78952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:02:37.984 [DEBUG] [Thread-78952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:02:37.987 [DEBUG] [Thread-78952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:02:38.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:02:38.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:02:38.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:02:38.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:02:38.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:02:38.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:02:38.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:02:38.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:02:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:02:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.918153 -999.00   +8.30  36.18     92   +7.10 1 3 2 3 1     0    0 1.31 5.09 zN..W 38.9 36.2 313.0 46.8 9.7 -4.1 9.5 -11.0 9.2 -7.6 9.5 -5.9
2025-12-13T00:02:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:02:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:02:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.918153
2025-12-13T00:02:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:02:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:02:25', tmtdew=1.16, humidity=92.4, cloud=0.0, wind=45.06, temperature=8.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:02:08.419', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:01:00')
2025-12-13T00:02:38.014 [DEBUG] [Thread-78952] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:02:38.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:02:38.110 [DEBUG] [Thread-78955] [transport.py] [_log()] starting thread (client mode): 0xf57710c0
2025-12-13T00:02:38.110 [DEBUG] [Thread-78955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:02:38.129 [DEBUG] [Thread-78955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:02:38.129 [INFO] [Thread-78955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:02:38.137 [DEBUG] [Thread-78955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] client lang: <none>
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] server lang: <none>
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] kex follows: False
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:02:38.138 [DEBUG] [Thread-78955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:02:38.139 [DEBUG] [Thread-78955] [transport.py] [_log()] Compression: none
2025-12-13T00:02:38.139 [DEBUG] [Thread-78955] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:02:38.196 [DEBUG] [Thread-78955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:02:38.197 [DEBUG] [Thread-78955] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:02:38.198 [DEBUG] [Thread-78955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:02:38.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:02:38.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:02:38.253 [DEBUG] [Thread-78955] [transport.py] [_log()] userauth is OK
2025-12-13T00:02:38.253 [DEBUG] [Thread-78955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:02:38.253 [DEBUG] [Thread-78955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:02:38.253 [DEBUG] [Thread-78955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:02:38.253 [DEBUG] [Thread-78955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:02:38.276 [INFO] [Thread-78955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:02:38.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:02:38.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:02:39.087 [DEBUG] [Thread-78955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:02:39.087 [DEBUG] [Thread-78955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:02:39.135 [DEBUG] [Thread-78955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:02:39.135 [DEBUG] [Thread-78955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:02:39.144 [DEBUG] [Thread-78955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:02:39.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:02:39.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:02:39.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:02:39.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:02:39.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:02:39.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:02:39.178 [DEBUG] [Thread-78955] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:02:45.496 [DEBUG] [Thread-78957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:56.954 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:02:56.955 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:00.546 [DEBUG] [Thread-78958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:03:09.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:03:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:03:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 2, 57), 1.2, 92.44, 0.0, 39.31, 8.48, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:03:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:02:57
2025-12-13T00:03:10.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:03:10.197 [DEBUG] [Thread-78959] [transport.py] [_log()] starting thread (client mode): 0xf5741840
2025-12-13T00:03:10.197 [DEBUG] [Thread-78959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:03:10.217 [DEBUG] [Thread-78959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:03:10.217 [INFO] [Thread-78959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] client lang: <none>
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] server lang: <none>
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] kex follows: False
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] Compression: none
2025-12-13T00:03:10.220 [DEBUG] [Thread-78959] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:03:10.238 [DEBUG] [Thread-78959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:03:10.239 [DEBUG] [Thread-78959] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:03:10.239 [DEBUG] [Thread-78959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:03:10.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:03:10.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:03:10.240 [DEBUG] [Thread-78959] [transport.py] [_log()] userauth is OK
2025-12-13T00:03:10.240 [DEBUG] [Thread-78959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:03:10.240 [DEBUG] [Thread-78959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:03:10.240 [DEBUG] [Thread-78959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:03:10.240 [DEBUG] [Thread-78959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:03:10.267 [INFO] [Thread-78959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:03:10.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:03:10.863 [DEBUG] [Thread-78959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:03:10.863 [DEBUG] [Thread-78959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:03:10.863 [DEBUG] [Thread-78959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:03:10.904 [DEBUG] [Thread-78959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:03:10.904 [DEBUG] [Thread-78959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:03:10.906 [DEBUG] [Thread-78959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:03:10.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:03:10.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:03:10.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:03:10.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:03:10.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:03:10.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:03:10.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.918500 -999.00   +8.40  39.49     92   +7.20 1 3 2 3 1     0    0 1.30 4.89 zN..W 48.1 39.5 318.6 46.0 9.7 -5.9 9.5 -3.0 9.2 -3.0 9.5 -4.0
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.918500
2025-12-13T00:03:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:03:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:03:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:03:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:03:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:03:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:02:57', tmtdew=1.2, humidity=92.44, cloud=0.0, wind=39.31, temperature=8.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:02:38.400', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:01:00')
2025-12-13T00:03:10.927 [DEBUG] [Thread-78959] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:03:11.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:03:11.012 [DEBUG] [Thread-78962] [transport.py] [_log()] starting thread (client mode): 0xf572f910
2025-12-13T00:03:11.012 [DEBUG] [Thread-78962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:03:11.027 [DEBUG] [Thread-78962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:03:11.027 [INFO] [Thread-78962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:03:11.034 [DEBUG] [Thread-78962] [transport.py] [_log()] client lang: <none>
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] server lang: <none>
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] kex follows: False
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] Compression: none
2025-12-13T00:03:11.035 [DEBUG] [Thread-78962] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:03:11.093 [DEBUG] [Thread-78962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:03:11.093 [DEBUG] [Thread-78962] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:03:11.093 [DEBUG] [Thread-78962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:03:11.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:03:11.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:03:11.149 [DEBUG] [Thread-78962] [transport.py] [_log()] userauth is OK
2025-12-13T00:03:11.149 [DEBUG] [Thread-78962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:03:11.149 [DEBUG] [Thread-78962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:03:11.149 [DEBUG] [Thread-78962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:03:11.149 [DEBUG] [Thread-78962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:03:11.163 [INFO] [Thread-78962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:03:11.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:03:11.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:03:12.004 [DEBUG] [Thread-78962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:03:12.004 [DEBUG] [Thread-78962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:03:12.052 [DEBUG] [Thread-78962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:03:12.052 [DEBUG] [Thread-78962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:03:12.060 [DEBUG] [Thread-78962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:03:12.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:03:12.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:03:12.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:03:12.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:03:12.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:03:12.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:03:12.093 [DEBUG] [Thread-78962] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:03:15.576 [DEBUG] [Thread-78964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:23.369 [DEBUG] [Thread-78965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:30.623 [DEBUG] [Thread-78966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:42.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:03:42.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:03:42.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:03:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 3, 29), 1.2, 92.44, 0.0, 37.4, 8.5, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:03:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:03:29
2025-12-13T00:03:42.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:03:43.074 [DEBUG] [Thread-78967] [transport.py] [_log()] starting thread (client mode): 0xfabc6da0
2025-12-13T00:03:43.074 [DEBUG] [Thread-78967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:03:43.093 [DEBUG] [Thread-78967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:03:43.093 [INFO] [Thread-78967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:03:43.094 [DEBUG] [Thread-78967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] client lang: <none>
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] server lang: <none>
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] kex follows: False
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:03:43.095 [DEBUG] [Thread-78967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:03:43.096 [DEBUG] [Thread-78967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:03:43.096 [DEBUG] [Thread-78967] [transport.py] [_log()] Compression: none
2025-12-13T00:03:43.096 [DEBUG] [Thread-78967] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:03:43.117 [DEBUG] [Thread-78967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:03:43.118 [DEBUG] [Thread-78967] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:03:43.119 [DEBUG] [Thread-78967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:03:43.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:03:43.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:03:43.121 [DEBUG] [Thread-78967] [transport.py] [_log()] userauth is OK
2025-12-13T00:03:43.121 [DEBUG] [Thread-78967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:03:43.121 [DEBUG] [Thread-78967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:03:43.122 [DEBUG] [Thread-78967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:03:43.122 [DEBUG] [Thread-78967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:03:43.139 [INFO] [Thread-78967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:03:43.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:03:43.866 [DEBUG] [Thread-78967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:03:43.866 [DEBUG] [Thread-78967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:03:43.867 [DEBUG] [Thread-78967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:03:43.907 [DEBUG] [Thread-78967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:03:43.907 [DEBUG] [Thread-78967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:03:43.910 [DEBUG] [Thread-78967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:03:43.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:03:43.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:03:43.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:03:43.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:03:43.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:03:43.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:03:43.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:03:43.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:03:43.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:03:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.918848 -999.00   +8.40  43.24     92   +7.20 1 2 2 3 1     0    0 1.30 5.12 ZNE.. 46.2 43.2 314.2 54.7 9.7 -15.9 9.5 -9.1 9.3 -11.1 9.6 -15.3
2025-12-13T00:03:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:03:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:03:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.918848
2025-12-13T00:03:43.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:03:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:03:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:03:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:03:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:03:43.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:03:29', tmtdew=1.2, humidity=92.44, cloud=0.0, wind=37.4, temperature=8.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:03:08.467', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:01:00')
2025-12-13T00:03:43.937 [DEBUG] [Thread-78967] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:03:44.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:03:44.032 [DEBUG] [Thread-78970] [transport.py] [_log()] starting thread (client mode): 0xf81e6260
2025-12-13T00:03:44.032 [DEBUG] [Thread-78970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:03:44.047 [DEBUG] [Thread-78970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:03:44.047 [INFO] [Thread-78970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:44.054 [DEBUG] [Thread-78970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] client lang: <none>
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] server lang: <none>
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] kex follows: False
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] Compression: none
2025-12-13T00:03:44.055 [DEBUG] [Thread-78970] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:03:44.110 [DEBUG] [Thread-78970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:03:44.111 [DEBUG] [Thread-78970] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:03:44.111 [DEBUG] [Thread-78970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:03:44.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:03:44.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:03:44.167 [DEBUG] [Thread-78970] [transport.py] [_log()] userauth is OK
2025-12-13T00:03:44.167 [DEBUG] [Thread-78970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:03:44.167 [DEBUG] [Thread-78970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:03:44.167 [DEBUG] [Thread-78970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:03:44.167 [DEBUG] [Thread-78970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:03:44.187 [INFO] [Thread-78970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:03:44.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:03:44.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:03:45.043 [DEBUG] [Thread-78970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:03:45.043 [DEBUG] [Thread-78970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:03:45.091 [DEBUG] [Thread-78970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:03:45.091 [DEBUG] [Thread-78970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:03:45.100 [DEBUG] [Thread-78970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:03:45.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:03:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:03:45.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:03:45.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:03:45.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:03:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:03:45.133 [DEBUG] [Thread-78970] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:03:45.648 [DEBUG] [Thread-78972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:57.162 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:03:57.164 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:00.693 [DEBUG] [Thread-78973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:15.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:04:15.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:04:15.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:04:15.719 [DEBUG] [Thread-78974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 4, 1), 1.21, 92.39, 0.0, 39.06, 8.48, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:04:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:04:01
2025-12-13T00:04:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:04:16.111 [DEBUG] [Thread-78975] [transport.py] [_log()] starting thread (client mode): 0xfabc5930
2025-12-13T00:04:16.111 [DEBUG] [Thread-78975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:04:16.131 [DEBUG] [Thread-78975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:04:16.131 [INFO] [Thread-78975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] client lang: <none>
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] server lang: <none>
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] kex follows: False
2025-12-13T00:04:16.134 [DEBUG] [Thread-78975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:04:16.135 [DEBUG] [Thread-78975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:04:16.135 [DEBUG] [Thread-78975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:04:16.135 [DEBUG] [Thread-78975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:04:16.135 [DEBUG] [Thread-78975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:04:16.135 [DEBUG] [Thread-78975] [transport.py] [_log()] Compression: none
2025-12-13T00:04:16.135 [DEBUG] [Thread-78975] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:04:16.149 [DEBUG] [Thread-78975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:04:16.150 [DEBUG] [Thread-78975] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:04:16.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:04:16.151 [DEBUG] [Thread-78975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:04:16.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:04:16.152 [DEBUG] [Thread-78975] [transport.py] [_log()] userauth is OK
2025-12-13T00:04:16.153 [DEBUG] [Thread-78975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:04:16.153 [DEBUG] [Thread-78975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:04:16.153 [DEBUG] [Thread-78975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:04:16.153 [DEBUG] [Thread-78975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:04:16.177 [INFO] [Thread-78975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:04:16.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:04:16.814 [DEBUG] [Thread-78975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:04:16.814 [DEBUG] [Thread-78975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:04:16.814 [DEBUG] [Thread-78975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:04:16.855 [DEBUG] [Thread-78975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:04:16.856 [DEBUG] [Thread-78975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:04:16.859 [DEBUG] [Thread-78975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:04:16.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:04:16.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:04:16.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:04:16.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:04:16.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:04:16.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:04:16.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:04:16.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:04:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:04:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.919195 -999.00   +8.40  50.03     92   +7.10 1 2 2 3 1     0    0 1.32 4.74 ZNE.. 43.9 50.0 312.4 54.4 9.6 -19.1 9.5 -12.4 9.2 -13.5 9.6 -17.1
2025-12-13T00:04:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:04:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:04:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.919195
2025-12-13T00:04:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:04:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:04:16.889 [DEBUG] [Thread-78975] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:04:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:04:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:04:16.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:04:16.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:04:01', tmtdew=1.21, humidity=92.39, cloud=0.0, wind=39.06, temperature=8.48, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:03:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:01:00')
2025-12-13T00:04:16.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:04:16.987 [DEBUG] [Thread-78978] [transport.py] [_log()] starting thread (client mode): 0xf5788d00
2025-12-13T00:04:16.987 [DEBUG] [Thread-78978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:04:17.002 [DEBUG] [Thread-78978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:04:17.002 [INFO] [Thread-78978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:04:17.009 [DEBUG] [Thread-78978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] client lang: <none>
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] server lang: <none>
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] kex follows: False
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] Compression: none
2025-12-13T00:04:17.010 [DEBUG] [Thread-78978] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:04:17.067 [DEBUG] [Thread-78978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:04:17.068 [DEBUG] [Thread-78978] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:04:17.068 [DEBUG] [Thread-78978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:04:17.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:04:17.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:04:17.126 [DEBUG] [Thread-78978] [transport.py] [_log()] userauth is OK
2025-12-13T00:04:17.126 [DEBUG] [Thread-78978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:04:17.126 [DEBUG] [Thread-78978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:04:17.127 [DEBUG] [Thread-78978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:04:17.127 [DEBUG] [Thread-78978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:04:17.150 [INFO] [Thread-78978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:04:17.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:04:17.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:04:17.998 [DEBUG] [Thread-78978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:04:17.998 [DEBUG] [Thread-78978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:04:18.046 [DEBUG] [Thread-78978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:04:18.046 [DEBUG] [Thread-78978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:04:18.055 [DEBUG] [Thread-78978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:04:18.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:04:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:04:18.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:04:18.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:04:18.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:04:18.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:04:18.089 [DEBUG] [Thread-78978] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:04:23.455 [DEBUG] [Thread-78980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:30.746 [DEBUG] [Thread-78981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:45.789 [DEBUG] [Thread-78982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:48.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:04:48.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:04:48.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:04:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 4, 33), 1.42, 90.77, 0.0, 46.36, 8.7, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:04:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:04:33
2025-12-13T00:04:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:04:49.080 [DEBUG] [Thread-78983] [transport.py] [_log()] starting thread (client mode): 0xf57001c0
2025-12-13T00:04:49.080 [DEBUG] [Thread-78983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:04:49.100 [DEBUG] [Thread-78983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:04:49.100 [INFO] [Thread-78983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] client lang: <none>
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] server lang: <none>
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] kex follows: False
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] Compression: none
2025-12-13T00:04:49.103 [DEBUG] [Thread-78983] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:04:49.120 [DEBUG] [Thread-78983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:04:49.121 [DEBUG] [Thread-78983] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:04:49.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:04:49.121 [DEBUG] [Thread-78983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:04:49.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:04:49.123 [DEBUG] [Thread-78983] [transport.py] [_log()] userauth is OK
2025-12-13T00:04:49.123 [DEBUG] [Thread-78983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:04:49.123 [DEBUG] [Thread-78983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:04:49.123 [DEBUG] [Thread-78983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:04:49.123 [DEBUG] [Thread-78983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:04:49.137 [INFO] [Thread-78983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:04:49.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:04:49.899 [DEBUG] [Thread-78983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:04:49.899 [DEBUG] [Thread-78983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:04:49.900 [DEBUG] [Thread-78983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:04:49.940 [DEBUG] [Thread-78983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:04:49.940 [DEBUG] [Thread-78983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:04:49.942 [DEBUG] [Thread-78983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:04:49.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:04:49.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:04:49.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:04:49.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:04:49.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:04:49.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:04:49.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:04:49.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:04:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:04:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.919542 -999.00   +8.30  35.95     91   +7.10 1 2 2 3 1     0    0 1.33 4.47 zNE.W 47.5 36.0 321.6 56.2 9.6 -19.0 9.4 -17.6 9.2 -17.5 9.5 -18.3
2025-12-13T00:04:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:04:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:04:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.919542
2025-12-13T00:04:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:04:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:04:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:04:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:04:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:04:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:04:33', tmtdew=1.42, humidity=90.77, cloud=0.0, wind=46.36, temperature=8.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:04:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:01:00')
2025-12-13T00:04:49.965 [DEBUG] [Thread-78983] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:04:50.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:04:50.051 [DEBUG] [Thread-78986] [transport.py] [_log()] starting thread (client mode): 0xf5702680
2025-12-13T00:04:50.051 [DEBUG] [Thread-78986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:04:50.065 [DEBUG] [Thread-78986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:04:50.065 [INFO] [Thread-78986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:04:50.072 [DEBUG] [Thread-78986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:04:50.072 [DEBUG] [Thread-78986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:04:50.072 [DEBUG] [Thread-78986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:04:50.072 [DEBUG] [Thread-78986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] client lang: <none>
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] server lang: <none>
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] kex follows: False
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:04:50.073 [DEBUG] [Thread-78986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:04:50.074 [DEBUG] [Thread-78986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:04:50.074 [DEBUG] [Thread-78986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:04:50.074 [DEBUG] [Thread-78986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:04:50.074 [DEBUG] [Thread-78986] [transport.py] [_log()] Compression: none
2025-12-13T00:04:50.074 [DEBUG] [Thread-78986] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:04:50.128 [DEBUG] [Thread-78986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:04:50.129 [DEBUG] [Thread-78986] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:04:50.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:04:50.130 [DEBUG] [Thread-78986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:04:50.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:04:50.193 [DEBUG] [Thread-78986] [transport.py] [_log()] userauth is OK
2025-12-13T00:04:50.193 [DEBUG] [Thread-78986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:04:50.193 [DEBUG] [Thread-78986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:04:50.194 [DEBUG] [Thread-78986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:04:50.194 [DEBUG] [Thread-78986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:04:50.215 [INFO] [Thread-78986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:04:50.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:04:50.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:04:51.061 [DEBUG] [Thread-78986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:04:51.062 [DEBUG] [Thread-78986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:04:51.110 [DEBUG] [Thread-78986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:04:51.110 [DEBUG] [Thread-78986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:04:51.119 [DEBUG] [Thread-78986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:04:51.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:04:51.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:04:51.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:04:51.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:04:51.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:04:51.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:04:51.152 [DEBUG] [Thread-78986] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:04:57.367 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:04:57.368 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:00.818 [DEBUG] [Thread-78988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:15.870 [DEBUG] [Thread-78989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:21.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:05:21.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:05:21.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:05:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 5, 5), 1.2, 91.94, 0.0, 35.73, 8.45, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:05:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:05:05
2025-12-13T00:05:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:05:22.134 [DEBUG] [Thread-78990] [transport.py] [_log()] starting thread (client mode): 0xf5771de0
2025-12-13T00:05:22.134 [DEBUG] [Thread-78990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:05:22.155 [DEBUG] [Thread-78990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:05:22.155 [INFO] [Thread-78990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:05:22.156 [DEBUG] [Thread-78990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:05:22.156 [DEBUG] [Thread-78990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:05:22.156 [DEBUG] [Thread-78990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:05:22.156 [DEBUG] [Thread-78990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:22.156 [DEBUG] [Thread-78990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:22.156 [DEBUG] [Thread-78990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] client lang: <none>
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] server lang: <none>
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] kex follows: False
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] Compression: none
2025-12-13T00:05:22.157 [DEBUG] [Thread-78990] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:05:22.167 [DEBUG] [Thread-78990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:05:22.167 [DEBUG] [Thread-78990] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:05:22.168 [DEBUG] [Thread-78990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:05:22.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:05:22.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:05:22.169 [DEBUG] [Thread-78990] [transport.py] [_log()] userauth is OK
2025-12-13T00:05:22.170 [DEBUG] [Thread-78990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:05:22.170 [DEBUG] [Thread-78990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:05:22.170 [DEBUG] [Thread-78990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:05:22.170 [DEBUG] [Thread-78990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:05:22.192 [INFO] [Thread-78990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:05:22.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:05:22.814 [DEBUG] [Thread-78990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:05:22.814 [DEBUG] [Thread-78990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:05:22.814 [DEBUG] [Thread-78990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:05:22.855 [DEBUG] [Thread-78990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:05:22.855 [DEBUG] [Thread-78990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:05:22.858 [DEBUG] [Thread-78990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:05:22.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:05:22.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:05:22.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:05:22.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:05:22.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:05:22.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:05:22.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.919889 -999.00   +8.30  37.40     92   +7.10 1 2 2 3 1     0    0 1.28 3.54 zNE.W 43.3 37.4 317.8 52.4 9.5 -22.8 9.4 -18.9 9.1 -19.5 9.4 -21.5
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.919889
2025-12-13T00:05:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:05:22.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:05:22.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:05:22.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:05:22.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:05:22.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:05:05', tmtdew=1.2, humidity=91.94, cloud=0.0, wind=35.73, temperature=8.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:04:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:04:00')
2025-12-13T00:05:22.878 [DEBUG] [Thread-78990] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:05:22.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:05:22.968 [DEBUG] [Thread-78993] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-13T00:05:22.968 [DEBUG] [Thread-78993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:05:22.982 [DEBUG] [Thread-78993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:05:22.982 [INFO] [Thread-78993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:05:22.990 [DEBUG] [Thread-78993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:05:22.990 [DEBUG] [Thread-78993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] client lang: <none>
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] server lang: <none>
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] kex follows: False
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] Compression: none
2025-12-13T00:05:22.991 [DEBUG] [Thread-78993] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:05:23.049 [DEBUG] [Thread-78993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:05:23.050 [DEBUG] [Thread-78993] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:05:23.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:05:23.051 [DEBUG] [Thread-78993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:05:23.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:05:23.105 [DEBUG] [Thread-78993] [transport.py] [_log()] userauth is OK
2025-12-13T00:05:23.106 [DEBUG] [Thread-78993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:05:23.106 [DEBUG] [Thread-78993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:05:23.106 [DEBUG] [Thread-78993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:05:23.106 [DEBUG] [Thread-78993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:05:23.125 [INFO] [Thread-78993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:05:23.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:05:23.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:05:23.539 [DEBUG] [Thread-78995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:23.899 [DEBUG] [Thread-78993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:05:23.899 [DEBUG] [Thread-78993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:05:23.947 [DEBUG] [Thread-78993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:05:23.947 [DEBUG] [Thread-78993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:05:23.956 [DEBUG] [Thread-78993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:05:23.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:05:23.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:05:23.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:05:23.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:05:23.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:05:23.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:05:23.990 [DEBUG] [Thread-78993] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:05:30.900 [DEBUG] [Thread-78996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:45.950 [DEBUG] [Thread-78997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:54.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:05:54.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:05:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:05:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 5, 37), 1.2, 91.95, 0.0, 44.8, 8.47, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:05:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:05:37
2025-12-13T00:05:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:05:54.970 [DEBUG] [Thread-78998] [transport.py] [_log()] starting thread (client mode): 0xfabc7f70
2025-12-13T00:05:54.970 [DEBUG] [Thread-78998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:05:54.991 [DEBUG] [Thread-78998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:05:54.991 [INFO] [Thread-78998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] client lang: <none>
2025-12-13T00:05:54.994 [DEBUG] [Thread-78998] [transport.py] [_log()] server lang: <none>
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] kex follows: False
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] Compression: none
2025-12-13T00:05:54.995 [DEBUG] [Thread-78998] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:05:55.011 [DEBUG] [Thread-78998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:05:55.011 [DEBUG] [Thread-78998] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:05:55.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:05:55.013 [DEBUG] [Thread-78998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:05:55.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:05:55.014 [DEBUG] [Thread-78998] [transport.py] [_log()] userauth is OK
2025-12-13T00:05:55.014 [DEBUG] [Thread-78998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:05:55.015 [DEBUG] [Thread-78998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:05:55.015 [DEBUG] [Thread-78998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:05:55.015 [DEBUG] [Thread-78998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:05:55.032 [INFO] [Thread-78998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:05:55.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:05:55.616 [DEBUG] [Thread-78998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:05:55.617 [DEBUG] [Thread-78998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:05:55.617 [DEBUG] [Thread-78998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:05:55.658 [DEBUG] [Thread-78998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:05:55.658 [DEBUG] [Thread-78998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:05:55.661 [DEBUG] [Thread-78998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:05:55.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:05:55.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:05:55.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:05:55.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:05:55.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:05:55.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:05:55.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:05:55.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:05:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:05:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.920584 -999.00   +8.20  49.52     91   +7.00 1 2 2 3 1     0    0 1.27 3.03 ZNE.W 42.3 49.5 310.8 61.8 9.4 -22.6 9.3 -20.9 9.0 -19.7 9.3 -21.3
2025-12-13T00:05:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:05:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:05:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.920584
2025-12-13T00:05:55.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:05:55.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:05:55.691 [DEBUG] [Thread-78998] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:05:55.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:05:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:05:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:05:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:05:37', tmtdew=1.2, humidity=91.95, cloud=0.0, wind=44.8, temperature=8.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:05:38.458', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:04:00')
2025-12-13T00:05:55.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:05:55.787 [DEBUG] [Thread-79001] [transport.py] [_log()] starting thread (client mode): 0xf572cfd0
2025-12-13T00:05:55.787 [DEBUG] [Thread-79001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:05:55.802 [DEBUG] [Thread-79001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:05:55.802 [INFO] [Thread-79001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:05:55.809 [DEBUG] [Thread-79001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:05:55.810 [DEBUG] [Thread-79001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] client lang: <none>
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] server lang: <none>
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] kex follows: False
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:05:55.811 [DEBUG] [Thread-79001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:05:55.812 [DEBUG] [Thread-79001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:05:55.812 [DEBUG] [Thread-79001] [transport.py] [_log()] Compression: none
2025-12-13T00:05:55.812 [DEBUG] [Thread-79001] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:05:55.866 [DEBUG] [Thread-79001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:05:55.866 [DEBUG] [Thread-79001] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:05:55.867 [DEBUG] [Thread-79001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:05:55.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:05:55.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:05:55.925 [DEBUG] [Thread-79001] [transport.py] [_log()] userauth is OK
2025-12-13T00:05:55.925 [DEBUG] [Thread-79001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:05:55.925 [DEBUG] [Thread-79001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:05:55.925 [DEBUG] [Thread-79001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:05:55.925 [DEBUG] [Thread-79001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:05:55.943 [INFO] [Thread-79001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:05:55.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:05:55.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:05:56.751 [DEBUG] [Thread-79001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:05:56.751 [DEBUG] [Thread-79001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:05:56.799 [DEBUG] [Thread-79001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:05:56.799 [DEBUG] [Thread-79001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:05:56.808 [DEBUG] [Thread-79001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:05:56.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:05:56.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:05: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
2025-12-13T00:05:56.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:05:56.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:05:56.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:05:56.842 [DEBUG] [Thread-79001] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:05:57.576 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:05:57.577 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:00.978 [DEBUG] [Thread-79003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:16.023 [DEBUG] [Thread-79004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:23.611 [DEBUG] [Thread-79005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:06:26.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:06:26.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:06:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 6, 9), 1.21, 91.89, 0.0, 42.58, 8.42, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:06:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:06:09
2025-12-13T00:06:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:06:27.829 [DEBUG] [Thread-79006] [transport.py] [_log()] starting thread (client mode): 0xf572f910
2025-12-13T00:06:27.829 [DEBUG] [Thread-79006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:06:27.850 [DEBUG] [Thread-79006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:06:27.850 [INFO] [Thread-79006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:06:27.851 [DEBUG] [Thread-79006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] client lang: <none>
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] server lang: <none>
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] kex follows: False
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] Compression: none
2025-12-13T00:06:27.852 [DEBUG] [Thread-79006] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:06:27.860 [DEBUG] [Thread-79006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:06:27.861 [DEBUG] [Thread-79006] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:06:27.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:06:27.861 [DEBUG] [Thread-79006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:06:27.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:06:27.862 [DEBUG] [Thread-79006] [transport.py] [_log()] userauth is OK
2025-12-13T00:06:27.862 [DEBUG] [Thread-79006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:06:27.862 [DEBUG] [Thread-79006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:06:27.862 [DEBUG] [Thread-79006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:06:27.862 [DEBUG] [Thread-79006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:06:27.875 [INFO] [Thread-79006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:06:27.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:06:28.515 [DEBUG] [Thread-79006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:06:28.515 [DEBUG] [Thread-79006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:06:28.515 [DEBUG] [Thread-79006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:06:28.556 [DEBUG] [Thread-79006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:06:28.557 [DEBUG] [Thread-79006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:06:28.560 [DEBUG] [Thread-79006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:06:28.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:06:28.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:06:28.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:06:28.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:06:28.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:06:28.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:06:28.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:06:28.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:06:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:06:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.920931 -999.00   +8.20  39.26     92   +7.00 1 2 2 3 1     0    0 1.28 2.97 ZNEsW 42.6 39.3 322.0 54.2 9.4 -22.3 9.2 -21.4 8.9 -19.4 9.3 -20.9
2025-12-13T00:06:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:06:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:06:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.920931
2025-12-13T00:06:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:06:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:06:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:06:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:06:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:06:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:06:09', tmtdew=1.21, humidity=91.89, cloud=0.0, wind=42.58, temperature=8.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:06:08.438', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:04:00')
2025-12-13T00:06:28.587 [DEBUG] [Thread-79006] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:06:28.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:06:28.682 [DEBUG] [Thread-79009] [transport.py] [_log()] starting thread (client mode): 0xf57037f0
2025-12-13T00:06:28.682 [DEBUG] [Thread-79009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:06:28.697 [DEBUG] [Thread-79009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:06:28.697 [INFO] [Thread-79009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:06:28.704 [DEBUG] [Thread-79009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:06:28.704 [DEBUG] [Thread-79009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] client lang: <none>
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] server lang: <none>
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] kex follows: False
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] Compression: none
2025-12-13T00:06:28.705 [DEBUG] [Thread-79009] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:06:28.763 [DEBUG] [Thread-79009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:06:28.764 [DEBUG] [Thread-79009] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:06:28.764 [DEBUG] [Thread-79009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:06:28.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:06:28.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:06:28.819 [DEBUG] [Thread-79009] [transport.py] [_log()] userauth is OK
2025-12-13T00:06:28.820 [DEBUG] [Thread-79009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:06:28.820 [DEBUG] [Thread-79009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:06:28.820 [DEBUG] [Thread-79009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:06:28.820 [DEBUG] [Thread-79009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:06:28.839 [INFO] [Thread-79009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:06:28.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:06:28.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:06:29.649 [DEBUG] [Thread-79009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:06:29.649 [DEBUG] [Thread-79009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:06:29.697 [DEBUG] [Thread-79009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:06:29.697 [DEBUG] [Thread-79009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:06:29.705 [DEBUG] [Thread-79009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:06:29.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:06:29.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:06:29.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:06:29.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:06:29.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:06:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:06:29.739 [DEBUG] [Thread-79009] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:06:31.051 [DEBUG] [Thread-79011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:46.099 [DEBUG] [Thread-79012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:57.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:57.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:06:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:06:59.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:06:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:07:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 6, 41), 1.21, 91.87, 0.0, 36.59, 8.38, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:07:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:06:41
2025-12-13T00:07:00.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:07:00.752 [DEBUG] [Thread-79013] [transport.py] [_log()] starting thread (client mode): 0xf5770f10
2025-12-13T00:07:00.752 [DEBUG] [Thread-79013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:07:00.771 [DEBUG] [Thread-79013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:07:00.771 [INFO] [Thread-79013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:07:00.774 [DEBUG] [Thread-79013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:07:00.774 [DEBUG] [Thread-79013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:07:00.774 [DEBUG] [Thread-79013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:07:00.774 [DEBUG] [Thread-79013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:00.774 [DEBUG] [Thread-79013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] client lang: <none>
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] server lang: <none>
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] kex follows: False
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] Compression: none
2025-12-13T00:07:00.775 [DEBUG] [Thread-79013] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:07:00.793 [DEBUG] [Thread-79013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:07:00.793 [DEBUG] [Thread-79013] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:07:00.793 [DEBUG] [Thread-79013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:07:00.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:07:00.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:07:00.795 [DEBUG] [Thread-79013] [transport.py] [_log()] userauth is OK
2025-12-13T00:07:00.795 [DEBUG] [Thread-79013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:07:00.795 [DEBUG] [Thread-79013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:07:00.795 [DEBUG] [Thread-79013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:07:00.795 [DEBUG] [Thread-79013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:07:00.812 [INFO] [Thread-79013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:07:00.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:07:01.125 [DEBUG] [Thread-79015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:07:01.405 [DEBUG] [Thread-79013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:07:01.405 [DEBUG] [Thread-79013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:07:01.406 [DEBUG] [Thread-79013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:07:01.447 [DEBUG] [Thread-79013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:07:01.447 [DEBUG] [Thread-79013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:07:01.450 [DEBUG] [Thread-79013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:07:01.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:07:01.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:07:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:07:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:07:01.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:07:01.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:07:01.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.921278 -999.00   +8.30  50.31     91   +7.00 1 2 2 3 1     0    0 1.27 3.00 ZNEsW 48.0 50.3 312.0 53.1 9.3 -21.8 9.2 -21.4 8.9 -19.7 9.2 -20.0
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.921278
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:07:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:06:41', tmtdew=1.21, humidity=91.87, cloud=0.0, wind=36.59, temperature=8.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:06:38.419', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:04:00')
2025-12-13T00:07:01.470 [DEBUG] [Thread-79013] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:07:01.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:07:01.557 [DEBUG] [Thread-79017] [transport.py] [_log()] starting thread (client mode): 0xf57bfca0
2025-12-13T00:07:01.557 [DEBUG] [Thread-79017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:07:01.572 [DEBUG] [Thread-79017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:07:01.572 [INFO] [Thread-79017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] client lang: <none>
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] server lang: <none>
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] kex follows: False
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] Compression: none
2025-12-13T00:07:01.580 [DEBUG] [Thread-79017] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:07:01.638 [DEBUG] [Thread-79017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:07:01.638 [DEBUG] [Thread-79017] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:07:01.639 [DEBUG] [Thread-79017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:07:01.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:07:01.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:07:01.696 [DEBUG] [Thread-79017] [transport.py] [_log()] userauth is OK
2025-12-13T00:07:01.696 [DEBUG] [Thread-79017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:07:01.696 [DEBUG] [Thread-79017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:07:01.696 [DEBUG] [Thread-79017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:07:01.696 [DEBUG] [Thread-79017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:07:01.711 [INFO] [Thread-79017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:07:01.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:07:01.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:07:02.589 [DEBUG] [Thread-79017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:07:02.589 [DEBUG] [Thread-79017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:07:02.637 [DEBUG] [Thread-79017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:07:02.637 [DEBUG] [Thread-79017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:07:02.645 [DEBUG] [Thread-79017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:07:02.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:07:02.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:07:02.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:07:02.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:07:02.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:07:02.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:07:02.677 [DEBUG] [Thread-79017] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:07:16.155 [DEBUG] [Thread-79019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:07:23.684 [DEBUG] [Thread-79020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:07:31.189 [DEBUG] [Thread-79021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:07:32.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:07:32.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:07:32.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:07:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 7, 13), 1.2, 91.94, 0.0, 35.04, 8.43, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:07:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:07:13
2025-12-13T00:07:33.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:07:33.694 [DEBUG] [Thread-79022] [transport.py] [_log()] starting thread (client mode): 0xf575dc90
2025-12-13T00:07:33.694 [DEBUG] [Thread-79022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:07:33.709 [DEBUG] [Thread-79022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:07:33.709 [INFO] [Thread-79022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] client lang: <none>
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] server lang: <none>
2025-12-13T00:07:33.713 [DEBUG] [Thread-79022] [transport.py] [_log()] kex follows: False
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] Compression: none
2025-12-13T00:07:33.714 [DEBUG] [Thread-79022] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:07:33.728 [DEBUG] [Thread-79022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:07:33.729 [DEBUG] [Thread-79022] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:07:33.729 [DEBUG] [Thread-79022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:07:33.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:07:33.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:07:33.731 [DEBUG] [Thread-79022] [transport.py] [_log()] userauth is OK
2025-12-13T00:07:33.731 [DEBUG] [Thread-79022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:07:33.731 [DEBUG] [Thread-79022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:07:33.732 [DEBUG] [Thread-79022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:07:33.732 [DEBUG] [Thread-79022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:07:33.755 [INFO] [Thread-79022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:07:33.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:07:34.397 [DEBUG] [Thread-79022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:07:34.397 [DEBUG] [Thread-79022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:07:34.397 [DEBUG] [Thread-79022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:07:34.439 [DEBUG] [Thread-79022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:07:34.439 [DEBUG] [Thread-79022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:07:34.442 [DEBUG] [Thread-79022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:07:34.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:07:34.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:07:34.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:07:34.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:07:34.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:07:34.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:07:34.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:07:34.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:07:34.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:07:34.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.921625 -999.00   +8.30  41.43     92   +7.00 1 2 2 3 1     0    0 1.27 3.16 ZNEsW 41.7 41.4 310.2 53.5 9.3 -22.1 9.2 -22.2 8.8 -19.9 9.2 -20.7
2025-12-13T00:07:34.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:07:34.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:07:34.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.921625
2025-12-13T00:07:34.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:07:34.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:07:34.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:07:34.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:07:34.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:07:34.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:07:13', tmtdew=1.2, humidity=91.94, cloud=0.0, wind=35.04, temperature=8.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:07:08.400', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.3377499999999998, nan, nan, nan, nan, nan, nan, 1.6004999999999994, 1.5940000000000003, nan, nan, nan, nan, nan, 1.1789999999999994, 0.7842500000000001, 1.6194999999999995, nan, nan, nan, nan, nan, 1.1527500000000002, 0.5829999999999993, 1.9265000000000008, nan, nan, nan, 1.144000000000001, 1.0010000000000012, 0.7865000000000002, 0.6507499999999995], zp_timestamp='2025-12-12T22:04:00')
2025-12-13T00:07:34.467 [DEBUG] [Thread-79022] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:07:34.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:07:34.563 [DEBUG] [Thread-79025] [transport.py] [_log()] starting thread (client mode): 0xf575de40
2025-12-13T00:07:34.563 [DEBUG] [Thread-79025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:07:34.582 [DEBUG] [Thread-79025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:07:34.582 [INFO] [Thread-79025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:07:34.590 [DEBUG] [Thread-79025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:07:34.590 [DEBUG] [Thread-79025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:07:34.590 [DEBUG] [Thread-79025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:07:34.590 [DEBUG] [Thread-79025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:34.590 [DEBUG] [Thread-79025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:07:34.590 [DEBUG] [Thread-79025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] client lang: <none>
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] server lang: <none>
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] kex follows: False
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] Compression: none
2025-12-13T00:07:34.591 [DEBUG] [Thread-79025] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:07:34.649 [DEBUG] [Thread-79025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:07:34.649 [DEBUG] [Thread-79025] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:07:34.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:07:34.650 [DEBUG] [Thread-79025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:07:34.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:07:34.705 [DEBUG] [Thread-79025] [transport.py] [_log()] userauth is OK
2025-12-13T00:07:34.705 [DEBUG] [Thread-79025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:07:34.705 [DEBUG] [Thread-79025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:07:34.706 [DEBUG] [Thread-79025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:07:34.706 [DEBUG] [Thread-79025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:07:34.725 [INFO] [Thread-79025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:07:34.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:07:34.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:07:35.527 [DEBUG] [Thread-79025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:07:35.528 [DEBUG] [Thread-79025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:07:35.576 [DEBUG] [Thread-79025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:07:35.576 [DEBUG] [Thread-79025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:07:35.584 [DEBUG] [Thread-79025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:07:35.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:07:35.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:07:35.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:07:35.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:07:35.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:07:35.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:07:35.624 [DEBUG] [Thread-79025] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:07:46.218 [DEBUG] [Thread-79027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:07:57.995 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:07:57.997 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:01.270 [DEBUG] [Thread-79028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:08:05.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:08:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:08:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 7, 45), 1.21, 91.85, 0.0, 32.62, 8.38, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:08:06.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:07:45
2025-12-13T00:08:06.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:08:06.614 [DEBUG] [Thread-79029] [transport.py] [_log()] starting thread (client mode): 0xf81e6050
2025-12-13T00:08:06.615 [DEBUG] [Thread-79029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:08:06.626 [DEBUG] [Thread-79029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:08:06.626 [INFO] [Thread-79029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] client lang: <none>
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] server lang: <none>
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] kex follows: False
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] Compression: none
2025-12-13T00:08:06.629 [DEBUG] [Thread-79029] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:08:06.646 [DEBUG] [Thread-79029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:08:06.646 [DEBUG] [Thread-79029] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:08:06.647 [DEBUG] [Thread-79029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:08:06.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:08:06.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:08:06.649 [DEBUG] [Thread-79029] [transport.py] [_log()] userauth is OK
2025-12-13T00:08:06.649 [DEBUG] [Thread-79029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:08:06.650 [DEBUG] [Thread-79029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:08:06.650 [DEBUG] [Thread-79029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:08:06.650 [DEBUG] [Thread-79029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:08:06.669 [INFO] [Thread-79029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:08:06.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:08:07.247 [DEBUG] [Thread-79029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:08:07.247 [DEBUG] [Thread-79029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:08:07.247 [DEBUG] [Thread-79029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:08:07.288 [DEBUG] [Thread-79029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:08:07.288 [DEBUG] [Thread-79029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:08:07.291 [DEBUG] [Thread-79029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:08:07.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:08:07.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:08:07.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:08:07.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:08:07.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:08:07.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:08:07.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:08:07.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:08:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:08:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.921973 -999.00   +8.30  39.72     92   +7.10 1 1 2 3 1     0    0 1.27 2.69 ZNESW 37.2 39.7 309.8 46.1 9.3 -21.4 9.2 -20.9 8.9 -18.3 9.3 -19.9
2025-12-13T00:08:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:08:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:08:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.921973
2025-12-13T00:08:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:08:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:08:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:08:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:08:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T00:08:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:07:45', tmtdew=1.21, humidity=91.85, cloud=0.0, wind=32.62, temperature=8.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:07:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.17274999999999885, 0.5522500000000008, 0.6802500000000009, 0.32349999999999923, 0.11350000000000016, 0.28775000000000084, 0.20599999999999952, 0.13525000000000098, 0.22449999999999903, 0.9370000000000003, 1.6632499999999997, 0.8369999999999997, 0.30599999999999916, 0.26874999999999893, 0.26699999999999946, 0.3249999999999993, 0.24124999999999908, 0.7074999999999996, 2.6789999999999994, 0.8752499999999985, 0.44599999999999795, 0.41274999999999906, 0.4827500000000011, 0.3507499999999997, 0.33199999999999896, 0.48350000000000026, 2.44475, 1.7160000000000002, 0.6680000000000001, 0.6080000000000014, 0.8230000000000013, 0.7805, 0.3352499999999994], zp_timestamp='2025-12-12T22:07:00')
2025-12-13T00:08:07.316 [DEBUG] [Thread-79029] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:08:07.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:08:07.416 [DEBUG] [Thread-79032] [transport.py] [_log()] starting thread (client mode): 0xf81e7790
2025-12-13T00:08:07.416 [DEBUG] [Thread-79032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:08:07.431 [DEBUG] [Thread-79032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:08:07.431 [INFO] [Thread-79032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:08:07.438 [DEBUG] [Thread-79032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:08:07.438 [DEBUG] [Thread-79032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:08:07.438 [DEBUG] [Thread-79032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] client lang: <none>
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] server lang: <none>
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] kex follows: False
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] Compression: none
2025-12-13T00:08:07.439 [DEBUG] [Thread-79032] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:08:07.497 [DEBUG] [Thread-79032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:08:07.497 [DEBUG] [Thread-79032] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:08:07.498 [DEBUG] [Thread-79032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:08:07.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:08:07.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:08:07.559 [DEBUG] [Thread-79032] [transport.py] [_log()] userauth is OK
2025-12-13T00:08:07.560 [DEBUG] [Thread-79032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:08:07.560 [DEBUG] [Thread-79032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:08:07.560 [DEBUG] [Thread-79032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:08:07.560 [DEBUG] [Thread-79032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:08:07.579 [INFO] [Thread-79032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:08:07.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:08:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:08:08.384 [DEBUG] [Thread-79032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:08:08.384 [DEBUG] [Thread-79032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:08:08.433 [DEBUG] [Thread-79032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:08:08.433 [DEBUG] [Thread-79032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:08:08.441 [DEBUG] [Thread-79032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:08:08.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:08: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')
2025-12-13T00:08:08.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:08:08.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:08:08.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:08:08.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:08:08.478 [DEBUG] [Thread-79032] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:08:16.302 [DEBUG] [Thread-79034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:23.760 [DEBUG] [Thread-79035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:31.359 [DEBUG] [Thread-79036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:08:38.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:08:38.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:08:39.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 8, 18), 1.2, 91.92, 0.0, 33.03, 8.43, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:08:39.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:08:18
2025-12-13T00:08:39.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:08:39.449 [DEBUG] [Thread-79037] [transport.py] [_log()] starting thread (client mode): 0xf5741960
2025-12-13T00:08:39.449 [DEBUG] [Thread-79037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:08:39.470 [DEBUG] [Thread-79037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:08:39.470 [INFO] [Thread-79037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] client lang: <none>
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] server lang: <none>
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] kex follows: False
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] Compression: none
2025-12-13T00:08:39.474 [DEBUG] [Thread-79037] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:08:39.491 [DEBUG] [Thread-79037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:08:39.492 [DEBUG] [Thread-79037] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:08:39.492 [DEBUG] [Thread-79037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:08:39.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:08:39.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:08:39.494 [DEBUG] [Thread-79037] [transport.py] [_log()] userauth is OK
2025-12-13T00:08:39.494 [DEBUG] [Thread-79037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:08:39.494 [DEBUG] [Thread-79037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:08:39.495 [DEBUG] [Thread-79037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:08:39.495 [DEBUG] [Thread-79037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:08:39.519 [INFO] [Thread-79037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:08:39.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:08:40.192 [DEBUG] [Thread-79037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:08:40.192 [DEBUG] [Thread-79037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:08:40.193 [DEBUG] [Thread-79037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:08:40.233 [DEBUG] [Thread-79037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:08:40.233 [DEBUG] [Thread-79037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:08:40.236 [DEBUG] [Thread-79037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:08:40.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:08:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:08:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:08:40.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:08:40.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:08:40.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:08:40.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:08:40.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:08:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.921973 -999.00   +8.30  39.72     92   +7.10 1 1 2 3 1     0    0 1.27 2.69 ZNESW 37.2 39.7 309.8 46.1 9.3 -21.4 9.2 -20.9 8.9 -18.3 9.3 -19.9
2025-12-13T00:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.921973
2025-12-13T00:08:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:08:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:08:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:08:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:08:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T00:08:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:08:18', tmtdew=1.2, humidity=91.92, cloud=0.0, wind=33.03, temperature=8.43, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:07:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.17274999999999885, 0.5522500000000008, 0.6802500000000009, 0.32349999999999923, 0.11350000000000016, 0.28775000000000084, 0.20599999999999952, 0.13525000000000098, 0.22449999999999903, 0.9370000000000003, 1.6632499999999997, 0.8369999999999997, 0.30599999999999916, 0.26874999999999893, 0.26699999999999946, 0.3249999999999993, 0.24124999999999908, 0.7074999999999996, 2.6789999999999994, 0.8752499999999985, 0.44599999999999795, 0.41274999999999906, 0.4827500000000011, 0.3507499999999997, 0.33199999999999896, 0.48350000000000026, 2.44475, 1.7160000000000002, 0.6680000000000001, 0.6080000000000014, 0.8230000000000013, 0.7805, 0.3352499999999994], zp_timestamp='2025-12-12T22:07:00')
2025-12-13T00:08:40.262 [DEBUG] [Thread-79037] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:08:40.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:08:40.360 [DEBUG] [Thread-79040] [transport.py] [_log()] starting thread (client mode): 0xf5773490
2025-12-13T00:08:40.360 [DEBUG] [Thread-79040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:08:40.373 [DEBUG] [Thread-79040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:08:40.374 [INFO] [Thread-79040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:08:40.381 [DEBUG] [Thread-79040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:08:40.381 [DEBUG] [Thread-79040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] client lang: <none>
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] server lang: <none>
2025-12-13T00:08:40.382 [DEBUG] [Thread-79040] [transport.py] [_log()] kex follows: False
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] Compression: none
2025-12-13T00:08:40.383 [DEBUG] [Thread-79040] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:08:40.438 [DEBUG] [Thread-79040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:08:40.438 [DEBUG] [Thread-79040] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:08:40.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:08:40.439 [DEBUG] [Thread-79040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:08:40.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:08:40.495 [DEBUG] [Thread-79040] [transport.py] [_log()] userauth is OK
2025-12-13T00:08:40.495 [DEBUG] [Thread-79040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:08:40.495 [DEBUG] [Thread-79040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:08:40.495 [DEBUG] [Thread-79040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:08:40.495 [DEBUG] [Thread-79040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:08:40.514 [INFO] [Thread-79040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:08:40.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:08:40.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:08:41.305 [DEBUG] [Thread-79040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:08:41.306 [DEBUG] [Thread-79040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:08:41.353 [DEBUG] [Thread-79040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:08:41.353 [DEBUG] [Thread-79040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:08:41.362 [DEBUG] [Thread-79040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:08:41.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:08:41.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')
2025-12-13T00:08:41.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:08:41.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:08:41.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:08:41.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:08:41.397 [DEBUG] [Thread-79040] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:08:46.389 [DEBUG] [Thread-79042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:58.200 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:08:58.201 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:01.429 [DEBUG] [Thread-79043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:09:11.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:09:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:09:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 8, 50), 1.22, 91.84, 0.0, 39.26, 8.4, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:09:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:08:50
2025-12-13T00:09:12.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:09:12.377 [DEBUG] [Thread-79044] [transport.py] [_log()] starting thread (client mode): 0xf813e8f0
2025-12-13T00:09:12.377 [DEBUG] [Thread-79044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:09:12.398 [DEBUG] [Thread-79044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:09:12.398 [INFO] [Thread-79044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:09:12.399 [DEBUG] [Thread-79044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] client lang: <none>
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] server lang: <none>
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] kex follows: False
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] Compression: none
2025-12-13T00:09:12.400 [DEBUG] [Thread-79044] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:09:12.413 [DEBUG] [Thread-79044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:09:12.414 [DEBUG] [Thread-79044] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:09:12.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:09:12.414 [DEBUG] [Thread-79044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:09:12.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:09:12.416 [DEBUG] [Thread-79044] [transport.py] [_log()] userauth is OK
2025-12-13T00:09:12.416 [DEBUG] [Thread-79044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:09:12.417 [DEBUG] [Thread-79044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:09:12.417 [DEBUG] [Thread-79044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:09:12.417 [DEBUG] [Thread-79044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:09:12.452 [INFO] [Thread-79044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:09:12.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:09:13.302 [DEBUG] [Thread-79044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:09:13.303 [DEBUG] [Thread-79044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:09:13.303 [DEBUG] [Thread-79044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:09:13.344 [DEBUG] [Thread-79044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:09:13.344 [DEBUG] [Thread-79044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:09:13.347 [DEBUG] [Thread-79044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:09:13.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:09:13.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:09:13.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:09:13.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:09:13.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:09:13.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:09:13.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:09:13.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:09:13.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:09:13.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.922667 -999.00   +8.30  34.53     92   +7.10 1 1 2 3 1     0    0 1.25 1.86 ZNESW 32.8 34.5 322.7 48.1 9.3 -18.6 9.2 -16.7 8.9 -14.8 9.2 -17.8
2025-12-13T00:09:13.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:09:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:09:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.922667
2025-12-13T00:09:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:09:13.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:09:13.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:09:13.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:09:13.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T00:09:13.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:08:50', tmtdew=1.22, humidity=91.84, cloud=0.0, wind=39.26, temperature=8.4, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:08:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[0.17274999999999885, 0.5522500000000008, 0.6802500000000009, 0.32349999999999923, 0.11350000000000016, 0.28775000000000084, 0.20599999999999952, 0.13525000000000098, 0.22449999999999903, 0.9370000000000003, 1.6632499999999997, 0.8369999999999997, 0.30599999999999916, 0.26874999999999893, 0.26699999999999946, 0.3249999999999993, 0.24124999999999908, 0.7074999999999996, 2.6789999999999994, 0.8752499999999985, 0.44599999999999795, 0.41274999999999906, 0.4827500000000011, 0.3507499999999997, 0.33199999999999896, 0.48350000000000026, 2.44475, 1.7160000000000002, 0.6680000000000001, 0.6080000000000014, 0.8230000000000013, 0.7805, 0.3352499999999994], zp_timestamp='2025-12-12T22:07:00')
2025-12-13T00:09:13.371 [DEBUG] [Thread-79044] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:09:13.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:09:13.468 [DEBUG] [Thread-79047] [transport.py] [_log()] starting thread (client mode): 0xf813fdf0
2025-12-13T00:09:13.468 [DEBUG] [Thread-79047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:09:13.482 [DEBUG] [Thread-79047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:09:13.482 [INFO] [Thread-79047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:09:13.490 [DEBUG] [Thread-79047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:09:13.490 [DEBUG] [Thread-79047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:09:13.490 [DEBUG] [Thread-79047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:09:13.490 [DEBUG] [Thread-79047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] client lang: <none>
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] server lang: <none>
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] kex follows: False
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] Compression: none
2025-12-13T00:09:13.491 [DEBUG] [Thread-79047] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:09:13.548 [DEBUG] [Thread-79047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:09:13.549 [DEBUG] [Thread-79047] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:09:13.549 [DEBUG] [Thread-79047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:09:13.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:09:13.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:09:13.608 [DEBUG] [Thread-79047] [transport.py] [_log()] userauth is OK
2025-12-13T00:09:13.608 [DEBUG] [Thread-79047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:09:13.608 [DEBUG] [Thread-79047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:09:13.608 [DEBUG] [Thread-79047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:09:13.608 [DEBUG] [Thread-79047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:09:13.627 [INFO] [Thread-79047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:09:13.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:09:13.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:09:14.439 [DEBUG] [Thread-79047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:09:14.439 [DEBUG] [Thread-79047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:09:14.490 [DEBUG] [Thread-79047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:09:14.490 [DEBUG] [Thread-79047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:09:14.502 [DEBUG] [Thread-79047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:09:14.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:09:14.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:09:14.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:09:14.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:09:14.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:09:14.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:09:14.552 [DEBUG] [Thread-79047] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:09:16.458 [DEBUG] [Thread-79049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:23.835 [DEBUG] [Thread-79050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:31.510 [DEBUG] [Thread-79051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:44.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:09:44.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:09:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:09:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 9, 22), 1.22, 91.79, 0.0, 36.13, 8.33, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:09:45.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:09:22
2025-12-13T00:09:45.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:09:45.531 [DEBUG] [Thread-79052] [transport.py] [_log()] starting thread (client mode): 0xf813e110
2025-12-13T00:09:45.531 [DEBUG] [Thread-79052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:09:45.555 [DEBUG] [Thread-79052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:09:45.555 [INFO] [Thread-79052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:09:45.558 [DEBUG] [Thread-79052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] client lang: <none>
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] server lang: <none>
2025-12-13T00:09:45.559 [DEBUG] [Thread-79052] [transport.py] [_log()] kex follows: False
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] Compression: none
2025-12-13T00:09:45.560 [DEBUG] [Thread-79052] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:09:45.579 [DEBUG] [Thread-79052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:09:45.580 [DEBUG] [Thread-79052] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:09:45.581 [DEBUG] [Thread-79052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:09:45.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:09:45.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:09:45.624 [DEBUG] [Thread-79052] [transport.py] [_log()] userauth is OK
2025-12-13T00:09:45.625 [DEBUG] [Thread-79052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:09:45.625 [DEBUG] [Thread-79052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:09:45.625 [DEBUG] [Thread-79052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:09:45.625 [DEBUG] [Thread-79052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:09:45.658 [INFO] [Thread-79052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:09:45.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:09:46.297 [DEBUG] [Thread-79052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:09:46.298 [DEBUG] [Thread-79052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:09:46.298 [DEBUG] [Thread-79052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:09:46.339 [DEBUG] [Thread-79052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:09:46.339 [DEBUG] [Thread-79052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:09:46.342 [DEBUG] [Thread-79052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:09:46.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:09:46.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:09:46.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:09:46.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:09:46.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:09:46.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:09:46.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:09:46.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:09:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:09:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.923014 -999.00   +8.30  49.55     91   +7.00 1 1 2 3 1     0    0 1.27 1.76 ZNESW 55.1 49.5 310.8 59.7 9.3 -20.6 9.2 -16.7 8.9 -15.8 9.2 -18.5
2025-12-13T00:09:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:09:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:09:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.923014
2025-12-13T00:09:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:09:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:09:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:09:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:09:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T00:09:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:09:22', tmtdew=1.22, humidity=91.79, cloud=0.0, wind=36.13, temperature=8.33, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:09:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[0.17274999999999885, 0.5522500000000008, 0.6802500000000009, 0.32349999999999923, 0.11350000000000016, 0.28775000000000084, 0.20599999999999952, 0.13525000000000098, 0.22449999999999903, 0.9370000000000003, 1.6632499999999997, 0.8369999999999997, 0.30599999999999916, 0.26874999999999893, 0.26699999999999946, 0.3249999999999993, 0.24124999999999908, 0.7074999999999996, 2.6789999999999994, 0.8752499999999985, 0.44599999999999795, 0.41274999999999906, 0.4827500000000011, 0.3507499999999997, 0.33199999999999896, 0.48350000000000026, 2.44475, 1.7160000000000002, 0.6680000000000001, 0.6080000000000014, 0.8230000000000013, 0.7805, 0.3352499999999994], zp_timestamp='2025-12-12T22:07:00')
2025-12-13T00:09:46.365 [DEBUG] [Thread-79052] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:09:46.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:09:46.460 [DEBUG] [Thread-79055] [transport.py] [_log()] starting thread (client mode): 0xf813f460
2025-12-13T00:09:46.460 [DEBUG] [Thread-79055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:09:46.475 [DEBUG] [Thread-79055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:09:46.475 [INFO] [Thread-79055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:09:46.482 [DEBUG] [Thread-79055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:09:46.482 [DEBUG] [Thread-79055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] client lang: <none>
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] server lang: <none>
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] kex follows: False
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] Compression: none
2025-12-13T00:09:46.483 [DEBUG] [Thread-79055] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:09:46.538 [DEBUG] [Thread-79057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:46.540 [DEBUG] [Thread-79055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:09:46.541 [DEBUG] [Thread-79055] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:09:46.541 [DEBUG] [Thread-79055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:09:46.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:09:46.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:09:46.596 [DEBUG] [Thread-79055] [transport.py] [_log()] userauth is OK
2025-12-13T00:09:46.596 [DEBUG] [Thread-79055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:09:46.596 [DEBUG] [Thread-79055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:09:46.596 [DEBUG] [Thread-79055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:09:46.596 [DEBUG] [Thread-79055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:09:46.619 [INFO] [Thread-79055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:09:46.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:09:46.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:09:47.476 [DEBUG] [Thread-79055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:09:47.477 [DEBUG] [Thread-79055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:09:47.525 [DEBUG] [Thread-79055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:09:47.525 [DEBUG] [Thread-79055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:09:47.534 [DEBUG] [Thread-79055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:09:47.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:09:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:09:47.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:09:47.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:09:47.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:09:47.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:09:47.569 [DEBUG] [Thread-79055] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:09:58.404 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:09:58.405 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:01.579 [DEBUG] [Thread-79058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:16.609 [DEBUG] [Thread-79059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:10:17.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:10:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:10:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 9, 54), 1.27, 91.8, 0.0, 37.97, 8.37, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:10:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:09:54
2025-12-13T00:10:18.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:10:18.593 [DEBUG] [Thread-79060] [transport.py] [_log()] starting thread (client mode): 0xf813de70
2025-12-13T00:10:18.593 [DEBUG] [Thread-79060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:10:18.613 [DEBUG] [Thread-79060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:10:18.613 [INFO] [Thread-79060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:18.616 [DEBUG] [Thread-79060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] client lang: <none>
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] server lang: <none>
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] kex follows: False
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] Compression: none
2025-12-13T00:10:18.617 [DEBUG] [Thread-79060] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:10:18.632 [DEBUG] [Thread-79060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:10:18.632 [DEBUG] [Thread-79060] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:10:18.632 [DEBUG] [Thread-79060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:10:18.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:10:18.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:10:18.633 [DEBUG] [Thread-79060] [transport.py] [_log()] userauth is OK
2025-12-13T00:10:18.633 [DEBUG] [Thread-79060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:10:18.633 [DEBUG] [Thread-79060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:10:18.633 [DEBUG] [Thread-79060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:10:18.633 [DEBUG] [Thread-79060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:10:18.652 [INFO] [Thread-79060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:10:18.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:10:19.331 [DEBUG] [Thread-79060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:10:19.331 [DEBUG] [Thread-79060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:10:19.331 [DEBUG] [Thread-79060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:10:19.371 [DEBUG] [Thread-79060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:10:19.371 [DEBUG] [Thread-79060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:10:19.374 [DEBUG] [Thread-79060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:10:19.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:10:19.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:10:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:10:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:10:19.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:10:19.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:10:19.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.923361 -999.00   +8.20  45.59     91   +6.90 1 1 2 3 1     0    0 1.26 1.89 ZNESW 44.5 45.6 312.6 52.4 9.2 -22.2 9.1 -19.2 8.8 -18.9 9.2 -20.8
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.923361
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T00:10:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:09:54', tmtdew=1.27, humidity=91.8, cloud=0.0, wind=37.97, temperature=8.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:09:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[0.17274999999999885, 0.5522500000000008, 0.6802500000000009, 0.32349999999999923, 0.11350000000000016, 0.28775000000000084, 0.20599999999999952, 0.13525000000000098, 0.22449999999999903, 0.9370000000000003, 1.6632499999999997, 0.8369999999999997, 0.30599999999999916, 0.26874999999999893, 0.26699999999999946, 0.3249999999999993, 0.24124999999999908, 0.7074999999999996, 2.6789999999999994, 0.8752499999999985, 0.44599999999999795, 0.41274999999999906, 0.4827500000000011, 0.3507499999999997, 0.33199999999999896, 0.48350000000000026, 2.44475, 1.7160000000000002, 0.6680000000000001, 0.6080000000000014, 0.8230000000000013, 0.7805, 0.3352499999999994], zp_timestamp='2025-12-12T22:07:00')
2025-12-13T00:10:19.397 [DEBUG] [Thread-79060] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:10:19.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:10:19.483 [DEBUG] [Thread-79063] [transport.py] [_log()] starting thread (client mode): 0xf813f8e0
2025-12-13T00:10:19.483 [DEBUG] [Thread-79063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:10:19.500 [DEBUG] [Thread-79063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:10:19.500 [INFO] [Thread-79063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] client lang: <none>
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] server lang: <none>
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] kex follows: False
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:10:19.507 [DEBUG] [Thread-79063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:10:19.508 [DEBUG] [Thread-79063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:10:19.508 [DEBUG] [Thread-79063] [transport.py] [_log()] Compression: none
2025-12-13T00:10:19.508 [DEBUG] [Thread-79063] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:10:19.563 [DEBUG] [Thread-79063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:10:19.563 [DEBUG] [Thread-79063] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:10:19.563 [DEBUG] [Thread-79063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:10:19.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:10:19.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:10:19.624 [DEBUG] [Thread-79063] [transport.py] [_log()] userauth is OK
2025-12-13T00:10:19.624 [DEBUG] [Thread-79063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:10:19.624 [DEBUG] [Thread-79063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:10:19.624 [DEBUG] [Thread-79063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:10:19.624 [DEBUG] [Thread-79063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:10:19.638 [INFO] [Thread-79063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:10:19.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:10:19.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:10:20.432 [DEBUG] [Thread-79063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:10:20.432 [DEBUG] [Thread-79063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:10:20.479 [DEBUG] [Thread-79063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:10:20.479 [DEBUG] [Thread-79063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:10:20.487 [DEBUG] [Thread-79063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:10:20.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:10:20.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:10:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:10:20.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:10:20.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:10:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:10:20.519 [DEBUG] [Thread-79063] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:10:23.910 [DEBUG] [Thread-79065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:31.635 [DEBUG] [Thread-79066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:46.678 [DEBUG] [Thread-79067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:10:50.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:10:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:10:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 10, 26), 1.27, 91.84, 0.0, 39.08, 8.38, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:10:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:10:26
2025-12-13T00:10:51.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:10:51.494 [DEBUG] [Thread-79068] [transport.py] [_log()] starting thread (client mode): 0xf5772dd0
2025-12-13T00:10:51.494 [DEBUG] [Thread-79068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:10:51.514 [DEBUG] [Thread-79068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:10:51.514 [INFO] [Thread-79068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] client lang: <none>
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] server lang: <none>
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] kex follows: False
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:10:51.517 [DEBUG] [Thread-79068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:10:51.518 [DEBUG] [Thread-79068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:10:51.518 [DEBUG] [Thread-79068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:10:51.518 [DEBUG] [Thread-79068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:10:51.518 [DEBUG] [Thread-79068] [transport.py] [_log()] Compression: none
2025-12-13T00:10:51.518 [DEBUG] [Thread-79068] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:10:51.537 [DEBUG] [Thread-79068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:10:51.538 [DEBUG] [Thread-79068] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:10:51.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:10:51.539 [DEBUG] [Thread-79068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:10:51.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:10:51.541 [DEBUG] [Thread-79068] [transport.py] [_log()] userauth is OK
2025-12-13T00:10:51.541 [DEBUG] [Thread-79068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:10:51.541 [DEBUG] [Thread-79068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:10:51.541 [DEBUG] [Thread-79068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:10:51.541 [DEBUG] [Thread-79068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:10:51.561 [INFO] [Thread-79068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:10:51.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:10:52.199 [DEBUG] [Thread-79068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:10:52.199 [DEBUG] [Thread-79068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:10:52.200 [DEBUG] [Thread-79068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:10:52.240 [DEBUG] [Thread-79068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:10:52.240 [DEBUG] [Thread-79068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:10:52.243 [DEBUG] [Thread-79068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:10:52.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:10:52.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:10:52.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:10:52.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:10:52.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:10:52.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:10:52.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:10:52.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:10:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:10:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.923708 -999.00   +8.20  36.84     91   +6.90 1 2 2 3 1     0    0 1.27 1.84 ZNE.W 42.7 36.8 321.6 52.8 9.3 -19.2 9.1 -20.3 8.8 -17.9 9.2 -19.3
2025-12-13T00:10:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:10:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:10:52.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.923708
2025-12-13T00:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:10:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:10:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:10:26', tmtdew=1.27, humidity=91.84, cloud=0.0, wind=39.08, temperature=8.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:10:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.5522500000000008, 0.6802500000000009, 0.32349999999999923, 0.11350000000000016, 0.28775000000000084, 0.20599999999999952, 0.13525000000000098, 0.22449999999999903, 0.9370000000000003, 1.6632499999999997, 0.8369999999999997, 0.30599999999999916, 0.26874999999999893, 0.26699999999999946, 0.3249999999999993, 0.24124999999999908, 0.7074999999999996, 2.6789999999999994, 0.8752499999999985, 0.44599999999999795, 0.41274999999999906, 0.4827500000000011, 0.3507499999999997, 0.33199999999999896, 0.48350000000000026, 2.44475, 1.7160000000000002, 0.6680000000000001, 0.6080000000000014, 0.8230000000000013, 0.7805, 0.3352499999999994], zp_timestamp='2025-12-12T22:07:00')
2025-12-13T00:10:52.267 [DEBUG] [Thread-79068] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:10:52.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:10:52.372 [DEBUG] [Thread-79071] [transport.py] [_log()] starting thread (client mode): 0xf5770fa0
2025-12-13T00:10:52.372 [DEBUG] [Thread-79071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:10:52.390 [DEBUG] [Thread-79071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:10:52.391 [INFO] [Thread-79071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:10:52.398 [DEBUG] [Thread-79071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:10:52.398 [DEBUG] [Thread-79071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] client lang: <none>
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] server lang: <none>
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] kex follows: False
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:10:52.399 [DEBUG] [Thread-79071] [transport.py] [_log()] Compression: none
2025-12-13T00:10:52.400 [DEBUG] [Thread-79071] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:10:52.456 [DEBUG] [Thread-79071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:10:52.456 [DEBUG] [Thread-79071] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:10:52.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:10:52.456 [DEBUG] [Thread-79071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:10:52.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:10:52.513 [DEBUG] [Thread-79071] [transport.py] [_log()] userauth is OK
2025-12-13T00:10:52.513 [DEBUG] [Thread-79071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:10:52.513 [DEBUG] [Thread-79071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:10:52.514 [DEBUG] [Thread-79071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:10:52.514 [DEBUG] [Thread-79071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:10:52.532 [INFO] [Thread-79071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:10:52.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:10:52.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:10:53.383 [DEBUG] [Thread-79071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:10:53.383 [DEBUG] [Thread-79071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:10:53.431 [DEBUG] [Thread-79071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:10:53.431 [DEBUG] [Thread-79071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:10:53.440 [DEBUG] [Thread-79071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:10:53.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:10:53.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:10:53.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:10:53.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:10:53.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:10:53.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:10:53.474 [DEBUG] [Thread-79071] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:10:58.609 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:10:58.610 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:01.706 [DEBUG] [Thread-79073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:16.753 [DEBUG] [Thread-79074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:11:23.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:11:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:11:23.981 [DEBUG] [Thread-79075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:24.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 10, 58), 1.32, 91.82, 0.0, 46.32, 8.37, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:11:24.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:10:58
2025-12-13T00:11:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:11:24.456 [DEBUG] [Thread-79076] [transport.py] [_log()] starting thread (client mode): 0xf5770f10
2025-12-13T00:11:24.456 [DEBUG] [Thread-79076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:11:24.477 [DEBUG] [Thread-79076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:11:24.477 [INFO] [Thread-79076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] client lang: <none>
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] server lang: <none>
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] kex follows: False
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:11:24.480 [DEBUG] [Thread-79076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:11:24.481 [DEBUG] [Thread-79076] [transport.py] [_log()] Compression: none
2025-12-13T00:11:24.481 [DEBUG] [Thread-79076] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:11:24.497 [DEBUG] [Thread-79076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:11:24.497 [DEBUG] [Thread-79076] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:11:24.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:11:24.498 [DEBUG] [Thread-79076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:11:24.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:11:24.500 [DEBUG] [Thread-79076] [transport.py] [_log()] userauth is OK
2025-12-13T00:11:24.500 [DEBUG] [Thread-79076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:11:24.500 [DEBUG] [Thread-79076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:11:24.500 [DEBUG] [Thread-79076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:11:24.501 [DEBUG] [Thread-79076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:11:24.522 [INFO] [Thread-79076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:11:24.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:11:25.124 [DEBUG] [Thread-79076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:11:25.125 [DEBUG] [Thread-79076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:11:25.125 [DEBUG] [Thread-79076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:11:25.165 [DEBUG] [Thread-79076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:11:25.165 [DEBUG] [Thread-79076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:11:25.168 [DEBUG] [Thread-79076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:11:25.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:11:25.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:11:25.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:11:25.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:11:25.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:11:25.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:11:25.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:11:25.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:11:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:11:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.924056 -999.00   +8.20  38.68     91   +6.90 1 2 2 3 1     0    0 1.27 2.08 ZNE.W 30.0 38.7 318.0 45.8 9.2 -9.2 9.1 -14.7 8.8 -11.9 9.2 -11.2
2025-12-13T00:11:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:11:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:11:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.924056
2025-12-13T00:11:25.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:11:25.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:11:25.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:11:25.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:11:25.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:11:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:10:58', tmtdew=1.32, humidity=91.82, cloud=0.0, wind=46.32, temperature=8.37, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:10:38.438', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:09:00')
2025-12-13T00:11:25.194 [DEBUG] [Thread-79076] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:11:25.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:11:25.291 [DEBUG] [Thread-79079] [transport.py] [_log()] starting thread (client mode): 0xfabc5ed0
2025-12-13T00:11:25.292 [DEBUG] [Thread-79079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:11:25.307 [DEBUG] [Thread-79079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:11:25.307 [INFO] [Thread-79079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:11:25.314 [DEBUG] [Thread-79079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:11:25.314 [DEBUG] [Thread-79079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] client lang: <none>
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] server lang: <none>
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] kex follows: False
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] Compression: none
2025-12-13T00:11:25.315 [DEBUG] [Thread-79079] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:11:25.373 [DEBUG] [Thread-79079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:11:25.374 [DEBUG] [Thread-79079] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:11:25.374 [DEBUG] [Thread-79079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:11:25.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:11:25.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:11:25.434 [DEBUG] [Thread-79079] [transport.py] [_log()] userauth is OK
2025-12-13T00:11:25.434 [DEBUG] [Thread-79079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:11:25.434 [DEBUG] [Thread-79079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:11:25.434 [DEBUG] [Thread-79079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:11:25.434 [DEBUG] [Thread-79079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:11:25.454 [INFO] [Thread-79079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:11:25.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:11:25.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:11:26.254 [DEBUG] [Thread-79079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:11:26.255 [DEBUG] [Thread-79079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:11:26.303 [DEBUG] [Thread-79079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:11:26.303 [DEBUG] [Thread-79079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:11:26.312 [DEBUG] [Thread-79079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:11:26.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:11:26.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:11:26.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:11:26.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:11:26.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:11:26.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:11:26.347 [DEBUG] [Thread-79079] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:11:31.781 [DEBUG] [Thread-79081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:46.846 [DEBUG] [Thread-79082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:56.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:11:56.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:11:56.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:11:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 11, 30), 1.32, 91.84, 0.0, 45.01, 8.38, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:11:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:11:30
2025-12-13T00:11:57.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:11:57.322 [DEBUG] [Thread-79083] [transport.py] [_log()] starting thread (client mode): 0xf5773790
2025-12-13T00:11:57.322 [DEBUG] [Thread-79083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:11:57.343 [DEBUG] [Thread-79083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:11:57.343 [INFO] [Thread-79083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] client lang: <none>
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] server lang: <none>
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] kex follows: False
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] Compression: none
2025-12-13T00:11:57.345 [DEBUG] [Thread-79083] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:11:57.357 [DEBUG] [Thread-79083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:11:57.357 [DEBUG] [Thread-79083] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:11:57.358 [DEBUG] [Thread-79083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:11:57.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:11:57.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:11:57.359 [DEBUG] [Thread-79083] [transport.py] [_log()] userauth is OK
2025-12-13T00:11:57.359 [DEBUG] [Thread-79083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:11:57.359 [DEBUG] [Thread-79083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:11:57.360 [DEBUG] [Thread-79083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:11:57.360 [DEBUG] [Thread-79083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:11:57.378 [INFO] [Thread-79083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:11:57.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:11:57.989 [DEBUG] [Thread-79083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:11:57.989 [DEBUG] [Thread-79083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:11:57.990 [DEBUG] [Thread-79083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:11:58.030 [DEBUG] [Thread-79083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:11:58.030 [DEBUG] [Thread-79083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:11:58.033 [DEBUG] [Thread-79083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:11:58.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:11:58.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:11:58.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:11:58.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:11:58.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:11:58.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:11:58.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:11:58.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:11:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:11:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.924403 -999.00   +8.20  40.51     91   +6.90 1 3 2 3 1     0    0 1.29 2.58 ZNE.W 34.4 40.5 314.9 49.8 9.2 -11.8 9.1 -7.2 8.8 -9.3 9.2 -11.9
2025-12-13T00:11:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:11:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:11:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.924403
2025-12-13T00:11:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:11:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:11:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:11:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:11:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:11:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:11:30', tmtdew=1.32, humidity=91.84, cloud=0.0, wind=45.01, temperature=8.38, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:11:08.419', atlas_cloud=3, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:09:00')
2025-12-13T00:11:58.058 [DEBUG] [Thread-79083] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:11:58.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:11:58.155 [DEBUG] [Thread-79086] [transport.py] [_log()] starting thread (client mode): 0xf5771750
2025-12-13T00:11:58.155 [DEBUG] [Thread-79086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:11:58.171 [DEBUG] [Thread-79086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:11:58.171 [INFO] [Thread-79086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:11:58.178 [DEBUG] [Thread-79086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] client lang: <none>
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] server lang: <none>
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] kex follows: False
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] Compression: none
2025-12-13T00:11:58.179 [DEBUG] [Thread-79086] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:11:58.238 [DEBUG] [Thread-79086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:11:58.238 [DEBUG] [Thread-79086] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:11:58.239 [DEBUG] [Thread-79086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:11:58.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:11:58.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:11:58.294 [DEBUG] [Thread-79086] [transport.py] [_log()] userauth is OK
2025-12-13T00:11:58.294 [DEBUG] [Thread-79086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:11:58.294 [DEBUG] [Thread-79086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:11:58.294 [DEBUG] [Thread-79086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:11:58.295 [DEBUG] [Thread-79086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:11:58.313 [INFO] [Thread-79086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:11:58.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:11:58.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:11:58.815 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:58.817 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:11:59.120 [DEBUG] [Thread-79086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:11:59.121 [DEBUG] [Thread-79086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:11:59.169 [DEBUG] [Thread-79086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:11:59.169 [DEBUG] [Thread-79086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:11:59.178 [DEBUG] [Thread-79086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:11:59.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:11:59.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:11:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:11:59.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:11:59.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:11:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:11:59.213 [DEBUG] [Thread-79086] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:12:01.878 [DEBUG] [Thread-79088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:12:16.928 [DEBUG] [Thread-79089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:12:24.057 [DEBUG] [Thread-79090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:12:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:12:29.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:12:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:12:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 12, 2), 1.32, 91.79, 0.0, 47.23, 8.33, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:12:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:12:02
2025-12-13T00:12:30.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:12:30.183 [DEBUG] [Thread-79091] [transport.py] [_log()] starting thread (client mode): 0xf813fca0
2025-12-13T00:12:30.183 [DEBUG] [Thread-79091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:12:30.203 [DEBUG] [Thread-79091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:12:30.203 [INFO] [Thread-79091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:12:30.206 [DEBUG] [Thread-79091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:12:30.206 [DEBUG] [Thread-79091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:12:30.206 [DEBUG] [Thread-79091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] client lang: <none>
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] server lang: <none>
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] kex follows: False
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] Compression: none
2025-12-13T00:12:30.207 [DEBUG] [Thread-79091] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:12:30.225 [DEBUG] [Thread-79091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:12:30.225 [DEBUG] [Thread-79091] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:12:30.226 [DEBUG] [Thread-79091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:12:30.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:12:30.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:12:30.228 [DEBUG] [Thread-79091] [transport.py] [_log()] userauth is OK
2025-12-13T00:12:30.228 [DEBUG] [Thread-79091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:12:30.228 [DEBUG] [Thread-79091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:12:30.228 [DEBUG] [Thread-79091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:12:30.228 [DEBUG] [Thread-79091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:12:30.263 [INFO] [Thread-79091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:12:30.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:12:30.913 [DEBUG] [Thread-79091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:12:30.913 [DEBUG] [Thread-79091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:12:30.913 [DEBUG] [Thread-79091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:12:30.954 [DEBUG] [Thread-79091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:12:30.954 [DEBUG] [Thread-79091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:12:30.957 [DEBUG] [Thread-79091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:12:30.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:12:30.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:12:30.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:12:30.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:12:30.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:12:30.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:12:30.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:12:30.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:12:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:12:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.925097 -999.00   +8.20  35.86     91   +7.00 1 3 2 3 1     0    0 1.31 2.81 zNEs. 47.9 35.9 312.0 43.8 9.3 -17.0 9.2 -6.2 8.9 -7.9 9.2 -13.0
2025-12-13T00:12:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:12:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:12:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.925097
2025-12-13T00:12:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:12:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:12:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:12:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:12:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:12:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:12:02', tmtdew=1.32, humidity=91.79, cloud=0.0, wind=47.23, temperature=8.33, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:12:08.381', atlas_cloud=3, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:09:00')
2025-12-13T00:12:30.982 [DEBUG] [Thread-79091] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:12:31.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:12:31.070 [DEBUG] [Thread-79094] [transport.py] [_log()] starting thread (client mode): 0xf81e78e0
2025-12-13T00:12:31.071 [DEBUG] [Thread-79094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:12:31.086 [DEBUG] [Thread-79094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:12:31.086 [INFO] [Thread-79094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:12:31.093 [DEBUG] [Thread-79094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:12:31.093 [DEBUG] [Thread-79094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:12:31.093 [DEBUG] [Thread-79094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:12:31.093 [DEBUG] [Thread-79094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] client lang: <none>
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] server lang: <none>
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] kex follows: False
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] Compression: none
2025-12-13T00:12:31.094 [DEBUG] [Thread-79094] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:12:31.153 [DEBUG] [Thread-79094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:12:31.154 [DEBUG] [Thread-79094] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:12:31.154 [DEBUG] [Thread-79094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:12:31.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:12:31.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:12:31.210 [DEBUG] [Thread-79094] [transport.py] [_log()] userauth is OK
2025-12-13T00:12:31.210 [DEBUG] [Thread-79094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:12:31.211 [DEBUG] [Thread-79094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:12:31.211 [DEBUG] [Thread-79094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:12:31.211 [DEBUG] [Thread-79094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:12:31.228 [INFO] [Thread-79094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:12:31.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:12:31.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:12:31.958 [DEBUG] [Thread-79096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:12:32.091 [DEBUG] [Thread-79094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:12:32.091 [DEBUG] [Thread-79094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:12:32.141 [DEBUG] [Thread-79094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:12:32.141 [DEBUG] [Thread-79094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:12:32.150 [DEBUG] [Thread-79094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:12:32.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:12:32.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:12:32.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:12:32.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:12:32.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:12:32.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:12:32.187 [DEBUG] [Thread-79094] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:12:46.999 [DEBUG] [Thread-79097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:12:59.020 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:12:59.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:02.026 [DEBUG] [Thread-79098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:02.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:13:02.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:13:02.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
2025-12-13T00:13:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 12, 34), 1.27, 91.82, 0.0, 45.33, 8.27, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:13:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:12:34
2025-12-13T00:13:03.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:13:03.154 [DEBUG] [Thread-79099] [transport.py] [_log()] starting thread (client mode): 0xf813d9c0
2025-12-13T00:13:03.154 [DEBUG] [Thread-79099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:13:03.175 [DEBUG] [Thread-79099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:13:03.175 [INFO] [Thread-79099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] client lang: <none>
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] server lang: <none>
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] kex follows: False
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:13:03.178 [DEBUG] [Thread-79099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:13:03.179 [DEBUG] [Thread-79099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:13:03.179 [DEBUG] [Thread-79099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:13:03.179 [DEBUG] [Thread-79099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:13:03.179 [DEBUG] [Thread-79099] [transport.py] [_log()] Compression: none
2025-12-13T00:13:03.179 [DEBUG] [Thread-79099] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:13:03.197 [DEBUG] [Thread-79099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:13:03.198 [DEBUG] [Thread-79099] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:13:03.198 [DEBUG] [Thread-79099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:13:03.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:13:03.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:13:03.200 [DEBUG] [Thread-79099] [transport.py] [_log()] userauth is OK
2025-12-13T00:13:03.200 [DEBUG] [Thread-79099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:13:03.200 [DEBUG] [Thread-79099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:13:03.200 [DEBUG] [Thread-79099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:13:03.201 [DEBUG] [Thread-79099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:13:03.224 [INFO] [Thread-79099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:13:03.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:13:03.884 [DEBUG] [Thread-79099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:13:03.884 [DEBUG] [Thread-79099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:13:03.884 [DEBUG] [Thread-79099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:13:03.925 [DEBUG] [Thread-79099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:13:03.925 [DEBUG] [Thread-79099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:13:03.928 [DEBUG] [Thread-79099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:13:03.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:13:03.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:13:03.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:13:03.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:13:03.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:13:03.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:13:03.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:13:03.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:13:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:13:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.925445 -999.00   +8.10  37.18     92   +6.90 1 2 2 3 1     0    0 1.29 2.93 ZNEsW 42.8 37.2 319.4 59.7 9.3 -15.2 9.1 -17.3 8.8 -15.6 9.2 -14.9
2025-12-13T00:13:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:13:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:13:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.925445
2025-12-13T00:13:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:13:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:13:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:13:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:13:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:13:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:12:34', tmtdew=1.27, humidity=91.82, cloud=0.0, wind=45.33, temperature=8.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:12:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:09:00')
2025-12-13T00:13:03.953 [DEBUG] [Thread-79099] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:13:04.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:13:04.042 [DEBUG] [Thread-79102] [transport.py] [_log()] starting thread (client mode): 0xf813dab0
2025-12-13T00:13:04.042 [DEBUG] [Thread-79102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:13:04.057 [DEBUG] [Thread-79102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:13:04.057 [INFO] [Thread-79102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:13:04.064 [DEBUG] [Thread-79102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:13:04.064 [DEBUG] [Thread-79102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:13:04.064 [DEBUG] [Thread-79102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:13:04.064 [DEBUG] [Thread-79102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:04.064 [DEBUG] [Thread-79102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:04.064 [DEBUG] [Thread-79102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] client lang: <none>
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] server lang: <none>
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] kex follows: False
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] Compression: none
2025-12-13T00:13:04.065 [DEBUG] [Thread-79102] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:13:04.122 [DEBUG] [Thread-79102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:13:04.123 [DEBUG] [Thread-79102] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:13:04.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:13:04.124 [DEBUG] [Thread-79102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:13:04.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:13:04.179 [DEBUG] [Thread-79102] [transport.py] [_log()] userauth is OK
2025-12-13T00:13:04.179 [DEBUG] [Thread-79102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:13:04.180 [DEBUG] [Thread-79102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:13:04.180 [DEBUG] [Thread-79102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:13:04.180 [DEBUG] [Thread-79102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:13:04.202 [INFO] [Thread-79102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:13:04.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:13:04.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:13:05.055 [DEBUG] [Thread-79102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:13:05.055 [DEBUG] [Thread-79102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:13:05.103 [DEBUG] [Thread-79102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:13:05.103 [DEBUG] [Thread-79102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:13:05.111 [DEBUG] [Thread-79102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:13:05.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:13:05.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:13:05.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:13:05.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:13:05.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:13:05.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:13:05.145 [DEBUG] [Thread-79102] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:13:17.055 [DEBUG] [Thread-79104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:24.136 [DEBUG] [Thread-79105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:32.096 [DEBUG] [Thread-79106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:35.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:13:35.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:13:35.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:13:35.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 13, 6), 1.26, 91.89, 0.0, 46.63, 8.3, 2, 2, 0, 2, 1, 0),)
2025-12-13T00:13:35.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:13:06
2025-12-13T00:13:35.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:13:36.133 [DEBUG] [Thread-79107] [transport.py] [_log()] starting thread (client mode): 0xf5772ef0
2025-12-13T00:13:36.133 [DEBUG] [Thread-79107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:13:36.154 [DEBUG] [Thread-79107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:13:36.154 [INFO] [Thread-79107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] client lang: <none>
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] server lang: <none>
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] kex follows: False
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:13:36.157 [DEBUG] [Thread-79107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:13:36.158 [DEBUG] [Thread-79107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:13:36.158 [DEBUG] [Thread-79107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:13:36.158 [DEBUG] [Thread-79107] [transport.py] [_log()] Compression: none
2025-12-13T00:13:36.158 [DEBUG] [Thread-79107] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:13:36.174 [DEBUG] [Thread-79107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:13:36.174 [DEBUG] [Thread-79107] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:13:36.174 [DEBUG] [Thread-79107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:13:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:13:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:13:36.175 [DEBUG] [Thread-79107] [transport.py] [_log()] userauth is OK
2025-12-13T00:13:36.175 [DEBUG] [Thread-79107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:13:36.175 [DEBUG] [Thread-79107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:13:36.175 [DEBUG] [Thread-79107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:13:36.175 [DEBUG] [Thread-79107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:13:36.190 [INFO] [Thread-79107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:13:36.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:13:36.804 [DEBUG] [Thread-79107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:13:36.804 [DEBUG] [Thread-79107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:13:36.804 [DEBUG] [Thread-79107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:13:36.845 [DEBUG] [Thread-79107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:13:36.845 [DEBUG] [Thread-79107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:13:36.849 [DEBUG] [Thread-79107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:13:36.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:13:36.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:13:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:13:36.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:13:36.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:13:36.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:13:36.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:13:36.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:13:36.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:13:36.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.925792 -999.00   +8.10  46.92     92   +6.90 1 2 2 3 1     0    0 1.28 2.85 ZNEsW 46.3 46.9 306.8 52.9 9.3 -16.2 9.1 -16.1 8.9 -16.0 9.2 -15.9
2025-12-13T00:13:36.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:13:36.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:13:36.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.925792
2025-12-13T00:13:36.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:13:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:13:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:13:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:13:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:13:36.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:13:06', tmtdew=1.26, humidity=91.89, cloud=0.0, wind=46.63, temperature=8.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:13:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:09:00')
2025-12-13T00:13:36.877 [DEBUG] [Thread-79107] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:13:36.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:13:36.978 [DEBUG] [Thread-79110] [transport.py] [_log()] starting thread (client mode): 0xf575c9a0
2025-12-13T00:13:36.978 [DEBUG] [Thread-79110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:13:36.994 [DEBUG] [Thread-79110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:13:36.994 [INFO] [Thread-79110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:13:37.001 [DEBUG] [Thread-79110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:13:37.001 [DEBUG] [Thread-79110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] client lang: <none>
2025-12-13T00:13:37.002 [DEBUG] [Thread-79110] [transport.py] [_log()] server lang: <none>
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] kex follows: False
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] Compression: none
2025-12-13T00:13:37.003 [DEBUG] [Thread-79110] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:13:37.059 [DEBUG] [Thread-79110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:13:37.060 [DEBUG] [Thread-79110] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:13:37.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:13:37.061 [DEBUG] [Thread-79110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:13:37.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:13:37.117 [DEBUG] [Thread-79110] [transport.py] [_log()] userauth is OK
2025-12-13T00:13:37.117 [DEBUG] [Thread-79110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:13:37.117 [DEBUG] [Thread-79110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:13:37.117 [DEBUG] [Thread-79110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:13:37.118 [DEBUG] [Thread-79110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:13:37.136 [INFO] [Thread-79110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:13:37.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:13:37.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:13:38.011 [DEBUG] [Thread-79110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:13:38.011 [DEBUG] [Thread-79110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:13:38.059 [DEBUG] [Thread-79110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:13:38.059 [DEBUG] [Thread-79110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:13:38.068 [DEBUG] [Thread-79110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:13:38.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:13:38.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:13:38.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:13:38.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:13:38.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:13:38.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:13:38.107 [DEBUG] [Thread-79110] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:13:47.126 [DEBUG] [Thread-79112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:59.228 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:13:59.230 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:02.181 [DEBUG] [Thread-79113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:14:08.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:14:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:14:08.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 13, 38), 1.26, 91.89, 0.0, 38.83, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:14:08.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:13:38
2025-12-13T00:14:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:14:09.104 [DEBUG] [Thread-79114] [transport.py] [_log()] starting thread (client mode): 0xf813cdc0
2025-12-13T00:14:09.105 [DEBUG] [Thread-79114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:14:09.125 [DEBUG] [Thread-79114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:14:09.125 [INFO] [Thread-79114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:14:09.128 [DEBUG] [Thread-79114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:14:09.128 [DEBUG] [Thread-79114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:14:09.128 [DEBUG] [Thread-79114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] client lang: <none>
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] server lang: <none>
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] kex follows: False
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] Compression: none
2025-12-13T00:14:09.129 [DEBUG] [Thread-79114] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:14:09.144 [DEBUG] [Thread-79114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:14:09.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:14:09.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] userauth is OK
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:14:09.145 [DEBUG] [Thread-79114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:14:09.154 [INFO] [Thread-79114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:14:09.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:14:09.787 [DEBUG] [Thread-79114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:14:09.787 [DEBUG] [Thread-79114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:14:09.787 [DEBUG] [Thread-79114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:14:09.828 [DEBUG] [Thread-79114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:14:09.828 [DEBUG] [Thread-79114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:14:09.830 [DEBUG] [Thread-79114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:14:09.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:14:09.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:14:09.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:14:09.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:14:09.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:14:09.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.926139 -999.00   +8.10  46.02     92   +6.90 1 2 2 3 1     0    0 1.32 2.95 zNE.w 40.4 46.0 315.2 58.7 9.3 -17.5 9.1 -16.1 8.8 -15.3 9.2 -15.9
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:14:09.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.926139
2025-12-13T00:14:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:14:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:14:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:14:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:14:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:14:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:13:38', tmtdew=1.26, humidity=91.89, cloud=0.0, wind=38.83, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:13:38.410', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:13:00')
2025-12-13T00:14:09.849 [DEBUG] [Thread-79114] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:14:09.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:14:09.935 [DEBUG] [Thread-79117] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-13T00:14:09.935 [DEBUG] [Thread-79117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:14:09.950 [DEBUG] [Thread-79117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:14:09.950 [INFO] [Thread-79117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] client lang: <none>
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] server lang: <none>
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] kex follows: False
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:14:09.957 [DEBUG] [Thread-79117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:14:09.958 [DEBUG] [Thread-79117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:14:09.958 [DEBUG] [Thread-79117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:14:09.958 [DEBUG] [Thread-79117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:14:09.958 [DEBUG] [Thread-79117] [transport.py] [_log()] Compression: none
2025-12-13T00:14:09.958 [DEBUG] [Thread-79117] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:14:10.015 [DEBUG] [Thread-79117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:14:10.015 [DEBUG] [Thread-79117] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:14:10.015 [DEBUG] [Thread-79117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:14:10.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:14:10.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:14:10.072 [DEBUG] [Thread-79117] [transport.py] [_log()] userauth is OK
2025-12-13T00:14:10.072 [DEBUG] [Thread-79117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:14:10.072 [DEBUG] [Thread-79117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:14:10.072 [DEBUG] [Thread-79117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:14:10.072 [DEBUG] [Thread-79117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:14:10.090 [INFO] [Thread-79117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:14:10.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:14:10.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:14:10.908 [DEBUG] [Thread-79117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:14:10.908 [DEBUG] [Thread-79117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:14:10.956 [DEBUG] [Thread-79117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:14:10.957 [DEBUG] [Thread-79117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:14:10.965 [DEBUG] [Thread-79117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:14:10.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:14:10.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:14:10.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:14:10.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:14:10.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:14:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:14:10.996 [DEBUG] [Thread-79117] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:14:17.212 [DEBUG] [Thread-79119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:24.212 [DEBUG] [Thread-79120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:32.265 [DEBUG] [Thread-79121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:14:41.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:14:41.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:14:41.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 14, 10), 1.25, 91.94, 0.0, 40.16, 8.3, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:14:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:14:10
2025-12-13T00:14:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:14:41.973 [DEBUG] [Thread-79122] [transport.py] [_log()] starting thread (client mode): 0xf57f1c60
2025-12-13T00:14:41.974 [DEBUG] [Thread-79122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:14:41.994 [DEBUG] [Thread-79122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:14:41.994 [INFO] [Thread-79122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:14:41.997 [DEBUG] [Thread-79122] [transport.py] [_log()] client lang: <none>
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] server lang: <none>
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] kex follows: False
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] Compression: none
2025-12-13T00:14:41.998 [DEBUG] [Thread-79122] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:14:42.016 [DEBUG] [Thread-79122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:14:42.017 [DEBUG] [Thread-79122] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:14:42.017 [DEBUG] [Thread-79122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:14:42.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:14:42.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:14:42.020 [DEBUG] [Thread-79122] [transport.py] [_log()] userauth is OK
2025-12-13T00:14:42.020 [DEBUG] [Thread-79122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:14:42.020 [DEBUG] [Thread-79122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:14:42.021 [DEBUG] [Thread-79122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:14:42.021 [DEBUG] [Thread-79122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:14:42.053 [INFO] [Thread-79122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:14:42.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:14:42.662 [DEBUG] [Thread-79122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:14:42.662 [DEBUG] [Thread-79122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:14:42.662 [DEBUG] [Thread-79122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:14:42.703 [DEBUG] [Thread-79122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:14:42.703 [DEBUG] [Thread-79122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:14:42.707 [DEBUG] [Thread-79122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:14:42.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:14:42.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:14:42.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:14:42.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:14:42.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:14:42.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:14:42.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:14:42.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:14:42.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:14:42.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.926486 -999.00   +8.20  34.13     92   +7.00 1 2 2 3 1     0    0 1.27 2.73 Z.ESW 32.2 34.1 316.8 47.9 9.3 -15.6 9.1 -14.2 8.8 -12.2 9.2 -15.6
2025-12-13T00:14:42.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:14:42.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:14:42.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.926486
2025-12-13T00:14:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:14:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:14:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:14:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:14:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:14:42.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:14:10', tmtdew=1.25, humidity=91.94, cloud=0.0, wind=40.16, temperature=8.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:14:08.390', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:13:00')
2025-12-13T00:14:42.733 [DEBUG] [Thread-79122] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:14:42.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:14:42.833 [DEBUG] [Thread-79125] [transport.py] [_log()] starting thread (client mode): 0xf572d900
2025-12-13T00:14:42.833 [DEBUG] [Thread-79125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:14:42.847 [DEBUG] [Thread-79125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:14:42.847 [INFO] [Thread-79125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:14:42.855 [DEBUG] [Thread-79125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] client lang: <none>
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] server lang: <none>
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] kex follows: False
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:14:42.856 [DEBUG] [Thread-79125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:14:42.857 [DEBUG] [Thread-79125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:14:42.857 [DEBUG] [Thread-79125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:14:42.857 [DEBUG] [Thread-79125] [transport.py] [_log()] Compression: none
2025-12-13T00:14:42.857 [DEBUG] [Thread-79125] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:14:42.910 [DEBUG] [Thread-79125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:14:42.910 [DEBUG] [Thread-79125] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:14:42.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:14:42.911 [DEBUG] [Thread-79125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:14:42.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:14:42.968 [DEBUG] [Thread-79125] [transport.py] [_log()] userauth is OK
2025-12-13T00:14:42.968 [DEBUG] [Thread-79125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:14:42.968 [DEBUG] [Thread-79125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:14:42.968 [DEBUG] [Thread-79125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:14:42.968 [DEBUG] [Thread-79125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:14:42.981 [INFO] [Thread-79125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:14:42.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:14:42.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:14:43.774 [DEBUG] [Thread-79125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:14:43.774 [DEBUG] [Thread-79125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:14:43.821 [DEBUG] [Thread-79125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:14:43.821 [DEBUG] [Thread-79125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:14:43.829 [DEBUG] [Thread-79125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:14:43.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:14:43.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:14:43.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:14:43.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:14:43.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:14:43.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:14:43.861 [DEBUG] [Thread-79125] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:14:47.296 [DEBUG] [Thread-79127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:59.440 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:14:59.442 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:02.339 [DEBUG] [Thread-79128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:13.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:15:13.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:15:13.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:15:14.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 14, 42), 1.24, 91.97, 0.0, 44.29, 8.24, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:15:14.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:14:42
2025-12-13T00:15:14.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:15:14.848 [DEBUG] [Thread-79129] [transport.py] [_log()] starting thread (client mode): 0xf572eb60
2025-12-13T00:15:14.848 [DEBUG] [Thread-79129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:15:14.867 [DEBUG] [Thread-79129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:15:14.867 [INFO] [Thread-79129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:15:14.870 [DEBUG] [Thread-79129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:15:14.870 [DEBUG] [Thread-79129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] client lang: <none>
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] server lang: <none>
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] kex follows: False
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] Compression: none
2025-12-13T00:15:14.871 [DEBUG] [Thread-79129] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:15:14.886 [DEBUG] [Thread-79129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:15:14.886 [DEBUG] [Thread-79129] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:15:14.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:15:14.886 [DEBUG] [Thread-79129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:15:14.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:15:14.887 [DEBUG] [Thread-79129] [transport.py] [_log()] userauth is OK
2025-12-13T00:15:14.887 [DEBUG] [Thread-79129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:15:14.887 [DEBUG] [Thread-79129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:15:14.887 [DEBUG] [Thread-79129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:15:14.887 [DEBUG] [Thread-79129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:15:14.902 [INFO] [Thread-79129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:15:14.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:15:15.539 [DEBUG] [Thread-79129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:15:15.539 [DEBUG] [Thread-79129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:15:15.539 [DEBUG] [Thread-79129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:15:15.581 [DEBUG] [Thread-79129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:15:15.581 [DEBUG] [Thread-79129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:15:15.583 [DEBUG] [Thread-79129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:15:15.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:15:15.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:15:15.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:15:15.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:15:15.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:15:15.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:15:15.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.926834 -999.00   +8.20  37.12     92   +7.00 1 3 2 3 1     0    0 1.27 2.65 Z.ESW 38.7 37.1 322.1 41.8 9.3 -9.3 9.1 -9.7 8.9 -7.5 9.2 -10.3
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.926834
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:15:15.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:14:42', tmtdew=1.24, humidity=91.97, cloud=0.0, wind=44.29, temperature=8.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:14:38.458', atlas_cloud=3, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:13:00')
2025-12-13T00:15:15.600 [DEBUG] [Thread-79129] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:15:15.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:15:15.686 [DEBUG] [Thread-79132] [transport.py] [_log()] starting thread (client mode): 0xfabc6bc0
2025-12-13T00:15:15.686 [DEBUG] [Thread-79132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:15:15.699 [DEBUG] [Thread-79132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:15:15.699 [INFO] [Thread-79132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] client lang: <none>
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] server lang: <none>
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] kex follows: False
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] Compression: none
2025-12-13T00:15:15.707 [DEBUG] [Thread-79132] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:15:15.763 [DEBUG] [Thread-79132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:15:15.763 [DEBUG] [Thread-79132] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:15:15.763 [DEBUG] [Thread-79132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:15:15.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:15:15.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:15:15.821 [DEBUG] [Thread-79132] [transport.py] [_log()] userauth is OK
2025-12-13T00:15:15.821 [DEBUG] [Thread-79132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:15:15.821 [DEBUG] [Thread-79132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:15:15.821 [DEBUG] [Thread-79132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:15:15.821 [DEBUG] [Thread-79132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:15:15.834 [INFO] [Thread-79132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:15:15.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:15:15.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:15:16.637 [DEBUG] [Thread-79132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:15:16.637 [DEBUG] [Thread-79132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:15:16.684 [DEBUG] [Thread-79132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:15:16.684 [DEBUG] [Thread-79132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:15:16.693 [DEBUG] [Thread-79132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:15:16.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:15:16.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:15:16.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:15:16.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:15:16.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:15:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:15:16.724 [DEBUG] [Thread-79132] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:15:17.368 [DEBUG] [Thread-79134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:24.285 [DEBUG] [Thread-79135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:32.408 [DEBUG] [Thread-79136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:15:46.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:15:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:15:47.435 [DEBUG] [Thread-79137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 15, 14), 1.24, 91.97, 0.0, 42.96, 8.24, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:15:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:15:14
2025-12-13T00:15:47.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:15:47.759 [DEBUG] [Thread-79138] [transport.py] [_log()] starting thread (client mode): 0xfabc7e20
2025-12-13T00:15:47.759 [DEBUG] [Thread-79138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:15:47.779 [DEBUG] [Thread-79138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:15:47.780 [INFO] [Thread-79138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] client lang: <none>
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] server lang: <none>
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] kex follows: False
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] Compression: none
2025-12-13T00:15:47.783 [DEBUG] [Thread-79138] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:15:47.799 [DEBUG] [Thread-79138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:15:47.799 [DEBUG] [Thread-79138] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:15:47.799 [DEBUG] [Thread-79138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:15:47.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:15:47.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:15:47.844 [DEBUG] [Thread-79138] [transport.py] [_log()] userauth is OK
2025-12-13T00:15:47.844 [DEBUG] [Thread-79138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:15:47.844 [DEBUG] [Thread-79138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:15:47.845 [DEBUG] [Thread-79138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:15:47.845 [DEBUG] [Thread-79138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:15:47.862 [INFO] [Thread-79138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:15:47.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:15:48.491 [DEBUG] [Thread-79138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:15:48.491 [DEBUG] [Thread-79138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:15:48.491 [DEBUG] [Thread-79138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:15:48.533 [DEBUG] [Thread-79138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:15:48.533 [DEBUG] [Thread-79138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:15:48.535 [DEBUG] [Thread-79138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:15:48.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:15:48.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:15:48.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:15:48.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:15:48.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:15:48.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:15:48.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.927528 -999.00   +8.20  44.06     92   +7.00 1 3 2 3 1     0    0 1.30 3.26 zNE.. 40.8 44.1 311.8 55.4 9.4 -6.8 9.2 -2.6 8.9 -2.8 9.3 -5.1
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.927528
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:15:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:15:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:15:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:15:48.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:15:14', tmtdew=1.24, humidity=91.97, cloud=0.0, wind=42.96, temperature=8.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:15:38.419', atlas_cloud=3, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:13:00')
2025-12-13T00:15:48.553 [DEBUG] [Thread-79138] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:15:48.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:15:48.640 [DEBUG] [Thread-79141] [transport.py] [_log()] starting thread (client mode): 0xf572d900
2025-12-13T00:15:48.640 [DEBUG] [Thread-79141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:15:48.657 [DEBUG] [Thread-79141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:15:48.657 [INFO] [Thread-79141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] client lang: <none>
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] server lang: <none>
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] kex follows: False
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] Compression: none
2025-12-13T00:15:48.665 [DEBUG] [Thread-79141] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:15:48.720 [DEBUG] [Thread-79141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:15:48.720 [DEBUG] [Thread-79141] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:15:48.721 [DEBUG] [Thread-79141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:15:48.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:15:48.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:15:48.778 [DEBUG] [Thread-79141] [transport.py] [_log()] userauth is OK
2025-12-13T00:15:48.778 [DEBUG] [Thread-79141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:15:48.778 [DEBUG] [Thread-79141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:15:48.778 [DEBUG] [Thread-79141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:15:48.778 [DEBUG] [Thread-79141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:15:48.795 [INFO] [Thread-79141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:15:48.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:15:48.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:15:49.683 [DEBUG] [Thread-79141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:15:49.683 [DEBUG] [Thread-79141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:15:49.731 [DEBUG] [Thread-79141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:15:49.731 [DEBUG] [Thread-79141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:15:49.740 [DEBUG] [Thread-79141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:15:49.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:15:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:15:49.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:15:49.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:15:49.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:15:49.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:15:49.774 [DEBUG] [Thread-79141] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:15:59.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:15:59.648 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:02.460 [DEBUG] [Thread-79143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:17.503 [DEBUG] [Thread-79144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:19.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:16:19.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:16:19.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:16:20.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 15, 46), 1.18, 92.04, 0.0, 39.17, 8.27, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:16:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:15:46
2025-12-13T00:16:20.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:16:20.820 [DEBUG] [Thread-79145] [transport.py] [_log()] starting thread (client mode): 0xfabc5840
2025-12-13T00:16:20.820 [DEBUG] [Thread-79145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:16:20.840 [DEBUG] [Thread-79145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:16:20.840 [INFO] [Thread-79145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] client lang: <none>
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] server lang: <none>
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] kex follows: False
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] Compression: none
2025-12-13T00:16:20.843 [DEBUG] [Thread-79145] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:16:20.851 [DEBUG] [Thread-79145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:16:20.851 [DEBUG] [Thread-79145] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:16:20.852 [DEBUG] [Thread-79145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:16:20.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:16:20.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:16:20.854 [DEBUG] [Thread-79145] [transport.py] [_log()] userauth is OK
2025-12-13T00:16:20.854 [DEBUG] [Thread-79145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:16:20.854 [DEBUG] [Thread-79145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:16:20.854 [DEBUG] [Thread-79145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:16:20.854 [DEBUG] [Thread-79145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:16:20.881 [INFO] [Thread-79145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:16:20.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:16:21.531 [DEBUG] [Thread-79145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:16:21.532 [DEBUG] [Thread-79145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:16:21.532 [DEBUG] [Thread-79145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:16:21.573 [DEBUG] [Thread-79145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:16:21.573 [DEBUG] [Thread-79145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:16:21.576 [DEBUG] [Thread-79145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:16:21.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:16:21.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:16:21.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:16:21.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:16:21.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:16:21.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:16:21.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:16:21.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.927875 -999.00   +8.20  48.87     92   +7.00 1 3 2 3 1     0    0 1.32 2.86 zNE.. 44.5 48.9 314.0 53.5 9.3 -16.1 9.2 -5.0 9.0 -6.9 9.3 -10.1
2025-12-13T00:16:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:16:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:16:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.927875
2025-12-13T00:16:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:16:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:15:46', tmtdew=1.18, humidity=92.04, cloud=0.0, wind=39.17, temperature=8.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:16:08.400', atlas_cloud=3, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:13:00')
2025-12-13T00:16:21.602 [DEBUG] [Thread-79145] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:16:21.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:16:21.699 [DEBUG] [Thread-79148] [transport.py] [_log()] starting thread (client mode): 0xf5740670
2025-12-13T00:16:21.699 [DEBUG] [Thread-79148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:16:21.714 [DEBUG] [Thread-79148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:16:21.714 [INFO] [Thread-79148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:16:21.722 [DEBUG] [Thread-79148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:16:21.722 [DEBUG] [Thread-79148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:16:21.722 [DEBUG] [Thread-79148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] client lang: <none>
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] server lang: <none>
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] kex follows: False
2025-12-13T00:16:21.723 [DEBUG] [Thread-79148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:16:21.724 [DEBUG] [Thread-79148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:16:21.724 [DEBUG] [Thread-79148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:16:21.724 [DEBUG] [Thread-79148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:16:21.724 [DEBUG] [Thread-79148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:16:21.724 [DEBUG] [Thread-79148] [transport.py] [_log()] Compression: none
2025-12-13T00:16:21.724 [DEBUG] [Thread-79148] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:16:21.782 [DEBUG] [Thread-79148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:16:21.783 [DEBUG] [Thread-79148] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:16:21.783 [DEBUG] [Thread-79148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:16:21.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:16:21.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:16:21.838 [DEBUG] [Thread-79148] [transport.py] [_log()] userauth is OK
2025-12-13T00:16:21.838 [DEBUG] [Thread-79148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:16:21.838 [DEBUG] [Thread-79148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:16:21.838 [DEBUG] [Thread-79148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:16:21.838 [DEBUG] [Thread-79148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:16:21.857 [INFO] [Thread-79148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:16:21.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:16:21.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:16:22.677 [DEBUG] [Thread-79148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:16:22.677 [DEBUG] [Thread-79148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:16:22.725 [DEBUG] [Thread-79148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:16:22.725 [DEBUG] [Thread-79148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:16:22.734 [DEBUG] [Thread-79148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:16:22.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:16:22.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:16:22.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:16:22.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:16:22.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:16:22.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:16:22.767 [DEBUG] [Thread-79148] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:16:24.371 [DEBUG] [Thread-79150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:32.532 [DEBUG] [Thread-79151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:47.567 [DEBUG] [Thread-79152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:16:52.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:16:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:16:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 16, 18), 1.18, 92.04, 0.0, 38.68, 8.27, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:16:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:16:18
2025-12-13T00:16:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:16:53.763 [DEBUG] [Thread-79153] [transport.py] [_log()] starting thread (client mode): 0xf81e6e60
2025-12-13T00:16:53.763 [DEBUG] [Thread-79153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:16:53.777 [DEBUG] [Thread-79153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:16:53.777 [INFO] [Thread-79153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:16:53.780 [DEBUG] [Thread-79153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:16:53.780 [DEBUG] [Thread-79153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:16:53.780 [DEBUG] [Thread-79153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] client lang: <none>
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] server lang: <none>
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] kex follows: False
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] Compression: none
2025-12-13T00:16:53.781 [DEBUG] [Thread-79153] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:16:53.800 [DEBUG] [Thread-79153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:16:53.801 [DEBUG] [Thread-79153] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:16:53.801 [DEBUG] [Thread-79153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:16:53.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:16:53.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:16:53.803 [DEBUG] [Thread-79153] [transport.py] [_log()] userauth is OK
2025-12-13T00:16:53.803 [DEBUG] [Thread-79153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:16:53.804 [DEBUG] [Thread-79153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:16:53.804 [DEBUG] [Thread-79153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:16:53.804 [DEBUG] [Thread-79153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:16:53.827 [INFO] [Thread-79153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:16:53.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:16:54.467 [DEBUG] [Thread-79153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:16:54.467 [DEBUG] [Thread-79153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:16:54.467 [DEBUG] [Thread-79153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:16:54.508 [DEBUG] [Thread-79153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:16:54.508 [DEBUG] [Thread-79153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:16:54.511 [DEBUG] [Thread-79153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:16:54.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:16:54.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:16:54.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:16:54.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:16:54.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:16:54.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:16:54.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:16:54.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:16:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:16:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.928222 -999.00   +8.10  46.32     92   +6.90 1 2 2 3 1     0    0 1.31 2.71 zNE.. 46.0 46.3 311.6 53.5 9.3 -5.0 9.2 -15.6 8.9 -10.8 9.3 -7.3
2025-12-13T00:16:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:16:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:16:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.928222
2025-12-13T00:16:54.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:16:54.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:16:54.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:16:54.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:16:54.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:16:54.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:16:18', tmtdew=1.18, humidity=92.04, cloud=0.0, wind=38.68, temperature=8.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:16:38.381', atlas_cloud=2, atlas_rain=1, zp_data=[0.17274999999999885, 0.4792500000000004, 1.7447499999999998, nan, 0.5514999999999999, 0.11125000000000007, 0.03500000000000014, 0.01875000000000071, 0.11249999999999893, 0.6320000000000006, 1.2362499999999992, nan, 0.7229999999999999, 0.1427499999999995, 0.015499999999999403, -0.023000000000001464, 0.10174999999999912, 0.9455, 1.4109999999999996, 1.4142499999999991, 0.6019999999999985, 0.2337499999999988, 0.020250000000000767, 0.006750000000000256, 0.1999999999999993, 0.8685, 1.00075, 1.4175000000000004, 0.6930000000000005, 0.27000000000000135, 0.1880000000000006, 0.16500000000000092, 0.23074999999999868], zp_timestamp='2025-12-12T22:13:00')
2025-12-13T00:16:54.541 [DEBUG] [Thread-79153] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:16:54.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:16:54.637 [DEBUG] [Thread-79156] [transport.py] [_log()] starting thread (client mode): 0xf5772680
2025-12-13T00:16:54.637 [DEBUG] [Thread-79156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:16:54.652 [DEBUG] [Thread-79156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:16:54.652 [INFO] [Thread-79156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:54.660 [DEBUG] [Thread-79156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] client lang: <none>
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] server lang: <none>
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] kex follows: False
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:16:54.661 [DEBUG] [Thread-79156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:16:54.662 [DEBUG] [Thread-79156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:16:54.662 [DEBUG] [Thread-79156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:16:54.662 [DEBUG] [Thread-79156] [transport.py] [_log()] Compression: none
2025-12-13T00:16:54.662 [DEBUG] [Thread-79156] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:16:54.718 [DEBUG] [Thread-79156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:16:54.719 [DEBUG] [Thread-79156] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:16:54.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:16:54.720 [DEBUG] [Thread-79156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:16:54.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:16:54.774 [DEBUG] [Thread-79156] [transport.py] [_log()] userauth is OK
2025-12-13T00:16:54.774 [DEBUG] [Thread-79156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:16:54.774 [DEBUG] [Thread-79156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:16:54.775 [DEBUG] [Thread-79156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:16:54.775 [DEBUG] [Thread-79156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:16:54.793 [INFO] [Thread-79156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:16:54.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:16:54.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:16:55.595 [DEBUG] [Thread-79156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:16:55.595 [DEBUG] [Thread-79156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:16:55.644 [DEBUG] [Thread-79156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:16:55.644 [DEBUG] [Thread-79156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:16:55.653 [DEBUG] [Thread-79156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:16:55.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:16: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')
2025-12-13T00:16:55.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:16:55.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:16:55.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:16:55.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:16:55.688 [DEBUG] [Thread-79156] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:16:59.854 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:16:59.855 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:17:02.592 [DEBUG] [Thread-79158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:17:17.636 [DEBUG] [Thread-79159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:17:24.448 [DEBUG] [Thread-79160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:17:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:17:25.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:17:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:17:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 17, 22), 1.23, 92.07, 0.0, 43.51, 8.34, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:17:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:17:22
2025-12-13T00:17:26.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:17:26.684 [DEBUG] [Thread-79161] [transport.py] [_log()] starting thread (client mode): 0xf5700b50
2025-12-13T00:17:26.684 [DEBUG] [Thread-79161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:17:26.707 [DEBUG] [Thread-79161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:17:26.707 [INFO] [Thread-79161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:17:26.709 [DEBUG] [Thread-79161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:17:26.709 [DEBUG] [Thread-79161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:17:26.709 [DEBUG] [Thread-79161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:17:26.709 [DEBUG] [Thread-79161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] client lang: <none>
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] server lang: <none>
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] kex follows: False
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] Compression: none
2025-12-13T00:17:26.710 [DEBUG] [Thread-79161] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:17:26.720 [DEBUG] [Thread-79161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:17:26.720 [DEBUG] [Thread-79161] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:17:26.720 [DEBUG] [Thread-79161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:17:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:17:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:17:26.721 [DEBUG] [Thread-79161] [transport.py] [_log()] userauth is OK
2025-12-13T00:17:26.721 [DEBUG] [Thread-79161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:17:26.721 [DEBUG] [Thread-79161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:17:26.721 [DEBUG] [Thread-79161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:17:26.721 [DEBUG] [Thread-79161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:17:26.732 [INFO] [Thread-79161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:17:26.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:17:27.334 [DEBUG] [Thread-79161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:17:27.334 [DEBUG] [Thread-79161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:17:27.334 [DEBUG] [Thread-79161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:17:27.376 [DEBUG] [Thread-79161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:17:27.376 [DEBUG] [Thread-79161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:17:27.378 [DEBUG] [Thread-79161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:17:27.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:17:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:17:27.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:17:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:17:27.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:17:27.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:17:27.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.928570 -999.00   +8.10  38.11     92   +6.90 1 3 2 3 1     0    0 1.27 2.45 .N.s. 32.5 38.1 322.0 56.1 9.3 -5.4 9.2 -3.2 8.9 -2.5 9.2 -2.7
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.928570
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:17:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:17:22', tmtdew=1.23, humidity=92.07, cloud=0.0, wind=43.51, temperature=8.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:17:08.448', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:16:00')
2025-12-13T00:17:27.397 [DEBUG] [Thread-79161] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:17:27.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:17:27.481 [DEBUG] [Thread-79164] [transport.py] [_log()] starting thread (client mode): 0xf81e6350
2025-12-13T00:17:27.481 [DEBUG] [Thread-79164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:17:27.495 [DEBUG] [Thread-79164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:17:27.495 [INFO] [Thread-79164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:17:27.502 [DEBUG] [Thread-79164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] client lang: <none>
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] server lang: <none>
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] kex follows: False
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] Compression: none
2025-12-13T00:17:27.503 [DEBUG] [Thread-79164] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:17:27.561 [DEBUG] [Thread-79164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:17:27.561 [DEBUG] [Thread-79164] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:17:27.561 [DEBUG] [Thread-79164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:17:27.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:17:27.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:17:27.618 [DEBUG] [Thread-79164] [transport.py] [_log()] userauth is OK
2025-12-13T00:17:27.618 [DEBUG] [Thread-79164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:17:27.618 [DEBUG] [Thread-79164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:17:27.618 [DEBUG] [Thread-79164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:17:27.618 [DEBUG] [Thread-79164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:17:27.636 [INFO] [Thread-79164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:17:27.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:17:27.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:17:28.452 [DEBUG] [Thread-79164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:17:28.452 [DEBUG] [Thread-79164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:17:28.501 [DEBUG] [Thread-79164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:17:28.501 [DEBUG] [Thread-79164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:17:28.509 [DEBUG] [Thread-79164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:17:28.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:17:28.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:17:28.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:17:28.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:17:28.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:17:28.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:17:28.541 [DEBUG] [Thread-79164] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:17:32.662 [DEBUG] [Thread-79166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:17:47.709 [DEBUG] [Thread-79167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:17:58.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:17:58.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:17:58.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:17:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 17, 54), 1.17, 92.1, 0.0, 42.82, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:17:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:17:54
2025-12-13T00:17:59.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:17:59.509 [DEBUG] [Thread-79168] [transport.py] [_log()] starting thread (client mode): 0xf5700af0
2025-12-13T00:17:59.509 [DEBUG] [Thread-79168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:17:59.526 [DEBUG] [Thread-79168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:17:59.526 [INFO] [Thread-79168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] client lang: <none>
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] server lang: <none>
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] kex follows: False
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:17:59.528 [DEBUG] [Thread-79168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:17:59.529 [DEBUG] [Thread-79168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:17:59.529 [DEBUG] [Thread-79168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:17:59.529 [DEBUG] [Thread-79168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:17:59.529 [DEBUG] [Thread-79168] [transport.py] [_log()] Compression: none
2025-12-13T00:17:59.529 [DEBUG] [Thread-79168] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:17:59.541 [DEBUG] [Thread-79168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:17:59.542 [DEBUG] [Thread-79168] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:17:59.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:17:59.543 [DEBUG] [Thread-79168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:17:59.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:17:59.545 [DEBUG] [Thread-79168] [transport.py] [_log()] userauth is OK
2025-12-13T00:17:59.545 [DEBUG] [Thread-79168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:17:59.545 [DEBUG] [Thread-79168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:17:59.545 [DEBUG] [Thread-79168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:17:59.545 [DEBUG] [Thread-79168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:17:59.565 [INFO] [Thread-79168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:17:59.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:18:00.068 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:18:00.069 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:18:00.168 [DEBUG] [Thread-79168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:18:00.168 [DEBUG] [Thread-79168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:18:00.169 [DEBUG] [Thread-79168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:18:00.209 [DEBUG] [Thread-79168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:18:00.209 [DEBUG] [Thread-79168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:18:00.211 [DEBUG] [Thread-79168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:18:00.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:18:00.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:18:00.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:18:00.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:18:00.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:18:00.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:18:00.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:18:00.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.928917 -999.00   +8.10  48.11     92   +6.90 1 3 2 3 1     0    0 1.27 2.05 ZnEs. 40.8 48.1 313.2 56.5 9.3 -8.2 9.2 -6.8 8.9 -6.7 9.3 -7.6
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.928917
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:18:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:17:54', tmtdew=1.17, humidity=92.1, cloud=0.0, wind=42.82, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:17:38.429', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:16:00')
2025-12-13T00:18:00.223 [DEBUG] [Thread-79168] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:18:00.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:18:00.306 [DEBUG] [Thread-79171] [transport.py] [_log()] starting thread (client mode): 0xf5773490
2025-12-13T00:18:00.306 [DEBUG] [Thread-79171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:18:00.321 [DEBUG] [Thread-79171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:18:00.321 [INFO] [Thread-79171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:18:00.329 [DEBUG] [Thread-79171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:18:00.329 [DEBUG] [Thread-79171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:18:00.329 [DEBUG] [Thread-79171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:18:00.329 [DEBUG] [Thread-79171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:18:00.329 [DEBUG] [Thread-79171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:18:00.329 [DEBUG] [Thread-79171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] client lang: <none>
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] server lang: <none>
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] kex follows: False
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:18:00.330 [DEBUG] [Thread-79171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:18:00.331 [DEBUG] [Thread-79171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:18:00.331 [DEBUG] [Thread-79171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:18:00.331 [DEBUG] [Thread-79171] [transport.py] [_log()] Compression: none
2025-12-13T00:18:00.331 [DEBUG] [Thread-79171] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:18:00.386 [DEBUG] [Thread-79171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:18:00.387 [DEBUG] [Thread-79171] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:18:00.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:18:00.388 [DEBUG] [Thread-79171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:18:00.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:18:00.442 [DEBUG] [Thread-79171] [transport.py] [_log()] userauth is OK
2025-12-13T00:18:00.443 [DEBUG] [Thread-79171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:18:00.443 [DEBUG] [Thread-79171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:18:00.443 [DEBUG] [Thread-79171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:18:00.443 [DEBUG] [Thread-79171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:18:00.462 [INFO] [Thread-79171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:18:00.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:18:00.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:18:01.295 [DEBUG] [Thread-79171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:18:01.296 [DEBUG] [Thread-79171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:18:01.344 [DEBUG] [Thread-79171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:18:01.344 [DEBUG] [Thread-79171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:18:01.352 [DEBUG] [Thread-79171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:18:01.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:18:01.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')
2025-12-13T00:18:01.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:18:01.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:18:01.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:18:01.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:18:01.386 [DEBUG] [Thread-79171] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:18:02.737 [DEBUG] [Thread-79173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:18:17.771 [DEBUG] [Thread-79174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:18:24.526 [DEBUG] [Thread-79175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:18:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:18:31.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:18:31.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:18:32.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 18, 26), 1.17, 92.09, 0.0, 43.33, 8.27, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:18:32.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:18:26
2025-12-13T00:18:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:18:32.376 [DEBUG] [Thread-79176] [transport.py] [_log()] starting thread (client mode): 0xf5772ef0
2025-12-13T00:18:32.377 [DEBUG] [Thread-79176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:18:32.397 [DEBUG] [Thread-79176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:18:32.397 [INFO] [Thread-79176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] client lang: <none>
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] server lang: <none>
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] kex follows: False
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] Compression: none
2025-12-13T00:18:32.400 [DEBUG] [Thread-79176] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:18:32.415 [DEBUG] [Thread-79176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:18:32.415 [DEBUG] [Thread-79176] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:18:32.416 [DEBUG] [Thread-79176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:18:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:18:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:18:32.416 [DEBUG] [Thread-79176] [transport.py] [_log()] userauth is OK
2025-12-13T00:18:32.416 [DEBUG] [Thread-79176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:18:32.416 [DEBUG] [Thread-79176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:18:32.416 [DEBUG] [Thread-79176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:18:32.416 [DEBUG] [Thread-79176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:18:32.431 [INFO] [Thread-79176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:18:32.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:18:32.802 [DEBUG] [Thread-79178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:18:33.019 [DEBUG] [Thread-79176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:18:33.019 [DEBUG] [Thread-79176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:18:33.019 [DEBUG] [Thread-79176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:18:33.059 [DEBUG] [Thread-79176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:18:33.060 [DEBUG] [Thread-79176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:18:33.062 [DEBUG] [Thread-79176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:18:33.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:18:33.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:18:33.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:18:33.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:18:33.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:18:33.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:18:33.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:18:33.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:18:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:18:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.928917 -999.00   +8.10  48.11     92   +6.90 1 3 2 3 1     0    0 1.27 2.05 ZnEs. 40.8 48.1 313.2 56.5 9.3 -8.2 9.2 -6.8 8.9 -6.7 9.3 -7.6
2025-12-13T00:18:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:18:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:18:33.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.928917
2025-12-13T00:18:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:18:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:18:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:18:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:18:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:18:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:18:26', tmtdew=1.17, humidity=92.09, cloud=0.0, wind=43.33, temperature=8.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:17:38.429', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:16:00')
2025-12-13T00:18:33.085 [DEBUG] [Thread-79176] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:18:33.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:18:33.189 [DEBUG] [Thread-79180] [transport.py] [_log()] starting thread (client mode): 0xf81e6d40
2025-12-13T00:18:33.189 [DEBUG] [Thread-79180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:18:33.204 [DEBUG] [Thread-79180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:18:33.204 [INFO] [Thread-79180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] client lang: <none>
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] server lang: <none>
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] kex follows: False
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] Compression: none
2025-12-13T00:18:33.214 [DEBUG] [Thread-79180] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:18:33.270 [DEBUG] [Thread-79180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:18:33.270 [DEBUG] [Thread-79180] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:18:33.270 [DEBUG] [Thread-79180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:18:33.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:18:33.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:18:33.327 [DEBUG] [Thread-79180] [transport.py] [_log()] userauth is OK
2025-12-13T00:18:33.327 [DEBUG] [Thread-79180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:18:33.327 [DEBUG] [Thread-79180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:18:33.327 [DEBUG] [Thread-79180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:18:33.327 [DEBUG] [Thread-79180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:18:33.349 [INFO] [Thread-79180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:18:33.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:18:33.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:18:34.175 [DEBUG] [Thread-79180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:18:34.175 [DEBUG] [Thread-79180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:18:34.223 [DEBUG] [Thread-79180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:18:34.223 [DEBUG] [Thread-79180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:18:34.231 [DEBUG] [Thread-79180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:18:34.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:18:34.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:18: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
2025-12-13T00:18:34.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:18:34.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:18:34.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:18:34.266 [DEBUG] [Thread-79180] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:18:47.831 [DEBUG] [Thread-79182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:00.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:00.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:02.887 [DEBUG] [Thread-79183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:19:04.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:19:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:19:04.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 18, 58), 1.23, 92.05, 0.0, 42.42, 8.24, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:19:04.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:18:58
2025-12-13T00:19:05.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:19:05.239 [DEBUG] [Thread-79184] [transport.py] [_log()] starting thread (client mode): 0xf57426e0
2025-12-13T00:19:05.239 [DEBUG] [Thread-79184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:19:05.257 [DEBUG] [Thread-79184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:19:05.257 [INFO] [Thread-79184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:19:05.259 [DEBUG] [Thread-79184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] client lang: <none>
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] server lang: <none>
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] kex follows: False
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] Compression: none
2025-12-13T00:19:05.260 [DEBUG] [Thread-79184] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:19:05.272 [DEBUG] [Thread-79184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:19:05.272 [DEBUG] [Thread-79184] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:19:05.273 [DEBUG] [Thread-79184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:19:05.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:19:05.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:19:05.275 [DEBUG] [Thread-79184] [transport.py] [_log()] userauth is OK
2025-12-13T00:19:05.275 [DEBUG] [Thread-79184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:19:05.275 [DEBUG] [Thread-79184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:19:05.276 [DEBUG] [Thread-79184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:19:05.276 [DEBUG] [Thread-79184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:19:05.292 [INFO] [Thread-79184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:19:05.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:19:05.902 [DEBUG] [Thread-79184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:19:05.902 [DEBUG] [Thread-79184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:19:05.903 [DEBUG] [Thread-79184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:19:05.943 [DEBUG] [Thread-79184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:19:05.943 [DEBUG] [Thread-79184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:19:05.946 [DEBUG] [Thread-79184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:19:05.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:19:05.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:19:05.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:19:05.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:19:05.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:19:05.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:19:05.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:19:05.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.929264 -999.00   +8.10  40.60     92   +7.00 1 3 2 3 1     0    0 1.28 1.89 ZnEs. 36.8 40.6 311.0 46.1 9.4 -7.5 9.2 -5.8 8.9 -5.4 9.3 -7.7
2025-12-13T00:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:19:05.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.929264
2025-12-13T00:19:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:19:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:19:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:19:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:19:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:19:05.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:18:58', tmtdew=1.23, humidity=92.05, cloud=0.0, wind=42.42, temperature=8.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:18:08.410', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:16:00')
2025-12-13T00:19:05.971 [DEBUG] [Thread-79184] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:19:06.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:19:06.067 [DEBUG] [Thread-79187] [transport.py] [_log()] starting thread (client mode): 0xfabc70d0
2025-12-13T00:19:06.067 [DEBUG] [Thread-79187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:19:06.081 [DEBUG] [Thread-79187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:19:06.082 [INFO] [Thread-79187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] client lang: <none>
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] server lang: <none>
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] kex follows: False
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:19:06.089 [DEBUG] [Thread-79187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:19:06.090 [DEBUG] [Thread-79187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:19:06.090 [DEBUG] [Thread-79187] [transport.py] [_log()] Compression: none
2025-12-13T00:19:06.090 [DEBUG] [Thread-79187] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:19:06.145 [DEBUG] [Thread-79187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:19:06.145 [DEBUG] [Thread-79187] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:19:06.146 [DEBUG] [Thread-79187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:19:06.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:19:06.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:19:06.203 [DEBUG] [Thread-79187] [transport.py] [_log()] userauth is OK
2025-12-13T00:19:06.203 [DEBUG] [Thread-79187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:19:06.203 [DEBUG] [Thread-79187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:19:06.203 [DEBUG] [Thread-79187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:19:06.203 [DEBUG] [Thread-79187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:19:06.224 [INFO] [Thread-79187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:19:06.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:19:06.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:19:07.069 [DEBUG] [Thread-79187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:19:07.069 [DEBUG] [Thread-79187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:19:07.117 [DEBUG] [Thread-79187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:19:07.117 [DEBUG] [Thread-79187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:19:07.126 [DEBUG] [Thread-79187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:19:07.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:19:07.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:19:07.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:19:07.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:19:07.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:19:07.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:19:07.161 [DEBUG] [Thread-79187] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:19:17.919 [DEBUG] [Thread-79189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:24.604 [DEBUG] [Thread-79190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:32.958 [DEBUG] [Thread-79191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:19:37.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:19:37.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:19:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:19:37.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 19, 30), 1.22, 92.1, 0.0, 43.51, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:19:37.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:19:30
2025-12-13T00:19:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:19:38.140 [DEBUG] [Thread-79192] [transport.py] [_log()] starting thread (client mode): 0xf81e5840
2025-12-13T00:19:38.140 [DEBUG] [Thread-79192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:19:38.160 [DEBUG] [Thread-79192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:19:38.161 [INFO] [Thread-79192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] client lang: <none>
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] server lang: <none>
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] kex follows: False
2025-12-13T00:19:38.164 [DEBUG] [Thread-79192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:19:38.165 [DEBUG] [Thread-79192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:19:38.165 [DEBUG] [Thread-79192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:19:38.165 [DEBUG] [Thread-79192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:19:38.165 [DEBUG] [Thread-79192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:19:38.165 [DEBUG] [Thread-79192] [transport.py] [_log()] Compression: none
2025-12-13T00:19:38.165 [DEBUG] [Thread-79192] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:19:38.183 [DEBUG] [Thread-79192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:19:38.184 [DEBUG] [Thread-79192] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:19:38.184 [DEBUG] [Thread-79192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:19:38.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:19:38.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:19:38.187 [DEBUG] [Thread-79192] [transport.py] [_log()] userauth is OK
2025-12-13T00:19:38.187 [DEBUG] [Thread-79192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:19:38.187 [DEBUG] [Thread-79192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:19:38.187 [DEBUG] [Thread-79192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:19:38.187 [DEBUG] [Thread-79192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:19:38.207 [INFO] [Thread-79192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:19:38.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:19:38.850 [DEBUG] [Thread-79192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:19:38.850 [DEBUG] [Thread-79192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:19:38.850 [DEBUG] [Thread-79192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:19:38.891 [DEBUG] [Thread-79192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:19:38.891 [DEBUG] [Thread-79192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:19:38.894 [DEBUG] [Thread-79192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:19:38.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:19:38.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:19:38.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:19:38.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:19:38.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:19:38.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:19:38.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:19:38.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:19:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:19:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.929611 -999.00   +8.20  40.72     92   +7.00 1 3 2 3 1     0    0 1.27 1.88 ZN..W 42.4 40.7 314.6 47.7 9.3 -9.8 9.2 -4.2 9.0 -5.5 9.3 -8.3
2025-12-13T00:19:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:19:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:19:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.929611
2025-12-13T00:19:38.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:19:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:19:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:19:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:19:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:19:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:19:30', tmtdew=1.22, humidity=92.1, cloud=0.0, wind=43.51, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:18:38.390', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:16:00')
2025-12-13T00:19:38.921 [DEBUG] [Thread-79192] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:19:39.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:19:39.019 [DEBUG] [Thread-79195] [transport.py] [_log()] starting thread (client mode): 0xf578afb0
2025-12-13T00:19:39.019 [DEBUG] [Thread-79195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:19:39.033 [DEBUG] [Thread-79195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:19:39.033 [INFO] [Thread-79195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:19:39.040 [DEBUG] [Thread-79195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] client lang: <none>
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] server lang: <none>
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] kex follows: False
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:19:39.041 [DEBUG] [Thread-79195] [transport.py] [_log()] Compression: none
2025-12-13T00:19:39.042 [DEBUG] [Thread-79195] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:19:39.099 [DEBUG] [Thread-79195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:19:39.100 [DEBUG] [Thread-79195] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:19:39.100 [DEBUG] [Thread-79195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:19:39.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:19:39.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:19:39.156 [DEBUG] [Thread-79195] [transport.py] [_log()] userauth is OK
2025-12-13T00:19:39.156 [DEBUG] [Thread-79195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:19:39.156 [DEBUG] [Thread-79195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:19:39.156 [DEBUG] [Thread-79195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:19:39.156 [DEBUG] [Thread-79195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:19:39.178 [INFO] [Thread-79195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:19:39.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:19:39.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:19:40.012 [DEBUG] [Thread-79195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:19:40.012 [DEBUG] [Thread-79195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:19:40.060 [DEBUG] [Thread-79195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:19:40.060 [DEBUG] [Thread-79195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:19:40.069 [DEBUG] [Thread-79195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:19:40.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:19:40.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:19:40.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:19:40.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:19:40.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:19:40.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:19:40.103 [DEBUG] [Thread-79195] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:19:47.984 [DEBUG] [Thread-79197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:00.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:00.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:03.034 [DEBUG] [Thread-79198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:20:10.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:20:10.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:20:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 20, 3), 1.22, 92.1, 0.0, 42.59, 8.25, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:20:10.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:20:03
2025-12-13T00:20:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:20:11.072 [DEBUG] [Thread-79199] [transport.py] [_log()] starting thread (client mode): 0xf8188970
2025-12-13T00:20:11.073 [DEBUG] [Thread-79199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:20:11.089 [DEBUG] [Thread-79199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:20:11.089 [INFO] [Thread-79199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:20:11.092 [DEBUG] [Thread-79199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:20:11.092 [DEBUG] [Thread-79199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] client lang: <none>
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] server lang: <none>
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] kex follows: False
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] Compression: none
2025-12-13T00:20:11.093 [DEBUG] [Thread-79199] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:20:11.114 [DEBUG] [Thread-79199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:20:11.114 [DEBUG] [Thread-79199] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:20:11.115 [DEBUG] [Thread-79199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:20:11.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:20:11.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:20:11.117 [DEBUG] [Thread-79199] [transport.py] [_log()] userauth is OK
2025-12-13T00:20:11.117 [DEBUG] [Thread-79199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:20:11.117 [DEBUG] [Thread-79199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:20:11.117 [DEBUG] [Thread-79199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:20:11.117 [DEBUG] [Thread-79199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:20:11.141 [INFO] [Thread-79199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:20:11.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:20:12.161 [DEBUG] [Thread-79199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:20:12.161 [DEBUG] [Thread-79199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:20:12.161 [DEBUG] [Thread-79199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:20:12.202 [DEBUG] [Thread-79199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:20:12.202 [DEBUG] [Thread-79199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:20:12.205 [DEBUG] [Thread-79199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:20:12.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:20:12.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:20:12.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:20:12.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:20:12.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:20:12.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:20:12.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:20:12.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:20:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:20:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.930306 -999.00   +8.10  39.87     92   +6.90 1 3 2 3 1     0    0 1.25 1.74 .NE.. 38.2 39.9 307.4 54.0 9.4 -2.4 9.2 -3.0 8.9 -2.3 9.3 -1.8
2025-12-13T00:20:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:20:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:20:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.930306
2025-12-13T00:20:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:20:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:20:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:20:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:20:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:20:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:20:03', tmtdew=1.22, humidity=92.1, cloud=0.0, wind=42.59, temperature=8.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:19:38.438', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:19:00')
2025-12-13T00:20:12.233 [DEBUG] [Thread-79199] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:20:12.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:20:12.328 [DEBUG] [Thread-79202] [transport.py] [_log()] starting thread (client mode): 0xf8188670
2025-12-13T00:20:12.328 [DEBUG] [Thread-79202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:20:12.342 [DEBUG] [Thread-79202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:20:12.343 [INFO] [Thread-79202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:20:12.350 [DEBUG] [Thread-79202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:20:12.350 [DEBUG] [Thread-79202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:20:12.350 [DEBUG] [Thread-79202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] client lang: <none>
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] server lang: <none>
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] kex follows: False
2025-12-13T00:20:12.351 [DEBUG] [Thread-79202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:20:12.352 [DEBUG] [Thread-79202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:20:12.352 [DEBUG] [Thread-79202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:20:12.352 [DEBUG] [Thread-79202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:20:12.352 [DEBUG] [Thread-79202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:20:12.352 [DEBUG] [Thread-79202] [transport.py] [_log()] Compression: none
2025-12-13T00:20:12.352 [DEBUG] [Thread-79202] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:20:12.407 [DEBUG] [Thread-79202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:20:12.408 [DEBUG] [Thread-79202] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:20:12.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:20:12.409 [DEBUG] [Thread-79202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:20:12.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:20:12.464 [DEBUG] [Thread-79202] [transport.py] [_log()] userauth is OK
2025-12-13T00:20:12.464 [DEBUG] [Thread-79202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:20:12.464 [DEBUG] [Thread-79202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:20:12.464 [DEBUG] [Thread-79202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:20:12.464 [DEBUG] [Thread-79202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:20:12.482 [INFO] [Thread-79202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:20:12.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:20:12.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:20:13.300 [DEBUG] [Thread-79202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:20:13.300 [DEBUG] [Thread-79202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:20:13.348 [DEBUG] [Thread-79202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:20:13.348 [DEBUG] [Thread-79202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:20:13.356 [DEBUG] [Thread-79202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:20:13.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:20:13.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:20:13.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:20:13.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:20:13.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:20:13.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:20:13.390 [DEBUG] [Thread-79202] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:20:18.063 [DEBUG] [Thread-79204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:24.682 [DEBUG] [Thread-79205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:33.107 [DEBUG] [Thread-79206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:20:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:20:43.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:20:43.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:20:44.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 20, 35), 1.16, 92.67, 0.0, 41.11, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:20:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:20:35
2025-12-13T00:20:44.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:20:44.361 [DEBUG] [Thread-79207] [transport.py] [_log()] starting thread (client mode): 0xf818bc10
2025-12-13T00:20:44.361 [DEBUG] [Thread-79207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:20:44.381 [DEBUG] [Thread-79207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:20:44.381 [INFO] [Thread-79207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] client lang: <none>
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] server lang: <none>
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] kex follows: False
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:20:44.384 [DEBUG] [Thread-79207] [transport.py] [_log()] Compression: none
2025-12-13T00:20:44.385 [DEBUG] [Thread-79207] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:20:44.401 [DEBUG] [Thread-79207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:20:44.402 [DEBUG] [Thread-79207] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:20:44.402 [DEBUG] [Thread-79207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:20:44.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:20:44.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:20:44.404 [DEBUG] [Thread-79207] [transport.py] [_log()] userauth is OK
2025-12-13T00:20:44.404 [DEBUG] [Thread-79207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:20:44.405 [DEBUG] [Thread-79207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:20:44.405 [DEBUG] [Thread-79207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:20:44.405 [DEBUG] [Thread-79207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:20:44.425 [INFO] [Thread-79207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:20:44.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:20:45.080 [DEBUG] [Thread-79207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:20:45.080 [DEBUG] [Thread-79207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:20:45.081 [DEBUG] [Thread-79207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:20:45.121 [DEBUG] [Thread-79207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:20:45.121 [DEBUG] [Thread-79207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:20:45.124 [DEBUG] [Thread-79207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:20:45.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:20:45.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:20:45.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:20:45.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:20:45.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:20:45.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:20:45.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:20:45.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:20:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:20:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.930653 -999.00   +8.20  36.94     92   +7.10 1 3 2 3 1     0    0 1.24 1.50 ZNE.. 36.4 36.9 316.2 48.3 9.4 -7.7 9.2 -2.7 9.0 -3.4 9.3 -4.3
2025-12-13T00:20:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:20:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:20:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.930653
2025-12-13T00:20:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:20:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:20:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:20:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:20:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:20:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:20:35', tmtdew=1.16, humidity=92.67, cloud=0.0, wind=41.11, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:20:08.419', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:19:00')
2025-12-13T00:20:45.151 [DEBUG] [Thread-79207] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:20:45.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:20:45.241 [DEBUG] [Thread-79210] [transport.py] [_log()] starting thread (client mode): 0xf818ada0
2025-12-13T00:20:45.241 [DEBUG] [Thread-79210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:20:45.256 [DEBUG] [Thread-79210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:20:45.257 [INFO] [Thread-79210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:20:45.264 [DEBUG] [Thread-79210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:20:45.264 [DEBUG] [Thread-79210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:20:45.264 [DEBUG] [Thread-79210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:20:45.264 [DEBUG] [Thread-79210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:45.264 [DEBUG] [Thread-79210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] client lang: <none>
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] server lang: <none>
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] kex follows: False
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] Compression: none
2025-12-13T00:20:45.265 [DEBUG] [Thread-79210] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:20:45.324 [DEBUG] [Thread-79210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:20:45.325 [DEBUG] [Thread-79210] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:20:45.325 [DEBUG] [Thread-79210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:20:45.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:20:45.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:20:45.382 [DEBUG] [Thread-79210] [transport.py] [_log()] userauth is OK
2025-12-13T00:20:45.382 [DEBUG] [Thread-79210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:20:45.382 [DEBUG] [Thread-79210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:20:45.382 [DEBUG] [Thread-79210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:20:45.383 [DEBUG] [Thread-79210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:20:45.401 [INFO] [Thread-79210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:20:45.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:20:45.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:20:46.276 [DEBUG] [Thread-79210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:20:46.276 [DEBUG] [Thread-79210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:20:46.324 [DEBUG] [Thread-79210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:20:46.324 [DEBUG] [Thread-79210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:20:46.333 [DEBUG] [Thread-79210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:20:46.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:20:46.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:20:46.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:20:46.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:20:46.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:20:46.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:20:46.367 [DEBUG] [Thread-79210] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:20:48.132 [DEBUG] [Thread-79212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:00.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:00.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:03.187 [DEBUG] [Thread-79213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:16.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:21:16.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:21:16.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:21:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 21, 7), 1.16, 92.67, 0.0, 41.37, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:21:17.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:21:07
2025-12-13T00:21:17.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:21:17.374 [DEBUG] [Thread-79214] [transport.py] [_log()] starting thread (client mode): 0xf578b010
2025-12-13T00:21:17.374 [DEBUG] [Thread-79214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:21:17.394 [DEBUG] [Thread-79214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:21:17.394 [INFO] [Thread-79214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] client lang: <none>
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] server lang: <none>
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] kex follows: False
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] Compression: none
2025-12-13T00:21:17.398 [DEBUG] [Thread-79214] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:21:17.413 [DEBUG] [Thread-79214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:21:17.413 [DEBUG] [Thread-79214] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:21:17.413 [DEBUG] [Thread-79214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:21:17.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:21:17.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:21:17.414 [DEBUG] [Thread-79214] [transport.py] [_log()] userauth is OK
2025-12-13T00:21:17.414 [DEBUG] [Thread-79214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:21:17.414 [DEBUG] [Thread-79214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:21:17.414 [DEBUG] [Thread-79214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:21:17.414 [DEBUG] [Thread-79214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:21:17.428 [INFO] [Thread-79214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:21:17.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:21:18.054 [DEBUG] [Thread-79214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:21:18.054 [DEBUG] [Thread-79214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:21:18.054 [DEBUG] [Thread-79214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:21:18.095 [DEBUG] [Thread-79214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:21:18.096 [DEBUG] [Thread-79214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:21:18.098 [DEBUG] [Thread-79214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:21:18.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:21:18.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:21:18.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:21:18.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:21:18.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:21:18.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:21:18.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.931000 -999.00   +8.10  43.14     92   +6.90 1 3 2 3 1     0    0 1.23 1.08 ZNE.. 45.2 43.1 313.2 59.1 9.4 -6.5 9.3 -5.8 8.9 -3.7 9.3 -3.9
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.931000
2025-12-13T00:21:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:21:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:21:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:21:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:21:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:21:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:21:07', tmtdew=1.16, humidity=92.67, cloud=0.0, wind=41.37, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:20:38.400', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:19:00')
2025-12-13T00:21:18.116 [DEBUG] [Thread-79214] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:21:18.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:21:18.202 [DEBUG] [Thread-79217] [transport.py] [_log()] starting thread (client mode): 0xf578a3e0
2025-12-13T00:21:18.202 [DEBUG] [Thread-79217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:21:18.218 [DEBUG] [Thread-79218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:18.225 [DEBUG] [Thread-79217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:21:18.225 [INFO] [Thread-79217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] client lang: <none>
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] server lang: <none>
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] kex follows: False
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:21:18.232 [DEBUG] [Thread-79217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:21:18.233 [DEBUG] [Thread-79217] [transport.py] [_log()] Compression: none
2025-12-13T00:21:18.233 [DEBUG] [Thread-79217] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:21:18.291 [DEBUG] [Thread-79217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:21:18.291 [DEBUG] [Thread-79217] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:21:18.291 [DEBUG] [Thread-79217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:21:18.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:21:18.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:21:18.348 [DEBUG] [Thread-79217] [transport.py] [_log()] userauth is OK
2025-12-13T00:21:18.348 [DEBUG] [Thread-79217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:21:18.348 [DEBUG] [Thread-79217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:21:18.349 [DEBUG] [Thread-79217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:21:18.349 [DEBUG] [Thread-79217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:21:18.362 [INFO] [Thread-79217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:21:18.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:21:18.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:21:19.163 [DEBUG] [Thread-79217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:21:19.163 [DEBUG] [Thread-79217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:21:19.210 [DEBUG] [Thread-79217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:21:19.210 [DEBUG] [Thread-79217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:21:19.219 [DEBUG] [Thread-79217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:21:19.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:21:19.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:21:19.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:21:19.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:21:19.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:21:19.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:21:19.250 [DEBUG] [Thread-79217] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:21:24.756 [DEBUG] [Thread-79220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:33.254 [DEBUG] [Thread-79221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:48.283 [DEBUG] [Thread-79222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:21:49.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:21:49.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:21:49.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:21:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 21, 39), 1.11, 92.65, 0.0, 40.99, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:21:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:21:39
2025-12-13T00:21:50.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:21:50.231 [DEBUG] [Thread-79223] [transport.py] [_log()] starting thread (client mode): 0xf8189a80
2025-12-13T00:21:50.231 [DEBUG] [Thread-79223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:21:50.253 [DEBUG] [Thread-79223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:21:50.253 [INFO] [Thread-79223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] client lang: <none>
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] server lang: <none>
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] kex follows: False
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] Compression: none
2025-12-13T00:21:50.256 [DEBUG] [Thread-79223] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:21:50.272 [DEBUG] [Thread-79223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:21:50.273 [DEBUG] [Thread-79223] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:21:50.273 [DEBUG] [Thread-79223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:21:50.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:21:50.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:21:50.275 [DEBUG] [Thread-79223] [transport.py] [_log()] userauth is OK
2025-12-13T00:21:50.275 [DEBUG] [Thread-79223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:21:50.275 [DEBUG] [Thread-79223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:21:50.275 [DEBUG] [Thread-79223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:21:50.275 [DEBUG] [Thread-79223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:21:50.291 [INFO] [Thread-79223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:21:50.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:21:50.844 [DEBUG] [Thread-79223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:21:50.844 [DEBUG] [Thread-79223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:21:50.845 [DEBUG] [Thread-79223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:21:50.886 [DEBUG] [Thread-79223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:21:50.886 [DEBUG] [Thread-79223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:21:50.889 [DEBUG] [Thread-79223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:21:50.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:21:50.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:21:50.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:21:50.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:21:50.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:21:50.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:21:50.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:21:50.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:21:50.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:21:50.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.931347 -999.00   +8.10  36.09     92   +7.00 1 3 2 3 1     0    0 1.22 0.61 ----- 35.1 36.1 314.2 50.5 9.4 -14.8 9.2 -8.1 9.0 -10.5 9.3 -13.1
2025-12-13T00:21:50.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:21:50.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:21:50.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.931347
2025-12-13T00:21:50.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:21:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:21:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:21:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:21:50.913 [DEBUG] [Thread-79223] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:21:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:21:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:21:39', tmtdew=1.11, humidity=92.65, cloud=0.0, wind=40.99, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:21:08.381', atlas_cloud=3, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:19:00')
2025-12-13T00:21:50.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:21:51.009 [DEBUG] [Thread-79226] [transport.py] [_log()] starting thread (client mode): 0xf8189c00
2025-12-13T00:21:51.009 [DEBUG] [Thread-79226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:21:51.024 [DEBUG] [Thread-79226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:21:51.024 [INFO] [Thread-79226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] client lang: <none>
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] server lang: <none>
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] kex follows: False
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:21:51.032 [DEBUG] [Thread-79226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:21:51.033 [DEBUG] [Thread-79226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:21:51.033 [DEBUG] [Thread-79226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:21:51.033 [DEBUG] [Thread-79226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:21:51.033 [DEBUG] [Thread-79226] [transport.py] [_log()] Compression: none
2025-12-13T00:21:51.033 [DEBUG] [Thread-79226] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:21:51.087 [DEBUG] [Thread-79226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:21:51.088 [DEBUG] [Thread-79226] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:21:51.088 [DEBUG] [Thread-79226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:21:51.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:21:51.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:21:51.146 [DEBUG] [Thread-79226] [transport.py] [_log()] userauth is OK
2025-12-13T00:21:51.146 [DEBUG] [Thread-79226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:21:51.146 [DEBUG] [Thread-79226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:21:51.146 [DEBUG] [Thread-79226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:21:51.146 [DEBUG] [Thread-79226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:21:51.167 [INFO] [Thread-79226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:21:51.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:21:51.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:21:51.959 [DEBUG] [Thread-79226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:21:51.959 [DEBUG] [Thread-79226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:21:52.010 [DEBUG] [Thread-79226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:21:52.010 [DEBUG] [Thread-79226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:21:52.019 [DEBUG] [Thread-79226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:21:52.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:21:52.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:21:52.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:21:52.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:21:52.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:21:52.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:21:52.053 [DEBUG] [Thread-79226] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:22:00.886 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:00.887 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:03.309 [DEBUG] [Thread-79228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:18.354 [DEBUG] [Thread-79229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:22.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:22:22.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:22:22.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:22:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 22, 11), 1.11, 92.7, 0.0, 40.62, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:22:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:22:11
2025-12-13T00:22:22.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:22:23.029 [DEBUG] [Thread-79230] [transport.py] [_log()] starting thread (client mode): 0xf8188820
2025-12-13T00:22:23.029 [DEBUG] [Thread-79230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:22:23.048 [DEBUG] [Thread-79230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:22:23.048 [INFO] [Thread-79230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:22:23.051 [DEBUG] [Thread-79230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] client lang: <none>
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] server lang: <none>
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] kex follows: False
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:22:23.052 [DEBUG] [Thread-79230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:22:23.053 [DEBUG] [Thread-79230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:22:23.053 [DEBUG] [Thread-79230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:22:23.053 [DEBUG] [Thread-79230] [transport.py] [_log()] Compression: none
2025-12-13T00:22:23.053 [DEBUG] [Thread-79230] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:22:23.070 [DEBUG] [Thread-79230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:22:23.071 [DEBUG] [Thread-79230] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:22:23.071 [DEBUG] [Thread-79230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:22:23.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:22:23.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:22:23.073 [DEBUG] [Thread-79230] [transport.py] [_log()] userauth is OK
2025-12-13T00:22:23.073 [DEBUG] [Thread-79230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:22:23.074 [DEBUG] [Thread-79230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:22:23.074 [DEBUG] [Thread-79230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:22:23.074 [DEBUG] [Thread-79230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:22:23.108 [INFO] [Thread-79230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:22:23.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:22:23.726 [DEBUG] [Thread-79230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:22:23.727 [DEBUG] [Thread-79230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:22:23.727 [DEBUG] [Thread-79230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:22:23.768 [DEBUG] [Thread-79230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:22:23.768 [DEBUG] [Thread-79230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:22:23.771 [DEBUG] [Thread-79230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:22:23.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:22:23.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:22:23.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:22:23.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:22:23.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:22:23.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:22:23.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:22:23.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:22:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:22:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.931695 -999.00   +8.10  42.54     92   +7.00 1 2 2 3 1     0    0 1.19 -0.15 .NE.. 38.1 42.5 310.2 45.1 9.4 -16.8 9.2 -15.8 8.9 -15.7 9.3 -15.9
2025-12-13T00:22:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:22:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:22:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.931695
2025-12-13T00:22:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:22:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:22:23.798 [DEBUG] [Thread-79230] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:22:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:22:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:22:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:22:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:22:11', tmtdew=1.11, humidity=92.7, cloud=0.0, wind=40.62, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:21:38.448', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:19:00')
2025-12-13T00:22:23.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:22:23.906 [DEBUG] [Thread-79233] [transport.py] [_log()] starting thread (client mode): 0xf57016f0
2025-12-13T00:22:23.907 [DEBUG] [Thread-79233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:22:23.921 [DEBUG] [Thread-79233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:22:23.921 [INFO] [Thread-79233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:22:23.928 [DEBUG] [Thread-79233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:22:23.928 [DEBUG] [Thread-79233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:22:23.928 [DEBUG] [Thread-79233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:22:23.928 [DEBUG] [Thread-79233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:23.928 [DEBUG] [Thread-79233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:23.928 [DEBUG] [Thread-79233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] client lang: <none>
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] server lang: <none>
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] kex follows: False
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] Compression: none
2025-12-13T00:22:23.929 [DEBUG] [Thread-79233] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:22:23.985 [DEBUG] [Thread-79233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:22:23.985 [DEBUG] [Thread-79233] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:22:23.986 [DEBUG] [Thread-79233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:22:23.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:22:23.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:22:24.041 [DEBUG] [Thread-79233] [transport.py] [_log()] userauth is OK
2025-12-13T00:22:24.041 [DEBUG] [Thread-79233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:22:24.041 [DEBUG] [Thread-79233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:22:24.042 [DEBUG] [Thread-79233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:22:24.042 [DEBUG] [Thread-79233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:22:24.060 [INFO] [Thread-79233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:22:24.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:22:24.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:22:24.829 [DEBUG] [Thread-79235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:24.884 [DEBUG] [Thread-79233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:22:24.884 [DEBUG] [Thread-79233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:22:24.932 [DEBUG] [Thread-79233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:22:24.932 [DEBUG] [Thread-79233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:22:24.941 [DEBUG] [Thread-79233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:22:24.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:22:24.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:22:24.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:22:24.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:22:24.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:22:24.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:22:24.978 [DEBUG] [Thread-79233] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:22:33.384 [DEBUG] [Thread-79236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:48.434 [DEBUG] [Thread-79237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:22:54.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:22:54.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:22:54.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:22:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 22, 43), 1.16, 92.19, 0.0, 40.0, 8.17, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:22:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:22:43
2025-12-13T00:22:55.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:22:55.937 [DEBUG] [Thread-79238] [transport.py] [_log()] starting thread (client mode): 0xf5703cd0
2025-12-13T00:22:55.937 [DEBUG] [Thread-79238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:22:55.957 [DEBUG] [Thread-79238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:22:55.957 [INFO] [Thread-79238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] client lang: <none>
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] server lang: <none>
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] kex follows: False
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] Compression: none
2025-12-13T00:22:55.961 [DEBUG] [Thread-79238] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:22:55.979 [DEBUG] [Thread-79238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:22:55.979 [DEBUG] [Thread-79238] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:22:55.980 [DEBUG] [Thread-79238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:22:55.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:22:55.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:22:55.982 [DEBUG] [Thread-79238] [transport.py] [_log()] userauth is OK
2025-12-13T00:22:55.982 [DEBUG] [Thread-79238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:22:55.983 [DEBUG] [Thread-79238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:22:55.983 [DEBUG] [Thread-79238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:22:55.983 [DEBUG] [Thread-79238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:22:56.015 [INFO] [Thread-79238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:22:56.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:22:56.679 [DEBUG] [Thread-79238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:22:56.680 [DEBUG] [Thread-79238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:22:56.680 [DEBUG] [Thread-79238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:22:56.721 [DEBUG] [Thread-79238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:22:56.721 [DEBUG] [Thread-79238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:22:56.724 [DEBUG] [Thread-79238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:22:56.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:22:56.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:22:56.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:22:56.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:22:56.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:22:56.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:22:56.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:22:56.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:22:56.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:22:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.932042 -999.00   +8.00  51.29     92   +6.90 1 2 2 3 1     0    0 1.18 -0.73 .NE.. 45.3 51.3 309.8 57.2 9.3 -13.6 9.2 -16.7 8.9 -14.8 9.2 -13.4
2025-12-13T00:22:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:22:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:22:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.932042
2025-12-13T00:22:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:22:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:22:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:22:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:22:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:22:56.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:22:43', tmtdew=1.16, humidity=92.19, cloud=0.0, wind=40.0, temperature=8.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:22:08.429', atlas_cloud=2, atlas_rain=1, zp_data=[0.29574999999999996, 0.1592500000000001, 0.1542500000000011, 0.0934999999999988, 0.1974999999999998, 0.5692500000000003, 1.1424999999999992, 0.8832500000000003, 0.5734999999999992, 0.17950000000000088, 0.25574999999999903, 0.21250000000000036, 0.23499999999999943, 1.0372499999999993, 1.9509999999999996, 1.4349999999999996, 0.5762499999999999, 0.3254999999999999, 1.637999999999999, nan, 0.3789999999999978, 1.2577499999999988, 2.2772500000000004, 2.36275, 0.7439999999999989, 0.43850000000000033, 2.83875, nan, nan, 1.0850000000000009, 1.6100000000000012, 1.727500000000001, 0.7072499999999984], zp_timestamp='2025-12-12T22:19:00')
2025-12-13T00:22:56.749 [DEBUG] [Thread-79238] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:22:56.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:22:56.847 [DEBUG] [Thread-79241] [transport.py] [_log()] starting thread (client mode): 0xf5702680
2025-12-13T00:22:56.848 [DEBUG] [Thread-79241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:22:56.862 [DEBUG] [Thread-79241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:22:56.862 [INFO] [Thread-79241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:22:56.870 [DEBUG] [Thread-79241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:22:56.870 [DEBUG] [Thread-79241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:22:56.870 [DEBUG] [Thread-79241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:22:56.870 [DEBUG] [Thread-79241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] client lang: <none>
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] server lang: <none>
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] kex follows: False
2025-12-13T00:22:56.871 [DEBUG] [Thread-79241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:22:56.872 [DEBUG] [Thread-79241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:22:56.872 [DEBUG] [Thread-79241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:22:56.872 [DEBUG] [Thread-79241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:22:56.872 [DEBUG] [Thread-79241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:22:56.872 [DEBUG] [Thread-79241] [transport.py] [_log()] Compression: none
2025-12-13T00:22:56.872 [DEBUG] [Thread-79241] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:22:56.929 [DEBUG] [Thread-79241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:22:56.929 [DEBUG] [Thread-79241] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:22:56.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:22:56.930 [DEBUG] [Thread-79241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:22:56.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:22:56.985 [DEBUG] [Thread-79241] [transport.py] [_log()] userauth is OK
2025-12-13T00:22:56.985 [DEBUG] [Thread-79241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:22:56.986 [DEBUG] [Thread-79241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:22:56.986 [DEBUG] [Thread-79241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:22:56.986 [DEBUG] [Thread-79241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:22:57.005 [INFO] [Thread-79241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:22:57.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:22:57.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:22:57.890 [DEBUG] [Thread-79241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:22:57.890 [DEBUG] [Thread-79241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:22:57.939 [DEBUG] [Thread-79241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:22:57.939 [DEBUG] [Thread-79241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:22:57.948 [DEBUG] [Thread-79241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:22:57.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:22:57.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:22:57.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:22:57.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:22:57.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:22:57.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:22:57.983 [DEBUG] [Thread-79241] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:23:01.087 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:23:01.088 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:23:03.464 [DEBUG] [Thread-79243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:23:18.502 [DEBUG] [Thread-79244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:23:24.907 [DEBUG] [Thread-79245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:23:28.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:23:28.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:23:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:23:28.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 23, 15), 1.16, 92.19, 0.0, 42.66, 8.17, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:23:28.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:23:15
2025-12-13T00:23:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:23:28.950 [DEBUG] [Thread-79246] [transport.py] [_log()] starting thread (client mode): 0xf5701300
2025-12-13T00:23:28.950 [DEBUG] [Thread-79246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:23:28.971 [DEBUG] [Thread-79246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:23:28.971 [INFO] [Thread-79246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:23:28.974 [DEBUG] [Thread-79246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:23:28.974 [DEBUG] [Thread-79246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] client lang: <none>
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] server lang: <none>
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] kex follows: False
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:23:28.975 [DEBUG] [Thread-79246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:23:28.976 [DEBUG] [Thread-79246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:23:28.976 [DEBUG] [Thread-79246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:23:28.976 [DEBUG] [Thread-79246] [transport.py] [_log()] Compression: none
2025-12-13T00:23:28.976 [DEBUG] [Thread-79246] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:23:28.994 [DEBUG] [Thread-79246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:23:28.995 [DEBUG] [Thread-79246] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:23:28.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:23:28.996 [DEBUG] [Thread-79246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:23:28.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:23:28.998 [DEBUG] [Thread-79246] [transport.py] [_log()] userauth is OK
2025-12-13T00:23:28.998 [DEBUG] [Thread-79246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:23:28.999 [DEBUG] [Thread-79246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:23:28.999 [DEBUG] [Thread-79246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:23:28.999 [DEBUG] [Thread-79246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:23:29.023 [INFO] [Thread-79246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:23:29.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:23:29.670 [DEBUG] [Thread-79246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:23:29.670 [DEBUG] [Thread-79246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:23:29.671 [DEBUG] [Thread-79246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:23:29.711 [DEBUG] [Thread-79246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:23:29.711 [DEBUG] [Thread-79246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:23:29.714 [DEBUG] [Thread-79246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:23:29.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:23:29.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:23:29.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:23:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:23:29.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:23:29.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:23:29.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:23:29.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:23:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:23:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.932736 -999.00   +8.10  38.96     92   +6.90 1 3 2 3 1     0    0 1.17 -0.94 Z.ESw 46.9 39.0 313.4 48.4 9.3 -14.0 9.2 -11.6 8.9 -7.2 9.2 -5.1
2025-12-13T00:23:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:23:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:23:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.932736
2025-12-13T00:23:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:23:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:23:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:23:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:23:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:23:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:23:15', tmtdew=1.16, humidity=92.19, cloud=0.0, wind=42.66, temperature=8.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:23:08.390', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, 1.8149999999999995, 1.6002500000000008, 2.772499999999999, 2.3200000000000003, nan, nan, nan, nan, 2.201999999999999, 1.234, 1.65125, 2.1739999999999995, 3.4139999999999997, nan, nan, nan, 2.293750000000001, 1.9137500000000003, 1.403999999999999, nan, nan, nan, nan, nan, nan, nan, 1.1252499999999994], zp_timestamp='2025-12-12T22:22:00')
2025-12-13T00:23:29.740 [DEBUG] [Thread-79246] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:23:29.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:23:29.837 [DEBUG] [Thread-79249] [transport.py] [_log()] starting thread (client mode): 0xf5772140
2025-12-13T00:23:29.837 [DEBUG] [Thread-79249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:23:29.853 [DEBUG] [Thread-79249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:23:29.853 [INFO] [Thread-79249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:23:29.860 [DEBUG] [Thread-79249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:23:29.861 [DEBUG] [Thread-79249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] client lang: <none>
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] server lang: <none>
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] kex follows: False
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] Compression: none
2025-12-13T00:23:29.862 [DEBUG] [Thread-79249] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:23:29.918 [DEBUG] [Thread-79249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:23:29.918 [DEBUG] [Thread-79249] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:23:29.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:23:29.919 [DEBUG] [Thread-79249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:23:29.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:23:29.973 [DEBUG] [Thread-79249] [transport.py] [_log()] userauth is OK
2025-12-13T00:23:29.974 [DEBUG] [Thread-79249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:23:29.974 [DEBUG] [Thread-79249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:23:29.974 [DEBUG] [Thread-79249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:23:29.974 [DEBUG] [Thread-79249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:23:29.993 [INFO] [Thread-79249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:23:29.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:23:29.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:23:30.789 [DEBUG] [Thread-79249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:23:30.789 [DEBUG] [Thread-79249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:23:30.837 [DEBUG] [Thread-79249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:23:30.837 [DEBUG] [Thread-79249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:23:30.846 [DEBUG] [Thread-79249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:23:30.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:23:30.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')
2025-12-13T00:23:30.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
2025-12-13T00:23:30.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:23:30.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:23:30.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:23:30.880 [DEBUG] [Thread-79249] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:23:33.529 [DEBUG] [Thread-79251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:23:48.579 [DEBUG] [Thread-79252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:00.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:24:00.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:24: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
2025-12-13T00:24:01.294 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:01.294 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:01.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 23, 47), 1.15, 92.24, 0.0, 43.3, 8.19, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:24:01.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:23:47
2025-12-13T00:24:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:24:01.878 [DEBUG] [Thread-79253] [transport.py] [_log()] starting thread (client mode): 0xf818b6d0
2025-12-13T00:24:01.879 [DEBUG] [Thread-79253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:24:01.899 [DEBUG] [Thread-79253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:24:01.899 [INFO] [Thread-79253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:24:01.902 [DEBUG] [Thread-79253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:24:01.902 [DEBUG] [Thread-79253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:24:01.902 [DEBUG] [Thread-79253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] client lang: <none>
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] server lang: <none>
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] kex follows: False
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] Compression: none
2025-12-13T00:24:01.903 [DEBUG] [Thread-79253] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:24:01.919 [DEBUG] [Thread-79253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:24:01.919 [DEBUG] [Thread-79253] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:24:01.919 [DEBUG] [Thread-79253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:24:01.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:24:01.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:24:01.922 [DEBUG] [Thread-79253] [transport.py] [_log()] userauth is OK
2025-12-13T00:24:01.922 [DEBUG] [Thread-79253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:24:01.922 [DEBUG] [Thread-79253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:24:01.922 [DEBUG] [Thread-79253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:24:01.922 [DEBUG] [Thread-79253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:24:01.931 [INFO] [Thread-79253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:24:01.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:24:02.526 [DEBUG] [Thread-79253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:24:02.526 [DEBUG] [Thread-79253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:24:02.527 [DEBUG] [Thread-79253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:24:02.567 [DEBUG] [Thread-79253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:24:02.567 [DEBUG] [Thread-79253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:24:02.570 [DEBUG] [Thread-79253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:24:02.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:24:02.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:24:02.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:24:02.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:24:02.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:24:02.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:24:02.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:24:02.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:24:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:24:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.933083 -999.00   +8.10  36.51     92   +6.90 1 3 2 3 1     0    0 1.17 -0.63 ZNE.w 40.5 36.5 312.8 46.5 9.3 -5.0 9.1 -4.7 8.9 -3.6 9.2 -3.4
2025-12-13T00:24:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:24:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:24:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.933083
2025-12-13T00:24:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:24:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:24:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:24:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:24:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:24:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:23:47', tmtdew=1.15, humidity=92.24, cloud=0.0, wind=43.3, temperature=8.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:23:38.371', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, 1.8149999999999995, 1.6002500000000008, 2.772499999999999, 2.3200000000000003, nan, nan, nan, nan, 2.201999999999999, 1.234, 1.65125, 2.1739999999999995, 3.4139999999999997, nan, nan, nan, 2.293750000000001, 1.9137500000000003, 1.403999999999999, nan, nan, nan, nan, nan, nan, nan, 1.1252499999999994], zp_timestamp='2025-12-12T22:22:00')
2025-12-13T00:24:02.597 [DEBUG] [Thread-79253] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:24:02.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:24:02.695 [DEBUG] [Thread-79256] [transport.py] [_log()] starting thread (client mode): 0xf818bd90
2025-12-13T00:24:02.695 [DEBUG] [Thread-79256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:24:02.710 [DEBUG] [Thread-79256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:24:02.710 [INFO] [Thread-79256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:24:02.718 [DEBUG] [Thread-79256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] client lang: <none>
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] server lang: <none>
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] kex follows: False
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] Compression: none
2025-12-13T00:24:02.719 [DEBUG] [Thread-79256] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:24:02.781 [DEBUG] [Thread-79256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:24:02.782 [DEBUG] [Thread-79256] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:24:02.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:24:02.783 [DEBUG] [Thread-79256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:24:02.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:24:02.837 [DEBUG] [Thread-79256] [transport.py] [_log()] userauth is OK
2025-12-13T00:24:02.838 [DEBUG] [Thread-79256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:24:02.838 [DEBUG] [Thread-79256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:24:02.838 [DEBUG] [Thread-79256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:24:02.838 [DEBUG] [Thread-79256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:24:02.855 [INFO] [Thread-79256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:24:02.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:24:02.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:24:03.606 [DEBUG] [Thread-79258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:03.674 [DEBUG] [Thread-79256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:24:03.674 [DEBUG] [Thread-79256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:24:03.723 [DEBUG] [Thread-79256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:24:03.723 [DEBUG] [Thread-79256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:24:03.735 [DEBUG] [Thread-79256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:24:03.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:24:03.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:24:03.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:24:03.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:24:03.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:24:03.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:24:03.781 [DEBUG] [Thread-79256] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:24:18.650 [DEBUG] [Thread-79259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:24.983 [DEBUG] [Thread-79260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:33.680 [DEBUG] [Thread-79261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:24:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:24:33.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:24:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:24:34.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 24, 19), 1.16, 92.19, 0.0, 41.8, 8.15, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:24:34.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:24:19
2025-12-13T00:24:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:24:34.738 [DEBUG] [Thread-79262] [transport.py] [_log()] starting thread (client mode): 0xf5700400
2025-12-13T00:24:34.738 [DEBUG] [Thread-79262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:24:34.758 [DEBUG] [Thread-79262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:24:34.759 [INFO] [Thread-79262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] client lang: <none>
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] server lang: <none>
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] kex follows: False
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] Compression: none
2025-12-13T00:24:34.762 [DEBUG] [Thread-79262] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:24:34.777 [DEBUG] [Thread-79262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:24:34.778 [DEBUG] [Thread-79262] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:24:34.778 [DEBUG] [Thread-79262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:24:34.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:24:34.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:24:34.779 [DEBUG] [Thread-79262] [transport.py] [_log()] userauth is OK
2025-12-13T00:24:34.779 [DEBUG] [Thread-79262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:24:34.779 [DEBUG] [Thread-79262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:24:34.779 [DEBUG] [Thread-79262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:24:34.779 [DEBUG] [Thread-79262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:24:34.795 [INFO] [Thread-79262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:24:34.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:24:35.387 [DEBUG] [Thread-79262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:24:35.387 [DEBUG] [Thread-79262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:24:35.387 [DEBUG] [Thread-79262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:24:35.428 [DEBUG] [Thread-79262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:24:35.428 [DEBUG] [Thread-79262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:24:35.430 [DEBUG] [Thread-79262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:24:35.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:24:35.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:24:35.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:24:35.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:24:35.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:24:35.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:24:35.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.933431 -999.00   +8.10  38.81     92   +6.90 1 3 2 3 1     0    0 1.19 -0.31 ZNE.w 39.0 38.8 311.8 49.5 9.3 -2.9 9.2 -2.4 9.0 -2.2 9.3 -2.5
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.933431
2025-12-13T00:24:35.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:24:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:24:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:24:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:24:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:24:35.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:24:19', tmtdew=1.16, humidity=92.19, cloud=0.0, wind=41.8, temperature=8.15, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:24:08.438', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, 1.8149999999999995, 1.6002500000000008, 2.772499999999999, 2.3200000000000003, nan, nan, nan, nan, 2.201999999999999, 1.234, 1.65125, 2.1739999999999995, 3.4139999999999997, nan, nan, nan, 2.293750000000001, 1.9137500000000003, 1.403999999999999, nan, nan, nan, nan, nan, nan, nan, 1.1252499999999994], zp_timestamp='2025-12-12T22:22:00')
2025-12-13T00:24:35.449 [DEBUG] [Thread-79262] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:24:35.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:24:35.538 [DEBUG] [Thread-79265] [transport.py] [_log()] starting thread (client mode): 0xf5701360
2025-12-13T00:24:35.538 [DEBUG] [Thread-79265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:24:35.555 [DEBUG] [Thread-79265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:24:35.555 [INFO] [Thread-79265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] client lang: <none>
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] server lang: <none>
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] kex follows: False
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] Compression: none
2025-12-13T00:24:35.563 [DEBUG] [Thread-79265] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:24:35.621 [DEBUG] [Thread-79265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:24:35.621 [DEBUG] [Thread-79265] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:24:35.621 [DEBUG] [Thread-79265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:24:35.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:24:35.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:24:35.678 [DEBUG] [Thread-79265] [transport.py] [_log()] userauth is OK
2025-12-13T00:24:35.678 [DEBUG] [Thread-79265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:24:35.678 [DEBUG] [Thread-79265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:24:35.678 [DEBUG] [Thread-79265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:24:35.678 [DEBUG] [Thread-79265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:24:35.693 [INFO] [Thread-79265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:24:35.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:24:35.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:24:36.546 [DEBUG] [Thread-79265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:24:36.547 [DEBUG] [Thread-79265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:24:36.594 [DEBUG] [Thread-79265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:24:36.594 [DEBUG] [Thread-79265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:24:36.603 [DEBUG] [Thread-79265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:24:36.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:24:36.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:24:36.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:24:36.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:24:36.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:24:36.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:24:36.635 [DEBUG] [Thread-79265] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:24:48.708 [DEBUG] [Thread-79267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:01.498 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:01.500 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:03.759 [DEBUG] [Thread-79268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:25:06.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:25:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:25:07.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 24, 51), 1.16, 92.19, 0.0, 41.94, 8.22, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:25:07.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:24:51
2025-12-13T00:25:07.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:25:07.630 [DEBUG] [Thread-79269] [transport.py] [_log()] starting thread (client mode): 0xf5703460
2025-12-13T00:25:07.630 [DEBUG] [Thread-79269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:25:07.650 [DEBUG] [Thread-79269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:25:07.650 [INFO] [Thread-79269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:25:07.653 [DEBUG] [Thread-79269] [transport.py] [_log()] client lang: <none>
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] server lang: <none>
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] kex follows: False
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] Compression: none
2025-12-13T00:25:07.654 [DEBUG] [Thread-79269] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:25:07.671 [DEBUG] [Thread-79269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:25:07.671 [DEBUG] [Thread-79269] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:25:07.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:25:07.672 [DEBUG] [Thread-79269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:25:07.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:25:07.674 [DEBUG] [Thread-79269] [transport.py] [_log()] userauth is OK
2025-12-13T00:25:07.674 [DEBUG] [Thread-79269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:25:07.674 [DEBUG] [Thread-79269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:25:07.675 [DEBUG] [Thread-79269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:25:07.675 [DEBUG] [Thread-79269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:25:07.699 [INFO] [Thread-79269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:25:07.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:25:08.380 [DEBUG] [Thread-79269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:25:08.380 [DEBUG] [Thread-79269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:25:08.380 [DEBUG] [Thread-79269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:25:08.421 [DEBUG] [Thread-79269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:25:08.421 [DEBUG] [Thread-79269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:25:08.423 [DEBUG] [Thread-79269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:25:08.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:25:08.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:25:08.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:25:08.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:25:08.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:25:08.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:25:08.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:25:08.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:25:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:25:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.933778 -999.00   +8.20  38.00     92   +7.00 1 3 2 3 1     0    0 1.19 -0.39 ----- 38.1 38.0 316.8 45.3 9.4 -5.1 9.2 -6.7 9.0 -9.4 9.3 -10.3
2025-12-13T00:25:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:25:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:25:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.933778
2025-12-13T00:25:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:25:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:25:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:25:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:25:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:25:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:24:51', tmtdew=1.16, humidity=92.19, cloud=0.0, wind=41.94, temperature=8.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:24:38.419', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, 1.8149999999999995, 1.6002500000000008, 2.772499999999999, 2.3200000000000003, nan, nan, nan, nan, 2.201999999999999, 1.234, 1.65125, 2.1739999999999995, 3.4139999999999997, nan, nan, nan, 2.293750000000001, 1.9137500000000003, 1.403999999999999, nan, nan, nan, nan, nan, nan, nan, 1.1252499999999994], zp_timestamp='2025-12-12T22:22:00')
2025-12-13T00:25:08.448 [DEBUG] [Thread-79269] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:25:08.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:25:08.541 [DEBUG] [Thread-79272] [transport.py] [_log()] starting thread (client mode): 0xf81e7c10
2025-12-13T00:25:08.541 [DEBUG] [Thread-79272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:25:08.560 [DEBUG] [Thread-79272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:25:08.560 [INFO] [Thread-79272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] client lang: <none>
2025-12-13T00:25:08.568 [DEBUG] [Thread-79272] [transport.py] [_log()] server lang: <none>
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] kex follows: False
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] Compression: none
2025-12-13T00:25:08.569 [DEBUG] [Thread-79272] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:25:08.625 [DEBUG] [Thread-79272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:25:08.626 [DEBUG] [Thread-79272] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:25:08.626 [DEBUG] [Thread-79272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:25:08.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:25:08.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:25:08.682 [DEBUG] [Thread-79272] [transport.py] [_log()] userauth is OK
2025-12-13T00:25:08.682 [DEBUG] [Thread-79272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:25:08.682 [DEBUG] [Thread-79272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:25:08.683 [DEBUG] [Thread-79272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:25:08.683 [DEBUG] [Thread-79272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:25:08.701 [INFO] [Thread-79272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:25:08.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:25:08.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:25:09.510 [DEBUG] [Thread-79272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:25:09.510 [DEBUG] [Thread-79272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:25:09.558 [DEBUG] [Thread-79272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:25:09.558 [DEBUG] [Thread-79272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:25:09.567 [DEBUG] [Thread-79272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:25:09.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:25:09.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:25:09.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:25:09.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:25:09.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:25:09.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:25:09.602 [DEBUG] [Thread-79272] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:25:18.787 [DEBUG] [Thread-79274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:25.052 [DEBUG] [Thread-79275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:33.832 [DEBUG] [Thread-79276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:25:39.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:25:39.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:25:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:25:40.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 25, 23), 1.17, 92.12, 0.0, 43.6, 8.2, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:25:40.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:25:23
2025-12-13T00:25:40.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:25:40.572 [DEBUG] [Thread-79277] [transport.py] [_log()] starting thread (client mode): 0xf57885b0
2025-12-13T00:25:40.572 [DEBUG] [Thread-79277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:25:40.592 [DEBUG] [Thread-79277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:25:40.592 [INFO] [Thread-79277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] client lang: <none>
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] server lang: <none>
2025-12-13T00:25:40.595 [DEBUG] [Thread-79277] [transport.py] [_log()] kex follows: False
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] Compression: none
2025-12-13T00:25:40.596 [DEBUG] [Thread-79277] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:25:40.608 [DEBUG] [Thread-79277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:25:40.608 [DEBUG] [Thread-79277] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:25:40.608 [DEBUG] [Thread-79277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:25:40.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:25:40.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:25:40.610 [DEBUG] [Thread-79277] [transport.py] [_log()] userauth is OK
2025-12-13T00:25:40.610 [DEBUG] [Thread-79277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:25:40.610 [DEBUG] [Thread-79277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:25:40.610 [DEBUG] [Thread-79277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:25:40.611 [DEBUG] [Thread-79277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:25:40.628 [INFO] [Thread-79277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:25:40.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:25:41.248 [DEBUG] [Thread-79277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:25:41.248 [DEBUG] [Thread-79277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:25:41.248 [DEBUG] [Thread-79277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:25:41.289 [DEBUG] [Thread-79277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:25:41.289 [DEBUG] [Thread-79277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:25:41.292 [DEBUG] [Thread-79277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:25:41.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:25:41.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:25:41.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:25:41.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:25:41.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:25:41.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:25:41.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:25:41.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:25:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:25:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.934125 -999.00   +8.10  47.97     92   +6.90 1 3 2 3 1     0    0 1.18 -0.54 ----- 39.4 48.0 315.2 54.9 9.4 -13.5 9.2 -14.8 8.9 -10.7 9.3 -8.4
2025-12-13T00:25:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:25:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:25:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.934125
2025-12-13T00:25:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:25:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:25:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:25:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:25:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:25:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:25:23', tmtdew=1.17, humidity=92.12, cloud=0.0, wind=43.6, temperature=8.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:25:08.400', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, 1.8149999999999995, 1.6002500000000008, 2.772499999999999, 2.3200000000000003, nan, nan, nan, nan, 2.201999999999999, 1.234, 1.65125, 2.1739999999999995, 3.4139999999999997, nan, nan, nan, 2.293750000000001, 1.9137500000000003, 1.403999999999999, nan, nan, nan, nan, nan, nan, nan, 1.1252499999999994], zp_timestamp='2025-12-12T22:22:00')
2025-12-13T00:25:41.317 [DEBUG] [Thread-79277] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:25:41.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:25:41.416 [DEBUG] [Thread-79280] [transport.py] [_log()] starting thread (client mode): 0xf5703550
2025-12-13T00:25:41.416 [DEBUG] [Thread-79280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:25:41.431 [DEBUG] [Thread-79280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:25:41.431 [INFO] [Thread-79280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:25:41.438 [DEBUG] [Thread-79280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] client lang: <none>
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] server lang: <none>
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] kex follows: False
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] Compression: none
2025-12-13T00:25:41.439 [DEBUG] [Thread-79280] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:25:41.498 [DEBUG] [Thread-79280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:25:41.498 [DEBUG] [Thread-79280] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:25:41.499 [DEBUG] [Thread-79280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:25:41.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:25:41.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:25:41.554 [DEBUG] [Thread-79280] [transport.py] [_log()] userauth is OK
2025-12-13T00:25:41.555 [DEBUG] [Thread-79280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:25:41.555 [DEBUG] [Thread-79280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:25:41.555 [DEBUG] [Thread-79280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:25:41.555 [DEBUG] [Thread-79280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:25:41.573 [INFO] [Thread-79280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:25:41.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:25:41.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:25:42.378 [DEBUG] [Thread-79280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:25:42.378 [DEBUG] [Thread-79280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:25:42.426 [DEBUG] [Thread-79280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:25:42.426 [DEBUG] [Thread-79280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:25:42.435 [DEBUG] [Thread-79280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:25:42.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:25:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:25:42.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:25:42.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:25:42.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:25:42.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:25:42.469 [DEBUG] [Thread-79280] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:25:48.866 [DEBUG] [Thread-79282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:01.712 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:01.713 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:03.912 [DEBUG] [Thread-79283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:12.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:26:12.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:26:12.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:26:13.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 25, 55), 1.17, 92.14, 0.0, 38.02, 8.24, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:26:13.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:25:55
2025-12-13T00:26:13.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:26:13.458 [DEBUG] [Thread-79284] [transport.py] [_log()] starting thread (client mode): 0xf5700e20
2025-12-13T00:26:13.458 [DEBUG] [Thread-79284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:26:13.478 [DEBUG] [Thread-79284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:26:13.478 [INFO] [Thread-79284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] client lang: <none>
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] server lang: <none>
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] kex follows: False
2025-12-13T00:26:13.480 [DEBUG] [Thread-79284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:26:13.481 [DEBUG] [Thread-79284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:26:13.481 [DEBUG] [Thread-79284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:26:13.481 [DEBUG] [Thread-79284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:26:13.481 [DEBUG] [Thread-79284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:26:13.481 [DEBUG] [Thread-79284] [transport.py] [_log()] Compression: none
2025-12-13T00:26:13.481 [DEBUG] [Thread-79284] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:26:13.492 [DEBUG] [Thread-79284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:26:13.492 [DEBUG] [Thread-79284] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:26:13.493 [DEBUG] [Thread-79284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:26:13.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:26:13.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:26:13.495 [DEBUG] [Thread-79284] [transport.py] [_log()] userauth is OK
2025-12-13T00:26:13.495 [DEBUG] [Thread-79284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:26:13.496 [DEBUG] [Thread-79284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:26:13.496 [DEBUG] [Thread-79284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:26:13.496 [DEBUG] [Thread-79284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:26:13.518 [INFO] [Thread-79284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:26:13.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:26:14.178 [DEBUG] [Thread-79284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:26:14.178 [DEBUG] [Thread-79284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:26:14.178 [DEBUG] [Thread-79284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:26:14.219 [DEBUG] [Thread-79284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:26:14.219 [DEBUG] [Thread-79284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:26:14.222 [DEBUG] [Thread-79284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:26:14.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:26:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:26:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:26:14.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:26:14.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:26:14.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:26:14.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:26:14.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:26:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:26:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.934472 -999.00   +8.10  38.53     92   +7.00 1 3 2 3 1     0    0 1.17 -0.98 ----- 39.1 38.5 326.4 41.2 9.3 -10.6 9.2 -10.6 8.9 -10.5 9.3 -12.0
2025-12-13T00:26:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:26:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:26:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.934472
2025-12-13T00:26:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:26:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:26:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:26:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:26:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:26:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:25:55', tmtdew=1.17, humidity=92.14, cloud=0.0, wind=38.02, temperature=8.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:25:38.381', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:25:00')
2025-12-13T00:26:14.250 [DEBUG] [Thread-79284] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:26:14.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:26:14.357 [DEBUG] [Thread-79287] [transport.py] [_log()] starting thread (client mode): 0xfabc77c0
2025-12-13T00:26:14.357 [DEBUG] [Thread-79287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:26:14.372 [DEBUG] [Thread-79287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:26:14.372 [INFO] [Thread-79287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:26:14.380 [DEBUG] [Thread-79287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:26:14.380 [DEBUG] [Thread-79287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:26:14.380 [DEBUG] [Thread-79287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:26:14.380 [DEBUG] [Thread-79287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] client lang: <none>
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] server lang: <none>
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] kex follows: False
2025-12-13T00:26:14.381 [DEBUG] [Thread-79287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:26:14.382 [DEBUG] [Thread-79287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:26:14.382 [DEBUG] [Thread-79287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:26:14.382 [DEBUG] [Thread-79287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:26:14.382 [DEBUG] [Thread-79287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:26:14.382 [DEBUG] [Thread-79287] [transport.py] [_log()] Compression: none
2025-12-13T00:26:14.382 [DEBUG] [Thread-79287] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:26:14.439 [DEBUG] [Thread-79287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:26:14.440 [DEBUG] [Thread-79287] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:26:14.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:26:14.441 [DEBUG] [Thread-79287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:26:14.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:26:14.495 [DEBUG] [Thread-79287] [transport.py] [_log()] userauth is OK
2025-12-13T00:26:14.495 [DEBUG] [Thread-79287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:26:14.495 [DEBUG] [Thread-79287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:26:14.495 [DEBUG] [Thread-79287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:26:14.495 [DEBUG] [Thread-79287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:26:14.522 [INFO] [Thread-79287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:26:14.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:26:14.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:26:15.361 [DEBUG] [Thread-79287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:26:15.361 [DEBUG] [Thread-79287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:26:15.410 [DEBUG] [Thread-79287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:26:15.410 [DEBUG] [Thread-79287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:26:15.420 [DEBUG] [Thread-79287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:26:15.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:26:15.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:26:15.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:26:15.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:26:15.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:26:15.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:26:15.454 [DEBUG] [Thread-79287] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:26:18.943 [DEBUG] [Thread-79289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:25.129 [DEBUG] [Thread-79290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:33.987 [DEBUG] [Thread-79291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:26:45.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:26:45.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:26:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:26:46.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 26, 27), 1.19, 91.99, 0.0, 40.07, 8.24, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:26:46.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:26:27
2025-12-13T00:26:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:26:46.433 [DEBUG] [Thread-79292] [transport.py] [_log()] starting thread (client mode): 0xf81887f0
2025-12-13T00:26:46.433 [DEBUG] [Thread-79292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:26:46.453 [DEBUG] [Thread-79292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:26:46.453 [INFO] [Thread-79292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] client lang: <none>
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] server lang: <none>
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] kex follows: False
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] Compression: none
2025-12-13T00:26:46.457 [DEBUG] [Thread-79292] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:26:46.475 [DEBUG] [Thread-79292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:26:46.476 [DEBUG] [Thread-79292] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:26:46.476 [DEBUG] [Thread-79292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:26:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:26:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:26:46.479 [DEBUG] [Thread-79292] [transport.py] [_log()] userauth is OK
2025-12-13T00:26:46.479 [DEBUG] [Thread-79292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:26:46.480 [DEBUG] [Thread-79292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:26:46.480 [DEBUG] [Thread-79292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:26:46.480 [DEBUG] [Thread-79292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:26:46.497 [INFO] [Thread-79292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:26:46.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:26:47.083 [DEBUG] [Thread-79292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:26:47.083 [DEBUG] [Thread-79292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:26:47.084 [DEBUG] [Thread-79292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:26:47.124 [DEBUG] [Thread-79292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:26:47.124 [DEBUG] [Thread-79292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:26:47.127 [DEBUG] [Thread-79292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:26:47.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:26:47.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:26:47.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:26:47.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:26:47.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:26:47.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:26:47.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:26:47.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:26:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:26:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.934819 -999.00   +8.10  36.35     92   +6.90 1 3 2 3 1     0    0 1.16 -1.37 ..ESw 28.7 36.4 324.5 52.3 9.4 -12.2 9.2 -10.0 8.9 -6.9 9.3 -8.3
2025-12-13T00:26:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:26:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:26:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.934819
2025-12-13T00:26:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:26:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:26:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:26:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:26:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:26:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:26:27', tmtdew=1.19, humidity=91.99, cloud=0.0, wind=40.07, temperature=8.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:26:08.362', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:25:00')
2025-12-13T00:26:47.152 [DEBUG] [Thread-79292] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:26:47.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:26:47.249 [DEBUG] [Thread-79295] [transport.py] [_log()] starting thread (client mode): 0xf5771750
2025-12-13T00:26:47.249 [DEBUG] [Thread-79295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:26:47.264 [DEBUG] [Thread-79295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:26:47.264 [INFO] [Thread-79295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:26:47.271 [DEBUG] [Thread-79295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:26:47.271 [DEBUG] [Thread-79295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] client lang: <none>
2025-12-13T00:26:47.272 [DEBUG] [Thread-79295] [transport.py] [_log()] server lang: <none>
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] kex follows: False
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] Compression: none
2025-12-13T00:26:47.273 [DEBUG] [Thread-79295] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:26:47.332 [DEBUG] [Thread-79295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:26:47.332 [DEBUG] [Thread-79295] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:26:47.333 [DEBUG] [Thread-79295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:26:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:26:47.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:26:47.395 [DEBUG] [Thread-79295] [transport.py] [_log()] userauth is OK
2025-12-13T00:26:47.395 [DEBUG] [Thread-79295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:26:47.395 [DEBUG] [Thread-79295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:26:47.395 [DEBUG] [Thread-79295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:26:47.395 [DEBUG] [Thread-79295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:26:47.414 [INFO] [Thread-79295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:26:47.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:26:47.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:26:48.252 [DEBUG] [Thread-79295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:26:48.252 [DEBUG] [Thread-79295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:26:48.300 [DEBUG] [Thread-79295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:26:48.300 [DEBUG] [Thread-79295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:26:48.309 [DEBUG] [Thread-79295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:26:48.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:26:48.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:26:48.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:26:48.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:26:48.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:26:48.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:26:48.344 [DEBUG] [Thread-79295] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:26:49.013 [DEBUG] [Thread-79297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:01.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:01.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:04.059 [DEBUG] [Thread-79298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:18.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:27:18.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:27:18.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:27:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 26, 59), 1.2, 91.92, 0.0, 39.88, 8.2, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:27:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:26:59
2025-12-13T00:27:19.086 [DEBUG] [Thread-79299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:27:19.310 [DEBUG] [Thread-79300] [transport.py] [_log()] starting thread (client mode): 0xf5772380
2025-12-13T00:27:19.310 [DEBUG] [Thread-79300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:27:19.326 [DEBUG] [Thread-79300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:27:19.326 [INFO] [Thread-79300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] client lang: <none>
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] server lang: <none>
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] kex follows: False
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] Compression: none
2025-12-13T00:27:19.329 [DEBUG] [Thread-79300] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:27:19.340 [DEBUG] [Thread-79300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:27:19.340 [DEBUG] [Thread-79300] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:27:19.341 [DEBUG] [Thread-79300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:27:19.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:27:19.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:27:19.342 [DEBUG] [Thread-79300] [transport.py] [_log()] userauth is OK
2025-12-13T00:27:19.342 [DEBUG] [Thread-79300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:27:19.343 [DEBUG] [Thread-79300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:27:19.343 [DEBUG] [Thread-79300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:27:19.343 [DEBUG] [Thread-79300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:27:19.356 [INFO] [Thread-79300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:27:19.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:27:19.980 [DEBUG] [Thread-79300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:27:19.980 [DEBUG] [Thread-79300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:27:19.980 [DEBUG] [Thread-79300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:27:20.021 [DEBUG] [Thread-79300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:27:20.021 [DEBUG] [Thread-79300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:27:20.024 [DEBUG] [Thread-79300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:27:20.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:27:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:27:20.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:27:20.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:27:20.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:27:20.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:27:20.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:27:20.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:27:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:27:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.935514 -999.00   +8.20  39.61     91   +6.90 1 3 2 3 1     0    0 1.19 -0.86 ZNES. 36.5 39.6 324.6 47.8 9.4 -5.7 9.2 -6.9 9.0 -9.1 9.3 -8.1
2025-12-13T00:27:20.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:27:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:27:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.935514
2025-12-13T00:27:20.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:27:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:27:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:27:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:27:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:27:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:26:59', tmtdew=1.2, humidity=91.92, cloud=0.0, wind=39.88, temperature=8.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:27:08.410', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:25:00')
2025-12-13T00:27:20.051 [DEBUG] [Thread-79300] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:27:20.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:27:20.152 [DEBUG] [Thread-79303] [transport.py] [_log()] starting thread (client mode): 0xf81e6d40
2025-12-13T00:27:20.152 [DEBUG] [Thread-79303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:27:20.167 [DEBUG] [Thread-79303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:27:20.167 [INFO] [Thread-79303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:27:20.174 [DEBUG] [Thread-79303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:27:20.174 [DEBUG] [Thread-79303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] client lang: <none>
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] server lang: <none>
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] kex follows: False
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] Compression: none
2025-12-13T00:27:20.175 [DEBUG] [Thread-79303] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:27:20.233 [DEBUG] [Thread-79303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:27:20.233 [DEBUG] [Thread-79303] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:27:20.234 [DEBUG] [Thread-79303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:27:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:27:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:27:20.291 [DEBUG] [Thread-79303] [transport.py] [_log()] userauth is OK
2025-12-13T00:27:20.291 [DEBUG] [Thread-79303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:27:20.291 [DEBUG] [Thread-79303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:27:20.291 [DEBUG] [Thread-79303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:27:20.292 [DEBUG] [Thread-79303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:27:20.309 [INFO] [Thread-79303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:27:20.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:27:20.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:27:21.132 [DEBUG] [Thread-79303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:27:21.132 [DEBUG] [Thread-79303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:27:21.180 [DEBUG] [Thread-79303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:27:21.180 [DEBUG] [Thread-79303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:27:21.189 [DEBUG] [Thread-79303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:27:21.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:27:21.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:27:21.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:27:21.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:27:21.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:27:21.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:27:21.223 [DEBUG] [Thread-79303] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:27:25.203 [DEBUG] [Thread-79305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:34.115 [DEBUG] [Thread-79306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:49.156 [DEBUG] [Thread-79307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:27:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:27:51.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:27:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:27:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 27, 31), 1.23, 91.77, 0.0, 40.63, 8.2, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:27:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:27:31
2025-12-13T00:27:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:27:52.220 [DEBUG] [Thread-79308] [transport.py] [_log()] starting thread (client mode): 0xf57001c0
2025-12-13T00:27:52.221 [DEBUG] [Thread-79308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:27:52.239 [DEBUG] [Thread-79308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:27:52.239 [INFO] [Thread-79308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:27:52.242 [DEBUG] [Thread-79308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:27:52.242 [DEBUG] [Thread-79308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:27:52.242 [DEBUG] [Thread-79308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:27:52.242 [DEBUG] [Thread-79308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] client lang: <none>
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] server lang: <none>
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] kex follows: False
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] Compression: none
2025-12-13T00:27:52.243 [DEBUG] [Thread-79308] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:27:52.260 [DEBUG] [Thread-79308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:27:52.261 [DEBUG] [Thread-79308] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:27:52.261 [DEBUG] [Thread-79308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:27:52.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:27:52.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:27:52.263 [DEBUG] [Thread-79308] [transport.py] [_log()] userauth is OK
2025-12-13T00:27:52.264 [DEBUG] [Thread-79308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:27:52.264 [DEBUG] [Thread-79308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:27:52.264 [DEBUG] [Thread-79308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:27:52.264 [DEBUG] [Thread-79308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:27:52.287 [INFO] [Thread-79308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:27:52.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:27:52.922 [DEBUG] [Thread-79308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:27:52.923 [DEBUG] [Thread-79308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:27:52.923 [DEBUG] [Thread-79308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:27:52.965 [DEBUG] [Thread-79308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:27:52.965 [DEBUG] [Thread-79308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:27:52.967 [DEBUG] [Thread-79308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:27:52.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:27:52.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:27:52.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:27:52.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:27:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:27:52.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:27:52.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:27:52.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:27:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:27:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.935861 -999.00   +8.20  39.72     91   +6.90 1 3 2 3 1     0    0 1.18 -0.72 ZNES. 37.7 39.7 310.8 45.1 9.4 -7.0 9.2 -5.6 8.9 -4.9 9.3 -5.4
2025-12-13T00:27:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:27:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:27:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.935861
2025-12-13T00:27:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:27:52.993 [DEBUG] [Thread-79308] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:27:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:27:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:27:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:27:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:27:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:27:31', tmtdew=1.23, humidity=91.77, cloud=0.0, wind=40.63, temperature=8.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:27:38.390', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:25:00')
2025-12-13T00:27:53.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:27:53.100 [DEBUG] [Thread-79311] [transport.py] [_log()] starting thread (client mode): 0xf5702c20
2025-12-13T00:27:53.100 [DEBUG] [Thread-79311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:27:53.115 [DEBUG] [Thread-79311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:27:53.115 [INFO] [Thread-79311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:27:53.122 [DEBUG] [Thread-79311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] client lang: <none>
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] server lang: <none>
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] kex follows: False
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] Compression: none
2025-12-13T00:27:53.123 [DEBUG] [Thread-79311] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:27:53.177 [DEBUG] [Thread-79311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:27:53.177 [DEBUG] [Thread-79311] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:27:53.178 [DEBUG] [Thread-79311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:27:53.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:27:53.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:27:53.235 [DEBUG] [Thread-79311] [transport.py] [_log()] userauth is OK
2025-12-13T00:27:53.236 [DEBUG] [Thread-79311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:27:53.236 [DEBUG] [Thread-79311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:27:53.236 [DEBUG] [Thread-79311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:27:53.236 [DEBUG] [Thread-79311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:27:53.259 [INFO] [Thread-79311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:27:53.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:27:53.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:27:54.083 [DEBUG] [Thread-79311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:27:54.084 [DEBUG] [Thread-79311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:27:54.132 [DEBUG] [Thread-79311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:27:54.132 [DEBUG] [Thread-79311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:27:54.141 [DEBUG] [Thread-79311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:27:54.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:27:54.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:27:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:27:54.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:27:54.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:27:54.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:27:54.175 [DEBUG] [Thread-79311] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:28:02.120 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:02.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:04.179 [DEBUG] [Thread-79313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:19.213 [DEBUG] [Thread-79314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:28:24.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:28:24.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:28:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 28, 3), 1.23, 91.77, 0.0, 41.75, 8.2, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:28:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:28:03
2025-12-13T00:28:25.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:28:25.187 [DEBUG] [Thread-79315] [transport.py] [_log()] starting thread (client mode): 0xfabc77c0
2025-12-13T00:28:25.187 [DEBUG] [Thread-79315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:28:25.202 [DEBUG] [Thread-79315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:28:25.202 [INFO] [Thread-79315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] client lang: <none>
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] server lang: <none>
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] kex follows: False
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] Compression: none
2025-12-13T00:28:25.204 [DEBUG] [Thread-79315] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:28:25.211 [DEBUG] [Thread-79315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:28:25.212 [DEBUG] [Thread-79315] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:28:25.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:28:25.212 [DEBUG] [Thread-79315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:28:25.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:28:25.213 [DEBUG] [Thread-79315] [transport.py] [_log()] userauth is OK
2025-12-13T00:28:25.213 [DEBUG] [Thread-79315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:28:25.213 [DEBUG] [Thread-79315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:28:25.213 [DEBUG] [Thread-79315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:28:25.213 [DEBUG] [Thread-79315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:28:25.226 [INFO] [Thread-79315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:28:25.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:28:25.270 [DEBUG] [Thread-79317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:25.837 [DEBUG] [Thread-79315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:28:25.837 [DEBUG] [Thread-79315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:28:25.837 [DEBUG] [Thread-79315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:28:25.878 [DEBUG] [Thread-79315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:28:25.878 [DEBUG] [Thread-79315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:28:25.880 [DEBUG] [Thread-79315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:28:25.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:28:25.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:28:25.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:28:25.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:28:25.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:28:25.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:28:25.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.936208 -999.00   +8.20  42.90     91   +6.90 1 3 2 3 1     0    0 1.20 -0.47 Z.E.. 45.1 42.9 313.4 48.7 9.4 -6.3 9.2 -7.1 9.0 -6.4 9.3 -5.4
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.936208
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:28:25.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:28:03', tmtdew=1.23, humidity=91.77, cloud=0.0, wind=41.75, temperature=8.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:28:08.371', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:25:00')
2025-12-13T00:28:25.897 [DEBUG] [Thread-79315] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:28:25.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:28:25.984 [DEBUG] [Thread-79319] [transport.py] [_log()] starting thread (client mode): 0xf8189360
2025-12-13T00:28:25.984 [DEBUG] [Thread-79319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:28:25.998 [DEBUG] [Thread-79319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:28:25.999 [INFO] [Thread-79319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] client lang: <none>
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] server lang: <none>
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] kex follows: False
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:28:26.006 [DEBUG] [Thread-79319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:28:26.007 [DEBUG] [Thread-79319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:28:26.007 [DEBUG] [Thread-79319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:28:26.007 [DEBUG] [Thread-79319] [transport.py] [_log()] Compression: none
2025-12-13T00:28:26.007 [DEBUG] [Thread-79319] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:28:26.063 [DEBUG] [Thread-79319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:28:26.063 [DEBUG] [Thread-79319] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:28:26.063 [DEBUG] [Thread-79319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:28:26.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:28:26.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:28:26.119 [DEBUG] [Thread-79319] [transport.py] [_log()] userauth is OK
2025-12-13T00:28:26.120 [DEBUG] [Thread-79319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:28:26.120 [DEBUG] [Thread-79319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:28:26.120 [DEBUG] [Thread-79319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:28:26.120 [DEBUG] [Thread-79319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:28:26.137 [INFO] [Thread-79319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:28:26.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:28:26.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:28:26.960 [DEBUG] [Thread-79319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:28:26.960 [DEBUG] [Thread-79319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:28:27.007 [DEBUG] [Thread-79319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:28:27.007 [DEBUG] [Thread-79319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:28:27.016 [DEBUG] [Thread-79319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:28:27.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:28:27.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:28:27.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:28:27.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:28:27.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:28:27.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:28:27.047 [DEBUG] [Thread-79319] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:28:34.243 [DEBUG] [Thread-79321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:49.297 [DEBUG] [Thread-79322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:28:57.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:28:57.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:28:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:28:57.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 28, 35), 1.23, 91.74, 0.0, 37.72, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:28:57.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:28:35
2025-12-13T00:28:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:28:58.013 [DEBUG] [Thread-79323] [transport.py] [_log()] starting thread (client mode): 0xf813f5b0
2025-12-13T00:28:58.014 [DEBUG] [Thread-79323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:28:58.035 [DEBUG] [Thread-79323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:28:58.035 [INFO] [Thread-79323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] client lang: <none>
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] server lang: <none>
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] kex follows: False
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] Compression: none
2025-12-13T00:28:58.038 [DEBUG] [Thread-79323] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:28:58.055 [DEBUG] [Thread-79323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:28:58.055 [DEBUG] [Thread-79323] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:28:58.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:28:58.056 [DEBUG] [Thread-79323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:28:58.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:28:58.058 [DEBUG] [Thread-79323] [transport.py] [_log()] userauth is OK
2025-12-13T00:28:58.058 [DEBUG] [Thread-79323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:28:58.058 [DEBUG] [Thread-79323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:28:58.058 [DEBUG] [Thread-79323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:28:58.059 [DEBUG] [Thread-79323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:28:58.076 [INFO] [Thread-79323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:28:58.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:28:58.635 [DEBUG] [Thread-79323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:28:58.635 [DEBUG] [Thread-79323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:28:58.636 [DEBUG] [Thread-79323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:28:58.677 [DEBUG] [Thread-79323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:28:58.677 [DEBUG] [Thread-79323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:28:58.680 [DEBUG] [Thread-79323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:28:58.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:28:58.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:28:58.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:28:58.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:28:58.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:28:58.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:28:58.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:28:58.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:28:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:28:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.936555 -999.00   +8.20  36.71     92   +7.00 1 3 2 3 1     0    0 1.20 -0.28 z.ES. 36.7 36.7 307.4 49.4 9.4 -6.7 9.2 -7.0 8.9 -5.7 9.3 -4.8
2025-12-13T00:28:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:28:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:28:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.936555
2025-12-13T00:28:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:28:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:28:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:28:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:28:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:28:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:28:35', tmtdew=1.23, humidity=91.74, cloud=0.0, wind=37.72, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:28:38.352', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:25:00')
2025-12-13T00:28:58.708 [DEBUG] [Thread-79323] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:28:58.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:28:58.805 [DEBUG] [Thread-79326] [transport.py] [_log()] starting thread (client mode): 0xf81e41f0
2025-12-13T00:28:58.805 [DEBUG] [Thread-79326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:28:58.819 [DEBUG] [Thread-79326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:28:58.819 [INFO] [Thread-79326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:28:58.827 [DEBUG] [Thread-79326] [transport.py] [_log()] client lang: <none>
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] server lang: <none>
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] kex follows: False
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] Compression: none
2025-12-13T00:28:58.828 [DEBUG] [Thread-79326] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:28:58.883 [DEBUG] [Thread-79326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:28:58.884 [DEBUG] [Thread-79326] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:28:58.884 [DEBUG] [Thread-79326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:28:58.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:28:58.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:28:58.940 [DEBUG] [Thread-79326] [transport.py] [_log()] userauth is OK
2025-12-13T00:28:58.940 [DEBUG] [Thread-79326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:28:58.940 [DEBUG] [Thread-79326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:28:58.940 [DEBUG] [Thread-79326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:28:58.940 [DEBUG] [Thread-79326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:28:58.958 [INFO] [Thread-79326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:28:58.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:28:58.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:28:59.753 [DEBUG] [Thread-79326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:28:59.753 [DEBUG] [Thread-79326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:28:59.802 [DEBUG] [Thread-79326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:28:59.802 [DEBUG] [Thread-79326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:28:59.811 [DEBUG] [Thread-79326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:28:59.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:28:59.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:28:59.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:28:59.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:28:59.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:28:59.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:28:59.845 [DEBUG] [Thread-79326] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:29:02.326 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:29:02.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:29:04.323 [DEBUG] [Thread-79328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:29:19.357 [DEBUG] [Thread-79329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:29:25.347 [DEBUG] [Thread-79330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:29:29.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:29:29.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:29:29.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:29:30.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 29, 7), 1.22, 91.81, 0.0, 32.18, 8.32, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:29:30.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:29:07
2025-12-13T00:29:30.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:29:30.808 [DEBUG] [Thread-79331] [transport.py] [_log()] starting thread (client mode): 0xf813eec0
2025-12-13T00:29:30.808 [DEBUG] [Thread-79331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:29:30.828 [DEBUG] [Thread-79331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:29:30.828 [INFO] [Thread-79331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:29:30.831 [DEBUG] [Thread-79331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] client lang: <none>
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] server lang: <none>
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] kex follows: False
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:29:30.832 [DEBUG] [Thread-79331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:29:30.833 [DEBUG] [Thread-79331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:29:30.833 [DEBUG] [Thread-79331] [transport.py] [_log()] Compression: none
2025-12-13T00:29:30.833 [DEBUG] [Thread-79331] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:29:30.851 [DEBUG] [Thread-79331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:29:30.851 [DEBUG] [Thread-79331] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:29:30.852 [DEBUG] [Thread-79331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:29:30.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:29:30.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:29:30.854 [DEBUG] [Thread-79331] [transport.py] [_log()] userauth is OK
2025-12-13T00:29:30.855 [DEBUG] [Thread-79331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:29:30.855 [DEBUG] [Thread-79331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:29:30.855 [DEBUG] [Thread-79331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:29:30.855 [DEBUG] [Thread-79331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:29:30.878 [INFO] [Thread-79331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:29:30.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:29:31.597 [DEBUG] [Thread-79331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:29:31.598 [DEBUG] [Thread-79331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:29:31.598 [DEBUG] [Thread-79331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:29:31.639 [DEBUG] [Thread-79331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:29:31.639 [DEBUG] [Thread-79331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:29:31.641 [DEBUG] [Thread-79331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:29:31.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:29:31.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:29:31.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:29:31.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:29:31.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:29:31.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:29:31.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:29:31.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:29:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:29:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.936903 -999.00   +8.10  39.68     91   +6.90 1 3 2 3 1     0    0 1.18 -0.36 z.ES. 37.7 39.7 313.0 50.0 9.4 -5.3 9.2 -5.2 9.0 -3.3 9.3 -2.6
2025-12-13T00:29:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:29:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:29:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.936903
2025-12-13T00:29:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:29:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:29:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:29:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:29:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:29:31.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:29:07', tmtdew=1.22, humidity=91.81, cloud=0.0, wind=32.18, temperature=8.32, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:29:08.419', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:27:00')
2025-12-13T00:29:31.664 [DEBUG] [Thread-79331] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:29:31.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:29:31.760 [DEBUG] [Thread-79334] [transport.py] [_log()] starting thread (client mode): 0xf8189210
2025-12-13T00:29:31.760 [DEBUG] [Thread-79334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:29:31.776 [DEBUG] [Thread-79334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:29:31.777 [INFO] [Thread-79334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:29:31.784 [DEBUG] [Thread-79334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:29:31.784 [DEBUG] [Thread-79334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:29:31.784 [DEBUG] [Thread-79334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] client lang: <none>
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] server lang: <none>
2025-12-13T00:29:31.785 [DEBUG] [Thread-79334] [transport.py] [_log()] kex follows: False
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] Compression: none
2025-12-13T00:29:31.786 [DEBUG] [Thread-79334] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:29:31.847 [DEBUG] [Thread-79334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:29:31.848 [DEBUG] [Thread-79334] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:29:31.849 [DEBUG] [Thread-79334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:29:31.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:29:31.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:29:31.904 [DEBUG] [Thread-79334] [transport.py] [_log()] userauth is OK
2025-12-13T00:29:31.904 [DEBUG] [Thread-79334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:29:31.904 [DEBUG] [Thread-79334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:29:31.904 [DEBUG] [Thread-79334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:29:31.904 [DEBUG] [Thread-79334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:29:31.918 [INFO] [Thread-79334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:29:31.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:29:31.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:29:32.808 [DEBUG] [Thread-79334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:29:32.808 [DEBUG] [Thread-79334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:29:32.857 [DEBUG] [Thread-79334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:29:32.857 [DEBUG] [Thread-79334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:29:32.866 [DEBUG] [Thread-79334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:29:32.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:29:32.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:29:32.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:29:32.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:29:32.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:29:32.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:29:32.900 [DEBUG] [Thread-79334] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:29:34.386 [DEBUG] [Thread-79336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:29:49.425 [DEBUG] [Thread-79337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:02.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:02.534 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:30:02.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:30:02.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:30:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 29, 39), 1.33, 91.27, 0.0, 32.22, 8.22, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:30:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:29:39
2025-12-13T00:30:03.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:30:03.859 [DEBUG] [Thread-79338] [transport.py] [_log()] starting thread (client mode): 0xf572eec0
2025-12-13T00:30:03.860 [DEBUG] [Thread-79338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:30:03.880 [DEBUG] [Thread-79338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:30:03.880 [INFO] [Thread-79338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] client lang: <none>
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] server lang: <none>
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] kex follows: False
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] Compression: none
2025-12-13T00:30:03.883 [DEBUG] [Thread-79338] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:30:03.891 [DEBUG] [Thread-79338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:30:03.892 [DEBUG] [Thread-79338] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:30:03.892 [DEBUG] [Thread-79338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:30:03.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:30:03.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:30:03.893 [DEBUG] [Thread-79338] [transport.py] [_log()] userauth is OK
2025-12-13T00:30:03.894 [DEBUG] [Thread-79338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:30:03.894 [DEBUG] [Thread-79338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:30:03.894 [DEBUG] [Thread-79338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:30:03.894 [DEBUG] [Thread-79338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:30:03.911 [INFO] [Thread-79338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:30:03.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:30:04.452 [DEBUG] [Thread-79340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:04.729 [DEBUG] [Thread-79338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:30:04.729 [DEBUG] [Thread-79338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:30:04.729 [DEBUG] [Thread-79338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:30:04.770 [DEBUG] [Thread-79338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:30:04.770 [DEBUG] [Thread-79338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:30:04.773 [DEBUG] [Thread-79338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:30:04.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:30:04.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:30:04.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:30:04.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:30:04.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:30:04.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:30:04.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:30:04.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:30:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:30:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.936903 -999.00   +8.10  39.68     91   +6.90 1 3 2 3 1     0    0 1.18 -0.36 z.ES. 37.7 39.7 313.0 50.0 9.4 -5.3 9.2 -5.2 9.0 -3.3 9.3 -2.6
2025-12-13T00:30:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:30:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:30:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.936903
2025-12-13T00:30:04.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:30:04.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:30:04.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:30:04.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:30:04.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:30:04.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:29:39', tmtdew=1.33, humidity=91.27, cloud=0.0, wind=32.22, temperature=8.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:29:08.419', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:27:00')
2025-12-13T00:30:04.797 [DEBUG] [Thread-79338] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:30:04.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:30:04.894 [DEBUG] [Thread-79342] [transport.py] [_log()] starting thread (client mode): 0xf57031f0
2025-12-13T00:30:04.894 [DEBUG] [Thread-79342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:30:04.909 [DEBUG] [Thread-79342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:30:04.909 [INFO] [Thread-79342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:04.916 [DEBUG] [Thread-79342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] client lang: <none>
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] server lang: <none>
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] kex follows: False
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] Compression: none
2025-12-13T00:30:04.917 [DEBUG] [Thread-79342] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:30:04.974 [DEBUG] [Thread-79342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:30:04.974 [DEBUG] [Thread-79342] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:30:04.974 [DEBUG] [Thread-79342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:30:04.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:30:04.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:30:05.032 [DEBUG] [Thread-79342] [transport.py] [_log()] userauth is OK
2025-12-13T00:30:05.032 [DEBUG] [Thread-79342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:30:05.032 [DEBUG] [Thread-79342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:30:05.032 [DEBUG] [Thread-79342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:30:05.032 [DEBUG] [Thread-79342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:30:05.055 [INFO] [Thread-79342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:30:05.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:30:05.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:30:05.846 [DEBUG] [Thread-79342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:30:05.846 [DEBUG] [Thread-79342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:30:05.894 [DEBUG] [Thread-79342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:30:05.894 [DEBUG] [Thread-79342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:30:05.903 [DEBUG] [Thread-79342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:30:05.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:30: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')
2025-12-13T00:30:05.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:30:05.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:30:05.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:30:05.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:30:05.937 [DEBUG] [Thread-79342] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:30:19.482 [DEBUG] [Thread-79344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:25.420 [DEBUG] [Thread-79345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:34.530 [DEBUG] [Thread-79346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:30:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:30:35.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:30:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:30:36.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 30, 11), 1.32, 91.31, 0.0, 33.38, 8.25, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:30:36.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:30:11
2025-12-13T00:30:36.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:30:36.908 [DEBUG] [Thread-79347] [transport.py] [_log()] starting thread (client mode): 0xf5702f20
2025-12-13T00:30:36.908 [DEBUG] [Thread-79347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:30:36.930 [DEBUG] [Thread-79347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:30:36.930 [INFO] [Thread-79347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] client lang: <none>
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] server lang: <none>
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] kex follows: False
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:30:36.935 [DEBUG] [Thread-79347] [transport.py] [_log()] Compression: none
2025-12-13T00:30:36.936 [DEBUG] [Thread-79347] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:30:36.953 [DEBUG] [Thread-79347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:30:36.953 [DEBUG] [Thread-79347] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:30:36.954 [DEBUG] [Thread-79347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:30:36.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:30:36.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:30:36.956 [DEBUG] [Thread-79347] [transport.py] [_log()] userauth is OK
2025-12-13T00:30:36.956 [DEBUG] [Thread-79347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:30:36.956 [DEBUG] [Thread-79347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:30:36.957 [DEBUG] [Thread-79347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:30:36.957 [DEBUG] [Thread-79347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:30:36.980 [INFO] [Thread-79347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:30:36.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:30:37.753 [DEBUG] [Thread-79347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:30:37.753 [DEBUG] [Thread-79347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:30:37.753 [DEBUG] [Thread-79347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:30:37.795 [DEBUG] [Thread-79347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:30:37.795 [DEBUG] [Thread-79347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:30:37.798 [DEBUG] [Thread-79347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:30:37.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:30:37.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:30:37.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:30:37.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:30:37.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:30:37.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:30:37.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:30:37.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:30:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:30:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.937250 -999.00   +8.10  36.80     91   +6.80 1 3 2 3 1     0    0 1.20 -0.41 .NES. 37.5 36.8 302.6 45.5 9.4 -3.6 9.3 -5.0 9.0 -4.7 9.4 -3.7
2025-12-13T00:30:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:30:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:30:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.937250
2025-12-13T00:30:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:30:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:30:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:30:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:30:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:30:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:30:11', tmtdew=1.32, humidity=91.31, cloud=0.0, wind=33.38, temperature=8.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:29:38.400', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:27:00')
2025-12-13T00:30:37.826 [DEBUG] [Thread-79347] [transport.py] [_log()] EOF in transport thread
2025-12-13T00: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
2025-12-13T00:30:37.921 [DEBUG] [Thread-79350] [transport.py] [_log()] starting thread (client mode): 0xf57c8c10
2025-12-13T00:30:37.922 [DEBUG] [Thread-79350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:30:37.936 [DEBUG] [Thread-79350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:30:37.936 [INFO] [Thread-79350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:30:37.944 [DEBUG] [Thread-79350] [transport.py] [_log()] client lang: <none>
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] server lang: <none>
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] kex follows: False
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] Compression: none
2025-12-13T00:30:37.945 [DEBUG] [Thread-79350] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:30:38.005 [DEBUG] [Thread-79350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:30:38.005 [DEBUG] [Thread-79350] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:30:38.006 [DEBUG] [Thread-79350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:30:38.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:30:38.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:30:38.063 [DEBUG] [Thread-79350] [transport.py] [_log()] userauth is OK
2025-12-13T00:30:38.063 [DEBUG] [Thread-79350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:30:38.063 [DEBUG] [Thread-79350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:30:38.064 [DEBUG] [Thread-79350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:30:38.064 [DEBUG] [Thread-79350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:30:38.083 [INFO] [Thread-79350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:30:38.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:30:38.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:30:38.882 [DEBUG] [Thread-79350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:30:38.882 [DEBUG] [Thread-79350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:30:38.930 [DEBUG] [Thread-79350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:30:38.930 [DEBUG] [Thread-79350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:30:38.939 [DEBUG] [Thread-79350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:30:38.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:30:38.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:30:38.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:30:38.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:30:38.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:30:38.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:30:38.974 [DEBUG] [Thread-79350] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:30:49.557 [DEBUG] [Thread-79352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:02.739 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:02.740 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:04.596 [DEBUG] [Thread-79353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:31:08.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:31:08.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:31:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 30, 43), 1.33, 91.27, 0.0, 30.82, 8.24, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:31:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:30:43
2025-12-13T00:31:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:31:09.914 [DEBUG] [Thread-79354] [transport.py] [_log()] starting thread (client mode): 0xf575ef80
2025-12-13T00:31:09.914 [DEBUG] [Thread-79354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:31:09.934 [DEBUG] [Thread-79354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:31:09.934 [INFO] [Thread-79354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:31:09.937 [DEBUG] [Thread-79354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] client lang: <none>
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] server lang: <none>
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] kex follows: False
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] Compression: none
2025-12-13T00:31:09.938 [DEBUG] [Thread-79354] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:31:09.954 [DEBUG] [Thread-79354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:31:09.955 [DEBUG] [Thread-79354] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:31:09.955 [DEBUG] [Thread-79354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:31:09.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:31:09.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:31:09.957 [DEBUG] [Thread-79354] [transport.py] [_log()] userauth is OK
2025-12-13T00:31:09.957 [DEBUG] [Thread-79354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:31:09.957 [DEBUG] [Thread-79354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:31:09.957 [DEBUG] [Thread-79354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:31:09.957 [DEBUG] [Thread-79354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:31:09.975 [INFO] [Thread-79354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:31:09.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:31:10.616 [DEBUG] [Thread-79354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:31:10.616 [DEBUG] [Thread-79354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:31:10.617 [DEBUG] [Thread-79354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:31:10.658 [DEBUG] [Thread-79354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:31:10.658 [DEBUG] [Thread-79354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:31:10.661 [DEBUG] [Thread-79354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:31:10.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:31:10.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:31:10.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:31:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:31:10.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:31:10.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:31:10.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:31:10.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:31:10.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:31:10.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.937944 -999.00   +8.10  38.90     91   +6.70 1 3 2 3 1     0    0 1.23 0.33 ...Sw 42.2 38.9 316.4 46.5 9.4 -8.2 9.2 -7.4 9.0 -6.5 9.3 -6.8
2025-12-13T00:31:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:31:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:31:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.937944
2025-12-13T00:31:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:31:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:31:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:31:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:31:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:31:10.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:30:43', tmtdew=1.33, humidity=91.27, cloud=0.0, wind=30.82, temperature=8.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:30:38.362', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:27:00')
2025-12-13T00:31:10.685 [DEBUG] [Thread-79354] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:31:10.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:31:10.783 [DEBUG] [Thread-79357] [transport.py] [_log()] starting thread (client mode): 0xf575f460
2025-12-13T00:31:10.784 [DEBUG] [Thread-79357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:31:10.799 [DEBUG] [Thread-79357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:31:10.799 [INFO] [Thread-79357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:31:10.806 [DEBUG] [Thread-79357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] client lang: <none>
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] server lang: <none>
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] kex follows: False
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] Compression: none
2025-12-13T00:31:10.807 [DEBUG] [Thread-79357] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:31:10.863 [DEBUG] [Thread-79357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:31:10.863 [DEBUG] [Thread-79357] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:31:10.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:31:10.864 [DEBUG] [Thread-79357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:31:10.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:31:10.919 [DEBUG] [Thread-79357] [transport.py] [_log()] userauth is OK
2025-12-13T00:31:10.919 [DEBUG] [Thread-79357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:31:10.919 [DEBUG] [Thread-79357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:31:10.919 [DEBUG] [Thread-79357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:31:10.919 [DEBUG] [Thread-79357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:31:10.938 [INFO] [Thread-79357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:31:10.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:31:10.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:31:11.743 [DEBUG] [Thread-79357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:31:11.743 [DEBUG] [Thread-79357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:31:11.791 [DEBUG] [Thread-79357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:31:11.791 [DEBUG] [Thread-79357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:31:11.800 [DEBUG] [Thread-79357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:31:11.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:31:11.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:31:11.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:31:11.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:31:11.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:31:11.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:31:11.834 [DEBUG] [Thread-79357] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:31:19.622 [DEBUG] [Thread-79359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:25.496 [DEBUG] [Thread-79360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:34.669 [DEBUG] [Thread-79361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:31:41.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:31:41.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:31:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:31:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 31, 15), 1.34, 91.19, 0.0, 33.73, 8.2, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:31:42.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:31:15
2025-12-13T00:31:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:31:42.830 [DEBUG] [Thread-79362] [transport.py] [_log()] starting thread (client mode): 0xf575f0a0
2025-12-13T00:31:42.830 [DEBUG] [Thread-79362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:31:42.851 [DEBUG] [Thread-79362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:31:42.851 [INFO] [Thread-79362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] client lang: <none>
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] server lang: <none>
2025-12-13T00:31:42.854 [DEBUG] [Thread-79362] [transport.py] [_log()] kex follows: False
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] Compression: none
2025-12-13T00:31:42.855 [DEBUG] [Thread-79362] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:31:42.871 [DEBUG] [Thread-79362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:31:42.871 [DEBUG] [Thread-79362] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:31:42.871 [DEBUG] [Thread-79362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:31:42.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:31:42.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:31:42.873 [DEBUG] [Thread-79362] [transport.py] [_log()] userauth is OK
2025-12-13T00:31:42.873 [DEBUG] [Thread-79362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:31:42.873 [DEBUG] [Thread-79362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:31:42.873 [DEBUG] [Thread-79362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:31:42.873 [DEBUG] [Thread-79362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:31:42.883 [INFO] [Thread-79362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:31:42.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:31:43.595 [DEBUG] [Thread-79362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:31:43.595 [DEBUG] [Thread-79362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:31:43.595 [DEBUG] [Thread-79362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:31:43.636 [DEBUG] [Thread-79362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:31:43.636 [DEBUG] [Thread-79362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:31:43.638 [DEBUG] [Thread-79362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:31:43.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:31:43.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:31:43.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:31:43.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:31:43.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:31:43.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:31:43.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:31:43.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.938292 -999.00   +8.10  35.14     91   +6.80 1 3 2 3 1     0    0 1.25 0.67 .NESW 38.3 35.1 310.0 50.6 9.4 -8.6 9.2 -9.4 8.9 -7.6 9.3 -4.3
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.938292
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:31:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:31:15', tmtdew=1.34, humidity=91.19, cloud=0.0, wind=33.73, temperature=8.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:31:08.429', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.3082500000000001, 1.6102500000000006, nan, nan, nan, nan, nan, 2.7024999999999997, 1.221, 2.135249999999999, nan, nan, nan, nan, 1.3609999999999998, 2.23125, 1.1070000000000002, nan, nan, nan, nan, 2.6532500000000008, nan, 1.9939999999999989, 1.3105000000000002, nan, nan, nan, nan, nan, 2.708500000000001, 1.2937499999999993], zp_timestamp='2025-12-12T22:27:00')
2025-12-13T00:31:43.660 [DEBUG] [Thread-79362] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:31:43.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:31:43.745 [DEBUG] [Thread-79365] [transport.py] [_log()] starting thread (client mode): 0xf5772680
2025-12-13T00:31:43.746 [DEBUG] [Thread-79365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:31:43.760 [DEBUG] [Thread-79365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:31:43.760 [INFO] [Thread-79365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] client lang: <none>
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] server lang: <none>
2025-12-13T00:31:43.767 [DEBUG] [Thread-79365] [transport.py] [_log()] kex follows: False
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] Compression: none
2025-12-13T00:31:43.768 [DEBUG] [Thread-79365] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:31:43.825 [DEBUG] [Thread-79365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:31:43.825 [DEBUG] [Thread-79365] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:31:43.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:31:43.826 [DEBUG] [Thread-79365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:31:43.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:31:43.886 [DEBUG] [Thread-79365] [transport.py] [_log()] userauth is OK
2025-12-13T00:31:43.886 [DEBUG] [Thread-79365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:31:43.886 [DEBUG] [Thread-79365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:31:43.886 [DEBUG] [Thread-79365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:31:43.886 [DEBUG] [Thread-79365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:31:43.904 [INFO] [Thread-79365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:31:43.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:31:43.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:31:44.797 [DEBUG] [Thread-79365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:31:44.798 [DEBUG] [Thread-79365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:31:44.845 [DEBUG] [Thread-79365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:31:44.846 [DEBUG] [Thread-79365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:31:44.854 [DEBUG] [Thread-79365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:31:44.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:31:44.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:31:44.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:31:44.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:31:44.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:31:44.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:31:44.890 [DEBUG] [Thread-79365] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:31:49.694 [DEBUG] [Thread-79367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:02.945 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:02.946 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:04.732 [DEBUG] [Thread-79368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:14.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:32:14.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:32:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:32:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 31, 48), 1.35, 91.11, 0.0, 39.13, 8.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:32:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:31:48
2025-12-13T00:32:15.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:32:15.851 [DEBUG] [Thread-79369] [transport.py] [_log()] starting thread (client mode): 0xfabc77f0
2025-12-13T00:32:15.851 [DEBUG] [Thread-79369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:32:15.871 [DEBUG] [Thread-79369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:32:15.871 [INFO] [Thread-79369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:32:15.874 [DEBUG] [Thread-79369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] client lang: <none>
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] server lang: <none>
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] kex follows: False
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] Compression: none
2025-12-13T00:32:15.875 [DEBUG] [Thread-79369] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:32:15.892 [DEBUG] [Thread-79369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:32:15.893 [DEBUG] [Thread-79369] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:32:15.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:32:15.894 [DEBUG] [Thread-79369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:32:15.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:32:15.936 [DEBUG] [Thread-79369] [transport.py] [_log()] userauth is OK
2025-12-13T00:32:15.936 [DEBUG] [Thread-79369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:32:15.937 [DEBUG] [Thread-79369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:32:15.937 [DEBUG] [Thread-79369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:32:15.937 [DEBUG] [Thread-79369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:32:15.969 [INFO] [Thread-79369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:32:15.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:32:16.611 [DEBUG] [Thread-79369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:32:16.611 [DEBUG] [Thread-79369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:32:16.612 [DEBUG] [Thread-79369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:32:16.652 [DEBUG] [Thread-79369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:32:16.652 [DEBUG] [Thread-79369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:32:16.655 [DEBUG] [Thread-79369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:32:16.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:32:16.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:32:16.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:32:16.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:32:16.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:32:16.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:32:16.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:32:16.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:32:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:32:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.938639 -999.00   +8.10  41.03     91   +6.80 1 3 2 3 1     0    0 1.25 0.96 z.ESW 40.5 41.0 310.0 48.4 9.4 -5.1 9.2 -8.4 9.0 -8.8 9.3 -6.1
2025-12-13T00:32:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:32:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:32:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.938639
2025-12-13T00:32:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:32:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:32:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:32:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:32:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:32:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:31:48', tmtdew=1.35, humidity=91.11, cloud=0.0, wind=39.13, temperature=8.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:31:38.410', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.7784999999999993, 2.2205000000000004, 2.0302499999999997, 1.8544999999999998, nan, nan, nan, 1.9469999999999992, 2.10525, 2.5120000000000005, 1.2369999999999992, 1.5432499999999987, nan, nan, 2.1652500000000012, 1.1967499999999998, 1.911999999999999, 1.4825, 0.57775, 0.9155000000000006, nan, nan, 0.9960000000000004, 0.6750000000000007, 1.877749999999999], zp_timestamp='2025-12-12T22:31:00')
2025-12-13T00:32:16.678 [DEBUG] [Thread-79369] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:32:16.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:32:16.775 [DEBUG] [Thread-79372] [transport.py] [_log()] starting thread (client mode): 0xfabc5420
2025-12-13T00:32:16.775 [DEBUG] [Thread-79372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:32:16.791 [DEBUG] [Thread-79372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:32:16.791 [INFO] [Thread-79372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:32:16.798 [DEBUG] [Thread-79372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:32:16.798 [DEBUG] [Thread-79372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:32:16.799 [DEBUG] [Thread-79372] [transport.py] [_log()] client lang: <none>
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] server lang: <none>
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] kex follows: False
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:32:16.800 [DEBUG] [Thread-79372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:32:16.801 [DEBUG] [Thread-79372] [transport.py] [_log()] Compression: none
2025-12-13T00:32:16.801 [DEBUG] [Thread-79372] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:32:16.859 [DEBUG] [Thread-79372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:32:16.859 [DEBUG] [Thread-79372] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:32:16.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:32:16.861 [DEBUG] [Thread-79372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:32:16.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:32:16.914 [DEBUG] [Thread-79372] [transport.py] [_log()] userauth is OK
2025-12-13T00:32:16.915 [DEBUG] [Thread-79372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:32:16.915 [DEBUG] [Thread-79372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:32:16.915 [DEBUG] [Thread-79372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:32:16.915 [DEBUG] [Thread-79372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:32:16.935 [INFO] [Thread-79372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:32:16.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:32:16.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:32:17.764 [DEBUG] [Thread-79372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:32:17.764 [DEBUG] [Thread-79372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:32:17.811 [DEBUG] [Thread-79372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:32:17.811 [DEBUG] [Thread-79372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:32:17.819 [DEBUG] [Thread-79372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:32:17.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:32:17.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:32:17.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:32:17.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:32:17.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:32:17.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:32:17.851 [DEBUG] [Thread-79372] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:32:19.763 [DEBUG] [Thread-79374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:25.573 [DEBUG] [Thread-79375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:34.809 [DEBUG] [Thread-79376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:32:47.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:32:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:32:48.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 32, 20), 1.36, 91.04, 0.0, 38.71, 8.22, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:32:48.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:32:20
2025-12-13T00:32:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:32:48.839 [DEBUG] [Thread-79377] [transport.py] [_log()] starting thread (client mode): 0xfabc7df0
2025-12-13T00:32:48.839 [DEBUG] [Thread-79377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:32:48.858 [DEBUG] [Thread-79377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:32:48.858 [INFO] [Thread-79377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] client lang: <none>
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] server lang: <none>
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] kex follows: False
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:32:48.861 [DEBUG] [Thread-79377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:32:48.862 [DEBUG] [Thread-79377] [transport.py] [_log()] Compression: none
2025-12-13T00:32:48.862 [DEBUG] [Thread-79377] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:32:48.877 [DEBUG] [Thread-79377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:32:48.877 [DEBUG] [Thread-79377] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:32:48.878 [DEBUG] [Thread-79377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:32:48.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:32:48.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:32:48.879 [DEBUG] [Thread-79377] [transport.py] [_log()] userauth is OK
2025-12-13T00:32:48.880 [DEBUG] [Thread-79377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:32:48.880 [DEBUG] [Thread-79377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:32:48.880 [DEBUG] [Thread-79377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:32:48.880 [DEBUG] [Thread-79377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:32:48.900 [INFO] [Thread-79377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:32:48.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:32:49.595 [DEBUG] [Thread-79377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:32:49.596 [DEBUG] [Thread-79377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:32:49.596 [DEBUG] [Thread-79377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:32:49.637 [DEBUG] [Thread-79377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:32:49.637 [DEBUG] [Thread-79377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:32:49.640 [DEBUG] [Thread-79377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:32:49.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:32:49.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:32:49.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:32:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:32:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:32:49.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:32:49.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:32:49.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:32:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:32:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.938986 -999.00   +8.10  37.09     91   +6.80 1 3 2 3 1     0    0 1.28 1.37 z.ESW 36.1 37.1 303.0 52.5 9.4 -6.9 9.2 -8.4 8.9 -7.5 9.3 -5.7
2025-12-13T00:32:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:32:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:32:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.938986
2025-12-13T00:32:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:32:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:32:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:32:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:32:49.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:32:49.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:32:20', tmtdew=1.36, humidity=91.04, cloud=0.0, wind=38.71, temperature=8.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:32:08.390', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.7784999999999993, 2.2205000000000004, 2.0302499999999997, 1.8544999999999998, nan, nan, nan, 1.9469999999999992, 2.10525, 2.5120000000000005, 1.2369999999999992, 1.5432499999999987, nan, nan, 2.1652500000000012, 1.1967499999999998, 1.911999999999999, 1.4825, 0.57775, 0.9155000000000006, nan, nan, 0.9960000000000004, 0.6750000000000007, 1.877749999999999], zp_timestamp='2025-12-12T22:31:00')
2025-12-13T00:32:49.663 [DEBUG] [Thread-79377] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:32:49.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:32:49.761 [DEBUG] [Thread-79380] [transport.py] [_log()] starting thread (client mode): 0xf575f9a0
2025-12-13T00:32:49.761 [DEBUG] [Thread-79380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:32:49.776 [DEBUG] [Thread-79380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:32:49.776 [INFO] [Thread-79380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:32:49.784 [DEBUG] [Thread-79380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] client lang: <none>
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] server lang: <none>
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] kex follows: False
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:32:49.785 [DEBUG] [Thread-79380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:32:49.786 [DEBUG] [Thread-79380] [transport.py] [_log()] Compression: none
2025-12-13T00:32:49.786 [DEBUG] [Thread-79380] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:32:49.839 [DEBUG] [Thread-79382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:32:49.847 [DEBUG] [Thread-79380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:32:49.847 [DEBUG] [Thread-79380] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:32:49.847 [DEBUG] [Thread-79380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:32:49.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:32:49.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:32:49.906 [DEBUG] [Thread-79380] [transport.py] [_log()] userauth is OK
2025-12-13T00:32:49.906 [DEBUG] [Thread-79380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:32:49.906 [DEBUG] [Thread-79380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:32:49.906 [DEBUG] [Thread-79380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:32:49.907 [DEBUG] [Thread-79380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:32:49.937 [INFO] [Thread-79380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:32:49.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:32:49.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:32:50.780 [DEBUG] [Thread-79380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:32:50.780 [DEBUG] [Thread-79380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:32:50.828 [DEBUG] [Thread-79380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:32:50.828 [DEBUG] [Thread-79380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:32:50.837 [DEBUG] [Thread-79380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:32:50.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:32:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:32:50.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:32:50.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:32:50.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:32:50.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:32:50.872 [DEBUG] [Thread-79380] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:33:03.148 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:03.149 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:04.895 [DEBUG] [Thread-79383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:19.926 [DEBUG] [Thread-79384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:33:20.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:33:20.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:33:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 32, 52), 1.4, 91.11, 0.0, 38.96, 8.22, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:33:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:32:52
2025-12-13T00:33:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:33:21.830 [DEBUG] [Thread-79385] [transport.py] [_log()] starting thread (client mode): 0xf5773130
2025-12-13T00:33:21.830 [DEBUG] [Thread-79385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:33:21.852 [DEBUG] [Thread-79385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:33:21.852 [INFO] [Thread-79385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] client lang: <none>
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] server lang: <none>
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] kex follows: False
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:33:21.854 [DEBUG] [Thread-79385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:33:21.855 [DEBUG] [Thread-79385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:33:21.855 [DEBUG] [Thread-79385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:33:21.855 [DEBUG] [Thread-79385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:33:21.855 [DEBUG] [Thread-79385] [transport.py] [_log()] Compression: none
2025-12-13T00:33:21.855 [DEBUG] [Thread-79385] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:33:21.872 [DEBUG] [Thread-79385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:33:21.872 [DEBUG] [Thread-79385] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:33:21.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:33:21.873 [DEBUG] [Thread-79385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:33:21.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:33:21.876 [DEBUG] [Thread-79385] [transport.py] [_log()] userauth is OK
2025-12-13T00:33:21.876 [DEBUG] [Thread-79385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:33:21.876 [DEBUG] [Thread-79385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:33:21.876 [DEBUG] [Thread-79385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:33:21.877 [DEBUG] [Thread-79385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:33:21.901 [INFO] [Thread-79385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:33:21.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:33:22.559 [DEBUG] [Thread-79385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:33:22.559 [DEBUG] [Thread-79385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:33:22.560 [DEBUG] [Thread-79385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:33:22.600 [DEBUG] [Thread-79385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:33:22.600 [DEBUG] [Thread-79385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:33:22.604 [DEBUG] [Thread-79385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:33:22.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:33:22.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:33:22.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:33:22.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:33:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:33:22.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:33:22.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:33:22.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:33:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:33:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.939333 -999.00   +8.00  41.64     92   +6.80 1 2 2 3 1     0    0 1.26 1.49 z.ESW 42.2 41.6 304.8 52.8 9.4 -6.8 9.2 -8.7 8.9 -11.4 9.3 -11.9
2025-12-13T00:33:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:33:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:33:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.939333
2025-12-13T00:33:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:33:22.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:33:22.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:33:22.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:33:22.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:33:22.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:32:52', tmtdew=1.4, humidity=91.11, cloud=0.0, wind=38.96, temperature=8.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:32:38.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.7784999999999993, 2.2205000000000004, 2.0302499999999997, 1.8544999999999998, nan, nan, nan, 1.9469999999999992, 2.10525, 2.5120000000000005, 1.2369999999999992, 1.5432499999999987, nan, nan, 2.1652500000000012, 1.1967499999999998, 1.911999999999999, 1.4825, 0.57775, 0.9155000000000006, nan, nan, 0.9960000000000004, 0.6750000000000007, 1.877749999999999], zp_timestamp='2025-12-12T22:31:00')
2025-12-13T00:33:22.632 [DEBUG] [Thread-79385] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:33:22.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:33:22.730 [DEBUG] [Thread-79388] [transport.py] [_log()] starting thread (client mode): 0xf57cba60
2025-12-13T00:33:22.730 [DEBUG] [Thread-79388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:33:22.747 [DEBUG] [Thread-79388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:33:22.747 [INFO] [Thread-79388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:33:22.755 [DEBUG] [Thread-79388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] client lang: <none>
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] server lang: <none>
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] kex follows: False
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] Compression: none
2025-12-13T00:33:22.756 [DEBUG] [Thread-79388] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:33:22.814 [DEBUG] [Thread-79388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:33:22.815 [DEBUG] [Thread-79388] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:33:22.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:33:22.816 [DEBUG] [Thread-79388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:33:22.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:33:22.872 [DEBUG] [Thread-79388] [transport.py] [_log()] userauth is OK
2025-12-13T00:33:22.872 [DEBUG] [Thread-79388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:33:22.872 [DEBUG] [Thread-79388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:33:22.872 [DEBUG] [Thread-79388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:33:22.872 [DEBUG] [Thread-79388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:33:22.895 [INFO] [Thread-79388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:33:22.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:33:22.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:33:23.711 [DEBUG] [Thread-79388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:33:23.712 [DEBUG] [Thread-79388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:33:23.762 [DEBUG] [Thread-79388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:33:23.763 [DEBUG] [Thread-79388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:33:23.775 [DEBUG] [Thread-79388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:33:23.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:33:23.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:33:23.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:33:23.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:33:23.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:33:23.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:33:23.814 [DEBUG] [Thread-79388] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:33:25.643 [DEBUG] [Thread-79390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:34.956 [DEBUG] [Thread-79391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:50.001 [DEBUG] [Thread-79392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:33:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:33:53.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:33:53.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:33:54.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 33, 24), 1.41, 91.07, 0.0, 38.78, 8.19, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:33:54.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:33:24
2025-12-13T00:33:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:33:54.793 [DEBUG] [Thread-79393] [transport.py] [_log()] starting thread (client mode): 0xfabc7820
2025-12-13T00:33:54.793 [DEBUG] [Thread-79393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:33:54.815 [DEBUG] [Thread-79393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:33:54.815 [INFO] [Thread-79393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:33:54.818 [DEBUG] [Thread-79393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:33:54.818 [DEBUG] [Thread-79393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] client lang: <none>
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] server lang: <none>
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] kex follows: False
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:33:54.819 [DEBUG] [Thread-79393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:33:54.820 [DEBUG] [Thread-79393] [transport.py] [_log()] Compression: none
2025-12-13T00:33:54.820 [DEBUG] [Thread-79393] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:33:54.836 [DEBUG] [Thread-79393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:33:54.836 [DEBUG] [Thread-79393] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:33:54.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:33:54.837 [DEBUG] [Thread-79393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:33:54.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:33:54.839 [DEBUG] [Thread-79393] [transport.py] [_log()] userauth is OK
2025-12-13T00:33:54.839 [DEBUG] [Thread-79393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:33:54.839 [DEBUG] [Thread-79393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:33:54.839 [DEBUG] [Thread-79393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:33:54.839 [DEBUG] [Thread-79393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:33:54.863 [INFO] [Thread-79393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:33:54.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:33:55.614 [DEBUG] [Thread-79393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:33:55.614 [DEBUG] [Thread-79393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:33:55.614 [DEBUG] [Thread-79393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:33:55.655 [DEBUG] [Thread-79393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:33:55.655 [DEBUG] [Thread-79393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:33:55.658 [DEBUG] [Thread-79393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:33:55.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:33:55.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:33:55.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:33:55.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:33:55.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:33:55.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:33:55.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:33:55.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:33:55.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:33:55.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.939680 -999.00   +8.00  36.44     92   +6.80 1 3 2 3 1     0    0 1.25 1.20 z.ES. 41.0 36.4 310.6 46.0 9.3 -12.6 9.2 -11.4 8.8 -7.9 9.2 -7.8
2025-12-13T00:33:55.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:33:55.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:33:55.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.939680
2025-12-13T00:33:55.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:33:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:33:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:33:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:33:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:33:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:33:24', tmtdew=1.41, humidity=91.07, cloud=0.0, wind=38.78, temperature=8.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:33:08.352', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.7784999999999993, 2.2205000000000004, 2.0302499999999997, 1.8544999999999998, nan, nan, nan, 1.9469999999999992, 2.10525, 2.5120000000000005, 1.2369999999999992, 1.5432499999999987, nan, nan, 2.1652500000000012, 1.1967499999999998, 1.911999999999999, 1.4825, 0.57775, 0.9155000000000006, nan, nan, 0.9960000000000004, 0.6750000000000007, 1.877749999999999], zp_timestamp='2025-12-12T22:31:00')
2025-12-13T00:33:55.687 [DEBUG] [Thread-79393] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:33:55.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:33:55.783 [DEBUG] [Thread-79396] [transport.py] [_log()] starting thread (client mode): 0xf813fdf0
2025-12-13T00:33:55.783 [DEBUG] [Thread-79396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:33:55.797 [DEBUG] [Thread-79396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:33:55.797 [INFO] [Thread-79396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:33:55.805 [DEBUG] [Thread-79396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:33:55.805 [DEBUG] [Thread-79396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:33:55.805 [DEBUG] [Thread-79396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:33:55.805 [DEBUG] [Thread-79396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:55.805 [DEBUG] [Thread-79396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] client lang: <none>
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] server lang: <none>
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] kex follows: False
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] Compression: none
2025-12-13T00:33:55.806 [DEBUG] [Thread-79396] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:33:55.867 [DEBUG] [Thread-79396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:33:55.868 [DEBUG] [Thread-79396] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:33:55.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:33:55.868 [DEBUG] [Thread-79396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:33:55.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:33:55.925 [DEBUG] [Thread-79396] [transport.py] [_log()] userauth is OK
2025-12-13T00:33:55.925 [DEBUG] [Thread-79396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:33:55.926 [DEBUG] [Thread-79396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:33:55.926 [DEBUG] [Thread-79396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:33:55.926 [DEBUG] [Thread-79396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:33:55.944 [INFO] [Thread-79396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:33:55.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:33:55.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:33:56.771 [DEBUG] [Thread-79396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:33:56.771 [DEBUG] [Thread-79396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:33:56.820 [DEBUG] [Thread-79396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:33:56.820 [DEBUG] [Thread-79396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:33:56.828 [DEBUG] [Thread-79396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:33:56.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:33:56.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:33:56.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:33:56.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:33:56.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:33:56.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:33:56.861 [DEBUG] [Thread-79396] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:34:03.353 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:03.354 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:05.029 [DEBUG] [Thread-79398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:20.071 [DEBUG] [Thread-79399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:25.718 [DEBUG] [Thread-79400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:26.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:34:26.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:34:26.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:34:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 33, 56), 1.36, 91.07, 0.0, 38.76, 8.22, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:34:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:33:56
2025-12-13T00:34:27.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:34:27.833 [DEBUG] [Thread-79401] [transport.py] [_log()] starting thread (client mode): 0xf81e51e0
2025-12-13T00:34:27.833 [DEBUG] [Thread-79401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:34:27.856 [DEBUG] [Thread-79401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:34:27.856 [INFO] [Thread-79401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] client lang: <none>
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] server lang: <none>
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] kex follows: False
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:34:27.860 [DEBUG] [Thread-79401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:34:27.861 [DEBUG] [Thread-79401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:34:27.861 [DEBUG] [Thread-79401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:34:27.861 [DEBUG] [Thread-79401] [transport.py] [_log()] Compression: none
2025-12-13T00:34:27.861 [DEBUG] [Thread-79401] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:34:27.877 [DEBUG] [Thread-79401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:34:27.878 [DEBUG] [Thread-79401] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:34:27.878 [DEBUG] [Thread-79401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:34:27.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:34:27.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:34:27.880 [DEBUG] [Thread-79401] [transport.py] [_log()] userauth is OK
2025-12-13T00:34:27.880 [DEBUG] [Thread-79401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:34:27.881 [DEBUG] [Thread-79401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:34:27.881 [DEBUG] [Thread-79401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:34:27.881 [DEBUG] [Thread-79401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:34:27.904 [INFO] [Thread-79401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:34:27.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:34:28.549 [DEBUG] [Thread-79401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:34:28.549 [DEBUG] [Thread-79401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:34:28.549 [DEBUG] [Thread-79401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:34:28.590 [DEBUG] [Thread-79401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:34:28.590 [DEBUG] [Thread-79401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:34:28.593 [DEBUG] [Thread-79401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:34:28.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:34:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:34:28.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:34:28.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:34:28.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:34:28.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:34:28.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:34:28.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.940375 -999.00   +8.10  31.74     91   +6.80 1 3 2 3 1     0    0 1.22 1.02 Z.ES. 32.9 31.7 316.0 44.3 9.3 -10.7 9.2 -8.9 8.9 -4.9 9.2 -4.0
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.940375
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:34:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:33:56', tmtdew=1.36, humidity=91.07, cloud=0.0, wind=38.76, temperature=8.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:34:08.400', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.7784999999999993, 2.2205000000000004, 2.0302499999999997, 1.8544999999999998, nan, nan, nan, 1.9469999999999992, 2.10525, 2.5120000000000005, 1.2369999999999992, 1.5432499999999987, nan, nan, 2.1652500000000012, 1.1967499999999998, 1.911999999999999, 1.4825, 0.57775, 0.9155000000000006, nan, nan, 0.9960000000000004, 0.6750000000000007, 1.877749999999999], zp_timestamp='2025-12-12T22:31:00')
2025-12-13T00:34:28.612 [DEBUG] [Thread-79401] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:34:28.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:34:28.698 [DEBUG] [Thread-79404] [transport.py] [_log()] starting thread (client mode): 0xf81e44c0
2025-12-13T00:34:28.699 [DEBUG] [Thread-79404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:34:28.713 [DEBUG] [Thread-79404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:34:28.713 [INFO] [Thread-79404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] client lang: <none>
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] server lang: <none>
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] kex follows: False
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] Compression: none
2025-12-13T00:34:28.721 [DEBUG] [Thread-79404] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:34:28.776 [DEBUG] [Thread-79404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:34:28.776 [DEBUG] [Thread-79404] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:34:28.776 [DEBUG] [Thread-79404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:34:28.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:34:28.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:34:28.833 [DEBUG] [Thread-79404] [transport.py] [_log()] userauth is OK
2025-12-13T00:34:28.833 [DEBUG] [Thread-79404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:34:28.833 [DEBUG] [Thread-79404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:34:28.833 [DEBUG] [Thread-79404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:34:28.833 [DEBUG] [Thread-79404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:34:28.847 [INFO] [Thread-79404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:34:28.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:34:28.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:34:29.647 [DEBUG] [Thread-79404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:34:29.647 [DEBUG] [Thread-79404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:34:29.694 [DEBUG] [Thread-79404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:34:29.694 [DEBUG] [Thread-79404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:34:29.702 [DEBUG] [Thread-79404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:34:29.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:34:29.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:34:29.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:34:29.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:34:29.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:34:29.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:34:29.734 [DEBUG] [Thread-79404] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:34:35.102 [DEBUG] [Thread-79406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:50.149 [DEBUG] [Thread-79407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:34:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:34:59.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:34:59.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
2025-12-13T00:35:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 34, 28), 1.37, 90.97, 0.0, 36.96, 8.19, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:35:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:34:28
2025-12-13T00:35:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:35:00.730 [DEBUG] [Thread-79408] [transport.py] [_log()] starting thread (client mode): 0xf813fb20
2025-12-13T00:35:00.730 [DEBUG] [Thread-79408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:35:00.750 [DEBUG] [Thread-79408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:35:00.750 [INFO] [Thread-79408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] client lang: <none>
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] server lang: <none>
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] kex follows: False
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] Compression: none
2025-12-13T00:35:00.754 [DEBUG] [Thread-79408] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:35:00.770 [DEBUG] [Thread-79408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:35:00.770 [DEBUG] [Thread-79408] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:35:00.771 [DEBUG] [Thread-79408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:35:00.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:35:00.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:35:00.772 [DEBUG] [Thread-79408] [transport.py] [_log()] userauth is OK
2025-12-13T00:35:00.772 [DEBUG] [Thread-79408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:35:00.772 [DEBUG] [Thread-79408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:35:00.772 [DEBUG] [Thread-79408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:35:00.772 [DEBUG] [Thread-79408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:35:00.789 [INFO] [Thread-79408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:35:00.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:35:01.548 [DEBUG] [Thread-79408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:35:01.548 [DEBUG] [Thread-79408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:35:01.548 [DEBUG] [Thread-79408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:35:01.589 [DEBUG] [Thread-79408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:35:01.590 [DEBUG] [Thread-79408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:35:01.591 [DEBUG] [Thread-79408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:35:01.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:35:01.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:35:01.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:35:01.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:35:01.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:35:01.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:35:01.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:35:01.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.940722 -999.00   +8.00  45.18     91   +6.70 1 3 2 3 1     0    0 1.27 1.28 .NES. 46.9 45.2 312.6 54.3 9.3 -5.8 9.2 -7.8 8.9 -6.0 9.3 -4.8
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.940722
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:35:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:34:28', tmtdew=1.37, humidity=90.97, cloud=0.0, wind=36.96, temperature=8.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:34:38.381', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, 2.7784999999999993, 2.2205000000000004, 2.0302499999999997, 1.8544999999999998, nan, nan, nan, 1.9469999999999992, 2.10525, 2.5120000000000005, 1.2369999999999992, 1.5432499999999987, nan, nan, 2.1652500000000012, 1.1967499999999998, 1.911999999999999, 1.4825, 0.57775, 0.9155000000000006, nan, nan, 0.9960000000000004, 0.6750000000000007, 1.877749999999999], zp_timestamp='2025-12-12T22:31:00')
2025-12-13T00:35:01.600 [DEBUG] [Thread-79408] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:35:01.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:35:01.687 [DEBUG] [Thread-79411] [transport.py] [_log()] starting thread (client mode): 0xf813e2c0
2025-12-13T00:35:01.687 [DEBUG] [Thread-79411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:35:01.701 [DEBUG] [Thread-79411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:35:01.701 [INFO] [Thread-79411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:01.708 [DEBUG] [Thread-79411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] client lang: <none>
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] server lang: <none>
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] kex follows: False
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] Compression: none
2025-12-13T00:35:01.709 [DEBUG] [Thread-79411] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:35:01.763 [DEBUG] [Thread-79411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:35:01.763 [DEBUG] [Thread-79411] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:35:01.764 [DEBUG] [Thread-79411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:35:01.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:35:01.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:35:01.822 [DEBUG] [Thread-79411] [transport.py] [_log()] userauth is OK
2025-12-13T00:35:01.822 [DEBUG] [Thread-79411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:35:01.822 [DEBUG] [Thread-79411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:35:01.822 [DEBUG] [Thread-79411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:35:01.822 [DEBUG] [Thread-79411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:35:01.839 [INFO] [Thread-79411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:35:01.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:35:01.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:35:02.664 [DEBUG] [Thread-79411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:35:02.664 [DEBUG] [Thread-79411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:35:02.715 [DEBUG] [Thread-79411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:35:02.716 [DEBUG] [Thread-79411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:35:02.728 [DEBUG] [Thread-79411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:35:02.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:35:02.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:35:02.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:35:02.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:35:02.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:35:02.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:35:02.765 [DEBUG] [Thread-79411] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:35:03.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:35:03.559 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:35:05.177 [DEBUG] [Thread-79413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:35:20.221 [DEBUG] [Thread-79414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:35:25.792 [DEBUG] [Thread-79415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:35:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:35:32.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:35:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:35:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 34, 28), 1.37, 90.97, 0.0, 36.96, 8.19, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:35:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:34:28
2025-12-13T00:35:33.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:35:33.858 [DEBUG] [Thread-79416] [transport.py] [_log()] starting thread (client mode): 0xfabc7850
2025-12-13T00:35:33.858 [DEBUG] [Thread-79416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:35:33.879 [DEBUG] [Thread-79416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:35:33.879 [INFO] [Thread-79416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] client lang: <none>
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] server lang: <none>
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] kex follows: False
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:35:33.882 [DEBUG] [Thread-79416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:35:33.883 [DEBUG] [Thread-79416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:35:33.883 [DEBUG] [Thread-79416] [transport.py] [_log()] Compression: none
2025-12-13T00:35:33.883 [DEBUG] [Thread-79416] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:35:33.899 [DEBUG] [Thread-79416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:35:33.900 [DEBUG] [Thread-79416] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:35:33.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:35:33.900 [DEBUG] [Thread-79416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:35:33.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:35:33.900 [DEBUG] [Thread-79416] [transport.py] [_log()] userauth is OK
2025-12-13T00:35:33.901 [DEBUG] [Thread-79416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:35:33.901 [DEBUG] [Thread-79416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:35:33.901 [DEBUG] [Thread-79416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:35:33.901 [DEBUG] [Thread-79416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:35:33.910 [INFO] [Thread-79416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:35:33.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:35:34.518 [DEBUG] [Thread-79416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:35:34.518 [DEBUG] [Thread-79416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:35:34.519 [DEBUG] [Thread-79416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:35:34.560 [DEBUG] [Thread-79416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:35:34.560 [DEBUG] [Thread-79416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:35:34.562 [DEBUG] [Thread-79416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:35:34.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:35:34.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:35:34.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:35:34.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:35:34.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:35:34.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:35:34.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:35:34.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:35:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:35:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.941069 -999.00   +7.90  52.73     91   +6.60 1 3 2 3 1     0    0 1.28 1.58 ZNEs. 52.5 52.7 316.0 61.9 9.3 -6.7 9.1 -7.7 8.9 -4.7 9.2 -4.2
2025-12-13T00:35:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:35:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:35:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.941069
2025-12-13T00:35:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:35:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:35:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:35:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:35:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:35:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:34:28', tmtdew=1.37, humidity=90.97, cloud=0.0, wind=36.96, temperature=8.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:35:08.362', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:34:00')
2025-12-13T00:35:34.581 [DEBUG] [Thread-79416] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:35:34.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:35:34.666 [DEBUG] [Thread-79419] [transport.py] [_log()] starting thread (client mode): 0xfabc7fa0
2025-12-13T00:35:34.666 [DEBUG] [Thread-79419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:35:34.681 [DEBUG] [Thread-79419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:35:34.681 [INFO] [Thread-79419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:35:34.688 [DEBUG] [Thread-79419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:35:34.688 [DEBUG] [Thread-79419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] client lang: <none>
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] server lang: <none>
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] kex follows: False
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] Compression: none
2025-12-13T00:35:34.689 [DEBUG] [Thread-79419] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:35:34.743 [DEBUG] [Thread-79419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:35:34.743 [DEBUG] [Thread-79419] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:35:34.743 [DEBUG] [Thread-79419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:35:34.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:35:34.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:35:34.801 [DEBUG] [Thread-79419] [transport.py] [_log()] userauth is OK
2025-12-13T00:35:34.801 [DEBUG] [Thread-79419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:35:34.801 [DEBUG] [Thread-79419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:35:34.801 [DEBUG] [Thread-79419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:35:34.801 [DEBUG] [Thread-79419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:35:34.814 [INFO] [Thread-79419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:35:34.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:35:34.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:35:35.250 [DEBUG] [Thread-79421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:35:35.628 [DEBUG] [Thread-79419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:35:35.629 [DEBUG] [Thread-79419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:35:35.676 [DEBUG] [Thread-79419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:35:35.677 [DEBUG] [Thread-79419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:35:35.685 [DEBUG] [Thread-79419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:35:35.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:35:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:35:35.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:35:35.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:35:35.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:35:35.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:35:35.716 [DEBUG] [Thread-79419] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:35:50.293 [DEBUG] [Thread-79422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:03.764 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:03.765 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:05.321 [DEBUG] [Thread-79423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:05.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:36:05.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:36:05.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:36:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 35, 32), 1.4, 90.79, 0.0, 32.85, 8.14, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:36:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:35:32
2025-12-13T00:36:06.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:36:06.745 [DEBUG] [Thread-79424] [transport.py] [_log()] starting thread (client mode): 0xf5770f10
2025-12-13T00:36:06.746 [DEBUG] [Thread-79424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:36:06.765 [DEBUG] [Thread-79424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:36:06.765 [INFO] [Thread-79424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:36:06.768 [DEBUG] [Thread-79424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] client lang: <none>
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] server lang: <none>
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] kex follows: False
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:36:06.769 [DEBUG] [Thread-79424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:36:06.770 [DEBUG] [Thread-79424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:36:06.770 [DEBUG] [Thread-79424] [transport.py] [_log()] Compression: none
2025-12-13T00:36:06.770 [DEBUG] [Thread-79424] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:36:06.787 [DEBUG] [Thread-79424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:36:06.787 [DEBUG] [Thread-79424] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:36:06.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:36:06.789 [DEBUG] [Thread-79424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:36:06.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:36:06.791 [DEBUG] [Thread-79424] [transport.py] [_log()] userauth is OK
2025-12-13T00:36:06.791 [DEBUG] [Thread-79424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:36:06.792 [DEBUG] [Thread-79424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:36:06.792 [DEBUG] [Thread-79424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:36:06.792 [DEBUG] [Thread-79424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:36:06.818 [INFO] [Thread-79424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:36:06.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:36:07.435 [DEBUG] [Thread-79424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:36:07.435 [DEBUG] [Thread-79424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:36:07.436 [DEBUG] [Thread-79424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:36:07.476 [DEBUG] [Thread-79424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:36:07.476 [DEBUG] [Thread-79424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:36:07.479 [DEBUG] [Thread-79424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:36:07.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:36:07.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:36:07.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:36:07.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:36:07.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:36:07.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:36:07.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:36:07.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:36:07.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:36:07.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.941416 -999.00   +7.90  46.85     91   +6.60 1 3 2 3 1     0    0 1.26 1.73 ZNEs. 41.6 46.9 313.4 59.1 9.3 -5.4 9.1 -5.6 8.9 -3.8 9.3 -3.6
2025-12-13T00:36:07.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:36:07.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:36:07.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.941416
2025-12-13T00:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:35:32', tmtdew=1.4, humidity=90.79, cloud=0.0, wind=32.85, temperature=8.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:35:38.342', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:34:00')
2025-12-13T00:36:07.507 [DEBUG] [Thread-79424] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:36:07.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:36:07.603 [DEBUG] [Thread-79427] [transport.py] [_log()] starting thread (client mode): 0xf5740af0
2025-12-13T00:36:07.603 [DEBUG] [Thread-79427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:36:07.618 [DEBUG] [Thread-79427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:36:07.618 [INFO] [Thread-79427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:36:07.626 [DEBUG] [Thread-79427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] client lang: <none>
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] server lang: <none>
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] kex follows: False
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] Compression: none
2025-12-13T00:36:07.627 [DEBUG] [Thread-79427] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:36:07.684 [DEBUG] [Thread-79427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:36:07.685 [DEBUG] [Thread-79427] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:36:07.685 [DEBUG] [Thread-79427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:36:07.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:36:07.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:36:07.741 [DEBUG] [Thread-79427] [transport.py] [_log()] userauth is OK
2025-12-13T00:36:07.741 [DEBUG] [Thread-79427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:36:07.741 [DEBUG] [Thread-79427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:36:07.741 [DEBUG] [Thread-79427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:36:07.741 [DEBUG] [Thread-79427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:36:07.760 [INFO] [Thread-79427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:36:07.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:36:07.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:36:08.577 [DEBUG] [Thread-79427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:36:08.577 [DEBUG] [Thread-79427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:36:08.625 [DEBUG] [Thread-79427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:36:08.625 [DEBUG] [Thread-79427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:36:08.634 [DEBUG] [Thread-79427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:36:08.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:36:08.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:36:08.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:36:08.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:36:08.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:36:08.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:36:08.668 [DEBUG] [Thread-79427] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:36:20.347 [DEBUG] [Thread-79429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:25.865 [DEBUG] [Thread-79430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:35.396 [DEBUG] [Thread-79431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:36:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:36:38.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:36:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:36:39.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 36, 4), 1.43, 90.59, 0.0, 35.74, 8.12, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:36:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:36:04
2025-12-13T00:36:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:36:39.649 [DEBUG] [Thread-79432] [transport.py] [_log()] starting thread (client mode): 0xf572e6e0
2025-12-13T00:36:39.649 [DEBUG] [Thread-79432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:36:39.668 [DEBUG] [Thread-79432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:36:39.668 [INFO] [Thread-79432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:36:39.671 [DEBUG] [Thread-79432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] client lang: <none>
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] server lang: <none>
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] kex follows: False
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:36:39.672 [DEBUG] [Thread-79432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:36:39.673 [DEBUG] [Thread-79432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:36:39.673 [DEBUG] [Thread-79432] [transport.py] [_log()] Compression: none
2025-12-13T00:36:39.673 [DEBUG] [Thread-79432] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:36:39.688 [DEBUG] [Thread-79432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:36:39.689 [DEBUG] [Thread-79432] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:36:39.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:36:39.690 [DEBUG] [Thread-79432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:36:39.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:36:39.692 [DEBUG] [Thread-79432] [transport.py] [_log()] userauth is OK
2025-12-13T00:36:39.692 [DEBUG] [Thread-79432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:36:39.693 [DEBUG] [Thread-79432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:36:39.693 [DEBUG] [Thread-79432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:36:39.693 [DEBUG] [Thread-79432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:36:39.717 [INFO] [Thread-79432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:36:39.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:36:40.362 [DEBUG] [Thread-79432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:36:40.362 [DEBUG] [Thread-79432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:36:40.363 [DEBUG] [Thread-79432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:36:40.403 [DEBUG] [Thread-79432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:36:40.403 [DEBUG] [Thread-79432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:36:40.406 [DEBUG] [Thread-79432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:36:40.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:36:40.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:36:40.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:36:40.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:36:40.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:36:40.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:36:40.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:36:40.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:36:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:36:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.941764 -999.00   +8.00  46.09     90   +6.60 1 3 2 3 1     0    0 1.33 2.73 Z.ES. 44.5 46.1 313.2 61.6 9.3 -4.5 9.1 -4.6 8.9 -4.6 9.3 -3.6
2025-12-13T00:36:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:36:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:36:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.941764
2025-12-13T00:36:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:36:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:36:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:36:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:36:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:36:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:36:04', tmtdew=1.43, humidity=90.59, cloud=0.0, wind=35.74, temperature=8.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:36:08.410', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:34:00')
2025-12-13T00:36:40.428 [DEBUG] [Thread-79432] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:36:40.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:36:40.526 [DEBUG] [Thread-79435] [transport.py] [_log()] starting thread (client mode): 0xfabc5c60
2025-12-13T00:36:40.526 [DEBUG] [Thread-79435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:36:40.540 [DEBUG] [Thread-79435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:36:40.540 [INFO] [Thread-79435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] client lang: <none>
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] server lang: <none>
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] kex follows: False
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:36:40.548 [DEBUG] [Thread-79435] [transport.py] [_log()] Compression: none
2025-12-13T00:36:40.549 [DEBUG] [Thread-79435] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:36:40.604 [DEBUG] [Thread-79435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:36:40.605 [DEBUG] [Thread-79435] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:36:40.605 [DEBUG] [Thread-79435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:36:40.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:36:40.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:36:40.664 [DEBUG] [Thread-79435] [transport.py] [_log()] userauth is OK
2025-12-13T00:36:40.664 [DEBUG] [Thread-79435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:36:40.665 [DEBUG] [Thread-79435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:36:40.665 [DEBUG] [Thread-79435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:36:40.665 [DEBUG] [Thread-79435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:36:40.691 [INFO] [Thread-79435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:36:40.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:36:40.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:36:41.511 [DEBUG] [Thread-79435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:36:41.511 [DEBUG] [Thread-79435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:36:41.561 [DEBUG] [Thread-79435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:36:41.561 [DEBUG] [Thread-79435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:36:41.570 [DEBUG] [Thread-79435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:36:41.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:36:41.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:36:41.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:36:41.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:36:41.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:36:41.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:36:41.603 [DEBUG] [Thread-79435] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:36:50.426 [DEBUG] [Thread-79437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:03.971 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:03.973 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:05.463 [DEBUG] [Thread-79438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:11.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:37:11.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:37:11.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:37:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 37, 8), 1.64, 89.26, 0.0, 37.95, 8.14, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:37:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:37:08
2025-12-13T00:37:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:37:12.568 [DEBUG] [Thread-79439] [transport.py] [_log()] starting thread (client mode): 0xfabc6230
2025-12-13T00:37:12.568 [DEBUG] [Thread-79439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:37:12.589 [DEBUG] [Thread-79439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:37:12.589 [INFO] [Thread-79439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] client lang: <none>
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] server lang: <none>
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] kex follows: False
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:37:12.592 [DEBUG] [Thread-79439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:37:12.593 [DEBUG] [Thread-79439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:37:12.593 [DEBUG] [Thread-79439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:37:12.593 [DEBUG] [Thread-79439] [transport.py] [_log()] Compression: none
2025-12-13T00:37:12.593 [DEBUG] [Thread-79439] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:37:12.610 [DEBUG] [Thread-79439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:37:12.610 [DEBUG] [Thread-79439] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:37:12.611 [DEBUG] [Thread-79439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:37:12.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:37:12.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:37:12.612 [DEBUG] [Thread-79439] [transport.py] [_log()] userauth is OK
2025-12-13T00:37:12.612 [DEBUG] [Thread-79439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:37:12.613 [DEBUG] [Thread-79439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:37:12.613 [DEBUG] [Thread-79439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:37:12.613 [DEBUG] [Thread-79439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:37:12.630 [INFO] [Thread-79439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:37:12.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:37:13.247 [DEBUG] [Thread-79439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:37:13.248 [DEBUG] [Thread-79439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:37:13.248 [DEBUG] [Thread-79439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:37:13.288 [DEBUG] [Thread-79439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:37:13.288 [DEBUG] [Thread-79439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:37:13.291 [DEBUG] [Thread-79439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:37:13.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:37:13.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:37:13.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:37:13.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:37:13.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:37:13.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:37:13.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:37:13.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:37:13.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:37:13.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.942111 -999.00   +8.00  49.13     90   +6.60 1 3 2 3 1     0    0 1.36 3.80 Z.ES. 49.5 49.1 316.2 52.0 9.4 -4.3 9.1 -5.3 8.9 -7.2 9.3 -7.0
2025-12-13T00:37:13.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:37:13.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:37:13.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.942111
2025-12-13T00:37:13.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:37:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:37:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:37:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:37:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:37:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:37:08', tmtdew=1.64, humidity=89.26, cloud=0.0, wind=37.95, temperature=8.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:36:38.390', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:34:00')
2025-12-13T00:37:13.314 [DEBUG] [Thread-79439] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:37:13.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:37:13.419 [DEBUG] [Thread-79442] [transport.py] [_log()] starting thread (client mode): 0xfabc6c20
2025-12-13T00:37:13.419 [DEBUG] [Thread-79442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:37:13.433 [DEBUG] [Thread-79442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:37:13.433 [INFO] [Thread-79442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] client lang: <none>
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] server lang: <none>
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] kex follows: False
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:37:13.441 [DEBUG] [Thread-79442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:37:13.442 [DEBUG] [Thread-79442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:37:13.442 [DEBUG] [Thread-79442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:37:13.442 [DEBUG] [Thread-79442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:37:13.442 [DEBUG] [Thread-79442] [transport.py] [_log()] Compression: none
2025-12-13T00:37:13.442 [DEBUG] [Thread-79442] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:37:13.505 [DEBUG] [Thread-79442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:37:13.506 [DEBUG] [Thread-79442] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:37:13.506 [DEBUG] [Thread-79442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:37:13.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:37:13.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:37:13.560 [DEBUG] [Thread-79442] [transport.py] [_log()] userauth is OK
2025-12-13T00:37:13.561 [DEBUG] [Thread-79442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:37:13.561 [DEBUG] [Thread-79442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:37:13.561 [DEBUG] [Thread-79442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:37:13.561 [DEBUG] [Thread-79442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:37:13.580 [INFO] [Thread-79442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:37:13.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:37:13.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:37:14.385 [DEBUG] [Thread-79442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:37:14.385 [DEBUG] [Thread-79442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:37:14.433 [DEBUG] [Thread-79442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:37:14.433 [DEBUG] [Thread-79442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:37:14.442 [DEBUG] [Thread-79442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:37:14.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:37:14.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:37:14.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:37:14.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:37:14.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:37:14.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:37:14.476 [DEBUG] [Thread-79442] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:37:20.491 [DEBUG] [Thread-79444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:25.942 [DEBUG] [Thread-79445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:35.540 [DEBUG] [Thread-79446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:37:44.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:37:44.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:37:44.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:37:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 37, 40), 1.7, 89.2, 0.0, 33.28, 8.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:37:45.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:37:40
2025-12-13T00:37:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:37:45.460 [DEBUG] [Thread-79447] [transport.py] [_log()] starting thread (client mode): 0xf813c9d0
2025-12-13T00:37:45.460 [DEBUG] [Thread-79447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:37:45.484 [DEBUG] [Thread-79447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:37:45.485 [INFO] [Thread-79447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:37:45.488 [DEBUG] [Thread-79447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:37:45.488 [DEBUG] [Thread-79447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:37:45.488 [DEBUG] [Thread-79447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:37:45.488 [DEBUG] [Thread-79447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] client lang: <none>
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] server lang: <none>
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] kex follows: False
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:37:45.489 [DEBUG] [Thread-79447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:37:45.490 [DEBUG] [Thread-79447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:37:45.490 [DEBUG] [Thread-79447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:37:45.490 [DEBUG] [Thread-79447] [transport.py] [_log()] Compression: none
2025-12-13T00:37:45.490 [DEBUG] [Thread-79447] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:37:45.508 [DEBUG] [Thread-79447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:37:45.509 [DEBUG] [Thread-79447] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:37:45.510 [DEBUG] [Thread-79447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:37:45.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:37:45.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:37:45.512 [DEBUG] [Thread-79447] [transport.py] [_log()] userauth is OK
2025-12-13T00:37:45.512 [DEBUG] [Thread-79447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:37:45.512 [DEBUG] [Thread-79447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:37:45.512 [DEBUG] [Thread-79447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:37:45.512 [DEBUG] [Thread-79447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:37:45.536 [INFO] [Thread-79447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:37:45.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:37:46.184 [DEBUG] [Thread-79447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:37:46.185 [DEBUG] [Thread-79447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:37:46.185 [DEBUG] [Thread-79447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:37:46.226 [DEBUG] [Thread-79447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:37:46.226 [DEBUG] [Thread-79447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:37:46.230 [DEBUG] [Thread-79447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:37:46.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:37:46.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:37:46.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:37:46.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:37:46.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:37:46.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:37:46.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:37:46.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.942805 -999.00   +8.00  47.06     90   +6.50 1 2 2 3 1     0    0 1.45 6.73 ...sW 46.8 47.1 312.6 51.3 9.3 -12.7 9.1 -12.8 8.8 -9.7 9.2 -9.8
2025-12-13T00:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:37:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.942805
2025-12-13T00:37:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:37:46.256 [DEBUG] [Thread-79447] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:37:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:37:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:37:40', tmtdew=1.7, humidity=89.2, cloud=0.0, wind=33.28, temperature=8.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:37:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:34:00')
2025-12-13T00:37:46.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:37:46.352 [DEBUG] [Thread-79450] [transport.py] [_log()] starting thread (client mode): 0xf572eec0
2025-12-13T00:37:46.352 [DEBUG] [Thread-79450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:37:46.366 [DEBUG] [Thread-79450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:37:46.366 [INFO] [Thread-79450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] client lang: <none>
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] server lang: <none>
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] kex follows: False
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] Compression: none
2025-12-13T00:37:46.374 [DEBUG] [Thread-79450] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:37:46.436 [DEBUG] [Thread-79450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:37:46.436 [DEBUG] [Thread-79450] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:37:46.437 [DEBUG] [Thread-79450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:37:46.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:37:46.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:37:46.492 [DEBUG] [Thread-79450] [transport.py] [_log()] userauth is OK
2025-12-13T00:37:46.492 [DEBUG] [Thread-79450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:37:46.492 [DEBUG] [Thread-79450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:37:46.492 [DEBUG] [Thread-79450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:37:46.492 [DEBUG] [Thread-79450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:37:46.515 [INFO] [Thread-79450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:37:46.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:37:46.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:37:47.362 [DEBUG] [Thread-79450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:37:47.363 [DEBUG] [Thread-79450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:37:47.411 [DEBUG] [Thread-79450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:37:47.411 [DEBUG] [Thread-79450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:37:47.420 [DEBUG] [Thread-79450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:37:47.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:37:47.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:37: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') -> 00000000
2025-12-13T00:37:47.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:37:47.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:37:47.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:37:47.454 [DEBUG] [Thread-79450] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:37:50.571 [DEBUG] [Thread-79452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:04.177 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:04.178 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:05.613 [DEBUG] [Thread-79453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:38:17.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:38:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:38:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 38, 12), 1.71, 89.13, 0.0, 38.52, 8.12, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:38:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:38:12
2025-12-13T00:38:18.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:38:18.391 [DEBUG] [Thread-79454] [transport.py] [_log()] starting thread (client mode): 0xf572e380
2025-12-13T00:38:18.391 [DEBUG] [Thread-79454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:38:18.406 [DEBUG] [Thread-79454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:38:18.406 [INFO] [Thread-79454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:38:18.417 [DEBUG] [Thread-79454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:38:18.417 [DEBUG] [Thread-79454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] client lang: <none>
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] server lang: <none>
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] kex follows: False
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:38:18.418 [DEBUG] [Thread-79454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:38:18.419 [DEBUG] [Thread-79454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:38:18.419 [DEBUG] [Thread-79454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:38:18.419 [DEBUG] [Thread-79454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:38:18.419 [DEBUG] [Thread-79454] [transport.py] [_log()] Compression: none
2025-12-13T00:38:18.419 [DEBUG] [Thread-79454] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:38:18.432 [DEBUG] [Thread-79454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:38:18.433 [DEBUG] [Thread-79454] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:38:18.433 [DEBUG] [Thread-79454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:38:18.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:38:18.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:38:18.435 [DEBUG] [Thread-79454] [transport.py] [_log()] userauth is OK
2025-12-13T00:38:18.435 [DEBUG] [Thread-79454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:38:18.435 [DEBUG] [Thread-79454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:38:18.435 [DEBUG] [Thread-79454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:38:18.436 [DEBUG] [Thread-79454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:38:18.470 [INFO] [Thread-79454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:38:18.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:38:19.099 [DEBUG] [Thread-79454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:38:19.099 [DEBUG] [Thread-79454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:38:19.100 [DEBUG] [Thread-79454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:38:19.140 [DEBUG] [Thread-79454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:38:19.140 [DEBUG] [Thread-79454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:38:19.143 [DEBUG] [Thread-79454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:38:19.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:38:19.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:38:19.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:38:19.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:38:19.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:38:19.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:38:19.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:38:19.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:38:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:38:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.943152 -999.00   +7.90  44.96     90   +6.50 1 3 2 3 1     0    0 1.47 7.26 ...sW 45.4 45.0 314.4 54.6 9.3 -10.8 9.1 -9.2 8.9 -5.3 9.2 -4.9
2025-12-13T00:38:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:38:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:38:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.943152
2025-12-13T00:38:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:38:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:38:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:38:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:38:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:38:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:38:12', tmtdew=1.71, humidity=89.13, cloud=0.0, wind=38.52, temperature=8.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:38:08.333', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:36:00')
2025-12-13T00:38:19.168 [DEBUG] [Thread-79454] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:38:19.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:38:19.260 [DEBUG] [Thread-79457] [transport.py] [_log()] starting thread (client mode): 0xf57430d0
2025-12-13T00:38:19.260 [DEBUG] [Thread-79457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:38:19.276 [DEBUG] [Thread-79457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:38:19.277 [INFO] [Thread-79457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:38:19.284 [DEBUG] [Thread-79457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:38:19.284 [DEBUG] [Thread-79457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:38:19.284 [DEBUG] [Thread-79457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] client lang: <none>
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] server lang: <none>
2025-12-13T00:38:19.285 [DEBUG] [Thread-79457] [transport.py] [_log()] kex follows: False
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] Compression: none
2025-12-13T00:38:19.286 [DEBUG] [Thread-79457] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:38:19.344 [DEBUG] [Thread-79457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:38:19.344 [DEBUG] [Thread-79457] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:38:19.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:38:19.345 [DEBUG] [Thread-79457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:38:19.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:38:19.400 [DEBUG] [Thread-79457] [transport.py] [_log()] userauth is OK
2025-12-13T00:38:19.400 [DEBUG] [Thread-79457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:38:19.401 [DEBUG] [Thread-79457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:38:19.401 [DEBUG] [Thread-79457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:38:19.401 [DEBUG] [Thread-79457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:38:19.419 [INFO] [Thread-79457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:38:19.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:38:19.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:38:20.255 [DEBUG] [Thread-79457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:38:20.255 [DEBUG] [Thread-79457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:38:20.303 [DEBUG] [Thread-79457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:38:20.303 [DEBUG] [Thread-79457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:38:20.312 [DEBUG] [Thread-79457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:38:20.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:38:20.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:38:20.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:38:20.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:38:20.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:38:20.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:38:20.346 [DEBUG] [Thread-79457] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:38:20.643 [DEBUG] [Thread-79459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:26.016 [DEBUG] [Thread-79460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:35.698 [DEBUG] [Thread-79461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:38:50.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:38:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:38:50.725 [DEBUG] [Thread-79462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:38:51.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 38, 44), 1.67, 89.06, 0.0, 32.02, 8.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:38:51.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:38:44
2025-12-13T00:38:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:38:51.350 [DEBUG] [Thread-79463] [transport.py] [_log()] starting thread (client mode): 0xf575c490
2025-12-13T00:38:51.350 [DEBUG] [Thread-79463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:38:51.368 [DEBUG] [Thread-79463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:38:51.368 [INFO] [Thread-79463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] client lang: <none>
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] server lang: <none>
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] kex follows: False
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] Compression: none
2025-12-13T00:38:51.370 [DEBUG] [Thread-79463] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:38:51.378 [DEBUG] [Thread-79463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:38:51.378 [DEBUG] [Thread-79463] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:38:51.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:38:51.378 [DEBUG] [Thread-79463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:38:51.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:38:51.379 [DEBUG] [Thread-79463] [transport.py] [_log()] userauth is OK
2025-12-13T00:38:51.379 [DEBUG] [Thread-79463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:38:51.379 [DEBUG] [Thread-79463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:38:51.379 [DEBUG] [Thread-79463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:38:51.379 [DEBUG] [Thread-79463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:38:51.390 [INFO] [Thread-79463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:38:51.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:38:52.016 [DEBUG] [Thread-79463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:38:52.016 [DEBUG] [Thread-79463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:38:52.016 [DEBUG] [Thread-79463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:38:52.057 [DEBUG] [Thread-79463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:38:52.057 [DEBUG] [Thread-79463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:38:52.059 [DEBUG] [Thread-79463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:38:52.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:38:52.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:38:52.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:38:52.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:38:52.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:38:52.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:38:52.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:38:52.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:38:52.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:38:52.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.943500 -999.00   +7.90  37.80     91   +6.60 1 3 2 3 1     0    0 1.48 7.64 ZnES. 39.7 37.8 314.4 51.2 9.3 -5.5 9.1 -5.0 8.8 -4.1 9.2 -3.7
2025-12-13T00:38:52.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:38:52.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:38:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.943500
2025-12-13T00:38:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:38:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:38:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:38:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:38:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:38:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:38:44', tmtdew=1.67, humidity=89.06, cloud=0.0, wind=32.02, temperature=8.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:38:38.400', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:36:00')
2025-12-13T00:38:52.087 [DEBUG] [Thread-79463] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:38:52.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:38:52.183 [DEBUG] [Thread-79466] [transport.py] [_log()] starting thread (client mode): 0xf575f9a0
2025-12-13T00:38:52.183 [DEBUG] [Thread-79466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:38:52.201 [DEBUG] [Thread-79466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:38:52.201 [INFO] [Thread-79466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:38:52.208 [DEBUG] [Thread-79466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:38:52.208 [DEBUG] [Thread-79466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] client lang: <none>
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] server lang: <none>
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] kex follows: False
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] Compression: none
2025-12-13T00:38:52.209 [DEBUG] [Thread-79466] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:38:52.268 [DEBUG] [Thread-79466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:38:52.268 [DEBUG] [Thread-79466] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:38:52.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:38:52.269 [DEBUG] [Thread-79466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:38:52.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:38:52.324 [DEBUG] [Thread-79466] [transport.py] [_log()] userauth is OK
2025-12-13T00:38:52.324 [DEBUG] [Thread-79466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:38:52.324 [DEBUG] [Thread-79466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:38:52.324 [DEBUG] [Thread-79466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:38:52.324 [DEBUG] [Thread-79466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:38:52.343 [INFO] [Thread-79466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:38:52.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:38:52.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:38:53.189 [DEBUG] [Thread-79466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:38:53.189 [DEBUG] [Thread-79466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:38:53.240 [DEBUG] [Thread-79466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:38:53.240 [DEBUG] [Thread-79466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:38:53.250 [DEBUG] [Thread-79466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:38:53.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:38:53.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:38:53.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:38:53.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:38:53.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:38:53.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:38:53.284 [DEBUG] [Thread-79466] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:39:04.380 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:04.381 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:05.753 [DEBUG] [Thread-79468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:20.794 [DEBUG] [Thread-79469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:39:23.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:39:23.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:39:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 39, 16), 1.67, 89.06, 0.0, 33.36, 8.05, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:39:23.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:39:16
2025-12-13T00:39:24.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:39:24.260 [DEBUG] [Thread-79470] [transport.py] [_log()] starting thread (client mode): 0xf5741690
2025-12-13T00:39:24.260 [DEBUG] [Thread-79470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:39:24.279 [DEBUG] [Thread-79470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:39:24.280 [INFO] [Thread-79470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] client lang: <none>
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] server lang: <none>
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] kex follows: False
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] Compression: none
2025-12-13T00:39:24.283 [DEBUG] [Thread-79470] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:39:24.300 [DEBUG] [Thread-79470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:39:24.301 [DEBUG] [Thread-79470] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:39:24.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:39:24.301 [DEBUG] [Thread-79470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:39:24.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:39:24.304 [DEBUG] [Thread-79470] [transport.py] [_log()] userauth is OK
2025-12-13T00:39:24.304 [DEBUG] [Thread-79470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:39:24.304 [DEBUG] [Thread-79470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:39:24.304 [DEBUG] [Thread-79470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:39:24.304 [DEBUG] [Thread-79470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:39:24.323 [INFO] [Thread-79470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:39:24.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:39:24.909 [DEBUG] [Thread-79470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:39:24.909 [DEBUG] [Thread-79470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:39:24.909 [DEBUG] [Thread-79470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:39:24.950 [DEBUG] [Thread-79470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:39:24.951 [DEBUG] [Thread-79470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:39:24.952 [DEBUG] [Thread-79470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:39:24.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:39:24.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:39:24.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:39:24.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:39:24.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:39:24.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:39:24.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:39:24.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:39:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:39:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.943847 -999.00   +8.00  42.14     90   +6.60 1 3 2 3 1     0    0 1.50 7.95 ZnES. 37.5 42.1 314.0 47.2 9.3 -4.8 9.1 -5.1 8.9 -4.7 9.2 -4.0
2025-12-13T00:39:24.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.943847
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:39:24.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:39:16', tmtdew=1.67, humidity=89.06, cloud=0.0, wind=33.36, temperature=8.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:39:08.381', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:36:00')
2025-12-13T00:39:24.970 [DEBUG] [Thread-79470] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:39:25.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:39:25.057 [DEBUG] [Thread-79473] [transport.py] [_log()] starting thread (client mode): 0xf8188760
2025-12-13T00:39:25.057 [DEBUG] [Thread-79473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:39:25.072 [DEBUG] [Thread-79473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:39:25.072 [INFO] [Thread-79473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] client lang: <none>
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] server lang: <none>
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] kex follows: False
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:39:25.079 [DEBUG] [Thread-79473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:39:25.080 [DEBUG] [Thread-79473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:39:25.080 [DEBUG] [Thread-79473] [transport.py] [_log()] Compression: none
2025-12-13T00:39:25.080 [DEBUG] [Thread-79473] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:39:25.135 [DEBUG] [Thread-79473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:39:25.135 [DEBUG] [Thread-79473] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:39:25.135 [DEBUG] [Thread-79473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:39:25.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:39:25.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:39:25.192 [DEBUG] [Thread-79473] [transport.py] [_log()] userauth is OK
2025-12-13T00:39:25.192 [DEBUG] [Thread-79473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:39:25.192 [DEBUG] [Thread-79473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:39:25.192 [DEBUG] [Thread-79473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:39:25.192 [DEBUG] [Thread-79473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:39:25.205 [INFO] [Thread-79473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:39:25.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:39:25.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:39:26.030 [DEBUG] [Thread-79473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:39:26.030 [DEBUG] [Thread-79473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:39:26.078 [DEBUG] [Thread-79473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:39:26.078 [DEBUG] [Thread-79473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:39:26.087 [DEBUG] [Thread-79473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:39:26.088 [DEBUG] [Thread-79475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:26.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:39:26.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:39:26.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:39:26.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:39:26.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:39:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:39:26.118 [DEBUG] [Thread-79473] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:39:35.822 [DEBUG] [Thread-79476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:50.868 [DEBUG] [Thread-79477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:39:56.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:39:56.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:39:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:39:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 39, 48), 1.71, 89.16, 0.0, 42.89, 8.15, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:39:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:39:48
2025-12-13T00:39:56.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:39:57.093 [DEBUG] [Thread-79478] [transport.py] [_log()] starting thread (client mode): 0xf578a0b0
2025-12-13T00:39:57.093 [DEBUG] [Thread-79478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:39:57.112 [DEBUG] [Thread-79478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:39:57.112 [INFO] [Thread-79478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] client lang: <none>
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] server lang: <none>
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] kex follows: False
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] Compression: none
2025-12-13T00:39:57.116 [DEBUG] [Thread-79478] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:39:57.133 [DEBUG] [Thread-79478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:39:57.134 [DEBUG] [Thread-79478] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:39:57.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:39:57.135 [DEBUG] [Thread-79478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:39:57.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:39:57.137 [DEBUG] [Thread-79478] [transport.py] [_log()] userauth is OK
2025-12-13T00:39:57.138 [DEBUG] [Thread-79478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:39:57.138 [DEBUG] [Thread-79478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:39:57.138 [DEBUG] [Thread-79478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:39:57.138 [DEBUG] [Thread-79478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:39:57.156 [INFO] [Thread-79478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:39:57.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:39:57.752 [DEBUG] [Thread-79478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:39:57.753 [DEBUG] [Thread-79478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:39:57.753 [DEBUG] [Thread-79478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:39:57.794 [DEBUG] [Thread-79478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:39:57.794 [DEBUG] [Thread-79478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:39:57.797 [DEBUG] [Thread-79478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:39:57.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:39:57.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:39:57.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:39:57.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:39:57.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:39:57.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:39:57.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:39:57.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:39:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:39:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.943847 -999.00   +8.00  42.14     90   +6.60 1 3 2 3 1     0    0 1.50 7.95 ZnES. 37.5 42.1 314.0 47.2 9.3 -4.8 9.1 -5.1 8.9 -4.7 9.2 -4.0
2025-12-13T00:39:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:39:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:39:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.943847
2025-12-13T00:39:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:39:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:39:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:39:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:39:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:39:57.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:39:48', tmtdew=1.71, humidity=89.16, cloud=0.0, wind=42.89, temperature=8.15, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:39:08.381', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:36:00')
2025-12-13T00:39:57.823 [DEBUG] [Thread-79478] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:39:57.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:39:57.923 [DEBUG] [Thread-79481] [transport.py] [_log()] starting thread (client mode): 0xf81e5780
2025-12-13T00:39:57.923 [DEBUG] [Thread-79481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:39:57.937 [DEBUG] [Thread-79481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:39:57.938 [INFO] [Thread-79481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:39:57.945 [DEBUG] [Thread-79481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:39:57.945 [DEBUG] [Thread-79481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] client lang: <none>
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] server lang: <none>
2025-12-13T00:39:57.946 [DEBUG] [Thread-79481] [transport.py] [_log()] kex follows: False
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] Compression: none
2025-12-13T00:39:57.947 [DEBUG] [Thread-79481] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:39:58.004 [DEBUG] [Thread-79481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:39:58.004 [DEBUG] [Thread-79481] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:39:58.004 [DEBUG] [Thread-79481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:39:58.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:39:58.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:39:58.060 [DEBUG] [Thread-79481] [transport.py] [_log()] userauth is OK
2025-12-13T00:39:58.060 [DEBUG] [Thread-79481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:39:58.060 [DEBUG] [Thread-79481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:39:58.060 [DEBUG] [Thread-79481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:39:58.060 [DEBUG] [Thread-79481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:39:58.078 [INFO] [Thread-79481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:39:58.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:39:58.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:39:58.900 [DEBUG] [Thread-79481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:39:58.900 [DEBUG] [Thread-79481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:39:58.948 [DEBUG] [Thread-79481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:39:58.948 [DEBUG] [Thread-79481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:39:58.956 [DEBUG] [Thread-79481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:39:58.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:39:58.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:39: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') -> 00000000
2025-12-13T00:39:58.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:39:58.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:39:58.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:39:58.991 [DEBUG] [Thread-79481] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:40:04.611 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:40:04.612 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:40:05.894 [DEBUG] [Thread-79483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:40:20.929 [DEBUG] [Thread-79484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:40:26.165 [DEBUG] [Thread-79485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:40:29.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:40:29.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:40:29.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 40, 20), 1.7, 89.2, 0.0, 43.9, 8.15, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:40:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:40:20
2025-12-13T00:40:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:40:29.964 [DEBUG] [Thread-79486] [transport.py] [_log()] starting thread (client mode): 0xf81892d0
2025-12-13T00:40:29.964 [DEBUG] [Thread-79486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:40:29.986 [DEBUG] [Thread-79486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:40:29.986 [INFO] [Thread-79486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] client lang: <none>
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] server lang: <none>
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] kex follows: False
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] Compression: none
2025-12-13T00:40:29.989 [DEBUG] [Thread-79486] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:40:30.006 [DEBUG] [Thread-79486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:40:30.007 [DEBUG] [Thread-79486] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:40:30.007 [DEBUG] [Thread-79486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:40:30.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:40:30.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:40:30.010 [DEBUG] [Thread-79486] [transport.py] [_log()] userauth is OK
2025-12-13T00:40:30.010 [DEBUG] [Thread-79486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:40:30.010 [DEBUG] [Thread-79486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:40:30.011 [DEBUG] [Thread-79486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:40:30.011 [DEBUG] [Thread-79486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:40:30.028 [INFO] [Thread-79486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:40:30.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:40:30.690 [DEBUG] [Thread-79486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:40:30.691 [DEBUG] [Thread-79486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:40:30.691 [DEBUG] [Thread-79486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:40:30.733 [DEBUG] [Thread-79486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:40:30.733 [DEBUG] [Thread-79486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:40:30.736 [DEBUG] [Thread-79486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:40:30.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:40:30.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:40:30.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:40:30.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:40:30.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:40:30.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:40:30.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:40:30.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:40:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:40:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.944194 -999.00   +8.00  41.62     90   +6.60 1 3 2 3 1     0    0 1.52 9.37 ----- 42.9 41.6 317.0 45.6 9.3 -5.0 9.1 -5.9 8.8 -5.6 9.3 -4.9
2025-12-13T00:40:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:40:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:40:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.944194
2025-12-13T00:40:30.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:40:30.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:40:30.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:40:30.768 [DEBUG] [Thread-79486] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:40:30.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:40:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:40:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:40:20', tmtdew=1.7, humidity=89.2, cloud=0.0, wind=43.9, temperature=8.15, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:39:38.362', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:36:00')
2025-12-13T00:40:30.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:40:30.865 [DEBUG] [Thread-79489] [transport.py] [_log()] starting thread (client mode): 0xf818a350
2025-12-13T00:40:30.865 [DEBUG] [Thread-79489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:40:30.880 [DEBUG] [Thread-79489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:40:30.880 [INFO] [Thread-79489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:40:30.888 [DEBUG] [Thread-79489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] client lang: <none>
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] server lang: <none>
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] kex follows: False
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:40:30.889 [DEBUG] [Thread-79489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:40:30.890 [DEBUG] [Thread-79489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:40:30.890 [DEBUG] [Thread-79489] [transport.py] [_log()] Compression: none
2025-12-13T00:40:30.890 [DEBUG] [Thread-79489] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:40:30.949 [DEBUG] [Thread-79489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:40:30.949 [DEBUG] [Thread-79489] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:40:30.950 [DEBUG] [Thread-79489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:40:30.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:40:30.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:40:31.008 [DEBUG] [Thread-79489] [transport.py] [_log()] userauth is OK
2025-12-13T00:40:31.008 [DEBUG] [Thread-79489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:40:31.008 [DEBUG] [Thread-79489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:40:31.008 [DEBUG] [Thread-79489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:40:31.009 [DEBUG] [Thread-79489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:40:31.027 [INFO] [Thread-79489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:40:31.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:40:31.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:40:31.903 [DEBUG] [Thread-79489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:40:31.903 [DEBUG] [Thread-79489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:40:31.952 [DEBUG] [Thread-79489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:40:31.952 [DEBUG] [Thread-79489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:40:31.961 [DEBUG] [Thread-79489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:40:31.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:40:31.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:40:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:40:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:40:31.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:40:31.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:40:31.995 [DEBUG] [Thread-79489] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:40:35.963 [DEBUG] [Thread-79491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:40:51.009 [DEBUG] [Thread-79492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:02.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:41:02.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:41:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:41:02.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 40, 52), 1.69, 89.23, 0.0, 35.75, 8.14, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:41:02.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:40:52
2025-12-13T00:41:02.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:41:02.993 [DEBUG] [Thread-79493] [transport.py] [_log()] starting thread (client mode): 0xfabc4b20
2025-12-13T00:41:02.993 [DEBUG] [Thread-79493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:41:03.014 [DEBUG] [Thread-79493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:41:03.014 [INFO] [Thread-79493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] client lang: <none>
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] server lang: <none>
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] kex follows: False
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:41:03.017 [DEBUG] [Thread-79493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:41:03.018 [DEBUG] [Thread-79493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:41:03.018 [DEBUG] [Thread-79493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:41:03.018 [DEBUG] [Thread-79493] [transport.py] [_log()] Compression: none
2025-12-13T00:41:03.018 [DEBUG] [Thread-79493] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:41:03.034 [DEBUG] [Thread-79493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:41:03.034 [DEBUG] [Thread-79493] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:41:03.035 [DEBUG] [Thread-79493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:41:03.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:41:03.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:41:03.037 [DEBUG] [Thread-79493] [transport.py] [_log()] userauth is OK
2025-12-13T00:41:03.037 [DEBUG] [Thread-79493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:41:03.037 [DEBUG] [Thread-79493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:41:03.037 [DEBUG] [Thread-79493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:41:03.037 [DEBUG] [Thread-79493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:41:03.060 [INFO] [Thread-79493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:41:03.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:41:03.700 [DEBUG] [Thread-79493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:41:03.700 [DEBUG] [Thread-79493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:41:03.701 [DEBUG] [Thread-79493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:41:03.742 [DEBUG] [Thread-79493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:41:03.742 [DEBUG] [Thread-79493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:41:03.744 [DEBUG] [Thread-79493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:41:03.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:41:03.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:41:03.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:41:03.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:41:03.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:41:03.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:41:03.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:41:03.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:41:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:41:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.944541 -999.00   +8.00  43.75     90   +6.60 1 3 2 3 1     0    0 1.60 10.38 ...S. 45.0 43.8 311.4 49.9 9.3 -6.4 9.2 -7.0 8.9 -5.7 9.3 -4.7
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.944541
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:41:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:40:52', tmtdew=1.69, humidity=89.23, cloud=0.0, wind=35.75, temperature=8.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:40:08.342', atlas_cloud=3, atlas_rain=1, zp_data=[1.6942500000000003, 1.0862499999999997, nan, nan, nan, nan, 2.276, 1.5232500000000009, 1.0414999999999992, 1.021, nan, nan, nan, nan, 1.4044999999999996, 0.7994999999999992, 0.7182499999999994, 1.0824999999999996, 1.379999999999999, 1.0582499999999992, nan, nan, 1.0462500000000006, 0.6897500000000001, 0.5534999999999997, 0.7305000000000001, 0.6237500000000002, 0.38649999999999984, nan, nan, nan, 0.487000000000001, 0.481749999999999], zp_timestamp='2025-12-12T22:36:00')
2025-12-13T00:41:03.765 [DEBUG] [Thread-79493] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:41:03.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:41:03.854 [DEBUG] [Thread-79496] [transport.py] [_log()] starting thread (client mode): 0xf81887f0
2025-12-13T00:41:03.854 [DEBUG] [Thread-79496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:41:03.872 [DEBUG] [Thread-79496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:41:03.872 [INFO] [Thread-79496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] client lang: <none>
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] server lang: <none>
2025-12-13T00:41:03.880 [DEBUG] [Thread-79496] [transport.py] [_log()] kex follows: False
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] Compression: none
2025-12-13T00:41:03.881 [DEBUG] [Thread-79496] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:41:03.939 [DEBUG] [Thread-79496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:41:03.940 [DEBUG] [Thread-79496] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:41:03.940 [DEBUG] [Thread-79496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:41:03.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:41:03.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:41:03.996 [DEBUG] [Thread-79496] [transport.py] [_log()] userauth is OK
2025-12-13T00:41:03.996 [DEBUG] [Thread-79496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:41:03.996 [DEBUG] [Thread-79496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:41:03.996 [DEBUG] [Thread-79496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:41:03.996 [DEBUG] [Thread-79496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:41:04.015 [INFO] [Thread-79496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:41:04.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:41:04.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:41:04.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:04.816 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:04.848 [DEBUG] [Thread-79496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:41:04.849 [DEBUG] [Thread-79496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:41:04.897 [DEBUG] [Thread-79496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:41:04.897 [DEBUG] [Thread-79496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:41:04.906 [DEBUG] [Thread-79496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:41:04.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:41:04.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:41:04.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:41:04.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:41:04.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:41:04.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:41:04.940 [DEBUG] [Thread-79496] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:41:06.038 [DEBUG] [Thread-79498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:21.080 [DEBUG] [Thread-79499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:26.238 [DEBUG] [Thread-79500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:34.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:41:34.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:41:34.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:41:35.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 41, 24), 1.69, 89.26, 0.0, 35.25, 8.14, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:41:35.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:41:24
2025-12-13T00:41:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:41:35.907 [DEBUG] [Thread-79501] [transport.py] [_log()] starting thread (client mode): 0xfabc5d50
2025-12-13T00:41:35.907 [DEBUG] [Thread-79501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:41:35.927 [DEBUG] [Thread-79501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:41:35.927 [INFO] [Thread-79501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:41:35.930 [DEBUG] [Thread-79501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:41:35.930 [DEBUG] [Thread-79501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] client lang: <none>
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] server lang: <none>
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] kex follows: False
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:41:35.931 [DEBUG] [Thread-79501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:41:35.932 [DEBUG] [Thread-79501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:41:35.932 [DEBUG] [Thread-79501] [transport.py] [_log()] Compression: none
2025-12-13T00:41:35.932 [DEBUG] [Thread-79501] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:41:35.950 [DEBUG] [Thread-79501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:41:35.950 [DEBUG] [Thread-79501] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:41:35.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:41:35.951 [DEBUG] [Thread-79501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:41:35.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:41:35.992 [DEBUG] [Thread-79501] [transport.py] [_log()] userauth is OK
2025-12-13T00:41:35.992 [DEBUG] [Thread-79501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:41:35.993 [DEBUG] [Thread-79501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:41:35.993 [DEBUG] [Thread-79501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:41:35.993 [DEBUG] [Thread-79501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:41:36.025 [INFO] [Thread-79501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:41:36.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:41:36.107 [DEBUG] [Thread-79503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:41:36.658 [DEBUG] [Thread-79501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:41:36.658 [DEBUG] [Thread-79501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:41:36.659 [DEBUG] [Thread-79501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:41:36.699 [DEBUG] [Thread-79501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:41:36.699 [DEBUG] [Thread-79501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:41:36.702 [DEBUG] [Thread-79501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:41:36.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:41:36.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:41:36.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:41:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:41:36.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:41:36.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:41:36.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:41:36.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:41:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:41:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.944889 -999.00   +8.00  44.14     91   +6.60 1 3 2 3 1     0    0 1.62 10.97 ...S. 43.1 44.1 310.4 48.9 9.3 -6.0 9.1 -7.0 8.9 -6.1 9.2 -5.4
2025-12-13T00:41:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:41:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:41:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.944889
2025-12-13T00:41:36.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:41:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:41:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:41:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:41:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:41:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:41:24', tmtdew=1.69, humidity=89.26, cloud=0.0, wind=35.25, temperature=8.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:40:38.410', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:40:00')
2025-12-13T00:41:36.729 [DEBUG] [Thread-79501] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:41:36.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:41:36.826 [DEBUG] [Thread-79505] [transport.py] [_log()] starting thread (client mode): 0xf57880d0
2025-12-13T00:41:36.827 [DEBUG] [Thread-79505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:41:36.842 [DEBUG] [Thread-79505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:41:36.842 [INFO] [Thread-79505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:41:36.849 [DEBUG] [Thread-79505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:41:36.850 [DEBUG] [Thread-79505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] client lang: <none>
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] server lang: <none>
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] kex follows: False
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] Compression: none
2025-12-13T00:41:36.851 [DEBUG] [Thread-79505] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:41:36.907 [DEBUG] [Thread-79505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:41:36.908 [DEBUG] [Thread-79505] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:41:36.908 [DEBUG] [Thread-79505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:41:36.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:41:36.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:41:36.964 [DEBUG] [Thread-79505] [transport.py] [_log()] userauth is OK
2025-12-13T00:41:36.964 [DEBUG] [Thread-79505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:41:36.964 [DEBUG] [Thread-79505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:41:36.964 [DEBUG] [Thread-79505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:41:36.964 [DEBUG] [Thread-79505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:41:36.983 [INFO] [Thread-79505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:41:36.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:41:36.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:41:37.818 [DEBUG] [Thread-79505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:41:37.818 [DEBUG] [Thread-79505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:41:37.866 [DEBUG] [Thread-79505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:41:37.866 [DEBUG] [Thread-79505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:41:37.874 [DEBUG] [Thread-79505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:41:37.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:41:37.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:41:37.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:41:37.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:41:37.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:41:37.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:41:37.909 [DEBUG] [Thread-79505] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:41:51.137 [DEBUG] [Thread-79507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:05.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:05.023 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:06.200 [DEBUG] [Thread-79508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:42:07.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:42: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
2025-12-13T00:42:08.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 41, 56), 1.69, 89.28, 0.0, 32.57, 8.05, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:42:08.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:41:56
2025-12-13T00:42:08.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:42:08.848 [DEBUG] [Thread-79509] [transport.py] [_log()] starting thread (client mode): 0xf5788790
2025-12-13T00:42:08.848 [DEBUG] [Thread-79509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:42:08.873 [DEBUG] [Thread-79509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:42:08.873 [INFO] [Thread-79509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] client lang: <none>
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] server lang: <none>
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] kex follows: False
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:42:08.876 [DEBUG] [Thread-79509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:42:08.877 [DEBUG] [Thread-79509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:42:08.877 [DEBUG] [Thread-79509] [transport.py] [_log()] Compression: none
2025-12-13T00:42:08.877 [DEBUG] [Thread-79509] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:42:08.889 [DEBUG] [Thread-79509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:42:08.890 [DEBUG] [Thread-79509] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:42:08.890 [DEBUG] [Thread-79509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:42:08.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:42:08.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:42:08.892 [DEBUG] [Thread-79509] [transport.py] [_log()] userauth is OK
2025-12-13T00:42:08.892 [DEBUG] [Thread-79509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:42:08.892 [DEBUG] [Thread-79509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:42:08.892 [DEBUG] [Thread-79509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:42:08.892 [DEBUG] [Thread-79509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:42:08.916 [INFO] [Thread-79509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:42:08.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:42:09.568 [DEBUG] [Thread-79509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:42:09.568 [DEBUG] [Thread-79509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:42:09.568 [DEBUG] [Thread-79509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:42:09.609 [DEBUG] [Thread-79509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:42:09.609 [DEBUG] [Thread-79509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:42:09.612 [DEBUG] [Thread-79509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:42:09.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:42:09.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:42:09.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:42:09.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:42:09.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:42:09.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:42:09.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:42:09.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:42:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:42:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.945583 -999.00   +8.10  39.62     90   +6.70 1 3 2 3 1     0    0 1.66 12.02 z..S. 43.3 39.6 311.4 48.0 9.3 -7.9 9.1 -8.5 8.8 -5.9 9.3 -3.6
2025-12-13T00:42:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:42:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:42:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.945583
2025-12-13T00:42:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:42:09.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:42:09.637 [DEBUG] [Thread-79509] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:42:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:42:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:42:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:42:09.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:41:56', tmtdew=1.69, humidity=89.28, cloud=0.0, wind=32.57, temperature=8.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:41:38.371', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:40:00')
2025-12-13T00:42:09.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:42:09.733 [DEBUG] [Thread-79512] [transport.py] [_log()] starting thread (client mode): 0xf578a0b0
2025-12-13T00:42:09.733 [DEBUG] [Thread-79512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:42:09.748 [DEBUG] [Thread-79512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:42:09.748 [INFO] [Thread-79512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:42:09.755 [DEBUG] [Thread-79512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:42:09.755 [DEBUG] [Thread-79512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:42:09.755 [DEBUG] [Thread-79512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:42:09.755 [DEBUG] [Thread-79512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:09.755 [DEBUG] [Thread-79512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:09.755 [DEBUG] [Thread-79512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] client lang: <none>
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] server lang: <none>
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] kex follows: False
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] Compression: none
2025-12-13T00:42:09.756 [DEBUG] [Thread-79512] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:42:09.812 [DEBUG] [Thread-79512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:42:09.812 [DEBUG] [Thread-79512] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:42:09.812 [DEBUG] [Thread-79512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:42:09.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:42:09.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:42:09.868 [DEBUG] [Thread-79512] [transport.py] [_log()] userauth is OK
2025-12-13T00:42:09.868 [DEBUG] [Thread-79512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:42:09.868 [DEBUG] [Thread-79512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:42:09.868 [DEBUG] [Thread-79512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:42:09.868 [DEBUG] [Thread-79512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:42:09.886 [INFO] [Thread-79512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:42:09.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:42:09.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:42:10.738 [DEBUG] [Thread-79512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:42:10.739 [DEBUG] [Thread-79512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:42:10.787 [DEBUG] [Thread-79512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:42:10.787 [DEBUG] [Thread-79512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:42:10.796 [DEBUG] [Thread-79512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:42:10.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:42:10.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:42:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:42:10.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:42:10.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:42:10.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:42:10.830 [DEBUG] [Thread-79512] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:42:21.228 [DEBUG] [Thread-79514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:26.312 [DEBUG] [Thread-79515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:36.273 [DEBUG] [Thread-79516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:42:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:42:40.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:42:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:42:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 42, 28), 1.68, 89.31, 0.0, 30.89, 8.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:42:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:42:28
2025-12-13T00:42:41.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:42:41.847 [DEBUG] [Thread-79517] [transport.py] [_log()] starting thread (client mode): 0xf5701060
2025-12-13T00:42:41.847 [DEBUG] [Thread-79517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:42:41.870 [DEBUG] [Thread-79517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:42:41.870 [INFO] [Thread-79517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] client lang: <none>
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] server lang: <none>
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] kex follows: False
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] Compression: none
2025-12-13T00:42:41.873 [DEBUG] [Thread-79517] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:42:41.889 [DEBUG] [Thread-79517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:42:41.889 [DEBUG] [Thread-79517] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:42:41.889 [DEBUG] [Thread-79517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:42:41.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:42:41.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:42:41.890 [DEBUG] [Thread-79517] [transport.py] [_log()] userauth is OK
2025-12-13T00:42:41.890 [DEBUG] [Thread-79517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:42:41.890 [DEBUG] [Thread-79517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:42:41.890 [DEBUG] [Thread-79517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:42:41.890 [DEBUG] [Thread-79517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:42:41.905 [INFO] [Thread-79517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:42:41.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:42:42.479 [DEBUG] [Thread-79517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:42:42.479 [DEBUG] [Thread-79517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:42:42.479 [DEBUG] [Thread-79517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:42:42.521 [DEBUG] [Thread-79517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:42:42.521 [DEBUG] [Thread-79517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:42:42.523 [DEBUG] [Thread-79517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:42:42.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:42:42.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:42:42.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:42:42.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:42:42.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:42:42.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:42:42.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.945930 -999.00   +8.00  40.96     90   +6.60 1 3 2 3 1     0    0 1.64 12.12 Z.ESW 45.4 41.0 313.0 52.0 9.3 -4.8 9.1 -5.3 8.9 -3.8 9.3 -3.3
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.945930
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:42:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:42:28', tmtdew=1.68, humidity=89.31, cloud=0.0, wind=30.89, temperature=8.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:42:08.352', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:40:00')
2025-12-13T00:42:42.546 [DEBUG] [Thread-79517] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:42:42.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:42:42.631 [DEBUG] [Thread-79520] [transport.py] [_log()] starting thread (client mode): 0xf5701480
2025-12-13T00:42:42.632 [DEBUG] [Thread-79520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:42:42.646 [DEBUG] [Thread-79520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:42:42.646 [INFO] [Thread-79520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] client lang: <none>
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] server lang: <none>
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] kex follows: False
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] Compression: none
2025-12-13T00:42:42.654 [DEBUG] [Thread-79520] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:42:42.711 [DEBUG] [Thread-79520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:42:42.711 [DEBUG] [Thread-79520] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:42:42.712 [DEBUG] [Thread-79520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:42:42.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:42:42.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:42:42.768 [DEBUG] [Thread-79520] [transport.py] [_log()] userauth is OK
2025-12-13T00:42:42.768 [DEBUG] [Thread-79520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:42:42.768 [DEBUG] [Thread-79520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:42:42.768 [DEBUG] [Thread-79520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:42:42.768 [DEBUG] [Thread-79520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:42:42.782 [INFO] [Thread-79520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:42:42.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:42:42.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:42:43.630 [DEBUG] [Thread-79520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:42:43.630 [DEBUG] [Thread-79520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:42:43.678 [DEBUG] [Thread-79520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:42:43.679 [DEBUG] [Thread-79520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:42:43.687 [DEBUG] [Thread-79520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:42:43.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:42:43.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:42:43.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:42:43.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:42:43.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:42:43.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:42:43.718 [DEBUG] [Thread-79520] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:42:51.300 [DEBUG] [Thread-79522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:05.227 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:05.228 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:06.342 [DEBUG] [Thread-79523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:43:13.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:43: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
2025-12-13T00:43:14.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 43), 1.68, 88.81, 0.0, 37.39, 8.12, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:43:14.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:43:00
2025-12-13T00:43:14.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:43:14.698 [DEBUG] [Thread-79524] [transport.py] [_log()] starting thread (client mode): 0xf5700910
2025-12-13T00:43:14.698 [DEBUG] [Thread-79524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:43:14.719 [DEBUG] [Thread-79524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:43:14.719 [INFO] [Thread-79524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:14.722 [DEBUG] [Thread-79524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] client lang: <none>
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] server lang: <none>
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] kex follows: False
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] Compression: none
2025-12-13T00:43:14.723 [DEBUG] [Thread-79524] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:43:14.742 [DEBUG] [Thread-79524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:43:14.742 [DEBUG] [Thread-79524] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:43:14.743 [DEBUG] [Thread-79524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:43:14.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:43:14.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:43:14.745 [DEBUG] [Thread-79524] [transport.py] [_log()] userauth is OK
2025-12-13T00:43:14.745 [DEBUG] [Thread-79524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:43:14.745 [DEBUG] [Thread-79524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:43:14.745 [DEBUG] [Thread-79524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:43:14.745 [DEBUG] [Thread-79524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:43:14.768 [INFO] [Thread-79524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:43:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:43:15.420 [DEBUG] [Thread-79524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:43:15.421 [DEBUG] [Thread-79524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:43:15.421 [DEBUG] [Thread-79524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:43:15.462 [DEBUG] [Thread-79524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:43:15.462 [DEBUG] [Thread-79524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:43:15.465 [DEBUG] [Thread-79524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:43:15.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:43:15.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:43:15.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:43:15.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:43:15.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:43:15.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:43:15.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:43:15.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:43:15.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:43:15.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.946277 -999.00   +7.90  42.98     90   +6.50 1 3 2 3 1     0    0 1.68 13.10 Z.ESW 41.6 43.0 310.2 55.5 9.3 -4.1 9.2 -5.0 8.9 -4.8 9.2 -4.4
2025-12-13T00:43:15.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:43:15.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:43:15.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.946277
2025-12-13T00:43:15.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:43:15.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:43:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:43:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:43:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:43:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:43:00', tmtdew=1.68, humidity=88.81, cloud=0.0, wind=37.39, temperature=8.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:42:38.333', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:40:00')
2025-12-13T00:43:15.493 [DEBUG] [Thread-79524] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:43:15.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:43:15.590 [DEBUG] [Thread-79527] [transport.py] [_log()] starting thread (client mode): 0xf57cbee0
2025-12-13T00:43:15.590 [DEBUG] [Thread-79527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:43:15.605 [DEBUG] [Thread-79527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:43:15.605 [INFO] [Thread-79527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:43:15.613 [DEBUG] [Thread-79527] [transport.py] [_log()] client lang: <none>
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] server lang: <none>
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] kex follows: False
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] Compression: none
2025-12-13T00:43:15.614 [DEBUG] [Thread-79527] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:43:15.671 [DEBUG] [Thread-79527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:43:15.672 [DEBUG] [Thread-79527] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:43:15.672 [DEBUG] [Thread-79527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:43:15.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:43:15.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:43:15.728 [DEBUG] [Thread-79527] [transport.py] [_log()] userauth is OK
2025-12-13T00:43:15.728 [DEBUG] [Thread-79527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:43:15.728 [DEBUG] [Thread-79527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:43:15.728 [DEBUG] [Thread-79527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:43:15.728 [DEBUG] [Thread-79527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:43:15.747 [INFO] [Thread-79527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:43:15.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:43:15.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:43:16.626 [DEBUG] [Thread-79527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:43:16.626 [DEBUG] [Thread-79527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:43:16.674 [DEBUG] [Thread-79527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:43:16.674 [DEBUG] [Thread-79527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:43:16.683 [DEBUG] [Thread-79527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:43:16.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:43:16.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:43:16.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:43:16.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:43:16.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:43:16.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:43:16.718 [DEBUG] [Thread-79527] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:43:21.368 [DEBUG] [Thread-79529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:26.391 [DEBUG] [Thread-79530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:36.411 [DEBUG] [Thread-79531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:43:46.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:43:46.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:43:46.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:43:47.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 43, 33), 1.7, 88.7, 0.0, 40.63, 8.1, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:43:47.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:43:33
2025-12-13T00:43:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:43:47.689 [DEBUG] [Thread-79532] [transport.py] [_log()] starting thread (client mode): 0xf5701240
2025-12-13T00:43:47.689 [DEBUG] [Thread-79532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:43:47.709 [DEBUG] [Thread-79532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:43:47.709 [INFO] [Thread-79532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] client lang: <none>
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] server lang: <none>
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] kex follows: False
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:43:47.713 [DEBUG] [Thread-79532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:43:47.714 [DEBUG] [Thread-79532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:43:47.714 [DEBUG] [Thread-79532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:43:47.714 [DEBUG] [Thread-79532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:43:47.714 [DEBUG] [Thread-79532] [transport.py] [_log()] Compression: none
2025-12-13T00:43:47.714 [DEBUG] [Thread-79532] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:43:47.731 [DEBUG] [Thread-79532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:43:47.731 [DEBUG] [Thread-79532] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:43:47.732 [DEBUG] [Thread-79532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:43:47.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:43:47.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:43:47.734 [DEBUG] [Thread-79532] [transport.py] [_log()] userauth is OK
2025-12-13T00:43:47.734 [DEBUG] [Thread-79532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:43:47.734 [DEBUG] [Thread-79532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:43:47.734 [DEBUG] [Thread-79532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:43:47.734 [DEBUG] [Thread-79532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:43:47.758 [INFO] [Thread-79532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:43:47.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:43:48.361 [DEBUG] [Thread-79532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:43:48.362 [DEBUG] [Thread-79532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:43:48.362 [DEBUG] [Thread-79532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:43:48.404 [DEBUG] [Thread-79532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:43:48.404 [DEBUG] [Thread-79532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:43:48.407 [DEBUG] [Thread-79532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:43:48.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:43:48.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:43:48.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:43:48.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:43:48.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:43:48.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:43:48.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:43:48.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:43:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:43:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.946625 -999.00   +8.00  37.72     90   +6.60 1 3 2 3 1     0    0 1.69 13.80 ..ES. 39.1 37.7 313.4 49.7 9.3 -5.0 9.2 -5.6 8.8 -4.6 9.3 -3.4
2025-12-13T00:43:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:43:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:43:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.946625
2025-12-13T00:43:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:43:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:43:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:43:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:43:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:43:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:43:33', tmtdew=1.7, humidity=88.7, cloud=0.0, wind=40.63, temperature=8.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:43:08.400', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:40:00')
2025-12-13T00:43:48.434 [DEBUG] [Thread-79532] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:43:48.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:43:48.532 [DEBUG] [Thread-79535] [transport.py] [_log()] starting thread (client mode): 0xf5700b50
2025-12-13T00:43:48.532 [DEBUG] [Thread-79535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:43:48.547 [DEBUG] [Thread-79535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:43:48.547 [INFO] [Thread-79535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:48.555 [DEBUG] [Thread-79535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] client lang: <none>
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] server lang: <none>
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] kex follows: False
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] Compression: none
2025-12-13T00:43:48.556 [DEBUG] [Thread-79535] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:43:48.611 [DEBUG] [Thread-79535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:43:48.611 [DEBUG] [Thread-79535] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:43:48.612 [DEBUG] [Thread-79535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:43:48.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:43:48.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:43:48.668 [DEBUG] [Thread-79535] [transport.py] [_log()] userauth is OK
2025-12-13T00:43:48.668 [DEBUG] [Thread-79535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:43:48.668 [DEBUG] [Thread-79535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:43:48.669 [DEBUG] [Thread-79535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:43:48.669 [DEBUG] [Thread-79535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:43:48.688 [INFO] [Thread-79535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:43:48.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:43:48.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:43:49.511 [DEBUG] [Thread-79535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:43:49.511 [DEBUG] [Thread-79535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:43:49.574 [DEBUG] [Thread-79535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:43:49.574 [DEBUG] [Thread-79535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:43:49.583 [DEBUG] [Thread-79535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:43:49.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:43:49.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:43:49.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:43:49.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:43:49.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:43:49.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:43:49.615 [DEBUG] [Thread-79535] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:43:51.440 [DEBUG] [Thread-79537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:05.432 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:05.432 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:06.484 [DEBUG] [Thread-79538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:44:19.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:44:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:44:20.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 44, 5), 1.72, 88.6, 0.0, 43.32, 8.12, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:44:20.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:44:05
2025-12-13T00:44:20.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:44:20.579 [DEBUG] [Thread-79539] [transport.py] [_log()] starting thread (client mode): 0xf57717b0
2025-12-13T00:44:20.579 [DEBUG] [Thread-79539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:44:20.605 [DEBUG] [Thread-79539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:44:20.605 [INFO] [Thread-79539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:44:20.607 [DEBUG] [Thread-79539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] client lang: <none>
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] server lang: <none>
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] kex follows: False
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] Compression: none
2025-12-13T00:44:20.608 [DEBUG] [Thread-79539] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:44:20.627 [DEBUG] [Thread-79539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:44:20.628 [DEBUG] [Thread-79539] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:44:20.628 [DEBUG] [Thread-79539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:44:20.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:44:20.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:44:20.630 [DEBUG] [Thread-79539] [transport.py] [_log()] userauth is OK
2025-12-13T00:44:20.630 [DEBUG] [Thread-79539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:44:20.630 [DEBUG] [Thread-79539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:44:20.631 [DEBUG] [Thread-79539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:44:20.631 [DEBUG] [Thread-79539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:44:20.654 [INFO] [Thread-79539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:44:20.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:44:21.241 [DEBUG] [Thread-79539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:44:21.242 [DEBUG] [Thread-79539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:44:21.242 [DEBUG] [Thread-79539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:44:21.283 [DEBUG] [Thread-79539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:44:21.283 [DEBUG] [Thread-79539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:44:21.286 [DEBUG] [Thread-79539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:44:21.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:44:21.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:44:21.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:44:21.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:44:21.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:44:21.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:44:21.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:44:21.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:44:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:44:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.946972 -999.00   +8.00  33.38     90   +6.60 1 3 2 3 1     0    0 1.79 15.69 ..ES. 36.4 33.4 308.6 43.7 9.4 -3.8 9.2 -4.2 8.9 -2.8 9.3 -2.4
2025-12-13T00:44:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:44:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:44:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.946972
2025-12-13T00:44:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:44:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:44:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:44:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:44:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:44:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:44:05', tmtdew=1.72, humidity=88.6, cloud=0.0, wind=43.32, temperature=8.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:43:38.381', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:43:00')
2025-12-13T00:44:21.314 [DEBUG] [Thread-79539] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:44:21.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:44:21.405 [DEBUG] [Thread-79542] [transport.py] [_log()] starting thread (client mode): 0xf8188c40
2025-12-13T00:44:21.405 [DEBUG] [Thread-79542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:44:21.420 [DEBUG] [Thread-79542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:44:21.420 [INFO] [Thread-79542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:44:21.428 [DEBUG] [Thread-79542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] client lang: <none>
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] server lang: <none>
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] kex follows: False
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] Compression: none
2025-12-13T00:44:21.429 [DEBUG] [Thread-79542] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:44:21.487 [DEBUG] [Thread-79542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:44:21.488 [DEBUG] [Thread-79542] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:44:21.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:44:21.489 [DEBUG] [Thread-79542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:44:21.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:44:21.508 [DEBUG] [Thread-79544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:21.543 [DEBUG] [Thread-79542] [transport.py] [_log()] userauth is OK
2025-12-13T00:44:21.544 [DEBUG] [Thread-79542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:44:21.544 [DEBUG] [Thread-79542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:44:21.544 [DEBUG] [Thread-79542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:44:21.544 [DEBUG] [Thread-79542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:44:21.562 [INFO] [Thread-79542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:44:21.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:44:21.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:44:22.409 [DEBUG] [Thread-79542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:44:22.409 [DEBUG] [Thread-79542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:44:22.457 [DEBUG] [Thread-79542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:44:22.457 [DEBUG] [Thread-79542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:44:22.466 [DEBUG] [Thread-79542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:44:22.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:44:22.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:44:22.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:44:22.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:44:22.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:44:22.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:44:22.501 [DEBUG] [Thread-79542] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:44:26.470 [DEBUG] [Thread-79545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:36.560 [DEBUG] [Thread-79546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:51.585 [DEBUG] [Thread-79547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:44:52.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:44:52.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:44:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:44:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 44, 37), 1.77, 88.55, 0.0, 36.34, 8.17, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:44:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:44:37
2025-12-13T00:44:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:44:53.483 [DEBUG] [Thread-79548] [transport.py] [_log()] starting thread (client mode): 0xf8189a80
2025-12-13T00:44:53.483 [DEBUG] [Thread-79548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:44:53.505 [DEBUG] [Thread-79548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:44:53.505 [INFO] [Thread-79548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] client lang: <none>
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] server lang: <none>
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] kex follows: False
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] Compression: none
2025-12-13T00:44:53.509 [DEBUG] [Thread-79548] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:44:53.527 [DEBUG] [Thread-79548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:44:53.527 [DEBUG] [Thread-79548] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:44:53.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:44:53.528 [DEBUG] [Thread-79548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:44:53.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:44:53.531 [DEBUG] [Thread-79548] [transport.py] [_log()] userauth is OK
2025-12-13T00:44:53.531 [DEBUG] [Thread-79548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:44:53.531 [DEBUG] [Thread-79548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:44:53.531 [DEBUG] [Thread-79548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:44:53.531 [DEBUG] [Thread-79548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:44:53.556 [INFO] [Thread-79548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:44:53.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:44:54.171 [DEBUG] [Thread-79548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:44:54.171 [DEBUG] [Thread-79548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:44:54.172 [DEBUG] [Thread-79548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:44:54.213 [DEBUG] [Thread-79548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:44:54.214 [DEBUG] [Thread-79548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:44:54.217 [DEBUG] [Thread-79548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:44:54.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:44:54.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:44:54.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:44:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:44:54.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:44:54.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:44:54.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:44:54.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:44:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:44:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.947319 -999.00   +8.10  35.61     90   +6.60 1 3 2 3 1     0    0 1.83 17.86 ...Sw 37.3 35.6 311.0 42.9 9.3 -2.8 9.1 -2.9 8.9 -2.6 9.3 -2.7
2025-12-13T00:44:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:44:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:44:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.947319
2025-12-13T00:44:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:44:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:44:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:44:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:44:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:44:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:44:37', tmtdew=1.77, humidity=88.55, cloud=0.0, wind=36.34, temperature=8.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:44:08.362', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:43:00')
2025-12-13T00:44:54.243 [DEBUG] [Thread-79548] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:44:54.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:44:54.337 [DEBUG] [Thread-79551] [transport.py] [_log()] starting thread (client mode): 0xf8188fd0
2025-12-13T00:44:54.338 [DEBUG] [Thread-79551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:44:54.352 [DEBUG] [Thread-79551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:44:54.353 [INFO] [Thread-79551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:44:54.360 [DEBUG] [Thread-79551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:44:54.360 [DEBUG] [Thread-79551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] client lang: <none>
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] server lang: <none>
2025-12-13T00:44:54.361 [DEBUG] [Thread-79551] [transport.py] [_log()] kex follows: False
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] Compression: none
2025-12-13T00:44:54.362 [DEBUG] [Thread-79551] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:44:54.419 [DEBUG] [Thread-79551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:44:54.420 [DEBUG] [Thread-79551] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:44:54.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:44:54.421 [DEBUG] [Thread-79551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:44:54.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:44:54.475 [DEBUG] [Thread-79551] [transport.py] [_log()] userauth is OK
2025-12-13T00:44:54.476 [DEBUG] [Thread-79551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:44:54.476 [DEBUG] [Thread-79551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:44:54.476 [DEBUG] [Thread-79551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:44:54.476 [DEBUG] [Thread-79551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:44:54.495 [INFO] [Thread-79551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:44:54.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:44:54.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:44:55.366 [DEBUG] [Thread-79551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:44:55.366 [DEBUG] [Thread-79551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:44:55.414 [DEBUG] [Thread-79551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:44:55.414 [DEBUG] [Thread-79551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:44:55.423 [DEBUG] [Thread-79551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:44:55.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:44:55.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:44:55.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:44:55.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:44:55.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:44:55.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:44:55.457 [DEBUG] [Thread-79551] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:45:05.637 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:05.638 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:06.619 [DEBUG] [Thread-79553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:21.659 [DEBUG] [Thread-79554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:25.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:45:25.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:45:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:45:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 45, 9), 1.76, 88.65, 0.0, 34.47, 8.22, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:45:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:45:09
2025-12-13T00:45:26.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:45:26.439 [DEBUG] [Thread-79555] [transport.py] [_log()] starting thread (client mode): 0xf818b610
2025-12-13T00:45:26.440 [DEBUG] [Thread-79555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:45:26.459 [DEBUG] [Thread-79555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:45:26.460 [INFO] [Thread-79555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:45:26.462 [DEBUG] [Thread-79555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] client lang: <none>
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] server lang: <none>
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] kex follows: False
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] Compression: none
2025-12-13T00:45:26.463 [DEBUG] [Thread-79555] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:45:26.479 [DEBUG] [Thread-79555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:45:26.480 [DEBUG] [Thread-79555] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:45:26.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:45:26.480 [DEBUG] [Thread-79555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:45:26.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:45:26.483 [DEBUG] [Thread-79555] [transport.py] [_log()] userauth is OK
2025-12-13T00:45:26.483 [DEBUG] [Thread-79555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:45:26.483 [DEBUG] [Thread-79555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:45:26.483 [DEBUG] [Thread-79555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:45:26.484 [DEBUG] [Thread-79555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:45:26.502 [INFO] [Thread-79555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:45:26.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:45:26.559 [DEBUG] [Thread-79557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:27.152 [DEBUG] [Thread-79555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:45:27.153 [DEBUG] [Thread-79555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:45:27.153 [DEBUG] [Thread-79555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:45:27.194 [DEBUG] [Thread-79555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:45:27.194 [DEBUG] [Thread-79555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:45:27.197 [DEBUG] [Thread-79555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:45:27.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:45:27.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:45:27.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:45:27.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:45:27.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:45:27.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:45:27.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:45:27.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:45:27.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:45:27.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.948013 -999.00   +8.00  35.43     90   +6.60 1 3 2 3 1     0    0 1.94 20.98 z.Es. 37.8 35.4 311.2 51.4 9.4 -6.2 9.1 -5.7 8.9 -4.1 9.3 -3.8
2025-12-13T00:45:27.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:45:27.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:45:27.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.948013
2025-12-13T00:45:27.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:45:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:45:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:45:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:45:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:45:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:45:09', tmtdew=1.76, humidity=88.65, cloud=0.0, wind=34.47, temperature=8.22, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:45:08.323', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:43:00')
2025-12-13T00:45:27.226 [DEBUG] [Thread-79555] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:45:27.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:45:27.326 [DEBUG] [Thread-79559] [transport.py] [_log()] starting thread (client mode): 0xf5741660
2025-12-13T00:45:27.326 [DEBUG] [Thread-79559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:45:27.343 [DEBUG] [Thread-79559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:45:27.344 [INFO] [Thread-79559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:45:27.353 [DEBUG] [Thread-79559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:45:27.353 [DEBUG] [Thread-79559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:45:27.353 [DEBUG] [Thread-79559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:45:27.353 [DEBUG] [Thread-79559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:45:27.353 [DEBUG] [Thread-79559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] client lang: <none>
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] server lang: <none>
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] kex follows: False
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:45:27.354 [DEBUG] [Thread-79559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:45:27.355 [DEBUG] [Thread-79559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:45:27.355 [DEBUG] [Thread-79559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:45:27.355 [DEBUG] [Thread-79559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:45:27.355 [DEBUG] [Thread-79559] [transport.py] [_log()] Compression: none
2025-12-13T00:45:27.355 [DEBUG] [Thread-79559] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:45:27.413 [DEBUG] [Thread-79559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:45:27.413 [DEBUG] [Thread-79559] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:45:27.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:45:27.414 [DEBUG] [Thread-79559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:45:27.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:45:27.471 [DEBUG] [Thread-79559] [transport.py] [_log()] userauth is OK
2025-12-13T00:45:27.472 [DEBUG] [Thread-79559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:45:27.472 [DEBUG] [Thread-79559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:45:27.472 [DEBUG] [Thread-79559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:45:27.472 [DEBUG] [Thread-79559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:45:27.491 [INFO] [Thread-79559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:45:27.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:45:27.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:45:28.331 [DEBUG] [Thread-79559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:45:28.331 [DEBUG] [Thread-79559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:45:28.380 [DEBUG] [Thread-79559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:45:28.380 [DEBUG] [Thread-79559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:45:28.389 [DEBUG] [Thread-79559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:45:28.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:45:28.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:45:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:45:28.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:45:28.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:45:28.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:45:28.429 [DEBUG] [Thread-79559] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:45:36.693 [DEBUG] [Thread-79561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:51.735 [DEBUG] [Thread-79562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:45:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:45:58.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:45:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:45:59.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 45, 41), 1.78, 88.55, 0.0, 38.62, 8.22, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:45:59.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:45:41
2025-12-13T00:45:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:45:59.407 [DEBUG] [Thread-79563] [transport.py] [_log()] starting thread (client mode): 0xf57023b0
2025-12-13T00:45:59.407 [DEBUG] [Thread-79563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:45:59.428 [DEBUG] [Thread-79563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:45:59.428 [INFO] [Thread-79563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] client lang: <none>
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] server lang: <none>
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] kex follows: False
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:45:59.431 [DEBUG] [Thread-79563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:45:59.432 [DEBUG] [Thread-79563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:45:59.432 [DEBUG] [Thread-79563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:45:59.432 [DEBUG] [Thread-79563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:45:59.432 [DEBUG] [Thread-79563] [transport.py] [_log()] Compression: none
2025-12-13T00:45:59.432 [DEBUG] [Thread-79563] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:45:59.448 [DEBUG] [Thread-79563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:45:59.449 [DEBUG] [Thread-79563] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:45:59.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:45:59.450 [DEBUG] [Thread-79563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:45:59.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:45:59.452 [DEBUG] [Thread-79563] [transport.py] [_log()] userauth is OK
2025-12-13T00:45:59.452 [DEBUG] [Thread-79563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:45:59.452 [DEBUG] [Thread-79563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:45:59.452 [DEBUG] [Thread-79563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:45:59.452 [DEBUG] [Thread-79563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:45:59.477 [INFO] [Thread-79563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:45:59.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:46:00.131 [DEBUG] [Thread-79563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:46:00.131 [DEBUG] [Thread-79563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:46:00.132 [DEBUG] [Thread-79563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:46:00.173 [DEBUG] [Thread-79563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:46:00.173 [DEBUG] [Thread-79563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:46:00.176 [DEBUG] [Thread-79563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:46:00.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:46:00.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:46:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:46:00.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:46:00.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:46:00.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:46:00.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:46:00.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:46:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:46:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.948361 -999.00   +8.00  45.04     90   +6.60 1 3 2 3 1     0    0 1.92 19.77 Z.... 44.5 45.0 312.0 53.7 9.4 -4.6 9.2 -4.6 8.9 -7.2 9.3 -7.7
2025-12-13T00:46:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:46:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:46:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.948361
2025-12-13T00:46:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:46:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:46:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:46:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:46:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:46:00.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:45:41', tmtdew=1.78, humidity=88.55, cloud=0.0, wind=38.62, temperature=8.22, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:45:38.390', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:43:00')
2025-12-13T00:46:00.204 [DEBUG] [Thread-79563] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:46:00.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:46:00.295 [DEBUG] [Thread-79566] [transport.py] [_log()] starting thread (client mode): 0xf5702b00
2025-12-13T00:46:00.295 [DEBUG] [Thread-79566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:46:00.311 [DEBUG] [Thread-79566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:46:00.311 [INFO] [Thread-79566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:46:00.318 [DEBUG] [Thread-79566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:46:00.318 [DEBUG] [Thread-79566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] client lang: <none>
2025-12-13T00:46:00.319 [DEBUG] [Thread-79566] [transport.py] [_log()] server lang: <none>
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] kex follows: False
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] Compression: none
2025-12-13T00:46:00.320 [DEBUG] [Thread-79566] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:46:00.375 [DEBUG] [Thread-79566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:46:00.376 [DEBUG] [Thread-79566] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:46:00.376 [DEBUG] [Thread-79566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:46:00.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:46:00.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:46:00.432 [DEBUG] [Thread-79566] [transport.py] [_log()] userauth is OK
2025-12-13T00:46:00.432 [DEBUG] [Thread-79566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:46:00.432 [DEBUG] [Thread-79566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:46:00.432 [DEBUG] [Thread-79566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:46:00.432 [DEBUG] [Thread-79566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:46:00.451 [INFO] [Thread-79566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:46:00.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:46:00.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:46:01.312 [DEBUG] [Thread-79566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:46:01.312 [DEBUG] [Thread-79566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:46:01.362 [DEBUG] [Thread-79566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:46:01.362 [DEBUG] [Thread-79566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:46:01.372 [DEBUG] [Thread-79566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:46:01.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:46:01.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:46:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:46:01.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:46:01.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:46:01.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:46:01.407 [DEBUG] [Thread-79566] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:46:05.843 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:46:05.845 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:46:06.766 [DEBUG] [Thread-79568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:46:21.807 [DEBUG] [Thread-79569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:46:26.637 [DEBUG] [Thread-79570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:46:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:46:31.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:46:31.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:46:32.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 46, 13), 1.78, 88.5, 0.0, 42.2, 8.17, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:46:32.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:46:13
2025-12-13T00:46:32.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:46:32.406 [DEBUG] [Thread-79571] [transport.py] [_log()] starting thread (client mode): 0xf8188d30
2025-12-13T00:46:32.406 [DEBUG] [Thread-79571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:46:32.426 [DEBUG] [Thread-79571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:46:32.426 [INFO] [Thread-79571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] client lang: <none>
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] server lang: <none>
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] kex follows: False
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:46:32.427 [DEBUG] [Thread-79571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:46:32.428 [DEBUG] [Thread-79571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:46:32.428 [DEBUG] [Thread-79571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:46:32.428 [DEBUG] [Thread-79571] [transport.py] [_log()] Compression: none
2025-12-13T00:46:32.428 [DEBUG] [Thread-79571] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:46:32.435 [DEBUG] [Thread-79571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:46:32.436 [DEBUG] [Thread-79571] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:46:32.436 [DEBUG] [Thread-79571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:46:32.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:46:32.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:46:32.437 [DEBUG] [Thread-79571] [transport.py] [_log()] userauth is OK
2025-12-13T00:46:32.437 [DEBUG] [Thread-79571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:46:32.437 [DEBUG] [Thread-79571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:46:32.437 [DEBUG] [Thread-79571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:46:32.437 [DEBUG] [Thread-79571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:46:32.447 [INFO] [Thread-79571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:46:32.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:46:33.047 [DEBUG] [Thread-79571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:46:33.047 [DEBUG] [Thread-79571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:46:33.047 [DEBUG] [Thread-79571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:46:33.087 [DEBUG] [Thread-79571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:46:33.087 [DEBUG] [Thread-79571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:46:33.089 [DEBUG] [Thread-79571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:46:33.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:46:33.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:46:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:46:33.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:46:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:46:33.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:46:33.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.948708 -999.00   +8.00  38.37     90   +6.60 1 2 2 3 1     0    0 1.91 19.76 ZnE.. 45.0 38.4 313.4 48.5 9.4 -9.6 9.2 -11.4 8.9 -9.8 9.3 -8.5
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.948708
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:46:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:46:13', tmtdew=1.78, humidity=88.5, cloud=0.0, wind=42.2, temperature=8.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:46:08.371', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:43:00')
2025-12-13T00:46:33.108 [DEBUG] [Thread-79571] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:46:33.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:46:33.202 [DEBUG] [Thread-79574] [transport.py] [_log()] starting thread (client mode): 0xf81889d0
2025-12-13T00:46:33.202 [DEBUG] [Thread-79574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:46:33.218 [DEBUG] [Thread-79574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:46:33.218 [INFO] [Thread-79574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] client lang: <none>
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] server lang: <none>
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] kex follows: False
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] Compression: none
2025-12-13T00:46:33.227 [DEBUG] [Thread-79574] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:46:33.284 [DEBUG] [Thread-79574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:46:33.284 [DEBUG] [Thread-79574] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:46:33.284 [DEBUG] [Thread-79574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:46:33.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:46:33.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:46:33.343 [DEBUG] [Thread-79574] [transport.py] [_log()] userauth is OK
2025-12-13T00:46:33.343 [DEBUG] [Thread-79574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:46:33.343 [DEBUG] [Thread-79574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:46:33.343 [DEBUG] [Thread-79574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:46:33.343 [DEBUG] [Thread-79574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:46:33.357 [INFO] [Thread-79574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:46:33.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:46:33.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:46:34.177 [DEBUG] [Thread-79574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:46:34.177 [DEBUG] [Thread-79574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:46:34.229 [DEBUG] [Thread-79574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:46:34.229 [DEBUG] [Thread-79574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:46:34.238 [DEBUG] [Thread-79574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:46:34.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:46:34.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:46:34.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:46:34.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:46:34.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:46:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:46:34.269 [DEBUG] [Thread-79574] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:46:36.834 [DEBUG] [Thread-79576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:46:51.872 [DEBUG] [Thread-79577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:47:04.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:47:04.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:47:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 46, 45), 1.74, 88.46, 0.0, 40.58, 8.14, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:47:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:46:45
2025-12-13T00:47:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:47:05.257 [DEBUG] [Thread-79578] [transport.py] [_log()] starting thread (client mode): 0xf8188370
2025-12-13T00:47:05.257 [DEBUG] [Thread-79578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:47:05.278 [DEBUG] [Thread-79578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:47:05.278 [INFO] [Thread-79578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] client lang: <none>
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] server lang: <none>
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] kex follows: False
2025-12-13T00:47:05.281 [DEBUG] [Thread-79578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:47:05.282 [DEBUG] [Thread-79578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:47:05.282 [DEBUG] [Thread-79578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:47:05.282 [DEBUG] [Thread-79578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:47:05.282 [DEBUG] [Thread-79578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:47:05.282 [DEBUG] [Thread-79578] [transport.py] [_log()] Compression: none
2025-12-13T00:47:05.282 [DEBUG] [Thread-79578] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:47:05.299 [DEBUG] [Thread-79578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:47:05.300 [DEBUG] [Thread-79578] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:47:05.301 [DEBUG] [Thread-79578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:47:05.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:47:05.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:47:05.303 [DEBUG] [Thread-79578] [transport.py] [_log()] userauth is OK
2025-12-13T00:47:05.303 [DEBUG] [Thread-79578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:47:05.303 [DEBUG] [Thread-79578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:47:05.303 [DEBUG] [Thread-79578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:47:05.304 [DEBUG] [Thread-79578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:47:05.335 [INFO] [Thread-79578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:47:05.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:47:05.986 [DEBUG] [Thread-79578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:47:05.986 [DEBUG] [Thread-79578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:47:05.986 [DEBUG] [Thread-79578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:47:06.028 [DEBUG] [Thread-79578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:47:06.028 [DEBUG] [Thread-79578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:47:06.031 [DEBUG] [Thread-79578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:47:06.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:47:06.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:47:06.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:47:06.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:47:06.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:47:06.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:47:06.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.949055 -999.00   +8.00  45.68     90   +6.60 1 2 2 3 1     0    0 1.89 18.44 ZnE.. 52.5 45.7 317.8 51.6 9.4 -10.6 9.2 -11.6 8.9 -9.0 9.3 -6.5
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.949055
2025-12-13T00:47:06.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:47:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:47:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:47:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:47:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:47:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:46:45', tmtdew=1.74, humidity=88.46, cloud=0.0, wind=40.58, temperature=8.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:46:38.352', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 2.2622500000000008, nan, nan, nan, nan, nan, nan, 2.226, 2.9022499999999996, 2.138, nan, nan, nan, nan, nan, nan, 3.020999999999999, 2.211249999999999, nan, nan, nan, nan, nan, 1.4800000000000004, 2.04125, 1.0475000000000003, nan, nan, nan, nan, 0.8752499999999994], zp_timestamp='2025-12-12T22:43:00')
2025-12-13T00:47:06.052 [DEBUG] [Thread-79578] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:47:06.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:06.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:06.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:47:06.137 [DEBUG] [Thread-79581] [transport.py] [_log()] starting thread (client mode): 0xf81e6590
2025-12-13T00:47:06.138 [DEBUG] [Thread-79581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:47:06.152 [DEBUG] [Thread-79581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:47:06.152 [INFO] [Thread-79581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:47:06.159 [DEBUG] [Thread-79581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] client lang: <none>
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] server lang: <none>
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] kex follows: False
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] Compression: none
2025-12-13T00:47:06.160 [DEBUG] [Thread-79581] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:47:06.220 [DEBUG] [Thread-79581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:47:06.221 [DEBUG] [Thread-79581] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:47:06.222 [DEBUG] [Thread-79581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:47:06.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:47:06.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:47:06.276 [DEBUG] [Thread-79581] [transport.py] [_log()] userauth is OK
2025-12-13T00:47:06.276 [DEBUG] [Thread-79581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:47:06.276 [DEBUG] [Thread-79581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:47:06.276 [DEBUG] [Thread-79581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:47:06.277 [DEBUG] [Thread-79581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:47:06.298 [INFO] [Thread-79581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:47:06.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:47:06.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:47:06.902 [DEBUG] [Thread-79583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:07.120 [DEBUG] [Thread-79581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:47:07.120 [DEBUG] [Thread-79581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:47:07.169 [DEBUG] [Thread-79581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:47:07.170 [DEBUG] [Thread-79581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:47:07.179 [DEBUG] [Thread-79581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:47:07.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:47:07.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:47:07.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:47:07.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:47:07.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:47:07.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:47:07.214 [DEBUG] [Thread-79581] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:47:21.943 [DEBUG] [Thread-79584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:26.712 [DEBUG] [Thread-79585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:36.975 [DEBUG] [Thread-79586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:47:37.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:47:37.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:47:37.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:47:37.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 47, 17), 1.74, 88.46, 0.0, 38.23, 8.1, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:47:37.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:47:17
2025-12-13T00:47:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:47:38.189 [DEBUG] [Thread-79587] [transport.py] [_log()] starting thread (client mode): 0xf818a980
2025-12-13T00:47:38.189 [DEBUG] [Thread-79587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:47:38.210 [DEBUG] [Thread-79587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:47:38.211 [INFO] [Thread-79587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] client lang: <none>
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] server lang: <none>
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] kex follows: False
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] Compression: none
2025-12-13T00:47:38.214 [DEBUG] [Thread-79587] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:47:38.232 [DEBUG] [Thread-79587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:47:38.232 [DEBUG] [Thread-79587] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:47:38.232 [DEBUG] [Thread-79587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:47:38.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:47:38.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:47:38.234 [DEBUG] [Thread-79587] [transport.py] [_log()] userauth is OK
2025-12-13T00:47:38.235 [DEBUG] [Thread-79587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:47:38.235 [DEBUG] [Thread-79587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:47:38.235 [DEBUG] [Thread-79587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:47:38.235 [DEBUG] [Thread-79587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:47:38.269 [INFO] [Thread-79587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:47:38.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:47:38.925 [DEBUG] [Thread-79587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:47:38.925 [DEBUG] [Thread-79587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:47:38.925 [DEBUG] [Thread-79587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:47:38.966 [DEBUG] [Thread-79587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:47:38.966 [DEBUG] [Thread-79587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:47:38.969 [DEBUG] [Thread-79587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:47:38.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:47:38.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:47:38.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:47:38.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:47:38.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:47:38.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:47:38.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:47:38.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:47:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:47:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.949402 -999.00   +8.00  38.75     90   +6.50 1 3 2 3 1     0    0 1.97 20.41 z.ESw 46.1 38.8 315.1 52.9 9.4 -7.0 9.1 -7.7 8.9 -4.5 9.2 -4.0
2025-12-13T00:47:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:47:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:47:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.949402
2025-12-13T00:47:38.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:47:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:47:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:47:38.994 [DEBUG] [Thread-79587] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:47:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:47:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:47:38.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:47:17', tmtdew=1.74, humidity=88.46, cloud=0.0, wind=38.23, temperature=8.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:47:08.333', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.7812500000000009, 1.6982500000000007, nan, nan, nan, nan, nan, 2.757999999999999, 1.3510000000000009, nan, nan, nan, nan, nan, nan, 2.82325, 1.9169999999999998, 1.4944999999999986, nan, nan, nan, nan, nan, nan, 1.6565000000000003, 0.9477500000000001, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T22:46:00')
2025-12-13T00:47:39.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:47:39.091 [DEBUG] [Thread-79590] [transport.py] [_log()] starting thread (client mode): 0xf81899c0
2025-12-13T00:47:39.091 [DEBUG] [Thread-79590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:47:39.109 [DEBUG] [Thread-79590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:47:39.109 [INFO] [Thread-79590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:47:39.116 [DEBUG] [Thread-79590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:47:39.116 [DEBUG] [Thread-79590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:47:39.116 [DEBUG] [Thread-79590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:47:39.116 [DEBUG] [Thread-79590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:39.116 [DEBUG] [Thread-79590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:47:39.116 [DEBUG] [Thread-79590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] client lang: <none>
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] server lang: <none>
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] kex follows: False
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] Compression: none
2025-12-13T00:47:39.117 [DEBUG] [Thread-79590] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:47:39.175 [DEBUG] [Thread-79590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:47:39.176 [DEBUG] [Thread-79590] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:47:39.176 [DEBUG] [Thread-79590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:47:39.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:47:39.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:47:39.232 [DEBUG] [Thread-79590] [transport.py] [_log()] userauth is OK
2025-12-13T00:47:39.232 [DEBUG] [Thread-79590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:47:39.232 [DEBUG] [Thread-79590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:47:39.232 [DEBUG] [Thread-79590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:47:39.232 [DEBUG] [Thread-79590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:47:39.248 [INFO] [Thread-79590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:47:39.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:47:39.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:47:40.095 [DEBUG] [Thread-79590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:47:40.095 [DEBUG] [Thread-79590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:47:40.143 [DEBUG] [Thread-79590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:47:40.143 [DEBUG] [Thread-79590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:47:40.152 [DEBUG] [Thread-79590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:47:40.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:47:40.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:47:40.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:47:40.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:47:40.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:47:40.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:47:40.188 [DEBUG] [Thread-79590] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:47:52.004 [DEBUG] [Thread-79592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:06.272 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:06.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:07.042 [DEBUG] [Thread-79593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:10.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:48:10.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:48:10.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:48:10.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 47, 49), 1.86, 88.33, 0.0, 46.24, 8.09, 1, 1, 0, 2, 1, 0),)
2025-12-13T00:48:10.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:47:49
2025-12-13T00:48:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:48:11.150 [DEBUG] [Thread-79594] [transport.py] [_log()] starting thread (client mode): 0xf578a650
2025-12-13T00:48:11.150 [DEBUG] [Thread-79594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:48:11.170 [DEBUG] [Thread-79594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:48:11.170 [INFO] [Thread-79594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:11.173 [DEBUG] [Thread-79594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] client lang: <none>
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] server lang: <none>
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] kex follows: False
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] Compression: none
2025-12-13T00:48:11.174 [DEBUG] [Thread-79594] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:48:11.192 [DEBUG] [Thread-79594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:48:11.193 [DEBUG] [Thread-79594] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:48:11.193 [DEBUG] [Thread-79594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:48:11.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:48:11.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:48:11.195 [DEBUG] [Thread-79594] [transport.py] [_log()] userauth is OK
2025-12-13T00:48:11.195 [DEBUG] [Thread-79594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:48:11.195 [DEBUG] [Thread-79594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:48:11.195 [DEBUG] [Thread-79594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:48:11.196 [DEBUG] [Thread-79594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:48:11.214 [INFO] [Thread-79594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:48:11.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:48:11.833 [DEBUG] [Thread-79594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:48:11.833 [DEBUG] [Thread-79594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:48:11.834 [DEBUG] [Thread-79594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:48:11.875 [DEBUG] [Thread-79594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:48:11.875 [DEBUG] [Thread-79594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:48:11.878 [DEBUG] [Thread-79594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:48:11.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:48:11.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:48:11.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:48:11.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:48:11.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:48:11.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:48:11.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:48:11.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:48:11.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:48:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.949749 -999.00   +8.00  39.21     90   +6.50 1 3 2 3 1     0    0 1.95 20.08 Z.E.. 43.5 39.2 312.4 51.0 9.3 -5.5 9.1 -5.6 8.8 -3.8 9.2 -3.3
2025-12-13T00:48:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:48:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:48:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.949749
2025-12-13T00:48:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:48:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:48:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:48:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:48:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:48:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:47:49', tmtdew=1.86, humidity=88.33, cloud=0.0, wind=46.24, temperature=8.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:47:38.314', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.7812500000000009, 1.6982500000000007, nan, nan, nan, nan, nan, 2.757999999999999, 1.3510000000000009, nan, nan, nan, nan, nan, nan, 2.82325, 1.9169999999999998, 1.4944999999999986, nan, nan, nan, nan, nan, nan, 1.6565000000000003, 0.9477500000000001, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T22:46:00')
2025-12-13T00:48:11.907 [DEBUG] [Thread-79594] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:48:11.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:48:12.003 [DEBUG] [Thread-79597] [transport.py] [_log()] starting thread (client mode): 0xfabc5e10
2025-12-13T00:48:12.003 [DEBUG] [Thread-79597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:48:12.017 [DEBUG] [Thread-79597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:48:12.018 [INFO] [Thread-79597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] client lang: <none>
2025-12-13T00:48:12.025 [DEBUG] [Thread-79597] [transport.py] [_log()] server lang: <none>
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] kex follows: False
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] Compression: none
2025-12-13T00:48:12.026 [DEBUG] [Thread-79597] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:48:12.083 [DEBUG] [Thread-79597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:48:12.084 [DEBUG] [Thread-79597] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:48:12.084 [DEBUG] [Thread-79597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:48:12.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:48:12.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:48:12.140 [DEBUG] [Thread-79597] [transport.py] [_log()] userauth is OK
2025-12-13T00:48:12.140 [DEBUG] [Thread-79597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:48:12.140 [DEBUG] [Thread-79597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:48:12.140 [DEBUG] [Thread-79597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:48:12.140 [DEBUG] [Thread-79597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:48:12.159 [INFO] [Thread-79597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:48:12.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:48:12.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:48:12.975 [DEBUG] [Thread-79597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:48:12.975 [DEBUG] [Thread-79597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:48:13.024 [DEBUG] [Thread-79597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:48:13.024 [DEBUG] [Thread-79597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:48:13.032 [DEBUG] [Thread-79597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:48:13.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:48:13.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:48:13.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:48:13.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:48:13.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:48:13.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:48:13.070 [DEBUG] [Thread-79597] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:48:22.076 [DEBUG] [Thread-79599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:26.786 [DEBUG] [Thread-79600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:37.113 [DEBUG] [Thread-79601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:48:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:48:43.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:48:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:48:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 48, 21), 1.86, 88.33, 0.0, 46.39, 8.1, 1, 1, 0, 2, 1, 0),)
2025-12-13T00:48:43.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:48:21
2025-12-13T00:48:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:48:44.042 [DEBUG] [Thread-79602] [transport.py] [_log()] starting thread (client mode): 0xf57000a0
2025-12-13T00:48:44.043 [DEBUG] [Thread-79602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:48:44.064 [DEBUG] [Thread-79602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:48:44.064 [INFO] [Thread-79602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:48:44.067 [DEBUG] [Thread-79602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:48:44.067 [DEBUG] [Thread-79602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] client lang: <none>
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] server lang: <none>
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] kex follows: False
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:48:44.068 [DEBUG] [Thread-79602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:48:44.069 [DEBUG] [Thread-79602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:48:44.069 [DEBUG] [Thread-79602] [transport.py] [_log()] Compression: none
2025-12-13T00:48:44.069 [DEBUG] [Thread-79602] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:48:44.084 [DEBUG] [Thread-79602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:48:44.084 [DEBUG] [Thread-79602] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:48:44.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:48:44.085 [DEBUG] [Thread-79602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:48:44.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:48:44.087 [DEBUG] [Thread-79602] [transport.py] [_log()] userauth is OK
2025-12-13T00:48:44.087 [DEBUG] [Thread-79602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:48:44.087 [DEBUG] [Thread-79602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:48:44.087 [DEBUG] [Thread-79602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:48:44.087 [DEBUG] [Thread-79602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:48:44.122 [INFO] [Thread-79602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:48:44.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:48:44.788 [DEBUG] [Thread-79602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:48:44.788 [DEBUG] [Thread-79602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:48:44.788 [DEBUG] [Thread-79602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:48:44.829 [DEBUG] [Thread-79602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:48:44.829 [DEBUG] [Thread-79602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:48:44.832 [DEBUG] [Thread-79602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:48:44.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:48:44.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:48:44.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:48:44.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:48:44.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:48:44.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:48:44.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:48:44.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:48:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:48:44.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.950444 -999.00   +7.90  40.05     90   +6.50 1 3 2 3 1     0    0 1.95 20.21 ..E.. 42.2 40.0 307.8 50.5 9.4 -3.2 9.1 -3.1 8.9 -2.5 9.3 -2.3
2025-12-13T00:48:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:48:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:48:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.950444
2025-12-13T00:48:44.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:48:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:48:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:48:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:48:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:48:44.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:48:21', tmtdew=1.86, humidity=88.33, cloud=0.0, wind=46.39, temperature=8.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:48:38.362', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.7812500000000009, 1.6982500000000007, nan, nan, nan, nan, nan, 2.757999999999999, 1.3510000000000009, nan, nan, nan, nan, nan, nan, 2.82325, 1.9169999999999998, 1.4944999999999986, nan, nan, nan, nan, nan, nan, 1.6565000000000003, 0.9477500000000001, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T22:46:00')
2025-12-13T00:48:44.858 [DEBUG] [Thread-79602] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:48:44.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:48:44.959 [DEBUG] [Thread-79605] [transport.py] [_log()] starting thread (client mode): 0xf5741660
2025-12-13T00:48:44.959 [DEBUG] [Thread-79605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:48:44.973 [DEBUG] [Thread-79605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:48:44.973 [INFO] [Thread-79605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:44.981 [DEBUG] [Thread-79605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] client lang: <none>
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] server lang: <none>
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] kex follows: False
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:48:44.982 [DEBUG] [Thread-79605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:48:44.983 [DEBUG] [Thread-79605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:48:44.983 [DEBUG] [Thread-79605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:48:44.983 [DEBUG] [Thread-79605] [transport.py] [_log()] Compression: none
2025-12-13T00:48:44.983 [DEBUG] [Thread-79605] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:48:45.040 [DEBUG] [Thread-79605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:48:45.041 [DEBUG] [Thread-79605] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:48:45.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:48:45.042 [DEBUG] [Thread-79605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:48:45.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:48:45.096 [DEBUG] [Thread-79605] [transport.py] [_log()] userauth is OK
2025-12-13T00:48:45.096 [DEBUG] [Thread-79605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:48:45.096 [DEBUG] [Thread-79605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:48:45.096 [DEBUG] [Thread-79605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:48:45.096 [DEBUG] [Thread-79605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:48:45.115 [INFO] [Thread-79605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:48:45.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:48:45.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:48:45.909 [DEBUG] [Thread-79605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:48:45.909 [DEBUG] [Thread-79605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:48:45.957 [DEBUG] [Thread-79605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:48:45.957 [DEBUG] [Thread-79605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:48:45.966 [DEBUG] [Thread-79605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:48:45.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:48: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')
2025-12-13T00:48: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
2025-12-13T00:48:45.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:48:45.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:48:45.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:48:46.001 [DEBUG] [Thread-79605] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:48:52.141 [DEBUG] [Thread-79607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:06.477 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:06.478 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:07.187 [DEBUG] [Thread-79608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:49:16.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:49:16.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
2025-12-13T00:49:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 48, 53), 1.8, 88.36, 0.0, 42.82, 8.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:49:16.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:48:53
2025-12-13T00:49:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:49:16.986 [DEBUG] [Thread-79609] [transport.py] [_log()] starting thread (client mode): 0xf8189150
2025-12-13T00:49:16.986 [DEBUG] [Thread-79609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:49:17.006 [DEBUG] [Thread-79609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:49:17.006 [INFO] [Thread-79609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:49:17.009 [DEBUG] [Thread-79609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:49:17.009 [DEBUG] [Thread-79609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] client lang: <none>
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] server lang: <none>
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] kex follows: False
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] Compression: none
2025-12-13T00:49:17.010 [DEBUG] [Thread-79609] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:49:17.027 [DEBUG] [Thread-79609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:49:17.028 [DEBUG] [Thread-79609] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:49:17.029 [DEBUG] [Thread-79609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:49:17.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:49:17.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:49:17.030 [DEBUG] [Thread-79609] [transport.py] [_log()] userauth is OK
2025-12-13T00:49:17.031 [DEBUG] [Thread-79609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:49:17.031 [DEBUG] [Thread-79609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:49:17.031 [DEBUG] [Thread-79609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:49:17.031 [DEBUG] [Thread-79609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:49:17.055 [INFO] [Thread-79609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:49:17.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:49:17.660 [DEBUG] [Thread-79609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:49:17.660 [DEBUG] [Thread-79609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:49:17.661 [DEBUG] [Thread-79609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:49:17.702 [DEBUG] [Thread-79609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:49:17.702 [DEBUG] [Thread-79609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:49:17.710 [DEBUG] [Thread-79609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:49:17.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:49:17.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:49:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:49:17.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:49:17.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:49:17.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:49:17.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:49:17.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:49:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:49:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.950791 -999.00   +8.00  32.41     90   +6.60 1 3 2 3 1     0    0 1.95 21.19 ----- 33.3 32.4 312.8 44.8 9.4 -2.9 9.2 -2.8 8.9 -2.4 9.3 -2.3
2025-12-13T00:49:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:49:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:49:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.950791
2025-12-13T00:49:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:49:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:49:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:49:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:49:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:49:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:48:53', tmtdew=1.8, humidity=88.36, cloud=0.0, wind=42.82, temperature=8.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:49:08.342', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.7812500000000009, 1.6982500000000007, nan, nan, nan, nan, nan, 2.757999999999999, 1.3510000000000009, nan, nan, nan, nan, nan, nan, 2.82325, 1.9169999999999998, 1.4944999999999986, nan, nan, nan, nan, nan, nan, 1.6565000000000003, 0.9477500000000001, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T22:46:00')
2025-12-13T00:49:17.729 [DEBUG] [Thread-79609] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:49:17.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:49:17.826 [DEBUG] [Thread-79612] [transport.py] [_log()] starting thread (client mode): 0xf81e7a00
2025-12-13T00:49:17.826 [DEBUG] [Thread-79612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:49:17.840 [DEBUG] [Thread-79612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:49:17.840 [INFO] [Thread-79612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:17.848 [DEBUG] [Thread-79612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] client lang: <none>
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] server lang: <none>
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] kex follows: False
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] Compression: none
2025-12-13T00:49:17.849 [DEBUG] [Thread-79612] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:49:17.907 [DEBUG] [Thread-79612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:49:17.908 [DEBUG] [Thread-79612] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:49:17.908 [DEBUG] [Thread-79612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:49:17.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:49:17.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:49:17.964 [DEBUG] [Thread-79612] [transport.py] [_log()] userauth is OK
2025-12-13T00:49:17.964 [DEBUG] [Thread-79612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:49:17.964 [DEBUG] [Thread-79612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:49:17.964 [DEBUG] [Thread-79612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:49:17.964 [DEBUG] [Thread-79612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:49:17.982 [INFO] [Thread-79612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:49:17.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:49:17.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:49:18.804 [DEBUG] [Thread-79612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:49:18.805 [DEBUG] [Thread-79612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:49:18.852 [DEBUG] [Thread-79612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:49:18.853 [DEBUG] [Thread-79612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:49:18.861 [DEBUG] [Thread-79612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:49:18.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:49:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:49:18.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:49:18.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:49:18.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:49:18.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:49:18.902 [DEBUG] [Thread-79612] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:49:22.218 [DEBUG] [Thread-79614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:26.856 [DEBUG] [Thread-79615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:37.260 [DEBUG] [Thread-79616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:49:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:49:48.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:49:48.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:49:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 49, 25), 1.79, 88.43, 0.0, 43.0, 8.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:49:49.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:49:25
2025-12-13T00:49:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:49:49.934 [DEBUG] [Thread-79617] [transport.py] [_log()] starting thread (client mode): 0xf81e7a90
2025-12-13T00:49:49.934 [DEBUG] [Thread-79617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:49:49.956 [DEBUG] [Thread-79617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:49:49.956 [INFO] [Thread-79617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] client lang: <none>
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] server lang: <none>
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] kex follows: False
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] Compression: none
2025-12-13T00:49:49.957 [DEBUG] [Thread-79617] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:49:49.973 [DEBUG] [Thread-79617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:49:49.973 [DEBUG] [Thread-79617] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:49:49.973 [DEBUG] [Thread-79617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:49:49.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:49:49.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:49:49.974 [DEBUG] [Thread-79617] [transport.py] [_log()] userauth is OK
2025-12-13T00:49:49.974 [DEBUG] [Thread-79617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:49:49.974 [DEBUG] [Thread-79617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:49:49.974 [DEBUG] [Thread-79617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:49:49.974 [DEBUG] [Thread-79617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:49:49.990 [INFO] [Thread-79617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:49:49.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:49:50.583 [DEBUG] [Thread-79617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:49:50.583 [DEBUG] [Thread-79617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:49:50.583 [DEBUG] [Thread-79617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:49:50.624 [DEBUG] [Thread-79617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:49:50.624 [DEBUG] [Thread-79617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:49:50.625 [DEBUG] [Thread-79617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:49:50.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:49:50.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:49:50.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:49:50.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:49:50.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:49:50.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:49:50.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.951138 -999.00   +7.90  47.04     90   +6.50 1 3 2 3 1     0    0 2.00 21.62 ----- 48.8 47.0 315.8 55.8 9.3 -3.0 9.2 -2.9 8.9 -3.7 9.2 -6.0
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.951138
2025-12-13T00:49:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:49:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:49:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:49:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:49:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:49:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:49:25', tmtdew=1.79, humidity=88.43, cloud=0.0, wind=43.0, temperature=8.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:49:38.323', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 1.7812500000000009, 1.6982500000000007, nan, nan, nan, nan, nan, 2.757999999999999, 1.3510000000000009, nan, nan, nan, nan, nan, nan, 2.82325, 1.9169999999999998, 1.4944999999999986, nan, nan, nan, nan, nan, nan, 1.6565000000000003, 0.9477500000000001, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T22:46:00')
2025-12-13T00:49:50.645 [DEBUG] [Thread-79617] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:49:50.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:49:50.731 [DEBUG] [Thread-79620] [transport.py] [_log()] starting thread (client mode): 0xf575c820
2025-12-13T00:49:50.731 [DEBUG] [Thread-79620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:49:50.748 [DEBUG] [Thread-79620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:49:50.749 [INFO] [Thread-79620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] client lang: <none>
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] server lang: <none>
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] kex follows: False
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:49:50.756 [DEBUG] [Thread-79620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:49:50.757 [DEBUG] [Thread-79620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:49:50.757 [DEBUG] [Thread-79620] [transport.py] [_log()] Compression: none
2025-12-13T00:49:50.757 [DEBUG] [Thread-79620] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:49:50.816 [DEBUG] [Thread-79620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:49:50.816 [DEBUG] [Thread-79620] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:49:50.817 [DEBUG] [Thread-79620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:49:50.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:49:50.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:49:50.871 [DEBUG] [Thread-79620] [transport.py] [_log()] userauth is OK
2025-12-13T00:49:50.871 [DEBUG] [Thread-79620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:49:50.871 [DEBUG] [Thread-79620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:49:50.871 [DEBUG] [Thread-79620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:49:50.871 [DEBUG] [Thread-79620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:49:50.885 [INFO] [Thread-79620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:49:50.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:49:50.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:49:51.696 [DEBUG] [Thread-79620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:49:51.696 [DEBUG] [Thread-79620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:49:51.743 [DEBUG] [Thread-79620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:49:51.743 [DEBUG] [Thread-79620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:49:51.752 [DEBUG] [Thread-79620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:49:51.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:49:51.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:49:51.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:49:51.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:49:51.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:49:51.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:49:51.784 [DEBUG] [Thread-79620] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:49:52.284 [DEBUG] [Thread-79622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:06.681 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:06.682 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:07.316 [DEBUG] [Thread-79623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:21.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:50:21.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:50:21.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:50:22.344 [DEBUG] [Thread-79624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:22.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 49, 57), 1.8, 88.41, 0.0, 38.73, 8.14, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:50:22.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:49:57
2025-12-13T00:50:22.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:50:22.781 [DEBUG] [Thread-79625] [transport.py] [_log()] starting thread (client mode): 0xf575cca0
2025-12-13T00:50:22.781 [DEBUG] [Thread-79625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:50:22.801 [DEBUG] [Thread-79625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:50:22.801 [INFO] [Thread-79625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] client lang: <none>
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] server lang: <none>
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] kex follows: False
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] Compression: none
2025-12-13T00:50:22.804 [DEBUG] [Thread-79625] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:50:22.821 [DEBUG] [Thread-79625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:50:22.822 [DEBUG] [Thread-79625] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:50:22.822 [DEBUG] [Thread-79625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:50:22.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:50:22.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:50:22.824 [DEBUG] [Thread-79625] [transport.py] [_log()] userauth is OK
2025-12-13T00:50:22.824 [DEBUG] [Thread-79625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:50:22.824 [DEBUG] [Thread-79625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:50:22.824 [DEBUG] [Thread-79625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:50:22.824 [DEBUG] [Thread-79625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:50:22.843 [INFO] [Thread-79625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:50:22.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:50:23.433 [DEBUG] [Thread-79625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:50:23.434 [DEBUG] [Thread-79625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:50:23.434 [DEBUG] [Thread-79625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:50:23.475 [DEBUG] [Thread-79625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:50:23.475 [DEBUG] [Thread-79625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:50:23.478 [DEBUG] [Thread-79625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:50:23.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:50:23.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:50:23.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:50:23.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:50:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:50:23.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:50:23.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:50:23.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:50:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:50:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.951485 -999.00   +7.90  45.01     91   +6.50 1 3 2 3 1     0    0 1.92 19.84 ----- 43.3 45.0 313.0 54.7 9.4 -8.5 9.1 -6.5 8.9 -5.6 9.2 -4.9
2025-12-13T00:50:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:50:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:50:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.951485
2025-12-13T00:50:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:50:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:50:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:50:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:50:23.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:50:23.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:49:57', tmtdew=1.8, humidity=88.41, cloud=0.0, wind=38.73, temperature=8.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:50:08.304', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:47:00')
2025-12-13T00:50:23.502 [DEBUG] [Thread-79625] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:50:23.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:50:23.597 [DEBUG] [Thread-79628] [transport.py] [_log()] starting thread (client mode): 0xf81e6e60
2025-12-13T00:50:23.597 [DEBUG] [Thread-79628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:50:23.611 [DEBUG] [Thread-79628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:50:23.612 [INFO] [Thread-79628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:50:23.619 [DEBUG] [Thread-79628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:50:23.619 [DEBUG] [Thread-79628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:50:23.619 [DEBUG] [Thread-79628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:50:23.619 [DEBUG] [Thread-79628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:23.619 [DEBUG] [Thread-79628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:23.619 [DEBUG] [Thread-79628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] client lang: <none>
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] server lang: <none>
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] kex follows: False
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] Compression: none
2025-12-13T00:50:23.620 [DEBUG] [Thread-79628] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:50:23.675 [DEBUG] [Thread-79628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:50:23.675 [DEBUG] [Thread-79628] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:50:23.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:50:23.676 [DEBUG] [Thread-79628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:50:23.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:50:23.732 [DEBUG] [Thread-79628] [transport.py] [_log()] userauth is OK
2025-12-13T00:50:23.732 [DEBUG] [Thread-79628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:50:23.732 [DEBUG] [Thread-79628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:50:23.732 [DEBUG] [Thread-79628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:50:23.732 [DEBUG] [Thread-79628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:50:23.750 [INFO] [Thread-79628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:50:23.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:50:23.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:50:24.586 [DEBUG] [Thread-79628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:50:24.586 [DEBUG] [Thread-79628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:50:24.634 [DEBUG] [Thread-79628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:50:24.634 [DEBUG] [Thread-79628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:50:24.643 [DEBUG] [Thread-79628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:50:24.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:50:24.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:50:24.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:50:24.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:50:24.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:50:24.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:50:24.677 [DEBUG] [Thread-79628] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:50:26.931 [DEBUG] [Thread-79630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:37.369 [DEBUG] [Thread-79631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:52.413 [DEBUG] [Thread-79632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:50:54.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:50:54.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:50:54.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:50:55.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 50, 29), 1.78, 88.5, 0.0, 38.15, 8.14, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:50:55.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:50:29
2025-12-13T00:50:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:50:55.666 [DEBUG] [Thread-79633] [transport.py] [_log()] starting thread (client mode): 0xfabc5c60
2025-12-13T00:50:55.666 [DEBUG] [Thread-79633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:50:55.686 [DEBUG] [Thread-79633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:50:55.686 [INFO] [Thread-79633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:50:55.689 [DEBUG] [Thread-79633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:50:55.689 [DEBUG] [Thread-79633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:50:55.689 [DEBUG] [Thread-79633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:50:55.689 [DEBUG] [Thread-79633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] client lang: <none>
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] server lang: <none>
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] kex follows: False
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] Compression: none
2025-12-13T00:50:55.690 [DEBUG] [Thread-79633] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:50:55.707 [DEBUG] [Thread-79633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:50:55.708 [DEBUG] [Thread-79633] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:50:55.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:50:55.709 [DEBUG] [Thread-79633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:50:55.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:50:55.711 [DEBUG] [Thread-79633] [transport.py] [_log()] userauth is OK
2025-12-13T00:50:55.711 [DEBUG] [Thread-79633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:50:55.711 [DEBUG] [Thread-79633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:50:55.711 [DEBUG] [Thread-79633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:50:55.712 [DEBUG] [Thread-79633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:50:55.748 [INFO] [Thread-79633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:50:55.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:50:56.361 [DEBUG] [Thread-79633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:50:56.361 [DEBUG] [Thread-79633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:50:56.361 [DEBUG] [Thread-79633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:50:56.402 [DEBUG] [Thread-79633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:50:56.402 [DEBUG] [Thread-79633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:50:56.405 [DEBUG] [Thread-79633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:50:56.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:50:56.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:50:56.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:50:56.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:50:56.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:50:56.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:50:56.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:50:56.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:50:56.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:50:56.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.951485 -999.00   +7.90  45.01     91   +6.50 1 3 2 3 1     0    0 1.92 19.84 ----- 43.3 45.0 313.0 54.7 9.4 -8.5 9.1 -6.5 8.9 -5.6 9.2 -4.9
2025-12-13T00:50:56.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:50:56.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:50:56.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.951485
2025-12-13T00:50:56.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:50:56.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:50:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:50:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:50:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:50:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:50:29', tmtdew=1.78, humidity=88.5, cloud=0.0, wind=38.15, temperature=8.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:50:08.304', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:47:00')
2025-12-13T00:50:56.429 [DEBUG] [Thread-79633] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:50:56.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:50:56.525 [DEBUG] [Thread-79636] [transport.py] [_log()] starting thread (client mode): 0xfabc6bc0
2025-12-13T00:50:56.526 [DEBUG] [Thread-79636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:50:56.541 [DEBUG] [Thread-79636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:50:56.541 [INFO] [Thread-79636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] client lang: <none>
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] server lang: <none>
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] kex follows: False
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:50:56.549 [DEBUG] [Thread-79636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:50:56.550 [DEBUG] [Thread-79636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:50:56.550 [DEBUG] [Thread-79636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:50:56.550 [DEBUG] [Thread-79636] [transport.py] [_log()] Compression: none
2025-12-13T00:50:56.550 [DEBUG] [Thread-79636] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:50:56.607 [DEBUG] [Thread-79636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:50:56.608 [DEBUG] [Thread-79636] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:50:56.608 [DEBUG] [Thread-79636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:50:56.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:50:56.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:50:56.664 [DEBUG] [Thread-79636] [transport.py] [_log()] userauth is OK
2025-12-13T00:50:56.664 [DEBUG] [Thread-79636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:50:56.664 [DEBUG] [Thread-79636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:50:56.664 [DEBUG] [Thread-79636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:50:56.664 [DEBUG] [Thread-79636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:50:56.683 [INFO] [Thread-79636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:50:56.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:50:56.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:50:57.504 [DEBUG] [Thread-79636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:50:57.504 [DEBUG] [Thread-79636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:50:57.552 [DEBUG] [Thread-79636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:50:57.552 [DEBUG] [Thread-79636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:50:57.561 [DEBUG] [Thread-79636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:50:57.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:50: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')
2025-12-13T00:50:57.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:50:57.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:50:57.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:50:57.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:50:57.595 [DEBUG] [Thread-79636] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:51:06.889 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:51:06.890 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:51:07.440 [DEBUG] [Thread-79638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:51:22.473 [DEBUG] [Thread-79639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:51:27.004 [DEBUG] [Thread-79640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:51:27.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:51:27.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:51:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:51:28.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 51, 1), 1.78, 88.51, 0.0, 38.71, 8.12, 1, 1, 0, 2, 0, 0),)
2025-12-13T00:51:28.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:51:01
2025-12-13T00:51:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:51:28.589 [DEBUG] [Thread-79641] [transport.py] [_log()] starting thread (client mode): 0xf572f8e0
2025-12-13T00:51:28.589 [DEBUG] [Thread-79641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:51:28.609 [DEBUG] [Thread-79641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:51:28.609 [INFO] [Thread-79641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:51:28.612 [DEBUG] [Thread-79641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:51:28.612 [DEBUG] [Thread-79641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:51:28.612 [DEBUG] [Thread-79641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] client lang: <none>
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] server lang: <none>
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] kex follows: False
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] Compression: none
2025-12-13T00:51:28.613 [DEBUG] [Thread-79641] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:51:28.629 [DEBUG] [Thread-79641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:51:28.630 [DEBUG] [Thread-79641] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:51:28.630 [DEBUG] [Thread-79641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:51:28.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:51:28.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:51:28.632 [DEBUG] [Thread-79641] [transport.py] [_log()] userauth is OK
2025-12-13T00:51:28.632 [DEBUG] [Thread-79641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:51:28.632 [DEBUG] [Thread-79641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:51:28.632 [DEBUG] [Thread-79641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:51:28.633 [DEBUG] [Thread-79641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:51:28.655 [INFO] [Thread-79641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:51:28.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:51:29.305 [DEBUG] [Thread-79641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:51:29.305 [DEBUG] [Thread-79641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:51:29.305 [DEBUG] [Thread-79641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:51:29.346 [DEBUG] [Thread-79641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:51:29.346 [DEBUG] [Thread-79641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:51:29.349 [DEBUG] [Thread-79641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:51:29.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:51:29.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:51:29.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:51:29.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:51:29.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:51:29.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:51:29.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:51:29.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:51:29.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:51:29.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.951833 -999.00   +8.00  38.57     91   +6.60 1 3 2 3 1     0    0 1.94 19.55 ----- 40.6 38.6 311.0 48.5 9.4 -4.4 9.1 -3.6 8.9 -3.0 9.2 -2.9
2025-12-13T00:51:29.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:51:29.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:51:29.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.951833
2025-12-13T00:51:29.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:51:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:51:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:51:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:51:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:51:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:51:01', tmtdew=1.78, humidity=88.51, cloud=0.0, wind=38.71, temperature=8.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:50:38.371', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:47:00')
2025-12-13T00:51:29.373 [DEBUG] [Thread-79641] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:51:29.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:51:29.464 [DEBUG] [Thread-79644] [transport.py] [_log()] starting thread (client mode): 0xf575f280
2025-12-13T00:51:29.464 [DEBUG] [Thread-79644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:51:29.479 [DEBUG] [Thread-79644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:51:29.479 [INFO] [Thread-79644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:51:29.486 [DEBUG] [Thread-79644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:51:29.486 [DEBUG] [Thread-79644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:51:29.486 [DEBUG] [Thread-79644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:51:29.486 [DEBUG] [Thread-79644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:51:29.486 [DEBUG] [Thread-79644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] client lang: <none>
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] server lang: <none>
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] kex follows: False
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] Compression: none
2025-12-13T00:51:29.487 [DEBUG] [Thread-79644] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:51:29.544 [DEBUG] [Thread-79644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:51:29.545 [DEBUG] [Thread-79644] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:51:29.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:51:29.546 [DEBUG] [Thread-79644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:51:29.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:51:29.600 [DEBUG] [Thread-79644] [transport.py] [_log()] userauth is OK
2025-12-13T00:51:29.600 [DEBUG] [Thread-79644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:51:29.600 [DEBUG] [Thread-79644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:51:29.600 [DEBUG] [Thread-79644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:51:29.600 [DEBUG] [Thread-79644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:51:29.620 [INFO] [Thread-79644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:51:29.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:51:29.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:51:30.463 [DEBUG] [Thread-79644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:51:30.463 [DEBUG] [Thread-79644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:51:30.511 [DEBUG] [Thread-79644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:51:30.511 [DEBUG] [Thread-79644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:51:30.520 [DEBUG] [Thread-79644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:51:30.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:51:30.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:51:30.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:51:30.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:51:30.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:51:30.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:51:30.554 [DEBUG] [Thread-79644] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:51:37.503 [DEBUG] [Thread-79646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:51:52.551 [DEBUG] [Thread-79647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:00.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:52:00.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:52:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:52:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 51, 33), 1.19, 92.34, 0.0, 41.39, 5.26, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:52:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:51:33
2025-12-13T00:52:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:52:01.539 [DEBUG] [Thread-79648] [transport.py] [_log()] starting thread (client mode): 0xf575f460
2025-12-13T00:52:01.539 [DEBUG] [Thread-79648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:52:01.560 [DEBUG] [Thread-79648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:52:01.560 [INFO] [Thread-79648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] client lang: <none>
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] server lang: <none>
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] kex follows: False
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:52:01.564 [DEBUG] [Thread-79648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:52:01.565 [DEBUG] [Thread-79648] [transport.py] [_log()] Compression: none
2025-12-13T00:52:01.565 [DEBUG] [Thread-79648] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:52:01.582 [DEBUG] [Thread-79648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:52:01.582 [DEBUG] [Thread-79648] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:52:01.583 [DEBUG] [Thread-79648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:52:01.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:52:01.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:52:01.585 [DEBUG] [Thread-79648] [transport.py] [_log()] userauth is OK
2025-12-13T00:52:01.585 [DEBUG] [Thread-79648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:52:01.585 [DEBUG] [Thread-79648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:52:01.585 [DEBUG] [Thread-79648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:52:01.585 [DEBUG] [Thread-79648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:52:01.609 [INFO] [Thread-79648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:52:01.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:52:02.249 [DEBUG] [Thread-79648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:52:02.249 [DEBUG] [Thread-79648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:52:02.249 [DEBUG] [Thread-79648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:52:02.290 [DEBUG] [Thread-79648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:52:02.291 [DEBUG] [Thread-79648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:52:02.294 [DEBUG] [Thread-79648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:52:02.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:52:02.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:52:02.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:52:02.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:52:02.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:52:02.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:52:02.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:52:02.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:52:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:52:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.952180 -999.00   +8.00  41.15     90   +6.60 1 3 2 3 1     0    0 1.91 18.03 ----- 43.3 41.1 310.8 48.7 9.3 -4.2 9.2 -3.8 8.9 -5.3 9.3 -6.2
2025-12-13T00:52:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:52:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:52:02.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.952180
2025-12-13T00:52:02.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:52:02.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:52:02.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:52:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:52:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:52:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:51:33', tmtdew=1.19, humidity=92.34, cloud=0.0, wind=41.39, temperature=5.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:51:08.352', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:47:00')
2025-12-13T00:52:02.320 [DEBUG] [Thread-79648] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:52:02.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:52:02.417 [DEBUG] [Thread-79651] [transport.py] [_log()] starting thread (client mode): 0xf5702b30
2025-12-13T00:52:02.417 [DEBUG] [Thread-79651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:52:02.433 [DEBUG] [Thread-79651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:52:02.433 [INFO] [Thread-79651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:02.441 [DEBUG] [Thread-79651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] client lang: <none>
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] server lang: <none>
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] kex follows: False
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] Compression: none
2025-12-13T00:52:02.442 [DEBUG] [Thread-79651] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:52:02.503 [DEBUG] [Thread-79651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:52:02.504 [DEBUG] [Thread-79651] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:52:02.504 [DEBUG] [Thread-79651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:52:02.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:52:02.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:52:02.560 [DEBUG] [Thread-79651] [transport.py] [_log()] userauth is OK
2025-12-13T00:52:02.560 [DEBUG] [Thread-79651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:52:02.561 [DEBUG] [Thread-79651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:52:02.561 [DEBUG] [Thread-79651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:52:02.561 [DEBUG] [Thread-79651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:52:02.580 [INFO] [Thread-79651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:52:02.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:52:02.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:52:03.411 [DEBUG] [Thread-79651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:52:03.411 [DEBUG] [Thread-79651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:52:03.459 [DEBUG] [Thread-79651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:52:03.459 [DEBUG] [Thread-79651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:52:03.468 [DEBUG] [Thread-79651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:52:03.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:52:03.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:52:03.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:52:03.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:52:03.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:52:03.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:52:03.502 [DEBUG] [Thread-79651] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:52:07.093 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:07.093 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:07.579 [DEBUG] [Thread-79653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:22.621 [DEBUG] [Thread-79654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:27.072 [DEBUG] [Thread-79655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:52:33.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:52:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:52:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 52, 6), 1.19, 92.33, 0.0, 38.02, 5.25, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:52:34.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:52:06
2025-12-13T00:52:34.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:52:34.510 [DEBUG] [Thread-79656] [transport.py] [_log()] starting thread (client mode): 0xf5701a50
2025-12-13T00:52:34.510 [DEBUG] [Thread-79656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:52:34.531 [DEBUG] [Thread-79656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:52:34.532 [INFO] [Thread-79656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] client lang: <none>
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] server lang: <none>
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] kex follows: False
2025-12-13T00:52:34.535 [DEBUG] [Thread-79656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:52:34.536 [DEBUG] [Thread-79656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:52:34.536 [DEBUG] [Thread-79656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:52:34.536 [DEBUG] [Thread-79656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:52:34.536 [DEBUG] [Thread-79656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:52:34.536 [DEBUG] [Thread-79656] [transport.py] [_log()] Compression: none
2025-12-13T00:52:34.536 [DEBUG] [Thread-79656] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:52:34.552 [DEBUG] [Thread-79656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:52:34.552 [DEBUG] [Thread-79656] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:52:34.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:52:34.553 [DEBUG] [Thread-79656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:52:34.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:52:34.555 [DEBUG] [Thread-79656] [transport.py] [_log()] userauth is OK
2025-12-13T00:52:34.555 [DEBUG] [Thread-79656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:52:34.555 [DEBUG] [Thread-79656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:52:34.555 [DEBUG] [Thread-79656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:52:34.555 [DEBUG] [Thread-79656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:52:34.573 [INFO] [Thread-79656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:52:34.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:52:35.196 [DEBUG] [Thread-79656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:52:35.196 [DEBUG] [Thread-79656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:52:35.197 [DEBUG] [Thread-79656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:52:35.237 [DEBUG] [Thread-79656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:52:35.237 [DEBUG] [Thread-79656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:52:35.240 [DEBUG] [Thread-79656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:52:35.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:52:35.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:52:35.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:52:35.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:52:35.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:52:35.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:52:35.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:52:35.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:52:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:52:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.952527 -999.00   +8.00  32.50     90   +6.60 1 3 2 3 1     0    0 1.84 15.31 .NE.. 37.2 32.5 310.8 44.1 9.3 -8.1 9.2 -6.3 8.9 -6.3 9.2 -6.7
2025-12-13T00:52:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:52:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:52:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.952527
2025-12-13T00:52:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:52:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:52:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:52:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:52:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:52:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:52:06', tmtdew=1.19, humidity=92.33, cloud=0.0, wind=38.02, temperature=5.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:51:38.333', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:47:00')
2025-12-13T00:52:35.260 [DEBUG] [Thread-79656] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:52:35.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:52:35.356 [DEBUG] [Thread-79659] [transport.py] [_log()] starting thread (client mode): 0xf81f3670
2025-12-13T00:52:35.356 [DEBUG] [Thread-79659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:52:35.371 [DEBUG] [Thread-79659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:52:35.371 [INFO] [Thread-79659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:52:35.378 [DEBUG] [Thread-79659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:52:35.378 [DEBUG] [Thread-79659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:52:35.378 [DEBUG] [Thread-79659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:52:35.378 [DEBUG] [Thread-79659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:35.378 [DEBUG] [Thread-79659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:52:35.378 [DEBUG] [Thread-79659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] client lang: <none>
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] server lang: <none>
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] kex follows: False
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] Compression: none
2025-12-13T00:52:35.379 [DEBUG] [Thread-79659] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:52:35.435 [DEBUG] [Thread-79659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:52:35.436 [DEBUG] [Thread-79659] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:52:35.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:52:35.437 [DEBUG] [Thread-79659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:52:35.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:52:35.492 [DEBUG] [Thread-79659] [transport.py] [_log()] userauth is OK
2025-12-13T00:52:35.492 [DEBUG] [Thread-79659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:52:35.492 [DEBUG] [Thread-79659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:52:35.492 [DEBUG] [Thread-79659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:52:35.492 [DEBUG] [Thread-79659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:52:35.511 [INFO] [Thread-79659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:52:35.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:52:35.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:52:36.386 [DEBUG] [Thread-79659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:52:36.386 [DEBUG] [Thread-79659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:52:36.434 [DEBUG] [Thread-79659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:52:36.434 [DEBUG] [Thread-79659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:52:36.443 [DEBUG] [Thread-79659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:52:36.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:52:36.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:52:36.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:52:36.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:52:36.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:52:36.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:52:36.478 [DEBUG] [Thread-79659] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:52:37.648 [DEBUG] [Thread-79661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:52:52.695 [DEBUG] [Thread-79662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:53:06.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:53:06.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:53:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 52, 38), 1.19, 92.33, 0.0, 41.09, 5.28, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:53:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:52:38
2025-12-13T00:53:07.299 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:07.300 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:53:07.471 [DEBUG] [Thread-79663] [transport.py] [_log()] starting thread (client mode): 0xfabc5780
2025-12-13T00:53:07.471 [DEBUG] [Thread-79663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:53:07.491 [DEBUG] [Thread-79663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:53:07.492 [INFO] [Thread-79663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] client lang: <none>
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] server lang: <none>
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] kex follows: False
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:53:07.495 [DEBUG] [Thread-79663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:53:07.496 [DEBUG] [Thread-79663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:53:07.496 [DEBUG] [Thread-79663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:53:07.496 [DEBUG] [Thread-79663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:53:07.496 [DEBUG] [Thread-79663] [transport.py] [_log()] Compression: none
2025-12-13T00:53:07.496 [DEBUG] [Thread-79663] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:53:07.512 [DEBUG] [Thread-79663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:53:07.512 [DEBUG] [Thread-79663] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:53:07.513 [DEBUG] [Thread-79663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:53:07.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:53:07.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:53:07.514 [DEBUG] [Thread-79663] [transport.py] [_log()] userauth is OK
2025-12-13T00:53:07.515 [DEBUG] [Thread-79663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:53:07.515 [DEBUG] [Thread-79663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:53:07.515 [DEBUG] [Thread-79663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:53:07.515 [DEBUG] [Thread-79663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:53:07.536 [INFO] [Thread-79663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:53:07.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:53:07.725 [DEBUG] [Thread-79665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:08.189 [DEBUG] [Thread-79663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:53:08.189 [DEBUG] [Thread-79663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:53:08.190 [DEBUG] [Thread-79663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:53:08.230 [DEBUG] [Thread-79663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:53:08.230 [DEBUG] [Thread-79663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:53:08.233 [DEBUG] [Thread-79663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:53:08.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:53:08.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:53:08.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:53:08.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:53:08.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:53:08.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:53:08.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:53:08.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:53:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:53:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.953222 -999.00   +8.00  50.20     90   +6.50 1 3 2 3 1     0    0 1.78 15.15 ZN..W 41.7 50.2 314.0 59.5 9.3 -9.2 9.2 -9.8 8.9 -10.1 9.3 -8.7
2025-12-13T00:53:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:53:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:53:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.953222
2025-12-13T00:53:08.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:53:08.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:53:08.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:53:08.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:53:08.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:53:08.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:52:38', tmtdew=1.19, humidity=92.33, cloud=0.0, wind=41.09, temperature=5.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:52:38.381', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:47:00')
2025-12-13T00:53:08.261 [DEBUG] [Thread-79663] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:53:08.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:53:08.361 [DEBUG] [Thread-79667] [transport.py] [_log()] starting thread (client mode): 0xfabc6e30
2025-12-13T00:53:08.361 [DEBUG] [Thread-79667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:53:08.376 [DEBUG] [Thread-79667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:53:08.377 [INFO] [Thread-79667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:53:08.384 [DEBUG] [Thread-79667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:53:08.384 [DEBUG] [Thread-79667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:53:08.384 [DEBUG] [Thread-79667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] client lang: <none>
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] server lang: <none>
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] kex follows: False
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] Compression: none
2025-12-13T00:53:08.385 [DEBUG] [Thread-79667] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:53:08.444 [DEBUG] [Thread-79667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:53:08.444 [DEBUG] [Thread-79667] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:53:08.445 [DEBUG] [Thread-79667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:53:08.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:53:08.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:53:08.500 [DEBUG] [Thread-79667] [transport.py] [_log()] userauth is OK
2025-12-13T00:53:08.500 [DEBUG] [Thread-79667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:53:08.500 [DEBUG] [Thread-79667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:53:08.501 [DEBUG] [Thread-79667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:53:08.501 [DEBUG] [Thread-79667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:53:08.519 [INFO] [Thread-79667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:53:08.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:53:08.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:53:09.344 [DEBUG] [Thread-79667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:53:09.344 [DEBUG] [Thread-79667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:53:09.394 [DEBUG] [Thread-79667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:53:09.394 [DEBUG] [Thread-79667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:53:09.410 [DEBUG] [Thread-79667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:53:09.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:53:09.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:53:09.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:53:09.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:53:09.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:53:09.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:53:09.450 [DEBUG] [Thread-79667] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:53:22.758 [DEBUG] [Thread-79669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:27.157 [DEBUG] [Thread-79670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:37.795 [DEBUG] [Thread-79671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:53:39.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:53:39.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:53:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:53:40.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 53, 10), 1.2, 92.28, 0.0, 36.54, 5.26, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:53:40.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:53:10
2025-12-13T00:53:40.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:53:40.494 [DEBUG] [Thread-79672] [transport.py] [_log()] starting thread (client mode): 0xf813d630
2025-12-13T00:53:40.494 [DEBUG] [Thread-79672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:53:40.514 [DEBUG] [Thread-79672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:53:40.514 [INFO] [Thread-79672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] client lang: <none>
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] server lang: <none>
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] kex follows: False
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] Compression: none
2025-12-13T00:53:40.518 [DEBUG] [Thread-79672] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:53:40.534 [DEBUG] [Thread-79672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:53:40.534 [DEBUG] [Thread-79672] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:53:40.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:53:40.535 [DEBUG] [Thread-79672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:53:40.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:53:40.535 [DEBUG] [Thread-79672] [transport.py] [_log()] userauth is OK
2025-12-13T00:53:40.535 [DEBUG] [Thread-79672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:53:40.535 [DEBUG] [Thread-79672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:53:40.535 [DEBUG] [Thread-79672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:53:40.535 [DEBUG] [Thread-79672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:53:40.544 [INFO] [Thread-79672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:53:40.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:53:41.188 [DEBUG] [Thread-79672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:53:41.188 [DEBUG] [Thread-79672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:53:41.188 [DEBUG] [Thread-79672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:53:41.228 [DEBUG] [Thread-79672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:53:41.228 [DEBUG] [Thread-79672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:53:41.230 [DEBUG] [Thread-79672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:53:41.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:53:41.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:53:41.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:53:41.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:53:41.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:53:41.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:53:41.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.953569 -999.00   +8.00  47.75     89   +6.40 1 3 2 3 1     0    0 1.86 16.11 zNE.W 44.6 47.8 314.8 53.2 9.3 -10.5 9.2 -11.5 8.9 -8.0 9.3 -6.6
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.953569
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:53:41.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:53:10', tmtdew=1.2, humidity=92.28, cloud=0.0, wind=36.54, temperature=5.26, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:53:08.362', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:52:00')
2025-12-13T00:53:41.250 [DEBUG] [Thread-79672] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:53:41.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:53:41.337 [DEBUG] [Thread-79675] [transport.py] [_log()] starting thread (client mode): 0xf813e1a0
2025-12-13T00:53:41.337 [DEBUG] [Thread-79675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:53:41.352 [DEBUG] [Thread-79675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:53:41.352 [INFO] [Thread-79675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] client lang: <none>
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] server lang: <none>
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] kex follows: False
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] Compression: none
2025-12-13T00:53:41.360 [DEBUG] [Thread-79675] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:53:41.416 [DEBUG] [Thread-79675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:53:41.416 [DEBUG] [Thread-79675] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:53:41.416 [DEBUG] [Thread-79675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:53:41.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:53:41.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:53:41.472 [DEBUG] [Thread-79675] [transport.py] [_log()] userauth is OK
2025-12-13T00:53:41.472 [DEBUG] [Thread-79675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:53:41.472 [DEBUG] [Thread-79675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:53:41.472 [DEBUG] [Thread-79675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:53:41.472 [DEBUG] [Thread-79675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:53:41.490 [INFO] [Thread-79675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:53:41.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:53:41.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:53:42.333 [DEBUG] [Thread-79675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:53:42.334 [DEBUG] [Thread-79675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:53:42.381 [DEBUG] [Thread-79675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:53:42.382 [DEBUG] [Thread-79675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:53:42.390 [DEBUG] [Thread-79675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:53:42.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:53: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')
2025-12-13T00:53:42.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:53:42.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:53:42.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:53:42.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:53:42.423 [DEBUG] [Thread-79675] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:53:52.826 [DEBUG] [Thread-79677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:07.504 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:07.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:07.871 [DEBUG] [Thread-79678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:54:12.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:54:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:54:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 53, 42), 1.24, 91.91, 0.0, 35.89, 5.28, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:54:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:53:42
2025-12-13T00:54:13.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:54:13.428 [DEBUG] [Thread-79679] [transport.py] [_log()] starting thread (client mode): 0xf813f3d0
2025-12-13T00:54:13.428 [DEBUG] [Thread-79679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:54:13.447 [DEBUG] [Thread-79679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:54:13.448 [INFO] [Thread-79679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:54:13.449 [DEBUG] [Thread-79679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] client lang: <none>
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] server lang: <none>
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] kex follows: False
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] Compression: none
2025-12-13T00:54:13.450 [DEBUG] [Thread-79679] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:54:13.467 [DEBUG] [Thread-79679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:54:13.468 [DEBUG] [Thread-79679] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:54:13.468 [DEBUG] [Thread-79679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:54:13.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:54:13.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:54:13.470 [DEBUG] [Thread-79679] [transport.py] [_log()] userauth is OK
2025-12-13T00:54:13.470 [DEBUG] [Thread-79679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:54:13.470 [DEBUG] [Thread-79679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:54:13.470 [DEBUG] [Thread-79679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:54:13.471 [DEBUG] [Thread-79679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:54:13.502 [INFO] [Thread-79679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:54:13.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:54:14.165 [DEBUG] [Thread-79679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:54:14.165 [DEBUG] [Thread-79679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:54:14.165 [DEBUG] [Thread-79679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:54:14.206 [DEBUG] [Thread-79679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:54:14.206 [DEBUG] [Thread-79679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:54:14.210 [DEBUG] [Thread-79679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:54:14.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:54:14.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:54:14.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:54:14.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:54:14.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:54:14.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:54:14.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:54:14.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:54:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:54:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.953916 -999.00   +8.00  42.76     89   +6.30 1 3 2 3 1     0    0 1.93 17.80 zNE.W 45.1 42.8 312.4 55.8 9.3 -7.7 9.2 -8.7 8.9 -5.4 9.3 -4.3
2025-12-13T00:54:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:54:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:54:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.953916
2025-12-13T00:54:14.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:54:14.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:54:14.236 [DEBUG] [Thread-79679] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:54:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:54:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:54:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:54:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:53:42', tmtdew=1.24, humidity=91.91, cloud=0.0, wind=35.89, temperature=5.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:53:38.342', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:52:00')
2025-12-13T00:54:14.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:54:14.333 [DEBUG] [Thread-79682] [transport.py] [_log()] starting thread (client mode): 0xf813ebc0
2025-12-13T00:54:14.333 [DEBUG] [Thread-79682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:54:14.348 [DEBUG] [Thread-79682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:54:14.348 [INFO] [Thread-79682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:54:14.355 [DEBUG] [Thread-79682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:54:14.355 [DEBUG] [Thread-79682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:54:14.355 [DEBUG] [Thread-79682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:54:14.355 [DEBUG] [Thread-79682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:14.355 [DEBUG] [Thread-79682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:14.355 [DEBUG] [Thread-79682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] client lang: <none>
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] server lang: <none>
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] kex follows: False
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] Compression: none
2025-12-13T00:54:14.356 [DEBUG] [Thread-79682] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:54:14.412 [DEBUG] [Thread-79682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:54:14.412 [DEBUG] [Thread-79682] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:54:14.413 [DEBUG] [Thread-79682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:54:14.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:54:14.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:54:14.468 [DEBUG] [Thread-79682] [transport.py] [_log()] userauth is OK
2025-12-13T00:54:14.469 [DEBUG] [Thread-79682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:54:14.469 [DEBUG] [Thread-79682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:54:14.469 [DEBUG] [Thread-79682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:54:14.469 [DEBUG] [Thread-79682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:54:14.491 [INFO] [Thread-79682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:54:14.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:54:14.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:54:15.344 [DEBUG] [Thread-79682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:54:15.344 [DEBUG] [Thread-79682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:54:15.392 [DEBUG] [Thread-79682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:54:15.393 [DEBUG] [Thread-79682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:54:15.401 [DEBUG] [Thread-79682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:54:15.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:54:15.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:54:15.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:54:15.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:54:15.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:54:15.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:54:15.432 [DEBUG] [Thread-79682] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:54:22.898 [DEBUG] [Thread-79684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:27.234 [DEBUG] [Thread-79685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:37.935 [DEBUG] [Thread-79686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:54:45.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:54:45.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:54:45.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:54:46.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 54, 14), 1.25, 91.8, 0.0, 36.96, 5.28, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:54:46.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:54:14
2025-12-13T00:54:46.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:54:46.434 [DEBUG] [Thread-79687] [transport.py] [_log()] starting thread (client mode): 0xf81f08e0
2025-12-13T00:54:46.434 [DEBUG] [Thread-79687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:54:46.454 [DEBUG] [Thread-79687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:54:46.454 [INFO] [Thread-79687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] client lang: <none>
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] server lang: <none>
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] kex follows: False
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] Compression: none
2025-12-13T00:54:46.457 [DEBUG] [Thread-79687] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:54:46.475 [DEBUG] [Thread-79687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:54:46.476 [DEBUG] [Thread-79687] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:54:46.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:54:46.477 [DEBUG] [Thread-79687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:54:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:54:46.478 [DEBUG] [Thread-79687] [transport.py] [_log()] userauth is OK
2025-12-13T00:54:46.478 [DEBUG] [Thread-79687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:54:46.478 [DEBUG] [Thread-79687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:54:46.478 [DEBUG] [Thread-79687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:54:46.478 [DEBUG] [Thread-79687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:54:46.513 [INFO] [Thread-79687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:54:46.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:54:47.147 [DEBUG] [Thread-79687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:54:47.147 [DEBUG] [Thread-79687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:54:47.147 [DEBUG] [Thread-79687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:54:47.187 [DEBUG] [Thread-79687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:54:47.188 [DEBUG] [Thread-79687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:54:47.189 [DEBUG] [Thread-79687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:54:47.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:54:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:54:47.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:54:47.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:54:47.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:54:47.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.954263 -999.00   +8.00  44.43     89   +6.30 1 3 2 3 1     0    0 1.93 17.87 Z.EsW 39.6 44.4 306.6 50.9 9.3 -5.4 9.1 -6.1 8.8 -4.4 9.3 -3.5
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:54:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.954263
2025-12-13T00:54:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:54:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:54:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:54:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:54:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:54:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:54:14', tmtdew=1.25, humidity=91.8, cloud=0.0, wind=36.96, temperature=5.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:54:08.323', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:52:00')
2025-12-13T00:54:47.208 [DEBUG] [Thread-79687] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:54:47.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:54:47.294 [DEBUG] [Thread-79690] [transport.py] [_log()] starting thread (client mode): 0xfabc70d0
2025-12-13T00:54:47.294 [DEBUG] [Thread-79690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:54:47.308 [DEBUG] [Thread-79690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:54:47.308 [INFO] [Thread-79690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:54:47.315 [DEBUG] [Thread-79690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:54:47.315 [DEBUG] [Thread-79690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:54:47.315 [DEBUG] [Thread-79690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:54:47.315 [DEBUG] [Thread-79690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] client lang: <none>
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] server lang: <none>
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] kex follows: False
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] Compression: none
2025-12-13T00:54:47.316 [DEBUG] [Thread-79690] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:54:47.371 [DEBUG] [Thread-79690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:54:47.371 [DEBUG] [Thread-79690] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:54:47.371 [DEBUG] [Thread-79690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:54:47.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:54:47.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:54:47.428 [DEBUG] [Thread-79690] [transport.py] [_log()] userauth is OK
2025-12-13T00:54:47.429 [DEBUG] [Thread-79690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:54:47.429 [DEBUG] [Thread-79690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:54:47.429 [DEBUG] [Thread-79690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:54:47.429 [DEBUG] [Thread-79690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:54:47.446 [INFO] [Thread-79690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:54:47.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:54:47.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:54:48.304 [DEBUG] [Thread-79690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:54:48.304 [DEBUG] [Thread-79690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:54:48.354 [DEBUG] [Thread-79690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:54:48.355 [DEBUG] [Thread-79690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:54:48.367 [DEBUG] [Thread-79690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:54:48.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:54:48.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:54:48.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:54:48.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:54:48.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:54:48.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:54:48.400 [DEBUG] [Thread-79690] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:54:52.963 [DEBUG] [Thread-79692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:07.711 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:07.712 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:07.999 [DEBUG] [Thread-79693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:55:18.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:55:18.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:55:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 54, 46), 1.34, 91.37, 0.0, 36.4, 5.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:55:19.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:54:46
2025-12-13T00:55:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:55:19.416 [DEBUG] [Thread-79694] [transport.py] [_log()] starting thread (client mode): 0xf813d330
2025-12-13T00:55:19.416 [DEBUG] [Thread-79694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:55:19.435 [DEBUG] [Thread-79694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:55:19.435 [INFO] [Thread-79694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] client lang: <none>
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] server lang: <none>
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] kex follows: False
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:55:19.438 [DEBUG] [Thread-79694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:55:19.439 [DEBUG] [Thread-79694] [transport.py] [_log()] Compression: none
2025-12-13T00:55:19.439 [DEBUG] [Thread-79694] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:55:19.453 [DEBUG] [Thread-79694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:55:19.453 [DEBUG] [Thread-79694] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:55:19.454 [DEBUG] [Thread-79694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:55:19.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:55:19.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:55:19.455 [DEBUG] [Thread-79694] [transport.py] [_log()] userauth is OK
2025-12-13T00:55:19.455 [DEBUG] [Thread-79694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:55:19.455 [DEBUG] [Thread-79694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:55:19.455 [DEBUG] [Thread-79694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:55:19.455 [DEBUG] [Thread-79694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:55:19.468 [INFO] [Thread-79694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:55:19.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:55:20.087 [DEBUG] [Thread-79694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:55:20.087 [DEBUG] [Thread-79694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:55:20.087 [DEBUG] [Thread-79694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:55:20.128 [DEBUG] [Thread-79694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:55:20.128 [DEBUG] [Thread-79694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:55:20.131 [DEBUG] [Thread-79694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:55:20.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:55:20.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:55:20.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:55:20.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:55:20.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:55:20.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:55:20.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.954610 -999.00   +8.00  42.31     89   +6.40 1 3 2 3 1     0    0 1.97 18.03 ..Es. 43.5 42.3 303.8 50.4 9.3 -4.1 9.1 -4.5 8.9 -4.2 9.3 -3.6
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.954610
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:55:20.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:54:46', tmtdew=1.34, humidity=91.37, cloud=0.0, wind=36.4, temperature=5.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:54:38.304', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:52:00')
2025-12-13T00:55:20.149 [DEBUG] [Thread-79694] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:55:20.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:55:20.234 [DEBUG] [Thread-79697] [transport.py] [_log()] starting thread (client mode): 0xf81f2260
2025-12-13T00:55:20.234 [DEBUG] [Thread-79697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:55:20.249 [DEBUG] [Thread-79697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:55:20.249 [INFO] [Thread-79697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] client lang: <none>
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] server lang: <none>
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] kex follows: False
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] Compression: none
2025-12-13T00:55:20.257 [DEBUG] [Thread-79697] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:55:20.315 [DEBUG] [Thread-79697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:55:20.315 [DEBUG] [Thread-79697] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:55:20.315 [DEBUG] [Thread-79697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:55:20.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:55:20.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:55:20.372 [DEBUG] [Thread-79697] [transport.py] [_log()] userauth is OK
2025-12-13T00:55:20.372 [DEBUG] [Thread-79697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:55:20.372 [DEBUG] [Thread-79697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:55:20.372 [DEBUG] [Thread-79697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:55:20.372 [DEBUG] [Thread-79697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:55:20.386 [INFO] [Thread-79697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:55:20.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:55:20.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:55:21.225 [DEBUG] [Thread-79697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:55:21.226 [DEBUG] [Thread-79697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:55:21.273 [DEBUG] [Thread-79697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:55:21.273 [DEBUG] [Thread-79697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:55:21.282 [DEBUG] [Thread-79697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:55:21.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:55:21.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:55:21.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:55:21.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:55:21.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:55:21.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:55:21.316 [DEBUG] [Thread-79697] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:55:23.027 [DEBUG] [Thread-79699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:27.320 [DEBUG] [Thread-79700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:38.064 [DEBUG] [Thread-79701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:51.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:55:51.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:55:51.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:55:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 55, 18), 1.35, 91.3, 0.0, 38.89, 5.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:55:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:55:18
2025-12-13T00:55:52.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:55:52.364 [DEBUG] [Thread-79702] [transport.py] [_log()] starting thread (client mode): 0xf81f0d30
2025-12-13T00:55:52.364 [DEBUG] [Thread-79702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:55:52.384 [DEBUG] [Thread-79702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:55:52.384 [INFO] [Thread-79702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] client lang: <none>
2025-12-13T00:55:52.387 [DEBUG] [Thread-79702] [transport.py] [_log()] server lang: <none>
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] kex follows: False
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] Compression: none
2025-12-13T00:55:52.388 [DEBUG] [Thread-79702] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:55:52.402 [DEBUG] [Thread-79702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:55:52.402 [DEBUG] [Thread-79702] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:55:52.402 [DEBUG] [Thread-79702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:55:52.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:55:52.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:55:52.403 [DEBUG] [Thread-79702] [transport.py] [_log()] userauth is OK
2025-12-13T00:55:52.403 [DEBUG] [Thread-79702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:55:52.403 [DEBUG] [Thread-79702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:55:52.403 [DEBUG] [Thread-79702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:55:52.403 [DEBUG] [Thread-79702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:55:52.418 [INFO] [Thread-79702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:55:52.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:55:53.054 [DEBUG] [Thread-79702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:55:53.054 [DEBUG] [Thread-79702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:55:53.055 [DEBUG] [Thread-79702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:55:53.091 [DEBUG] [Thread-79704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:55:53.095 [DEBUG] [Thread-79702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:55:53.095 [DEBUG] [Thread-79702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:55:53.097 [DEBUG] [Thread-79702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:55:53.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:55:53.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:55:53.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:55:53.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:55:53.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:55:53.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:55:53.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:55:53.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:55:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:55:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.954957 -999.00   +8.00  46.52     89   +6.40 1 3 2 3 1     0    0 1.97 17.61 ..Es. 43.9 46.5 310.8 54.9 -999.0 -999.0 9.2 -5.8 8.8 -6.8 9.3 -5.8
2025-12-13T00:55:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:55:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:55:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.954957
2025-12-13T00:55:53.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:55:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:55:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:55:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:55:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T00:55:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:55:18', tmtdew=1.35, humidity=91.3, cloud=0.0, wind=38.89, temperature=5.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:55:08.285', atlas_cloud=3, atlas_rain=1, zp_data=[1.1012500000000003, 0.35524999999999984, 0.4562500000000007, 1.2584999999999997, nan, nan, nan, 1.473250000000001, 0.7794999999999996, 0.4299999999999997, 0.98325, 1.2139999999999995, nan, nan, nan, nan, 0.4872499999999995, 0.7815000000000003, 1.496999999999999, 1.145249999999999, nan, nan, nan, nan, 0.7199999999999989, 1.0685000000000002, 1.7307500000000005, 1.3010000000000002, nan, nan, nan, nan, 1.1702499999999993], zp_timestamp='2025-12-12T22:52:00')
2025-12-13T00:55:53.121 [DEBUG] [Thread-79702] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:55:53.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:55:53.228 [DEBUG] [Thread-79706] [transport.py] [_log()] starting thread (client mode): 0xfabc5ed0
2025-12-13T00:55:53.228 [DEBUG] [Thread-79706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:55:53.244 [DEBUG] [Thread-79706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:55:53.244 [INFO] [Thread-79706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:55:53.252 [DEBUG] [Thread-79706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] client lang: <none>
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] server lang: <none>
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] kex follows: False
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] Compression: none
2025-12-13T00:55:53.253 [DEBUG] [Thread-79706] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:55:53.309 [DEBUG] [Thread-79706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:55:53.310 [DEBUG] [Thread-79706] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:55:53.310 [DEBUG] [Thread-79706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:55:53.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:55:53.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:55:53.368 [DEBUG] [Thread-79706] [transport.py] [_log()] userauth is OK
2025-12-13T00:55:53.368 [DEBUG] [Thread-79706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:55:53.368 [DEBUG] [Thread-79706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:55:53.369 [DEBUG] [Thread-79706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:55:53.369 [DEBUG] [Thread-79706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:55:53.387 [INFO] [Thread-79706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:55:53.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:55:53.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:55:54.250 [DEBUG] [Thread-79706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:55:54.251 [DEBUG] [Thread-79706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:55:54.298 [DEBUG] [Thread-79706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:55:54.299 [DEBUG] [Thread-79706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:55:54.307 [DEBUG] [Thread-79706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:55:54.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:55:54.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:55:54.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
2025-12-13T00:55:54.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:55:54.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:55:54.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:55:54.340 [DEBUG] [Thread-79706] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:56:07.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:07.916 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:08.123 [DEBUG] [Thread-79708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:23.163 [DEBUG] [Thread-79709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:24.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:56:24.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:56:24.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:56:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 55, 50), 1.33, 91.57, 0.0, 32.99, 5.34, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:56:25.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:55:50
2025-12-13T00:56:25.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:56:25.357 [DEBUG] [Thread-79710] [transport.py] [_log()] starting thread (client mode): 0xf81e7820
2025-12-13T00:56:25.357 [DEBUG] [Thread-79710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:56:25.379 [DEBUG] [Thread-79710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:56:25.379 [INFO] [Thread-79710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:56:25.381 [DEBUG] [Thread-79710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:56:25.381 [DEBUG] [Thread-79710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] client lang: <none>
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] server lang: <none>
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] kex follows: False
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:56:25.382 [DEBUG] [Thread-79710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:56:25.383 [DEBUG] [Thread-79710] [transport.py] [_log()] Compression: none
2025-12-13T00:56:25.383 [DEBUG] [Thread-79710] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:56:25.398 [DEBUG] [Thread-79710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:56:25.398 [DEBUG] [Thread-79710] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:56:25.399 [DEBUG] [Thread-79710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:56:25.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:56:25.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:56:25.400 [DEBUG] [Thread-79710] [transport.py] [_log()] userauth is OK
2025-12-13T00:56:25.400 [DEBUG] [Thread-79710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:56:25.401 [DEBUG] [Thread-79710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:56:25.401 [DEBUG] [Thread-79710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:56:25.401 [DEBUG] [Thread-79710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:56:25.423 [INFO] [Thread-79710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:56:25.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:56:26.121 [DEBUG] [Thread-79710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:56:26.122 [DEBUG] [Thread-79710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:56:26.122 [DEBUG] [Thread-79710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:56:26.163 [DEBUG] [Thread-79710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:56:26.163 [DEBUG] [Thread-79710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:56:26.165 [DEBUG] [Thread-79710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:56:26.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:56:26.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:56:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:56:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:56:26.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:56:26.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:56:26.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:56:26.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:56:26.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:56:26.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.955652 -999.00   +8.10  49.41     89   +6.40 1 2 2 3 1     0    0 2.04 19.57 Z..SW 44.6 49.4 314.4 57.8 9.3 -9.8 9.2 -11.0 8.8 -13.9 9.3 -12.9
2025-12-13T00:56:26.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:56:26.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:56:26.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.955652
2025-12-13T00:56:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:56:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:56:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:56:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:56:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:56:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:55:50', tmtdew=1.33, humidity=91.57, cloud=0.0, wind=32.99, temperature=5.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:56:08.333', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:55:00')
2025-12-13T00:56:26.188 [DEBUG] [Thread-79710] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:56:26.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:56:26.283 [DEBUG] [Thread-79713] [transport.py] [_log()] starting thread (client mode): 0xf81e4370
2025-12-13T00:56:26.283 [DEBUG] [Thread-79713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:56:26.298 [DEBUG] [Thread-79713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:56:26.298 [INFO] [Thread-79713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:56:26.305 [DEBUG] [Thread-79713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:56:26.305 [DEBUG] [Thread-79713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:56:26.305 [DEBUG] [Thread-79713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] client lang: <none>
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] server lang: <none>
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] kex follows: False
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] Compression: none
2025-12-13T00:56:26.306 [DEBUG] [Thread-79713] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:56:26.364 [DEBUG] [Thread-79713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:56:26.364 [DEBUG] [Thread-79713] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:56:26.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:56:26.365 [DEBUG] [Thread-79713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:56:26.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:56:26.421 [DEBUG] [Thread-79713] [transport.py] [_log()] userauth is OK
2025-12-13T00:56:26.421 [DEBUG] [Thread-79713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:56:26.421 [DEBUG] [Thread-79713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:56:26.421 [DEBUG] [Thread-79713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:56:26.421 [DEBUG] [Thread-79713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:56:26.440 [INFO] [Thread-79713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:56:26.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:56:26.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:56:27.273 [DEBUG] [Thread-79713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:56:27.273 [DEBUG] [Thread-79713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:56:27.321 [DEBUG] [Thread-79713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:56:27.322 [DEBUG] [Thread-79713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:56:27.330 [DEBUG] [Thread-79713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:56:27.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:56:27.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:56:27.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:56:27.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:56:27.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:56:27.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:56:27.364 [DEBUG] [Thread-79713] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:56:27.396 [DEBUG] [Thread-79715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:38.192 [DEBUG] [Thread-79716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:53.253 [DEBUG] [Thread-79717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:56:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:56:57.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:56:57.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:56:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 56, 54), 1.41, 91.16, 0.0, 29.73, 5.36, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:56:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:56:54
2025-12-13T00:56:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:56:58.387 [DEBUG] [Thread-79718] [transport.py] [_log()] starting thread (client mode): 0xf81e7790
2025-12-13T00:56:58.387 [DEBUG] [Thread-79718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:56:58.407 [DEBUG] [Thread-79718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:56:58.407 [INFO] [Thread-79718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] client lang: <none>
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] server lang: <none>
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] kex follows: False
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] Compression: none
2025-12-13T00:56:58.409 [DEBUG] [Thread-79718] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:56:58.421 [DEBUG] [Thread-79718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:56:58.421 [DEBUG] [Thread-79718] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:56:58.421 [DEBUG] [Thread-79718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:56:58.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:56:58.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:56:58.422 [DEBUG] [Thread-79718] [transport.py] [_log()] userauth is OK
2025-12-13T00:56:58.422 [DEBUG] [Thread-79718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:56:58.422 [DEBUG] [Thread-79718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:56:58.422 [DEBUG] [Thread-79718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:56:58.422 [DEBUG] [Thread-79718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:56:58.437 [INFO] [Thread-79718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:56:58.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:56:59.097 [DEBUG] [Thread-79718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:56:59.097 [DEBUG] [Thread-79718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:56:59.097 [DEBUG] [Thread-79718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:56:59.138 [DEBUG] [Thread-79718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:56:59.138 [DEBUG] [Thread-79718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:56:59.140 [DEBUG] [Thread-79718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:56:59.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:56:59.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:56:59.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:56:59.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:56:59.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:56:59.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.955942 -999.00   +8.00  48.81     89   +6.30 1 2 2 3 1     0    0 2.02 18.10 Z..SW 48.8 48.8 317.4 54.8 9.3 -14.0 9.2 -16.1 8.8 -16.3 9.2 -14.5
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.955942
2025-12-13T00:56:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:56:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:56:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:56:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:56:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:56:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:56:54', tmtdew=1.41, humidity=91.16, cloud=0.0, wind=29.73, temperature=5.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:56:33.389', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:55:00')
2025-12-13T00:56:59.157 [DEBUG] [Thread-79718] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:56:59.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:56:59.244 [DEBUG] [Thread-79721] [transport.py] [_log()] starting thread (client mode): 0xf57709a0
2025-12-13T00:56:59.244 [DEBUG] [Thread-79721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:56:59.258 [DEBUG] [Thread-79721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:56:59.258 [INFO] [Thread-79721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] client lang: <none>
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] server lang: <none>
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] kex follows: False
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] Compression: none
2025-12-13T00:56:59.266 [DEBUG] [Thread-79721] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:56:59.323 [DEBUG] [Thread-79721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:56:59.323 [DEBUG] [Thread-79721] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:56:59.323 [DEBUG] [Thread-79721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:56:59.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:56:59.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:56:59.380 [DEBUG] [Thread-79721] [transport.py] [_log()] userauth is OK
2025-12-13T00:56:59.380 [DEBUG] [Thread-79721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:56:59.380 [DEBUG] [Thread-79721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:56:59.380 [DEBUG] [Thread-79721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:56:59.380 [DEBUG] [Thread-79721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:56:59.394 [INFO] [Thread-79721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:56:59.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:56:59.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:57:00.206 [DEBUG] [Thread-79721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:57:00.206 [DEBUG] [Thread-79721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:57:00.254 [DEBUG] [Thread-79721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:57:00.254 [DEBUG] [Thread-79721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:57:00.263 [DEBUG] [Thread-79721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:57:00.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:57:00.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:57:00.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:57:00.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:57:00.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:57:00.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:57:00.298 [DEBUG] [Thread-79721] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:57:08.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:57:08.123 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:57:08.283 [DEBUG] [Thread-79723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:57:23.334 [DEBUG] [Thread-79724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:57:27.474 [DEBUG] [Thread-79725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:57:30.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:57:30.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:57:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:57:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 57, 26), 1.43, 91.03, 0.0, 31.95, 5.36, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:57:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:57:26
2025-12-13T00:57:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:57:31.268 [DEBUG] [Thread-79726] [transport.py] [_log()] starting thread (client mode): 0xfabc7130
2025-12-13T00:57:31.268 [DEBUG] [Thread-79726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:57:31.288 [DEBUG] [Thread-79726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:57:31.288 [INFO] [Thread-79726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] client lang: <none>
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] server lang: <none>
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] kex follows: False
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:57:31.290 [DEBUG] [Thread-79726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:57:31.291 [DEBUG] [Thread-79726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:57:31.291 [DEBUG] [Thread-79726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:57:31.291 [DEBUG] [Thread-79726] [transport.py] [_log()] Compression: none
2025-12-13T00:57:31.291 [DEBUG] [Thread-79726] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:57:31.304 [DEBUG] [Thread-79726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:57:31.304 [DEBUG] [Thread-79726] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:57:31.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:57:31.305 [DEBUG] [Thread-79726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:57:31.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:57:31.307 [DEBUG] [Thread-79726] [transport.py] [_log()] userauth is OK
2025-12-13T00:57:31.307 [DEBUG] [Thread-79726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:57:31.307 [DEBUG] [Thread-79726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:57:31.307 [DEBUG] [Thread-79726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:57:31.307 [DEBUG] [Thread-79726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:57:31.327 [INFO] [Thread-79726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:57:31.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:57:31.923 [DEBUG] [Thread-79726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:57:31.923 [DEBUG] [Thread-79726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:57:31.923 [DEBUG] [Thread-79726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:57:31.964 [DEBUG] [Thread-79726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:57:31.965 [DEBUG] [Thread-79726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:57:31.968 [DEBUG] [Thread-79726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:57:31.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:57:31.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:57:31.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:57:31.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:57:31.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:57:31.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:57:31.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:57:31.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:57:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:57:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.956347 -999.00   +8.00  42.78     88   +6.20 1 2 2 3 1     0    0 2.06 21.22 Z..SW 35.7 42.8 311.6 58.3 9.3 -17.7 9.0 -18.7 8.8 -15.7 9.2 -14.1
2025-12-13T00:57:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:57:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:57:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.956347
2025-12-13T00:57:31.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:57:31.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:57:31.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:57:31.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:57:31.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:57:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:57:26', tmtdew=1.43, humidity=91.03, cloud=0.0, wind=31.95, temperature=5.36, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:57:08.381', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:55:00')
2025-12-13T00:57:31.992 [DEBUG] [Thread-79726] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:57:32.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:57:32.087 [DEBUG] [Thread-79729] [transport.py] [_log()] starting thread (client mode): 0xf575e0b0
2025-12-13T00:57:32.087 [DEBUG] [Thread-79729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:57:32.101 [DEBUG] [Thread-79729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:57:32.102 [INFO] [Thread-79729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] client lang: <none>
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] server lang: <none>
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] kex follows: False
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:57:32.109 [DEBUG] [Thread-79729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:57:32.110 [DEBUG] [Thread-79729] [transport.py] [_log()] Compression: none
2025-12-13T00:57:32.110 [DEBUG] [Thread-79729] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:57:32.170 [DEBUG] [Thread-79729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:57:32.170 [DEBUG] [Thread-79729] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:57:32.171 [DEBUG] [Thread-79729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:57:32.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:57:32.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:57:32.229 [DEBUG] [Thread-79729] [transport.py] [_log()] userauth is OK
2025-12-13T00:57:32.229 [DEBUG] [Thread-79729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:57:32.229 [DEBUG] [Thread-79729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:57:32.229 [DEBUG] [Thread-79729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:57:32.229 [DEBUG] [Thread-79729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:57:32.248 [INFO] [Thread-79729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:57:32.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:57:32.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:57:33.059 [DEBUG] [Thread-79729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:57:33.059 [DEBUG] [Thread-79729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:57:33.107 [DEBUG] [Thread-79729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:57:33.107 [DEBUG] [Thread-79729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:57:33.116 [DEBUG] [Thread-79729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:57:33.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:57:33.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:57:33.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:57:33.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:57:33.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:57:33.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:57:33.150 [DEBUG] [Thread-79729] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:57:38.364 [DEBUG] [Thread-79731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:57:53.402 [DEBUG] [Thread-79732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:03.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:58:03.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:58:03.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
2025-12-13T00:58:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 57, 58), 1.44, 90.65, 0.0, 40.32, 5.34, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:58:03.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:57:58
2025-12-13T00:58:03.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:58:04.126 [DEBUG] [Thread-79733] [transport.py] [_log()] starting thread (client mode): 0xf575d600
2025-12-13T00:58:04.126 [DEBUG] [Thread-79733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:58:04.147 [DEBUG] [Thread-79733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:58:04.147 [INFO] [Thread-79733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] client lang: <none>
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] server lang: <none>
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] kex follows: False
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:58:04.150 [DEBUG] [Thread-79733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:58:04.151 [DEBUG] [Thread-79733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:58:04.151 [DEBUG] [Thread-79733] [transport.py] [_log()] Compression: none
2025-12-13T00:58:04.151 [DEBUG] [Thread-79733] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:58:04.168 [DEBUG] [Thread-79733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:58:04.169 [DEBUG] [Thread-79733] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:58:04.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:58:04.170 [DEBUG] [Thread-79733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:58:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:58:04.172 [DEBUG] [Thread-79733] [transport.py] [_log()] userauth is OK
2025-12-13T00:58:04.172 [DEBUG] [Thread-79733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:58:04.172 [DEBUG] [Thread-79733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:58:04.172 [DEBUG] [Thread-79733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:58:04.172 [DEBUG] [Thread-79733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:58:04.186 [INFO] [Thread-79733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:58:04.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:58:04.817 [DEBUG] [Thread-79733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:58:04.817 [DEBUG] [Thread-79733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:58:04.818 [DEBUG] [Thread-79733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:58:04.858 [DEBUG] [Thread-79733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:58:04.858 [DEBUG] [Thread-79733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:58:04.861 [DEBUG] [Thread-79733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:58:04.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:58:04.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:58:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:58:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:58:04.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:58:04.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:58:04.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:58:04.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:58:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:58:04.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.956694 -999.00   +8.00  34.32     89   +6.30 1 2 2 3 1     0    0 2.07 20.11 Z.eSW 38.2 34.3 306.4 45.3 9.3 -15.7 9.1 -16.5 8.8 -11.4 9.2 -10.0
2025-12-13T00:58:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:58:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:58:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.956694
2025-12-13T00:58:04.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:58:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:58:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:58:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:58:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:58:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:57:58', tmtdew=1.44, humidity=90.65, cloud=0.0, wind=40.32, temperature=5.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:57:38.362', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:55:00')
2025-12-13T00:58:04.885 [DEBUG] [Thread-79733] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:58:04.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:58:04.981 [DEBUG] [Thread-79736] [transport.py] [_log()] starting thread (client mode): 0xfabc6830
2025-12-13T00:58:04.981 [DEBUG] [Thread-79736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:58:04.995 [DEBUG] [Thread-79736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:58:04.995 [INFO] [Thread-79736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:58:05.002 [DEBUG] [Thread-79736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:58:05.002 [DEBUG] [Thread-79736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:58:05.002 [DEBUG] [Thread-79736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:58:05.002 [DEBUG] [Thread-79736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] client lang: <none>
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] server lang: <none>
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] kex follows: False
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] Compression: none
2025-12-13T00:58:05.003 [DEBUG] [Thread-79736] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:58:05.060 [DEBUG] [Thread-79736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:58:05.061 [DEBUG] [Thread-79736] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:58:05.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:58:05.061 [DEBUG] [Thread-79736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:58:05.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:58:05.117 [DEBUG] [Thread-79736] [transport.py] [_log()] userauth is OK
2025-12-13T00:58:05.117 [DEBUG] [Thread-79736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:58:05.117 [DEBUG] [Thread-79736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:58:05.117 [DEBUG] [Thread-79736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:58:05.117 [DEBUG] [Thread-79736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:58:05.137 [INFO] [Thread-79736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:58:05.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:58:05.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:58:05.964 [DEBUG] [Thread-79736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:58:05.964 [DEBUG] [Thread-79736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:58:06.012 [DEBUG] [Thread-79736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:58:06.012 [DEBUG] [Thread-79736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:58:06.021 [DEBUG] [Thread-79736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:58:06.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:58:06.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:58:06.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:58:06.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:58:06.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:58:06.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:58:06.056 [DEBUG] [Thread-79736] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:58:08.328 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:08.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:08.431 [DEBUG] [Thread-79738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:23.472 [DEBUG] [Thread-79739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:27.570 [DEBUG] [Thread-79740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:58:36.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:58:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:58:36.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 58, 30), 1.45, 90.57, 0.0, 39.4, 5.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:58:36.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:58:30
2025-12-13T00:58:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:58:37.037 [DEBUG] [Thread-79741] [transport.py] [_log()] starting thread (client mode): 0xf572f820
2025-12-13T00:58:37.038 [DEBUG] [Thread-79741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:58:37.058 [DEBUG] [Thread-79741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:58:37.058 [INFO] [Thread-79741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:58:37.061 [DEBUG] [Thread-79741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] client lang: <none>
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] server lang: <none>
2025-12-13T00:58:37.062 [DEBUG] [Thread-79741] [transport.py] [_log()] kex follows: False
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] Compression: none
2025-12-13T00:58:37.063 [DEBUG] [Thread-79741] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:58:37.081 [DEBUG] [Thread-79741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:58:37.081 [DEBUG] [Thread-79741] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:58:37.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:58:37.082 [DEBUG] [Thread-79741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:58:37.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:58:37.084 [DEBUG] [Thread-79741] [transport.py] [_log()] userauth is OK
2025-12-13T00:58:37.084 [DEBUG] [Thread-79741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:58:37.084 [DEBUG] [Thread-79741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:58:37.084 [DEBUG] [Thread-79741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:58:37.084 [DEBUG] [Thread-79741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:58:37.109 [INFO] [Thread-79741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:58:37.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:58:37.692 [DEBUG] [Thread-79741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:58:37.692 [DEBUG] [Thread-79741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:58:37.692 [DEBUG] [Thread-79741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:58:37.733 [DEBUG] [Thread-79741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:58:37.733 [DEBUG] [Thread-79741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:58:37.736 [DEBUG] [Thread-79741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:58:37.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:58:37.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:58:37.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:58:37.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:58:37.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:58:37.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:58:37.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:58:37.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:58:37.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:58:37.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.957041 -999.00   +8.00  36.17     88   +6.20 1 2 2 3 1     0    0 2.01 18.50 ZNEs. 34.3 36.2 307.8 57.7 9.2 -11.0 9.0 -11.7 8.8 -9.1 9.1 -8.0
2025-12-13T00:58:37.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:58:37.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:58:37.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.957041
2025-12-13T00:58:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:58:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:58:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:58:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:58:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:58:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:58:30', tmtdew=1.45, humidity=90.57, cloud=0.0, wind=39.4, temperature=5.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:58:08.342', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:55:00')
2025-12-13T00:58:37.763 [DEBUG] [Thread-79741] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:58:37.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:58:37.859 [DEBUG] [Thread-79744] [transport.py] [_log()] starting thread (client mode): 0xf575c130
2025-12-13T00:58:37.859 [DEBUG] [Thread-79744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:58:37.876 [DEBUG] [Thread-79744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:58:37.876 [INFO] [Thread-79744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:58:37.883 [DEBUG] [Thread-79744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] client lang: <none>
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] server lang: <none>
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] kex follows: False
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:58:37.884 [DEBUG] [Thread-79744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:58:37.885 [DEBUG] [Thread-79744] [transport.py] [_log()] Compression: none
2025-12-13T00:58:37.885 [DEBUG] [Thread-79744] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:58:37.940 [DEBUG] [Thread-79744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:58:37.941 [DEBUG] [Thread-79744] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:58:37.941 [DEBUG] [Thread-79744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:58:37.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:58:37.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:58:37.999 [DEBUG] [Thread-79744] [transport.py] [_log()] userauth is OK
2025-12-13T00:58:37.999 [DEBUG] [Thread-79744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:58:37.999 [DEBUG] [Thread-79744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:58:37.999 [DEBUG] [Thread-79744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:58:38.000 [DEBUG] [Thread-79744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:58:38.018 [INFO] [Thread-79744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:58:38.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:58:38.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:58:38.503 [DEBUG] [Thread-79746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:58:38.853 [DEBUG] [Thread-79744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:58:38.853 [DEBUG] [Thread-79744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:58:38.903 [DEBUG] [Thread-79744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:58:38.903 [DEBUG] [Thread-79744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:58:38.914 [DEBUG] [Thread-79744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:58:38.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:58:38.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:58:38.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:58:38.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:58:38.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:58:38.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:58:38.949 [DEBUG] [Thread-79744] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:58:53.556 [DEBUG] [Thread-79747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:08.536 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:08.537 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:08.584 [DEBUG] [Thread-79748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:08.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:59:08.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:59:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:59:09.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 59, 2), 1.43, 90.66, 0.0, 38.39, 5.28, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:59:09.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:59:02
2025-12-13T00:59:09.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:59:09.943 [DEBUG] [Thread-79749] [transport.py] [_log()] starting thread (client mode): 0xf57cbdc0
2025-12-13T00:59:09.943 [DEBUG] [Thread-79749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:59:09.963 [DEBUG] [Thread-79749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:59:09.963 [INFO] [Thread-79749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] client lang: <none>
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] server lang: <none>
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] kex follows: False
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:59:09.967 [DEBUG] [Thread-79749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:59:09.968 [DEBUG] [Thread-79749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:59:09.968 [DEBUG] [Thread-79749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:59:09.968 [DEBUG] [Thread-79749] [transport.py] [_log()] Compression: none
2025-12-13T00:59:09.968 [DEBUG] [Thread-79749] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:59:09.983 [DEBUG] [Thread-79749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:59:09.983 [DEBUG] [Thread-79749] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:59:09.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:59:09.984 [DEBUG] [Thread-79749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:59:09.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:59:09.986 [DEBUG] [Thread-79749] [transport.py] [_log()] userauth is OK
2025-12-13T00:59:09.987 [DEBUG] [Thread-79749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:59:09.987 [DEBUG] [Thread-79749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:59:09.987 [DEBUG] [Thread-79749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:59:09.987 [DEBUG] [Thread-79749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:59:10.005 [INFO] [Thread-79749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:59:10.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:59:10.639 [DEBUG] [Thread-79749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:59:10.640 [DEBUG] [Thread-79749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:59:10.640 [DEBUG] [Thread-79749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:59:10.681 [DEBUG] [Thread-79749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:59:10.681 [DEBUG] [Thread-79749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:59:10.684 [DEBUG] [Thread-79749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:59:10.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:59:10.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:59:10.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:59:10.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:59:10.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:59:10.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:59:10.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:59:10.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:59:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:59:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.957388 -999.00   +8.00  43.12     89   +6.30 1 2 2 3 1     0    0 2.06 19.87 ZNEs. 41.2 43.1 299.4 51.1 9.2 -10.7 9.0 -12.2 8.7 -12.1 9.2 -9.9
2025-12-13T00:59:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:59:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:59:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.957388
2025-12-13T00:59:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:59:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:59:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:59:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:59:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:59:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:59:02', tmtdew=1.43, humidity=90.66, cloud=0.0, wind=38.39, temperature=5.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:58:38.323', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:55:00')
2025-12-13T00:59:10.707 [DEBUG] [Thread-79749] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:59:10.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:59:10.804 [DEBUG] [Thread-79752] [transport.py] [_log()] starting thread (client mode): 0xf5770f10
2025-12-13T00:59:10.804 [DEBUG] [Thread-79752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:59:10.819 [DEBUG] [Thread-79752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:59:10.819 [INFO] [Thread-79752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:10.826 [DEBUG] [Thread-79752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] client lang: <none>
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] server lang: <none>
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] kex follows: False
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] Compression: none
2025-12-13T00:59:10.827 [DEBUG] [Thread-79752] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:59:10.884 [DEBUG] [Thread-79752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:59:10.885 [DEBUG] [Thread-79752] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:59:10.885 [DEBUG] [Thread-79752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:59:10.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:59:10.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:59:10.941 [DEBUG] [Thread-79752] [transport.py] [_log()] userauth is OK
2025-12-13T00:59:10.941 [DEBUG] [Thread-79752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:59:10.941 [DEBUG] [Thread-79752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:59:10.941 [DEBUG] [Thread-79752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:59:10.941 [DEBUG] [Thread-79752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:59:10.960 [INFO] [Thread-79752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:59:10.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:59:10.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:59:11.786 [DEBUG] [Thread-79752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:59:11.786 [DEBUG] [Thread-79752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:59:11.834 [DEBUG] [Thread-79752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:59:11.834 [DEBUG] [Thread-79752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:59:11.842 [DEBUG] [Thread-79752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:59:11.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:59:11.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:59:11.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T00:59:11.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:59:11.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:59:11.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:59:11.876 [DEBUG] [Thread-79752] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:59:23.613 [DEBUG] [Thread-79754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:27.642 [DEBUG] [Thread-79755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:38.654 [DEBUG] [Thread-79756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T00:59:41.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T00:59:41.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T00:59:41.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T00:59:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 0, 59, 34), 1.47, 90.67, 0.0, 39.27, 5.29, 2, 2, 0, 2, 0, 0),)
2025-12-13T00:59:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 00:59:34
2025-12-13T00:59:42.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T00:59:42.823 [DEBUG] [Thread-79757] [transport.py] [_log()] starting thread (client mode): 0xf81e4310
2025-12-13T00:59:42.823 [DEBUG] [Thread-79757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:59:42.844 [DEBUG] [Thread-79757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T00:59:42.844 [INFO] [Thread-79757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] client lang: <none>
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] server lang: <none>
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] kex follows: False
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:59:42.847 [DEBUG] [Thread-79757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:59:42.848 [DEBUG] [Thread-79757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:59:42.848 [DEBUG] [Thread-79757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:59:42.848 [DEBUG] [Thread-79757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:59:42.848 [DEBUG] [Thread-79757] [transport.py] [_log()] Compression: none
2025-12-13T00:59:42.848 [DEBUG] [Thread-79757] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:59:42.861 [DEBUG] [Thread-79757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:59:42.861 [DEBUG] [Thread-79757] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:59:42.862 [DEBUG] [Thread-79757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T00:59:42.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T00:59:42.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:59:42.863 [DEBUG] [Thread-79757] [transport.py] [_log()] userauth is OK
2025-12-13T00:59:42.863 [DEBUG] [Thread-79757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:59:42.864 [DEBUG] [Thread-79757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:59:42.864 [DEBUG] [Thread-79757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T00:59:42.864 [DEBUG] [Thread-79757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:59:42.885 [INFO] [Thread-79757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:59:42.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:59:43.502 [DEBUG] [Thread-79757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:59:43.502 [DEBUG] [Thread-79757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:59:43.502 [DEBUG] [Thread-79757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T00:59:43.543 [DEBUG] [Thread-79757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:59:43.543 [DEBUG] [Thread-79757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:59:43.546 [DEBUG] [Thread-79757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:59:43.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:59:43.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T00:59:43.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T00:59:43.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T00:59:43.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:59:43.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T00:59:43.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:59:43.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:59:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T00:59:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.958083 -999.00   +8.00  41.37     89   +6.30 1 2 2 3 1     0    0 2.09 20.68 ZnESW 45.0 41.4 316.8 50.1 9.2 -12.6 9.0 -14.2 8.7 -16.5 9.1 -16.8
2025-12-13T00:59:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T00:59:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T00:59:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.958083
2025-12-13T00:59:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T00:59:43.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T00:59:43.566 [DEBUG] [Thread-79757] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:59:43.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T00:59:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T00:59:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T00:59:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T00:59:34', tmtdew=1.47, humidity=90.67, cloud=0.0, wind=39.27, temperature=5.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T22:59:38.371', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:58:00')
2025-12-13T00:59:43.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T00:59:43.663 [DEBUG] [Thread-79760] [transport.py] [_log()] starting thread (client mode): 0xf5743d60
2025-12-13T00:59:43.663 [DEBUG] [Thread-79760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T00:59:43.677 [DEBUG] [Thread-79760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T00:59:43.677 [INFO] [Thread-79760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T00:59:43.685 [DEBUG] [Thread-79760] [transport.py] [_log()] client lang: <none>
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] server lang: <none>
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] kex follows: False
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] Compression: none
2025-12-13T00:59:43.686 [DEBUG] [Thread-79760] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T00:59:43.744 [DEBUG] [Thread-79760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T00:59:43.745 [DEBUG] [Thread-79760] [transport.py] [_log()] Switch to new keys ...
2025-12-13T00:59:43.745 [DEBUG] [Thread-79760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T00:59:43.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T00:59:43.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T00:59:43.801 [DEBUG] [Thread-79760] [transport.py] [_log()] userauth is OK
2025-12-13T00:59:43.801 [DEBUG] [Thread-79760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T00:59:43.801 [DEBUG] [Thread-79760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T00:59:43.801 [DEBUG] [Thread-79760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T00:59:43.801 [DEBUG] [Thread-79760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T00:59:43.820 [INFO] [Thread-79760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T00:59:43.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T00:59:43.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T00:59:44.639 [DEBUG] [Thread-79760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T00:59:44.639 [DEBUG] [Thread-79760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T00:59:44.687 [DEBUG] [Thread-79760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T00:59:44.687 [DEBUG] [Thread-79760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T00:59:44.696 [DEBUG] [Thread-79760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T00:59:44.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T00:59:44.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T00:59:44.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
2025-12-13T00:59:44.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T00:59:44.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T00:59:44.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T00:59:44.731 [DEBUG] [Thread-79760] [transport.py] [_log()] EOF in transport thread
2025-12-13T00:59:53.686 [DEBUG] [Thread-79762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:08.727 [DEBUG] [Thread-79763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:08.739 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:08.740 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:00:14.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:00:14.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
2025-12-13T01:00:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 0, 7), 1.48, 90.57, 0.0, 39.8, 5.28, 2, 2, 0, 2, 0, 0),)
2025-12-13T01:00:15.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:00:07
2025-12-13T01:00:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:00:15.701 [DEBUG] [Thread-79764] [transport.py] [_log()] starting thread (client mode): 0xf81e75e0
2025-12-13T01:00:15.701 [DEBUG] [Thread-79764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:00:15.719 [DEBUG] [Thread-79764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:00:15.719 [INFO] [Thread-79764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] client lang: <none>
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] server lang: <none>
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] kex follows: False
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] Compression: none
2025-12-13T01:00:15.722 [DEBUG] [Thread-79764] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:00:15.734 [DEBUG] [Thread-79764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:00:15.734 [DEBUG] [Thread-79764] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:00:15.735 [DEBUG] [Thread-79764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:00:15.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:00:15.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:00:15.736 [DEBUG] [Thread-79764] [transport.py] [_log()] userauth is OK
2025-12-13T01:00:15.736 [DEBUG] [Thread-79764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:00:15.736 [DEBUG] [Thread-79764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:00:15.736 [DEBUG] [Thread-79764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:00:15.736 [DEBUG] [Thread-79764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:00:15.750 [INFO] [Thread-79764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:00:15.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:00:16.355 [DEBUG] [Thread-79764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:00:16.355 [DEBUG] [Thread-79764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:00:16.355 [DEBUG] [Thread-79764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:00:16.396 [DEBUG] [Thread-79764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:00:16.396 [DEBUG] [Thread-79764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:00:16.398 [DEBUG] [Thread-79764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:00:16.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:00:16.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:00:16.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:00:16.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:00:16.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:00:16.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:00:16.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:00:16.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:00:16.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:00:16.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.958430 -999.00   +8.00  44.40     88   +6.30 1 2 2 3 1     0    0 2.06 19.52 Z.eSW 42.3 44.4 315.2 49.6 9.2 -18.7 9.0 -18.5 8.8 -15.2 9.1 -16.1
2025-12-13T01:00:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:00:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:00:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.958430
2025-12-13T01:00:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:00:16.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:00:16.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:00:16.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:00:16.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:00:16.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:00:07', tmtdew=1.48, humidity=90.57, cloud=0.0, wind=39.8, temperature=5.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:00:08.352', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:58:00')
2025-12-13T01:00:16.428 [DEBUG] [Thread-79764] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:00:16.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:00:16.523 [DEBUG] [Thread-79767] [transport.py] [_log()] starting thread (client mode): 0xf575eef0
2025-12-13T01:00:16.523 [DEBUG] [Thread-79767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:00:16.538 [DEBUG] [Thread-79767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:00:16.538 [INFO] [Thread-79767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:00:16.546 [DEBUG] [Thread-79767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] client lang: <none>
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] server lang: <none>
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] kex follows: False
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] Compression: none
2025-12-13T01:00:16.547 [DEBUG] [Thread-79767] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:00:16.605 [DEBUG] [Thread-79767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:00:16.605 [DEBUG] [Thread-79767] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:00:16.606 [DEBUG] [Thread-79767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:00:16.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:00:16.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:00:16.662 [DEBUG] [Thread-79767] [transport.py] [_log()] userauth is OK
2025-12-13T01:00:16.662 [DEBUG] [Thread-79767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:00:16.662 [DEBUG] [Thread-79767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:00:16.662 [DEBUG] [Thread-79767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:00:16.662 [DEBUG] [Thread-79767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:00:16.681 [INFO] [Thread-79767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:00:16.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:00:16.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:00:17.514 [DEBUG] [Thread-79767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:00:17.514 [DEBUG] [Thread-79767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:00:17.562 [DEBUG] [Thread-79767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:00:17.562 [DEBUG] [Thread-79767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:00:17.571 [DEBUG] [Thread-79767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:00:17.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:00:17.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:00:17.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:00:17.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:00:17.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:00:17.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:00:17.605 [DEBUG] [Thread-79767] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:00:23.755 [DEBUG] [Thread-79769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:27.721 [DEBUG] [Thread-79770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:38.803 [DEBUG] [Thread-79771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:00:47.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:00:47.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:00:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:00:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 0, 39), 1.5, 90.49, 0.0, 46.17, 5.28, 2, 2, 0, 2, 1, 0),)
2025-12-13T01:00:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:00:39
2025-12-13T01:00:48.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:00:48.619 [DEBUG] [Thread-79772] [transport.py] [_log()] starting thread (client mode): 0xf57436a0
2025-12-13T01:00:48.619 [DEBUG] [Thread-79772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:00:48.639 [DEBUG] [Thread-79772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:00:48.639 [INFO] [Thread-79772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] client lang: <none>
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] server lang: <none>
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] kex follows: False
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:00:48.642 [DEBUG] [Thread-79772] [transport.py] [_log()] Compression: none
2025-12-13T01:00:48.643 [DEBUG] [Thread-79772] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:00:48.650 [DEBUG] [Thread-79772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:00:48.650 [DEBUG] [Thread-79772] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:00:48.650 [DEBUG] [Thread-79772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:00:48.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:00:48.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:00:48.692 [DEBUG] [Thread-79772] [transport.py] [_log()] userauth is OK
2025-12-13T01:00:48.692 [DEBUG] [Thread-79772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:00:48.692 [DEBUG] [Thread-79772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:00:48.692 [DEBUG] [Thread-79772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:00:48.692 [DEBUG] [Thread-79772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:00:48.719 [INFO] [Thread-79772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:00:48.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:00:49.292 [DEBUG] [Thread-79772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:00:49.292 [DEBUG] [Thread-79772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:00:49.292 [DEBUG] [Thread-79772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:00:49.334 [DEBUG] [Thread-79772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:00:49.334 [DEBUG] [Thread-79772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:00:49.336 [DEBUG] [Thread-79772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:00:49.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:00:49.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:00:49.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:00:49.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:00:49.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:00:49.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:00:49.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:00:49.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.958777 -999.00   +8.00  39.06     88   +6.30 1 2 2 3 1     0    0 2.11 20.71 Z.eSW 38.0 39.1 313.4 45.4 9.2 -16.4 9.0 -14.1 8.7 -12.6 9.1 -16.0
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.958777
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:00:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:00:39', tmtdew=1.5, humidity=90.49, cloud=0.0, wind=46.17, temperature=5.28, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:00:38.333', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:58:00')
2025-12-13T01:00:49.355 [DEBUG] [Thread-79772] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:00:49.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:00:49.442 [DEBUG] [Thread-79775] [transport.py] [_log()] starting thread (client mode): 0xfabc6830
2025-12-13T01:00:49.442 [DEBUG] [Thread-79775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:00:49.457 [DEBUG] [Thread-79775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:00:49.457 [INFO] [Thread-79775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] client lang: <none>
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] server lang: <none>
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] kex follows: False
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] Compression: none
2025-12-13T01:00:49.465 [DEBUG] [Thread-79775] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:00:49.520 [DEBUG] [Thread-79775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:00:49.520 [DEBUG] [Thread-79775] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:00:49.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:00:49.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:00:49.521 [DEBUG] [Thread-79775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:00:49.577 [DEBUG] [Thread-79775] [transport.py] [_log()] userauth is OK
2025-12-13T01:00:49.577 [DEBUG] [Thread-79775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:00:49.577 [DEBUG] [Thread-79775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:00:49.577 [DEBUG] [Thread-79775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:00:49.577 [DEBUG] [Thread-79775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:00:49.593 [INFO] [Thread-79775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:00:49.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:00:49.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:00:50.380 [DEBUG] [Thread-79775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:00:50.380 [DEBUG] [Thread-79775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:00:50.428 [DEBUG] [Thread-79775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:00:50.428 [DEBUG] [Thread-79775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:00:50.436 [DEBUG] [Thread-79775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:00:50.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:00:50.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:00:50.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:00:50.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:00:50.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:00:50.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:00:50.469 [DEBUG] [Thread-79775] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:00:53.832 [DEBUG] [Thread-79777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:08.878 [DEBUG] [Thread-79778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:08.944 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:08.945 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:01:20.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:01:20.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:01:21.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 1, 11), 1.51, 90.39, 0.0, 49.95, 5.29, 1, 2, 0, 2, 1, 0),)
2025-12-13T01:01:21.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:01:11
2025-12-13T01:01:21.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:01:21.428 [DEBUG] [Thread-79779] [transport.py] [_log()] starting thread (client mode): 0xf572eb00
2025-12-13T01:01:21.428 [DEBUG] [Thread-79779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:01:21.448 [DEBUG] [Thread-79779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:01:21.448 [INFO] [Thread-79779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] client lang: <none>
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] server lang: <none>
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] kex follows: False
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:01:21.452 [DEBUG] [Thread-79779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:01:21.453 [DEBUG] [Thread-79779] [transport.py] [_log()] Compression: none
2025-12-13T01:01:21.453 [DEBUG] [Thread-79779] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:01:21.469 [DEBUG] [Thread-79779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:01:21.470 [DEBUG] [Thread-79779] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:01:21.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:01:21.471 [DEBUG] [Thread-79779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:01:21.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:01:21.473 [DEBUG] [Thread-79779] [transport.py] [_log()] userauth is OK
2025-12-13T01:01:21.473 [DEBUG] [Thread-79779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:01:21.473 [DEBUG] [Thread-79779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:01:21.473 [DEBUG] [Thread-79779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:01:21.473 [DEBUG] [Thread-79779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:01:21.511 [INFO] [Thread-79779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:01:21.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:01:22.096 [DEBUG] [Thread-79779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:01:22.096 [DEBUG] [Thread-79779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:01:22.096 [DEBUG] [Thread-79779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:01:22.137 [DEBUG] [Thread-79779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:01:22.137 [DEBUG] [Thread-79779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:01:22.140 [DEBUG] [Thread-79779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:01:22.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:01:22.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:01:22.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:01:22.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:01:22.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:01:22.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:01:22.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:01:22.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:01:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:01:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.958777 -999.00   +8.00  39.06     88   +6.30 1 2 2 3 1     0    0 2.11 20.71 Z.eSW 38.0 39.1 313.4 45.4 9.2 -16.4 9.0 -14.1 8.7 -12.6 9.1 -16.0
2025-12-13T01:01:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:01:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:01:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.958777
2025-12-13T01:01:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:01:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:01:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:01:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:01:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:01:22.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:01:11', tmtdew=1.51, humidity=90.39, cloud=0.0, wind=49.95, temperature=5.29, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:00:38.333', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:58:00')
2025-12-13T01:01:22.165 [DEBUG] [Thread-79779] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:01:22.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:01:22.272 [DEBUG] [Thread-79782] [transport.py] [_log()] starting thread (client mode): 0xf81e5390
2025-12-13T01:01:22.273 [DEBUG] [Thread-79782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:01:22.288 [DEBUG] [Thread-79782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:01:22.288 [INFO] [Thread-79782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:22.296 [DEBUG] [Thread-79782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] client lang: <none>
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] server lang: <none>
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] kex follows: False
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] Compression: none
2025-12-13T01:01:22.297 [DEBUG] [Thread-79782] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:01:22.353 [DEBUG] [Thread-79782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:01:22.353 [DEBUG] [Thread-79782] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:01:22.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:01:22.354 [DEBUG] [Thread-79782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:01:22.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:01:22.409 [DEBUG] [Thread-79782] [transport.py] [_log()] userauth is OK
2025-12-13T01:01:22.409 [DEBUG] [Thread-79782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:01:22.409 [DEBUG] [Thread-79782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:01:22.409 [DEBUG] [Thread-79782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:01:22.410 [DEBUG] [Thread-79782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:01:22.428 [INFO] [Thread-79782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:01:22.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:01:22.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:01:23.256 [DEBUG] [Thread-79782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:01:23.257 [DEBUG] [Thread-79782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:01:23.305 [DEBUG] [Thread-79782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:01:23.305 [DEBUG] [Thread-79782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:01:23.314 [DEBUG] [Thread-79782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:01:23.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:01:23.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:01: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
2025-12-13T01:01:23.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:01:23.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:01:23.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:01:23.348 [DEBUG] [Thread-79782] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:01:23.907 [DEBUG] [Thread-79784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:27.799 [DEBUG] [Thread-79785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:38.951 [DEBUG] [Thread-79786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:01:53.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:01:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:01:53.980 [DEBUG] [Thread-79787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:01:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 1, 43), 1.56, 90.33, 0.0, 37.7, 5.26, 1, 2, 0, 2, 0, 0),)
2025-12-13T01:01:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:01:43
2025-12-13T01:01:54.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:01:54.325 [DEBUG] [Thread-79788] [transport.py] [_log()] starting thread (client mode): 0xf5702470
2025-12-13T01:01:54.325 [DEBUG] [Thread-79788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:01:54.345 [DEBUG] [Thread-79788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:01:54.345 [INFO] [Thread-79788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:01:54.348 [DEBUG] [Thread-79788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] client lang: <none>
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] server lang: <none>
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] kex follows: False
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:01:54.349 [DEBUG] [Thread-79788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:01:54.350 [DEBUG] [Thread-79788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:01:54.350 [DEBUG] [Thread-79788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:01:54.350 [DEBUG] [Thread-79788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:01:54.350 [DEBUG] [Thread-79788] [transport.py] [_log()] Compression: none
2025-12-13T01:01:54.350 [DEBUG] [Thread-79788] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:01:54.366 [DEBUG] [Thread-79788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:01:54.367 [DEBUG] [Thread-79788] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:01:54.367 [DEBUG] [Thread-79788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:01:54.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:01:54.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:01:54.369 [DEBUG] [Thread-79788] [transport.py] [_log()] userauth is OK
2025-12-13T01:01:54.369 [DEBUG] [Thread-79788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:01:54.370 [DEBUG] [Thread-79788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:01:54.370 [DEBUG] [Thread-79788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:01:54.370 [DEBUG] [Thread-79788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:01:54.396 [INFO] [Thread-79788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:01:54.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:01:55.224 [DEBUG] [Thread-79788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:01:55.224 [DEBUG] [Thread-79788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:01:55.225 [DEBUG] [Thread-79788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:01:55.265 [DEBUG] [Thread-79788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:01:55.265 [DEBUG] [Thread-79788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:01:55.267 [DEBUG] [Thread-79788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:01:55.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:01:55.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:01:55.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:01:55.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:01:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:01:55.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:01:55.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:01:55.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:01:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:01:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.959124 -999.00   +8.00  45.82     88   +6.30 1 1 2 3 1     0    0 2.17 22.63 ZNESW 40.3 45.8 315.0 50.6 9.1 -18.5 8.9 -15.2 8.7 -16.8 9.0 -18.3
2025-12-13T01:01:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:01:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:01:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.959124
2025-12-13T01:01:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:01:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:01:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:01:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:01:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:01:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:01:43', tmtdew=1.56, humidity=90.33, cloud=0.0, wind=37.7, temperature=5.26, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:01:08.314', 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, 1.5075000000000003, nan, 1.6642499999999991, nan, nan, nan, nan, nan, 0.6449999999999996, 0.7922499999999992, nan, 0.694, nan, nan, nan, 1.077749999999999], zp_timestamp='2025-12-12T22:58:00')
2025-12-13T01:01:55.289 [DEBUG] [Thread-79788] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:01:55.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:01:55.386 [DEBUG] [Thread-79791] [transport.py] [_log()] starting thread (client mode): 0xf81e7850
2025-12-13T01:01:55.386 [DEBUG] [Thread-79791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:01:55.401 [DEBUG] [Thread-79791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:01:55.402 [INFO] [Thread-79791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:01:55.409 [DEBUG] [Thread-79791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:01:55.409 [DEBUG] [Thread-79791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:01:55.409 [DEBUG] [Thread-79791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] client lang: <none>
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] server lang: <none>
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] kex follows: False
2025-12-13T01:01:55.410 [DEBUG] [Thread-79791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:01:55.411 [DEBUG] [Thread-79791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:01:55.411 [DEBUG] [Thread-79791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:01:55.411 [DEBUG] [Thread-79791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:01:55.411 [DEBUG] [Thread-79791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:01:55.411 [DEBUG] [Thread-79791] [transport.py] [_log()] Compression: none
2025-12-13T01:01:55.411 [DEBUG] [Thread-79791] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:01:55.469 [DEBUG] [Thread-79791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:01:55.469 [DEBUG] [Thread-79791] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:01:55.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:01:55.470 [DEBUG] [Thread-79791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:01:55.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:01:55.525 [DEBUG] [Thread-79791] [transport.py] [_log()] userauth is OK
2025-12-13T01:01:55.525 [DEBUG] [Thread-79791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:01:55.525 [DEBUG] [Thread-79791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:01:55.526 [DEBUG] [Thread-79791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:01:55.526 [DEBUG] [Thread-79791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:01:55.548 [INFO] [Thread-79791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:01:55.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:01:55.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:01:56.383 [DEBUG] [Thread-79791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:01:56.383 [DEBUG] [Thread-79791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:01:56.431 [DEBUG] [Thread-79791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:01:56.431 [DEBUG] [Thread-79791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:01:56.440 [DEBUG] [Thread-79791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:01:56.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:01: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')
2025-12-13T01:01:56.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:01:56.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:01:56.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:01:56.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:01:56.475 [DEBUG] [Thread-79791] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:02:09.001 [DEBUG] [Thread-79793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:09.150 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:09.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:24.037 [DEBUG] [Thread-79794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:26.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:02:26.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:02:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:02:27.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 2, 15), 1.55, 90.35, 0.0, 39.34, 5.28, 1, 2, 0, 2, 0, 0),)
2025-12-13T01:02:27.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:02:15
2025-12-13T01:02:27.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:02:27.443 [DEBUG] [Thread-79795] [transport.py] [_log()] starting thread (client mode): 0xf813fc70
2025-12-13T01:02:27.444 [DEBUG] [Thread-79795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:02:27.466 [DEBUG] [Thread-79795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:02:27.466 [INFO] [Thread-79795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:02:27.468 [DEBUG] [Thread-79795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:02:27.468 [DEBUG] [Thread-79795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] client lang: <none>
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] server lang: <none>
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] kex follows: False
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:02:27.469 [DEBUG] [Thread-79795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:02:27.470 [DEBUG] [Thread-79795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:02:27.470 [DEBUG] [Thread-79795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:02:27.470 [DEBUG] [Thread-79795] [transport.py] [_log()] Compression: none
2025-12-13T01:02:27.470 [DEBUG] [Thread-79795] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:02:27.489 [DEBUG] [Thread-79795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:02:27.490 [DEBUG] [Thread-79795] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:02:27.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:02:27.491 [DEBUG] [Thread-79795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:02:27.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:02:27.493 [DEBUG] [Thread-79795] [transport.py] [_log()] userauth is OK
2025-12-13T01:02:27.493 [DEBUG] [Thread-79795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:02:27.493 [DEBUG] [Thread-79795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:02:27.494 [DEBUG] [Thread-79795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:02:27.494 [DEBUG] [Thread-79795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:02:27.510 [INFO] [Thread-79795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:02:27.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:02:27.873 [DEBUG] [Thread-79797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:28.152 [DEBUG] [Thread-79795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:02:28.152 [DEBUG] [Thread-79795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:02:28.152 [DEBUG] [Thread-79795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:02:28.194 [DEBUG] [Thread-79795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:02:28.194 [DEBUG] [Thread-79795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:02:28.197 [DEBUG] [Thread-79795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:02:28.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:02:28.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:02:28.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:02:28.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:02:28.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:02:28.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:02:28.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:02:28.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:02:28.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:02:28.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.959471 -999.00   +8.00  46.97     88   +6.20 1 2 2 3 1     0    0 2.14 21.70 ZNE.W 44.6 47.0 310.4 56.0 9.1 -19.8 8.9 -18.2 8.6 -18.9 9.0 -18.7
2025-12-13T01:02:28.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:02:28.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:02:28.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.959471
2025-12-13T01:02:28.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:02:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:02:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:02:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:02:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:02:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:02:15', tmtdew=1.55, humidity=90.35, cloud=0.0, wind=39.34, temperature=5.28, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:01:38.294', atlas_cloud=2, atlas_rain=1, zp_data=[0.7162499999999996, 1.2292500000000004, 0.6672500000000019, 0.2314999999999987, 0.30549999999999855, nan, nan, nan, nan, 1.6210000000000004, 0.4682499999999994, 0.23099999999999987, 0.5199999999999996, 2.1682499999999996, nan, nan, nan, 0.9284999999999997, 0.45199999999999996, 0.2527499999999989, 0.778999999999999, 2.0497499999999986, nan, 1.3322500000000002, 1.5439999999999996, 0.7290000000000001, 0.8147500000000001, 0.7885, 1.157, 1.520500000000001, nan, 0.7480000000000011, 0.8727499999999999], zp_timestamp='2025-12-12T23:01:00')
2025-12-13T01:02:28.221 [DEBUG] [Thread-79795] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:02:28.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:02:28.319 [DEBUG] [Thread-79799] [transport.py] [_log()] starting thread (client mode): 0xf57897b0
2025-12-13T01:02:28.320 [DEBUG] [Thread-79799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:02:28.335 [DEBUG] [Thread-79799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:02:28.335 [INFO] [Thread-79799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:02:28.342 [DEBUG] [Thread-79799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:02:28.343 [DEBUG] [Thread-79799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] client lang: <none>
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] server lang: <none>
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] kex follows: False
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] Compression: none
2025-12-13T01:02:28.344 [DEBUG] [Thread-79799] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:02:28.405 [DEBUG] [Thread-79799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:02:28.405 [DEBUG] [Thread-79799] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:02:28.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:02:28.406 [DEBUG] [Thread-79799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:02:28.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:02:28.464 [DEBUG] [Thread-79799] [transport.py] [_log()] userauth is OK
2025-12-13T01:02:28.464 [DEBUG] [Thread-79799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:02:28.464 [DEBUG] [Thread-79799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:02:28.464 [DEBUG] [Thread-79799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:02:28.465 [DEBUG] [Thread-79799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:02:28.482 [INFO] [Thread-79799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:02:28.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:02:28.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:02:29.354 [DEBUG] [Thread-79799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:02:29.354 [DEBUG] [Thread-79799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:02:29.404 [DEBUG] [Thread-79799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:02:29.405 [DEBUG] [Thread-79799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:02:29.417 [DEBUG] [Thread-79799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:02:29.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:02:29.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:02:29.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:02:29.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:02:29.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:02:29.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:02:29.464 [DEBUG] [Thread-79799] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:02:39.066 [DEBUG] [Thread-79801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:54.112 [DEBUG] [Thread-79802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:02:59.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:02:59.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:02:59.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:03:00.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 2, 47), 1.56, 90.0, 0.0, 38.06, 5.27, 1, 2, 0, 2, 0, 0),)
2025-12-13T01:03:00.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:02:47
2025-12-13T01:03:00.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:03:00.419 [DEBUG] [Thread-79803] [transport.py] [_log()] starting thread (client mode): 0xf572f340
2025-12-13T01:03:00.420 [DEBUG] [Thread-79803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:03:00.441 [DEBUG] [Thread-79803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:03:00.441 [INFO] [Thread-79803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] client lang: <none>
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] server lang: <none>
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] kex follows: False
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] Compression: none
2025-12-13T01:03:00.444 [DEBUG] [Thread-79803] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:03:00.461 [DEBUG] [Thread-79803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:03:00.461 [DEBUG] [Thread-79803] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:03:00.462 [DEBUG] [Thread-79803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:03:00.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:03:00.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:03:00.463 [DEBUG] [Thread-79803] [transport.py] [_log()] userauth is OK
2025-12-13T01:03:00.464 [DEBUG] [Thread-79803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:03:00.464 [DEBUG] [Thread-79803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:03:00.464 [DEBUG] [Thread-79803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:03:00.464 [DEBUG] [Thread-79803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:03:00.481 [INFO] [Thread-79803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:03:00.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:03:01.280 [DEBUG] [Thread-79803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:03:01.280 [DEBUG] [Thread-79803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:03:01.280 [DEBUG] [Thread-79803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:03:01.321 [DEBUG] [Thread-79803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:03:01.321 [DEBUG] [Thread-79803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:03:01.324 [DEBUG] [Thread-79803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:03:01.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:03:01.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:03:01.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:03:01.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:03:01.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:03:01.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:03:01.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:03:01.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:03:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:03:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.959819 -999.00   +7.90  36.56     88   +6.20 1 2 2 3 1     0    0 2.18 22.01 ZNE.W 37.2 36.6 315.6 61.8 9.1 -20.6 8.9 -20.4 8.6 -19.7 9.0 -20.3
2025-12-13T01:03:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:03:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:03:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.959819
2025-12-13T01:03:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:03:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:03:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:03:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:03:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:03:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:02:47', tmtdew=1.56, humidity=90.0, cloud=0.0, wind=38.06, temperature=5.27, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:02:08.362', atlas_cloud=2, atlas_rain=1, zp_data=[0.7162499999999996, 1.2292500000000004, 0.6672500000000019, 0.2314999999999987, 0.30549999999999855, nan, nan, nan, nan, 1.6210000000000004, 0.4682499999999994, 0.23099999999999987, 0.5199999999999996, 2.1682499999999996, nan, nan, nan, 0.9284999999999997, 0.45199999999999996, 0.2527499999999989, 0.778999999999999, 2.0497499999999986, nan, 1.3322500000000002, 1.5439999999999996, 0.7290000000000001, 0.8147500000000001, 0.7885, 1.157, 1.520500000000001, nan, 0.7480000000000011, 0.8727499999999999], zp_timestamp='2025-12-12T23:01:00')
2025-12-13T01:03:01.349 [DEBUG] [Thread-79803] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:03:01.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:03:01.446 [DEBUG] [Thread-79806] [transport.py] [_log()] starting thread (client mode): 0xf813fac0
2025-12-13T01:03:01.446 [DEBUG] [Thread-79806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:03:01.461 [DEBUG] [Thread-79806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:03:01.461 [INFO] [Thread-79806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:03:01.469 [DEBUG] [Thread-79806] [transport.py] [_log()] client lang: <none>
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] server lang: <none>
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] kex follows: False
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] Compression: none
2025-12-13T01:03:01.470 [DEBUG] [Thread-79806] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:03:01.529 [DEBUG] [Thread-79806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:03:01.530 [DEBUG] [Thread-79806] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:03:01.530 [DEBUG] [Thread-79806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:03:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:03:01.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:03:01.585 [DEBUG] [Thread-79806] [transport.py] [_log()] userauth is OK
2025-12-13T01:03:01.586 [DEBUG] [Thread-79806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:03:01.586 [DEBUG] [Thread-79806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:03:01.586 [DEBUG] [Thread-79806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:03:01.586 [DEBUG] [Thread-79806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:03:01.605 [INFO] [Thread-79806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:03:01.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:03:01.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:03:02.446 [DEBUG] [Thread-79806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:03:02.446 [DEBUG] [Thread-79806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:03:02.495 [DEBUG] [Thread-79806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:03:02.495 [DEBUG] [Thread-79806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:03:02.504 [DEBUG] [Thread-79806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:03:02.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:03:02.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:03:02.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:03:02.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:03:02.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:03:02.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:03:02.538 [DEBUG] [Thread-79806] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:03:09.142 [DEBUG] [Thread-79808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:03:09.351 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:03:09.352 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:03:24.193 [DEBUG] [Thread-79809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:03:27.944 [DEBUG] [Thread-79810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:03:32.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:03:32.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:03:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:03:33.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 3, 19), 1.56, 90.0, 0.0, 38.59, 5.26, 1, 2, 0, 2, 0, 0),)
2025-12-13T01:03:33.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:03:19
2025-12-13T01:03:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:03:33.534 [DEBUG] [Thread-79811] [transport.py] [_log()] starting thread (client mode): 0xf81f06a0
2025-12-13T01:03:33.534 [DEBUG] [Thread-79811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:03:33.555 [DEBUG] [Thread-79811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:03:33.555 [INFO] [Thread-79811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] client lang: <none>
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] server lang: <none>
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] kex follows: False
2025-12-13T01:03:33.557 [DEBUG] [Thread-79811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:03:33.558 [DEBUG] [Thread-79811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:03:33.558 [DEBUG] [Thread-79811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:03:33.558 [DEBUG] [Thread-79811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:03:33.558 [DEBUG] [Thread-79811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:03:33.558 [DEBUG] [Thread-79811] [transport.py] [_log()] Compression: none
2025-12-13T01:03:33.558 [DEBUG] [Thread-79811] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:03:33.574 [DEBUG] [Thread-79811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:03:33.574 [DEBUG] [Thread-79811] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:03:33.575 [DEBUG] [Thread-79811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:03:33.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:03:33.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:03:33.576 [DEBUG] [Thread-79811] [transport.py] [_log()] userauth is OK
2025-12-13T01:03:33.576 [DEBUG] [Thread-79811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:03:33.577 [DEBUG] [Thread-79811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:03:33.577 [DEBUG] [Thread-79811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:03:33.577 [DEBUG] [Thread-79811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:03:33.600 [INFO] [Thread-79811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:03:33.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:03:34.247 [DEBUG] [Thread-79811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:03:34.247 [DEBUG] [Thread-79811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:03:34.248 [DEBUG] [Thread-79811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:03:34.288 [DEBUG] [Thread-79811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:03:34.288 [DEBUG] [Thread-79811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:03:34.291 [DEBUG] [Thread-79811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:03:34.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:03:34.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:03:34.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:03:34.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:03:34.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:03:34.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:03:34.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:03:34.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:03:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:03:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.960166 -999.00   +7.90  40.97     88   +6.20 1 1 2 3 1     0    0 2.22 23.35 ZNESW 41.1 41.0 310.6 55.1 9.1 -21.8 8.9 -21.5 8.6 -20.0 8.9 -20.7
2025-12-13T01:03:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:03:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:03:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.960166
2025-12-13T01:03:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:03:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:03:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:03:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:03:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:03:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:03:19', tmtdew=1.56, humidity=90.0, cloud=0.0, wind=38.59, temperature=5.26, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:02:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[0.7162499999999996, 1.2292500000000004, 0.6672500000000019, 0.2314999999999987, 0.30549999999999855, nan, nan, nan, nan, 1.6210000000000004, 0.4682499999999994, 0.23099999999999987, 0.5199999999999996, 2.1682499999999996, nan, nan, nan, 0.9284999999999997, 0.45199999999999996, 0.2527499999999989, 0.778999999999999, 2.0497499999999986, nan, 1.3322500000000002, 1.5439999999999996, 0.7290000000000001, 0.8147500000000001, 0.7885, 1.157, 1.520500000000001, nan, 0.7480000000000011, 0.8727499999999999], zp_timestamp='2025-12-12T23:01:00')
2025-12-13T01:03:34.319 [DEBUG] [Thread-79811] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:03:34.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:03:34.419 [DEBUG] [Thread-79814] [transport.py] [_log()] starting thread (client mode): 0xf5789180
2025-12-13T01:03:34.419 [DEBUG] [Thread-79814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:03:34.433 [DEBUG] [Thread-79814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:03:34.433 [INFO] [Thread-79814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:03:34.440 [DEBUG] [Thread-79814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:03:34.440 [DEBUG] [Thread-79814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:03:34.440 [DEBUG] [Thread-79814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] client lang: <none>
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] server lang: <none>
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] kex follows: False
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] Compression: none
2025-12-13T01:03:34.441 [DEBUG] [Thread-79814] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:03:34.497 [DEBUG] [Thread-79814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:03:34.498 [DEBUG] [Thread-79814] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:03:34.498 [DEBUG] [Thread-79814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:03:34.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:03:34.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:03:34.553 [DEBUG] [Thread-79814] [transport.py] [_log()] userauth is OK
2025-12-13T01:03:34.554 [DEBUG] [Thread-79814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:03:34.554 [DEBUG] [Thread-79814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:03:34.554 [DEBUG] [Thread-79814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:03:34.554 [DEBUG] [Thread-79814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:03:34.574 [INFO] [Thread-79814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:03:34.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:03:34.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:03:35.389 [DEBUG] [Thread-79814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:03:35.389 [DEBUG] [Thread-79814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:03:35.437 [DEBUG] [Thread-79814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:03:35.437 [DEBUG] [Thread-79814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:03:35.446 [DEBUG] [Thread-79814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:03:35.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:03:35.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:03:35.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:03:35.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:03:35.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:03:35.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:03:35.480 [DEBUG] [Thread-79814] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:03:39.220 [DEBUG] [Thread-79816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:03:54.266 [DEBUG] [Thread-79817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:04:05.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:04:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:04:06.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 3, 51), 1.59, 90.01, 0.0, 37.26, 5.23, 1, 2, 0, 2, 0, 0),)
2025-12-13T01:04:06.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:03:51
2025-12-13T01:04:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:04:06.509 [DEBUG] [Thread-79818] [transport.py] [_log()] starting thread (client mode): 0xf81f0550
2025-12-13T01:04:06.509 [DEBUG] [Thread-79818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:04:06.529 [DEBUG] [Thread-79818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:04:06.529 [INFO] [Thread-79818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:04:06.532 [DEBUG] [Thread-79818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] client lang: <none>
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] server lang: <none>
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] kex follows: False
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] Compression: none
2025-12-13T01:04:06.533 [DEBUG] [Thread-79818] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:04:06.550 [DEBUG] [Thread-79818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:04:06.550 [DEBUG] [Thread-79818] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:04:06.550 [DEBUG] [Thread-79818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:04:06.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:04:06.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:04:06.551 [DEBUG] [Thread-79818] [transport.py] [_log()] userauth is OK
2025-12-13T01:04:06.551 [DEBUG] [Thread-79818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:04:06.551 [DEBUG] [Thread-79818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:04:06.551 [DEBUG] [Thread-79818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:04:06.551 [DEBUG] [Thread-79818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:04:06.566 [INFO] [Thread-79818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:04:06.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:04:07.364 [DEBUG] [Thread-79818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:04:07.365 [DEBUG] [Thread-79818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:04:07.365 [DEBUG] [Thread-79818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:04:07.406 [DEBUG] [Thread-79818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:04:07.406 [DEBUG] [Thread-79818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:04:07.409 [DEBUG] [Thread-79818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:04:07.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:04:07.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:04:07.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:04:07.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:04:07.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:04:07.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:04:07.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:04:07.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:04:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:04:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.960860 -999.00   +7.90  32.21     88   +6.20 1 1 2 3 1     0    0 2.22 22.01 ZNESW 32.6 32.2 306.7 45.4 9.0 -16.0 8.8 -16.1 8.5 -13.6 8.9 -13.8
2025-12-13T01:04:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:04:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:04:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.960860
2025-12-13T01:04:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:04:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:04:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:04:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:04:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:04:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:03:51', tmtdew=1.59, humidity=90.01, cloud=0.0, wind=37.26, temperature=5.23, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:03:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[0.7162499999999996, 1.2292500000000004, 0.6672500000000019, 0.2314999999999987, 0.30549999999999855, nan, nan, nan, nan, 1.6210000000000004, 0.4682499999999994, 0.23099999999999987, 0.5199999999999996, 2.1682499999999996, nan, nan, nan, 0.9284999999999997, 0.45199999999999996, 0.2527499999999989, 0.778999999999999, 2.0497499999999986, nan, 1.3322500000000002, 1.5439999999999996, 0.7290000000000001, 0.8147500000000001, 0.7885, 1.157, 1.520500000000001, nan, 0.7480000000000011, 0.8727499999999999], zp_timestamp='2025-12-12T23:01:00')
2025-12-13T01:04:07.433 [DEBUG] [Thread-79818] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:04:07.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:04:07.523 [DEBUG] [Thread-79821] [transport.py] [_log()] starting thread (client mode): 0xf818b1f0
2025-12-13T01:04:07.523 [DEBUG] [Thread-79821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:04:07.538 [DEBUG] [Thread-79821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:04:07.538 [INFO] [Thread-79821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:07.546 [DEBUG] [Thread-79821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] client lang: <none>
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] server lang: <none>
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] kex follows: False
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:04:07.547 [DEBUG] [Thread-79821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:04:07.548 [DEBUG] [Thread-79821] [transport.py] [_log()] Compression: none
2025-12-13T01:04:07.548 [DEBUG] [Thread-79821] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:04:07.608 [DEBUG] [Thread-79821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:04:07.608 [DEBUG] [Thread-79821] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:04:07.609 [DEBUG] [Thread-79821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:04:07.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:04:07.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:04:07.664 [DEBUG] [Thread-79821] [transport.py] [_log()] userauth is OK
2025-12-13T01:04:07.665 [DEBUG] [Thread-79821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:04:07.665 [DEBUG] [Thread-79821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:04:07.665 [DEBUG] [Thread-79821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:04:07.665 [DEBUG] [Thread-79821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:04:07.684 [INFO] [Thread-79821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:04:07.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:04:07.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:04:08.536 [DEBUG] [Thread-79821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:04:08.537 [DEBUG] [Thread-79821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:04:08.585 [DEBUG] [Thread-79821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:04:08.585 [DEBUG] [Thread-79821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:04:08.594 [DEBUG] [Thread-79821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:04:08.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:04:08.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:04:08.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:04:08.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:04:08.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:04:08.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:04:08.628 [DEBUG] [Thread-79821] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:04:09.294 [DEBUG] [Thread-79823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:09.557 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:09.558 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:24.333 [DEBUG] [Thread-79824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:28.023 [DEBUG] [Thread-79825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:38.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:04:38.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:04:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:04:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 4, 23), 1.59, 89.99, 0.0, 39.93, 5.23, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:04:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:04:23
2025-12-13T01:04:39.359 [DEBUG] [Thread-79826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:04:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:04:39.601 [DEBUG] [Thread-79827] [transport.py] [_log()] starting thread (client mode): 0xf8189900
2025-12-13T01:04:39.601 [DEBUG] [Thread-79827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:04:39.621 [DEBUG] [Thread-79827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:04:39.621 [INFO] [Thread-79827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] client lang: <none>
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] server lang: <none>
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] kex follows: False
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:04:39.624 [DEBUG] [Thread-79827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:04:39.625 [DEBUG] [Thread-79827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:04:39.625 [DEBUG] [Thread-79827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:04:39.625 [DEBUG] [Thread-79827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:04:39.625 [DEBUG] [Thread-79827] [transport.py] [_log()] Compression: none
2025-12-13T01:04:39.625 [DEBUG] [Thread-79827] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:04:39.642 [DEBUG] [Thread-79827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:04:39.642 [DEBUG] [Thread-79827] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:04:39.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:04:39.643 [DEBUG] [Thread-79827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:04:39.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:04:39.645 [DEBUG] [Thread-79827] [transport.py] [_log()] userauth is OK
2025-12-13T01:04:39.645 [DEBUG] [Thread-79827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:04:39.645 [DEBUG] [Thread-79827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:04:39.646 [DEBUG] [Thread-79827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:04:39.646 [DEBUG] [Thread-79827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:04:39.671 [INFO] [Thread-79827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:04:39.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:04:40.299 [DEBUG] [Thread-79827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:04:40.300 [DEBUG] [Thread-79827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:04:40.300 [DEBUG] [Thread-79827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:04:40.340 [DEBUG] [Thread-79827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:04:40.340 [DEBUG] [Thread-79827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:04:40.343 [DEBUG] [Thread-79827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:04:40.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:04:40.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:04:40.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:04:40.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:04:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:04:40.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:04:40.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.961208 -999.00   +7.90  37.20     88   +6.20 1 1 2 3 1     0    0 2.15 20.28 ZNESW 40.3 37.2 313.0 44.0 9.0 -14.5 8.8 -14.5 8.6 -13.1 9.0 -12.2
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.961208
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:04:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:04:23', tmtdew=1.59, humidity=89.99, cloud=0.0, wind=39.93, temperature=5.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:04:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[0.7162499999999996, 1.2292500000000004, 0.6672500000000019, 0.2314999999999987, 0.30549999999999855, nan, nan, nan, nan, 1.6210000000000004, 0.4682499999999994, 0.23099999999999987, 0.5199999999999996, 2.1682499999999996, nan, nan, nan, 0.9284999999999997, 0.45199999999999996, 0.2527499999999989, 0.778999999999999, 2.0497499999999986, nan, 1.3322500000000002, 1.5439999999999996, 0.7290000000000001, 0.8147500000000001, 0.7885, 1.157, 1.520500000000001, nan, 0.7480000000000011, 0.8727499999999999], zp_timestamp='2025-12-12T23:01:00')
2025-12-13T01:04:40.362 [DEBUG] [Thread-79827] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:04:40.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:04:40.448 [DEBUG] [Thread-79830] [transport.py] [_log()] starting thread (client mode): 0xf81f08e0
2025-12-13T01:04:40.448 [DEBUG] [Thread-79830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:04:40.463 [DEBUG] [Thread-79830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:04:40.463 [INFO] [Thread-79830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:04:40.470 [DEBUG] [Thread-79830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:04:40.470 [DEBUG] [Thread-79830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] client lang: <none>
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] server lang: <none>
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] kex follows: False
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] Compression: none
2025-12-13T01:04:40.471 [DEBUG] [Thread-79830] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:04:40.528 [DEBUG] [Thread-79830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:04:40.529 [DEBUG] [Thread-79830] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:04:40.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:04:40.529 [DEBUG] [Thread-79830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:04:40.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:04:40.586 [DEBUG] [Thread-79830] [transport.py] [_log()] userauth is OK
2025-12-13T01:04:40.586 [DEBUG] [Thread-79830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:04:40.586 [DEBUG] [Thread-79830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:04:40.586 [DEBUG] [Thread-79830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:04:40.586 [DEBUG] [Thread-79830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:04:40.600 [INFO] [Thread-79830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:04:40.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:04:40.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:04:41.475 [DEBUG] [Thread-79830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:04:41.475 [DEBUG] [Thread-79830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:04:41.523 [DEBUG] [Thread-79830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:04:41.523 [DEBUG] [Thread-79830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:04:41.531 [DEBUG] [Thread-79830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:04:41.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:04: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')
2025-12-13T01:04:41.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:04:41.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:04:41.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:04:41.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:04:41.563 [DEBUG] [Thread-79830] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:04:54.383 [DEBUG] [Thread-79832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:09.427 [DEBUG] [Thread-79833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:09.762 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:09.763 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:11.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:05:11.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:05:11.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:05:12.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 4, 55), 1.56, 89.97, 0.0, 46.72, 5.19, 1, 1, 0, 2, 1, 0),)
2025-12-13T01:05:12.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:04:55
2025-12-13T01:05:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:05:12.533 [DEBUG] [Thread-79834] [transport.py] [_log()] starting thread (client mode): 0xf8189720
2025-12-13T01:05:12.533 [DEBUG] [Thread-79834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:05:12.551 [DEBUG] [Thread-79834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:05:12.551 [INFO] [Thread-79834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] client lang: <none>
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] server lang: <none>
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] kex follows: False
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] Compression: none
2025-12-13T01:05:12.555 [DEBUG] [Thread-79834] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:05:12.569 [DEBUG] [Thread-79834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:05:12.569 [DEBUG] [Thread-79834] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:05:12.570 [DEBUG] [Thread-79834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:05:12.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:05:12.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:05:12.571 [DEBUG] [Thread-79834] [transport.py] [_log()] userauth is OK
2025-12-13T01:05:12.571 [DEBUG] [Thread-79834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:05:12.572 [DEBUG] [Thread-79834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:05:12.572 [DEBUG] [Thread-79834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:05:12.572 [DEBUG] [Thread-79834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:05:12.589 [INFO] [Thread-79834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:05:12.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:05:13.656 [DEBUG] [Thread-79834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:05:13.656 [DEBUG] [Thread-79834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:05:13.657 [DEBUG] [Thread-79834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:05:13.697 [DEBUG] [Thread-79834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:05:13.697 [DEBUG] [Thread-79834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:05:13.700 [DEBUG] [Thread-79834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:05:13.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:05:13.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:05:13.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:05:13.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:05:13.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:05:13.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:05:13.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:05:13.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:05:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:05:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.961555 -999.00   +7.90  50.68     88   +6.10 1 1 2 3 1     0    0 2.21 21.60 ZNESW 51.1 50.7 313.2 56.0 9.0 -12.0 8.8 -11.6 8.6 -13.6 8.9 -17.2
2025-12-13T01:05:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:05:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:05:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.961555
2025-12-13T01:05:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:05:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:04:55', tmtdew=1.56, humidity=89.97, cloud=0.0, wind=46.72, temperature=5.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:04:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[0.7162499999999996, 1.2292500000000004, 0.6672500000000019, 0.2314999999999987, 0.30549999999999855, nan, nan, nan, nan, 1.6210000000000004, 0.4682499999999994, 0.23099999999999987, 0.5199999999999996, 2.1682499999999996, nan, nan, nan, 0.9284999999999997, 0.45199999999999996, 0.2527499999999989, 0.778999999999999, 2.0497499999999986, nan, 1.3322500000000002, 1.5439999999999996, 0.7290000000000001, 0.8147500000000001, 0.7885, 1.157, 1.520500000000001, nan, 0.7480000000000011, 0.8727499999999999], zp_timestamp='2025-12-12T23:01:00')
2025-12-13T01:05:13.742 [DEBUG] [Thread-79834] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:05:13.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:05:13.839 [DEBUG] [Thread-79837] [transport.py] [_log()] starting thread (client mode): 0xf578b9a0
2025-12-13T01:05:13.839 [DEBUG] [Thread-79837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:05:13.857 [DEBUG] [Thread-79837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:05:13.857 [INFO] [Thread-79837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:05:13.865 [DEBUG] [Thread-79837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:05:13.865 [DEBUG] [Thread-79837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] client lang: <none>
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] server lang: <none>
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] kex follows: False
2025-12-13T01:05:13.866 [DEBUG] [Thread-79837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:05:13.867 [DEBUG] [Thread-79837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:05:13.867 [DEBUG] [Thread-79837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:05:13.867 [DEBUG] [Thread-79837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:05:13.867 [DEBUG] [Thread-79837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:05:13.867 [DEBUG] [Thread-79837] [transport.py] [_log()] Compression: none
2025-12-13T01:05:13.867 [DEBUG] [Thread-79837] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:05:13.924 [DEBUG] [Thread-79837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:05:13.924 [DEBUG] [Thread-79837] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:05:13.925 [DEBUG] [Thread-79837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:05:13.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:05:13.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:05:13.980 [DEBUG] [Thread-79837] [transport.py] [_log()] userauth is OK
2025-12-13T01:05:13.980 [DEBUG] [Thread-79837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:05:13.980 [DEBUG] [Thread-79837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:05:13.981 [DEBUG] [Thread-79837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:05:13.981 [DEBUG] [Thread-79837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:05:14.000 [INFO] [Thread-79837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:05:14.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:05:14.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:05:14.853 [DEBUG] [Thread-79837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:05:14.854 [DEBUG] [Thread-79837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:05:14.902 [DEBUG] [Thread-79837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:05:14.902 [DEBUG] [Thread-79837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:05:14.911 [DEBUG] [Thread-79837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:05:14.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:05:14.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:05:14.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:05:14.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:05:14.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:05:14.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:05:14.945 [DEBUG] [Thread-79837] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:05:24.456 [DEBUG] [Thread-79839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:28.094 [DEBUG] [Thread-79840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:39.491 [DEBUG] [Thread-79841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:05:44.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:05:44.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:05:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:05:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 5, 27), 1.56, 89.99, 0.0, 42.89, 5.16, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:05:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:05:27
2025-12-13T01:05:45.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:05:45.912 [DEBUG] [Thread-79842] [transport.py] [_log()] starting thread (client mode): 0xf8189510
2025-12-13T01:05:45.912 [DEBUG] [Thread-79842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:05:45.933 [DEBUG] [Thread-79842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:05:45.933 [INFO] [Thread-79842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:05:45.936 [DEBUG] [Thread-79842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] client lang: <none>
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] server lang: <none>
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] kex follows: False
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] Compression: none
2025-12-13T01:05:45.937 [DEBUG] [Thread-79842] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:05:45.954 [DEBUG] [Thread-79842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:05:45.954 [DEBUG] [Thread-79842] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:05:45.955 [DEBUG] [Thread-79842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:05:45.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:05:45.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:05:45.957 [DEBUG] [Thread-79842] [transport.py] [_log()] userauth is OK
2025-12-13T01:05:45.957 [DEBUG] [Thread-79842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:05:45.957 [DEBUG] [Thread-79842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:05:45.957 [DEBUG] [Thread-79842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:05:45.957 [DEBUG] [Thread-79842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:05:45.982 [INFO] [Thread-79842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:05:45.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:05:46.622 [DEBUG] [Thread-79842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:05:46.623 [DEBUG] [Thread-79842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:05:46.623 [DEBUG] [Thread-79842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:05:46.664 [DEBUG] [Thread-79842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:05:46.664 [DEBUG] [Thread-79842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:05:46.667 [DEBUG] [Thread-79842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:05:46.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:05:46.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:05:46.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:05:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:05:46.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:05:46.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:05:46.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:05:46.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:05:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:05:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.961902 -999.00   +7.80  46.38     89   +6.10 1 1 2 3 1     0    0 2.28 22.55 ZNESW 44.2 46.4 315.2 50.2 9.0 -20.0 8.8 -18.7 8.6 -20.6 8.9 -18.4
2025-12-13T01:05:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:05:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:05:46.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.961902
2025-12-13T01:05:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:05:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:05:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:05:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:05:46.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:05:46.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:05:27', tmtdew=1.56, humidity=89.99, cloud=0.0, wind=42.89, temperature=5.16, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:05:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:04:00')
2025-12-13T01:05:46.692 [DEBUG] [Thread-79842] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:05:46.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:05:46.789 [DEBUG] [Thread-79845] [transport.py] [_log()] starting thread (client mode): 0xf81882e0
2025-12-13T01:05:46.789 [DEBUG] [Thread-79845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:05:46.804 [DEBUG] [Thread-79845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:05:46.804 [INFO] [Thread-79845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:05:46.812 [DEBUG] [Thread-79845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] client lang: <none>
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] server lang: <none>
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] kex follows: False
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] Compression: none
2025-12-13T01:05:46.813 [DEBUG] [Thread-79845] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:05:46.870 [DEBUG] [Thread-79845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:05:46.870 [DEBUG] [Thread-79845] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:05:46.871 [DEBUG] [Thread-79845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:05:46.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:05:46.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:05:46.930 [DEBUG] [Thread-79845] [transport.py] [_log()] userauth is OK
2025-12-13T01:05:46.930 [DEBUG] [Thread-79845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:05:46.930 [DEBUG] [Thread-79845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:05:46.930 [DEBUG] [Thread-79845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:05:46.930 [DEBUG] [Thread-79845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:05:46.949 [INFO] [Thread-79845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:05:46.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:05:46.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:05:47.777 [DEBUG] [Thread-79845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:05:47.777 [DEBUG] [Thread-79845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:05:47.825 [DEBUG] [Thread-79845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:05:47.825 [DEBUG] [Thread-79845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:05:47.834 [DEBUG] [Thread-79845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:05:47.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:05:47.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:05:47.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:05:47.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:05:47.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:05:47.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:05:47.868 [DEBUG] [Thread-79845] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:05:54.519 [DEBUG] [Thread-79847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:09.569 [DEBUG] [Thread-79848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:09.967 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:09.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:06:17.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:06:17.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:06:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 5, 59), 1.52, 90.31, 0.0, 35.84, 5.16, 1, 2, 0, 2, 0, 0),)
2025-12-13T01:06:18.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:05:59
2025-12-13T01:06:18.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:06:18.853 [DEBUG] [Thread-79849] [transport.py] [_log()] starting thread (client mode): 0xf578afb0
2025-12-13T01:06:18.853 [DEBUG] [Thread-79849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:06:18.874 [DEBUG] [Thread-79849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:06:18.874 [INFO] [Thread-79849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:06:18.877 [DEBUG] [Thread-79849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] client lang: <none>
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] server lang: <none>
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] kex follows: False
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] Compression: none
2025-12-13T01:06:18.878 [DEBUG] [Thread-79849] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:06:18.896 [DEBUG] [Thread-79849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:06:18.896 [DEBUG] [Thread-79849] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:06:18.897 [DEBUG] [Thread-79849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:06:18.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:06:18.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:06:18.899 [DEBUG] [Thread-79849] [transport.py] [_log()] userauth is OK
2025-12-13T01:06:18.899 [DEBUG] [Thread-79849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:06:18.899 [DEBUG] [Thread-79849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:06:18.899 [DEBUG] [Thread-79849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:06:18.899 [DEBUG] [Thread-79849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:06:18.934 [INFO] [Thread-79849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:06:18.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:06:19.736 [DEBUG] [Thread-79849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:06:19.736 [DEBUG] [Thread-79849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:06:19.737 [DEBUG] [Thread-79849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:06:19.777 [DEBUG] [Thread-79849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:06:19.777 [DEBUG] [Thread-79849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:06:19.779 [DEBUG] [Thread-79849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:06:19.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:06:19.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:06:19.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:06:19.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:06:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:06:19.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:06:19.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:06:19.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:06:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:06:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.962249 -999.00   +7.80  42.97     89   +6.10 1 1 2 3 1     0    0 2.27 23.36 ZNESW 36.7 43.0 301.6 51.8 9.0 -19.3 8.7 -22.0 8.4 -16.4 8.9 -10.4
2025-12-13T01:06:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:06:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:06:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.962249
2025-12-13T01:06:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:06:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:06:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:06:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:06:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:06:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:05:59', tmtdew=1.52, humidity=90.31, cloud=0.0, wind=35.84, temperature=5.16, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:05:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:04:00')
2025-12-13T01:06:19.802 [DEBUG] [Thread-79849] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:06:19.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:06:19.911 [DEBUG] [Thread-79852] [transport.py] [_log()] starting thread (client mode): 0xf5702830
2025-12-13T01:06:19.911 [DEBUG] [Thread-79852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:06:19.927 [DEBUG] [Thread-79852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:06:19.927 [INFO] [Thread-79852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:06:19.934 [DEBUG] [Thread-79852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] client lang: <none>
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] server lang: <none>
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] kex follows: False
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] Compression: none
2025-12-13T01:06:19.935 [DEBUG] [Thread-79852] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:06:19.991 [DEBUG] [Thread-79852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:06:19.992 [DEBUG] [Thread-79852] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:06:19.992 [DEBUG] [Thread-79852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:06:19.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:06:19.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:06:20.048 [DEBUG] [Thread-79852] [transport.py] [_log()] userauth is OK
2025-12-13T01:06:20.048 [DEBUG] [Thread-79852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:06:20.048 [DEBUG] [Thread-79852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:06:20.048 [DEBUG] [Thread-79852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:06:20.048 [DEBUG] [Thread-79852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:06:20.068 [INFO] [Thread-79852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:06:20.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:06:20.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:06:20.887 [DEBUG] [Thread-79852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:06:20.887 [DEBUG] [Thread-79852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:06:20.935 [DEBUG] [Thread-79852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:06:20.935 [DEBUG] [Thread-79852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:06:20.944 [DEBUG] [Thread-79852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:06:20.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:06:20.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:06:20.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:06:20.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:06:20.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:06:20.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:06:20.979 [DEBUG] [Thread-79852] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:06:24.597 [DEBUG] [Thread-79854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:28.175 [DEBUG] [Thread-79855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:39.645 [DEBUG] [Thread-79856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:06:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:06:50.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:06:50.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:06:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 6, 31), 2.28, 85.54, 0.0, 37.26, 7.94, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:06:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:06:31
2025-12-13T01:06:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:06:51.952 [DEBUG] [Thread-79857] [transport.py] [_log()] starting thread (client mode): 0xf5700d60
2025-12-13T01:06:51.952 [DEBUG] [Thread-79857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:06:51.973 [DEBUG] [Thread-79857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:06:51.973 [INFO] [Thread-79857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:06:51.976 [DEBUG] [Thread-79857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] client lang: <none>
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] server lang: <none>
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] kex follows: False
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] Compression: none
2025-12-13T01:06:51.982 [DEBUG] [Thread-79857] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:06:52.001 [DEBUG] [Thread-79857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:06:52.001 [DEBUG] [Thread-79857] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:06:52.002 [DEBUG] [Thread-79857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:06:52.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:06:52.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:06:52.004 [DEBUG] [Thread-79857] [transport.py] [_log()] userauth is OK
2025-12-13T01:06:52.004 [DEBUG] [Thread-79857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:06:52.005 [DEBUG] [Thread-79857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:06:52.005 [DEBUG] [Thread-79857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:06:52.005 [DEBUG] [Thread-79857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:06:52.029 [INFO] [Thread-79857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:06:52.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:06:52.663 [DEBUG] [Thread-79857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:06:52.663 [DEBUG] [Thread-79857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:06:52.663 [DEBUG] [Thread-79857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:06:52.704 [DEBUG] [Thread-79857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:06:52.704 [DEBUG] [Thread-79857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:06:52.707 [DEBUG] [Thread-79857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:06:52.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:06:52.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:06:52.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:06:52.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:06:52.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:06:52.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:06:52.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:06:52.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:06:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:06:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.962596 -999.00   +7.80  37.45     89   +6.10 1 2 2 3 1     0    0 2.24 22.63 Z.EsW 40.4 37.5 300.2 51.4 8.9 -9.7 8.8 -13.6 8.4 -13.8 8.9 -15.7
2025-12-13T01:06:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:06:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:06:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.962596
2025-12-13T01:06:52.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:06:52.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:06:52.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:06:52.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:06:52.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:06:52.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:06:31', tmtdew=2.28, humidity=85.54, cloud=0.0, wind=37.26, temperature=7.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:06:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:04:00')
2025-12-13T01:06:52.729 [DEBUG] [Thread-79857] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:06:52.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:06:52.818 [DEBUG] [Thread-79860] [transport.py] [_log()] starting thread (client mode): 0xf5700f40
2025-12-13T01:06:52.818 [DEBUG] [Thread-79860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:06:52.833 [DEBUG] [Thread-79860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:06:52.833 [INFO] [Thread-79860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] client lang: <none>
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] server lang: <none>
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] kex follows: False
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] Compression: none
2025-12-13T01:06:52.841 [DEBUG] [Thread-79860] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:06:52.897 [DEBUG] [Thread-79860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:06:52.898 [DEBUG] [Thread-79860] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:06:52.898 [DEBUG] [Thread-79860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:06:52.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:06:52.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:06:52.954 [DEBUG] [Thread-79860] [transport.py] [_log()] userauth is OK
2025-12-13T01:06:52.954 [DEBUG] [Thread-79860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:06:52.954 [DEBUG] [Thread-79860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:06:52.954 [DEBUG] [Thread-79860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:06:52.954 [DEBUG] [Thread-79860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:06:52.973 [INFO] [Thread-79860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:06:52.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:06:52.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:06:53.801 [DEBUG] [Thread-79860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:06:53.801 [DEBUG] [Thread-79860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:06:53.849 [DEBUG] [Thread-79860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:06:53.849 [DEBUG] [Thread-79860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:06:53.858 [DEBUG] [Thread-79860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:06:53.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:06:53.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:06:53.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:06:53.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:06:53.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:06:53.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:06:53.893 [DEBUG] [Thread-79860] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:06:54.673 [DEBUG] [Thread-79862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:09.725 [DEBUG] [Thread-79863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:10.172 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:10.173 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:23.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:07:23.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:07:23.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:07:24.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 7, 3), 2.28, 85.49, 0.0, 40.49, 7.92, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:07:24.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:07:03
2025-12-13T01:07:24.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:07:24.752 [DEBUG] [Thread-79864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:24.890 [DEBUG] [Thread-79865] [transport.py] [_log()] starting thread (client mode): 0xf57008e0
2025-12-13T01:07:24.890 [DEBUG] [Thread-79865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:07:24.910 [DEBUG] [Thread-79865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:07:24.910 [INFO] [Thread-79865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:07:24.913 [DEBUG] [Thread-79865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:07:24.913 [DEBUG] [Thread-79865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] client lang: <none>
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] server lang: <none>
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] kex follows: False
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] Compression: none
2025-12-13T01:07:24.914 [DEBUG] [Thread-79865] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:07:24.931 [DEBUG] [Thread-79865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:07:24.932 [DEBUG] [Thread-79865] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:07:24.932 [DEBUG] [Thread-79865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:07:24.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:07:24.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:07:24.936 [DEBUG] [Thread-79865] [transport.py] [_log()] userauth is OK
2025-12-13T01:07:24.936 [DEBUG] [Thread-79865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:07:24.936 [DEBUG] [Thread-79865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:07:24.936 [DEBUG] [Thread-79865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:07:24.936 [DEBUG] [Thread-79865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:07:24.960 [INFO] [Thread-79865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:07:24.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:07:25.587 [DEBUG] [Thread-79865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:07:25.587 [DEBUG] [Thread-79865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:07:25.588 [DEBUG] [Thread-79865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:07:25.628 [DEBUG] [Thread-79865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:07:25.629 [DEBUG] [Thread-79865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:07:25.632 [DEBUG] [Thread-79865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:07:25.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:07:25.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:07:25.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:07:25.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:07:25.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:07:25.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:07:25.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:07:25.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:07:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:07:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.963291 -999.00   +7.70  42.36     89   +6.10 1 2 2 3 1     0    0 2.22 20.91 Z.ESw 38.6 42.4 305.7 49.3 8.8 -19.6 8.6 -19.1 8.4 -15.8 8.8 -15.3
2025-12-13T01:07:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:07:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:07:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.963291
2025-12-13T01:07:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:07:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:07:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:07:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:07:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:07:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:07:03', tmtdew=2.28, humidity=85.49, cloud=0.0, wind=40.49, temperature=7.92, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:07:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:04:00')
2025-12-13T01:07:25.658 [DEBUG] [Thread-79865] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:07:25.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:07:25.755 [DEBUG] [Thread-79868] [transport.py] [_log()] starting thread (client mode): 0xf57710c0
2025-12-13T01:07:25.755 [DEBUG] [Thread-79868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:07:25.770 [DEBUG] [Thread-79868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:07:25.770 [INFO] [Thread-79868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:25.778 [DEBUG] [Thread-79868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] client lang: <none>
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] server lang: <none>
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] kex follows: False
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] Compression: none
2025-12-13T01:07:25.779 [DEBUG] [Thread-79868] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:07:25.835 [DEBUG] [Thread-79868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:07:25.835 [DEBUG] [Thread-79868] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:07:25.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:07:25.836 [DEBUG] [Thread-79868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:07:25.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:07:25.892 [DEBUG] [Thread-79868] [transport.py] [_log()] userauth is OK
2025-12-13T01:07:25.892 [DEBUG] [Thread-79868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:07:25.892 [DEBUG] [Thread-79868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:07:25.892 [DEBUG] [Thread-79868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:07:25.892 [DEBUG] [Thread-79868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:07:25.913 [INFO] [Thread-79868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:07:25.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:07:25.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:07:26.770 [DEBUG] [Thread-79868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:07:26.770 [DEBUG] [Thread-79868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:07:26.818 [DEBUG] [Thread-79868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:07:26.819 [DEBUG] [Thread-79868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:07:26.828 [DEBUG] [Thread-79868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:07:26.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:07:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:07:26.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:07:26.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:07:26.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:07:26.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:07:26.863 [DEBUG] [Thread-79868] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:07:28.251 [DEBUG] [Thread-79870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:39.783 [DEBUG] [Thread-79871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:54.828 [DEBUG] [Thread-79872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:07:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:07:56.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:07:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:07:57.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 7, 35), 2.29, 85.44, 0.0, 38.3, 7.85, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:07:57.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:07:35
2025-12-13T01:07:57.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:07:57.890 [DEBUG] [Thread-79873] [transport.py] [_log()] starting thread (client mode): 0xf818a170
2025-12-13T01:07:57.890 [DEBUG] [Thread-79873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:07:57.908 [DEBUG] [Thread-79873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:07:57.908 [INFO] [Thread-79873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:07:57.911 [DEBUG] [Thread-79873] [transport.py] [_log()] client lang: <none>
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] server lang: <none>
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] kex follows: False
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] Compression: none
2025-12-13T01:07:57.912 [DEBUG] [Thread-79873] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:07:57.927 [DEBUG] [Thread-79873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:07:57.928 [DEBUG] [Thread-79873] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:07:57.928 [DEBUG] [Thread-79873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:07:57.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:07:57.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:07:57.929 [DEBUG] [Thread-79873] [transport.py] [_log()] userauth is OK
2025-12-13T01:07:57.929 [DEBUG] [Thread-79873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:07:57.929 [DEBUG] [Thread-79873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:07:57.929 [DEBUG] [Thread-79873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:07:57.929 [DEBUG] [Thread-79873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:07:57.944 [INFO] [Thread-79873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:07:57.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:07:58.591 [DEBUG] [Thread-79873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:07:58.591 [DEBUG] [Thread-79873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:07:58.591 [DEBUG] [Thread-79873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:07:58.632 [DEBUG] [Thread-79873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:07:58.632 [DEBUG] [Thread-79873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:07:58.634 [DEBUG] [Thread-79873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:07:58.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:07:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:07:58.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:07:58.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:07:58.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:07:58.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:07:58.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.963638 -999.00   +7.70  47.94     89   +6.00 1 1 2 3 1     0    0 2.19 20.31 ZNESW 38.4 47.9 295.6 56.3 8.8 -17.1 8.6 -16.9 8.4 -18.5 8.7 -17.4
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.963638
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:07:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:07:35', tmtdew=2.29, humidity=85.44, cloud=0.0, wind=38.3, temperature=7.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:07:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:04:00')
2025-12-13T01:07:58.649 [DEBUG] [Thread-79873] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:07:58.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:07:58.734 [DEBUG] [Thread-79876] [transport.py] [_log()] starting thread (client mode): 0xf818bb50
2025-12-13T01:07:58.735 [DEBUG] [Thread-79876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:07:58.749 [DEBUG] [Thread-79876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:07:58.749 [INFO] [Thread-79876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] client lang: <none>
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] server lang: <none>
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] kex follows: False
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] Compression: none
2025-12-13T01:07:58.757 [DEBUG] [Thread-79876] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:07:58.813 [DEBUG] [Thread-79876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:07:58.813 [DEBUG] [Thread-79876] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:07:58.813 [DEBUG] [Thread-79876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:07:58.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:07:58.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:07:58.870 [DEBUG] [Thread-79876] [transport.py] [_log()] userauth is OK
2025-12-13T01:07:58.870 [DEBUG] [Thread-79876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:07:58.870 [DEBUG] [Thread-79876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:07:58.870 [DEBUG] [Thread-79876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:07:58.870 [DEBUG] [Thread-79876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:07:58.885 [INFO] [Thread-79876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:07:58.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:07:58.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:07:59.778 [DEBUG] [Thread-79876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:07:59.778 [DEBUG] [Thread-79876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:07:59.826 [DEBUG] [Thread-79876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:07:59.826 [DEBUG] [Thread-79876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:07:59.835 [DEBUG] [Thread-79876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:07:59.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:07:59.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:07: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
2025-12-13T01:07:59.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:07:59.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:07:59.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:07:59.866 [DEBUG] [Thread-79876] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:08:09.852 [DEBUG] [Thread-79878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:08:10.377 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:08:10.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:08:24.891 [DEBUG] [Thread-79879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:08:28.339 [DEBUG] [Thread-79880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:08:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:08:29.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:08:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:08:30.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 8, 7), 2.29, 85.47, 0.0, 39.57, 7.82, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:08:30.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:08:07
2025-12-13T01:08:30.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:08:30.864 [DEBUG] [Thread-79881] [transport.py] [_log()] starting thread (client mode): 0xfabc6da0
2025-12-13T01:08:30.864 [DEBUG] [Thread-79881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:08:30.886 [DEBUG] [Thread-79881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:08:30.886 [INFO] [Thread-79881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:08:30.889 [DEBUG] [Thread-79881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:08:30.889 [DEBUG] [Thread-79881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] client lang: <none>
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] server lang: <none>
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] kex follows: False
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] Compression: none
2025-12-13T01:08:30.890 [DEBUG] [Thread-79881] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:08:30.901 [DEBUG] [Thread-79881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:08:30.901 [DEBUG] [Thread-79881] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:08:30.902 [DEBUG] [Thread-79881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:08:30.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:08:30.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:08:30.904 [DEBUG] [Thread-79881] [transport.py] [_log()] userauth is OK
2025-12-13T01:08:30.904 [DEBUG] [Thread-79881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:08:30.904 [DEBUG] [Thread-79881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:08:30.904 [DEBUG] [Thread-79881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:08:30.904 [DEBUG] [Thread-79881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:08:30.922 [INFO] [Thread-79881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:08:30.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:08:31.533 [DEBUG] [Thread-79881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:08:31.533 [DEBUG] [Thread-79881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:08:31.534 [DEBUG] [Thread-79881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:08:31.574 [DEBUG] [Thread-79881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:08:31.574 [DEBUG] [Thread-79881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:08:31.577 [DEBUG] [Thread-79881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:08:31.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:08:31.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:08:31.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:08:31.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:08:31.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:08:31.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:08:31.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:08:31.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:08:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:08:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.963985 -999.00   +7.70  39.61     89   +6.10 1 1 2 3 1     0    0 2.15 18.65 ZNESW 40.6 39.6 307.6 55.0 8.8 -18.7 8.6 -19.4 8.3 -19.7 8.7 -17.3
2025-12-13T01:08:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:08:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:08:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.963985
2025-12-13T01:08:31.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:08:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:08:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:08:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:08:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:08:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:08:07', tmtdew=2.29, humidity=85.47, cloud=0.0, wind=39.57, temperature=7.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:08:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:07:00')
2025-12-13T01:08:31.602 [DEBUG] [Thread-79881] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:08:31.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:08:31.697 [DEBUG] [Thread-79884] [transport.py] [_log()] starting thread (client mode): 0xf5700310
2025-12-13T01:08:31.697 [DEBUG] [Thread-79884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:08:31.714 [DEBUG] [Thread-79884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:08:31.714 [INFO] [Thread-79884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] client lang: <none>
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] server lang: <none>
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] kex follows: False
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:08:31.724 [DEBUG] [Thread-79884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:08:31.725 [DEBUG] [Thread-79884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:08:31.725 [DEBUG] [Thread-79884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:08:31.725 [DEBUG] [Thread-79884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:08:31.725 [DEBUG] [Thread-79884] [transport.py] [_log()] Compression: none
2025-12-13T01:08:31.725 [DEBUG] [Thread-79884] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:08:31.781 [DEBUG] [Thread-79884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:08:31.781 [DEBUG] [Thread-79884] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:08:31.782 [DEBUG] [Thread-79884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:08:31.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:08:31.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:08:31.837 [DEBUG] [Thread-79884] [transport.py] [_log()] userauth is OK
2025-12-13T01:08:31.837 [DEBUG] [Thread-79884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:08:31.838 [DEBUG] [Thread-79884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:08:31.838 [DEBUG] [Thread-79884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:08:31.838 [DEBUG] [Thread-79884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:08:31.863 [INFO] [Thread-79884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:08:31.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:08:31.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:08:32.727 [DEBUG] [Thread-79884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:08:32.727 [DEBUG] [Thread-79884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:08:32.776 [DEBUG] [Thread-79884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:08:32.777 [DEBUG] [Thread-79884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:08:32.786 [DEBUG] [Thread-79884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:08:32.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:08:32.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:08:32.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:08:32.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:08:32.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:08:32.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:08:32.824 [DEBUG] [Thread-79884] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:08:39.922 [DEBUG] [Thread-79886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:08:54.960 [DEBUG] [Thread-79887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:02.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:09:02.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:09:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:09:03.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 8, 39), 2.24, 85.47, 0.0, 35.45, 7.81, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:09:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:08:39
2025-12-13T01:09:03.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:09:03.839 [DEBUG] [Thread-79888] [transport.py] [_log()] starting thread (client mode): 0xf5700d60
2025-12-13T01:09:03.839 [DEBUG] [Thread-79888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:09:03.860 [DEBUG] [Thread-79888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:09:03.860 [INFO] [Thread-79888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] client lang: <none>
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] server lang: <none>
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] kex follows: False
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] Compression: none
2025-12-13T01:09:03.863 [DEBUG] [Thread-79888] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:09:03.883 [DEBUG] [Thread-79888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:09:03.883 [DEBUG] [Thread-79888] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:09:03.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:09:03.885 [DEBUG] [Thread-79888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:09:03.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:09:03.886 [DEBUG] [Thread-79888] [transport.py] [_log()] userauth is OK
2025-12-13T01:09:03.886 [DEBUG] [Thread-79888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:09:03.886 [DEBUG] [Thread-79888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:09:03.887 [DEBUG] [Thread-79888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:09:03.887 [DEBUG] [Thread-79888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:09:03.902 [INFO] [Thread-79888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:09:03.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:09:04.561 [DEBUG] [Thread-79888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:09:04.561 [DEBUG] [Thread-79888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:09:04.561 [DEBUG] [Thread-79888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:09:04.602 [DEBUG] [Thread-79888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:09:04.602 [DEBUG] [Thread-79888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:09:04.605 [DEBUG] [Thread-79888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:09:04.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:09:04.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:09:04.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:09:04.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:09:04.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:09:04.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:09:04.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:09:04.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:09:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:09:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.964332 -999.00   +7.70  34.98     89   +6.10 1 1 2 3 1     0    0 2.10 17.47 ZNESW 42.9 35.0 310.2 48.9 8.8 -19.5 8.6 -21.9 8.3 -21.0 8.8 -19.9
2025-12-13T01:09:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:09:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:09:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.964332
2025-12-13T01:09:04.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:09:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:09:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:09:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:09:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:09:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:08:39', tmtdew=2.24, humidity=85.47, cloud=0.0, wind=35.45, temperature=7.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:08:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:07:00')
2025-12-13T01:09:04.629 [DEBUG] [Thread-79888] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:09:04.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:09:04.726 [DEBUG] [Thread-79891] [transport.py] [_log()] starting thread (client mode): 0xf572f430
2025-12-13T01:09:04.726 [DEBUG] [Thread-79891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:09:04.741 [DEBUG] [Thread-79891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:09:04.741 [INFO] [Thread-79891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] client lang: <none>
2025-12-13T01:09:04.749 [DEBUG] [Thread-79891] [transport.py] [_log()] server lang: <none>
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] kex follows: False
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] Compression: none
2025-12-13T01:09:04.750 [DEBUG] [Thread-79891] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:09:04.807 [DEBUG] [Thread-79891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:09:04.807 [DEBUG] [Thread-79891] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:09:04.808 [DEBUG] [Thread-79891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:09:04.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:09:04.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:09:04.867 [DEBUG] [Thread-79891] [transport.py] [_log()] userauth is OK
2025-12-13T01:09:04.867 [DEBUG] [Thread-79891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:09:04.867 [DEBUG] [Thread-79891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:09:04.867 [DEBUG] [Thread-79891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:09:04.867 [DEBUG] [Thread-79891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:09:04.886 [INFO] [Thread-79891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:09:04.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:09:04.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:09:05.761 [DEBUG] [Thread-79891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:09:05.762 [DEBUG] [Thread-79891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:09:05.810 [DEBUG] [Thread-79891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:09:05.810 [DEBUG] [Thread-79891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:09:05.819 [DEBUG] [Thread-79891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:09:05.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:09:05.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:09:05.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:09:05.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:09:05.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:09:05.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:09:05.852 [DEBUG] [Thread-79891] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:09:09.989 [DEBUG] [Thread-79893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:10.580 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:10.581 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:25.031 [DEBUG] [Thread-79894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:28.418 [DEBUG] [Thread-79895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:35.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:09:35.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:09:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:09:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 9, 11), 2.21, 85.62, 0.0, 36.56, 7.87, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:09:36.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:09:11
2025-12-13T01:09:36.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:09:36.824 [DEBUG] [Thread-79896] [transport.py] [_log()] starting thread (client mode): 0xfabc6830
2025-12-13T01:09:36.824 [DEBUG] [Thread-79896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:09:36.844 [DEBUG] [Thread-79896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:09:36.844 [INFO] [Thread-79896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] client lang: <none>
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] server lang: <none>
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] kex follows: False
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] Compression: none
2025-12-13T01:09:36.846 [DEBUG] [Thread-79896] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:09:36.859 [DEBUG] [Thread-79896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:09:36.860 [DEBUG] [Thread-79896] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:09:36.860 [DEBUG] [Thread-79896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:09:36.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:09:36.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:09:36.862 [DEBUG] [Thread-79896] [transport.py] [_log()] userauth is OK
2025-12-13T01:09:36.863 [DEBUG] [Thread-79896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:09:36.863 [DEBUG] [Thread-79896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:09:36.863 [DEBUG] [Thread-79896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:09:36.863 [DEBUG] [Thread-79896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:09:36.886 [INFO] [Thread-79896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:09:36.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:09:37.516 [DEBUG] [Thread-79896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:09:37.516 [DEBUG] [Thread-79896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:09:37.517 [DEBUG] [Thread-79896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:09:37.557 [DEBUG] [Thread-79896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:09:37.557 [DEBUG] [Thread-79896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:09:37.560 [DEBUG] [Thread-79896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:09:37.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:09:37.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:09:37.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:09:37.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:09:37.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:09:37.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:09:37.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:09:37.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:09:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:09:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.964680 -999.00   +7.70  35.09     89   +6.10 1 1 2 3 1     0    0 2.14 18.41 ZNESW 45.8 35.1 312.6 58.0 8.8 -22.1 8.6 -23.0 8.3 -21.1 8.7 -21.9
2025-12-13T01:09:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:09:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:09:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.964680
2025-12-13T01:09:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:09:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:09:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:09:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:09:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:09:37.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:09:11', tmtdew=2.21, humidity=85.62, cloud=0.0, wind=36.56, temperature=7.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:09:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:07:00')
2025-12-13T01:09:37.585 [DEBUG] [Thread-79896] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:09:37.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:09:37.687 [DEBUG] [Thread-79899] [transport.py] [_log()] starting thread (client mode): 0xf5742320
2025-12-13T01:09:37.687 [DEBUG] [Thread-79899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:09:37.701 [DEBUG] [Thread-79899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:09:37.701 [INFO] [Thread-79899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] client lang: <none>
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] server lang: <none>
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] kex follows: False
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:09:37.709 [DEBUG] [Thread-79899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:09:37.710 [DEBUG] [Thread-79899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:09:37.710 [DEBUG] [Thread-79899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:09:37.710 [DEBUG] [Thread-79899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:09:37.710 [DEBUG] [Thread-79899] [transport.py] [_log()] Compression: none
2025-12-13T01:09:37.710 [DEBUG] [Thread-79899] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:09:37.765 [DEBUG] [Thread-79899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:09:37.765 [DEBUG] [Thread-79899] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:09:37.766 [DEBUG] [Thread-79899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:09:37.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:09:37.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:09:37.821 [DEBUG] [Thread-79899] [transport.py] [_log()] userauth is OK
2025-12-13T01:09:37.822 [DEBUG] [Thread-79899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:09:37.822 [DEBUG] [Thread-79899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:09:37.822 [DEBUG] [Thread-79899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:09:37.822 [DEBUG] [Thread-79899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:09:37.842 [INFO] [Thread-79899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:09:37.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:09:37.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:09:38.677 [DEBUG] [Thread-79899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:09:38.678 [DEBUG] [Thread-79899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:09:38.726 [DEBUG] [Thread-79899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:09:38.726 [DEBUG] [Thread-79899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:09:38.735 [DEBUG] [Thread-79899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:09:38.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:09:38.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:09: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') -> 00000000
2025-12-13T01:09:38.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:09:38.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:09:38.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:09:38.770 [DEBUG] [Thread-79899] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:09:40.060 [DEBUG] [Thread-79901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:09:55.098 [DEBUG] [Thread-79902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:08.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:10:08.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:10:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:10:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 9, 43), 2.2, 85.67, 0.0, 32.62, 7.87, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:10:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:09:43
2025-12-13T01:10:09.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:10:09.752 [DEBUG] [Thread-79903] [transport.py] [_log()] starting thread (client mode): 0xf818a2c0
2025-12-13T01:10:09.752 [DEBUG] [Thread-79903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:10:09.772 [DEBUG] [Thread-79903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:10:09.772 [INFO] [Thread-79903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:09.773 [DEBUG] [Thread-79903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] client lang: <none>
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] server lang: <none>
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] kex follows: False
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] Compression: none
2025-12-13T01:10:09.774 [DEBUG] [Thread-79903] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:10:09.783 [DEBUG] [Thread-79903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:10:09.784 [DEBUG] [Thread-79903] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:10:09.784 [DEBUG] [Thread-79903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:10:09.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:10:09.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:10:09.786 [DEBUG] [Thread-79903] [transport.py] [_log()] userauth is OK
2025-12-13T01:10:09.786 [DEBUG] [Thread-79903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:10:09.786 [DEBUG] [Thread-79903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:10:09.786 [DEBUG] [Thread-79903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:10:09.786 [DEBUG] [Thread-79903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:10:09.809 [INFO] [Thread-79903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:10:09.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:10:10.129 [DEBUG] [Thread-79905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:10.377 [DEBUG] [Thread-79903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:10:10.377 [DEBUG] [Thread-79903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:10:10.378 [DEBUG] [Thread-79903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:10:10.418 [DEBUG] [Thread-79903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:10:10.418 [DEBUG] [Thread-79903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:10:10.421 [DEBUG] [Thread-79903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:10:10.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:10:10.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:10:10.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:10:10.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:10:10.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:10:10.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:10:10.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:10:10.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:10:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:10:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.965027 -999.00   +7.60  45.45     89   +6.10 1 2 2 3 1     0    0 2.12 16.95 Z.ESW 43.8 45.5 308.2 57.1 8.8 -23.3 8.6 -23.0 8.2 -20.2 8.6 -20.9
2025-12-13T01:10:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:10:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:10:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.965027
2025-12-13T01:10:10.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:10:10.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:10:10.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:10:10.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:10:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:10:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:09:43', tmtdew=2.2, humidity=85.67, cloud=0.0, wind=32.62, temperature=7.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:09:38.333', atlas_cloud=2, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:07:00')
2025-12-13T01:10:10.443 [DEBUG] [Thread-79903] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:10:10.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:10:10.547 [DEBUG] [Thread-79907] [transport.py] [_log()] starting thread (client mode): 0xf81e55d0
2025-12-13T01:10:10.547 [DEBUG] [Thread-79907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:10:10.573 [DEBUG] [Thread-79907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:10:10.573 [INFO] [Thread-79907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:10:10.580 [DEBUG] [Thread-79907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] client lang: <none>
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] server lang: <none>
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] kex follows: False
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:10:10.581 [DEBUG] [Thread-79907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:10:10.582 [DEBUG] [Thread-79907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:10:10.582 [DEBUG] [Thread-79907] [transport.py] [_log()] Compression: none
2025-12-13T01:10:10.582 [DEBUG] [Thread-79907] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:10:10.640 [DEBUG] [Thread-79907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:10:10.641 [DEBUG] [Thread-79907] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:10:10.641 [DEBUG] [Thread-79907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:10:10.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:10:10.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:10:10.696 [DEBUG] [Thread-79907] [transport.py] [_log()] userauth is OK
2025-12-13T01:10:10.696 [DEBUG] [Thread-79907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:10:10.696 [DEBUG] [Thread-79907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:10:10.697 [DEBUG] [Thread-79907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:10:10.697 [DEBUG] [Thread-79907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:10:10.716 [INFO] [Thread-79907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:10:10.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:10:10.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:10:10.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:10.790 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:11.606 [DEBUG] [Thread-79907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:10:11.606 [DEBUG] [Thread-79907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:10:11.656 [DEBUG] [Thread-79907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:10:11.656 [DEBUG] [Thread-79907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:10:11.665 [DEBUG] [Thread-79907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:10:11.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:10:11.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')
2025-12-13T01:10:11.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:10:11.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:10:11.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:10:11.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:10:11.708 [DEBUG] [Thread-79907] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:10:25.159 [DEBUG] [Thread-79909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:28.495 [DEBUG] [Thread-79910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:40.203 [DEBUG] [Thread-79911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:10:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:10:41.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:10:41.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:10:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 10, 15), 2.2, 85.65, 0.0, 33.47, 7.81, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:10:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:10:15
2025-12-13T01:10:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:10:42.676 [DEBUG] [Thread-79912] [transport.py] [_log()] starting thread (client mode): 0xf5701c30
2025-12-13T01:10:42.676 [DEBUG] [Thread-79912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:10:42.695 [DEBUG] [Thread-79912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:10:42.695 [INFO] [Thread-79912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:10:42.696 [DEBUG] [Thread-79912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] client lang: <none>
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] server lang: <none>
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] kex follows: False
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] Compression: none
2025-12-13T01:10:42.697 [DEBUG] [Thread-79912] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:10:42.705 [DEBUG] [Thread-79912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:10:42.706 [DEBUG] [Thread-79912] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:10:42.706 [DEBUG] [Thread-79912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:10:42.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:10:42.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:10:42.706 [DEBUG] [Thread-79912] [transport.py] [_log()] userauth is OK
2025-12-13T01:10:42.706 [DEBUG] [Thread-79912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:10:42.707 [DEBUG] [Thread-79912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:10:42.707 [DEBUG] [Thread-79912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:10:42.707 [DEBUG] [Thread-79912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:10:42.722 [INFO] [Thread-79912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:10:42.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:10:43.284 [DEBUG] [Thread-79912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:10:43.284 [DEBUG] [Thread-79912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:10:43.284 [DEBUG] [Thread-79912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:10:43.325 [DEBUG] [Thread-79912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:10:43.325 [DEBUG] [Thread-79912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:10:43.327 [DEBUG] [Thread-79912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:10:43.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:10:43.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:10:43.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:10:43.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:10:43.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:10:43.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:10:43.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:10:43.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:10:43.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:10:43.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.965721 -999.00   +7.60  41.80     89   +6.10 1 1 2 3 1     0    0 2.06 15.58 ZNESW 39.9 41.8 315.8 48.9 8.7 -23.0 8.5 -22.4 8.2 -20.7 8.6 -20.1
2025-12-13T01:10:43.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:10:43.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:10:43.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.965721
2025-12-13T01:10:43.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:10:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:10:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:10:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:10:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:10:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:10:15', tmtdew=2.2, humidity=85.65, cloud=0.0, wind=33.47, temperature=7.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:10:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:07:00')
2025-12-13T01:10:43.352 [DEBUG] [Thread-79912] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:10:43.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:10:43.449 [DEBUG] [Thread-79915] [transport.py] [_log()] starting thread (client mode): 0xf81884f0
2025-12-13T01:10:43.449 [DEBUG] [Thread-79915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:10:43.463 [DEBUG] [Thread-79915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:10:43.463 [INFO] [Thread-79915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:10:43.470 [DEBUG] [Thread-79915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] client lang: <none>
2025-12-13T01:10:43.471 [DEBUG] [Thread-79915] [transport.py] [_log()] server lang: <none>
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] kex follows: False
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] Compression: none
2025-12-13T01:10:43.472 [DEBUG] [Thread-79915] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:10:43.530 [DEBUG] [Thread-79915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:10:43.530 [DEBUG] [Thread-79915] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:10:43.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:10:43.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:10:43.532 [DEBUG] [Thread-79915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:10:43.586 [DEBUG] [Thread-79915] [transport.py] [_log()] userauth is OK
2025-12-13T01:10:43.587 [DEBUG] [Thread-79915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:10:43.587 [DEBUG] [Thread-79915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:10:43.587 [DEBUG] [Thread-79915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:10:43.587 [DEBUG] [Thread-79915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:10:43.607 [INFO] [Thread-79915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:10:43.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:10:43.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:10:44.428 [DEBUG] [Thread-79915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:10:44.428 [DEBUG] [Thread-79915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:10:44.475 [DEBUG] [Thread-79915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:10:44.476 [DEBUG] [Thread-79915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:10:44.484 [DEBUG] [Thread-79915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:10:44.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:10:44.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:10:44.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:10:44.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:10:44.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:10:44.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:10:44.518 [DEBUG] [Thread-79915] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:10:55.233 [DEBUG] [Thread-79917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:10.275 [DEBUG] [Thread-79918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:10.994 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:10.995 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:14.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:11:14.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:11:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:11:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 10, 47), 2.2, 86.2, 0.0, 36.1, 7.82, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:11:15.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:10:47
2025-12-13T01:11:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:11:15.495 [DEBUG] [Thread-79919] [transport.py] [_log()] starting thread (client mode): 0xf81888e0
2025-12-13T01:11:15.495 [DEBUG] [Thread-79919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:11:15.515 [DEBUG] [Thread-79919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:11:15.515 [INFO] [Thread-79919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:11:15.518 [DEBUG] [Thread-79919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:11:15.518 [DEBUG] [Thread-79919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:11:15.518 [DEBUG] [Thread-79919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] client lang: <none>
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] server lang: <none>
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] kex follows: False
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:11:15.519 [DEBUG] [Thread-79919] [transport.py] [_log()] Compression: none
2025-12-13T01:11:15.520 [DEBUG] [Thread-79919] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:11:15.537 [DEBUG] [Thread-79919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:11:15.538 [DEBUG] [Thread-79919] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:11:15.539 [DEBUG] [Thread-79919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:11:15.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:11:15.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:11:15.541 [DEBUG] [Thread-79919] [transport.py] [_log()] userauth is OK
2025-12-13T01:11:15.542 [DEBUG] [Thread-79919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:11:15.542 [DEBUG] [Thread-79919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:11:15.542 [DEBUG] [Thread-79919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:11:15.542 [DEBUG] [Thread-79919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:11:15.577 [INFO] [Thread-79919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:11:15.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:11:16.195 [DEBUG] [Thread-79919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:11:16.196 [DEBUG] [Thread-79919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:11:16.196 [DEBUG] [Thread-79919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:11:16.237 [DEBUG] [Thread-79919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:11:16.237 [DEBUG] [Thread-79919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:11:16.239 [DEBUG] [Thread-79919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:11:16.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:11:16.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:11:16.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:11:16.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:11:16.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:11:16.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:11:16.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:11:16.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:11:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:11:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.965721 -999.00   +7.60  41.80     89   +6.10 1 1 2 3 1     0    0 2.06 15.58 ZNESW 39.9 41.8 315.8 48.9 8.7 -23.0 8.5 -22.4 8.2 -20.7 8.6 -20.1
2025-12-13T01:11:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:11:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:11:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.965721
2025-12-13T01:11:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:11:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:11:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:11:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:11:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:11:16.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:10:47', tmtdew=2.2, humidity=86.2, cloud=0.0, wind=36.1, temperature=7.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:10:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[0.988249999999999, 0.7092500000000008, 0.26224999999999987, 0.09849999999999959, 0.36850000000000094, 1.0047500000000023, 1.3714999999999993, 1.1812500000000004, 1.3794999999999993, 0.4980000000000011, 0.29625000000000057, 0.4305000000000003, 0.2419999999999991, 0.7462499999999999, 0.6489999999999991, 0.6389999999999993, 0.9967500000000005, 0.6455000000000002, 2.065999999999999, nan, 0.21949999999999825, 1.6447499999999984, nan, 1.7457500000000001, 0.8369999999999989, 0.6289999999999996, 1.2207499999999998, nan, 0.5085000000000006, 1.134500000000001, 2.3450000000000006, 1.3680000000000012, 0.4447499999999991], zp_timestamp='2025-12-12T23:07:00')
2025-12-13T01:11:16.263 [DEBUG] [Thread-79919] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:11:16.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:11:16.361 [DEBUG] [Thread-79922] [transport.py] [_log()] starting thread (client mode): 0xfabc6dd0
2025-12-13T01:11:16.361 [DEBUG] [Thread-79922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:11:16.376 [DEBUG] [Thread-79922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:11:16.376 [INFO] [Thread-79922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:11:16.384 [DEBUG] [Thread-79922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:11:16.384 [DEBUG] [Thread-79922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:11:16.384 [DEBUG] [Thread-79922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:11:16.384 [DEBUG] [Thread-79922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:16.384 [DEBUG] [Thread-79922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:16.384 [DEBUG] [Thread-79922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] client lang: <none>
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] server lang: <none>
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] kex follows: False
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:11:16.385 [DEBUG] [Thread-79922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:11:16.386 [DEBUG] [Thread-79922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:11:16.386 [DEBUG] [Thread-79922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:11:16.386 [DEBUG] [Thread-79922] [transport.py] [_log()] Compression: none
2025-12-13T01:11:16.386 [DEBUG] [Thread-79922] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:11:16.442 [DEBUG] [Thread-79922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:11:16.442 [DEBUG] [Thread-79922] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:11:16.443 [DEBUG] [Thread-79922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:11:16.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:11:16.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:11:16.497 [DEBUG] [Thread-79922] [transport.py] [_log()] userauth is OK
2025-12-13T01:11:16.498 [DEBUG] [Thread-79922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:11:16.498 [DEBUG] [Thread-79922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:11:16.498 [DEBUG] [Thread-79922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:11:16.498 [DEBUG] [Thread-79922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:11:16.519 [INFO] [Thread-79922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:11:16.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:11:16.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:11:17.358 [DEBUG] [Thread-79922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:11:17.358 [DEBUG] [Thread-79922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:11:17.406 [DEBUG] [Thread-79922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:11:17.407 [DEBUG] [Thread-79922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:11:17.416 [DEBUG] [Thread-79922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:11:17.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:11:17.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:11:17.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:11:17.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:11:17.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:11:17.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:11:17.449 [DEBUG] [Thread-79922] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:11:25.300 [DEBUG] [Thread-79924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:28.575 [DEBUG] [Thread-79925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:40.351 [DEBUG] [Thread-79926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:11:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:11:47.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:11:47.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:11:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 11, 19), 2.19, 86.24, 0.0, 36.45, 7.84, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:11:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:11:19
2025-12-13T01:11:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:11:48.515 [DEBUG] [Thread-79927] [transport.py] [_log()] starting thread (client mode): 0xf8188880
2025-12-13T01:11:48.516 [DEBUG] [Thread-79927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:11:48.534 [DEBUG] [Thread-79927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:11:48.535 [INFO] [Thread-79927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:48.538 [DEBUG] [Thread-79927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] client lang: <none>
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] server lang: <none>
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] kex follows: False
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] Compression: none
2025-12-13T01:11:48.539 [DEBUG] [Thread-79927] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:11:48.554 [DEBUG] [Thread-79927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:11:48.554 [DEBUG] [Thread-79927] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:11:48.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:11:48.555 [DEBUG] [Thread-79927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:11:48.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:11:48.555 [DEBUG] [Thread-79927] [transport.py] [_log()] userauth is OK
2025-12-13T01:11:48.556 [DEBUG] [Thread-79927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:11:48.556 [DEBUG] [Thread-79927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:11:48.556 [DEBUG] [Thread-79927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:11:48.556 [DEBUG] [Thread-79927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:11:48.566 [INFO] [Thread-79927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:11:48.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:11:49.230 [DEBUG] [Thread-79927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:11:49.230 [DEBUG] [Thread-79927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:11:49.230 [DEBUG] [Thread-79927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:11:49.271 [DEBUG] [Thread-79927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:11:49.271 [DEBUG] [Thread-79927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:11:49.273 [DEBUG] [Thread-79927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:11:49.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:11:49.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:11:49.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:11:49.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:11:49.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:11:49.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:11:49.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.966068 -999.00   +7.60  44.31     89   +6.00 1 1 2 3 1     0    0 2.09 15.31 ZNESW 45.9 44.3 316.6 49.1 8.6 -21.9 8.5 -22.0 8.2 -16.7 8.6 -20.1
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.966068
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:11:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:11:19', tmtdew=2.19, humidity=86.24, cloud=0.0, wind=36.45, temperature=7.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:11:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:09:00')
2025-12-13T01:11:49.293 [DEBUG] [Thread-79927] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:11:49.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:11:49.378 [DEBUG] [Thread-79930] [transport.py] [_log()] starting thread (client mode): 0xf818be80
2025-12-13T01:11:49.378 [DEBUG] [Thread-79930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:11:49.393 [DEBUG] [Thread-79930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:11:49.393 [INFO] [Thread-79930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] client lang: <none>
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] server lang: <none>
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] kex follows: False
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] Compression: none
2025-12-13T01:11:49.401 [DEBUG] [Thread-79930] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:11:49.463 [DEBUG] [Thread-79930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:11:49.463 [DEBUG] [Thread-79930] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:11:49.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:11:49.463 [DEBUG] [Thread-79930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:11:49.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:11:49.521 [DEBUG] [Thread-79930] [transport.py] [_log()] userauth is OK
2025-12-13T01:11:49.521 [DEBUG] [Thread-79930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:11:49.521 [DEBUG] [Thread-79930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:11:49.521 [DEBUG] [Thread-79930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:11:49.521 [DEBUG] [Thread-79930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:11:49.535 [INFO] [Thread-79930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:11:49.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:11:49.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:11:50.400 [DEBUG] [Thread-79930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:11:50.400 [DEBUG] [Thread-79930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:11:50.447 [DEBUG] [Thread-79930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:11:50.447 [DEBUG] [Thread-79930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:11:50.456 [DEBUG] [Thread-79930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:11:50.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:11:50.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:11:50.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:11:50.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:11:50.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:11:50.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:11:50.487 [DEBUG] [Thread-79930] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:11:55.379 [DEBUG] [Thread-79932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:10.432 [DEBUG] [Thread-79933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:11.197 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:11.198 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:20.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:12:20.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:12:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:12:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 11, 51), 2.2, 85.69, 0.0, 42.52, 7.84, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:12:21.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:11:51
2025-12-13T01:12:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:12:21.492 [DEBUG] [Thread-79934] [transport.py] [_log()] starting thread (client mode): 0xf572fac0
2025-12-13T01:12:21.492 [DEBUG] [Thread-79934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:12:21.511 [DEBUG] [Thread-79934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:12:21.511 [INFO] [Thread-79934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] client lang: <none>
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] server lang: <none>
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] kex follows: False
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:12:21.515 [DEBUG] [Thread-79934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:12:21.516 [DEBUG] [Thread-79934] [transport.py] [_log()] Compression: none
2025-12-13T01:12:21.516 [DEBUG] [Thread-79934] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:12:21.533 [DEBUG] [Thread-79934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:12:21.533 [DEBUG] [Thread-79934] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:12:21.534 [DEBUG] [Thread-79934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:12:21.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:12:21.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:12:21.536 [DEBUG] [Thread-79934] [transport.py] [_log()] userauth is OK
2025-12-13T01:12:21.536 [DEBUG] [Thread-79934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:12:21.536 [DEBUG] [Thread-79934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:12:21.536 [DEBUG] [Thread-79934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:12:21.537 [DEBUG] [Thread-79934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:12:21.572 [INFO] [Thread-79934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:12:21.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:12:22.201 [DEBUG] [Thread-79934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:12:22.201 [DEBUG] [Thread-79934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:12:22.201 [DEBUG] [Thread-79934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:12:22.242 [DEBUG] [Thread-79934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:12:22.242 [DEBUG] [Thread-79934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:12:22.245 [DEBUG] [Thread-79934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:12:22.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:12:22.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:12:22.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:12:22.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:12:22.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:12:22.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:12:22.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:12:22.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:12:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:12:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.966416 -999.00   +7.60  52.68     89   +6.00 1 1 2 3 1     0    0 2.05 15.68 ZNESW 47.8 52.7 311.6 60.4 8.7 -14.7 8.4 -15.3 8.2 -15.4 8.6 -14.2
2025-12-13T01:12:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:12:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:12:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.966416
2025-12-13T01:12:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:12:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:12:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:12:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:12:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:12:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:11:51', tmtdew=2.2, humidity=85.69, cloud=0.0, wind=42.52, temperature=7.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:11:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:09:00')
2025-12-13T01:12:22.272 [DEBUG] [Thread-79934] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:12:22.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:12:22.377 [DEBUG] [Thread-79937] [transport.py] [_log()] starting thread (client mode): 0xf81e51b0
2025-12-13T01:12:22.377 [DEBUG] [Thread-79937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:12:22.392 [DEBUG] [Thread-79937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:12:22.392 [INFO] [Thread-79937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:12:22.399 [DEBUG] [Thread-79937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:12:22.399 [DEBUG] [Thread-79937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:12:22.399 [DEBUG] [Thread-79937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] client lang: <none>
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] server lang: <none>
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] kex follows: False
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] Compression: none
2025-12-13T01:12:22.400 [DEBUG] [Thread-79937] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:12:22.459 [DEBUG] [Thread-79937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:12:22.459 [DEBUG] [Thread-79937] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:12:22.460 [DEBUG] [Thread-79937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:12:22.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:12:22.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:12:22.515 [DEBUG] [Thread-79937] [transport.py] [_log()] userauth is OK
2025-12-13T01:12:22.516 [DEBUG] [Thread-79937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:12:22.516 [DEBUG] [Thread-79937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:12:22.516 [DEBUG] [Thread-79937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:12:22.516 [DEBUG] [Thread-79937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:12:22.534 [INFO] [Thread-79937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:12:22.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:12:22.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:12:23.393 [DEBUG] [Thread-79937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:12:23.393 [DEBUG] [Thread-79937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:12:23.441 [DEBUG] [Thread-79937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:12:23.441 [DEBUG] [Thread-79937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:12:23.450 [DEBUG] [Thread-79937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:12:23.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:12:23.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:12:23.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:12:23.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:12:23.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:12:23.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:12:23.485 [DEBUG] [Thread-79937] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:12:25.461 [DEBUG] [Thread-79939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:28.645 [DEBUG] [Thread-79940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:40.493 [DEBUG] [Thread-79941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:12:53.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:12:53.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:12:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 12, 23), 2.22, 85.56, 0.0, 38.55, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:12:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:12:23
2025-12-13T01:12:54.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:12:54.471 [DEBUG] [Thread-79942] [transport.py] [_log()] starting thread (client mode): 0xfabc56f0
2025-12-13T01:12:54.471 [DEBUG] [Thread-79942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:12:54.491 [DEBUG] [Thread-79942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:12:54.491 [INFO] [Thread-79942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:12:54.494 [DEBUG] [Thread-79942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] client lang: <none>
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] server lang: <none>
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] kex follows: False
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] Compression: none
2025-12-13T01:12:54.495 [DEBUG] [Thread-79942] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:12:54.512 [DEBUG] [Thread-79942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:12:54.512 [DEBUG] [Thread-79942] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:12:54.513 [DEBUG] [Thread-79942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:12:54.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:12:54.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:12:54.514 [DEBUG] [Thread-79942] [transport.py] [_log()] userauth is OK
2025-12-13T01:12:54.515 [DEBUG] [Thread-79942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:12:54.515 [DEBUG] [Thread-79942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:12:54.515 [DEBUG] [Thread-79942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:12:54.515 [DEBUG] [Thread-79942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:12:54.529 [INFO] [Thread-79942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:12:54.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:12:55.180 [DEBUG] [Thread-79942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:12:55.180 [DEBUG] [Thread-79942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:12:55.181 [DEBUG] [Thread-79942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:12:55.221 [DEBUG] [Thread-79942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:12:55.221 [DEBUG] [Thread-79942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:12:55.224 [DEBUG] [Thread-79942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:12:55.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:12:55.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:12:55.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:12:55.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:12:55.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:12:55.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:12:55.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:12:55.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:12:55.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:12:55.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.966763 -999.00   +7.60  43.62     89   +6.10 1 1 2 3 1     0    0 1.95 12.85 ZNESW 46.0 43.6 314.6 56.0 8.6 -20.9 8.4 -21.0 8.2 -17.7 8.6 -16.8
2025-12-13T01:12:55.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:12:55.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:12:55.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.966763
2025-12-13T01:12:55.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:12:55.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:12:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:12:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:12:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:12:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:12:23', tmtdew=2.22, humidity=85.56, cloud=0.0, wind=38.55, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:12:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:09:00')
2025-12-13T01:12:55.248 [DEBUG] [Thread-79942] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:12:55.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:12:55.346 [DEBUG] [Thread-79945] [transport.py] [_log()] starting thread (client mode): 0xf81e6230
2025-12-13T01:12:55.346 [DEBUG] [Thread-79945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:12:55.361 [DEBUG] [Thread-79945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:12:55.361 [INFO] [Thread-79945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:12:55.369 [DEBUG] [Thread-79945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:12:55.369 [DEBUG] [Thread-79945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:12:55.369 [DEBUG] [Thread-79945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:12:55.369 [DEBUG] [Thread-79945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] client lang: <none>
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] server lang: <none>
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] kex follows: False
2025-12-13T01:12:55.370 [DEBUG] [Thread-79945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:12:55.371 [DEBUG] [Thread-79945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:12:55.371 [DEBUG] [Thread-79945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:12:55.371 [DEBUG] [Thread-79945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:12:55.371 [DEBUG] [Thread-79945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:12:55.371 [DEBUG] [Thread-79945] [transport.py] [_log()] Compression: none
2025-12-13T01:12:55.371 [DEBUG] [Thread-79945] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:12:55.426 [DEBUG] [Thread-79945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:12:55.426 [DEBUG] [Thread-79945] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:12:55.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:12:55.428 [DEBUG] [Thread-79945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:12:55.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:12:55.482 [DEBUG] [Thread-79945] [transport.py] [_log()] userauth is OK
2025-12-13T01:12:55.482 [DEBUG] [Thread-79945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:12:55.482 [DEBUG] [Thread-79945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:12:55.482 [DEBUG] [Thread-79945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:12:55.482 [DEBUG] [Thread-79945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:12:55.502 [INFO] [Thread-79945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:12:55.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:12:55.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:12:55.524 [DEBUG] [Thread-79947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:12:56.335 [DEBUG] [Thread-79945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:12:56.335 [DEBUG] [Thread-79945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:12:56.383 [DEBUG] [Thread-79945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:12:56.383 [DEBUG] [Thread-79945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:12:56.391 [DEBUG] [Thread-79945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:12:56.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:12:56.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:12:56.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:12:56.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:12:56.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:12:56.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:12:56.423 [DEBUG] [Thread-79945] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:13:10.567 [DEBUG] [Thread-79948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:11.400 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:11.401 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:25.598 [DEBUG] [Thread-79949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:13:26.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:13:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:13:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 12, 55), 2.23, 85.47, 0.0, 40.42, 7.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:13:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:12:55
2025-12-13T01:13:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:13:27.420 [DEBUG] [Thread-79950] [transport.py] [_log()] starting thread (client mode): 0xf813e980
2025-12-13T01:13:27.420 [DEBUG] [Thread-79950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:13:27.441 [DEBUG] [Thread-79950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:13:27.441 [INFO] [Thread-79950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] client lang: <none>
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] server lang: <none>
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] kex follows: False
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] Compression: none
2025-12-13T01:13:27.444 [DEBUG] [Thread-79950] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:13:27.463 [DEBUG] [Thread-79950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:13:27.463 [DEBUG] [Thread-79950] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:13:27.464 [DEBUG] [Thread-79950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:13:27.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:13:27.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:13:27.465 [DEBUG] [Thread-79950] [transport.py] [_log()] userauth is OK
2025-12-13T01:13:27.466 [DEBUG] [Thread-79950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:13:27.466 [DEBUG] [Thread-79950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:13:27.466 [DEBUG] [Thread-79950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:13:27.466 [DEBUG] [Thread-79950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:13:27.489 [INFO] [Thread-79950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:13:27.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:13:28.133 [DEBUG] [Thread-79950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:13:28.133 [DEBUG] [Thread-79950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:13:28.133 [DEBUG] [Thread-79950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:13:28.174 [DEBUG] [Thread-79950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:13:28.174 [DEBUG] [Thread-79950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:13:28.177 [DEBUG] [Thread-79950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:13:28.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:13:28.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:13:28.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:13:28.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:13:28.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:13:28.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:13:28.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.967110 -999.00   +7.60  38.09     89   +6.00 1 1 2 3 1     0    0 1.98 12.25 ZNESW 36.7 38.1 310.4 48.1 8.6 -20.5 8.4 -19.8 8.2 -14.3 8.6 -17.5
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.967110
2025-12-13T01:13:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:13:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:13:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:13:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:13:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T01:13:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:12:55', tmtdew=2.23, humidity=85.47, cloud=0.0, wind=40.42, temperature=7.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:12:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:09:00')
2025-12-13T01:13:28.200 [DEBUG] [Thread-79950] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:13:28.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:13:28.293 [DEBUG] [Thread-79953] [transport.py] [_log()] starting thread (client mode): 0xf813e1a0
2025-12-13T01:13:28.293 [DEBUG] [Thread-79953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:13:28.308 [DEBUG] [Thread-79953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:13:28.308 [INFO] [Thread-79953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] client lang: <none>
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] server lang: <none>
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] kex follows: False
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:13:28.316 [DEBUG] [Thread-79953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:13:28.317 [DEBUG] [Thread-79953] [transport.py] [_log()] Compression: none
2025-12-13T01:13:28.317 [DEBUG] [Thread-79953] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:13:28.371 [DEBUG] [Thread-79953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:13:28.372 [DEBUG] [Thread-79953] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:13:28.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:13:28.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:13:28.372 [DEBUG] [Thread-79953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:13:28.429 [DEBUG] [Thread-79953] [transport.py] [_log()] userauth is OK
2025-12-13T01:13:28.429 [DEBUG] [Thread-79953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:13:28.429 [DEBUG] [Thread-79953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:13:28.429 [DEBUG] [Thread-79953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:13:28.429 [DEBUG] [Thread-79953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:13:28.447 [INFO] [Thread-79953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:13:28.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:13:28.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:13:28.721 [DEBUG] [Thread-79955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:29.314 [DEBUG] [Thread-79953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:13:29.314 [DEBUG] [Thread-79953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:13:29.362 [DEBUG] [Thread-79953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:13:29.362 [DEBUG] [Thread-79953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:13:29.371 [DEBUG] [Thread-79953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:13:29.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:13:29.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:13:29.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:13:29.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:13:29.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:13:29.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:13:29.402 [DEBUG] [Thread-79953] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:13:40.628 [DEBUG] [Thread-79956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:55.672 [DEBUG] [Thread-79957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:13:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:13:59.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:13:59.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:14:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 13, 27), 2.23, 85.52, 0.0, 39.87, 7.84, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:14:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:13:27
2025-12-13T01:14:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:14:00.392 [DEBUG] [Thread-79958] [transport.py] [_log()] starting thread (client mode): 0xf5701060
2025-12-13T01:14:00.392 [DEBUG] [Thread-79958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:14:00.412 [DEBUG] [Thread-79958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:14:00.413 [INFO] [Thread-79958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] client lang: <none>
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] server lang: <none>
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] kex follows: False
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] Compression: none
2025-12-13T01:14:00.416 [DEBUG] [Thread-79958] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:14:00.431 [DEBUG] [Thread-79958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:14:00.432 [DEBUG] [Thread-79958] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:14:00.432 [DEBUG] [Thread-79958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:14:00.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:14:00.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:14:00.433 [DEBUG] [Thread-79958] [transport.py] [_log()] userauth is OK
2025-12-13T01:14:00.433 [DEBUG] [Thread-79958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:14:00.433 [DEBUG] [Thread-79958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:14:00.433 [DEBUG] [Thread-79958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:14:00.433 [DEBUG] [Thread-79958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:14:00.449 [INFO] [Thread-79958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:14:00.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:14:01.078 [DEBUG] [Thread-79958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:14:01.078 [DEBUG] [Thread-79958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:14:01.078 [DEBUG] [Thread-79958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:14:01.119 [DEBUG] [Thread-79958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:14:01.119 [DEBUG] [Thread-79958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:14:01.121 [DEBUG] [Thread-79958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:14:01.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:14:01.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:14:01.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:14:01.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:14:01.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:14:01.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:14:01.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.967457 -999.00   +7.60  44.52     89   +5.90 1 2 2 3 1     0    0 1.94 11.00 ZNeSW 41.4 44.5 315.6 54.1 8.7 -14.0 8.4 -13.8 8.2 -7.7 8.6 -14.0
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.967457
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:14:01.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:14:01.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:13:27', tmtdew=2.23, humidity=85.52, cloud=0.0, wind=39.87, temperature=7.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:13:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:09:00')
2025-12-13T01:14:01.140 [DEBUG] [Thread-79958] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:14:01.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:14:01.226 [DEBUG] [Thread-79961] [transport.py] [_log()] starting thread (client mode): 0xf57c8250
2025-12-13T01:14:01.226 [DEBUG] [Thread-79961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:14:01.241 [DEBUG] [Thread-79961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:14:01.241 [INFO] [Thread-79961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] client lang: <none>
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] server lang: <none>
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] kex follows: False
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:14:01.248 [DEBUG] [Thread-79961] [transport.py] [_log()] Compression: none
2025-12-13T01:14:01.249 [DEBUG] [Thread-79961] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:14:01.306 [DEBUG] [Thread-79961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:14:01.306 [DEBUG] [Thread-79961] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:14:01.306 [DEBUG] [Thread-79961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:14:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:14:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:14:01.365 [DEBUG] [Thread-79961] [transport.py] [_log()] userauth is OK
2025-12-13T01:14:01.365 [DEBUG] [Thread-79961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:14:01.365 [DEBUG] [Thread-79961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:14:01.365 [DEBUG] [Thread-79961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:14:01.365 [DEBUG] [Thread-79961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:14:01.378 [INFO] [Thread-79961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:14:01.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:14:01.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:14:02.199 [DEBUG] [Thread-79961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:14:02.199 [DEBUG] [Thread-79961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:14:02.247 [DEBUG] [Thread-79961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:14:02.247 [DEBUG] [Thread-79961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:14:02.256 [DEBUG] [Thread-79961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:14:02.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:14:02.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:14:02.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:14:02.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:14:02.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:14:02.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:14:02.292 [DEBUG] [Thread-79961] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:14:10.701 [DEBUG] [Thread-79963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:14:11.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:14:11.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:14:25.746 [DEBUG] [Thread-79964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:14:28.786 [DEBUG] [Thread-79965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:14:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:14:32.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:14:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:14:33.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 13, 59), 2.22, 85.57, 0.0, 35.68, 7.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:14:33.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:13:59
2025-12-13T01:14:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:14:33.369 [DEBUG] [Thread-79966] [transport.py] [_log()] starting thread (client mode): 0xfabc6ce0
2025-12-13T01:14:33.369 [DEBUG] [Thread-79966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:14:33.388 [DEBUG] [Thread-79966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:14:33.389 [INFO] [Thread-79966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:14:33.390 [DEBUG] [Thread-79966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] client lang: <none>
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] server lang: <none>
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] kex follows: False
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] Compression: none
2025-12-13T01:14:33.391 [DEBUG] [Thread-79966] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:14:33.398 [DEBUG] [Thread-79966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:14:33.398 [DEBUG] [Thread-79966] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:14:33.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:14:33.398 [DEBUG] [Thread-79966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:14:33.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:14:33.399 [DEBUG] [Thread-79966] [transport.py] [_log()] userauth is OK
2025-12-13T01:14:33.399 [DEBUG] [Thread-79966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:14:33.399 [DEBUG] [Thread-79966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:14:33.399 [DEBUG] [Thread-79966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:14:33.399 [DEBUG] [Thread-79966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:14:33.407 [INFO] [Thread-79966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:14:33.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:14:34.028 [DEBUG] [Thread-79966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:14:34.028 [DEBUG] [Thread-79966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:14:34.028 [DEBUG] [Thread-79966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:14:34.070 [DEBUG] [Thread-79966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:14:34.070 [DEBUG] [Thread-79966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:14:34.072 [DEBUG] [Thread-79966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:14:34.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:14:34.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:14:34.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:14:34.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:14:34.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:14:34.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:14:34.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:14:34.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.968152 -999.00   +7.60  44.37     89   +6.00 1 3 2 3 1     0    0 1.96 11.59 ZnES. 45.2 44.4 313.0 50.0 8.7 -9.3 8.5 -9.2 8.2 -8.4 8.6 -9.1
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.968152
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:14:34.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:13:59', tmtdew=2.22, humidity=85.57, cloud=0.0, wind=35.68, temperature=7.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:14:08.333', atlas_cloud=3, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:13:00')
2025-12-13T01:14:34.092 [DEBUG] [Thread-79966] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:14:34.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:14:34.178 [DEBUG] [Thread-79969] [transport.py] [_log()] starting thread (client mode): 0xf57cb5e0
2025-12-13T01:14:34.178 [DEBUG] [Thread-79969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:14:34.193 [DEBUG] [Thread-79969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:14:34.193 [INFO] [Thread-79969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] client lang: <none>
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] server lang: <none>
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] kex follows: False
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] Compression: none
2025-12-13T01:14:34.201 [DEBUG] [Thread-79969] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:14:34.258 [DEBUG] [Thread-79969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:14:34.258 [DEBUG] [Thread-79969] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:14:34.258 [DEBUG] [Thread-79969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:14:34.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:14:34.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:14:34.315 [DEBUG] [Thread-79969] [transport.py] [_log()] userauth is OK
2025-12-13T01:14:34.315 [DEBUG] [Thread-79969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:14:34.315 [DEBUG] [Thread-79969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:14:34.315 [DEBUG] [Thread-79969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:14:34.316 [DEBUG] [Thread-79969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:14:34.335 [INFO] [Thread-79969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:14:34.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:14:34.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:14:35.160 [DEBUG] [Thread-79969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:14:35.160 [DEBUG] [Thread-79969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:14:35.208 [DEBUG] [Thread-79969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:14:35.208 [DEBUG] [Thread-79969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:14:35.217 [DEBUG] [Thread-79969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:14:35.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:14:35.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:14: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') -> 00000000
2025-12-13T01:14:35.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:14:35.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:14:35.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:14:35.252 [DEBUG] [Thread-79969] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:14:40.772 [DEBUG] [Thread-79971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:14:55.813 [DEBUG] [Thread-79972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:05.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:15:05.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:15:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:15:06.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 14, 31), 2.21, 85.62, 0.0, 33.42, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:15:06.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:14:31
2025-12-13T01:15:06.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:15:06.332 [DEBUG] [Thread-79973] [transport.py] [_log()] starting thread (client mode): 0xf575c490
2025-12-13T01:15:06.332 [DEBUG] [Thread-79973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:15:06.352 [DEBUG] [Thread-79973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:15:06.353 [INFO] [Thread-79973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:15:06.355 [DEBUG] [Thread-79973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:15:06.355 [DEBUG] [Thread-79973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:15:06.355 [DEBUG] [Thread-79973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:15:06.355 [DEBUG] [Thread-79973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:06.355 [DEBUG] [Thread-79973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] client lang: <none>
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] server lang: <none>
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] kex follows: False
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] Compression: none
2025-12-13T01:15:06.356 [DEBUG] [Thread-79973] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:15:06.371 [DEBUG] [Thread-79973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:15:06.371 [DEBUG] [Thread-79973] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:15:06.372 [DEBUG] [Thread-79973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:15:06.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:15:06.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:15:06.373 [DEBUG] [Thread-79973] [transport.py] [_log()] userauth is OK
2025-12-13T01:15:06.373 [DEBUG] [Thread-79973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:15:06.373 [DEBUG] [Thread-79973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:15:06.373 [DEBUG] [Thread-79973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:15:06.373 [DEBUG] [Thread-79973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:15:06.382 [INFO] [Thread-79973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:15:06.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:15:07.325 [DEBUG] [Thread-79973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:15:07.326 [DEBUG] [Thread-79973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:15:07.326 [DEBUG] [Thread-79973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:15:07.367 [DEBUG] [Thread-79973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:15:07.367 [DEBUG] [Thread-79973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:15:07.369 [DEBUG] [Thread-79973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:15:07.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:15:07.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:15:07.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:15:07.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:15:07.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:15:07.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.968499 -999.00   +7.60  42.70     90   +6.00 1 3 2 3 1     0    0 2.04 13.38 ZnES. 32.8 42.7 307.6 51.6 8.7 -9.9 8.5 -9.6 8.3 -9.5 8.6 -7.9
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.968499
2025-12-13T01:15:07.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:15:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:15:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:15:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:15:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:15:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:14:31', tmtdew=2.21, humidity=85.62, cloud=0.0, wind=33.42, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:14:38.314', atlas_cloud=3, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:13:00')
2025-12-13T01:15:07.396 [DEBUG] [Thread-79973] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:15:07.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:15:07.482 [DEBUG] [Thread-79976] [transport.py] [_log()] starting thread (client mode): 0xf575f1c0
2025-12-13T01:15:07.482 [DEBUG] [Thread-79976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:15:07.497 [DEBUG] [Thread-79976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:15:07.497 [INFO] [Thread-79976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:15:07.504 [DEBUG] [Thread-79976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:15:07.504 [DEBUG] [Thread-79976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:15:07.504 [DEBUG] [Thread-79976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:15:07.504 [DEBUG] [Thread-79976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:07.504 [DEBUG] [Thread-79976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:07.504 [DEBUG] [Thread-79976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] client lang: <none>
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] server lang: <none>
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] kex follows: False
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] Compression: none
2025-12-13T01:15:07.505 [DEBUG] [Thread-79976] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:15:07.561 [DEBUG] [Thread-79976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:15:07.561 [DEBUG] [Thread-79976] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:15:07.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:15:07.561 [DEBUG] [Thread-79976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:15:07.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:15:07.617 [DEBUG] [Thread-79976] [transport.py] [_log()] userauth is OK
2025-12-13T01:15:07.618 [DEBUG] [Thread-79976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:15:07.618 [DEBUG] [Thread-79976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:15:07.618 [DEBUG] [Thread-79976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:15:07.618 [DEBUG] [Thread-79976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:15:07.631 [INFO] [Thread-79976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:15:07.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:15:07.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:15:08.445 [DEBUG] [Thread-79976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:15:08.445 [DEBUG] [Thread-79976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:15:08.493 [DEBUG] [Thread-79976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:15:08.493 [DEBUG] [Thread-79976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:15:08.502 [DEBUG] [Thread-79976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:15:08.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:15:08.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:15:08.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:15:08.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:15:08.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:15:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:15:08.536 [DEBUG] [Thread-79976] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:15:10.839 [DEBUG] [Thread-79978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:11.804 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:11.805 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:25.885 [DEBUG] [Thread-79979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:28.865 [DEBUG] [Thread-79980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:38.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:15:38.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:15:38.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:15:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 15, 36), 2.2, 86.17, 0.0, 38.75, 7.82, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:15:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:15:36
2025-12-13T01:15:39.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:15:39.533 [DEBUG] [Thread-79981] [transport.py] [_log()] starting thread (client mode): 0xf575eb60
2025-12-13T01:15:39.533 [DEBUG] [Thread-79981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:15:39.555 [DEBUG] [Thread-79981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:15:39.555 [INFO] [Thread-79981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:15:39.558 [DEBUG] [Thread-79981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:15:39.558 [DEBUG] [Thread-79981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] client lang: <none>
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] server lang: <none>
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] kex follows: False
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:15:39.559 [DEBUG] [Thread-79981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:15:39.560 [DEBUG] [Thread-79981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:15:39.560 [DEBUG] [Thread-79981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:15:39.560 [DEBUG] [Thread-79981] [transport.py] [_log()] Compression: none
2025-12-13T01:15:39.560 [DEBUG] [Thread-79981] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:15:39.579 [DEBUG] [Thread-79981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:15:39.580 [DEBUG] [Thread-79981] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:15:39.581 [DEBUG] [Thread-79981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:15:39.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:15:39.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:15:39.583 [DEBUG] [Thread-79981] [transport.py] [_log()] userauth is OK
2025-12-13T01:15:39.583 [DEBUG] [Thread-79981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:15:39.583 [DEBUG] [Thread-79981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:15:39.583 [DEBUG] [Thread-79981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:15:39.583 [DEBUG] [Thread-79981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:15:39.606 [INFO] [Thread-79981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:15:39.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:15:40.239 [DEBUG] [Thread-79981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:15:40.239 [DEBUG] [Thread-79981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:15:40.239 [DEBUG] [Thread-79981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:15:40.280 [DEBUG] [Thread-79981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:15:40.280 [DEBUG] [Thread-79981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:15:40.283 [DEBUG] [Thread-79981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:15:40.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:15:40.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:15:40.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:15:40.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:15:40.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:15:40.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:15:40.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:15:40.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:15:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:15:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.968846 -999.00   +7.60  37.18     90   +6.10 1 2 2 3 1     0    0 1.92 10.94 Z.Es. 47.4 37.2 316.8 50.8 8.7 -13.4 8.5 -12.8 8.2 -14.6 8.6 -9.8
2025-12-13T01:15:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:15:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:15:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.968846
2025-12-13T01:15:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:15:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:15:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:15:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:15:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:15:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:15:36', tmtdew=2.2, humidity=86.17, cloud=0.0, wind=38.75, temperature=7.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:15:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:13:00')
2025-12-13T01:15:40.307 [DEBUG] [Thread-79981] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:15:40.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:15:40.402 [DEBUG] [Thread-79984] [transport.py] [_log()] starting thread (client mode): 0xf575f3d0
2025-12-13T01:15:40.402 [DEBUG] [Thread-79984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:15:40.416 [DEBUG] [Thread-79984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:15:40.417 [INFO] [Thread-79984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:15:40.424 [DEBUG] [Thread-79984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:15:40.424 [DEBUG] [Thread-79984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:15:40.424 [DEBUG] [Thread-79984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] client lang: <none>
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] server lang: <none>
2025-12-13T01:15:40.425 [DEBUG] [Thread-79984] [transport.py] [_log()] kex follows: False
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] Compression: none
2025-12-13T01:15:40.426 [DEBUG] [Thread-79984] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:15:40.481 [DEBUG] [Thread-79984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:15:40.482 [DEBUG] [Thread-79984] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:15:40.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:15:40.483 [DEBUG] [Thread-79984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:15:40.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:15:40.537 [DEBUG] [Thread-79984] [transport.py] [_log()] userauth is OK
2025-12-13T01:15:40.537 [DEBUG] [Thread-79984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:15:40.537 [DEBUG] [Thread-79984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:15:40.537 [DEBUG] [Thread-79984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:15:40.537 [DEBUG] [Thread-79984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:15:40.556 [INFO] [Thread-79984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:15:40.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:15:40.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:15:40.914 [DEBUG] [Thread-79986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:15:41.384 [DEBUG] [Thread-79984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:15:41.384 [DEBUG] [Thread-79984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:15:41.432 [DEBUG] [Thread-79984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:15:41.432 [DEBUG] [Thread-79984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:15:41.440 [DEBUG] [Thread-79984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:15:41.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:15:41.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:15:41.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:15:41.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:15:41.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:15:41.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:15:41.471 [DEBUG] [Thread-79984] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:15:55.965 [DEBUG] [Thread-79987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:10.996 [DEBUG] [Thread-79988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:11.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:16:11.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:16:11.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:16:12.006 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:12.007 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 16, 8), 2.2, 86.17, 0.0, 38.98, 7.79, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:16:12.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:16:08
2025-12-13T01:16:12.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:16:12.445 [DEBUG] [Thread-79989] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-13T01:16:12.445 [DEBUG] [Thread-79989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:16:12.465 [DEBUG] [Thread-79989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:16:12.466 [INFO] [Thread-79989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] client lang: <none>
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] server lang: <none>
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] kex follows: False
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] Compression: none
2025-12-13T01:16:12.469 [DEBUG] [Thread-79989] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:16:12.488 [DEBUG] [Thread-79989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:16:12.488 [DEBUG] [Thread-79989] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:16:12.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:16:12.490 [DEBUG] [Thread-79989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:16:12.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:16:12.492 [DEBUG] [Thread-79989] [transport.py] [_log()] userauth is OK
2025-12-13T01:16:12.492 [DEBUG] [Thread-79989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:16:12.492 [DEBUG] [Thread-79989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:16:12.492 [DEBUG] [Thread-79989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:16:12.492 [DEBUG] [Thread-79989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:16:12.517 [INFO] [Thread-79989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:16:12.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:16:13.164 [DEBUG] [Thread-79989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:16:13.164 [DEBUG] [Thread-79989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:16:13.165 [DEBUG] [Thread-79989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:16:13.205 [DEBUG] [Thread-79989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:16:13.205 [DEBUG] [Thread-79989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:16:13.208 [DEBUG] [Thread-79989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:16:13.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:16:13.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:16:13.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:16:13.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:16:13.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:16:13.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:16:13.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:16:13.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:16:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:16:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.969193 -999.00   +7.60  43.13     90   +6.10 1 2 2 3 1     0    0 1.88 8.74 Z.Es. 37.7 43.1 313.0 48.6 8.7 -16.1 8.5 -16.5 8.3 -15.9 8.6 -13.4
2025-12-13T01:16:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:16:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:16:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.969193
2025-12-13T01:16:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:16:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:16:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:16:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:16:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:16:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:16:08', tmtdew=2.2, humidity=86.17, cloud=0.0, wind=38.98, temperature=7.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:15:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:13:00')
2025-12-13T01:16:13.231 [DEBUG] [Thread-79989] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:16:13.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:16:13.326 [DEBUG] [Thread-79992] [transport.py] [_log()] starting thread (client mode): 0xf813ef80
2025-12-13T01:16:13.326 [DEBUG] [Thread-79992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:16:13.341 [DEBUG] [Thread-79992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:16:13.342 [INFO] [Thread-79992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:16:13.349 [DEBUG] [Thread-79992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:16:13.349 [DEBUG] [Thread-79992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:16:13.350 [DEBUG] [Thread-79992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] client lang: <none>
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] server lang: <none>
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] kex follows: False
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:16:13.351 [DEBUG] [Thread-79992] [transport.py] [_log()] Compression: none
2025-12-13T01:16:13.352 [DEBUG] [Thread-79992] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:16:13.408 [DEBUG] [Thread-79992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:16:13.409 [DEBUG] [Thread-79992] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:16:13.409 [DEBUG] [Thread-79992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:16:13.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:16:13.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:16:13.464 [DEBUG] [Thread-79992] [transport.py] [_log()] userauth is OK
2025-12-13T01:16:13.464 [DEBUG] [Thread-79992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:16:13.464 [DEBUG] [Thread-79992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:16:13.464 [DEBUG] [Thread-79992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:16:13.465 [DEBUG] [Thread-79992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:16:13.483 [INFO] [Thread-79992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:16:13.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:16:13.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:16:14.305 [DEBUG] [Thread-79992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:16:14.305 [DEBUG] [Thread-79992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:16:14.353 [DEBUG] [Thread-79992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:16:14.353 [DEBUG] [Thread-79992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:16:14.362 [DEBUG] [Thread-79992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:16:14.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:16:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:16:14.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:16:14.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:16:14.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:16:14.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:16:14.395 [DEBUG] [Thread-79992] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:16:26.024 [DEBUG] [Thread-79994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:28.943 [DEBUG] [Thread-79995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:41.071 [DEBUG] [Thread-79996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:16:44.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:16:44.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:16:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:16:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 16, 40), 2.19, 85.72, 0.0, 40.48, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:16:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:16:40
2025-12-13T01:16:45.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:16:45.389 [DEBUG] [Thread-79997] [transport.py] [_log()] starting thread (client mode): 0xf57737c0
2025-12-13T01:16:45.389 [DEBUG] [Thread-79997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:16:45.409 [DEBUG] [Thread-79997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:16:45.409 [INFO] [Thread-79997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] client lang: <none>
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] server lang: <none>
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] kex follows: False
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:16:45.412 [DEBUG] [Thread-79997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:16:45.413 [DEBUG] [Thread-79997] [transport.py] [_log()] Compression: none
2025-12-13T01:16:45.413 [DEBUG] [Thread-79997] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:16:45.430 [DEBUG] [Thread-79997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:16:45.430 [DEBUG] [Thread-79997] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:16:45.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:16:45.431 [DEBUG] [Thread-79997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:16:45.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:16:45.434 [DEBUG] [Thread-79997] [transport.py] [_log()] userauth is OK
2025-12-13T01:16:45.434 [DEBUG] [Thread-79997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:16:45.434 [DEBUG] [Thread-79997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:16:45.434 [DEBUG] [Thread-79997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:16:45.434 [DEBUG] [Thread-79997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:16:45.456 [INFO] [Thread-79997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:16:45.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:16:46.070 [DEBUG] [Thread-79997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:16:46.070 [DEBUG] [Thread-79997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:16:46.070 [DEBUG] [Thread-79997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:16:46.111 [DEBUG] [Thread-79997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:16:46.111 [DEBUG] [Thread-79997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:16:46.113 [DEBUG] [Thread-79997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:16:46.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:16:46.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:16:46.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:16:46.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:16:46.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:16:46.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:16:46.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:16:46.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:16:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:16:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.969541 -999.00   +7.60  33.02     89   +6.10 1 2 2 3 1     0    0 1.80 6.53 Z.ESW 34.2 33.0 315.8 45.8 8.7 -17.0 8.5 -18.1 8.2 -16.5 8.6 -14.3
2025-12-13T01:16:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:16:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:16:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.969541
2025-12-13T01:16:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:16:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:16:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:16:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:16:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:16:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:16:40', tmtdew=2.19, humidity=85.72, cloud=0.0, wind=40.48, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:16:08.342', atlas_cloud=2, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:13:00')
2025-12-13T01:16:46.140 [DEBUG] [Thread-79997] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:16:46.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:16:46.236 [DEBUG] [Thread-80000] [transport.py] [_log()] starting thread (client mode): 0xf575f310
2025-12-13T01:16:46.236 [DEBUG] [Thread-80000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:16:46.250 [DEBUG] [Thread-80000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:16:46.250 [INFO] [Thread-80000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:16:46.258 [DEBUG] [Thread-80000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] client lang: <none>
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] server lang: <none>
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] kex follows: False
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] Compression: none
2025-12-13T01:16:46.259 [DEBUG] [Thread-80000] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:16:46.315 [DEBUG] [Thread-80000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:16:46.315 [DEBUG] [Thread-80000] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:16:46.316 [DEBUG] [Thread-80000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:16:46.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:16:46.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:16:46.371 [DEBUG] [Thread-80000] [transport.py] [_log()] userauth is OK
2025-12-13T01:16:46.371 [DEBUG] [Thread-80000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:16:46.372 [DEBUG] [Thread-80000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:16:46.372 [DEBUG] [Thread-80000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:16:46.372 [DEBUG] [Thread-80000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:16:46.392 [INFO] [Thread-80000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:16:46.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:16:46.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:16:47.299 [DEBUG] [Thread-80000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:16:47.299 [DEBUG] [Thread-80000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:16:47.348 [DEBUG] [Thread-80000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:16:47.348 [DEBUG] [Thread-80000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:16:47.357 [DEBUG] [Thread-80000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:16:47.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:16:47.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:16:47.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:16:47.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:16:47.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:16:47.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:16:47.391 [DEBUG] [Thread-80000] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:16:56.100 [DEBUG] [Thread-80002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:11.138 [DEBUG] [Thread-80003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:12.208 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:12.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:17:17.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:17:17.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:17:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 17, 12), 2.2, 85.69, 0.0, 42.57, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:17:18.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:17:12
2025-12-13T01:17:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:17:18.386 [DEBUG] [Thread-80004] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-13T01:17:18.386 [DEBUG] [Thread-80004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:17:18.407 [DEBUG] [Thread-80004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:17:18.407 [INFO] [Thread-80004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] client lang: <none>
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] server lang: <none>
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] kex follows: False
2025-12-13T01:17:18.410 [DEBUG] [Thread-80004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:17:18.411 [DEBUG] [Thread-80004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:17:18.411 [DEBUG] [Thread-80004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:17:18.411 [DEBUG] [Thread-80004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:17:18.411 [DEBUG] [Thread-80004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:17:18.411 [DEBUG] [Thread-80004] [transport.py] [_log()] Compression: none
2025-12-13T01:17:18.411 [DEBUG] [Thread-80004] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:17:18.429 [DEBUG] [Thread-80004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:17:18.430 [DEBUG] [Thread-80004] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:17:18.430 [DEBUG] [Thread-80004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:17:18.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:17:18.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:17:18.432 [DEBUG] [Thread-80004] [transport.py] [_log()] userauth is OK
2025-12-13T01:17:18.432 [DEBUG] [Thread-80004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:17:18.432 [DEBUG] [Thread-80004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:17:18.432 [DEBUG] [Thread-80004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:17:18.433 [DEBUG] [Thread-80004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:17:18.456 [INFO] [Thread-80004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:17:18.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:17:19.106 [DEBUG] [Thread-80004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:17:19.106 [DEBUG] [Thread-80004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:17:19.107 [DEBUG] [Thread-80004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:17:19.148 [DEBUG] [Thread-80004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:17:19.148 [DEBUG] [Thread-80004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:17:19.151 [DEBUG] [Thread-80004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:17:19.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:17:19.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:17:19.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:17:19.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:17:19.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:17:19.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:17:19.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:17:19.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:17:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:17:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.969888 -999.00   +7.60  48.63     89   +5.90 1 2 2 3 1     0    0 1.78 5.33 Z.ESW 45.8 48.6 310.4 57.7 8.7 -17.3 8.5 -18.5 8.2 -17.2 8.6 -15.2
2025-12-13T01:17:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:17:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:17:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.969888
2025-12-13T01:17:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:17:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:17:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:17:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:17:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:17:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:17:12', tmtdew=2.2, humidity=85.69, cloud=0.0, wind=42.57, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:16:38.323', atlas_cloud=2, atlas_rain=1, zp_data=[0.19174999999999898, 0.1827500000000004, 0.12074999999999925, 0.0694999999999979, 0.05550000000000033, 0.39775000000000205, 0.7839999999999998, 0.7422500000000003, 0.4914999999999985, 0.19599999999999973, 0.24624999999999986, 0.18650000000000055, 0.11800000000000033, 0.5057499999999999, 1.4459999999999997, 1.3194999999999997, 0.8072499999999998, 0.3094999999999999, 0.5079999999999991, 0.5532499999999994, 0.1479999999999979, 0.6622499999999985, 1.215250000000001, 0.8182499999999999, 1.3854999999999995, 0.2925000000000004, 0.5187500000000007, 0.49900000000000055, 0.1509999999999998, 0.43200000000000127, 0.8530000000000006, 0.43600000000000083, 0.7507499999999991], zp_timestamp='2025-12-12T23:13:00')
2025-12-13T01:17:19.175 [DEBUG] [Thread-80004] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:17:19.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:17:19.271 [DEBUG] [Thread-80007] [transport.py] [_log()] starting thread (client mode): 0xf81e7c70
2025-12-13T01:17:19.272 [DEBUG] [Thread-80007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:17:19.287 [DEBUG] [Thread-80007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:17:19.287 [INFO] [Thread-80007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:19.295 [DEBUG] [Thread-80007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] client lang: <none>
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] server lang: <none>
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] kex follows: False
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] Compression: none
2025-12-13T01:17:19.296 [DEBUG] [Thread-80007] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:17:19.358 [DEBUG] [Thread-80007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:17:19.359 [DEBUG] [Thread-80007] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:17:19.359 [DEBUG] [Thread-80007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:17:19.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:17:19.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:17:19.414 [DEBUG] [Thread-80007] [transport.py] [_log()] userauth is OK
2025-12-13T01:17:19.415 [DEBUG] [Thread-80007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:17:19.415 [DEBUG] [Thread-80007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:17:19.415 [DEBUG] [Thread-80007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:17:19.415 [DEBUG] [Thread-80007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:17:19.433 [INFO] [Thread-80007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:17:19.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:17:19.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:17:20.277 [DEBUG] [Thread-80007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:17:20.277 [DEBUG] [Thread-80007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:17:20.324 [DEBUG] [Thread-80007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:17:20.324 [DEBUG] [Thread-80007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:17:20.333 [DEBUG] [Thread-80007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:17:20.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:17:20.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:17:20.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:17:20.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:17:20.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:17:20.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:17:20.366 [DEBUG] [Thread-80007] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:17:26.166 [DEBUG] [Thread-80009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:29.017 [DEBUG] [Thread-80010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:41.216 [DEBUG] [Thread-80011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:17:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:17:50.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:17:50.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:17:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 17, 44), 2.31, 85.14, 0.0, 44.53, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:17:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:17:44
2025-12-13T01:17:51.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:17:51.332 [DEBUG] [Thread-80012] [transport.py] [_log()] starting thread (client mode): 0xf575cd00
2025-12-13T01:17:51.332 [DEBUG] [Thread-80012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:17:51.353 [DEBUG] [Thread-80012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:17:51.353 [INFO] [Thread-80012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] client lang: <none>
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] server lang: <none>
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] kex follows: False
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:17:51.357 [DEBUG] [Thread-80012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:17:51.358 [DEBUG] [Thread-80012] [transport.py] [_log()] Compression: none
2025-12-13T01:17:51.358 [DEBUG] [Thread-80012] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:17:51.378 [DEBUG] [Thread-80012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:17:51.378 [DEBUG] [Thread-80012] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:17:51.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:17:51.379 [DEBUG] [Thread-80012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:17:51.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:17:51.381 [DEBUG] [Thread-80012] [transport.py] [_log()] userauth is OK
2025-12-13T01:17:51.381 [DEBUG] [Thread-80012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:17:51.382 [DEBUG] [Thread-80012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:17:51.382 [DEBUG] [Thread-80012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:17:51.382 [DEBUG] [Thread-80012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:17:51.403 [INFO] [Thread-80012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:17:51.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:17:52.060 [DEBUG] [Thread-80012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:17:52.060 [DEBUG] [Thread-80012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:17:52.061 [DEBUG] [Thread-80012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:17:52.101 [DEBUG] [Thread-80012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:17:52.101 [DEBUG] [Thread-80012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:17:52.104 [DEBUG] [Thread-80012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:17:52.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:17:52.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:17:52.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:17:52.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:17:52.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:17:52.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:17:52.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:17:52.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:17:52.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:17:52.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.970582 -999.00   +7.60  36.38     88   +5.90 1 2 2 3 1     0    0 1.79 5.40 ZnESW 33.1 36.4 319.0 45.2 8.7 -13.3 8.4 -12.2 8.2 -12.4 8.6 -10.5
2025-12-13T01:17:52.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:17:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:17:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.970582
2025-12-13T01:17:52.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:17:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:17:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:17:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:17:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:17:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:17:44', tmtdew=2.31, humidity=85.14, cloud=0.0, wind=44.53, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:17:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[1.020249999999999, 1.0292500000000002, nan, nan, nan, 1.404250000000001, 2.1534999999999993, 1.2702500000000008, 0.7440000000000007, 1.0540000000000003, nan, nan, 1.8159999999999998, nan, nan, 1.2939999999999996, 0.7037499999999994, 0.7315000000000005, 1.217999999999999, 1.0002500000000003, 1.674999999999999, nan, nan, 1.58575, 0.5614999999999988, 1.0184999999999995, 1.5962499999999995, 0.6720000000000006, 0.2585000000000006, nan, nan, 1.355500000000001, 0.6577499999999992], zp_timestamp='2025-12-12T23:16:00')
2025-12-13T01:17:52.132 [DEBUG] [Thread-80012] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:17:52.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:17:52.230 [DEBUG] [Thread-80015] [transport.py] [_log()] starting thread (client mode): 0xf575f2e0
2025-12-13T01:17:52.230 [DEBUG] [Thread-80015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:17:52.244 [DEBUG] [Thread-80015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:17:52.245 [INFO] [Thread-80015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:17:52.252 [DEBUG] [Thread-80015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:17:52.252 [DEBUG] [Thread-80015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:17:52.252 [DEBUG] [Thread-80015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:17:52.252 [DEBUG] [Thread-80015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:52.252 [DEBUG] [Thread-80015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] client lang: <none>
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] server lang: <none>
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] kex follows: False
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] Compression: none
2025-12-13T01:17:52.253 [DEBUG] [Thread-80015] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:17:52.309 [DEBUG] [Thread-80015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:17:52.309 [DEBUG] [Thread-80015] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:17:52.310 [DEBUG] [Thread-80015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:17:52.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:17:52.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:17:52.366 [DEBUG] [Thread-80015] [transport.py] [_log()] userauth is OK
2025-12-13T01:17:52.366 [DEBUG] [Thread-80015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:17:52.366 [DEBUG] [Thread-80015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:17:52.366 [DEBUG] [Thread-80015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:17:52.366 [DEBUG] [Thread-80015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:17:52.387 [INFO] [Thread-80015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:17:52.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:17:52.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:17:53.219 [DEBUG] [Thread-80015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:17:53.219 [DEBUG] [Thread-80015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:17:53.267 [DEBUG] [Thread-80015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:17:53.267 [DEBUG] [Thread-80015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:17:53.276 [DEBUG] [Thread-80015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:17:53.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:17:53.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:17:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:17:53.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:17:53.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:17:53.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:17:53.310 [DEBUG] [Thread-80015] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:17:56.246 [DEBUG] [Thread-80017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:11.302 [DEBUG] [Thread-80018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:12.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:12.411 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:23.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:18:23.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:18:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:18:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 18, 16), 2.31, 85.09, 0.0, 45.22, 7.69, 1, 1, 0, 2, 1, 0),)
2025-12-13T01:18:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:18:16
2025-12-13T01:18:24.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:18:24.258 [DEBUG] [Thread-80019] [transport.py] [_log()] starting thread (client mode): 0xf813f820
2025-12-13T01:18:24.258 [DEBUG] [Thread-80019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:18:24.278 [DEBUG] [Thread-80019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:18:24.278 [INFO] [Thread-80019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] client lang: <none>
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] server lang: <none>
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] kex follows: False
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:18:24.282 [DEBUG] [Thread-80019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:18:24.283 [DEBUG] [Thread-80019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:18:24.283 [DEBUG] [Thread-80019] [transport.py] [_log()] Compression: none
2025-12-13T01:18:24.283 [DEBUG] [Thread-80019] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:18:24.298 [DEBUG] [Thread-80019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:18:24.299 [DEBUG] [Thread-80019] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:18:24.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:18:24.300 [DEBUG] [Thread-80019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:18:24.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:18:24.301 [DEBUG] [Thread-80019] [transport.py] [_log()] userauth is OK
2025-12-13T01:18:24.302 [DEBUG] [Thread-80019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:18:24.302 [DEBUG] [Thread-80019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:18:24.302 [DEBUG] [Thread-80019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:18:24.302 [DEBUG] [Thread-80019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:18:24.337 [INFO] [Thread-80019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:18:24.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:18:24.955 [DEBUG] [Thread-80019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:18:24.955 [DEBUG] [Thread-80019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:18:24.955 [DEBUG] [Thread-80019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:18:24.997 [DEBUG] [Thread-80019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:18:24.997 [DEBUG] [Thread-80019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:18:25.000 [DEBUG] [Thread-80019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:18:25.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:18:25.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:18:25.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:18:25.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:18:25.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:18:25.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:18:25.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:18:25.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:18:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:18:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.970929 -999.00   +7.60  50.20     89   +5.90 1 2 2 3 1     0    0 1.76 5.37 ZnESW 52.3 50.2 311.6 56.3 8.7 -14.6 8.5 -14.6 8.3 -9.2 8.6 -12.5
2025-12-13T01:18:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:18:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:18:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.970929
2025-12-13T01:18:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:18:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:18:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:18:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:18:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:18:25.027 [DEBUG] [Thread-80019] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:18:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:18:16', tmtdew=2.31, humidity=85.09, cloud=0.0, wind=45.22, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:18:08.266', atlas_cloud=2, atlas_rain=1, zp_data=[1.020249999999999, 1.0292500000000002, nan, nan, nan, 1.404250000000001, 2.1534999999999993, 1.2702500000000008, 0.7440000000000007, 1.0540000000000003, nan, nan, 1.8159999999999998, nan, nan, 1.2939999999999996, 0.7037499999999994, 0.7315000000000005, 1.217999999999999, 1.0002500000000003, 1.674999999999999, nan, nan, 1.58575, 0.5614999999999988, 1.0184999999999995, 1.5962499999999995, 0.6720000000000006, 0.2585000000000006, nan, nan, 1.355500000000001, 0.6577499999999992], zp_timestamp='2025-12-12T23:16:00')
2025-12-13T01:18:25.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:18:25.124 [DEBUG] [Thread-80022] [transport.py] [_log()] starting thread (client mode): 0xf572c7c0
2025-12-13T01:18:25.124 [DEBUG] [Thread-80022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:18:25.138 [DEBUG] [Thread-80022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:18:25.138 [INFO] [Thread-80022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:18:25.145 [DEBUG] [Thread-80022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:18:25.145 [DEBUG] [Thread-80022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:18:25.145 [DEBUG] [Thread-80022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] client lang: <none>
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] server lang: <none>
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] kex follows: False
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] Compression: none
2025-12-13T01:18:25.146 [DEBUG] [Thread-80022] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:18:25.210 [DEBUG] [Thread-80022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:18:25.210 [DEBUG] [Thread-80022] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:18:25.211 [DEBUG] [Thread-80022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:18:25.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:18:25.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:18:25.265 [DEBUG] [Thread-80022] [transport.py] [_log()] userauth is OK
2025-12-13T01:18:25.265 [DEBUG] [Thread-80022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:18:25.265 [DEBUG] [Thread-80022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:18:25.265 [DEBUG] [Thread-80022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:18:25.265 [DEBUG] [Thread-80022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:18:25.284 [INFO] [Thread-80022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:18:25.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:18:25.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:18:26.133 [DEBUG] [Thread-80022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:18:26.133 [DEBUG] [Thread-80022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:18:26.181 [DEBUG] [Thread-80022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:18:26.181 [DEBUG] [Thread-80022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:18:26.190 [DEBUG] [Thread-80022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:18:26.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:18:26.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:18:26.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:18:26.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:18:26.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:18:26.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:18:26.224 [DEBUG] [Thread-80022] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:18:26.329 [DEBUG] [Thread-80024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:29.090 [DEBUG] [Thread-80025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:41.371 [DEBUG] [Thread-80026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:18:56.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:18:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:18:56.398 [DEBUG] [Thread-80027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:18:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 18, 48), 2.31, 85.59, 0.0, 37.7, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:18:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:18:48
2025-12-13T01:18:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:18:57.249 [DEBUG] [Thread-80028] [transport.py] [_log()] starting thread (client mode): 0xf81f3670
2025-12-13T01:18:57.249 [DEBUG] [Thread-80028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:18:57.268 [DEBUG] [Thread-80028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:18:57.268 [INFO] [Thread-80028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:18:57.271 [DEBUG] [Thread-80028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] client lang: <none>
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] server lang: <none>
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] kex follows: False
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] Compression: none
2025-12-13T01:18:57.272 [DEBUG] [Thread-80028] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:18:57.288 [DEBUG] [Thread-80028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:18:57.288 [DEBUG] [Thread-80028] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:18:57.288 [DEBUG] [Thread-80028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:18:57.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:18:57.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:18:57.288 [DEBUG] [Thread-80028] [transport.py] [_log()] userauth is OK
2025-12-13T01:18:57.288 [DEBUG] [Thread-80028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:18:57.289 [DEBUG] [Thread-80028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:18:57.289 [DEBUG] [Thread-80028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:18:57.289 [DEBUG] [Thread-80028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:18:57.297 [INFO] [Thread-80028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:18:57.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:18:57.933 [DEBUG] [Thread-80028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:18:57.933 [DEBUG] [Thread-80028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:18:57.933 [DEBUG] [Thread-80028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:18:57.974 [DEBUG] [Thread-80028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:18:57.974 [DEBUG] [Thread-80028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:18:57.976 [DEBUG] [Thread-80028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:18:57.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:18:57.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:18:57.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:18:57.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:18:57.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:18:57.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:18:57.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:18:57.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:18:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:18:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.971277 -999.00   +7.60  40.85     89   +6.00 1 3 2 3 1     0    0 1.74 4.70 ZnES. 52.9 40.9 320.4 53.1 8.7 -9.2 8.5 -9.7 8.2 -5.7 8.6 -8.1
2025-12-13T01:18:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:18:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:18:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.971277
2025-12-13T01:18:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:18:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:18:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:18:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:18:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:18:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:18:48', tmtdew=2.31, humidity=85.59, cloud=0.0, wind=37.7, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:18:38.333', atlas_cloud=3, atlas_rain=1, zp_data=[1.020249999999999, 1.0292500000000002, nan, nan, nan, 1.404250000000001, 2.1534999999999993, 1.2702500000000008, 0.7440000000000007, 1.0540000000000003, nan, nan, 1.8159999999999998, nan, nan, 1.2939999999999996, 0.7037499999999994, 0.7315000000000005, 1.217999999999999, 1.0002500000000003, 1.674999999999999, nan, nan, 1.58575, 0.5614999999999988, 1.0184999999999995, 1.5962499999999995, 0.6720000000000006, 0.2585000000000006, nan, nan, 1.355500000000001, 0.6577499999999992], zp_timestamp='2025-12-12T23:16:00')
2025-12-13T01:18:57.998 [DEBUG] [Thread-80028] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:18:58.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:18:58.085 [DEBUG] [Thread-80031] [transport.py] [_log()] starting thread (client mode): 0xf81f0550
2025-12-13T01:18:58.085 [DEBUG] [Thread-80031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:18:58.100 [DEBUG] [Thread-80031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:18:58.100 [INFO] [Thread-80031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] client lang: <none>
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] server lang: <none>
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] kex follows: False
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] Compression: none
2025-12-13T01:18:58.108 [DEBUG] [Thread-80031] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:18:58.163 [DEBUG] [Thread-80031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:18:58.163 [DEBUG] [Thread-80031] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:18:58.163 [DEBUG] [Thread-80031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:18:58.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:18:58.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:18:58.220 [DEBUG] [Thread-80031] [transport.py] [_log()] userauth is OK
2025-12-13T01:18:58.220 [DEBUG] [Thread-80031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:18:58.220 [DEBUG] [Thread-80031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:18:58.220 [DEBUG] [Thread-80031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:18:58.220 [DEBUG] [Thread-80031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:18:58.235 [INFO] [Thread-80031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:18:58.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:18:58.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:18:59.083 [DEBUG] [Thread-80031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:18:59.084 [DEBUG] [Thread-80031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:18:59.131 [DEBUG] [Thread-80031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:18:59.132 [DEBUG] [Thread-80031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:18:59.140 [DEBUG] [Thread-80031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:18:59.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:18:59.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:18:59.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:18:59.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:18:59.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:18:59.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:18:59.171 [DEBUG] [Thread-80031] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:19:11.426 [DEBUG] [Thread-80033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:19:12.620 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:19:12.621 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:19:26.467 [DEBUG] [Thread-80034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:19:29.167 [DEBUG] [Thread-80035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:19:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:19:29.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:19:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:19:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 19, 20), 2.31, 85.62, 0.0, 36.19, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:19:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:19:20
2025-12-13T01:19:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:19:30.133 [DEBUG] [Thread-80036] [transport.py] [_log()] starting thread (client mode): 0xf81e7a90
2025-12-13T01:19:30.133 [DEBUG] [Thread-80036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:19:30.155 [DEBUG] [Thread-80036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:19:30.155 [INFO] [Thread-80036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] client lang: <none>
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] server lang: <none>
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] kex follows: False
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] Compression: none
2025-12-13T01:19:30.158 [DEBUG] [Thread-80036] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:19:30.175 [DEBUG] [Thread-80036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:19:30.175 [DEBUG] [Thread-80036] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:19:30.176 [DEBUG] [Thread-80036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:19:30.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:19:30.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:19:30.178 [DEBUG] [Thread-80036] [transport.py] [_log()] userauth is OK
2025-12-13T01:19:30.178 [DEBUG] [Thread-80036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:19:30.178 [DEBUG] [Thread-80036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:19:30.178 [DEBUG] [Thread-80036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:19:30.178 [DEBUG] [Thread-80036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:19:30.202 [INFO] [Thread-80036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:19:30.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:19:30.803 [DEBUG] [Thread-80036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:19:30.803 [DEBUG] [Thread-80036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:19:30.803 [DEBUG] [Thread-80036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:19:30.844 [DEBUG] [Thread-80036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:19:30.844 [DEBUG] [Thread-80036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:19:30.847 [DEBUG] [Thread-80036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:19:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:19:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:19:30.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:19:30.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:19:30.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:19:30.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:19:30.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:19:30.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:19:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:19:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.971624 -999.00   +7.50  46.32     89   +5.90 1 3 2 3 1     0    0 1.72 3.70 ZNEs. 48.7 46.3 311.6 62.3 8.7 -6.8 8.4 -6.5 8.2 -4.1 8.6 -5.6
2025-12-13T01:19:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:19:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:19:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.971624
2025-12-13T01:19:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:19:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:19:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:19:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:19:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:19:30.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:19:20', tmtdew=2.31, humidity=85.62, cloud=0.0, wind=36.19, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:19:08.314', atlas_cloud=3, atlas_rain=1, zp_data=[1.020249999999999, 1.0292500000000002, nan, nan, nan, 1.404250000000001, 2.1534999999999993, 1.2702500000000008, 0.7440000000000007, 1.0540000000000003, nan, nan, 1.8159999999999998, nan, nan, 1.2939999999999996, 0.7037499999999994, 0.7315000000000005, 1.217999999999999, 1.0002500000000003, 1.674999999999999, nan, nan, 1.58575, 0.5614999999999988, 1.0184999999999995, 1.5962499999999995, 0.6720000000000006, 0.2585000000000006, nan, nan, 1.355500000000001, 0.6577499999999992], zp_timestamp='2025-12-12T23:16:00')
2025-12-13T01:19:30.872 [DEBUG] [Thread-80036] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:19:30.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:19:30.968 [DEBUG] [Thread-80039] [transport.py] [_log()] starting thread (client mode): 0xf575f9a0
2025-12-13T01:19:30.968 [DEBUG] [Thread-80039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:19:30.982 [DEBUG] [Thread-80039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:19:30.983 [INFO] [Thread-80039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] client lang: <none>
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] server lang: <none>
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] kex follows: False
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:19:30.990 [DEBUG] [Thread-80039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:19:30.991 [DEBUG] [Thread-80039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:19:30.991 [DEBUG] [Thread-80039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:19:30.991 [DEBUG] [Thread-80039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:19:30.991 [DEBUG] [Thread-80039] [transport.py] [_log()] Compression: none
2025-12-13T01:19:30.991 [DEBUG] [Thread-80039] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:19:31.051 [DEBUG] [Thread-80039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:19:31.051 [DEBUG] [Thread-80039] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:19:31.052 [DEBUG] [Thread-80039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:19:31.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:19:31.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:19:31.107 [DEBUG] [Thread-80039] [transport.py] [_log()] userauth is OK
2025-12-13T01:19:31.107 [DEBUG] [Thread-80039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:19:31.108 [DEBUG] [Thread-80039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:19:31.108 [DEBUG] [Thread-80039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:19:31.108 [DEBUG] [Thread-80039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:19:31.126 [INFO] [Thread-80039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:19:31.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:19:31.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:19:31.983 [DEBUG] [Thread-80039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:19:31.983 [DEBUG] [Thread-80039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:19:32.030 [DEBUG] [Thread-80039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:19:32.031 [DEBUG] [Thread-80039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:19:32.039 [DEBUG] [Thread-80039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:19:32.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:19:32.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:19:32.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:19:32.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:19:32.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:19:32.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:19:32.072 [DEBUG] [Thread-80039] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:19:41.496 [DEBUG] [Thread-80041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:19:56.540 [DEBUG] [Thread-80042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:20:02.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:20:02.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:20:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 19, 52), 2.26, 85.64, 0.0, 45.34, 7.81, 1, 1, 0, 2, 1, 0),)
2025-12-13T01:20:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:19:52
2025-12-13T01:20:02.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:20:03.039 [DEBUG] [Thread-80043] [transport.py] [_log()] starting thread (client mode): 0xf575cca0
2025-12-13T01:20:03.039 [DEBUG] [Thread-80043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:20:03.051 [DEBUG] [Thread-80043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:20:03.051 [INFO] [Thread-80043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] client lang: <none>
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] server lang: <none>
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] kex follows: False
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] Compression: none
2025-12-13T01:20:03.053 [DEBUG] [Thread-80043] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:20:03.061 [DEBUG] [Thread-80043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:20:03.061 [DEBUG] [Thread-80043] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:20:03.061 [DEBUG] [Thread-80043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:20:03.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:20:03.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:20:03.062 [DEBUG] [Thread-80043] [transport.py] [_log()] userauth is OK
2025-12-13T01:20:03.062 [DEBUG] [Thread-80043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:20:03.062 [DEBUG] [Thread-80043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:20:03.062 [DEBUG] [Thread-80043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:20:03.062 [DEBUG] [Thread-80043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:20:03.075 [INFO] [Thread-80043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:20:03.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:20:03.699 [DEBUG] [Thread-80043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:20:03.699 [DEBUG] [Thread-80043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:20:03.700 [DEBUG] [Thread-80043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:20:03.740 [DEBUG] [Thread-80043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:20:03.740 [DEBUG] [Thread-80043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:20:03.743 [DEBUG] [Thread-80043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:20:03.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:20:03.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:20:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:20:03.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:20:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:20:03.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:20:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:20:03.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:20:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:20:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.971971 -999.00   +7.50  43.11     89   +5.90 1 3 2 3 1     0    0 1.68 2.56 ZNEs. 44.5 43.1 313.8 57.4 8.7 -5.4 8.5 -5.1 8.3 -4.1 8.7 -4.3
2025-12-13T01:20:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:20:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:20:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.971971
2025-12-13T01:20:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:20:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:20:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:20:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:20:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:20:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:19:52', tmtdew=2.26, humidity=85.64, cloud=0.0, wind=45.34, temperature=7.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:19:38.294', atlas_cloud=3, atlas_rain=1, zp_data=[1.020249999999999, 1.0292500000000002, nan, nan, nan, 1.404250000000001, 2.1534999999999993, 1.2702500000000008, 0.7440000000000007, 1.0540000000000003, nan, nan, 1.8159999999999998, nan, nan, 1.2939999999999996, 0.7037499999999994, 0.7315000000000005, 1.217999999999999, 1.0002500000000003, 1.674999999999999, nan, nan, 1.58575, 0.5614999999999988, 1.0184999999999995, 1.5962499999999995, 0.6720000000000006, 0.2585000000000006, nan, nan, 1.355500000000001, 0.6577499999999992], zp_timestamp='2025-12-12T23:16:00')
2025-12-13T01:20:03.765 [DEBUG] [Thread-80043] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:20:03.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:20:03.865 [DEBUG] [Thread-80046] [transport.py] [_log()] starting thread (client mode): 0xfabc5a50
2025-12-13T01:20:03.866 [DEBUG] [Thread-80046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:20:03.880 [DEBUG] [Thread-80046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:20:03.880 [INFO] [Thread-80046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] client lang: <none>
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] server lang: <none>
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] kex follows: False
2025-12-13T01:20:03.888 [DEBUG] [Thread-80046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:20:03.889 [DEBUG] [Thread-80046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:20:03.889 [DEBUG] [Thread-80046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:20:03.889 [DEBUG] [Thread-80046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:20:03.889 [DEBUG] [Thread-80046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:20:03.889 [DEBUG] [Thread-80046] [transport.py] [_log()] Compression: none
2025-12-13T01:20:03.889 [DEBUG] [Thread-80046] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:20:03.947 [DEBUG] [Thread-80046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:20:03.947 [DEBUG] [Thread-80046] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:20:03.947 [DEBUG] [Thread-80046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:20:03.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:20:03.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:20:04.003 [DEBUG] [Thread-80046] [transport.py] [_log()] userauth is OK
2025-12-13T01:20:04.003 [DEBUG] [Thread-80046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:20:04.004 [DEBUG] [Thread-80046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:20:04.004 [DEBUG] [Thread-80046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:20:04.004 [DEBUG] [Thread-80046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:20:04.023 [INFO] [Thread-80046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:20:04.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:20:04.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:20:04.892 [DEBUG] [Thread-80046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:20:04.892 [DEBUG] [Thread-80046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:20:04.940 [DEBUG] [Thread-80046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:20:04.940 [DEBUG] [Thread-80046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:20:04.949 [DEBUG] [Thread-80046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:20:04.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:20:04.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:20:04.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:20:04.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:20:04.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:20:04.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:20:04.984 [DEBUG] [Thread-80046] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:20:11.571 [DEBUG] [Thread-80048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:12.827 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:12.828 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:26.616 [DEBUG] [Thread-80049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:29.240 [DEBUG] [Thread-80050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:35.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:20:35.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:20:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:20:35.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 20, 24), 2.27, 85.59, 0.0, 39.89, 7.79, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:20:35.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:20:24
2025-12-13T01:20:35.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:20:35.971 [DEBUG] [Thread-80051] [transport.py] [_log()] starting thread (client mode): 0xf81e7c10
2025-12-13T01:20:35.971 [DEBUG] [Thread-80051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:20:35.981 [DEBUG] [Thread-80051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:20:35.981 [INFO] [Thread-80051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] client lang: <none>
2025-12-13T01:20:35.982 [DEBUG] [Thread-80051] [transport.py] [_log()] server lang: <none>
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] kex follows: False
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] Compression: none
2025-12-13T01:20:35.983 [DEBUG] [Thread-80051] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:20:35.990 [DEBUG] [Thread-80051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:20:35.990 [DEBUG] [Thread-80051] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:20:35.990 [DEBUG] [Thread-80051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:20:35.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:20:35.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:20:35.991 [DEBUG] [Thread-80051] [transport.py] [_log()] userauth is OK
2025-12-13T01:20:35.991 [DEBUG] [Thread-80051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:20:35.991 [DEBUG] [Thread-80051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:20:35.991 [DEBUG] [Thread-80051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:20:35.991 [DEBUG] [Thread-80051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:20:36.003 [INFO] [Thread-80051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:20:36.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:20:36.576 [DEBUG] [Thread-80051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:20:36.576 [DEBUG] [Thread-80051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:20:36.577 [DEBUG] [Thread-80051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:20:36.618 [DEBUG] [Thread-80051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:20:36.618 [DEBUG] [Thread-80051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:20:36.620 [DEBUG] [Thread-80051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:20:36.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:20:36.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:20:36.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:20:36.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:20:36.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:20:36.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:20:36.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:20:36.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:20:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:20:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.972318 -999.00   +7.60  38.03     89   +6.00 1 3 2 3 1     0    0 1.66 1.41 ..E.. 34.0 38.0 309.6 47.8 8.7 -5.0 8.5 -4.6 8.3 -5.7 8.7 -4.6
2025-12-13T01:20:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:20:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:20:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.972318
2025-12-13T01:20:36.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:20:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:20:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:20:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:20:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:20:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:20:24', tmtdew=2.27, humidity=85.59, cloud=0.0, wind=39.89, temperature=7.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:20:08.275', atlas_cloud=3, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:19:00')
2025-12-13T01:20:36.645 [DEBUG] [Thread-80051] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:20:36.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:20:36.743 [DEBUG] [Thread-80054] [transport.py] [_log()] starting thread (client mode): 0xf575fd60
2025-12-13T01:20:36.743 [DEBUG] [Thread-80054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:20:36.761 [DEBUG] [Thread-80054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:20:36.761 [INFO] [Thread-80054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:20:36.769 [DEBUG] [Thread-80054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] client lang: <none>
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] server lang: <none>
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] kex follows: False
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:20:36.770 [DEBUG] [Thread-80054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:20:36.771 [DEBUG] [Thread-80054] [transport.py] [_log()] Compression: none
2025-12-13T01:20:36.771 [DEBUG] [Thread-80054] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:20:36.826 [DEBUG] [Thread-80054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:20:36.827 [DEBUG] [Thread-80054] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:20:36.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:20:36.828 [DEBUG] [Thread-80054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:20:36.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:20:36.883 [DEBUG] [Thread-80054] [transport.py] [_log()] userauth is OK
2025-12-13T01:20:36.883 [DEBUG] [Thread-80054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:20:36.883 [DEBUG] [Thread-80054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:20:36.883 [DEBUG] [Thread-80054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:20:36.883 [DEBUG] [Thread-80054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:20:36.902 [INFO] [Thread-80054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:20:36.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:20:36.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:20:37.689 [DEBUG] [Thread-80054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:20:37.689 [DEBUG] [Thread-80054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:20:37.737 [DEBUG] [Thread-80054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:20:37.737 [DEBUG] [Thread-80054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:20:37.746 [DEBUG] [Thread-80054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:20:37.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:20:37.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:20:37.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:20:37.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:20:37.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:20:37.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:20:37.780 [DEBUG] [Thread-80054] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:20:41.642 [DEBUG] [Thread-80056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:20:56.692 [DEBUG] [Thread-80057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:07.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:21:07.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:21:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:21:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 20, 56), 2.27, 85.54, 0.0, 36.86, 7.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:21:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:20:56
2025-12-13T01:21:08.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:21:08.756 [DEBUG] [Thread-80058] [transport.py] [_log()] starting thread (client mode): 0xf578aef0
2025-12-13T01:21:08.757 [DEBUG] [Thread-80058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:21:08.777 [DEBUG] [Thread-80058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:21:08.777 [INFO] [Thread-80058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] client lang: <none>
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] server lang: <none>
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] kex follows: False
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:21:08.780 [DEBUG] [Thread-80058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:21:08.781 [DEBUG] [Thread-80058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:21:08.781 [DEBUG] [Thread-80058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:21:08.781 [DEBUG] [Thread-80058] [transport.py] [_log()] Compression: none
2025-12-13T01:21:08.781 [DEBUG] [Thread-80058] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:21:08.799 [DEBUG] [Thread-80058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:21:08.800 [DEBUG] [Thread-80058] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:21:08.800 [DEBUG] [Thread-80058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:21:08.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:21:08.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:21:08.802 [DEBUG] [Thread-80058] [transport.py] [_log()] userauth is OK
2025-12-13T01:21:08.802 [DEBUG] [Thread-80058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:21:08.802 [DEBUG] [Thread-80058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:21:08.802 [DEBUG] [Thread-80058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:21:08.803 [DEBUG] [Thread-80058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:21:08.837 [INFO] [Thread-80058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:21:08.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:21:09.469 [DEBUG] [Thread-80058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:21:09.469 [DEBUG] [Thread-80058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:21:09.469 [DEBUG] [Thread-80058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:21:09.510 [DEBUG] [Thread-80058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:21:09.510 [DEBUG] [Thread-80058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:21:09.512 [DEBUG] [Thread-80058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:21:09.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:21:09.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:21:09.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:21:09.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:21:09.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:21:09.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:21:09.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:21:09.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:21:09.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:21:09.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.972318 -999.00   +7.60  38.03     89   +6.00 1 3 2 3 1     0    0 1.66 1.41 ..E.. 34.0 38.0 309.6 47.8 8.7 -5.0 8.5 -4.6 8.3 -5.7 8.7 -4.6
2025-12-13T01:21:09.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:21:09.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:21:09.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.972318
2025-12-13T01:21:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:21:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:21:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:21:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:21:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:21:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:20:56', tmtdew=2.27, humidity=85.54, cloud=0.0, wind=36.86, temperature=7.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:20:08.275', atlas_cloud=3, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:19:00')
2025-12-13T01:21:09.535 [DEBUG] [Thread-80058] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:21:09.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:21:09.634 [DEBUG] [Thread-80061] [transport.py] [_log()] starting thread (client mode): 0xf57897b0
2025-12-13T01:21:09.634 [DEBUG] [Thread-80061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:21:09.650 [DEBUG] [Thread-80061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:21:09.650 [INFO] [Thread-80061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:21:09.657 [DEBUG] [Thread-80061] [transport.py] [_log()] client lang: <none>
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] server lang: <none>
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] kex follows: False
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] Compression: none
2025-12-13T01:21:09.658 [DEBUG] [Thread-80061] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:21:09.713 [DEBUG] [Thread-80061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:21:09.713 [DEBUG] [Thread-80061] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:21:09.714 [DEBUG] [Thread-80061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:21:09.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:21:09.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:21:09.770 [DEBUG] [Thread-80061] [transport.py] [_log()] userauth is OK
2025-12-13T01:21:09.770 [DEBUG] [Thread-80061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:21:09.770 [DEBUG] [Thread-80061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:21:09.770 [DEBUG] [Thread-80061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:21:09.770 [DEBUG] [Thread-80061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:21:09.789 [INFO] [Thread-80061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:21:09.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:21:09.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:21:10.610 [DEBUG] [Thread-80061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:21:10.610 [DEBUG] [Thread-80061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:21:10.659 [DEBUG] [Thread-80061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:21:10.660 [DEBUG] [Thread-80061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:21:10.668 [DEBUG] [Thread-80061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:21:10.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:21:10.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:21:10.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:21:10.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:21:10.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:21:10.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:21:10.704 [DEBUG] [Thread-80061] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:21:11.719 [DEBUG] [Thread-80063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:13.031 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:13.032 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:26.764 [DEBUG] [Thread-80064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:29.319 [DEBUG] [Thread-80065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:40.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:21:40.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:21:40.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:21:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 21, 28), 2.28, 85.52, 0.0, 35.8, 7.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:21:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:21:28
2025-12-13T01:21:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:21:41.672 [DEBUG] [Thread-80066] [transport.py] [_log()] starting thread (client mode): 0xf572fe50
2025-12-13T01:21:41.672 [DEBUG] [Thread-80066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:21:41.694 [DEBUG] [Thread-80066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:21:41.694 [INFO] [Thread-80066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] client lang: <none>
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] server lang: <none>
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] kex follows: False
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:21:41.697 [DEBUG] [Thread-80066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:21:41.698 [DEBUG] [Thread-80066] [transport.py] [_log()] Compression: none
2025-12-13T01:21:41.698 [DEBUG] [Thread-80066] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:21:41.713 [DEBUG] [Thread-80066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:21:41.713 [DEBUG] [Thread-80066] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:21:41.713 [DEBUG] [Thread-80066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:21:41.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:21:41.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:21:41.714 [DEBUG] [Thread-80066] [transport.py] [_log()] userauth is OK
2025-12-13T01:21:41.714 [DEBUG] [Thread-80066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:21:41.714 [DEBUG] [Thread-80066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:21:41.714 [DEBUG] [Thread-80066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:21:41.714 [DEBUG] [Thread-80066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:21:41.725 [INFO] [Thread-80066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:21:41.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:21:41.792 [DEBUG] [Thread-80068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:21:42.370 [DEBUG] [Thread-80066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:21:42.370 [DEBUG] [Thread-80066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:21:42.371 [DEBUG] [Thread-80066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:21:42.411 [DEBUG] [Thread-80066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:21:42.411 [DEBUG] [Thread-80066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:21:42.414 [DEBUG] [Thread-80066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:21:42.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:21:42.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:21:42.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:21:42.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:21:42.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:21:42.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:21:42.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:21:42.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:21:42.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:21:42.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.973013 -999.00   +7.60  35.43     89   +6.00 1 2 2 3 1     0    0 1.60 -1.32 ..E.. 36.3 35.4 313.6 52.6 8.7 -16.7 8.5 -14.0 8.2 -17.8 8.7 -16.1
2025-12-13T01:21:42.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:21:42.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:21:42.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.973013
2025-12-13T01:21:42.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:21:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:21:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:21:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:21:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:21:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:21:28', tmtdew=2.28, humidity=85.52, cloud=0.0, wind=35.8, temperature=7.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:21:08.323', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:19:00')
2025-12-13T01:21:42.436 [DEBUG] [Thread-80066] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:21:42.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:21:42.535 [DEBUG] [Thread-80070] [transport.py] [_log()] starting thread (client mode): 0xf572c8e0
2025-12-13T01:21:42.535 [DEBUG] [Thread-80070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:21:42.550 [DEBUG] [Thread-80070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:21:42.550 [INFO] [Thread-80070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:21:42.557 [DEBUG] [Thread-80070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] client lang: <none>
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] server lang: <none>
2025-12-13T01:21:42.558 [DEBUG] [Thread-80070] [transport.py] [_log()] kex follows: False
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] Compression: none
2025-12-13T01:21:42.559 [DEBUG] [Thread-80070] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:21:42.617 [DEBUG] [Thread-80070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:21:42.617 [DEBUG] [Thread-80070] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:21:42.618 [DEBUG] [Thread-80070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:21:42.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:21:42.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:21:42.673 [DEBUG] [Thread-80070] [transport.py] [_log()] userauth is OK
2025-12-13T01:21:42.673 [DEBUG] [Thread-80070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:21:42.673 [DEBUG] [Thread-80070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:21:42.673 [DEBUG] [Thread-80070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:21:42.673 [DEBUG] [Thread-80070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:21:42.693 [INFO] [Thread-80070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:21:42.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:21:42.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:21:43.528 [DEBUG] [Thread-80070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:21:43.529 [DEBUG] [Thread-80070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:21:43.577 [DEBUG] [Thread-80070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:21:43.577 [DEBUG] [Thread-80070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:21:43.586 [DEBUG] [Thread-80070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:21:43.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:21:43.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:21:43.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:21:43.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:21:43.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:21:43.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:21:43.621 [DEBUG] [Thread-80070] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:21:56.821 [DEBUG] [Thread-80072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:11.870 [DEBUG] [Thread-80073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:13.238 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:13.239 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:22:13.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:22:13.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
2025-12-13T01:22:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 22), 2.23, 85.52, 0.0, 38.3, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:22:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:22:00
2025-12-13T01:22:14.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:22:14.582 [DEBUG] [Thread-80074] [transport.py] [_log()] starting thread (client mode): 0xf572d690
2025-12-13T01:22:14.582 [DEBUG] [Thread-80074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:22:14.602 [DEBUG] [Thread-80074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:22:14.602 [INFO] [Thread-80074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] client lang: <none>
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] server lang: <none>
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] kex follows: False
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] Compression: none
2025-12-13T01:22:14.605 [DEBUG] [Thread-80074] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:22:14.622 [DEBUG] [Thread-80074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:22:14.623 [DEBUG] [Thread-80074] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:22:14.623 [DEBUG] [Thread-80074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:22:14.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:22:14.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:22:14.625 [DEBUG] [Thread-80074] [transport.py] [_log()] userauth is OK
2025-12-13T01:22:14.625 [DEBUG] [Thread-80074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:22:14.625 [DEBUG] [Thread-80074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:22:14.625 [DEBUG] [Thread-80074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:22:14.626 [DEBUG] [Thread-80074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:22:14.659 [INFO] [Thread-80074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:22:14.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:22:15.279 [DEBUG] [Thread-80074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:22:15.279 [DEBUG] [Thread-80074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:22:15.279 [DEBUG] [Thread-80074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:22:15.320 [DEBUG] [Thread-80074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:22:15.320 [DEBUG] [Thread-80074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:22:15.323 [DEBUG] [Thread-80074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:22:15.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:22:15.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:22:15.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:22:15.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:22:15.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:22:15.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:22:15.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:22:15.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:22:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:22:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.973360 -999.00   +7.60  38.61     89   +6.00 1 2 2 3 1     0    0 1.55 -2.60 zN..W 39.9 38.6 322.6 49.8 8.7 -18.8 8.5 -17.7 8.2 -18.1 8.6 -18.4
2025-12-13T01:22:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:22:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:22:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.973360
2025-12-13T01:22:15.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:22:15.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:22:15.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:22:15.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:22:15.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:22:15.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:22:00', tmtdew=2.23, humidity=85.52, cloud=0.0, wind=38.3, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:21:38.304', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:19:00')
2025-12-13T01:22:15.349 [DEBUG] [Thread-80074] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:22:15.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:22:15.445 [DEBUG] [Thread-80077] [transport.py] [_log()] starting thread (client mode): 0xfabc61a0
2025-12-13T01:22:15.445 [DEBUG] [Thread-80077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:22:15.464 [DEBUG] [Thread-80077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:22:15.464 [INFO] [Thread-80077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] client lang: <none>
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] server lang: <none>
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] kex follows: False
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:22:15.472 [DEBUG] [Thread-80077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:22:15.473 [DEBUG] [Thread-80077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:22:15.473 [DEBUG] [Thread-80077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:22:15.473 [DEBUG] [Thread-80077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:22:15.473 [DEBUG] [Thread-80077] [transport.py] [_log()] Compression: none
2025-12-13T01:22:15.473 [DEBUG] [Thread-80077] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:22:15.528 [DEBUG] [Thread-80077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:22:15.528 [DEBUG] [Thread-80077] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:22:15.529 [DEBUG] [Thread-80077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:22:15.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:22:15.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:22:15.584 [DEBUG] [Thread-80077] [transport.py] [_log()] userauth is OK
2025-12-13T01:22:15.585 [DEBUG] [Thread-80077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:22:15.585 [DEBUG] [Thread-80077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:22:15.585 [DEBUG] [Thread-80077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:22:15.585 [DEBUG] [Thread-80077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:22:15.604 [INFO] [Thread-80077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:22:15.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:22:15.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:22:16.479 [DEBUG] [Thread-80077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:22:16.479 [DEBUG] [Thread-80077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:22:16.528 [DEBUG] [Thread-80077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:22:16.528 [DEBUG] [Thread-80077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:22:16.537 [DEBUG] [Thread-80077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:22:16.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:22:16.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:22:16.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:22:16.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:22:16.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:22:16.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:22:16.571 [DEBUG] [Thread-80077] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:22:26.896 [DEBUG] [Thread-80079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:29.396 [DEBUG] [Thread-80080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:41.948 [DEBUG] [Thread-80081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:22:46.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:22:46.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:22:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:22:47.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 22, 32), 2.22, 85.57, 0.0, 37.37, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:22:47.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:22:32
2025-12-13T01:22:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:22:47.564 [DEBUG] [Thread-80082] [transport.py] [_log()] starting thread (client mode): 0xf813d1b0
2025-12-13T01:22:47.564 [DEBUG] [Thread-80082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:22:47.584 [DEBUG] [Thread-80082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:22:47.584 [INFO] [Thread-80082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] client lang: <none>
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] server lang: <none>
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] kex follows: False
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] Compression: none
2025-12-13T01:22:47.586 [DEBUG] [Thread-80082] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:22:47.595 [DEBUG] [Thread-80082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:22:47.595 [DEBUG] [Thread-80082] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:22:47.595 [DEBUG] [Thread-80082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:22:47.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:22:47.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:22:47.596 [DEBUG] [Thread-80082] [transport.py] [_log()] userauth is OK
2025-12-13T01:22:47.596 [DEBUG] [Thread-80082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:22:47.596 [DEBUG] [Thread-80082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:22:47.596 [DEBUG] [Thread-80082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:22:47.596 [DEBUG] [Thread-80082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:22:47.605 [INFO] [Thread-80082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:22:47.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:22:48.239 [DEBUG] [Thread-80082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:22:48.240 [DEBUG] [Thread-80082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:22:48.240 [DEBUG] [Thread-80082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:22:48.280 [DEBUG] [Thread-80082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:22:48.281 [DEBUG] [Thread-80082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:22:48.283 [DEBUG] [Thread-80082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:22:48.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:22:48.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:22:48.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:22:48.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:22:48.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:22:48.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:22:48.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:22:48.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.973707 -999.00   +7.50  49.15     89   +5.90 1 2 2 3 1     0    0 1.48 -4.10 ZNesW 36.7 49.1 312.0 55.9 8.7 -21.6 8.4 -19.2 8.2 -19.7 8.6 -20.3
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.973707
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:22:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:22:32', tmtdew=2.22, humidity=85.57, cloud=0.0, wind=37.37, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:22:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:19:00')
2025-12-13T01:22:48.300 [DEBUG] [Thread-80082] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:22:48.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:22:48.386 [DEBUG] [Thread-80085] [transport.py] [_log()] starting thread (client mode): 0xf81e6cb0
2025-12-13T01:22:48.387 [DEBUG] [Thread-80085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:22:48.402 [DEBUG] [Thread-80085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:22:48.402 [INFO] [Thread-80085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] client lang: <none>
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] server lang: <none>
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] kex follows: False
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:22:48.409 [DEBUG] [Thread-80085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:22:48.410 [DEBUG] [Thread-80085] [transport.py] [_log()] Compression: none
2025-12-13T01:22:48.410 [DEBUG] [Thread-80085] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:22:48.466 [DEBUG] [Thread-80085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:22:48.466 [DEBUG] [Thread-80085] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:22:48.466 [DEBUG] [Thread-80085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:22:48.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:22:48.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:22:48.523 [DEBUG] [Thread-80085] [transport.py] [_log()] userauth is OK
2025-12-13T01:22:48.523 [DEBUG] [Thread-80085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:22:48.523 [DEBUG] [Thread-80085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:22:48.523 [DEBUG] [Thread-80085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:22:48.523 [DEBUG] [Thread-80085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:22:48.537 [INFO] [Thread-80085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:22:48.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:22:48.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:22:49.350 [DEBUG] [Thread-80085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:22:49.350 [DEBUG] [Thread-80085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:22:49.398 [DEBUG] [Thread-80085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:22:49.398 [DEBUG] [Thread-80085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:22:49.407 [DEBUG] [Thread-80085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:22:49.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:22:49.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:22:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:22:49.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:22:49.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:22:49.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:22:49.438 [DEBUG] [Thread-80085] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:22:56.976 [DEBUG] [Thread-80087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:12.027 [DEBUG] [Thread-80088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:13.445 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:13.446 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:23:19.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:23:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:23:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 23, 4), 2.21, 85.64, 0.0, 37.72, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:23:20.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:23:04
2025-12-13T01:23:20.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:23:20.432 [DEBUG] [Thread-80089] [transport.py] [_log()] starting thread (client mode): 0xf5743eb0
2025-12-13T01:23:20.432 [DEBUG] [Thread-80089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:23:20.451 [DEBUG] [Thread-80089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:23:20.451 [INFO] [Thread-80089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] client lang: <none>
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] server lang: <none>
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] kex follows: False
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] Compression: none
2025-12-13T01:23:20.455 [DEBUG] [Thread-80089] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:23:20.476 [DEBUG] [Thread-80089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:23:20.476 [DEBUG] [Thread-80089] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:23:20.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:23:20.477 [DEBUG] [Thread-80089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:23:20.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:23:20.479 [DEBUG] [Thread-80089] [transport.py] [_log()] userauth is OK
2025-12-13T01:23:20.479 [DEBUG] [Thread-80089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:23:20.479 [DEBUG] [Thread-80089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:23:20.479 [DEBUG] [Thread-80089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:23:20.479 [DEBUG] [Thread-80089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:23:20.500 [INFO] [Thread-80089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:23:20.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:23:21.143 [DEBUG] [Thread-80089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:23:21.144 [DEBUG] [Thread-80089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:23:21.144 [DEBUG] [Thread-80089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:23:21.185 [DEBUG] [Thread-80089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:23:21.185 [DEBUG] [Thread-80089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:23:21.188 [DEBUG] [Thread-80089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:23:21.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:23:21.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:23:21.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:23:21.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:23:21.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:23:21.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:23:21.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:23:21.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:23:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:23:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.974054 -999.00   +7.50  44.53     89   +5.80 1 2 2 3 1     0    0 1.46 -5.30 ZNesW 43.3 44.5 313.6 55.8 8.6 -22.1 8.5 -20.4 8.1 -17.5 8.5 -20.5
2025-12-13T01:23:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:23:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:23:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.974054
2025-12-13T01:23:21.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:23:21.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:23:21.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:23:21.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:23:21.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:23:21.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:23:04', tmtdew=2.21, humidity=85.64, cloud=0.0, wind=37.72, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:22:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:19:00')
2025-12-13T01:23:21.216 [DEBUG] [Thread-80089] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:23:21.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:23:21.313 [DEBUG] [Thread-80092] [transport.py] [_log()] starting thread (client mode): 0xf8188400
2025-12-13T01:23:21.313 [DEBUG] [Thread-80092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:23:21.328 [DEBUG] [Thread-80092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:23:21.328 [INFO] [Thread-80092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] client lang: <none>
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] server lang: <none>
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] kex follows: False
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:23:21.336 [DEBUG] [Thread-80092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:23:21.337 [DEBUG] [Thread-80092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:23:21.337 [DEBUG] [Thread-80092] [transport.py] [_log()] Compression: none
2025-12-13T01:23:21.337 [DEBUG] [Thread-80092] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:23:21.395 [DEBUG] [Thread-80092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:23:21.395 [DEBUG] [Thread-80092] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:23:21.395 [DEBUG] [Thread-80092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:23:21.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:23:21.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:23:21.451 [DEBUG] [Thread-80092] [transport.py] [_log()] userauth is OK
2025-12-13T01:23:21.452 [DEBUG] [Thread-80092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:23:21.452 [DEBUG] [Thread-80092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:23:21.452 [DEBUG] [Thread-80092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:23:21.452 [DEBUG] [Thread-80092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:23:21.471 [INFO] [Thread-80092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:23:21.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:23:21.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:23:22.282 [DEBUG] [Thread-80092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:23:22.282 [DEBUG] [Thread-80092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:23:22.331 [DEBUG] [Thread-80092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:23:22.331 [DEBUG] [Thread-80092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:23:22.339 [DEBUG] [Thread-80092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:23:22.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:23:22.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:23:22.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:23:22.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:23:22.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:23:22.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:23:22.371 [DEBUG] [Thread-80092] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:23:27.056 [DEBUG] [Thread-80094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:29.463 [DEBUG] [Thread-80095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:42.089 [DEBUG] [Thread-80096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:23:52.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:23:52.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:23:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:23:53.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 23, 36), 2.27, 85.54, 0.0, 41.5, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:23:53.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:23:36
2025-12-13T01:23:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:23:53.349 [DEBUG] [Thread-80097] [transport.py] [_log()] starting thread (client mode): 0xf81f3670
2025-12-13T01:23:53.349 [DEBUG] [Thread-80097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:23:53.370 [DEBUG] [Thread-80097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:23:53.370 [INFO] [Thread-80097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:53.372 [DEBUG] [Thread-80097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] client lang: <none>
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] server lang: <none>
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] kex follows: False
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] Compression: none
2025-12-13T01:23:53.373 [DEBUG] [Thread-80097] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:23:53.390 [DEBUG] [Thread-80097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:23:53.391 [DEBUG] [Thread-80097] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:23:53.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:23:53.392 [DEBUG] [Thread-80097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:23:53.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:23:53.394 [DEBUG] [Thread-80097] [transport.py] [_log()] userauth is OK
2025-12-13T01:23:53.394 [DEBUG] [Thread-80097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:23:53.394 [DEBUG] [Thread-80097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:23:53.394 [DEBUG] [Thread-80097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:23:53.394 [DEBUG] [Thread-80097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:23:53.418 [INFO] [Thread-80097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:23:53.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:23:54.024 [DEBUG] [Thread-80097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:23:54.025 [DEBUG] [Thread-80097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:23:54.025 [DEBUG] [Thread-80097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:23:54.066 [DEBUG] [Thread-80097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:23:54.066 [DEBUG] [Thread-80097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:23:54.069 [DEBUG] [Thread-80097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:23:54.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:23:54.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:23:54.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:23:54.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:23:54.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:23:54.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:23:54.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:23:54.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:23:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:23:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.974402 -999.00   +7.50  34.55     89   +5.80 1 2 2 3 1     0    0 1.44 -5.81 ZNe.W 41.1 34.5 318.4 53.9 8.6 -21.0 8.4 -18.6 8.2 -14.7 8.5 -19.5
2025-12-13T01:23:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:23:54.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:23:54.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.974402
2025-12-13T01:23:54.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:23:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:23:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:23:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:23:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:23:54.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:23:36', tmtdew=2.27, humidity=85.54, cloud=0.0, wind=41.5, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:23:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:22:00')
2025-12-13T01:23:54.095 [DEBUG] [Thread-80097] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:23:54.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:23:54.193 [DEBUG] [Thread-80100] [transport.py] [_log()] starting thread (client mode): 0xf572d570
2025-12-13T01:23:54.193 [DEBUG] [Thread-80100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:23:54.208 [DEBUG] [Thread-80100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:23:54.208 [INFO] [Thread-80100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:23:54.216 [DEBUG] [Thread-80100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:23:54.216 [DEBUG] [Thread-80100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:23:54.216 [DEBUG] [Thread-80100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:23:54.216 [DEBUG] [Thread-80100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] client lang: <none>
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] server lang: <none>
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] kex follows: False
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:23:54.217 [DEBUG] [Thread-80100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:23:54.218 [DEBUG] [Thread-80100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:23:54.218 [DEBUG] [Thread-80100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:23:54.218 [DEBUG] [Thread-80100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:23:54.218 [DEBUG] [Thread-80100] [transport.py] [_log()] Compression: none
2025-12-13T01:23:54.218 [DEBUG] [Thread-80100] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:23:54.275 [DEBUG] [Thread-80100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:23:54.275 [DEBUG] [Thread-80100] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:23:54.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:23:54.276 [DEBUG] [Thread-80100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:23:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:23:54.331 [DEBUG] [Thread-80100] [transport.py] [_log()] userauth is OK
2025-12-13T01:23:54.331 [DEBUG] [Thread-80100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:23:54.331 [DEBUG] [Thread-80100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:23:54.331 [DEBUG] [Thread-80100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:23:54.331 [DEBUG] [Thread-80100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:23:54.350 [INFO] [Thread-80100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:23:54.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:23:54.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:23:55.176 [DEBUG] [Thread-80100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:23:55.176 [DEBUG] [Thread-80100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:23:55.224 [DEBUG] [Thread-80100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:23:55.224 [DEBUG] [Thread-80100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:23:55.233 [DEBUG] [Thread-80100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:23:55.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:23:55.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:23:55.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:23:55.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:23:55.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:23:55.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:23:55.267 [DEBUG] [Thread-80100] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:23:57.118 [DEBUG] [Thread-80102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:12.162 [DEBUG] [Thread-80103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:13.652 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:13.653 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:25.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:24:25.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:24:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:24:25.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 24, 8), 2.27, 85.57, 0.0, 37.95, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:24:25.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:24:08
2025-12-13T01:24:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:24:26.246 [DEBUG] [Thread-80104] [transport.py] [_log()] starting thread (client mode): 0xf81889d0
2025-12-13T01:24:26.246 [DEBUG] [Thread-80104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:24:26.266 [DEBUG] [Thread-80104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:24:26.266 [INFO] [Thread-80104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:24:26.269 [DEBUG] [Thread-80104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] client lang: <none>
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] server lang: <none>
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] kex follows: False
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] Compression: none
2025-12-13T01:24:26.270 [DEBUG] [Thread-80104] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:24:26.288 [DEBUG] [Thread-80104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:24:26.289 [DEBUG] [Thread-80104] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:24:26.290 [DEBUG] [Thread-80104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:24:26.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:24:26.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:24:26.292 [DEBUG] [Thread-80104] [transport.py] [_log()] userauth is OK
2025-12-13T01:24:26.292 [DEBUG] [Thread-80104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:24:26.292 [DEBUG] [Thread-80104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:24:26.292 [DEBUG] [Thread-80104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:24:26.292 [DEBUG] [Thread-80104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:24:26.327 [INFO] [Thread-80104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:24:26.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:24:26.985 [DEBUG] [Thread-80104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:24:26.985 [DEBUG] [Thread-80104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:24:26.985 [DEBUG] [Thread-80104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:24:27.026 [DEBUG] [Thread-80104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:24:27.026 [DEBUG] [Thread-80104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:24:27.029 [DEBUG] [Thread-80104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:24:27.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:24:27.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:24:27.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:24:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:24:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:24:27.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:24:27.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:24:27.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:24:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:24:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.974749 -999.00   +7.50  40.92     88   +5.80 1 2 2 3 1     0    0 1.45 -6.80 ZNEsw 43.8 40.9 321.6 50.1 8.6 -13.8 8.4 -14.2 8.1 -7.8 8.5 -13.9
2025-12-13T01:24:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:24:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:24:27.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.974749
2025-12-13T01:24:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:24:27.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:24:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:24:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:24:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:24:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:24:08', tmtdew=2.27, humidity=85.57, cloud=0.0, wind=37.95, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:23:38.314', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:22:00')
2025-12-13T01:24:27.056 [DEBUG] [Thread-80104] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:24:27.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:24:27.154 [DEBUG] [Thread-80107] [transport.py] [_log()] starting thread (client mode): 0xfabc7e20
2025-12-13T01:24:27.154 [DEBUG] [Thread-80107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:24:27.169 [DEBUG] [Thread-80107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:24:27.169 [INFO] [Thread-80107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:24:27.176 [DEBUG] [Thread-80107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:24:27.176 [DEBUG] [Thread-80107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:24:27.176 [DEBUG] [Thread-80107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:24:27.176 [DEBUG] [Thread-80107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:24:27.176 [DEBUG] [Thread-80107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:24:27.176 [DEBUG] [Thread-80107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] client lang: <none>
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] server lang: <none>
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] kex follows: False
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] Compression: none
2025-12-13T01:24:27.177 [DEBUG] [Thread-80107] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:24:27.188 [DEBUG] [Thread-80109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:27.234 [DEBUG] [Thread-80107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:24:27.235 [DEBUG] [Thread-80107] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:24:27.235 [DEBUG] [Thread-80107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:24:27.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:24:27.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:24:27.290 [DEBUG] [Thread-80107] [transport.py] [_log()] userauth is OK
2025-12-13T01:24:27.290 [DEBUG] [Thread-80107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:24:27.291 [DEBUG] [Thread-80107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:24:27.291 [DEBUG] [Thread-80107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:24:27.291 [DEBUG] [Thread-80107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:24:27.309 [INFO] [Thread-80107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:24:27.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:24:27.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:24:28.160 [DEBUG] [Thread-80107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:24:28.160 [DEBUG] [Thread-80107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:24:28.208 [DEBUG] [Thread-80107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:24:28.208 [DEBUG] [Thread-80107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:24:28.217 [DEBUG] [Thread-80107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:24:28.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:24:28.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:24:28.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:24:28.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:24:28.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:24:28.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:24:28.251 [DEBUG] [Thread-80107] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:24:29.534 [DEBUG] [Thread-80110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:42.228 [DEBUG] [Thread-80111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:57.257 [DEBUG] [Thread-80112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:24:58.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:24:58.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:24:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:24:58.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 24, 40), 2.22, 85.59, 0.0, 37.48, 7.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:24:58.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:24:40
2025-12-13T01:24:59.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:24:59.210 [DEBUG] [Thread-80113] [transport.py] [_log()] starting thread (client mode): 0xf81e51b0
2025-12-13T01:24:59.210 [DEBUG] [Thread-80113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:24:59.230 [DEBUG] [Thread-80113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:24:59.230 [INFO] [Thread-80113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] client lang: <none>
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] server lang: <none>
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] kex follows: False
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] Compression: none
2025-12-13T01:24:59.234 [DEBUG] [Thread-80113] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:24:59.251 [DEBUG] [Thread-80113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:24:59.252 [DEBUG] [Thread-80113] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:24:59.252 [DEBUG] [Thread-80113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:24:59.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:24:59.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:24:59.255 [DEBUG] [Thread-80113] [transport.py] [_log()] userauth is OK
2025-12-13T01:24:59.255 [DEBUG] [Thread-80113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:24:59.255 [DEBUG] [Thread-80113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:24:59.255 [DEBUG] [Thread-80113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:24:59.255 [DEBUG] [Thread-80113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:24:59.272 [INFO] [Thread-80113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:24:59.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:24:59.915 [DEBUG] [Thread-80113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:24:59.915 [DEBUG] [Thread-80113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:24:59.916 [DEBUG] [Thread-80113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:24:59.957 [DEBUG] [Thread-80113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:24:59.957 [DEBUG] [Thread-80113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:24:59.959 [DEBUG] [Thread-80113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:24:59.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:24:59.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:24:59.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:24:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:24:59.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:24:59.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:24:59.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:24:59.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:24:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:24:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.975096 -999.00   +7.50  34.48     89   +5.90 1 3 2 3 1     0    0 1.42 -6.65 ZNEsw 39.0 34.5 313.0 41.1 8.6 -12.2 8.4 -7.9 8.1 -11.7 8.5 -9.3
2025-12-13T01:24:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:24:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:24:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.975096
2025-12-13T01:24:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:24:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:24:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:24:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:24:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:24:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:24:40', tmtdew=2.22, humidity=85.59, cloud=0.0, wind=37.48, temperature=7.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:24:08.294', atlas_cloud=3, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:22:00')
2025-12-13T01:24:59.985 [DEBUG] [Thread-80113] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:25:00.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:25:00.082 [DEBUG] [Thread-80116] [transport.py] [_log()] starting thread (client mode): 0xf572d570
2025-12-13T01:25:00.082 [DEBUG] [Thread-80116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:25:00.097 [DEBUG] [Thread-80116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:25:00.097 [INFO] [Thread-80116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:25:00.104 [DEBUG] [Thread-80116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:25:00.105 [DEBUG] [Thread-80116] [transport.py] [_log()] client lang: <none>
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] server lang: <none>
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] kex follows: False
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] Compression: none
2025-12-13T01:25:00.106 [DEBUG] [Thread-80116] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:25:00.161 [DEBUG] [Thread-80116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:25:00.161 [DEBUG] [Thread-80116] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:25:00.162 [DEBUG] [Thread-80116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:25:00.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:25:00.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:25:00.218 [DEBUG] [Thread-80116] [transport.py] [_log()] userauth is OK
2025-12-13T01:25:00.218 [DEBUG] [Thread-80116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:25:00.218 [DEBUG] [Thread-80116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:25:00.218 [DEBUG] [Thread-80116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:25:00.218 [DEBUG] [Thread-80116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:25:00.240 [INFO] [Thread-80116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:25:00.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:25:00.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:25:01.083 [DEBUG] [Thread-80116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:25:01.083 [DEBUG] [Thread-80116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:25:01.132 [DEBUG] [Thread-80116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:25:01.132 [DEBUG] [Thread-80116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:25:01.145 [DEBUG] [Thread-80116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:25:01.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:25:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:25:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:25:01.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:25:01.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:25:01.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:25:01.179 [DEBUG] [Thread-80116] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:25:12.286 [DEBUG] [Thread-80118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:25:13.859 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:25:13.860 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:25:27.330 [DEBUG] [Thread-80119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:25:29.621 [DEBUG] [Thread-80120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:25:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:25:31.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:25:31.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:25:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 25, 12), 2.23, 85.52, 0.0, 40.83, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:25:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:25:12
2025-12-13T01:25:32.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:25:32.170 [DEBUG] [Thread-80121] [transport.py] [_log()] starting thread (client mode): 0xf8189ae0
2025-12-13T01:25:32.170 [DEBUG] [Thread-80121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:25:32.190 [DEBUG] [Thread-80121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:25:32.191 [INFO] [Thread-80121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:25:32.194 [DEBUG] [Thread-80121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] client lang: <none>
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] server lang: <none>
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] kex follows: False
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] Compression: none
2025-12-13T01:25:32.195 [DEBUG] [Thread-80121] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:25:32.214 [DEBUG] [Thread-80121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:25:32.214 [DEBUG] [Thread-80121] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:25:32.214 [DEBUG] [Thread-80121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:25:32.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:25:32.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:25:32.215 [DEBUG] [Thread-80121] [transport.py] [_log()] userauth is OK
2025-12-13T01:25:32.215 [DEBUG] [Thread-80121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:25:32.215 [DEBUG] [Thread-80121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:25:32.215 [DEBUG] [Thread-80121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:25:32.215 [DEBUG] [Thread-80121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:25:32.245 [INFO] [Thread-80121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:25:32.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:25:32.864 [DEBUG] [Thread-80121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:25:32.864 [DEBUG] [Thread-80121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:25:32.865 [DEBUG] [Thread-80121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:25:32.906 [DEBUG] [Thread-80121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:25:32.906 [DEBUG] [Thread-80121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:25:32.909 [DEBUG] [Thread-80121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:25:32.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:25:32.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:25:32.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:25:32.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:25:32.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:25:32.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:25:32.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:25:32.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:25:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:25:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.975790 -999.00   +7.50  43.51     89   +5.90 1 2 2 3 1     0    0 1.42 -6.72 zNEsW 43.0 43.5 316.0 47.0 8.6 -13.7 8.4 -14.0 8.2 -6.7 8.5 -15.1
2025-12-13T01:25:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:25:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:25:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.975790
2025-12-13T01:25:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:25:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:25:32.934 [DEBUG] [Thread-80121] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:25:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:25:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:25:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:25:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:25:12', tmtdew=2.23, humidity=85.52, cloud=0.0, wind=40.83, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:25:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:22:00')
2025-12-13T01:25:33.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:25:33.034 [DEBUG] [Thread-80124] [transport.py] [_log()] starting thread (client mode): 0xf578b790
2025-12-13T01:25:33.034 [DEBUG] [Thread-80124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:25:33.048 [DEBUG] [Thread-80124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:25:33.048 [INFO] [Thread-80124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] client lang: <none>
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] server lang: <none>
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] kex follows: False
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:25:33.056 [DEBUG] [Thread-80124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:25:33.057 [DEBUG] [Thread-80124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:25:33.057 [DEBUG] [Thread-80124] [transport.py] [_log()] Compression: none
2025-12-13T01:25:33.057 [DEBUG] [Thread-80124] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:25:33.113 [DEBUG] [Thread-80124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:25:33.113 [DEBUG] [Thread-80124] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:25:33.114 [DEBUG] [Thread-80124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:25:33.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:25:33.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:25:33.169 [DEBUG] [Thread-80124] [transport.py] [_log()] userauth is OK
2025-12-13T01:25:33.169 [DEBUG] [Thread-80124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:25:33.169 [DEBUG] [Thread-80124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:25:33.169 [DEBUG] [Thread-80124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:25:33.169 [DEBUG] [Thread-80124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:25:33.191 [INFO] [Thread-80124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:25:33.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:25:33.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:25:34.015 [DEBUG] [Thread-80124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:25:34.015 [DEBUG] [Thread-80124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:25:34.062 [DEBUG] [Thread-80124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:25:34.063 [DEBUG] [Thread-80124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:25:34.071 [DEBUG] [Thread-80124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:25:34.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:25:34.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:25:34.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:25:34.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:25:34.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:25:34.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:25:34.105 [DEBUG] [Thread-80124] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:25:42.356 [DEBUG] [Thread-80126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:25:57.400 [DEBUG] [Thread-80127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:26:04.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:26:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:26:04.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 25, 44), 2.21, 85.62, 0.0, 42.4, 7.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:26:04.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:25:44
2025-12-13T01:26:04.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:26:05.137 [DEBUG] [Thread-80128] [transport.py] [_log()] starting thread (client mode): 0xf5772140
2025-12-13T01:26:05.137 [DEBUG] [Thread-80128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:26:05.156 [DEBUG] [Thread-80128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:26:05.156 [INFO] [Thread-80128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:26:05.159 [DEBUG] [Thread-80128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:26:05.159 [DEBUG] [Thread-80128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] client lang: <none>
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] server lang: <none>
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] kex follows: False
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] Compression: none
2025-12-13T01:26:05.160 [DEBUG] [Thread-80128] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:26:05.178 [DEBUG] [Thread-80128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:26:05.178 [DEBUG] [Thread-80128] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:26:05.178 [DEBUG] [Thread-80128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:26:05.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:26:05.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:26:05.179 [DEBUG] [Thread-80128] [transport.py] [_log()] userauth is OK
2025-12-13T01:26:05.179 [DEBUG] [Thread-80128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:26:05.179 [DEBUG] [Thread-80128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:26:05.179 [DEBUG] [Thread-80128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:26:05.179 [DEBUG] [Thread-80128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:26:05.197 [INFO] [Thread-80128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:26:05.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:26:05.848 [DEBUG] [Thread-80128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:26:05.848 [DEBUG] [Thread-80128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:26:05.848 [DEBUG] [Thread-80128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:26:05.890 [DEBUG] [Thread-80128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:26:05.890 [DEBUG] [Thread-80128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:26:05.891 [DEBUG] [Thread-80128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:26:05.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:26:05.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:26:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:26:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:26:05.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:26:05.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:26:05.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.976138 -999.00   +7.50  42.09     90   +5.90 1 3 2 3 1     0    0 1.42 -7.07 ZNE.W 45.3 42.1 313.4 49.4 8.6 -10.9 8.4 -7.2 8.2 -11.1 8.4 -8.2
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.976138
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:26:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:25:44', tmtdew=2.21, humidity=85.62, cloud=0.0, wind=42.4, temperature=7.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:25:38.323', atlas_cloud=3, atlas_rain=1, zp_data=[2.8707499999999992, 2.4522500000000003, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.2524999999999995, 1.5562499999999995, 1.3514999999999997, 0.8729999999999993, nan, nan, nan, nan, nan, 0.7439999999999989, 0.6755000000000004, 1.5782499999999997, nan, nan, 1.0020000000000007, nan, 0.5200000000000005, 0.4242499999999989], zp_timestamp='2025-12-12T23:22:00')
2025-12-13T01:26:05.909 [DEBUG] [Thread-80128] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:26:05.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:26:05.997 [DEBUG] [Thread-80131] [transport.py] [_log()] starting thread (client mode): 0xf57039a0
2025-12-13T01:26:05.998 [DEBUG] [Thread-80131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:26:06.016 [DEBUG] [Thread-80131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:26:06.016 [INFO] [Thread-80131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] client lang: <none>
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] server lang: <none>
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] kex follows: False
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] Compression: none
2025-12-13T01:26:06.024 [DEBUG] [Thread-80131] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:26:06.079 [DEBUG] [Thread-80131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:26:06.079 [DEBUG] [Thread-80131] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:26:06.080 [DEBUG] [Thread-80131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:26:06.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:26:06.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:26:06.136 [DEBUG] [Thread-80131] [transport.py] [_log()] userauth is OK
2025-12-13T01:26:06.136 [DEBUG] [Thread-80131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:26:06.137 [DEBUG] [Thread-80131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:26:06.137 [DEBUG] [Thread-80131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:26:06.137 [DEBUG] [Thread-80131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:26:06.155 [INFO] [Thread-80131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:26:06.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:26:06.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:26:07.018 [DEBUG] [Thread-80131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:26:07.018 [DEBUG] [Thread-80131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:26:07.065 [DEBUG] [Thread-80131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:26:07.065 [DEBUG] [Thread-80131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:26:07.074 [DEBUG] [Thread-80131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:26:07.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:26:07.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:26:07.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:26:07.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:26:07.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:26:07.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:26:07.105 [DEBUG] [Thread-80131] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:26:12.429 [DEBUG] [Thread-80133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:14.066 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:14.067 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:27.472 [DEBUG] [Thread-80134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:29.700 [DEBUG] [Thread-80135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:26:37.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:26:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:26:37.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 26, 16), 2.21, 85.64, 0.0, 43.72, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:26:37.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:26:16
2025-12-13T01:26:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:26:38.080 [DEBUG] [Thread-80136] [transport.py] [_log()] starting thread (client mode): 0xf5700a60
2025-12-13T01:26:38.080 [DEBUG] [Thread-80136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:26:38.098 [DEBUG] [Thread-80136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:26:38.099 [INFO] [Thread-80136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:26:38.101 [DEBUG] [Thread-80136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] client lang: <none>
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] server lang: <none>
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] kex follows: False
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] Compression: none
2025-12-13T01:26:38.102 [DEBUG] [Thread-80136] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:26:38.116 [DEBUG] [Thread-80136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:26:38.116 [DEBUG] [Thread-80136] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:26:38.116 [DEBUG] [Thread-80136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:26:38.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:26:38.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:26:38.117 [DEBUG] [Thread-80136] [transport.py] [_log()] userauth is OK
2025-12-13T01:26:38.117 [DEBUG] [Thread-80136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:26:38.117 [DEBUG] [Thread-80136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:26:38.117 [DEBUG] [Thread-80136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:26:38.117 [DEBUG] [Thread-80136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:26:38.132 [INFO] [Thread-80136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:26:38.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:26:38.763 [DEBUG] [Thread-80136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:26:38.763 [DEBUG] [Thread-80136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:26:38.764 [DEBUG] [Thread-80136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:26:38.805 [DEBUG] [Thread-80136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:26:38.805 [DEBUG] [Thread-80136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:26:38.808 [DEBUG] [Thread-80136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:26:38.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:26:38.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:26:38.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:26:38.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:26:38.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:26:38.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:26:38.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:26:38.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:26:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:26:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.976485 -999.00   +7.50  42.13     90   +6.00 1 2 2 3 1     0    0 1.39 -7.39 ZNE.W 38.9 42.1 313.2 52.0 8.6 -15.1 8.4 -12.5 8.1 -12.6 8.5 -13.6
2025-12-13T01:26:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:26:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:26:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.976485
2025-12-13T01:26:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:26:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:26:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:26:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:26:38.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:26:38.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:26:16', tmtdew=2.21, humidity=85.64, cloud=0.0, wind=43.72, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:26:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:25:00')
2025-12-13T01:26:38.838 [DEBUG] [Thread-80136] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:26:38.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:26:38.924 [DEBUG] [Thread-80139] [transport.py] [_log()] starting thread (client mode): 0xf572d8d0
2025-12-13T01:26:38.924 [DEBUG] [Thread-80139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:26:38.938 [DEBUG] [Thread-80139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:26:38.938 [INFO] [Thread-80139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:26:38.946 [DEBUG] [Thread-80139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] client lang: <none>
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] server lang: <none>
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] kex follows: False
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:26:38.947 [DEBUG] [Thread-80139] [transport.py] [_log()] Compression: none
2025-12-13T01:26:38.948 [DEBUG] [Thread-80139] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:26:39.008 [DEBUG] [Thread-80139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:26:39.009 [DEBUG] [Thread-80139] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:26:39.010 [DEBUG] [Thread-80139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:26:39.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:26:39.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:26:39.064 [DEBUG] [Thread-80139] [transport.py] [_log()] userauth is OK
2025-12-13T01:26:39.065 [DEBUG] [Thread-80139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:26:39.065 [DEBUG] [Thread-80139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:26:39.065 [DEBUG] [Thread-80139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:26:39.065 [DEBUG] [Thread-80139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:26:39.087 [INFO] [Thread-80139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:26:39.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:26:39.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:26:39.925 [DEBUG] [Thread-80139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:26:39.925 [DEBUG] [Thread-80139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:26:39.973 [DEBUG] [Thread-80139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:26:39.973 [DEBUG] [Thread-80139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:26:39.982 [DEBUG] [Thread-80139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:26:39.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:26:39.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:26:39.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:26:40.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:26:40.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:26:40.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:26:40.017 [DEBUG] [Thread-80139] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:26:42.501 [DEBUG] [Thread-80141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:26:57.539 [DEBUG] [Thread-80142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:27:10.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:27:10.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:27:10.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 26, 48), 2.15, 86.16, 0.0, 36.2, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:27:10.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:26:48
2025-12-13T01:27:10.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:27:11.001 [DEBUG] [Thread-80143] [transport.py] [_log()] starting thread (client mode): 0xf5703e50
2025-12-13T01:27:11.001 [DEBUG] [Thread-80143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:27:11.021 [DEBUG] [Thread-80143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:27:11.022 [INFO] [Thread-80143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] client lang: <none>
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] server lang: <none>
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] kex follows: False
2025-12-13T01:27:11.025 [DEBUG] [Thread-80143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:27:11.026 [DEBUG] [Thread-80143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:27:11.026 [DEBUG] [Thread-80143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:27:11.026 [DEBUG] [Thread-80143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:27:11.026 [DEBUG] [Thread-80143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:27:11.026 [DEBUG] [Thread-80143] [transport.py] [_log()] Compression: none
2025-12-13T01:27:11.026 [DEBUG] [Thread-80143] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:27:11.044 [DEBUG] [Thread-80143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:27:11.045 [DEBUG] [Thread-80143] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:27:11.046 [DEBUG] [Thread-80143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:27:11.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:27:11.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:27:11.049 [DEBUG] [Thread-80143] [transport.py] [_log()] userauth is OK
2025-12-13T01:27:11.049 [DEBUG] [Thread-80143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:27:11.049 [DEBUG] [Thread-80143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:27:11.049 [DEBUG] [Thread-80143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:27:11.049 [DEBUG] [Thread-80143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:27:11.087 [INFO] [Thread-80143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:27:11.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:27:11.729 [DEBUG] [Thread-80143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:27:11.729 [DEBUG] [Thread-80143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:27:11.730 [DEBUG] [Thread-80143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:27:11.771 [DEBUG] [Thread-80143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:27:11.771 [DEBUG] [Thread-80143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:27:11.774 [DEBUG] [Thread-80143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:27:11.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:27:11.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:27:11.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:27:11.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:27:11.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:27:11.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:27:11.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:27:11.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:27:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:27:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.976832 -999.00   +7.50  37.79     90   +6.00 1 2 2 3 1     0    0 1.37 -8.86 ZNE.. 39.1 37.8 308.4 49.5 8.6 -14.3 8.4 -13.9 8.2 -11.5 8.5 -12.9
2025-12-13T01:27:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:27:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:27:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.976832
2025-12-13T01:27:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:27:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:27:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:27:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:27:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:27:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:26:48', tmtdew=2.15, humidity=86.16, cloud=0.0, wind=36.2, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:26:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:25:00')
2025-12-13T01:27:11.798 [DEBUG] [Thread-80143] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:27:11.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:27:11.894 [DEBUG] [Thread-80146] [transport.py] [_log()] starting thread (client mode): 0xf5700fa0
2025-12-13T01:27:11.894 [DEBUG] [Thread-80146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:27:11.908 [DEBUG] [Thread-80146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:27:11.908 [INFO] [Thread-80146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:11.916 [DEBUG] [Thread-80146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] client lang: <none>
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] server lang: <none>
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] kex follows: False
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:27:11.917 [DEBUG] [Thread-80146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:27:11.918 [DEBUG] [Thread-80146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:27:11.918 [DEBUG] [Thread-80146] [transport.py] [_log()] Compression: none
2025-12-13T01:27:11.918 [DEBUG] [Thread-80146] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:27:11.976 [DEBUG] [Thread-80146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:27:11.977 [DEBUG] [Thread-80146] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:27:11.977 [DEBUG] [Thread-80146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:27:11.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:27:11.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:27:12.032 [DEBUG] [Thread-80146] [transport.py] [_log()] userauth is OK
2025-12-13T01:27:12.033 [DEBUG] [Thread-80146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:27:12.033 [DEBUG] [Thread-80146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:27:12.033 [DEBUG] [Thread-80146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:27:12.033 [DEBUG] [Thread-80146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:27:12.055 [INFO] [Thread-80146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:27:12.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:27:12.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:27:12.568 [DEBUG] [Thread-80148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:12.914 [DEBUG] [Thread-80146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:27:12.914 [DEBUG] [Thread-80146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:27:12.962 [DEBUG] [Thread-80146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:27:12.962 [DEBUG] [Thread-80146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:27:12.971 [DEBUG] [Thread-80146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:27:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:27:12.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:27:12.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:27:12.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:27:12.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:27:12.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:27:13.004 [DEBUG] [Thread-80146] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:27:14.271 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:14.273 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:27.611 [DEBUG] [Thread-80149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:29.782 [DEBUG] [Thread-80150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:42.643 [DEBUG] [Thread-80151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:27:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:27:43.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:27:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:27:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 27, 20), 2.16, 86.14, 0.0, 34.88, 7.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:27:43.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:27:20
2025-12-13T01:27:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:27:44.000 [DEBUG] [Thread-80152] [transport.py] [_log()] starting thread (client mode): 0xf578a650
2025-12-13T01:27:44.000 [DEBUG] [Thread-80152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:27:44.020 [DEBUG] [Thread-80152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:27:44.020 [INFO] [Thread-80152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:27:44.023 [DEBUG] [Thread-80152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:27:44.023 [DEBUG] [Thread-80152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:27:44.023 [DEBUG] [Thread-80152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] client lang: <none>
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] server lang: <none>
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] kex follows: False
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] Compression: none
2025-12-13T01:27:44.024 [DEBUG] [Thread-80152] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:27:44.041 [DEBUG] [Thread-80152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:27:44.041 [DEBUG] [Thread-80152] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:27:44.042 [DEBUG] [Thread-80152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:27:44.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:27:44.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:27:44.044 [DEBUG] [Thread-80152] [transport.py] [_log()] userauth is OK
2025-12-13T01:27:44.044 [DEBUG] [Thread-80152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:27:44.044 [DEBUG] [Thread-80152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:27:44.044 [DEBUG] [Thread-80152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:27:44.044 [DEBUG] [Thread-80152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:27:44.065 [INFO] [Thread-80152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:27:44.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:27:44.650 [DEBUG] [Thread-80152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:27:44.650 [DEBUG] [Thread-80152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:27:44.651 [DEBUG] [Thread-80152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:27:44.691 [DEBUG] [Thread-80152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:27:44.691 [DEBUG] [Thread-80152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:27:44.694 [DEBUG] [Thread-80152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:27:44.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:27:44.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:27:44.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:27:44.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:27:44.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:27:44.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:27:44.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:27:44.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:27:44.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:27:44.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.977179 -999.00   +7.50  39.72     89   +5.90 1 2 2 3 1     0    0 1.39 -7.89 ZNe.W 40.2 39.7 310.2 51.7 8.6 -12.0 8.6 -12.6 8.2 -8.9 8.5 -10.4
2025-12-13T01:27:44.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:27:44.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:27:44.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.977179
2025-12-13T01:27:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:27:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:27:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:27:44.716 [DEBUG] [Thread-80152] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:27:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:27:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:27:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:27:20', tmtdew=2.16, humidity=86.14, cloud=0.0, wind=34.88, temperature=7.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:27:08.266', atlas_cloud=2, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:25:00')
2025-12-13T01:27:44.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:27:44.818 [DEBUG] [Thread-80155] [transport.py] [_log()] starting thread (client mode): 0xf5702560
2025-12-13T01:27:44.818 [DEBUG] [Thread-80155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:27:44.832 [DEBUG] [Thread-80155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:27:44.832 [INFO] [Thread-80155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:27:44.839 [DEBUG] [Thread-80155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:27:44.839 [DEBUG] [Thread-80155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] client lang: <none>
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] server lang: <none>
2025-12-13T01:27:44.840 [DEBUG] [Thread-80155] [transport.py] [_log()] kex follows: False
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] Compression: none
2025-12-13T01:27:44.841 [DEBUG] [Thread-80155] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:27:44.898 [DEBUG] [Thread-80155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:27:44.899 [DEBUG] [Thread-80155] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:27:44.899 [DEBUG] [Thread-80155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:27:44.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:27:44.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:27:44.955 [DEBUG] [Thread-80155] [transport.py] [_log()] userauth is OK
2025-12-13T01:27:44.955 [DEBUG] [Thread-80155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:27:44.955 [DEBUG] [Thread-80155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:27:44.955 [DEBUG] [Thread-80155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:27:44.955 [DEBUG] [Thread-80155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:27:44.974 [INFO] [Thread-80155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:27:44.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:27:44.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:27:45.792 [DEBUG] [Thread-80155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:27:45.793 [DEBUG] [Thread-80155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:27:45.841 [DEBUG] [Thread-80155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:27:45.841 [DEBUG] [Thread-80155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:27:45.850 [DEBUG] [Thread-80155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:27:45.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:27:45.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:27:45.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:27:45.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:27:45.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:27:45.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:27:45.883 [DEBUG] [Thread-80155] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:27:57.674 [DEBUG] [Thread-80157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:12.721 [DEBUG] [Thread-80158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:14.488 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:14.490 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:15.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:28:15.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:28:15.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:28:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 27, 53), 2.2, 85.66, 0.0, 39.61, 7.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:28:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:27:53
2025-12-13T01:28:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:28:16.858 [DEBUG] [Thread-80159] [transport.py] [_log()] starting thread (client mode): 0xf5702350
2025-12-13T01:28:16.859 [DEBUG] [Thread-80159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:28:16.879 [DEBUG] [Thread-80159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:28:16.879 [INFO] [Thread-80159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] client lang: <none>
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] server lang: <none>
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] kex follows: False
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:28:16.882 [DEBUG] [Thread-80159] [transport.py] [_log()] Compression: none
2025-12-13T01:28:16.883 [DEBUG] [Thread-80159] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:28:16.899 [DEBUG] [Thread-80159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:28:16.899 [DEBUG] [Thread-80159] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:28:16.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:28:16.900 [DEBUG] [Thread-80159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:28:16.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:28:16.903 [DEBUG] [Thread-80159] [transport.py] [_log()] userauth is OK
2025-12-13T01:28:16.903 [DEBUG] [Thread-80159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:28:16.903 [DEBUG] [Thread-80159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:28:16.903 [DEBUG] [Thread-80159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:28:16.903 [DEBUG] [Thread-80159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:28:16.927 [INFO] [Thread-80159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:28:16.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:28:17.569 [DEBUG] [Thread-80159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:28:17.569 [DEBUG] [Thread-80159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:28:17.569 [DEBUG] [Thread-80159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:28:17.610 [DEBUG] [Thread-80159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:28:17.610 [DEBUG] [Thread-80159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:28:17.614 [DEBUG] [Thread-80159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:28:17.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:28:17.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:28:17.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:28:17.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:28:17.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:28:17.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:28:17.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:28:17.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:28:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:28:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.977526 -999.00   +7.60  42.19     89   +5.90 1 3 2 3 1     0    0 1.35 -7.81 ZNe.W 43.6 42.2 315.6 50.3 8.7 -8.4 8.5 -9.1 8.2 -5.0 8.6 -7.5
2025-12-13T01:28:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:28:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:28:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.977526
2025-12-13T01:28:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:28:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:28:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:28:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:28:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:28:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:27:53', tmtdew=2.2, humidity=85.66, cloud=0.0, wind=39.61, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:27:38.246', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:25:00')
2025-12-13T01:28:17.643 [DEBUG] [Thread-80159] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:28:17.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:28:17.740 [DEBUG] [Thread-80162] [transport.py] [_log()] starting thread (client mode): 0xf818bac0
2025-12-13T01:28:17.740 [DEBUG] [Thread-80162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:28:17.754 [DEBUG] [Thread-80162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:28:17.754 [INFO] [Thread-80162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] client lang: <none>
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] server lang: <none>
2025-12-13T01:28:17.762 [DEBUG] [Thread-80162] [transport.py] [_log()] kex follows: False
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] Compression: none
2025-12-13T01:28:17.763 [DEBUG] [Thread-80162] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:28:17.819 [DEBUG] [Thread-80162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:28:17.819 [DEBUG] [Thread-80162] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:28:17.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:28:17.820 [DEBUG] [Thread-80162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:28:17.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:28:17.875 [DEBUG] [Thread-80162] [transport.py] [_log()] userauth is OK
2025-12-13T01:28:17.875 [DEBUG] [Thread-80162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:28:17.875 [DEBUG] [Thread-80162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:28:17.875 [DEBUG] [Thread-80162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:28:17.875 [DEBUG] [Thread-80162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:28:17.894 [INFO] [Thread-80162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:28:17.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:28:17.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:28:18.754 [DEBUG] [Thread-80162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:28:18.754 [DEBUG] [Thread-80162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:28:18.802 [DEBUG] [Thread-80162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:28:18.802 [DEBUG] [Thread-80162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:28:18.811 [DEBUG] [Thread-80162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:28:18.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:28:18.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:28:18.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:28:18.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:28:18.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:28:18.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:28:18.845 [DEBUG] [Thread-80162] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:28:27.752 [DEBUG] [Thread-80164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:29.865 [DEBUG] [Thread-80165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:42.801 [DEBUG] [Thread-80166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:28:48.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:28:48.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:28:48.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:28:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 28, 25), 2.21, 85.59, 0.0, 39.57, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:28:49.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:28:25
2025-12-13T01:28:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:28:49.827 [DEBUG] [Thread-80167] [transport.py] [_log()] starting thread (client mode): 0xf5789630
2025-12-13T01:28:49.827 [DEBUG] [Thread-80167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:28:49.847 [DEBUG] [Thread-80167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:28:49.847 [INFO] [Thread-80167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:28:49.848 [DEBUG] [Thread-80167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] client lang: <none>
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] server lang: <none>
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] kex follows: False
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:28:49.849 [DEBUG] [Thread-80167] [transport.py] [_log()] Compression: none
2025-12-13T01:28:49.850 [DEBUG] [Thread-80167] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:28:49.867 [DEBUG] [Thread-80167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:28:49.868 [DEBUG] [Thread-80167] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:28:49.869 [DEBUG] [Thread-80167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:28:49.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:28:49.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:28:49.871 [DEBUG] [Thread-80167] [transport.py] [_log()] userauth is OK
2025-12-13T01:28:49.871 [DEBUG] [Thread-80167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:28:49.871 [DEBUG] [Thread-80167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:28:49.871 [DEBUG] [Thread-80167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:28:49.872 [DEBUG] [Thread-80167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:28:49.896 [INFO] [Thread-80167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:28:49.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:28:50.526 [DEBUG] [Thread-80167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:28:50.526 [DEBUG] [Thread-80167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:28:50.527 [DEBUG] [Thread-80167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:28:50.567 [DEBUG] [Thread-80167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:28:50.567 [DEBUG] [Thread-80167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:28:50.570 [DEBUG] [Thread-80167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:28:50.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:28:50.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:28:50.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:28:50.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:28:50.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:28:50.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:28:50.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:28:50.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:28:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:28:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.978221 -999.00   +7.50  39.25     89   +5.90 1 3 2 3 1     0    0 1.46 -6.42 Z.ESw 50.6 39.2 317.2 50.4 8.7 -7.5 8.5 -7.6 8.3 -6.3 8.6 -6.0
2025-12-13T01:28:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:28:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:28:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.978221
2025-12-13T01:28:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:28:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:28:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:28:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:28:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:28:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:28:25', tmtdew=2.21, humidity=85.59, cloud=0.0, wind=39.57, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:28:38.294', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:25:00')
2025-12-13T01:28:50.597 [DEBUG] [Thread-80167] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:28:50.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:28:50.694 [DEBUG] [Thread-80170] [transport.py] [_log()] starting thread (client mode): 0xf572ecb0
2025-12-13T01:28:50.694 [DEBUG] [Thread-80170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:28:50.709 [DEBUG] [Thread-80170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:28:50.709 [INFO] [Thread-80170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:28:50.716 [DEBUG] [Thread-80170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:28:50.716 [DEBUG] [Thread-80170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:28:50.716 [DEBUG] [Thread-80170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] client lang: <none>
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] server lang: <none>
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] kex follows: False
2025-12-13T01:28:50.717 [DEBUG] [Thread-80170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:28:50.718 [DEBUG] [Thread-80170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:28:50.718 [DEBUG] [Thread-80170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:28:50.718 [DEBUG] [Thread-80170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:28:50.718 [DEBUG] [Thread-80170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:28:50.718 [DEBUG] [Thread-80170] [transport.py] [_log()] Compression: none
2025-12-13T01:28:50.718 [DEBUG] [Thread-80170] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:28:50.774 [DEBUG] [Thread-80170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:28:50.775 [DEBUG] [Thread-80170] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:28:50.775 [DEBUG] [Thread-80170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:28:50.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:28:50.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:28:50.830 [DEBUG] [Thread-80170] [transport.py] [_log()] userauth is OK
2025-12-13T01:28:50.830 [DEBUG] [Thread-80170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:28:50.831 [DEBUG] [Thread-80170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:28:50.831 [DEBUG] [Thread-80170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:28:50.831 [DEBUG] [Thread-80170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:28:50.850 [INFO] [Thread-80170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:28:50.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:28:50.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:28:51.670 [DEBUG] [Thread-80170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:28:51.670 [DEBUG] [Thread-80170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:28:51.718 [DEBUG] [Thread-80170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:28:51.718 [DEBUG] [Thread-80170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:28:51.727 [DEBUG] [Thread-80170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:28:51.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:28:51.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:28:51.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:28:51.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:28:51.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:28:51.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:28:51.761 [DEBUG] [Thread-80170] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:28:57.825 [DEBUG] [Thread-80172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:12.868 [DEBUG] [Thread-80173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:14.695 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:14.696 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:21.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:29:21.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:29:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:29:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 28, 57), 2.26, 85.64, 0.0, 36.59, 7.79, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:29:22.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:28:57
2025-12-13T01:29:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:29:22.744 [DEBUG] [Thread-80174] [transport.py] [_log()] starting thread (client mode): 0xf572e7a0
2025-12-13T01:29:22.745 [DEBUG] [Thread-80174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:29:22.766 [DEBUG] [Thread-80174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:29:22.766 [INFO] [Thread-80174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:29:22.769 [DEBUG] [Thread-80174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] client lang: <none>
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] server lang: <none>
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] kex follows: False
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:29:22.770 [DEBUG] [Thread-80174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:29:22.771 [DEBUG] [Thread-80174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:29:22.771 [DEBUG] [Thread-80174] [transport.py] [_log()] Compression: none
2025-12-13T01:29:22.771 [DEBUG] [Thread-80174] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:29:22.790 [DEBUG] [Thread-80174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:29:22.791 [DEBUG] [Thread-80174] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:29:22.791 [DEBUG] [Thread-80174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:29:22.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:29:22.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:29:22.794 [DEBUG] [Thread-80174] [transport.py] [_log()] userauth is OK
2025-12-13T01:29:22.794 [DEBUG] [Thread-80174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:29:22.794 [DEBUG] [Thread-80174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:29:22.794 [DEBUG] [Thread-80174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:29:22.794 [DEBUG] [Thread-80174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:29:22.814 [INFO] [Thread-80174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:29:22.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:29:23.410 [DEBUG] [Thread-80174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:29:23.411 [DEBUG] [Thread-80174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:29:23.411 [DEBUG] [Thread-80174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:29:23.452 [DEBUG] [Thread-80174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:29:23.452 [DEBUG] [Thread-80174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:29:23.455 [DEBUG] [Thread-80174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:29:23.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:29:23.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:29:23.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:29:23.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:29:23.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:29:23.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:29:23.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:29:23.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:29:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:29:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.978568 -999.00   +7.50  42.64     89   +5.90 1 3 2 3 1     0    0 1.40 -6.19 Z.E.. 44.0 42.6 315.4 57.9 8.7 -7.3 8.5 -7.5 8.3 -6.3 8.6 -5.7
2025-12-13T01:29:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:29:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:29:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.978568
2025-12-13T01:29:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:29:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:29:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:29:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:29:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:29:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:28:57', tmtdew=2.26, humidity=85.64, cloud=0.0, wind=36.59, temperature=7.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:29:08.275', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:25:00')
2025-12-13T01:29:23.482 [DEBUG] [Thread-80174] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:29:23.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:29:23.590 [DEBUG] [Thread-80177] [transport.py] [_log()] starting thread (client mode): 0xf572dab0
2025-12-13T01:29:23.590 [DEBUG] [Thread-80177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:29:23.604 [DEBUG] [Thread-80177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:29:23.604 [INFO] [Thread-80177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] client lang: <none>
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] server lang: <none>
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] kex follows: False
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] Compression: none
2025-12-13T01:29:23.612 [DEBUG] [Thread-80177] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:29:23.668 [DEBUG] [Thread-80177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:29:23.669 [DEBUG] [Thread-80177] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:29:23.669 [DEBUG] [Thread-80177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:29:23.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:29:23.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:29:23.730 [DEBUG] [Thread-80177] [transport.py] [_log()] userauth is OK
2025-12-13T01:29:23.730 [DEBUG] [Thread-80177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:29:23.730 [DEBUG] [Thread-80177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:29:23.730 [DEBUG] [Thread-80177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:29:23.730 [DEBUG] [Thread-80177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:29:23.749 [INFO] [Thread-80177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:29:23.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:29:23.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:29:24.597 [DEBUG] [Thread-80177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:29:24.597 [DEBUG] [Thread-80177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:29:24.645 [DEBUG] [Thread-80177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:29:24.645 [DEBUG] [Thread-80177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:29:24.654 [DEBUG] [Thread-80177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:29:24.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:29:24.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:29:24.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:29:24.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:29:24.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:29:24.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:29:24.689 [DEBUG] [Thread-80177] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:29:27.898 [DEBUG] [Thread-80179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:29.939 [DEBUG] [Thread-80180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:42.940 [DEBUG] [Thread-80181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:29:54.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:29:54.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:29:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:29:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 29, 29), 2.27, 85.59, 0.0, 31.51, 7.81, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:29:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:29:29
2025-12-13T01:29:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:29:55.726 [DEBUG] [Thread-80182] [transport.py] [_log()] starting thread (client mode): 0xf8189330
2025-12-13T01:29:55.726 [DEBUG] [Thread-80182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:29:55.747 [DEBUG] [Thread-80182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:29:55.747 [INFO] [Thread-80182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] client lang: <none>
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] server lang: <none>
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] kex follows: False
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] Compression: none
2025-12-13T01:29:55.749 [DEBUG] [Thread-80182] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:29:55.756 [DEBUG] [Thread-80182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:29:55.756 [DEBUG] [Thread-80182] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:29:55.756 [DEBUG] [Thread-80182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:29:55.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:29:55.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:29:55.757 [DEBUG] [Thread-80182] [transport.py] [_log()] userauth is OK
2025-12-13T01:29:55.757 [DEBUG] [Thread-80182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:29:55.757 [DEBUG] [Thread-80182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:29:55.757 [DEBUG] [Thread-80182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:29:55.757 [DEBUG] [Thread-80182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:29:55.772 [INFO] [Thread-80182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:29:55.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:29:56.418 [DEBUG] [Thread-80182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:29:56.418 [DEBUG] [Thread-80182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:29:56.418 [DEBUG] [Thread-80182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:29:56.458 [DEBUG] [Thread-80182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:29:56.459 [DEBUG] [Thread-80182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:29:56.461 [DEBUG] [Thread-80182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:29:56.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:29:56.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:29:56.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:29:56.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:29:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:29:56.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:29:56.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.978915 -999.00   +7.50  39.26     89   +5.90 1 3 2 3 1     0    0 1.46 -5.73 ..ESW 35.3 39.3 314.8 44.6 8.7 -4.7 8.5 -5.9 8.3 -3.9 8.6 -4.7
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.978915
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:29:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:29:29', tmtdew=2.27, humidity=85.59, cloud=0.0, wind=31.51, temperature=7.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:29:38.256', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:28:00')
2025-12-13T01:29:56.479 [DEBUG] [Thread-80182] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:29:56.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:29:56.565 [DEBUG] [Thread-80185] [transport.py] [_log()] starting thread (client mode): 0xf818b760
2025-12-13T01:29:56.565 [DEBUG] [Thread-80185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:29:56.579 [DEBUG] [Thread-80185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:29:56.579 [INFO] [Thread-80185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] client lang: <none>
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] server lang: <none>
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] kex follows: False
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] Compression: none
2025-12-13T01:29:56.587 [DEBUG] [Thread-80185] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:29:56.644 [DEBUG] [Thread-80185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:29:56.644 [DEBUG] [Thread-80185] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:29:56.644 [DEBUG] [Thread-80185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:29:56.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:29:56.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:29:56.701 [DEBUG] [Thread-80185] [transport.py] [_log()] userauth is OK
2025-12-13T01:29:56.701 [DEBUG] [Thread-80185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:29:56.702 [DEBUG] [Thread-80185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:29:56.702 [DEBUG] [Thread-80185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:29:56.702 [DEBUG] [Thread-80185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:29:56.719 [INFO] [Thread-80185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:29:56.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:29:56.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:29:57.503 [DEBUG] [Thread-80185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:29:57.503 [DEBUG] [Thread-80185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:29:57.550 [DEBUG] [Thread-80185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:29:57.550 [DEBUG] [Thread-80185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:29:57.558 [DEBUG] [Thread-80185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:29:57.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:29:57.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:29:57.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:29:57.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:29:57.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:29:57.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:29:57.590 [DEBUG] [Thread-80185] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:29:57.966 [DEBUG] [Thread-80187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:12.999 [DEBUG] [Thread-80188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:14.900 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:14.902 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:30:27.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:30:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:30:28.026 [DEBUG] [Thread-80189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 30, 1), 2.23, 85.51, 0.0, 34.65, 7.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:30:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:30:01
2025-12-13T01:30:28.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:30:28.568 [DEBUG] [Thread-80190] [transport.py] [_log()] starting thread (client mode): 0xf57894e0
2025-12-13T01:30:28.568 [DEBUG] [Thread-80190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:30:28.583 [DEBUG] [Thread-80190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:30:28.583 [INFO] [Thread-80190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] client lang: <none>
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] server lang: <none>
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] kex follows: False
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] Compression: none
2025-12-13T01:30:28.587 [DEBUG] [Thread-80190] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:30:28.602 [DEBUG] [Thread-80190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:30:28.602 [DEBUG] [Thread-80190] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:30:28.603 [DEBUG] [Thread-80190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:30:28.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:30:28.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:30:28.605 [DEBUG] [Thread-80190] [transport.py] [_log()] userauth is OK
2025-12-13T01:30:28.605 [DEBUG] [Thread-80190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:30:28.605 [DEBUG] [Thread-80190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:30:28.605 [DEBUG] [Thread-80190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:30:28.605 [DEBUG] [Thread-80190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:30:28.623 [INFO] [Thread-80190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:30:28.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:30:29.225 [DEBUG] [Thread-80190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:30:29.225 [DEBUG] [Thread-80190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:30:29.226 [DEBUG] [Thread-80190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:30:29.266 [DEBUG] [Thread-80190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:30:29.266 [DEBUG] [Thread-80190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:30:29.270 [DEBUG] [Thread-80190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:30:29.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:30:29.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:30:29.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:30:29.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:30:29.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:30:29.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:30:29.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:30:29.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:30:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:30:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.979262 -999.00   +7.50  46.74     89   +5.90 1 3 2 3 1     0    0 1.47 -4.90 ..ESW 40.6 46.7 310.0 54.0 8.8 -5.2 8.6 -4.4 8.3 -6.5 8.7 -4.3
2025-12-13T01:30:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:30:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:30:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.979262
2025-12-13T01:30:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:30:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:30:29.294 [DEBUG] [Thread-80190] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:30:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:30:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:30:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:30:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:30:01', tmtdew=2.23, humidity=85.51, cloud=0.0, wind=34.65, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:30:08.237', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:28:00')
2025-12-13T01:30:29.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:30:29.391 [DEBUG] [Thread-80193] [transport.py] [_log()] starting thread (client mode): 0xf818a0b0
2025-12-13T01:30:29.391 [DEBUG] [Thread-80193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:30:29.410 [DEBUG] [Thread-80193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:30:29.410 [INFO] [Thread-80193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:30:29.418 [DEBUG] [Thread-80193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:30:29.418 [DEBUG] [Thread-80193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:30:29.418 [DEBUG] [Thread-80193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:30:29.418 [DEBUG] [Thread-80193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:30:29.418 [DEBUG] [Thread-80193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:30:29.418 [DEBUG] [Thread-80193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] client lang: <none>
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] server lang: <none>
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] kex follows: False
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] Compression: none
2025-12-13T01:30:29.419 [DEBUG] [Thread-80193] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:30:29.476 [DEBUG] [Thread-80193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:30:29.477 [DEBUG] [Thread-80193] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:30:29.477 [DEBUG] [Thread-80193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:30:29.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:30:29.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:30:29.533 [DEBUG] [Thread-80193] [transport.py] [_log()] userauth is OK
2025-12-13T01:30:29.533 [DEBUG] [Thread-80193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:30:29.534 [DEBUG] [Thread-80193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:30:29.534 [DEBUG] [Thread-80193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:30:29.534 [DEBUG] [Thread-80193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:30:29.562 [INFO] [Thread-80193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:30:29.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:30:29.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:30:30.019 [DEBUG] [Thread-80195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:30.389 [DEBUG] [Thread-80193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:30:30.389 [DEBUG] [Thread-80193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:30:30.437 [DEBUG] [Thread-80193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:30:30.437 [DEBUG] [Thread-80193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:30:30.446 [DEBUG] [Thread-80193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:30:30.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:30:30.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:30:30.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:30:30.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:30:30.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:30:30.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:30:30.480 [DEBUG] [Thread-80193] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:30:43.049 [DEBUG] [Thread-80196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:30:58.092 [DEBUG] [Thread-80197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:31:00.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:31:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:31:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 30, 33), 2.22, 85.54, 0.0, 33.01, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:31:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:30:33
2025-12-13T01:31:01.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:31:01.454 [DEBUG] [Thread-80198] [transport.py] [_log()] starting thread (client mode): 0xf5740a00
2025-12-13T01:31:01.454 [DEBUG] [Thread-80198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:31:01.477 [DEBUG] [Thread-80198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:31:01.477 [INFO] [Thread-80198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] client lang: <none>
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] server lang: <none>
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] kex follows: False
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] Compression: none
2025-12-13T01:31:01.478 [DEBUG] [Thread-80198] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:31:01.487 [DEBUG] [Thread-80198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:31:01.488 [DEBUG] [Thread-80198] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:31:01.488 [DEBUG] [Thread-80198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:31:01.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:31:01.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:31:01.490 [DEBUG] [Thread-80198] [transport.py] [_log()] userauth is OK
2025-12-13T01:31:01.490 [DEBUG] [Thread-80198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:31:01.490 [DEBUG] [Thread-80198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:31:01.490 [DEBUG] [Thread-80198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:31:01.490 [DEBUG] [Thread-80198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:31:01.508 [INFO] [Thread-80198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:31:01.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:31:02.218 [DEBUG] [Thread-80198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:31:02.218 [DEBUG] [Thread-80198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:31:02.218 [DEBUG] [Thread-80198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:31:02.259 [DEBUG] [Thread-80198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:31:02.259 [DEBUG] [Thread-80198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:31:02.262 [DEBUG] [Thread-80198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:31:02.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:31:02.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:31:02.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:31:02.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:31:02.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:31:02.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:31:02.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:31:02.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:31:02.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:31:02.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.979610 -999.00   +7.50  36.93     90   +6.00 1 3 2 3 1     0    0 1.49 -4.66 Z.ES. 41.2 36.9 314.6 49.7 8.8 -8.5 8.6 -7.1 8.3 -9.1 8.7 -7.6
2025-12-13T01:31:02.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:31:02.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:31:02.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.979610
2025-12-13T01:31:02.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:31:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:31:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:31:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:31:02.288 [DEBUG] [Thread-80198] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:31:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:31:02.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:30:33', tmtdew=2.22, humidity=85.54, cloud=0.0, wind=33.01, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:30:38.304', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:28:00')
2025-12-13T01:31:02.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:31:02.387 [DEBUG] [Thread-80201] [transport.py] [_log()] starting thread (client mode): 0xf81f2260
2025-12-13T01:31:02.387 [DEBUG] [Thread-80201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:31:02.402 [DEBUG] [Thread-80201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:31:02.402 [INFO] [Thread-80201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:31:02.410 [DEBUG] [Thread-80201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:31:02.410 [DEBUG] [Thread-80201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:31:02.410 [DEBUG] [Thread-80201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:31:02.410 [DEBUG] [Thread-80201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] client lang: <none>
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] server lang: <none>
2025-12-13T01:31:02.411 [DEBUG] [Thread-80201] [transport.py] [_log()] kex follows: False
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] Compression: none
2025-12-13T01:31:02.412 [DEBUG] [Thread-80201] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:31:02.469 [DEBUG] [Thread-80201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:31:02.469 [DEBUG] [Thread-80201] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:31:02.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:31:02.470 [DEBUG] [Thread-80201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:31:02.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:31:02.525 [DEBUG] [Thread-80201] [transport.py] [_log()] userauth is OK
2025-12-13T01:31:02.525 [DEBUG] [Thread-80201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:31:02.526 [DEBUG] [Thread-80201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:31:02.526 [DEBUG] [Thread-80201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:31:02.526 [DEBUG] [Thread-80201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:31:02.544 [INFO] [Thread-80201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:31:02.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:31:02.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:31:03.382 [DEBUG] [Thread-80201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:31:03.382 [DEBUG] [Thread-80201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:31:03.430 [DEBUG] [Thread-80201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:31:03.430 [DEBUG] [Thread-80201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:31:03.439 [DEBUG] [Thread-80201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:31:03.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:31:03.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:31:03.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:31:03.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:31:03.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:31:03.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:31:03.474 [DEBUG] [Thread-80201] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:31:13.118 [DEBUG] [Thread-80203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:15.106 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:15.107 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:28.165 [DEBUG] [Thread-80204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:30.117 [DEBUG] [Thread-80205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:31:33.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:31:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:31:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 31, 5), 2.21, 85.61, 0.0, 37.03, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:31:34.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:31:05
2025-12-13T01:31:34.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:31:34.469 [DEBUG] [Thread-80206] [transport.py] [_log()] starting thread (client mode): 0xf818ba60
2025-12-13T01:31:34.470 [DEBUG] [Thread-80206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:31:34.490 [DEBUG] [Thread-80206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:31:34.490 [INFO] [Thread-80206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:34.494 [DEBUG] [Thread-80206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] client lang: <none>
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] server lang: <none>
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] kex follows: False
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] Compression: none
2025-12-13T01:31:34.495 [DEBUG] [Thread-80206] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:31:34.515 [DEBUG] [Thread-80206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:31:34.516 [DEBUG] [Thread-80206] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:31:34.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:31:34.517 [DEBUG] [Thread-80206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:31:34.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:31:34.519 [DEBUG] [Thread-80206] [transport.py] [_log()] userauth is OK
2025-12-13T01:31:34.519 [DEBUG] [Thread-80206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:31:34.519 [DEBUG] [Thread-80206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:31:34.519 [DEBUG] [Thread-80206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:31:34.519 [DEBUG] [Thread-80206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:31:34.536 [INFO] [Thread-80206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:31:34.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:31:35.185 [DEBUG] [Thread-80206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:31:35.185 [DEBUG] [Thread-80206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:31:35.186 [DEBUG] [Thread-80206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:31:35.226 [DEBUG] [Thread-80206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:31:35.226 [DEBUG] [Thread-80206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:31:35.229 [DEBUG] [Thread-80206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:31:35.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:31:35.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:31:35.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:31:35.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:31:35.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:31:35.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:31:35.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:31:35.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:31:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:31:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.979610 -999.00   +7.50  36.93     90   +6.00 1 3 2 3 1     0    0 1.49 -4.66 Z.ES. 41.2 36.9 314.6 49.7 8.8 -8.5 8.6 -7.1 8.3 -9.1 8.7 -7.6
2025-12-13T01:31:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:31:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:31:35.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.979610
2025-12-13T01:31:35.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:31:35.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:31:35.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:31:35.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:31:35.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:31:35.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:31:05', tmtdew=2.21, humidity=85.61, cloud=0.0, wind=37.03, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:30:38.304', atlas_cloud=3, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:28:00')
2025-12-13T01:31:35.254 [DEBUG] [Thread-80206] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:31:35.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:31:35.349 [DEBUG] [Thread-80209] [transport.py] [_log()] starting thread (client mode): 0xf5743670
2025-12-13T01:31:35.349 [DEBUG] [Thread-80209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:31:35.363 [DEBUG] [Thread-80209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:31:35.363 [INFO] [Thread-80209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:31:35.370 [DEBUG] [Thread-80209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] client lang: <none>
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] server lang: <none>
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] kex follows: False
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] Compression: none
2025-12-13T01:31:35.371 [DEBUG] [Thread-80209] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:31:35.428 [DEBUG] [Thread-80209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:31:35.429 [DEBUG] [Thread-80209] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:31:35.429 [DEBUG] [Thread-80209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:31:35.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:31:35.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:31:35.484 [DEBUG] [Thread-80209] [transport.py] [_log()] userauth is OK
2025-12-13T01:31:35.485 [DEBUG] [Thread-80209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:31:35.485 [DEBUG] [Thread-80209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:31:35.485 [DEBUG] [Thread-80209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:31:35.485 [DEBUG] [Thread-80209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:31:35.504 [INFO] [Thread-80209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:31:35.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:31:35.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:31:36.323 [DEBUG] [Thread-80209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:31:36.323 [DEBUG] [Thread-80209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:31:36.371 [DEBUG] [Thread-80209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:31:36.371 [DEBUG] [Thread-80209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:31:36.380 [DEBUG] [Thread-80209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:31:36.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:31:36.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:31:36.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:31:36.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:31:36.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:31:36.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:31:36.415 [DEBUG] [Thread-80209] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:31:43.194 [DEBUG] [Thread-80211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:31:58.233 [DEBUG] [Thread-80212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:32:06.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:32:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:32:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 31, 37), 2.17, 86.07, 0.0, 36.7, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:32:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:31:37
2025-12-13T01:32:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:32:07.399 [DEBUG] [Thread-80213] [transport.py] [_log()] starting thread (client mode): 0xf5742770
2025-12-13T01:32:07.399 [DEBUG] [Thread-80213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:32:07.420 [DEBUG] [Thread-80213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:32:07.420 [INFO] [Thread-80213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] client lang: <none>
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] server lang: <none>
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] kex follows: False
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:32:07.424 [DEBUG] [Thread-80213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:32:07.425 [DEBUG] [Thread-80213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:32:07.425 [DEBUG] [Thread-80213] [transport.py] [_log()] Compression: none
2025-12-13T01:32:07.425 [DEBUG] [Thread-80213] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:32:07.442 [DEBUG] [Thread-80213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:32:07.442 [DEBUG] [Thread-80213] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:32:07.443 [DEBUG] [Thread-80213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:32:07.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:32:07.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:32:07.446 [DEBUG] [Thread-80213] [transport.py] [_log()] userauth is OK
2025-12-13T01:32:07.446 [DEBUG] [Thread-80213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:32:07.446 [DEBUG] [Thread-80213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:32:07.446 [DEBUG] [Thread-80213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:32:07.446 [DEBUG] [Thread-80213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:32:07.464 [INFO] [Thread-80213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:32:07.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:32:08.228 [DEBUG] [Thread-80213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:32:08.228 [DEBUG] [Thread-80213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:32:08.228 [DEBUG] [Thread-80213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:32:08.269 [DEBUG] [Thread-80213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:32:08.270 [DEBUG] [Thread-80213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:32:08.273 [DEBUG] [Thread-80213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:32:08.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:32:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:32:08.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:32:08.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:32:08.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:32:08.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:32:08.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:32:08.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:32:08.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:32:08.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.979957 -999.00   +7.50  47.16     90   +6.00 1 2 2 3 1     0    0 1.49 -4.80 Z.ES. 38.2 47.2 312.6 49.8 8.8 -12.3 8.6 -9.6 8.3 -16.4 8.7 -9.0
2025-12-13T01:32:08.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:32:08.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:32:08.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.979957
2025-12-13T01:32:08.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:32:08.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:32:08.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:32:08.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:32:08.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:32:08.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:31:37', tmtdew=2.17, humidity=86.07, cloud=0.0, wind=36.7, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:31:08.285', atlas_cloud=2, atlas_rain=1, zp_data=[2.51875, 1.3502500000000008, 1.950750000000001, nan, nan, nan, 1.7219999999999995, 2.1782500000000002, 2.248499999999999, 1.205, 2.1012499999999994, nan, 1.4249999999999998, 1.3002499999999992, 0.7079999999999993, 0.9709999999999992, 1.3672499999999994, 0.9299999999999997, 1.4859999999999989, nan, 0.9919999999999991, 0.8972499999999988, 0.5232500000000009, 0.6842500000000005, 0.8744999999999994, 0.9065000000000003, 1.50875, nan, nan, 0.7920000000000007, 0.35600000000000165, 0.32500000000000107, 0.48074999999999957], zp_timestamp='2025-12-12T23:28:00')
2025-12-13T01:32:08.302 [DEBUG] [Thread-80213] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:32:08.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:32:08.397 [DEBUG] [Thread-80216] [transport.py] [_log()] starting thread (client mode): 0xf81e4ca0
2025-12-13T01:32:08.397 [DEBUG] [Thread-80216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:32:08.412 [DEBUG] [Thread-80216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:32:08.412 [INFO] [Thread-80216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:32:08.419 [DEBUG] [Thread-80216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:32:08.419 [DEBUG] [Thread-80216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:32:08.419 [DEBUG] [Thread-80216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] client lang: <none>
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] server lang: <none>
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] kex follows: False
2025-12-13T01:32:08.420 [DEBUG] [Thread-80216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:32:08.421 [DEBUG] [Thread-80216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:32:08.421 [DEBUG] [Thread-80216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:32:08.421 [DEBUG] [Thread-80216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:32:08.421 [DEBUG] [Thread-80216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:32:08.421 [DEBUG] [Thread-80216] [transport.py] [_log()] Compression: none
2025-12-13T01:32:08.421 [DEBUG] [Thread-80216] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:32:08.475 [DEBUG] [Thread-80216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:32:08.476 [DEBUG] [Thread-80216] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:32:08.476 [DEBUG] [Thread-80216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:32:08.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:32:08.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:32:08.532 [DEBUG] [Thread-80216] [transport.py] [_log()] userauth is OK
2025-12-13T01:32:08.532 [DEBUG] [Thread-80216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:32:08.532 [DEBUG] [Thread-80216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:32:08.532 [DEBUG] [Thread-80216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:32:08.532 [DEBUG] [Thread-80216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:32:08.551 [INFO] [Thread-80216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:32:08.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:32:08.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:32:09.391 [DEBUG] [Thread-80216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:32:09.391 [DEBUG] [Thread-80216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:32:09.439 [DEBUG] [Thread-80216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:32:09.439 [DEBUG] [Thread-80216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:32:09.448 [DEBUG] [Thread-80216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:32:09.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:32:09.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:32:09.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:32:09.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:32:09.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:32:09.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:32:09.482 [DEBUG] [Thread-80216] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:32:13.262 [DEBUG] [Thread-80218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:15.312 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:15.314 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:28.307 [DEBUG] [Thread-80219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:30.184 [DEBUG] [Thread-80220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:32:39.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:32:39.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:32:40.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 32, 9), 2.16, 86.14, 0.0, 38.78, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:32:40.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:32:09
2025-12-13T01:32:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:32:40.476 [DEBUG] [Thread-80221] [transport.py] [_log()] starting thread (client mode): 0xfabc7790
2025-12-13T01:32:40.476 [DEBUG] [Thread-80221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:32:40.497 [DEBUG] [Thread-80221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:32:40.498 [INFO] [Thread-80221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] client lang: <none>
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] server lang: <none>
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] kex follows: False
2025-12-13T01:32:40.501 [DEBUG] [Thread-80221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:32:40.502 [DEBUG] [Thread-80221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:32:40.502 [DEBUG] [Thread-80221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:32:40.502 [DEBUG] [Thread-80221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:32:40.502 [DEBUG] [Thread-80221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:32:40.502 [DEBUG] [Thread-80221] [transport.py] [_log()] Compression: none
2025-12-13T01:32:40.502 [DEBUG] [Thread-80221] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:32:40.521 [DEBUG] [Thread-80221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:32:40.522 [DEBUG] [Thread-80221] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:32:40.522 [DEBUG] [Thread-80221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:32:40.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:32:40.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:32:40.524 [DEBUG] [Thread-80221] [transport.py] [_log()] userauth is OK
2025-12-13T01:32:40.524 [DEBUG] [Thread-80221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:32:40.524 [DEBUG] [Thread-80221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:32:40.525 [DEBUG] [Thread-80221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:32:40.525 [DEBUG] [Thread-80221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:32:40.560 [INFO] [Thread-80221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:32:40.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:32:41.168 [DEBUG] [Thread-80221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:32:41.169 [DEBUG] [Thread-80221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:32:41.169 [DEBUG] [Thread-80221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:32:41.210 [DEBUG] [Thread-80221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:32:41.210 [DEBUG] [Thread-80221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:32:41.213 [DEBUG] [Thread-80221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:32:41.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:32:41.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:32:41.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:32:41.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:32:41.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:32:41.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:32:41.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:32:41.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:32:41.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:32:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.980651 -999.00   +7.50  41.42     90   +6.00 1 2 2 3 1     0    0 1.49 -4.19 ZN.SW 36.3 41.4 314.8 48.4 8.7 -15.8 8.6 -16.1 8.3 -10.9 8.6 -15.9
2025-12-13T01:32:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:32:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:32:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.980651
2025-12-13T01:32:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:32:41.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:32:41.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:32:41.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:32:41.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:32:41.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:32:09', tmtdew=2.16, humidity=86.14, cloud=0.0, wind=38.78, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:32:08.246', atlas_cloud=2, atlas_rain=1, zp_data=[1.1347499999999995, 0.7202500000000001, 0.6032500000000001, 0.8065000000000007, nan, nan, nan, nan, 2.498499999999999, 0.7240000000000002, 0.8592499999999994, nan, nan, nan, nan, nan, nan, 1.3025000000000002, 2.144499999999999, nan, nan, nan, nan, nan, 1.1359999999999992, 1.4605000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T23:31:00')
2025-12-13T01:32:41.242 [DEBUG] [Thread-80221] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:32:41.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:32:41.340 [DEBUG] [Thread-80224] [transport.py] [_log()] starting thread (client mode): 0xf81f2170
2025-12-13T01:32:41.341 [DEBUG] [Thread-80224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:32:41.355 [DEBUG] [Thread-80224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:32:41.355 [INFO] [Thread-80224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:32:41.364 [DEBUG] [Thread-80224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:32:41.364 [DEBUG] [Thread-80224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:32:41.364 [DEBUG] [Thread-80224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] client lang: <none>
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] server lang: <none>
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] kex follows: False
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] Compression: none
2025-12-13T01:32:41.365 [DEBUG] [Thread-80224] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:32:41.420 [DEBUG] [Thread-80224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:32:41.420 [DEBUG] [Thread-80224] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:32:41.421 [DEBUG] [Thread-80224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:32:41.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:32:41.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:32:41.475 [DEBUG] [Thread-80224] [transport.py] [_log()] userauth is OK
2025-12-13T01:32:41.476 [DEBUG] [Thread-80224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:32:41.476 [DEBUG] [Thread-80224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:32:41.476 [DEBUG] [Thread-80224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:32:41.476 [DEBUG] [Thread-80224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:32:41.495 [INFO] [Thread-80224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:32:41.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:32:41.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:32:42.366 [DEBUG] [Thread-80224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:32:42.366 [DEBUG] [Thread-80224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:32:42.414 [DEBUG] [Thread-80224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:32:42.415 [DEBUG] [Thread-80224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:32:42.423 [DEBUG] [Thread-80224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:32:42.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:32:42.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:32:42.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:32:42.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:32:42.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:32:42.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:32:42.454 [DEBUG] [Thread-80224] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:32:43.333 [DEBUG] [Thread-80226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:32:58.374 [DEBUG] [Thread-80227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:12.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:33:12.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:33:12.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:33:13.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 32, 41), 2.14, 86.26, 0.0, 38.22, 7.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:33:13.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:32:41
2025-12-13T01:33:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:33:13.402 [DEBUG] [Thread-80228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:13.484 [DEBUG] [Thread-80229] [transport.py] [_log()] starting thread (client mode): 0xf57894e0
2025-12-13T01:33:13.485 [DEBUG] [Thread-80229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:33:13.507 [DEBUG] [Thread-80229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:33:13.507 [INFO] [Thread-80229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:33:13.510 [DEBUG] [Thread-80229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] client lang: <none>
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] server lang: <none>
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] kex follows: False
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] Compression: none
2025-12-13T01:33:13.511 [DEBUG] [Thread-80229] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:33:13.527 [DEBUG] [Thread-80229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:33:13.527 [DEBUG] [Thread-80229] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:33:13.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:33:13.527 [DEBUG] [Thread-80229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:33:13.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:33:13.528 [DEBUG] [Thread-80229] [transport.py] [_log()] userauth is OK
2025-12-13T01:33:13.528 [DEBUG] [Thread-80229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:33:13.528 [DEBUG] [Thread-80229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:33:13.528 [DEBUG] [Thread-80229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:33:13.528 [DEBUG] [Thread-80229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:33:13.538 [INFO] [Thread-80229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:33:13.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:33:14.361 [DEBUG] [Thread-80229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:33:14.361 [DEBUG] [Thread-80229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:33:14.361 [DEBUG] [Thread-80229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:33:14.402 [DEBUG] [Thread-80229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:33:14.402 [DEBUG] [Thread-80229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:33:14.404 [DEBUG] [Thread-80229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:33:14.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:33:14.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:33:14.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:33:14.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:33:14.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:33:14.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:33:14.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.980999 -999.00   +7.50  36.64     90   +6.00 1 3 2 3 1     0    0 1.47 -4.41 ZN.SW 36.5 36.6 314.0 50.2 8.7 -11.1 8.6 -11.4 8.2 -8.3 8.6 -11.9
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.980999
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:33:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:32:41', tmtdew=2.14, humidity=86.26, cloud=0.0, wind=38.22, temperature=7.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:32:38.314', atlas_cloud=3, atlas_rain=1, zp_data=[1.1347499999999995, 0.7202500000000001, 0.6032500000000001, 0.8065000000000007, nan, nan, nan, nan, 2.498499999999999, 0.7240000000000002, 0.8592499999999994, nan, nan, nan, nan, nan, nan, 1.3025000000000002, 2.144499999999999, nan, nan, nan, nan, nan, 1.1359999999999992, 1.4605000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T23:31:00')
2025-12-13T01:33:14.420 [DEBUG] [Thread-80229] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:33:14.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:33:14.506 [DEBUG] [Thread-80232] [transport.py] [_log()] starting thread (client mode): 0xf57036d0
2025-12-13T01:33:14.507 [DEBUG] [Thread-80232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:33:14.521 [DEBUG] [Thread-80232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:33:14.521 [INFO] [Thread-80232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] client lang: <none>
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] server lang: <none>
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] kex follows: False
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] Compression: none
2025-12-13T01:33:14.529 [DEBUG] [Thread-80232] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:33:14.585 [DEBUG] [Thread-80232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:33:14.586 [DEBUG] [Thread-80232] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:33:14.586 [DEBUG] [Thread-80232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:33:14.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:33:14.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:33:14.642 [DEBUG] [Thread-80232] [transport.py] [_log()] userauth is OK
2025-12-13T01:33:14.643 [DEBUG] [Thread-80232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:33:14.643 [DEBUG] [Thread-80232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:33:14.643 [DEBUG] [Thread-80232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:33:14.643 [DEBUG] [Thread-80232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:33:14.659 [INFO] [Thread-80232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:33:14.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:33:14.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:33:15.507 [DEBUG] [Thread-80232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:33:15.507 [DEBUG] [Thread-80232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:33:15.517 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:15.518 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:15.554 [DEBUG] [Thread-80232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:33:15.554 [DEBUG] [Thread-80232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:33:15.564 [DEBUG] [Thread-80232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:33:15.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:33:15.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:33:15.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:33:15.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:33:15.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:33:15.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:33:15.596 [DEBUG] [Thread-80232] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:33:28.430 [DEBUG] [Thread-80234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:30.264 [DEBUG] [Thread-80235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:43.473 [DEBUG] [Thread-80236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:33:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:33:45.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:33:45.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:33:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 33, 13), 2.13, 86.29, 0.0, 36.26, 7.67, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:33:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:33:13
2025-12-13T01:33:46.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:33:46.633 [DEBUG] [Thread-80237] [transport.py] [_log()] starting thread (client mode): 0xf818ba00
2025-12-13T01:33:46.634 [DEBUG] [Thread-80237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:33:46.654 [DEBUG] [Thread-80237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:33:46.654 [INFO] [Thread-80237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] client lang: <none>
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] server lang: <none>
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] kex follows: False
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:33:46.657 [DEBUG] [Thread-80237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:33:46.658 [DEBUG] [Thread-80237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:33:46.658 [DEBUG] [Thread-80237] [transport.py] [_log()] Compression: none
2025-12-13T01:33:46.658 [DEBUG] [Thread-80237] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:33:46.674 [DEBUG] [Thread-80237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:33:46.674 [DEBUG] [Thread-80237] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:33:46.674 [DEBUG] [Thread-80237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:33:46.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:33:46.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:33:46.677 [DEBUG] [Thread-80237] [transport.py] [_log()] userauth is OK
2025-12-13T01:33:46.677 [DEBUG] [Thread-80237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:33:46.677 [DEBUG] [Thread-80237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:33:46.677 [DEBUG] [Thread-80237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:33:46.677 [DEBUG] [Thread-80237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:33:46.686 [INFO] [Thread-80237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:33:46.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:33:47.312 [DEBUG] [Thread-80237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:33:47.312 [DEBUG] [Thread-80237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:33:47.312 [DEBUG] [Thread-80237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:33:47.353 [DEBUG] [Thread-80237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:33:47.353 [DEBUG] [Thread-80237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:33:47.355 [DEBUG] [Thread-80237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:33:47.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:33:47.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:33:47.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:33:47.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:33:47.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:33:47.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:33:47.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.981346 -999.00   +7.50  25.60     90   +6.10 1 2 1 3 1     0    0 1.43 -4.98 ZNEsw 35.7 25.6 316.0 41.4 8.8 -13.7 8.5 -11.0 8.3 -10.0 8.6 -11.3
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.981346
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:33:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:33:13', tmtdew=2.13, humidity=86.29, cloud=0.0, wind=36.26, temperature=7.67, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:33:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[1.1347499999999995, 0.7202500000000001, 0.6032500000000001, 0.8065000000000007, nan, nan, nan, nan, 2.498499999999999, 0.7240000000000002, 0.8592499999999994, nan, nan, nan, nan, nan, nan, 1.3025000000000002, 2.144499999999999, nan, nan, nan, nan, nan, 1.1359999999999992, 1.4605000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T23:31:00')
2025-12-13T01:33:47.376 [DEBUG] [Thread-80237] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:33:47.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:33:47.462 [DEBUG] [Thread-80240] [transport.py] [_log()] starting thread (client mode): 0xf818abc0
2025-12-13T01:33:47.462 [DEBUG] [Thread-80240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:33:47.477 [DEBUG] [Thread-80240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:33:47.477 [INFO] [Thread-80240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] client lang: <none>
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] server lang: <none>
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] kex follows: False
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] Compression: none
2025-12-13T01:33:47.484 [DEBUG] [Thread-80240] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:33:47.541 [DEBUG] [Thread-80240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:33:47.541 [DEBUG] [Thread-80240] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:33:47.541 [DEBUG] [Thread-80240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:33:47.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:33:47.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:33:47.598 [DEBUG] [Thread-80240] [transport.py] [_log()] userauth is OK
2025-12-13T01:33:47.598 [DEBUG] [Thread-80240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:33:47.598 [DEBUG] [Thread-80240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:33:47.598 [DEBUG] [Thread-80240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:33:47.598 [DEBUG] [Thread-80240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:33:47.612 [INFO] [Thread-80240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:33:47.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:33:47.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:33:48.453 [DEBUG] [Thread-80240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:33:48.453 [DEBUG] [Thread-80240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:33:48.501 [DEBUG] [Thread-80240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:33:48.501 [DEBUG] [Thread-80240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:33:48.509 [DEBUG] [Thread-80240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:33:48.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:33:48.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:33:48.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:33:48.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:33:48.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:33:48.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:33:48.540 [DEBUG] [Thread-80240] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:33:58.509 [DEBUG] [Thread-80242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:13.553 [DEBUG] [Thread-80243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:15.722 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:15.724 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:34:18.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:34:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:34:19.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 33, 45), 2.12, 86.37, 0.0, 34.79, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:34:19.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:33:45
2025-12-13T01:34:19.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:34:19.578 [DEBUG] [Thread-80244] [transport.py] [_log()] starting thread (client mode): 0xf578aef0
2025-12-13T01:34:19.578 [DEBUG] [Thread-80244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:34:19.599 [DEBUG] [Thread-80244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:34:19.599 [INFO] [Thread-80244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] client lang: <none>
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] server lang: <none>
2025-12-13T01:34:19.601 [DEBUG] [Thread-80244] [transport.py] [_log()] kex follows: False
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] Compression: none
2025-12-13T01:34:19.602 [DEBUG] [Thread-80244] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:34:19.621 [DEBUG] [Thread-80244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:34:19.621 [DEBUG] [Thread-80244] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:34:19.621 [DEBUG] [Thread-80244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:34:19.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:34:19.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:34:19.622 [DEBUG] [Thread-80244] [transport.py] [_log()] userauth is OK
2025-12-13T01:34:19.622 [DEBUG] [Thread-80244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:34:19.622 [DEBUG] [Thread-80244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:34:19.622 [DEBUG] [Thread-80244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:34:19.622 [DEBUG] [Thread-80244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:34:19.642 [INFO] [Thread-80244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:34:19.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:34:20.423 [DEBUG] [Thread-80244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:34:20.423 [DEBUG] [Thread-80244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:34:20.423 [DEBUG] [Thread-80244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:34:20.465 [DEBUG] [Thread-80244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:34:20.465 [DEBUG] [Thread-80244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:34:20.467 [DEBUG] [Thread-80244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:34:20.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:34:20.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:34:20.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:34:20.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:34:20.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:34:20.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:34:20.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:34:20.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:34:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:34:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.981693 -999.00   +7.50  39.69     90   +6.00 1 3 2 3 1     0    0 1.48 -4.92 ZNEsw 39.7 39.7 312.2 48.6 8.8 -9.2 8.5 -10.4 8.3 -6.8 8.6 -9.5
2025-12-13T01:34:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:34:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:34:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.981693
2025-12-13T01:34:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:34:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:34:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:34:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:34:20.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:34:20.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:33:45', tmtdew=2.12, humidity=86.37, cloud=0.0, wind=34.79, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:33:38.275', atlas_cloud=3, atlas_rain=1, zp_data=[1.1347499999999995, 0.7202500000000001, 0.6032500000000001, 0.8065000000000007, nan, nan, nan, nan, 2.498499999999999, 0.7240000000000002, 0.8592499999999994, nan, nan, nan, nan, nan, nan, 1.3025000000000002, 2.144499999999999, nan, nan, nan, nan, nan, 1.1359999999999992, 1.4605000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T23:31:00')
2025-12-13T01:34:20.496 [DEBUG] [Thread-80244] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:34:20.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:34:20.594 [DEBUG] [Thread-80247] [transport.py] [_log()] starting thread (client mode): 0xf81f2740
2025-12-13T01:34:20.594 [DEBUG] [Thread-80247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:34:20.608 [DEBUG] [Thread-80247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:34:20.609 [INFO] [Thread-80247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:34:20.616 [DEBUG] [Thread-80247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:34:20.616 [DEBUG] [Thread-80247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] client lang: <none>
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] server lang: <none>
2025-12-13T01:34:20.617 [DEBUG] [Thread-80247] [transport.py] [_log()] kex follows: False
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] Compression: none
2025-12-13T01:34:20.618 [DEBUG] [Thread-80247] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:34:20.672 [DEBUG] [Thread-80247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:34:20.673 [DEBUG] [Thread-80247] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:34:20.673 [DEBUG] [Thread-80247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:34:20.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:34:20.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:34:20.730 [DEBUG] [Thread-80247] [transport.py] [_log()] userauth is OK
2025-12-13T01:34:20.730 [DEBUG] [Thread-80247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:34:20.730 [DEBUG] [Thread-80247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:34:20.730 [DEBUG] [Thread-80247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:34:20.730 [DEBUG] [Thread-80247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:34:20.744 [INFO] [Thread-80247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:34:20.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:34:20.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:34:21.573 [DEBUG] [Thread-80247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:34:21.574 [DEBUG] [Thread-80247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:34:21.622 [DEBUG] [Thread-80247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:34:21.622 [DEBUG] [Thread-80247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:34:21.631 [DEBUG] [Thread-80247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:34:21.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:34:21.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:34:21.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:34:21.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:34:21.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:34:21.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:34:21.666 [DEBUG] [Thread-80247] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:34:28.579 [DEBUG] [Thread-80249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:30.334 [DEBUG] [Thread-80250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:43.615 [DEBUG] [Thread-80251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:34:51.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:34:51.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:34:51.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:34:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 34, 17), 2.11, 86.42, 0.0, 33.75, 7.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:34:52.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:34:17
2025-12-13T01:34:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:34:52.658 [DEBUG] [Thread-80252] [transport.py] [_log()] starting thread (client mode): 0xf575ecb0
2025-12-13T01:34:52.658 [DEBUG] [Thread-80252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:34:52.679 [DEBUG] [Thread-80252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:34:52.679 [INFO] [Thread-80252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] client lang: <none>
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] server lang: <none>
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] kex follows: False
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] Compression: none
2025-12-13T01:34:52.682 [DEBUG] [Thread-80252] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:34:52.698 [DEBUG] [Thread-80252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:34:52.698 [DEBUG] [Thread-80252] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:34:52.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:34:52.698 [DEBUG] [Thread-80252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:34:52.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:34:52.700 [DEBUG] [Thread-80252] [transport.py] [_log()] userauth is OK
2025-12-13T01:34:52.700 [DEBUG] [Thread-80252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:34:52.700 [DEBUG] [Thread-80252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:34:52.700 [DEBUG] [Thread-80252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:34:52.700 [DEBUG] [Thread-80252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:34:52.719 [INFO] [Thread-80252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:34:52.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:34:53.371 [DEBUG] [Thread-80252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:34:53.372 [DEBUG] [Thread-80252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:34:53.372 [DEBUG] [Thread-80252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:34:53.412 [DEBUG] [Thread-80252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:34:53.412 [DEBUG] [Thread-80252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:34:53.415 [DEBUG] [Thread-80252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:34:53.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:34:53.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:34:53.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:34:53.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:34:53.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:34:53.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:34:53.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:34:53.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:34:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:34:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.982040 -999.00   +7.60  35.91     90   +6.10 1 3 2 3 1     0    0 1.42 -5.46 ZNEs. 34.9 35.9 312.2 46.5 8.8 -8.3 8.6 -7.9 8.3 -6.5 8.6 -6.2
2025-12-13T01:34:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:34:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:34:53.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.982040
2025-12-13T01:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:34:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:34:17', tmtdew=2.11, humidity=86.42, cloud=0.0, wind=33.75, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:34:08.256', atlas_cloud=3, atlas_rain=1, zp_data=[1.1347499999999995, 0.7202500000000001, 0.6032500000000001, 0.8065000000000007, nan, nan, nan, nan, 2.498499999999999, 0.7240000000000002, 0.8592499999999994, nan, nan, nan, nan, nan, nan, 1.3025000000000002, 2.144499999999999, nan, nan, nan, nan, nan, 1.1359999999999992, 1.4605000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T23:31:00')
2025-12-13T01:34:53.441 [DEBUG] [Thread-80252] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:34:53.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:34:53.538 [DEBUG] [Thread-80255] [transport.py] [_log()] starting thread (client mode): 0xf5701db0
2025-12-13T01:34:53.538 [DEBUG] [Thread-80255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:34:53.553 [DEBUG] [Thread-80255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:34:53.553 [INFO] [Thread-80255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:34:53.560 [DEBUG] [Thread-80255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:34:53.560 [DEBUG] [Thread-80255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:34:53.560 [DEBUG] [Thread-80255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] client lang: <none>
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] server lang: <none>
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] kex follows: False
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] Compression: none
2025-12-13T01:34:53.561 [DEBUG] [Thread-80255] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:34:53.618 [DEBUG] [Thread-80255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:34:53.618 [DEBUG] [Thread-80255] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:34:53.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:34:53.619 [DEBUG] [Thread-80255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:34:53.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:34:53.674 [DEBUG] [Thread-80255] [transport.py] [_log()] userauth is OK
2025-12-13T01:34:53.674 [DEBUG] [Thread-80255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:34:53.674 [DEBUG] [Thread-80255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:34:53.674 [DEBUG] [Thread-80255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:34:53.674 [DEBUG] [Thread-80255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:34:53.695 [INFO] [Thread-80255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:34:53.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:34:53.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:34:54.580 [DEBUG] [Thread-80255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:34:54.581 [DEBUG] [Thread-80255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:34:54.629 [DEBUG] [Thread-80255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:34:54.629 [DEBUG] [Thread-80255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:34:54.638 [DEBUG] [Thread-80255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:34:54.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:34:54.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:34:54.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:34:54.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:34:54.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:34:54.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:34:54.672 [DEBUG] [Thread-80255] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:34:58.646 [DEBUG] [Thread-80257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:13.687 [DEBUG] [Thread-80258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:15.928 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:15.929 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:35:24.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:35:24.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:35:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 35, 21), 2.09, 86.5, 0.0, 35.06, 7.64, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:35:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:35:21
2025-12-13T01:35:25.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:35:25.666 [DEBUG] [Thread-80259] [transport.py] [_log()] starting thread (client mode): 0xf575e0b0
2025-12-13T01:35:25.666 [DEBUG] [Thread-80259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:35:25.688 [DEBUG] [Thread-80259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:35:25.688 [INFO] [Thread-80259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] client lang: <none>
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] server lang: <none>
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] kex follows: False
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] Compression: none
2025-12-13T01:35:25.691 [DEBUG] [Thread-80259] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:35:25.707 [DEBUG] [Thread-80259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:35:25.708 [DEBUG] [Thread-80259] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:35:25.708 [DEBUG] [Thread-80259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:35:25.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:35:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:35:25.710 [DEBUG] [Thread-80259] [transport.py] [_log()] userauth is OK
2025-12-13T01:35:25.710 [DEBUG] [Thread-80259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:35:25.710 [DEBUG] [Thread-80259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:35:25.710 [DEBUG] [Thread-80259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:35:25.710 [DEBUG] [Thread-80259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:35:25.734 [INFO] [Thread-80259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:35:25.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:35:26.564 [DEBUG] [Thread-80259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:35:26.565 [DEBUG] [Thread-80259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:35:26.565 [DEBUG] [Thread-80259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:35:26.606 [DEBUG] [Thread-80259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:35:26.606 [DEBUG] [Thread-80259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:35:26.609 [DEBUG] [Thread-80259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:35:26.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:35:26.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:35:26.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:35:26.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:35:26.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:35:26.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:35:26.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:35:26.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:35:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:35:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.982387 -999.00   +7.60  32.28     90   +6.10 1 3 2 3 1     0    0 1.44 -4.99 ZNEs. 28.7 32.3 315.0 41.8 -999.0 -999.0 8.6 -7.4 8.3 -5.3 8.7 -7.4
2025-12-13T01:35:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:35:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:35:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.982387
2025-12-13T01:35:26.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:35:26.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:35:26.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:35:26.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:35:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:35:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:35:21', tmtdew=2.09, humidity=86.5, cloud=0.0, wind=35.06, temperature=7.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:34:38.237', atlas_cloud=3, atlas_rain=1, zp_data=[1.1347499999999995, 0.7202500000000001, 0.6032500000000001, 0.8065000000000007, nan, nan, nan, nan, 2.498499999999999, 0.7240000000000002, 0.8592499999999994, nan, nan, nan, nan, nan, nan, 1.3025000000000002, 2.144499999999999, nan, nan, nan, nan, nan, 1.1359999999999992, 1.4605000000000006, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-12T23:31:00')
2025-12-13T01:35:26.640 [DEBUG] [Thread-80259] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:35:26.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:35:26.736 [DEBUG] [Thread-80262] [transport.py] [_log()] starting thread (client mode): 0xf575c130
2025-12-13T01:35:26.736 [DEBUG] [Thread-80262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:35:26.751 [DEBUG] [Thread-80262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:35:26.751 [INFO] [Thread-80262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:35:26.758 [DEBUG] [Thread-80262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] client lang: <none>
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] server lang: <none>
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] kex follows: False
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] Compression: none
2025-12-13T01:35:26.759 [DEBUG] [Thread-80262] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:35:26.817 [DEBUG] [Thread-80262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:35:26.818 [DEBUG] [Thread-80262] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:35:26.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:35:26.819 [DEBUG] [Thread-80262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:35:26.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:35:26.877 [DEBUG] [Thread-80262] [transport.py] [_log()] userauth is OK
2025-12-13T01:35:26.878 [DEBUG] [Thread-80262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:35:26.878 [DEBUG] [Thread-80262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:35:26.878 [DEBUG] [Thread-80262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:35:26.878 [DEBUG] [Thread-80262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:35:26.896 [INFO] [Thread-80262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:35:26.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:35:26.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:35:27.778 [DEBUG] [Thread-80262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:35:27.778 [DEBUG] [Thread-80262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:35:27.827 [DEBUG] [Thread-80262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:35:27.827 [DEBUG] [Thread-80262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:35:27.836 [DEBUG] [Thread-80262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:35:27.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:35:27.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:35:27.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:35:27.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:35:27.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:35:27.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:35:27.873 [DEBUG] [Thread-80262] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:35:28.716 [DEBUG] [Thread-80264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:30.409 [DEBUG] [Thread-80265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:43.761 [DEBUG] [Thread-80266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:57.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:35:57.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:35:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:35:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 35, 53), 2.08, 86.57, 0.0, 35.75, 7.67, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:35:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:35:53
2025-12-13T01:35:58.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:35:58.787 [DEBUG] [Thread-80267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:35:58.869 [DEBUG] [Thread-80268] [transport.py] [_log()] starting thread (client mode): 0xf578a8c0
2025-12-13T01:35:58.869 [DEBUG] [Thread-80268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:35:58.888 [DEBUG] [Thread-80268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:35:58.888 [INFO] [Thread-80268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:35:58.891 [DEBUG] [Thread-80268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] client lang: <none>
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] server lang: <none>
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] kex follows: False
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] Compression: none
2025-12-13T01:35:58.892 [DEBUG] [Thread-80268] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:35:58.910 [DEBUG] [Thread-80268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:35:58.911 [DEBUG] [Thread-80268] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:35:58.911 [DEBUG] [Thread-80268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:35:58.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:35:58.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:35:58.913 [DEBUG] [Thread-80268] [transport.py] [_log()] userauth is OK
2025-12-13T01:35:58.913 [DEBUG] [Thread-80268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:35:58.913 [DEBUG] [Thread-80268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:35:58.914 [DEBUG] [Thread-80268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:35:58.914 [DEBUG] [Thread-80268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:35:58.938 [INFO] [Thread-80268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:35:58.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:35:59.600 [DEBUG] [Thread-80268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:35:59.600 [DEBUG] [Thread-80268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:35:59.601 [DEBUG] [Thread-80268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:35:59.643 [DEBUG] [Thread-80268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:35:59.643 [DEBUG] [Thread-80268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:35:59.646 [DEBUG] [Thread-80268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:35:59.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:35:59.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:35:59.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:35:59.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:35:59.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:35:59.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:35:59.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:35:59.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:35:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:35:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.983082 -999.00   +7.60  33.97     89   +6.10 1 3 2 3 1     0    0 1.44 -4.65 ZNESW 36.8 34.0 314.2 49.6 8.8 -5.7 8.7 -4.9 8.4 -3.3 8.7 -5.1
2025-12-13T01:35:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:35:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:35:59.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.983082
2025-12-13T01:35:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:35:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:35:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:35:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:35:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:35:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:35:53', tmtdew=2.08, humidity=86.57, cloud=0.0, wind=35.75, temperature=7.67, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:35:38.285', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:34:00')
2025-12-13T01:35:59.671 [DEBUG] [Thread-80268] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:35:59.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:35:59.765 [DEBUG] [Thread-80271] [transport.py] [_log()] starting thread (client mode): 0xf81e73a0
2025-12-13T01:35:59.765 [DEBUG] [Thread-80271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:35:59.780 [DEBUG] [Thread-80271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:35:59.780 [INFO] [Thread-80271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:35:59.787 [DEBUG] [Thread-80271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] client lang: <none>
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] server lang: <none>
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] kex follows: False
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] Compression: none
2025-12-13T01:35:59.788 [DEBUG] [Thread-80271] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:35:59.848 [DEBUG] [Thread-80271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:35:59.849 [DEBUG] [Thread-80271] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:35:59.849 [DEBUG] [Thread-80271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:35:59.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:35:59.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:35:59.905 [DEBUG] [Thread-80271] [transport.py] [_log()] userauth is OK
2025-12-13T01:35:59.905 [DEBUG] [Thread-80271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:35:59.905 [DEBUG] [Thread-80271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:35:59.905 [DEBUG] [Thread-80271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:35:59.905 [DEBUG] [Thread-80271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:35:59.924 [INFO] [Thread-80271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:35:59.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:35:59.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:36:00.765 [DEBUG] [Thread-80271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:36:00.765 [DEBUG] [Thread-80271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:36:00.813 [DEBUG] [Thread-80271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:36:00.813 [DEBUG] [Thread-80271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:36:00.822 [DEBUG] [Thread-80271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:36:00.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:36: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')
2025-12-13T01:36:00.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:36:00.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:36:00.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:36:00.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:36:00.857 [DEBUG] [Thread-80271] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:36:13.811 [DEBUG] [Thread-80273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:36:16.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:36:16.133 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:36:28.866 [DEBUG] [Thread-80274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:36:30.487 [DEBUG] [Thread-80275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:36:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:36:30.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:36:30.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:36:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 36, 25), 2.08, 86.6, 0.0, 35.83, 7.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:36:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:36:25
2025-12-13T01:36:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:36:31.853 [DEBUG] [Thread-80276] [transport.py] [_log()] starting thread (client mode): 0xf5743670
2025-12-13T01:36:31.853 [DEBUG] [Thread-80276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:36:31.874 [DEBUG] [Thread-80276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:36:31.874 [INFO] [Thread-80276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] client lang: <none>
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] server lang: <none>
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] kex follows: False
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] Compression: none
2025-12-13T01:36:31.877 [DEBUG] [Thread-80276] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:36:31.895 [DEBUG] [Thread-80276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:36:31.896 [DEBUG] [Thread-80276] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:36:31.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:36:31.897 [DEBUG] [Thread-80276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:36:31.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:36:31.899 [DEBUG] [Thread-80276] [transport.py] [_log()] userauth is OK
2025-12-13T01:36:31.899 [DEBUG] [Thread-80276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:36:31.899 [DEBUG] [Thread-80276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:36:31.899 [DEBUG] [Thread-80276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:36:31.899 [DEBUG] [Thread-80276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:36:31.933 [INFO] [Thread-80276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:36:31.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:36:32.664 [DEBUG] [Thread-80276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:36:32.665 [DEBUG] [Thread-80276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:36:32.665 [DEBUG] [Thread-80276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:36:32.707 [DEBUG] [Thread-80276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:36:32.707 [DEBUG] [Thread-80276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:36:32.709 [DEBUG] [Thread-80276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:36:32.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:36:32.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:36:32.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:36:32.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:36:32.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:36:32.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:36:32.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:36:32.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:36:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:36:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.983429 -999.00   +7.70  33.59     89   +6.10 1 3 2 3 1     0    0 1.42 -4.11 ZNESW 29.2 33.6 313.2 42.4 8.9 -4.5 8.7 -3.9 8.4 -3.8 8.8 -3.9
2025-12-13T01:36:32.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:36:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:36:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.983429
2025-12-13T01:36:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:36:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:36:32.723 [DEBUG] [Thread-80276] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:36:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:36:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:36:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:36:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:36:25', tmtdew=2.08, humidity=86.6, cloud=0.0, wind=35.83, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:36:08.266', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:34:00')
2025-12-13T01:36:32.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:36:43.893 [DEBUG] [Thread-80279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:36:58.938 [DEBUG] [Thread-80280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:13.968 [DEBUG] [Thread-80281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:16.337 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:16.339 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:28.999 [DEBUG] [Thread-80282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:30.560 [DEBUG] [Thread-80283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:44.026 [DEBUG] [Thread-80284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:37:59.056 [DEBUG] [Thread-80285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:14.087 [DEBUG] [Thread-80286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:16.542 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:16.543 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:29.116 [DEBUG] [Thread-80287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:30.633 [DEBUG] [Thread-80288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:44.150 [DEBUG] [Thread-80289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:38:44.842 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-13T01:38:59.177 [DEBUG] [Thread-80290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:14.205 [DEBUG] [Thread-80291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:14.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:39:14.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:39:14.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:39:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 39, 5), 2.18, 85.81, 0.0, 45.1, 7.79, 1, 1, 0, 2, 1, 0),)
2025-12-13T01:39:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:39:05
2025-12-13T01:39:15.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:39:15.834 [DEBUG] [Thread-80292] [transport.py] [_log()] starting thread (client mode): 0xf5789180
2025-12-13T01:39:15.834 [DEBUG] [Thread-80292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:39:15.853 [DEBUG] [Thread-80292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:39:15.853 [INFO] [Thread-80292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:15.856 [DEBUG] [Thread-80292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] client lang: <none>
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] server lang: <none>
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] kex follows: False
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] Compression: none
2025-12-13T01:39:15.857 [DEBUG] [Thread-80292] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:39:15.873 [DEBUG] [Thread-80292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:39:15.873 [DEBUG] [Thread-80292] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:39:15.874 [DEBUG] [Thread-80292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:39:15.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:39:15.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:39:15.876 [DEBUG] [Thread-80292] [transport.py] [_log()] userauth is OK
2025-12-13T01:39:15.876 [DEBUG] [Thread-80292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:39:15.876 [DEBUG] [Thread-80292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:39:15.876 [DEBUG] [Thread-80292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:39:15.876 [DEBUG] [Thread-80292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:39:15.891 [INFO] [Thread-80292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:39:15.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:39:16.515 [DEBUG] [Thread-80292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:39:16.515 [DEBUG] [Thread-80292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:39:16.515 [DEBUG] [Thread-80292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:39:16.556 [DEBUG] [Thread-80292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:39:16.556 [DEBUG] [Thread-80292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:39:16.559 [DEBUG] [Thread-80292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:39:16.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:39:16.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:39:16.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:39:16.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:39:16.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:39:16.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:39:16.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:39:16.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:39:16.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:39:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.985165 -999.00   +7.60  41.18     89   +6.00 1 3 2 3 1     0    0 1.56 -1.77 ----- 39.0 41.2 314.4 47.8 8.9 -3.9 8.8 -3.8 8.4 -3.4 8.9 -3.5
2025-12-13T01:39:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:39:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:39:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.985165
2025-12-13T01:39:16.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:39:16.583 [DEBUG] [Thread-80292] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:39:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:39:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:39:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:39:16.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:39:16.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:39:05', tmtdew=2.18, humidity=85.81, cloud=0.0, wind=45.1, temperature=7.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:38:38.256', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:39:16.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:39:16.679 [DEBUG] [Thread-80295] [transport.py] [_log()] starting thread (client mode): 0xf5772dd0
2025-12-13T01:39:16.679 [DEBUG] [Thread-80295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:39:16.694 [DEBUG] [Thread-80295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:39:16.694 [INFO] [Thread-80295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] client lang: <none>
2025-12-13T01:39:16.702 [DEBUG] [Thread-80295] [transport.py] [_log()] server lang: <none>
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] kex follows: False
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] Compression: none
2025-12-13T01:39:16.703 [DEBUG] [Thread-80295] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:39:16.748 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:16.750 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:16.762 [DEBUG] [Thread-80295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:39:16.762 [DEBUG] [Thread-80295] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:39:16.763 [DEBUG] [Thread-80295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:39:16.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:39:16.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:39:16.818 [DEBUG] [Thread-80295] [transport.py] [_log()] userauth is OK
2025-12-13T01:39:16.818 [DEBUG] [Thread-80295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:39:16.818 [DEBUG] [Thread-80295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:39:16.818 [DEBUG] [Thread-80295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:39:16.818 [DEBUG] [Thread-80295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:39:16.836 [INFO] [Thread-80295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:39:16.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:39:16.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:39:17.647 [DEBUG] [Thread-80295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:39:17.647 [DEBUG] [Thread-80295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:39:17.695 [DEBUG] [Thread-80295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:39:17.695 [DEBUG] [Thread-80295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:39:17.704 [DEBUG] [Thread-80295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:39:17.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:39: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')
2025-12-13T01:39:17.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:39:17.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:39:17.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:39:17.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:39:17.738 [DEBUG] [Thread-80295] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:39:29.235 [DEBUG] [Thread-80297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:30.705 [DEBUG] [Thread-80298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:44.286 [DEBUG] [Thread-80299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:39:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:39:47.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:39:47.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:39:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 39, 37), 2.17, 85.84, 0.0, 29.46, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:39:48.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:39:37
2025-12-13T01:39:48.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:39:48.725 [DEBUG] [Thread-80300] [transport.py] [_log()] starting thread (client mode): 0xf578a3e0
2025-12-13T01:39:48.725 [DEBUG] [Thread-80300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:39:48.747 [DEBUG] [Thread-80300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:39:48.747 [INFO] [Thread-80300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] client lang: <none>
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] server lang: <none>
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] kex follows: False
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:39:48.750 [DEBUG] [Thread-80300] [transport.py] [_log()] Compression: none
2025-12-13T01:39:48.751 [DEBUG] [Thread-80300] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:39:48.767 [DEBUG] [Thread-80300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:39:48.767 [DEBUG] [Thread-80300] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:39:48.768 [DEBUG] [Thread-80300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:39:48.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:39:48.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:39:48.770 [DEBUG] [Thread-80300] [transport.py] [_log()] userauth is OK
2025-12-13T01:39:48.770 [DEBUG] [Thread-80300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:39:48.770 [DEBUG] [Thread-80300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:39:48.770 [DEBUG] [Thread-80300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:39:48.770 [DEBUG] [Thread-80300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:39:48.788 [INFO] [Thread-80300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:39:48.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:39:49.421 [DEBUG] [Thread-80300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:39:49.421 [DEBUG] [Thread-80300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:39:49.421 [DEBUG] [Thread-80300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:39:49.462 [DEBUG] [Thread-80300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:39:49.462 [DEBUG] [Thread-80300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:39:49.465 [DEBUG] [Thread-80300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:39:49.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:39:49.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:39:49.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:39:49.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:39:49.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:39:49.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:39:49.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:39:49.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:39:49.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:39:49.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.985860 -999.00   +7.60  40.98     89   +6.00 1 3 2 3 1     0    0 1.52 -1.76 z.... 29.7 41.0 313.8 48.8 9.0 -3.3 8.7 -2.8 8.6 -3.2 8.9 -3.0
2025-12-13T01:39:49.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:39:49.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:39:49.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.985860
2025-12-13T01:39:49.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:39:49.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:39:49.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:39:49.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:39:49.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:39:49.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:39:37', tmtdew=2.17, humidity=85.84, cloud=0.0, wind=29.46, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:39:38.304', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:39:49.490 [DEBUG] [Thread-80300] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:39:49.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:39:49.586 [DEBUG] [Thread-80303] [transport.py] [_log()] starting thread (client mode): 0xf570cbb0
2025-12-13T01:39:49.587 [DEBUG] [Thread-80303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:39:49.601 [DEBUG] [Thread-80303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:39:49.601 [INFO] [Thread-80303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] client lang: <none>
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] server lang: <none>
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] kex follows: False
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:39:49.609 [DEBUG] [Thread-80303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:39:49.610 [DEBUG] [Thread-80303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:39:49.610 [DEBUG] [Thread-80303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:39:49.610 [DEBUG] [Thread-80303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:39:49.610 [DEBUG] [Thread-80303] [transport.py] [_log()] Compression: none
2025-12-13T01:39:49.610 [DEBUG] [Thread-80303] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:39:49.666 [DEBUG] [Thread-80303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:39:49.667 [DEBUG] [Thread-80303] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:39:49.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:39:49.668 [DEBUG] [Thread-80303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:39:49.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:39:49.723 [DEBUG] [Thread-80303] [transport.py] [_log()] userauth is OK
2025-12-13T01:39:49.723 [DEBUG] [Thread-80303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:39:49.723 [DEBUG] [Thread-80303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:39:49.723 [DEBUG] [Thread-80303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:39:49.723 [DEBUG] [Thread-80303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:39:49.743 [INFO] [Thread-80303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:39:49.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:39:49.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:39:50.580 [DEBUG] [Thread-80303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:39:50.581 [DEBUG] [Thread-80303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:39:50.629 [DEBUG] [Thread-80303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:39:50.629 [DEBUG] [Thread-80303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:39:50.638 [DEBUG] [Thread-80303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:39:50.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:39:50.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:39:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:39:50.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:39:50.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:39:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:39:50.673 [DEBUG] [Thread-80303] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:39:59.314 [DEBUG] [Thread-80305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:14.358 [DEBUG] [Thread-80306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:16.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:16.969 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:20.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:40:20.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:40:20.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:40:21.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 40, 9), 2.16, 85.94, 0.0, 31.55, 7.79, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:40:21.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:40:09
2025-12-13T01:40:21.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:40:21.711 [DEBUG] [Thread-80307] [transport.py] [_log()] starting thread (client mode): 0xf5772980
2025-12-13T01:40:21.711 [DEBUG] [Thread-80307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:40:21.731 [DEBUG] [Thread-80307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:40:21.731 [INFO] [Thread-80307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] client lang: <none>
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] server lang: <none>
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] kex follows: False
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] Compression: none
2025-12-13T01:40:21.735 [DEBUG] [Thread-80307] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:40:21.749 [DEBUG] [Thread-80307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:40:21.749 [DEBUG] [Thread-80307] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:40:21.749 [DEBUG] [Thread-80307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:40:21.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:40:21.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:40:21.750 [DEBUG] [Thread-80307] [transport.py] [_log()] userauth is OK
2025-12-13T01:40:21.750 [DEBUG] [Thread-80307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:40:21.750 [DEBUG] [Thread-80307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:40:21.750 [DEBUG] [Thread-80307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:40:21.750 [DEBUG] [Thread-80307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:40:21.767 [INFO] [Thread-80307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:40:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:40:22.421 [DEBUG] [Thread-80307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:40:22.422 [DEBUG] [Thread-80307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:40:22.422 [DEBUG] [Thread-80307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:40:22.463 [DEBUG] [Thread-80307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:40:22.463 [DEBUG] [Thread-80307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:40:22.466 [DEBUG] [Thread-80307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:40:22.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:40:22.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:40:22.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:40:22.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:40:22.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:40:22.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:40:22.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:40:22.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:40:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:40:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.986207 -999.00   +7.60  37.90     89   +6.10 1 3 2 3 1     0    0 1.53 -2.45 z.... 34.1 37.9 309.6 45.5 9.0 -3.9 8.8 -3.4 8.6 -3.2 8.9 -3.8
2025-12-13T01:40:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:40:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:40:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.986207
2025-12-13T01:40:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:40:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:40:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:40:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:40:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:40:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:40:09', tmtdew=2.16, humidity=85.94, cloud=0.0, wind=31.55, temperature=7.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:40:08.285', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:40:22.493 [DEBUG] [Thread-80307] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:40:22.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:40:22.590 [DEBUG] [Thread-80310] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-13T01:40:22.591 [DEBUG] [Thread-80310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:40:22.605 [DEBUG] [Thread-80310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:40:22.605 [INFO] [Thread-80310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:40:22.612 [DEBUG] [Thread-80310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:22.613 [DEBUG] [Thread-80310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] client lang: <none>
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] server lang: <none>
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] kex follows: False
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:40:22.614 [DEBUG] [Thread-80310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:40:22.615 [DEBUG] [Thread-80310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:40:22.615 [DEBUG] [Thread-80310] [transport.py] [_log()] Compression: none
2025-12-13T01:40:22.615 [DEBUG] [Thread-80310] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:40:22.676 [DEBUG] [Thread-80310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:40:22.676 [DEBUG] [Thread-80310] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:40:22.677 [DEBUG] [Thread-80310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:40:22.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:40:22.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:40:22.732 [DEBUG] [Thread-80310] [transport.py] [_log()] userauth is OK
2025-12-13T01:40:22.732 [DEBUG] [Thread-80310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:40:22.732 [DEBUG] [Thread-80310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:40:22.732 [DEBUG] [Thread-80310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:40:22.732 [DEBUG] [Thread-80310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:40:22.754 [INFO] [Thread-80310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:40:22.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:40:22.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:40:23.588 [DEBUG] [Thread-80310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:40:23.588 [DEBUG] [Thread-80310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:40:23.636 [DEBUG] [Thread-80310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:40:23.636 [DEBUG] [Thread-80310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:40:23.645 [DEBUG] [Thread-80310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:40:23.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:40:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:40:23.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:40:23.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:40:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:40:23.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:40:23.679 [DEBUG] [Thread-80310] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:40:29.387 [DEBUG] [Thread-80312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:30.788 [DEBUG] [Thread-80313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:44.429 [DEBUG] [Thread-80314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:40:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:40:53.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:40:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 40, 41), 2.21, 85.92, 0.0, 38.04, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:40:41
2025-12-13T01:40:54.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:40:54.686 [DEBUG] [Thread-80315] [transport.py] [_log()] starting thread (client mode): 0xf81f05e0
2025-12-13T01:40:54.686 [DEBUG] [Thread-80315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:40:54.706 [DEBUG] [Thread-80315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:40:54.707 [INFO] [Thread-80315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:40:54.709 [DEBUG] [Thread-80315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] client lang: <none>
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] server lang: <none>
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] kex follows: False
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:40:54.710 [DEBUG] [Thread-80315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:40:54.711 [DEBUG] [Thread-80315] [transport.py] [_log()] Compression: none
2025-12-13T01:40:54.711 [DEBUG] [Thread-80315] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:40:54.726 [DEBUG] [Thread-80315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:40:54.726 [DEBUG] [Thread-80315] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:40:54.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:40:54.727 [DEBUG] [Thread-80315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:40:54.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:40:54.729 [DEBUG] [Thread-80315] [transport.py] [_log()] userauth is OK
2025-12-13T01:40:54.730 [DEBUG] [Thread-80315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:40:54.730 [DEBUG] [Thread-80315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:40:54.730 [DEBUG] [Thread-80315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:40:54.730 [DEBUG] [Thread-80315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:40:54.754 [INFO] [Thread-80315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:40:54.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:40:55.404 [DEBUG] [Thread-80315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:40:55.404 [DEBUG] [Thread-80315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:40:55.405 [DEBUG] [Thread-80315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:40:55.446 [DEBUG] [Thread-80315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:40:55.446 [DEBUG] [Thread-80315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:40:55.448 [DEBUG] [Thread-80315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:40:55.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:40:55.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:40:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:40:55.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:40:55.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:40:55.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:40:55.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.986554 -999.00   +7.60  29.20     89   +6.10 1 3 1 3 1     0    0 1.47 -3.04 ....W 26.9 29.2 311.2 49.7 9.0 -6.8 8.8 -4.7 8.6 -5.0 8.9 -6.7
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.986554
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:40:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:40:41', tmtdew=2.21, humidity=85.92, cloud=0.0, wind=38.04, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:40:38.266', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:40:55.467 [DEBUG] [Thread-80315] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:40:55.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:40:55.556 [DEBUG] [Thread-80318] [transport.py] [_log()] starting thread (client mode): 0xf575d660
2025-12-13T01:40:55.556 [DEBUG] [Thread-80318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:40:55.573 [DEBUG] [Thread-80318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:40:55.573 [INFO] [Thread-80318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] client lang: <none>
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] server lang: <none>
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] kex follows: False
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:40:55.580 [DEBUG] [Thread-80318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:40:55.581 [DEBUG] [Thread-80318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:40:55.581 [DEBUG] [Thread-80318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:40:55.581 [DEBUG] [Thread-80318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:40:55.581 [DEBUG] [Thread-80318] [transport.py] [_log()] Compression: none
2025-12-13T01:40:55.581 [DEBUG] [Thread-80318] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:40:55.640 [DEBUG] [Thread-80318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:40:55.641 [DEBUG] [Thread-80318] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:40:55.641 [DEBUG] [Thread-80318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:40:55.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:40:55.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:40:55.696 [DEBUG] [Thread-80318] [transport.py] [_log()] userauth is OK
2025-12-13T01:40:55.696 [DEBUG] [Thread-80318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:40:55.696 [DEBUG] [Thread-80318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:40:55.696 [DEBUG] [Thread-80318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:40:55.696 [DEBUG] [Thread-80318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:40:55.711 [INFO] [Thread-80318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:40:55.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:40:55.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:40:56.546 [DEBUG] [Thread-80318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:40:56.546 [DEBUG] [Thread-80318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:40:56.593 [DEBUG] [Thread-80318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:40:56.593 [DEBUG] [Thread-80318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:40:56.602 [DEBUG] [Thread-80318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:40:56.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:40:56.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:40:56.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:40:56.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:40:56.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:40:56.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:40:56.633 [DEBUG] [Thread-80318] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:40:59.456 [DEBUG] [Thread-80320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:14.493 [DEBUG] [Thread-80321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:17.174 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:17.176 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:26.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:41:26.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:41:26.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:41:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 41, 13), 2.21, 85.92, 0.0, 37.33, 7.77, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:41:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:41:13
2025-12-13T01:41:27.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:41:27.620 [DEBUG] [Thread-80322] [transport.py] [_log()] starting thread (client mode): 0xf575d9f0
2025-12-13T01:41:27.620 [DEBUG] [Thread-80322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:41:27.632 [DEBUG] [Thread-80322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:41:27.632 [INFO] [Thread-80322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] client lang: <none>
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] server lang: <none>
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] kex follows: False
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] Compression: none
2025-12-13T01:41:27.635 [DEBUG] [Thread-80322] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:41:27.651 [DEBUG] [Thread-80322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:41:27.651 [DEBUG] [Thread-80322] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:41:27.652 [DEBUG] [Thread-80322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:41:27.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:41:27.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:41:27.653 [DEBUG] [Thread-80322] [transport.py] [_log()] userauth is OK
2025-12-13T01:41:27.653 [DEBUG] [Thread-80322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:41:27.654 [DEBUG] [Thread-80322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:41:27.654 [DEBUG] [Thread-80322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:41:27.654 [DEBUG] [Thread-80322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:41:27.667 [INFO] [Thread-80322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:41:27.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:41:28.326 [DEBUG] [Thread-80322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:41:28.327 [DEBUG] [Thread-80322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:41:28.327 [DEBUG] [Thread-80322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:41:28.368 [DEBUG] [Thread-80322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:41:28.368 [DEBUG] [Thread-80322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:41:28.371 [DEBUG] [Thread-80322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:41:28.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:41:28.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:41:28.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:41:28.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:41:28.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:41:28.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:41:28.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:41:28.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:41:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:41:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.986901 -999.00   +7.60  39.96     89   +6.00 1 3 2 3 1     0    0 1.48 -3.36 ZN..W 36.4 40.0 312.8 49.2 9.0 -6.9 8.8 -5.2 8.5 -6.0 8.9 -7.2
2025-12-13T01:41:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:41:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:41:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.986901
2025-12-13T01:41:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:41:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:41:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:41:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:41:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:41:28.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:41:13', tmtdew=2.21, humidity=85.92, cloud=0.0, wind=37.33, temperature=7.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:41:08.246', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:41:28.398 [DEBUG] [Thread-80322] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:41:28.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:41:28.493 [DEBUG] [Thread-80325] [transport.py] [_log()] starting thread (client mode): 0xf813d480
2025-12-13T01:41:28.494 [DEBUG] [Thread-80325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:41:28.508 [DEBUG] [Thread-80325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:41:28.508 [INFO] [Thread-80325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] client lang: <none>
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] server lang: <none>
2025-12-13T01:41:28.516 [DEBUG] [Thread-80325] [transport.py] [_log()] kex follows: False
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] Compression: none
2025-12-13T01:41:28.517 [DEBUG] [Thread-80325] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:41:28.572 [DEBUG] [Thread-80325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:41:28.572 [DEBUG] [Thread-80325] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:41:28.573 [DEBUG] [Thread-80325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:41:28.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:41:28.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:41:28.633 [DEBUG] [Thread-80325] [transport.py] [_log()] userauth is OK
2025-12-13T01:41:28.633 [DEBUG] [Thread-80325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:41:28.633 [DEBUG] [Thread-80325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:41:28.634 [DEBUG] [Thread-80325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:41:28.634 [DEBUG] [Thread-80325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:41:28.655 [INFO] [Thread-80325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:41:28.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:41:28.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:41:29.484 [DEBUG] [Thread-80325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:41:29.484 [DEBUG] [Thread-80325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:41:29.521 [DEBUG] [Thread-80327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:29.532 [DEBUG] [Thread-80325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:41:29.532 [DEBUG] [Thread-80325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:41:29.541 [DEBUG] [Thread-80325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:41:29.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:41:29.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:41:29.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:41:29.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:41:29.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:41:29.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:41:29.576 [DEBUG] [Thread-80325] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:41:30.860 [DEBUG] [Thread-80328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:44.564 [DEBUG] [Thread-80329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:59.597 [DEBUG] [Thread-80330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:41:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:41:59.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:41:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:42:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 41, 45), 2.1, 86.49, 0.0, 33.52, 7.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:42:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:41:45
2025-12-13T01:42:00.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:42:00.567 [DEBUG] [Thread-80331] [transport.py] [_log()] starting thread (client mode): 0xf578be80
2025-12-13T01:42:00.567 [DEBUG] [Thread-80331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:42:00.588 [DEBUG] [Thread-80331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:42:00.588 [INFO] [Thread-80331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:42:00.590 [DEBUG] [Thread-80331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:42:00.590 [DEBUG] [Thread-80331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] client lang: <none>
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] server lang: <none>
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] kex follows: False
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] Compression: none
2025-12-13T01:42:00.591 [DEBUG] [Thread-80331] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:42:00.599 [DEBUG] [Thread-80331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:42:00.600 [DEBUG] [Thread-80331] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:42:00.600 [DEBUG] [Thread-80331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:42:00.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:42:00.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:42:00.601 [DEBUG] [Thread-80331] [transport.py] [_log()] userauth is OK
2025-12-13T01:42:00.601 [DEBUG] [Thread-80331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:42:00.601 [DEBUG] [Thread-80331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:42:00.602 [DEBUG] [Thread-80331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:42:00.602 [DEBUG] [Thread-80331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:42:00.614 [INFO] [Thread-80331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:42:00.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:42:01.207 [DEBUG] [Thread-80331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:42:01.207 [DEBUG] [Thread-80331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:42:01.207 [DEBUG] [Thread-80331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:42:01.249 [DEBUG] [Thread-80331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:42:01.249 [DEBUG] [Thread-80331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:42:01.251 [DEBUG] [Thread-80331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:42:01.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:42:01.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:42:01.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:42:01.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:42:01.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:42:01.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:42:01.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.987248 -999.00   +7.60  39.56     90   +6.10 1 3 2 3 1     0    0 1.49 -3.26 ZN..W 44.5 39.6 310.8 47.7 8.9 -7.8 8.8 -5.3 8.5 -5.4 8.9 -7.4
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.987248
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:42:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:41:45', tmtdew=2.1, humidity=86.49, cloud=0.0, wind=33.52, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:41:38.227', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:42:01.264 [DEBUG] [Thread-80331] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:42:01.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:42:01.353 [DEBUG] [Thread-80334] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-13T01:42:01.354 [DEBUG] [Thread-80334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:42:01.368 [DEBUG] [Thread-80334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:42:01.368 [INFO] [Thread-80334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:42:01.375 [DEBUG] [Thread-80334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] client lang: <none>
2025-12-13T01:42:01.376 [DEBUG] [Thread-80334] [transport.py] [_log()] server lang: <none>
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] kex follows: False
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] Compression: none
2025-12-13T01:42:01.377 [DEBUG] [Thread-80334] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:42:01.433 [DEBUG] [Thread-80334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:42:01.434 [DEBUG] [Thread-80334] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:42:01.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:42:01.435 [DEBUG] [Thread-80334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:42:01.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:42:01.489 [DEBUG] [Thread-80334] [transport.py] [_log()] userauth is OK
2025-12-13T01:42:01.490 [DEBUG] [Thread-80334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:42:01.490 [DEBUG] [Thread-80334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:42:01.490 [DEBUG] [Thread-80334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:42:01.490 [DEBUG] [Thread-80334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:42:01.509 [INFO] [Thread-80334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:42:01.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:42:01.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:42:02.371 [DEBUG] [Thread-80334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:42:02.371 [DEBUG] [Thread-80334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:42:02.420 [DEBUG] [Thread-80334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:42:02.420 [DEBUG] [Thread-80334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:42:02.429 [DEBUG] [Thread-80334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:42:02.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:42:02.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:42:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:42:02.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:42:02.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:42:02.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:42:02.463 [DEBUG] [Thread-80334] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:42:14.623 [DEBUG] [Thread-80336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:42:17.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:42:17.379 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:42:29.656 [DEBUG] [Thread-80337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:42:30.936 [DEBUG] [Thread-80338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:42:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:42:32.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:42:32.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:42:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 42, 17), 2.09, 86.52, 0.0, 30.35, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:42:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:42:17
2025-12-13T01:42:33.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:42:33.500 [DEBUG] [Thread-80339] [transport.py] [_log()] starting thread (client mode): 0xf575f1c0
2025-12-13T01:42:33.500 [DEBUG] [Thread-80339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:42:33.514 [DEBUG] [Thread-80339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:42:33.514 [INFO] [Thread-80339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] client lang: <none>
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] server lang: <none>
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] kex follows: False
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:42:33.517 [DEBUG] [Thread-80339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:42:33.518 [DEBUG] [Thread-80339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:42:33.518 [DEBUG] [Thread-80339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:42:33.518 [DEBUG] [Thread-80339] [transport.py] [_log()] Compression: none
2025-12-13T01:42:33.518 [DEBUG] [Thread-80339] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:42:33.534 [DEBUG] [Thread-80339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:42:33.534 [DEBUG] [Thread-80339] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:42:33.535 [DEBUG] [Thread-80339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:42:33.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:42:33.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:42:33.536 [DEBUG] [Thread-80339] [transport.py] [_log()] userauth is OK
2025-12-13T01:42:33.537 [DEBUG] [Thread-80339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:42:33.537 [DEBUG] [Thread-80339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:42:33.537 [DEBUG] [Thread-80339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:42:33.537 [DEBUG] [Thread-80339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:42:33.556 [INFO] [Thread-80339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:42:33.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:42:34.180 [DEBUG] [Thread-80339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:42:34.180 [DEBUG] [Thread-80339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:42:34.181 [DEBUG] [Thread-80339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:42:34.221 [DEBUG] [Thread-80339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:42:34.222 [DEBUG] [Thread-80339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:42:34.223 [DEBUG] [Thread-80339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:42:34.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:42:34.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:42:34.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:42:34.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:42:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:42:34.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:42:34.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:42:34.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:42:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:42:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.987596 -999.00   +7.50  37.65     90   +6.10 1 3 2 3 1     0    0 1.43 -3.70 ZN..w 36.6 37.6 309.0 48.7 9.0 -8.2 8.8 -7.4 8.4 -7.0 8.8 -8.1
2025-12-13T01:42:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:42:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:42:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.987596
2025-12-13T01:42:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:42:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:42:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:42:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:42:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:42:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:42:17', tmtdew=2.09, humidity=86.52, cloud=0.0, wind=30.35, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:42:08.294', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:42:34.240 [DEBUG] [Thread-80339] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:42:34.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:42:34.338 [DEBUG] [Thread-80342] [transport.py] [_log()] starting thread (client mode): 0xf81e5ae0
2025-12-13T01:42:34.338 [DEBUG] [Thread-80342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:42:34.352 [DEBUG] [Thread-80342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:42:34.352 [INFO] [Thread-80342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:42:34.359 [DEBUG] [Thread-80342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:42:34.359 [DEBUG] [Thread-80342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] client lang: <none>
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] server lang: <none>
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] kex follows: False
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] Compression: none
2025-12-13T01:42:34.360 [DEBUG] [Thread-80342] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:42:34.417 [DEBUG] [Thread-80342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:42:34.418 [DEBUG] [Thread-80342] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:42:34.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:42:34.419 [DEBUG] [Thread-80342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:42:34.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:42:34.474 [DEBUG] [Thread-80342] [transport.py] [_log()] userauth is OK
2025-12-13T01:42:34.474 [DEBUG] [Thread-80342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:42:34.474 [DEBUG] [Thread-80342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:42:34.474 [DEBUG] [Thread-80342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:42:34.474 [DEBUG] [Thread-80342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:42:34.492 [INFO] [Thread-80342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:42:34.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:42:34.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:42:35.324 [DEBUG] [Thread-80342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:42:35.324 [DEBUG] [Thread-80342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:42:35.371 [DEBUG] [Thread-80342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:42:35.372 [DEBUG] [Thread-80342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:42:35.380 [DEBUG] [Thread-80342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:42:35.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:42:35.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:42:35.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:42:35.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:42:35.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:42:35.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:42:35.413 [DEBUG] [Thread-80342] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:42:44.686 [DEBUG] [Thread-80344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:42:59.737 [DEBUG] [Thread-80345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:05.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:43:05.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:43:05.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:43:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 42, 49), 2.08, 86.6, 0.0, 37.37, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:43:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:42:49
2025-12-13T01:43:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:43:06.365 [DEBUG] [Thread-80346] [transport.py] [_log()] starting thread (client mode): 0xf5771930
2025-12-13T01:43:06.365 [DEBUG] [Thread-80346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:43:06.384 [DEBUG] [Thread-80346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:43:06.384 [INFO] [Thread-80346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] client lang: <none>
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] server lang: <none>
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] kex follows: False
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:43:06.387 [DEBUG] [Thread-80346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:43:06.388 [DEBUG] [Thread-80346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:43:06.388 [DEBUG] [Thread-80346] [transport.py] [_log()] Compression: none
2025-12-13T01:43:06.388 [DEBUG] [Thread-80346] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:43:06.408 [DEBUG] [Thread-80346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:43:06.408 [DEBUG] [Thread-80346] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:43:06.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:43:06.409 [DEBUG] [Thread-80346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:43:06.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:43:06.411 [DEBUG] [Thread-80346] [transport.py] [_log()] userauth is OK
2025-12-13T01:43:06.411 [DEBUG] [Thread-80346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:43:06.411 [DEBUG] [Thread-80346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:43:06.411 [DEBUG] [Thread-80346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:43:06.411 [DEBUG] [Thread-80346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:43:06.446 [INFO] [Thread-80346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:43:06.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:43:07.078 [DEBUG] [Thread-80346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:43:07.079 [DEBUG] [Thread-80346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:43:07.079 [DEBUG] [Thread-80346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:43:07.120 [DEBUG] [Thread-80346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:43:07.120 [DEBUG] [Thread-80346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:43:07.123 [DEBUG] [Thread-80346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:43:07.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:43:07.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:43:07.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:43:07.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:43:07.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:43:07.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:43:07.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:43:07.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:43:07.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:43:07.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.987596 -999.00   +7.50  37.65     90   +6.10 1 3 2 3 1     0    0 1.43 -3.70 ZN..w 36.6 37.6 309.0 48.7 9.0 -8.2 8.8 -7.4 8.4 -7.0 8.8 -8.1
2025-12-13T01:43:07.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:43:07.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:43:07.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.987596
2025-12-13T01:43:07.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:43:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:43:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:43:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:43:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:43:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:42:49', tmtdew=2.08, humidity=86.6, cloud=0.0, wind=37.37, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:42:08.294', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:43:07.147 [DEBUG] [Thread-80346] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:43:07.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:43:07.244 [DEBUG] [Thread-80349] [transport.py] [_log()] starting thread (client mode): 0xf81e5390
2025-12-13T01:43:07.244 [DEBUG] [Thread-80349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:43:07.259 [DEBUG] [Thread-80349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:43:07.259 [INFO] [Thread-80349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:43:07.266 [DEBUG] [Thread-80349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] client lang: <none>
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] server lang: <none>
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] kex follows: False
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] Compression: none
2025-12-13T01:43:07.267 [DEBUG] [Thread-80349] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:43:07.326 [DEBUG] [Thread-80349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:43:07.327 [DEBUG] [Thread-80349] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:43:07.327 [DEBUG] [Thread-80349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:43:07.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:43:07.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:43:07.383 [DEBUG] [Thread-80349] [transport.py] [_log()] userauth is OK
2025-12-13T01:43:07.383 [DEBUG] [Thread-80349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:43:07.383 [DEBUG] [Thread-80349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:43:07.384 [DEBUG] [Thread-80349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:43:07.384 [DEBUG] [Thread-80349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:43:07.402 [INFO] [Thread-80349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:43:07.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:43:07.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:43:08.225 [DEBUG] [Thread-80349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:43:08.225 [DEBUG] [Thread-80349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:43:08.273 [DEBUG] [Thread-80349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:43:08.273 [DEBUG] [Thread-80349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:43:08.282 [DEBUG] [Thread-80349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:43:08.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:43:08.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:43:08.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:43:08.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:43:08.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:43:08.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:43:08.317 [DEBUG] [Thread-80349] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:43:14.771 [DEBUG] [Thread-80351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:17.584 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:17.585 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:29.826 [DEBUG] [Thread-80352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:31.007 [DEBUG] [Thread-80353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:43:38.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:43:38.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:43:39.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 43, 21), 2.07, 86.64, 0.0, 35.01, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:43:39.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:43:21
2025-12-13T01:43:39.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:43:39.284 [DEBUG] [Thread-80354] [transport.py] [_log()] starting thread (client mode): 0xf575e0b0
2025-12-13T01:43:39.284 [DEBUG] [Thread-80354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:43:39.306 [DEBUG] [Thread-80354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:43:39.306 [INFO] [Thread-80354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] client lang: <none>
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] server lang: <none>
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] kex follows: False
2025-12-13T01:43:39.309 [DEBUG] [Thread-80354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:43:39.310 [DEBUG] [Thread-80354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:43:39.310 [DEBUG] [Thread-80354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:43:39.310 [DEBUG] [Thread-80354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:43:39.310 [DEBUG] [Thread-80354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:43:39.310 [DEBUG] [Thread-80354] [transport.py] [_log()] Compression: none
2025-12-13T01:43:39.310 [DEBUG] [Thread-80354] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:43:39.327 [DEBUG] [Thread-80354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:43:39.328 [DEBUG] [Thread-80354] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:43:39.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:43:39.329 [DEBUG] [Thread-80354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:43:39.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:43:39.336 [DEBUG] [Thread-80354] [transport.py] [_log()] userauth is OK
2025-12-13T01:43:39.336 [DEBUG] [Thread-80354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:43:39.336 [DEBUG] [Thread-80354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:43:39.337 [DEBUG] [Thread-80354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:43:39.337 [DEBUG] [Thread-80354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:43:39.373 [INFO] [Thread-80354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:43:39.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:43:40.001 [DEBUG] [Thread-80354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:43:40.001 [DEBUG] [Thread-80354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:43:40.001 [DEBUG] [Thread-80354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:43:40.042 [DEBUG] [Thread-80354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:43:40.042 [DEBUG] [Thread-80354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:43:40.045 [DEBUG] [Thread-80354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:43:40.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:43:40.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:43:40.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:43:40.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:43:40.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:43:40.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:43:40.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:43:40.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:43:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:43:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.987943 -999.00   +7.60  30.10     90   +6.10 1 3 2 3 1     0    0 1.43 -4.50 ZN..w 31.9 30.1 310.4 43.8 9.0 -6.9 8.8 -7.9 8.5 -8.1 8.9 -7.3
2025-12-13T01:43:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:43:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:43:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.987943
2025-12-13T01:43:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:43:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:43:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:43:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:43:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:43:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:43:21', tmtdew=2.07, humidity=86.64, cloud=0.0, wind=35.01, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:42:38.275', atlas_cloud=3, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:43:40.073 [DEBUG] [Thread-80354] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:43:40.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:43:40.173 [DEBUG] [Thread-80357] [transport.py] [_log()] starting thread (client mode): 0xf57cbdc0
2025-12-13T01:43:40.173 [DEBUG] [Thread-80357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:43:40.188 [DEBUG] [Thread-80357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:43:40.188 [INFO] [Thread-80357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:43:40.195 [DEBUG] [Thread-80357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] client lang: <none>
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] server lang: <none>
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] kex follows: False
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] Compression: none
2025-12-13T01:43:40.196 [DEBUG] [Thread-80357] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:43:40.255 [DEBUG] [Thread-80357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:43:40.255 [DEBUG] [Thread-80357] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:43:40.256 [DEBUG] [Thread-80357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:43:40.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:43:40.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:43:40.311 [DEBUG] [Thread-80357] [transport.py] [_log()] userauth is OK
2025-12-13T01:43:40.311 [DEBUG] [Thread-80357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:43:40.311 [DEBUG] [Thread-80357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:43:40.312 [DEBUG] [Thread-80357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:43:40.312 [DEBUG] [Thread-80357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:43:40.330 [INFO] [Thread-80357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:43:40.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:43:40.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:43:41.167 [DEBUG] [Thread-80357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:43:41.167 [DEBUG] [Thread-80357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:43:41.216 [DEBUG] [Thread-80357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:43:41.216 [DEBUG] [Thread-80357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:43:41.225 [DEBUG] [Thread-80357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:43:41.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:43:41.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:43:41.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:43:41.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:43:41.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:43:41.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:43:41.260 [DEBUG] [Thread-80357] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:43:44.855 [DEBUG] [Thread-80359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:43:59.906 [DEBUG] [Thread-80360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:11.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:44:11.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:44:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:44:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 43, 53), 2.05, 86.75, 0.0, 33.75, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:44:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:43:53
2025-12-13T01:44:12.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:44:12.289 [DEBUG] [Thread-80361] [transport.py] [_log()] starting thread (client mode): 0xf5773310
2025-12-13T01:44:12.289 [DEBUG] [Thread-80361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:44:12.310 [DEBUG] [Thread-80361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:44:12.310 [INFO] [Thread-80361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] client lang: <none>
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] server lang: <none>
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] kex follows: False
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] Compression: none
2025-12-13T01:44:12.313 [DEBUG] [Thread-80361] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:44:12.328 [DEBUG] [Thread-80361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:44:12.328 [DEBUG] [Thread-80361] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:44:12.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:44:12.329 [DEBUG] [Thread-80361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:44:12.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:44:12.329 [DEBUG] [Thread-80361] [transport.py] [_log()] userauth is OK
2025-12-13T01:44:12.329 [DEBUG] [Thread-80361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:44:12.329 [DEBUG] [Thread-80361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:44:12.329 [DEBUG] [Thread-80361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:44:12.329 [DEBUG] [Thread-80361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:44:12.338 [INFO] [Thread-80361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:44:12.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:44:12.962 [DEBUG] [Thread-80361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:44:12.962 [DEBUG] [Thread-80361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:44:12.962 [DEBUG] [Thread-80361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:44:13.004 [DEBUG] [Thread-80361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:44:13.004 [DEBUG] [Thread-80361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:44:13.006 [DEBUG] [Thread-80361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:44:13.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:44:13.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:44:13.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:44:13.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:44:13.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:44:13.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:44:13.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.988637 -999.00   +7.60  34.78     90   +6.10 1 2 2 3 1     0    0 1.43 -4.81 Z.E.W 32.7 34.8 304.8 41.9 8.9 -15.8 8.8 -17.1 8.4 -15.0 8.8 -13.3
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.988637
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:44:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:43:53', tmtdew=2.05, humidity=86.75, cloud=0.0, wind=33.75, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:43:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[2.2277499999999995, 1.7967500000000003, 1.9362500000000011, nan, nan, nan, nan, 2.8542500000000004, 2.2284999999999995, 1.678, 0.8817500000000003, 1.3760000000000003, nan, nan, 2.609, nan, nan, 1.2305000000000001, 1.1350000000000007, 1.8532499999999992, nan, 2.023749999999999, 2.3232500000000016, 1.4632500000000004, 1.2194999999999991, 1.2895000000000003, nan, nan, nan, nan, 1.2110000000000012, 1.1000000000000005, 0.6787499999999991], zp_timestamp='2025-12-12T23:35:00')
2025-12-13T01:44:13.027 [DEBUG] [Thread-80361] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:44:13.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:44:13.113 [DEBUG] [Thread-80364] [transport.py] [_log()] starting thread (client mode): 0xf81f2170
2025-12-13T01:44:13.113 [DEBUG] [Thread-80364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:44:13.126 [DEBUG] [Thread-80364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:44:13.126 [INFO] [Thread-80364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] client lang: <none>
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] server lang: <none>
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] kex follows: False
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] Compression: none
2025-12-13T01:44:13.134 [DEBUG] [Thread-80364] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:44:13.190 [DEBUG] [Thread-80364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:44:13.190 [DEBUG] [Thread-80364] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:44:13.190 [DEBUG] [Thread-80364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:44:13.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:44:13.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:44:13.248 [DEBUG] [Thread-80364] [transport.py] [_log()] userauth is OK
2025-12-13T01:44:13.248 [DEBUG] [Thread-80364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:44:13.248 [DEBUG] [Thread-80364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:44:13.248 [DEBUG] [Thread-80364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:44:13.248 [DEBUG] [Thread-80364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:44:13.261 [INFO] [Thread-80364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:44:13.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:44:13.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:44:14.096 [DEBUG] [Thread-80364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:44:14.096 [DEBUG] [Thread-80364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:44:14.143 [DEBUG] [Thread-80364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:44:14.143 [DEBUG] [Thread-80364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:44:14.151 [DEBUG] [Thread-80364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:44:14.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:44:14.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:44:14.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:44:14.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:44:14.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:44:14.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:44:14.183 [DEBUG] [Thread-80364] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:44:14.933 [DEBUG] [Thread-80366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:17.791 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:17.792 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:29.970 [DEBUG] [Thread-80367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:31.085 [DEBUG] [Thread-80368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:44:44.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:44:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:44:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 44, 25), 2.05, 86.75, 0.0, 33.81, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:44:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:44:25
2025-12-13T01:44:44.998 [DEBUG] [Thread-80369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:44:45.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:44:45.184 [DEBUG] [Thread-80370] [transport.py] [_log()] starting thread (client mode): 0xf57f1450
2025-12-13T01:44:45.184 [DEBUG] [Thread-80370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:44:45.204 [DEBUG] [Thread-80370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:44:45.204 [INFO] [Thread-80370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] client lang: <none>
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] server lang: <none>
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] kex follows: False
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] Compression: none
2025-12-13T01:44:45.208 [DEBUG] [Thread-80370] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:44:45.225 [DEBUG] [Thread-80370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:44:45.226 [DEBUG] [Thread-80370] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:44:45.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:44:45.227 [DEBUG] [Thread-80370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:44:45.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:44:45.229 [DEBUG] [Thread-80370] [transport.py] [_log()] userauth is OK
2025-12-13T01:44:45.229 [DEBUG] [Thread-80370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:44:45.229 [DEBUG] [Thread-80370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:44:45.230 [DEBUG] [Thread-80370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:44:45.230 [DEBUG] [Thread-80370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:44:45.250 [INFO] [Thread-80370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:44:45.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:44:45.841 [DEBUG] [Thread-80370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:44:45.841 [DEBUG] [Thread-80370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:44:45.841 [DEBUG] [Thread-80370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:44:45.883 [DEBUG] [Thread-80370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:44:45.883 [DEBUG] [Thread-80370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:44:45.885 [DEBUG] [Thread-80370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:44:45.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:44:45.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:44:45.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:44:45.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:44:45.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:44:45.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:44:45.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:44:45.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:44:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:44:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.988985 -999.00   +7.50  32.89     90   +6.10 1 2 2 3 1     0    0 1.43 -5.06 Z.ESW 31.4 32.9 310.6 45.0 8.9 -16.9 8.7 -18.9 8.4 -16.5 8.8 -14.0
2025-12-13T01:44:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:44:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:44:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.988985
2025-12-13T01:44:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:44:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:44:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:44:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:44:45.908 [DEBUG] [Thread-80370] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:44:45.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:44:45.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:44:25', tmtdew=2.05, humidity=86.75, cloud=0.0, wind=33.81, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:44:08.304', atlas_cloud=2, atlas_rain=1, zp_data=[2.213749999999999, nan, nan, nan, nan, nan, 1.4929999999999994, 1.071250000000001, 1.4004999999999992, nan, nan, nan, nan, nan, 0.9955000000000007, 0.6189999999999998, 1.0532500000000002, nan, nan, nan, nan, nan, 1.1022500000000006, 0.6357499999999998, 0.6129999999999995, 1.3055000000000003, nan, nan, nan, nan, 0.9315000000000024, 0.4110000000000005, 0.6562499999999991], zp_timestamp='2025-12-12T23:43:00')
2025-12-13T01:44:45.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:44:46.005 [DEBUG] [Thread-80373] [transport.py] [_log()] starting thread (client mode): 0xf81e52d0
2025-12-13T01:44:46.006 [DEBUG] [Thread-80373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:44:46.020 [DEBUG] [Thread-80373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:44:46.020 [INFO] [Thread-80373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:44:46.028 [DEBUG] [Thread-80373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] client lang: <none>
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] server lang: <none>
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] kex follows: False
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:44:46.029 [DEBUG] [Thread-80373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:44:46.030 [DEBUG] [Thread-80373] [transport.py] [_log()] Compression: none
2025-12-13T01:44:46.030 [DEBUG] [Thread-80373] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:44:46.084 [DEBUG] [Thread-80373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:44:46.085 [DEBUG] [Thread-80373] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:44:46.085 [DEBUG] [Thread-80373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:44:46.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:44:46.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:44:46.140 [DEBUG] [Thread-80373] [transport.py] [_log()] userauth is OK
2025-12-13T01:44:46.141 [DEBUG] [Thread-80373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:44:46.141 [DEBUG] [Thread-80373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:44:46.141 [DEBUG] [Thread-80373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:44:46.141 [DEBUG] [Thread-80373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:44:46.163 [INFO] [Thread-80373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:44:46.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:44:46.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:44:47.041 [DEBUG] [Thread-80373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:44:47.041 [DEBUG] [Thread-80373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:44:47.088 [DEBUG] [Thread-80373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:44:47.089 [DEBUG] [Thread-80373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:44:47.097 [DEBUG] [Thread-80373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:44:47.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:44:47.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:44:47.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:44:47.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:44:47.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:44:47.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:44:47.131 [DEBUG] [Thread-80373] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:45:00.023 [DEBUG] [Thread-80375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:15.058 [DEBUG] [Thread-80376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:17.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:45:17.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:45:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:45:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 44, 57), 2.0, 87.25, 0.0, 33.42, 7.72, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:45:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:44:57
2025-12-13T01:45:17.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:45:18.003 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:18.004 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:18.095 [DEBUG] [Thread-80377] [transport.py] [_log()] starting thread (client mode): 0xf575c490
2025-12-13T01:45:18.096 [DEBUG] [Thread-80377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:45:18.116 [DEBUG] [Thread-80377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:45:18.116 [INFO] [Thread-80377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] client lang: <none>
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] server lang: <none>
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] kex follows: False
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] Compression: none
2025-12-13T01:45:18.119 [DEBUG] [Thread-80377] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:45:18.135 [DEBUG] [Thread-80377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:45:18.136 [DEBUG] [Thread-80377] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:45:18.136 [DEBUG] [Thread-80377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:45:18.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:45:18.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:45:18.138 [DEBUG] [Thread-80377] [transport.py] [_log()] userauth is OK
2025-12-13T01:45:18.139 [DEBUG] [Thread-80377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:45:18.139 [DEBUG] [Thread-80377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:45:18.139 [DEBUG] [Thread-80377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:45:18.139 [DEBUG] [Thread-80377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:45:18.167 [INFO] [Thread-80377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:45:18.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:45:18.860 [DEBUG] [Thread-80377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:45:18.860 [DEBUG] [Thread-80377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:45:18.861 [DEBUG] [Thread-80377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:45:18.901 [DEBUG] [Thread-80377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:45:18.901 [DEBUG] [Thread-80377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:45:18.904 [DEBUG] [Thread-80377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:45:18.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:45:18.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:45:18.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:45:18.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:45:18.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:45:18.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:45:18.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:45:18.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:45:18.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:45:18.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.989332 -999.00   +7.60  35.13     90   +6.10 1 2 2 3 1     0    0 1.42 -5.21 Z.ESW 34.5 35.1 315.6 43.0 8.9 -13.7 8.7 -16.2 8.4 -15.6 8.7 -12.6
2025-12-13T01:45:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:45:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:45:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.989332
2025-12-13T01:45:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:45:18.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:45:18.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:45:18.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:45:18.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:45:18.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:44:57', tmtdew=2.0, humidity=87.25, cloud=0.0, wind=33.42, temperature=7.72, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:44:38.285', atlas_cloud=2, atlas_rain=1, zp_data=[2.213749999999999, nan, nan, nan, nan, nan, 1.4929999999999994, 1.071250000000001, 1.4004999999999992, nan, nan, nan, nan, nan, 0.9955000000000007, 0.6189999999999998, 1.0532500000000002, nan, nan, nan, nan, nan, 1.1022500000000006, 0.6357499999999998, 0.6129999999999995, 1.3055000000000003, nan, nan, nan, nan, 0.9315000000000024, 0.4110000000000005, 0.6562499999999991], zp_timestamp='2025-12-12T23:43:00')
2025-12-13T01:45:18.930 [DEBUG] [Thread-80377] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:45:19.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:45:19.033 [DEBUG] [Thread-80380] [transport.py] [_log()] starting thread (client mode): 0xf57735e0
2025-12-13T01:45:19.033 [DEBUG] [Thread-80380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:45:19.048 [DEBUG] [Thread-80380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:45:19.048 [INFO] [Thread-80380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:45:19.055 [DEBUG] [Thread-80380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] client lang: <none>
2025-12-13T01:45:19.056 [DEBUG] [Thread-80380] [transport.py] [_log()] server lang: <none>
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] kex follows: False
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] Compression: none
2025-12-13T01:45:19.057 [DEBUG] [Thread-80380] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:45:19.112 [DEBUG] [Thread-80380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:45:19.112 [DEBUG] [Thread-80380] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:45:19.113 [DEBUG] [Thread-80380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:45:19.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:45:19.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:45:19.169 [DEBUG] [Thread-80380] [transport.py] [_log()] userauth is OK
2025-12-13T01:45:19.169 [DEBUG] [Thread-80380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:45:19.169 [DEBUG] [Thread-80380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:45:19.169 [DEBUG] [Thread-80380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:45:19.169 [DEBUG] [Thread-80380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:45:19.188 [INFO] [Thread-80380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:45:19.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:45:19.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:45:20.014 [DEBUG] [Thread-80380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:45:20.014 [DEBUG] [Thread-80380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:45:20.062 [DEBUG] [Thread-80380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:45:20.062 [DEBUG] [Thread-80380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:45:20.070 [DEBUG] [Thread-80380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:45:20.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:45:20.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:45:20.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:45:20.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:45:20.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:45:20.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:45:20.104 [DEBUG] [Thread-80380] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:45:30.087 [DEBUG] [Thread-80382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:31.160 [DEBUG] [Thread-80383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:45.129 [DEBUG] [Thread-80384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:45:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:45:50.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:45:50.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:45:50.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 45, 30), 2.0, 87.3, 0.0, 35.92, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:45:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:45:30
2025-12-13T01:45:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:45:51.081 [DEBUG] [Thread-80385] [transport.py] [_log()] starting thread (client mode): 0xf813f7f0
2025-12-13T01:45:51.081 [DEBUG] [Thread-80385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:45:51.103 [DEBUG] [Thread-80385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:45:51.103 [INFO] [Thread-80385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] client lang: <none>
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] server lang: <none>
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] kex follows: False
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] Compression: none
2025-12-13T01:45:51.106 [DEBUG] [Thread-80385] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:45:51.123 [DEBUG] [Thread-80385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:45:51.123 [DEBUG] [Thread-80385] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:45:51.124 [DEBUG] [Thread-80385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:45:51.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:45:51.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:45:51.125 [DEBUG] [Thread-80385] [transport.py] [_log()] userauth is OK
2025-12-13T01:45:51.126 [DEBUG] [Thread-80385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:45:51.126 [DEBUG] [Thread-80385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:45:51.126 [DEBUG] [Thread-80385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:45:51.126 [DEBUG] [Thread-80385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:45:51.148 [INFO] [Thread-80385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:45:51.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:45:51.803 [DEBUG] [Thread-80385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:45:51.803 [DEBUG] [Thread-80385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:45:51.803 [DEBUG] [Thread-80385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:45:51.844 [DEBUG] [Thread-80385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:45:51.844 [DEBUG] [Thread-80385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:45:51.848 [DEBUG] [Thread-80385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:45:51.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:45:51.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:45:51.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:45:51.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:45:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:45:51.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:45:51.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:45:51.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:45:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:45:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.989679 -999.00   +7.50  40.17     90   +6.10 1 3 2 3 1     0    0 1.40 -6.01 Z.ESW 37.7 40.2 312.0 47.0 8.9 -7.4 8.6 -9.5 8.3 -9.9 8.7 -6.7
2025-12-13T01:45:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:45:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:45:51.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.989679
2025-12-13T01:45:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:45:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:45:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:45:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:45:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:45:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:45:30', tmtdew=2.0, humidity=87.3, cloud=0.0, wind=35.92, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:45:08.266', atlas_cloud=3, atlas_rain=1, zp_data=[2.213749999999999, nan, nan, nan, nan, nan, 1.4929999999999994, 1.071250000000001, 1.4004999999999992, nan, nan, nan, nan, nan, 0.9955000000000007, 0.6189999999999998, 1.0532500000000002, nan, nan, nan, nan, nan, 1.1022500000000006, 0.6357499999999998, 0.6129999999999995, 1.3055000000000003, nan, nan, nan, nan, 0.9315000000000024, 0.4110000000000005, 0.6562499999999991], zp_timestamp='2025-12-12T23:43:00')
2025-12-13T01:45:51.873 [DEBUG] [Thread-80385] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:45:51.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:45:51.970 [DEBUG] [Thread-80388] [transport.py] [_log()] starting thread (client mode): 0xf813cb80
2025-12-13T01:45:51.970 [DEBUG] [Thread-80388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:45:51.985 [DEBUG] [Thread-80388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:45:51.985 [INFO] [Thread-80388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:51.993 [DEBUG] [Thread-80388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] client lang: <none>
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] server lang: <none>
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] kex follows: False
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] Compression: none
2025-12-13T01:45:51.994 [DEBUG] [Thread-80388] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:45:52.052 [DEBUG] [Thread-80388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:45:52.053 [DEBUG] [Thread-80388] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:45:52.053 [DEBUG] [Thread-80388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:45:52.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:45:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:45:52.109 [DEBUG] [Thread-80388] [transport.py] [_log()] userauth is OK
2025-12-13T01:45:52.109 [DEBUG] [Thread-80388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:45:52.109 [DEBUG] [Thread-80388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:45:52.109 [DEBUG] [Thread-80388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:45:52.109 [DEBUG] [Thread-80388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:45:52.132 [INFO] [Thread-80388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:45:52.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:45:52.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:45:52.986 [DEBUG] [Thread-80388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:45:52.987 [DEBUG] [Thread-80388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:45:53.035 [DEBUG] [Thread-80388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:45:53.035 [DEBUG] [Thread-80388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:45:53.044 [DEBUG] [Thread-80388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:45:53.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:45:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:45:53.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:45:53.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:45:53.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:45:53.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:45:53.077 [DEBUG] [Thread-80388] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:46:00.159 [DEBUG] [Thread-80390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:15.203 [DEBUG] [Thread-80391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:18.209 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:18.210 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:23.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:46:23.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:46:23.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:46:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 46, 2), 2.0, 87.29, 0.0, 32.09, 7.74, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:46:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:46:02
2025-12-13T01:46:23.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:46:24.079 [DEBUG] [Thread-80392] [transport.py] [_log()] starting thread (client mode): 0xf813d840
2025-12-13T01:46:24.079 [DEBUG] [Thread-80392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:46:24.095 [DEBUG] [Thread-80392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:46:24.095 [INFO] [Thread-80392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:46:24.098 [DEBUG] [Thread-80392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] client lang: <none>
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] server lang: <none>
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] kex follows: False
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:46:24.099 [DEBUG] [Thread-80392] [transport.py] [_log()] Compression: none
2025-12-13T01:46:24.100 [DEBUG] [Thread-80392] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:46:24.122 [DEBUG] [Thread-80392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:46:24.123 [DEBUG] [Thread-80392] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:46:24.123 [DEBUG] [Thread-80392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:46:24.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:46:24.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:46:24.165 [DEBUG] [Thread-80392] [transport.py] [_log()] userauth is OK
2025-12-13T01:46:24.165 [DEBUG] [Thread-80392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:46:24.165 [DEBUG] [Thread-80392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:46:24.165 [DEBUG] [Thread-80392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:46:24.165 [DEBUG] [Thread-80392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:46:24.185 [INFO] [Thread-80392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:46:24.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:46:24.811 [DEBUG] [Thread-80392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:46:24.812 [DEBUG] [Thread-80392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:46:24.812 [DEBUG] [Thread-80392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:46:24.853 [DEBUG] [Thread-80392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:46:24.853 [DEBUG] [Thread-80392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:46:24.857 [DEBUG] [Thread-80392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:46:24.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:46:24.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:46:24.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:46:24.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:46:24.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:46:24.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:46:24.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:46:24.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:46:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:46:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.990026 -999.00   +7.60  29.84     90   +6.10 1 2 1 3 1     0    0 1.38 -6.90 Z.ESW 40.2 29.8 309.4 46.9 8.9 -10.7 8.7 -11.9 8.4 -9.1 8.8 -8.8
2025-12-13T01:46:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:46:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:46:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.990026
2025-12-13T01:46:24.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:46:24.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:46:24.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:46:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:46:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:46:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:46:02', tmtdew=2.0, humidity=87.29, cloud=0.0, wind=32.09, temperature=7.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:45:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[2.213749999999999, nan, nan, nan, nan, nan, 1.4929999999999994, 1.071250000000001, 1.4004999999999992, nan, nan, nan, nan, nan, 0.9955000000000007, 0.6189999999999998, 1.0532500000000002, nan, nan, nan, nan, nan, 1.1022500000000006, 0.6357499999999998, 0.6129999999999995, 1.3055000000000003, nan, nan, nan, nan, 0.9315000000000024, 0.4110000000000005, 0.6562499999999991], zp_timestamp='2025-12-12T23:43:00')
2025-12-13T01:46:24.885 [DEBUG] [Thread-80392] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:46:24.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:46:24.981 [DEBUG] [Thread-80395] [transport.py] [_log()] starting thread (client mode): 0xf813f2e0
2025-12-13T01:46:24.981 [DEBUG] [Thread-80395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:46:24.996 [DEBUG] [Thread-80395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:46:24.997 [INFO] [Thread-80395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:46:25.004 [DEBUG] [Thread-80395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:46:25.004 [DEBUG] [Thread-80395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:46:25.004 [DEBUG] [Thread-80395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:46:25.004 [DEBUG] [Thread-80395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] client lang: <none>
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] server lang: <none>
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] kex follows: False
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] Compression: none
2025-12-13T01:46:25.005 [DEBUG] [Thread-80395] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:46:25.061 [DEBUG] [Thread-80395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:46:25.062 [DEBUG] [Thread-80395] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:46:25.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:46:25.063 [DEBUG] [Thread-80395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:46:25.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:46:25.117 [DEBUG] [Thread-80395] [transport.py] [_log()] userauth is OK
2025-12-13T01:46:25.118 [DEBUG] [Thread-80395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:46:25.118 [DEBUG] [Thread-80395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:46:25.118 [DEBUG] [Thread-80395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:46:25.118 [DEBUG] [Thread-80395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:46:25.137 [INFO] [Thread-80395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:46:25.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:46:25.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:46:25.978 [DEBUG] [Thread-80395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:46:25.978 [DEBUG] [Thread-80395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:46:26.026 [DEBUG] [Thread-80395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:46:26.026 [DEBUG] [Thread-80395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:46:26.035 [DEBUG] [Thread-80395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:46:26.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:46: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')
2025-12-13T01:46:26.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:46:26.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:46:26.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:46:26.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:46:26.070 [DEBUG] [Thread-80395] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:46:30.236 [DEBUG] [Thread-80397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:31.239 [DEBUG] [Thread-80398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:45.279 [DEBUG] [Thread-80399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:46:56.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:46:56.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:46:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:46:56.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 46, 34), 1.95, 87.25, 0.0, 32.25, 7.64, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:46:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:46:34
2025-12-13T01:46:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:46:57.063 [DEBUG] [Thread-80400] [transport.py] [_log()] starting thread (client mode): 0xf575e4a0
2025-12-13T01:46:57.063 [DEBUG] [Thread-80400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:46:57.084 [DEBUG] [Thread-80400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:46:57.084 [INFO] [Thread-80400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:46:57.087 [DEBUG] [Thread-80400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:46:57.087 [DEBUG] [Thread-80400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] client lang: <none>
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] server lang: <none>
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] kex follows: False
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:46:57.088 [DEBUG] [Thread-80400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:46:57.089 [DEBUG] [Thread-80400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:46:57.089 [DEBUG] [Thread-80400] [transport.py] [_log()] Compression: none
2025-12-13T01:46:57.089 [DEBUG] [Thread-80400] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:46:57.108 [DEBUG] [Thread-80400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:46:57.109 [DEBUG] [Thread-80400] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:46:57.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:46:57.110 [DEBUG] [Thread-80400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:46:57.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:46:57.113 [DEBUG] [Thread-80400] [transport.py] [_log()] userauth is OK
2025-12-13T01:46:57.113 [DEBUG] [Thread-80400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:46:57.113 [DEBUG] [Thread-80400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:46:57.113 [DEBUG] [Thread-80400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:46:57.113 [DEBUG] [Thread-80400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:46:57.137 [INFO] [Thread-80400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:46:57.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:46:57.817 [DEBUG] [Thread-80400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:46:57.817 [DEBUG] [Thread-80400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:46:57.818 [DEBUG] [Thread-80400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:46:57.858 [DEBUG] [Thread-80400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:46:57.858 [DEBUG] [Thread-80400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:46:57.862 [DEBUG] [Thread-80400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:46:57.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:46:57.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:46:57.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:46:57.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:46:57.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:46:57.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:46:57.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:46:57.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:46:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:46:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.990373 -999.00   +7.60  28.53     90   +6.10 1 2 1 3 1     0    0 1.33 -7.46 ZnESW 34.3 28.5 308.8 40.4 8.9 -8.9 8.7 -11.3 8.4 -10.4 8.8 -8.3
2025-12-13T01:46:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:46:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:46:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.990373
2025-12-13T01:46:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:46:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:46:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:46:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:46:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:46:57.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:46:34', tmtdew=1.95, humidity=87.25, cloud=0.0, wind=32.25, temperature=7.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:46:08.227', atlas_cloud=2, atlas_rain=1, zp_data=[2.213749999999999, nan, nan, nan, nan, nan, 1.4929999999999994, 1.071250000000001, 1.4004999999999992, nan, nan, nan, nan, nan, 0.9955000000000007, 0.6189999999999998, 1.0532500000000002, nan, nan, nan, nan, nan, 1.1022500000000006, 0.6357499999999998, 0.6129999999999995, 1.3055000000000003, nan, nan, nan, nan, 0.9315000000000024, 0.4110000000000005, 0.6562499999999991], zp_timestamp='2025-12-12T23:43:00')
2025-12-13T01:46:57.885 [DEBUG] [Thread-80400] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:46:57.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:46:57.985 [DEBUG] [Thread-80403] [transport.py] [_log()] starting thread (client mode): 0xf570d600
2025-12-13T01:46:57.985 [DEBUG] [Thread-80403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:46:58.000 [DEBUG] [Thread-80403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:46:58.000 [INFO] [Thread-80403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:46:58.007 [DEBUG] [Thread-80403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:46:58.007 [DEBUG] [Thread-80403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:46:58.007 [DEBUG] [Thread-80403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:46:58.007 [DEBUG] [Thread-80403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] client lang: <none>
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] server lang: <none>
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] kex follows: False
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] Compression: none
2025-12-13T01:46:58.008 [DEBUG] [Thread-80403] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:46:58.065 [DEBUG] [Thread-80403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:46:58.065 [DEBUG] [Thread-80403] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:46:58.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:46:58.066 [DEBUG] [Thread-80403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:46:58.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:46:58.122 [DEBUG] [Thread-80403] [transport.py] [_log()] userauth is OK
2025-12-13T01:46:58.122 [DEBUG] [Thread-80403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:46:58.122 [DEBUG] [Thread-80403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:46:58.122 [DEBUG] [Thread-80403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:46:58.122 [DEBUG] [Thread-80403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:46:58.140 [INFO] [Thread-80403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:46:58.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:46:58.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:46:59.011 [DEBUG] [Thread-80403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:46:59.012 [DEBUG] [Thread-80403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:46:59.060 [DEBUG] [Thread-80403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:46:59.060 [DEBUG] [Thread-80403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:46:59.071 [DEBUG] [Thread-80403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:46:59.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:46:59.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:46:59.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:46:59.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:46:59.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:46:59.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:46:59.109 [DEBUG] [Thread-80403] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:47:00.304 [DEBUG] [Thread-80405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:47:15.357 [DEBUG] [Thread-80406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:47:18.410 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:47:18.411 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:47:29.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:47:29.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:47:29.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:47:29.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 47, 6), 1.95, 87.25, 0.0, 32.32, 7.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:47:29.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:47:06
2025-12-13T01:47:29.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:47:30.109 [DEBUG] [Thread-80407] [transport.py] [_log()] starting thread (client mode): 0xf81e5ab0
2025-12-13T01:47:30.109 [DEBUG] [Thread-80407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:47:30.129 [DEBUG] [Thread-80407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:47:30.129 [INFO] [Thread-80407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] client lang: <none>
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] server lang: <none>
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] kex follows: False
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:47:30.132 [DEBUG] [Thread-80407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:47:30.133 [DEBUG] [Thread-80407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:47:30.133 [DEBUG] [Thread-80407] [transport.py] [_log()] Compression: none
2025-12-13T01:47:30.133 [DEBUG] [Thread-80407] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:47:30.150 [DEBUG] [Thread-80407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:47:30.150 [DEBUG] [Thread-80407] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:47:30.151 [DEBUG] [Thread-80407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:47:30.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:47:30.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:47:30.152 [DEBUG] [Thread-80407] [transport.py] [_log()] userauth is OK
2025-12-13T01:47:30.153 [DEBUG] [Thread-80407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:47:30.153 [DEBUG] [Thread-80407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:47:30.153 [DEBUG] [Thread-80407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:47:30.153 [DEBUG] [Thread-80407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:47:30.178 [INFO] [Thread-80407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:47:30.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:47:30.383 [DEBUG] [Thread-80409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:47:30.796 [DEBUG] [Thread-80407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:47:30.796 [DEBUG] [Thread-80407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:47:30.796 [DEBUG] [Thread-80407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:47:30.837 [DEBUG] [Thread-80407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:47:30.837 [DEBUG] [Thread-80407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:47:30.840 [DEBUG] [Thread-80407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:47:30.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:47:30.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:47:30.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:47:30.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:47:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:47:30.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:47:30.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:47:30.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:47:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:47:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.991068 -999.00   +7.60  34.13     90   +6.20 1 3 2 3 1     0    0 1.35 -7.27 Z.EsW 30.1 34.1 312.4 43.6 8.9 -4.9 8.6 -3.9 8.4 -3.8 8.8 -3.7
2025-12-13T01:47:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:47:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:47:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.991068
2025-12-13T01:47:30.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:47:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:47:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:47:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:47:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:47:30.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:47:06', tmtdew=1.95, humidity=87.25, cloud=0.0, wind=32.32, temperature=7.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:47:08.275', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:47:30.862 [DEBUG] [Thread-80407] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:47:30.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:47:30.954 [DEBUG] [Thread-80411] [transport.py] [_log()] starting thread (client mode): 0xf5741d20
2025-12-13T01:47:30.955 [DEBUG] [Thread-80411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:47:30.971 [DEBUG] [Thread-80411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:47:30.971 [INFO] [Thread-80411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:47:30.979 [DEBUG] [Thread-80411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:47:30.979 [DEBUG] [Thread-80411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:47:30.979 [DEBUG] [Thread-80411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:47:30.979 [DEBUG] [Thread-80411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:47:30.979 [DEBUG] [Thread-80411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:47:30.979 [DEBUG] [Thread-80411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] client lang: <none>
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] server lang: <none>
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] kex follows: False
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] Compression: none
2025-12-13T01:47:30.980 [DEBUG] [Thread-80411] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:47:31.040 [DEBUG] [Thread-80411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:47:31.040 [DEBUG] [Thread-80411] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:47:31.041 [DEBUG] [Thread-80411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:47:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:47:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:47:31.098 [DEBUG] [Thread-80411] [transport.py] [_log()] userauth is OK
2025-12-13T01:47:31.098 [DEBUG] [Thread-80411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:47:31.099 [DEBUG] [Thread-80411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:47:31.099 [DEBUG] [Thread-80411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:47:31.099 [DEBUG] [Thread-80411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:47:31.118 [INFO] [Thread-80411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:47:31.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:47:31.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:47:31.312 [DEBUG] [Thread-80413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:47:31.944 [DEBUG] [Thread-80411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:47:31.944 [DEBUG] [Thread-80411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:47:31.992 [DEBUG] [Thread-80411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:47:31.992 [DEBUG] [Thread-80411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:47:32.000 [DEBUG] [Thread-80411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:47:32.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:47:32.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:47:32.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:47:32.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:47:32.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:47:32.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:47:32.034 [DEBUG] [Thread-80411] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:47:45.412 [DEBUG] [Thread-80414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:00.468 [DEBUG] [Thread-80415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:02.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:48:02.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:48:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:48:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 47, 38), 1.92, 87.15, 0.0, 33.7, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:48:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:47:38
2025-12-13T01:48:02.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:48:03.027 [DEBUG] [Thread-80416] [transport.py] [_log()] starting thread (client mode): 0xf572d990
2025-12-13T01:48:03.027 [DEBUG] [Thread-80416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:48:03.046 [DEBUG] [Thread-80416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:48:03.046 [INFO] [Thread-80416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] client lang: <none>
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] server lang: <none>
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] kex follows: False
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] Compression: none
2025-12-13T01:48:03.050 [DEBUG] [Thread-80416] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:48:03.064 [DEBUG] [Thread-80416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:48:03.064 [DEBUG] [Thread-80416] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:48:03.064 [DEBUG] [Thread-80416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:48:03.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:48:03.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:48:03.074 [DEBUG] [Thread-80416] [transport.py] [_log()] userauth is OK
2025-12-13T01:48:03.074 [DEBUG] [Thread-80416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:48:03.074 [DEBUG] [Thread-80416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:48:03.074 [DEBUG] [Thread-80416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:48:03.074 [DEBUG] [Thread-80416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:48:03.100 [INFO] [Thread-80416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:48:03.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:48:03.736 [DEBUG] [Thread-80416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:48:03.736 [DEBUG] [Thread-80416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:48:03.736 [DEBUG] [Thread-80416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:48:03.778 [DEBUG] [Thread-80416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:48:03.778 [DEBUG] [Thread-80416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:48:03.780 [DEBUG] [Thread-80416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:48:03.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:48:03.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:48:03.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:48:03.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:48:03.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:48:03.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:48:03.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:48:03.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.991415 -999.00   +7.50  39.60     90   +6.10 1 3 2 3 1     0    0 1.35 -6.35 .N.s. 38.3 39.6 306.4 43.7 8.9 -4.0 8.7 -4.1 8.4 -3.4 8.8 -3.2
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.991415
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:48:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:47:38', tmtdew=1.92, humidity=87.15, cloud=0.0, wind=33.7, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:47:38.256', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:48:03.802 [DEBUG] [Thread-80416] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:48:03.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:48:03.895 [DEBUG] [Thread-80419] [transport.py] [_log()] starting thread (client mode): 0xf572c7c0
2025-12-13T01:48:03.895 [DEBUG] [Thread-80419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:48:03.910 [DEBUG] [Thread-80419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:48:03.910 [INFO] [Thread-80419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:48:03.917 [DEBUG] [Thread-80419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:48:03.917 [DEBUG] [Thread-80419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] client lang: <none>
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] server lang: <none>
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] kex follows: False
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] Compression: none
2025-12-13T01:48:03.918 [DEBUG] [Thread-80419] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:48:03.973 [DEBUG] [Thread-80419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:48:03.973 [DEBUG] [Thread-80419] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:48:03.973 [DEBUG] [Thread-80419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:48:03.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:48:03.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:48:04.030 [DEBUG] [Thread-80419] [transport.py] [_log()] userauth is OK
2025-12-13T01:48:04.030 [DEBUG] [Thread-80419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:48:04.030 [DEBUG] [Thread-80419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:48:04.030 [DEBUG] [Thread-80419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:48:04.030 [DEBUG] [Thread-80419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:48:04.044 [INFO] [Thread-80419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:48:04.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:48:04.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:48:04.942 [DEBUG] [Thread-80419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:48:04.942 [DEBUG] [Thread-80419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:48:04.989 [DEBUG] [Thread-80419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:48:04.990 [DEBUG] [Thread-80419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:48:04.998 [DEBUG] [Thread-80419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:48:05.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:48:05.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:48:05.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:48:05.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:48:05.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:48:05.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:48:05.031 [DEBUG] [Thread-80419] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:48:15.499 [DEBUG] [Thread-80421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:18.614 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:18.615 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:30.542 [DEBUG] [Thread-80422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:31.384 [DEBUG] [Thread-80423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:48:35.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:48:35.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:48: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
2025-12-13T01:48:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 48, 10), 1.93, 87.12, 0.0, 32.45, 7.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:48:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:48:10
2025-12-13T01:48:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:48:36.002 [DEBUG] [Thread-80424] [transport.py] [_log()] starting thread (client mode): 0xf81e6260
2025-12-13T01:48:36.002 [DEBUG] [Thread-80424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:48:36.022 [DEBUG] [Thread-80424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:48:36.022 [INFO] [Thread-80424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] client lang: <none>
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] server lang: <none>
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] kex follows: False
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:48:36.026 [DEBUG] [Thread-80424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:48:36.027 [DEBUG] [Thread-80424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:48:36.027 [DEBUG] [Thread-80424] [transport.py] [_log()] Compression: none
2025-12-13T01:48:36.027 [DEBUG] [Thread-80424] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:48:36.045 [DEBUG] [Thread-80424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:48:36.046 [DEBUG] [Thread-80424] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:48:36.046 [DEBUG] [Thread-80424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:48:36.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:48:36.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:48:36.048 [DEBUG] [Thread-80424] [transport.py] [_log()] userauth is OK
2025-12-13T01:48:36.049 [DEBUG] [Thread-80424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:48:36.049 [DEBUG] [Thread-80424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:48:36.049 [DEBUG] [Thread-80424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:48:36.049 [DEBUG] [Thread-80424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:48:36.085 [INFO] [Thread-80424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:48:36.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:48:36.712 [DEBUG] [Thread-80424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:48:36.712 [DEBUG] [Thread-80424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:48:36.712 [DEBUG] [Thread-80424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:48:36.753 [DEBUG] [Thread-80424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:48:36.753 [DEBUG] [Thread-80424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:48:36.756 [DEBUG] [Thread-80424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:48:36.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:48:36.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:48:36.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:48:36.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:48:36.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:48:36.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:48:36.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:48:36.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:48:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:48:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.991762 -999.00   +7.50  40.56     91   +6.10 1 3 2 3 1     0    0 1.36 -6.48 .NE.. 37.6 40.6 296.8 46.0 8.9 -3.3 8.7 -3.4 8.4 -2.9 8.8 -2.6
2025-12-13T01:48:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:48:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:48:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.991762
2025-12-13T01:48:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:48:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:48:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:48:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:48:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:48:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:48:10', tmtdew=1.93, humidity=87.12, cloud=0.0, wind=32.45, temperature=7.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:48:08.237', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:48:36.780 [DEBUG] [Thread-80424] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:48:36.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:48:36.889 [DEBUG] [Thread-80427] [transport.py] [_log()] starting thread (client mode): 0xf5741090
2025-12-13T01:48:36.889 [DEBUG] [Thread-80427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:48:36.903 [DEBUG] [Thread-80427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:48:36.903 [INFO] [Thread-80427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:48:36.910 [DEBUG] [Thread-80427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:48:36.910 [DEBUG] [Thread-80427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:48:36.910 [DEBUG] [Thread-80427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] client lang: <none>
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] server lang: <none>
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] kex follows: False
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] Compression: none
2025-12-13T01:48:36.911 [DEBUG] [Thread-80427] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:48:36.973 [DEBUG] [Thread-80427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:48:36.974 [DEBUG] [Thread-80427] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:48:36.974 [DEBUG] [Thread-80427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:48:36.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:48:36.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:48:37.030 [DEBUG] [Thread-80427] [transport.py] [_log()] userauth is OK
2025-12-13T01:48:37.031 [DEBUG] [Thread-80427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:48:37.031 [DEBUG] [Thread-80427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:48:37.031 [DEBUG] [Thread-80427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:48:37.031 [DEBUG] [Thread-80427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:48:37.050 [INFO] [Thread-80427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:48:37.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:48:37.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:48:37.864 [DEBUG] [Thread-80427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:48:37.864 [DEBUG] [Thread-80427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:48:37.912 [DEBUG] [Thread-80427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:48:37.912 [DEBUG] [Thread-80427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:48:37.921 [DEBUG] [Thread-80427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:48:37.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:48:37.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:48:37.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
2025-12-13T01:48:37.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:48:37.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:48:37.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:48:37.955 [DEBUG] [Thread-80427] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:48:45.569 [DEBUG] [Thread-80429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:00.605 [DEBUG] [Thread-80430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:07.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:49:07.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:49:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:49:08.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 48, 42), 1.93, 87.07, 0.0, 32.15, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:49:08.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:48:42
2025-12-13T01:49:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:49:08.926 [DEBUG] [Thread-80431] [transport.py] [_log()] starting thread (client mode): 0xf5701210
2025-12-13T01:49:08.926 [DEBUG] [Thread-80431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:49:08.946 [DEBUG] [Thread-80431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:49:08.946 [INFO] [Thread-80431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] client lang: <none>
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] server lang: <none>
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] kex follows: False
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:49:08.950 [DEBUG] [Thread-80431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:49:08.951 [DEBUG] [Thread-80431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:49:08.951 [DEBUG] [Thread-80431] [transport.py] [_log()] Compression: none
2025-12-13T01:49:08.951 [DEBUG] [Thread-80431] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:49:08.967 [DEBUG] [Thread-80431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:49:08.967 [DEBUG] [Thread-80431] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:49:08.968 [DEBUG] [Thread-80431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:49:08.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:49:08.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:49:08.969 [DEBUG] [Thread-80431] [transport.py] [_log()] userauth is OK
2025-12-13T01:49:08.970 [DEBUG] [Thread-80431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:49:08.970 [DEBUG] [Thread-80431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:49:08.970 [DEBUG] [Thread-80431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:49:08.970 [DEBUG] [Thread-80431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:49:08.993 [INFO] [Thread-80431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:49:08.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:49:09.599 [DEBUG] [Thread-80431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:49:09.599 [DEBUG] [Thread-80431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:49:09.600 [DEBUG] [Thread-80431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:49:09.640 [DEBUG] [Thread-80431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:49:09.640 [DEBUG] [Thread-80431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:49:09.642 [DEBUG] [Thread-80431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:49:09.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:49:09.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:49:09.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:49:09.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:49:09.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:49:09.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:49:09.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:49:09.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:49:09.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:49:09.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.992109 -999.00   +7.50  33.54     91   +6.10 1 3 2 3 1     0    0 1.32 -7.28 .NE.. 32.1 33.5 303.4 53.1 8.9 -2.8 8.7 -3.1 8.4 -2.6 8.8 -2.4
2025-12-13T01:49:09.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:49:09.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:49:09.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.992109
2025-12-13T01:49:09.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:49:09.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:49:09.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:49:09.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:49:09.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:49:09.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:48:42', tmtdew=1.93, humidity=87.07, cloud=0.0, wind=32.15, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:48:38.218', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:49:09.666 [DEBUG] [Thread-80431] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:49:09.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:49:09.763 [DEBUG] [Thread-80434] [transport.py] [_log()] starting thread (client mode): 0xf813fb50
2025-12-13T01:49:09.763 [DEBUG] [Thread-80434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:49:09.780 [DEBUG] [Thread-80434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:49:09.780 [INFO] [Thread-80434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:49:09.788 [DEBUG] [Thread-80434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] client lang: <none>
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] server lang: <none>
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] kex follows: False
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] Compression: none
2025-12-13T01:49:09.789 [DEBUG] [Thread-80434] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:49:09.846 [DEBUG] [Thread-80434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:49:09.847 [DEBUG] [Thread-80434] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:49:09.847 [DEBUG] [Thread-80434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:49:09.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:49:09.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:49:09.902 [DEBUG] [Thread-80434] [transport.py] [_log()] userauth is OK
2025-12-13T01:49:09.903 [DEBUG] [Thread-80434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:49:09.903 [DEBUG] [Thread-80434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:49:09.903 [DEBUG] [Thread-80434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:49:09.903 [DEBUG] [Thread-80434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:49:09.923 [INFO] [Thread-80434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:49:09.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:49:09.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:49:10.753 [DEBUG] [Thread-80434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:49:10.753 [DEBUG] [Thread-80434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:49:10.801 [DEBUG] [Thread-80434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:49:10.801 [DEBUG] [Thread-80434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:49:10.810 [DEBUG] [Thread-80434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:49:10.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:49:10.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:49:10.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:49:10.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:49:10.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:49:10.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:49:10.852 [DEBUG] [Thread-80434] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:49:15.632 [DEBUG] [Thread-80436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:18.817 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:18.818 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:30.669 [DEBUG] [Thread-80437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:31.458 [DEBUG] [Thread-80438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:49:40.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:49:40.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:49:40.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:49:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 49, 14), 1.93, 87.1, 0.0, 32.45, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:49:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:49:14
2025-12-13T01:49:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:49:41.822 [DEBUG] [Thread-80439] [transport.py] [_log()] starting thread (client mode): 0xf81883a0
2025-12-13T01:49:41.822 [DEBUG] [Thread-80439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:49:41.846 [DEBUG] [Thread-80439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:49:41.846 [INFO] [Thread-80439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] client lang: <none>
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] server lang: <none>
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] kex follows: False
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:49:41.850 [DEBUG] [Thread-80439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:49:41.851 [DEBUG] [Thread-80439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:49:41.851 [DEBUG] [Thread-80439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:49:41.851 [DEBUG] [Thread-80439] [transport.py] [_log()] Compression: none
2025-12-13T01:49:41.851 [DEBUG] [Thread-80439] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:49:41.868 [DEBUG] [Thread-80439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:49:41.869 [DEBUG] [Thread-80439] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:49:41.870 [DEBUG] [Thread-80439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:49:41.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:49:41.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:49:41.872 [DEBUG] [Thread-80439] [transport.py] [_log()] userauth is OK
2025-12-13T01:49:41.872 [DEBUG] [Thread-80439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:49:41.872 [DEBUG] [Thread-80439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:49:41.872 [DEBUG] [Thread-80439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:49:41.872 [DEBUG] [Thread-80439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:49:41.911 [INFO] [Thread-80439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:49:41.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:49:42.546 [DEBUG] [Thread-80439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:49:42.546 [DEBUG] [Thread-80439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:49:42.547 [DEBUG] [Thread-80439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:49:42.588 [DEBUG] [Thread-80439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:49:42.588 [DEBUG] [Thread-80439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:49:42.590 [DEBUG] [Thread-80439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:49:42.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:49:42.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:49:42.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:49:42.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:49:42.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:49:42.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:49:42.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:49:42.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:49:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:49:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.992457 -999.00   +7.40  44.78     91   +6.10 1 3 2 3 1     0    0 1.28 -7.77 ----- 42.9 44.8 300.0 51.0 8.9 -3.3 8.7 -3.2 8.4 -3.2 8.8 -2.8
2025-12-13T01:49:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:49:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:49:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.992457
2025-12-13T01:49:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:49:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:49:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:49:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:49:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:49:42.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:49:14', tmtdew=1.93, humidity=87.1, cloud=0.0, wind=32.45, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:49:08.285', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:49:42.615 [DEBUG] [Thread-80439] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:49:42.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:49:42.714 [DEBUG] [Thread-80442] [transport.py] [_log()] starting thread (client mode): 0xf5701db0
2025-12-13T01:49:42.714 [DEBUG] [Thread-80442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:49:42.728 [DEBUG] [Thread-80442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:49:42.728 [INFO] [Thread-80442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:49:42.735 [DEBUG] [Thread-80442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:49:42.735 [DEBUG] [Thread-80442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:49:42.735 [DEBUG] [Thread-80442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:49:42.735 [DEBUG] [Thread-80442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:42.735 [DEBUG] [Thread-80442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] client lang: <none>
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] server lang: <none>
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] kex follows: False
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] Compression: none
2025-12-13T01:49:42.736 [DEBUG] [Thread-80442] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:49:42.794 [DEBUG] [Thread-80442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:49:42.795 [DEBUG] [Thread-80442] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:49:42.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:49:42.795 [DEBUG] [Thread-80442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:49:42.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:49:42.851 [DEBUG] [Thread-80442] [transport.py] [_log()] userauth is OK
2025-12-13T01:49:42.851 [DEBUG] [Thread-80442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:49:42.851 [DEBUG] [Thread-80442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:49:42.851 [DEBUG] [Thread-80442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:49:42.851 [DEBUG] [Thread-80442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:49:42.873 [INFO] [Thread-80442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:49:42.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:49:42.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:49:43.664 [DEBUG] [Thread-80442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:49:43.665 [DEBUG] [Thread-80442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:49:43.713 [DEBUG] [Thread-80442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:49:43.713 [DEBUG] [Thread-80442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:49:43.721 [DEBUG] [Thread-80442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:49:43.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:49:43.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:49:43.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:49:43.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:49:43.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:49:43.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:49:43.757 [DEBUG] [Thread-80442] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:49:45.700 [DEBUG] [Thread-80444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:00.748 [DEBUG] [Thread-80445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:13.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:50:13.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:50:13.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:50:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 49, 46), 1.92, 87.65, 0.0, 33.38, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:50:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:49:46
2025-12-13T01:50:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:50:14.740 [DEBUG] [Thread-80446] [transport.py] [_log()] starting thread (client mode): 0xf57cbd60
2025-12-13T01:50:14.740 [DEBUG] [Thread-80446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:50:14.761 [DEBUG] [Thread-80446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:50:14.761 [INFO] [Thread-80446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] client lang: <none>
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] server lang: <none>
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] kex follows: False
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:50:14.765 [DEBUG] [Thread-80446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:50:14.766 [DEBUG] [Thread-80446] [transport.py] [_log()] Compression: none
2025-12-13T01:50:14.766 [DEBUG] [Thread-80446] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:50:14.782 [DEBUG] [Thread-80446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:50:14.783 [DEBUG] [Thread-80446] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:50:14.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:50:14.783 [DEBUG] [Thread-80446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:50:14.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:50:14.785 [DEBUG] [Thread-80446] [transport.py] [_log()] userauth is OK
2025-12-13T01:50:14.785 [DEBUG] [Thread-80446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:50:14.786 [DEBUG] [Thread-80446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:50:14.786 [DEBUG] [Thread-80446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:50:14.786 [DEBUG] [Thread-80446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:50:14.809 [INFO] [Thread-80446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:50:14.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:50:15.449 [DEBUG] [Thread-80446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:50:15.449 [DEBUG] [Thread-80446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:50:15.449 [DEBUG] [Thread-80446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:50:15.490 [DEBUG] [Thread-80446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:50:15.490 [DEBUG] [Thread-80446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:50:15.493 [DEBUG] [Thread-80446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:50:15.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:50:15.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:50:15.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:50:15.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:50:15.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:50:15.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:50:15.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:50:15.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:50:15.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:50:15.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.992804 -999.00   +7.40  30.18     91   +6.10 1 3 2 3 1     0    0 1.26 -8.76 ----- 37.3 30.2 305.0 44.9 9.0 -3.2 8.7 -3.4 8.4 -3.6 8.8 -2.7
2025-12-13T01:50:15.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:50:15.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:50:15.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.992804
2025-12-13T01:50:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:50:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:50:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:50:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:50:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:50:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:49:46', tmtdew=1.92, humidity=87.65, cloud=0.0, wind=33.38, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:49:38.266', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:50:15.519 [DEBUG] [Thread-80446] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:50:15.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:50:15.618 [DEBUG] [Thread-80449] [transport.py] [_log()] starting thread (client mode): 0xf570cbb0
2025-12-13T01:50:15.618 [DEBUG] [Thread-80449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:50:15.633 [DEBUG] [Thread-80449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:50:15.633 [INFO] [Thread-80449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:50:15.641 [DEBUG] [Thread-80449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:50:15.641 [DEBUG] [Thread-80449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:50:15.641 [DEBUG] [Thread-80449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:50:15.641 [DEBUG] [Thread-80449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:15.641 [DEBUG] [Thread-80449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] client lang: <none>
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] server lang: <none>
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] kex follows: False
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] Compression: none
2025-12-13T01:50:15.642 [DEBUG] [Thread-80449] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:50:15.698 [DEBUG] [Thread-80449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:50:15.699 [DEBUG] [Thread-80449] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:50:15.699 [DEBUG] [Thread-80449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:50:15.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:50:15.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:50:15.755 [DEBUG] [Thread-80449] [transport.py] [_log()] userauth is OK
2025-12-13T01:50:15.755 [DEBUG] [Thread-80449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:50:15.755 [DEBUG] [Thread-80449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:50:15.755 [DEBUG] [Thread-80449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:50:15.755 [DEBUG] [Thread-80449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:50:15.774 [INFO] [Thread-80449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:50:15.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:50:15.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:50:15.776 [DEBUG] [Thread-80451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:16.610 [DEBUG] [Thread-80449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:50:16.610 [DEBUG] [Thread-80449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:50:16.658 [DEBUG] [Thread-80449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:50:16.658 [DEBUG] [Thread-80449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:50:16.667 [DEBUG] [Thread-80449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:50:16.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:50:16.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:50:16.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:50:16.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:50:16.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:50:16.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:50:16.701 [DEBUG] [Thread-80449] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:50:19.022 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:19.023 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:30.817 [DEBUG] [Thread-80452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:31.531 [DEBUG] [Thread-80453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:45.845 [DEBUG] [Thread-80454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:50:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:50:46.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:50:46.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:50:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 50, 18), 1.93, 87.6, 0.0, 32.23, 7.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:50:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:50:18
2025-12-13T01:50:47.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:50:47.691 [DEBUG] [Thread-80455] [transport.py] [_log()] starting thread (client mode): 0xf818ac50
2025-12-13T01:50:47.691 [DEBUG] [Thread-80455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:50:47.711 [DEBUG] [Thread-80455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:50:47.712 [INFO] [Thread-80455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] client lang: <none>
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] server lang: <none>
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] kex follows: False
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] Compression: none
2025-12-13T01:50:47.715 [DEBUG] [Thread-80455] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:50:47.732 [DEBUG] [Thread-80455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:50:47.733 [DEBUG] [Thread-80455] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:50:47.733 [DEBUG] [Thread-80455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:50:47.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:50:47.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:50:47.777 [DEBUG] [Thread-80455] [transport.py] [_log()] userauth is OK
2025-12-13T01:50:47.777 [DEBUG] [Thread-80455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:50:47.777 [DEBUG] [Thread-80455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:50:47.777 [DEBUG] [Thread-80455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:50:47.777 [DEBUG] [Thread-80455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:50:47.809 [INFO] [Thread-80455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:50:47.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:50:48.412 [DEBUG] [Thread-80455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:50:48.413 [DEBUG] [Thread-80455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:50:48.413 [DEBUG] [Thread-80455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:50:48.454 [DEBUG] [Thread-80455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:50:48.454 [DEBUG] [Thread-80455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:50:48.457 [DEBUG] [Thread-80455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:50:48.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:50:48.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:50:48.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:50:48.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:50:48.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:50:48.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:50:48.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:50:48.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:50:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:50:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.993498 -999.00   +7.40  37.33     90   +6.00 1 3 2 3 1     0    0 1.22 -9.84 ...SW 35.4 37.3 314.2 45.2 8.9 -9.2 8.7 -8.1 8.3 -6.4 8.8 -6.1
2025-12-13T01:50:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:50:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:50:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.993498
2025-12-13T01:50:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:50:48.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:50:48.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:50:48.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:50:48.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:50:48.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:50:18', tmtdew=1.93, humidity=87.6, cloud=0.0, wind=32.23, temperature=7.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:50:38.227', atlas_cloud=3, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:50:48.478 [DEBUG] [Thread-80455] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:50:48.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:50:48.575 [DEBUG] [Thread-80458] [transport.py] [_log()] starting thread (client mode): 0xf572fe50
2025-12-13T01:50:48.575 [DEBUG] [Thread-80458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:50:48.590 [DEBUG] [Thread-80458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:50:48.590 [INFO] [Thread-80458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:50:48.597 [DEBUG] [Thread-80458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:50:48.597 [DEBUG] [Thread-80458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:50:48.597 [DEBUG] [Thread-80458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] client lang: <none>
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] server lang: <none>
2025-12-13T01:50:48.598 [DEBUG] [Thread-80458] [transport.py] [_log()] kex follows: False
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] Compression: none
2025-12-13T01:50:48.599 [DEBUG] [Thread-80458] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:50:48.660 [DEBUG] [Thread-80458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:50:48.660 [DEBUG] [Thread-80458] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:50:48.661 [DEBUG] [Thread-80458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:50:48.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:50:48.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:50:48.715 [DEBUG] [Thread-80458] [transport.py] [_log()] userauth is OK
2025-12-13T01:50:48.715 [DEBUG] [Thread-80458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:50:48.715 [DEBUG] [Thread-80458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:50:48.716 [DEBUG] [Thread-80458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:50:48.716 [DEBUG] [Thread-80458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:50:48.735 [INFO] [Thread-80458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:50:48.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:50:48.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:50:49.630 [DEBUG] [Thread-80458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:50:49.630 [DEBUG] [Thread-80458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:50:49.678 [DEBUG] [Thread-80458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:50:49.678 [DEBUG] [Thread-80458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:50:49.687 [DEBUG] [Thread-80458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:50:49.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:50:49.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:50:49.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:50:49.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:50:49.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:50:49.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:50:49.721 [DEBUG] [Thread-80458] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:51:00.874 [DEBUG] [Thread-80460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:15.918 [DEBUG] [Thread-80461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:19.234 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:19.235 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:19.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:51:19.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:51:19.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:51:20.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 50, 50), 1.99, 87.55, 0.0, 32.82, 7.62, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:51:20.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:50:50
2025-12-13T01:51:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:51:20.751 [DEBUG] [Thread-80462] [transport.py] [_log()] starting thread (client mode): 0xf57cbd60
2025-12-13T01:51:20.751 [DEBUG] [Thread-80462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:51:20.771 [DEBUG] [Thread-80462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:51:20.771 [INFO] [Thread-80462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:20.774 [DEBUG] [Thread-80462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] client lang: <none>
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] server lang: <none>
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] kex follows: False
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] Compression: none
2025-12-13T01:51:20.775 [DEBUG] [Thread-80462] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:51:20.790 [DEBUG] [Thread-80462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:51:20.790 [DEBUG] [Thread-80462] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:51:20.790 [DEBUG] [Thread-80462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:51:20.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:51:20.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:51:20.791 [DEBUG] [Thread-80462] [transport.py] [_log()] userauth is OK
2025-12-13T01:51:20.791 [DEBUG] [Thread-80462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:51:20.791 [DEBUG] [Thread-80462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:51:20.791 [DEBUG] [Thread-80462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:51:20.791 [DEBUG] [Thread-80462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:51:20.804 [INFO] [Thread-80462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:51:20.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:51:21.477 [DEBUG] [Thread-80462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:51:21.477 [DEBUG] [Thread-80462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:51:21.477 [DEBUG] [Thread-80462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:51:21.519 [DEBUG] [Thread-80462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:51:21.519 [DEBUG] [Thread-80462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:51:21.521 [DEBUG] [Thread-80462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:51:21.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:51:21.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:51:21.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:51:21.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:51:21.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:51:21.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:51:21.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.993846 -999.00   +7.40  29.92     90   +5.90 1 2 1 3 1     0    0 1.23 -9.41 ...SW 35.3 29.9 311.0 37.9 8.9 -8.5 8.7 -11.5 8.3 -12.2 8.8 -9.1
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.993846
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:51:21.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:50:50', tmtdew=1.99, humidity=87.55, cloud=0.0, wind=32.82, temperature=7.62, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:51:08.294', atlas_cloud=2, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:51:21.541 [DEBUG] [Thread-80462] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:51:21.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:51:21.628 [DEBUG] [Thread-80465] [transport.py] [_log()] starting thread (client mode): 0xf57cbdc0
2025-12-13T01:51:21.628 [DEBUG] [Thread-80465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:51:21.643 [DEBUG] [Thread-80465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:51:21.643 [INFO] [Thread-80465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:21.650 [DEBUG] [Thread-80465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] client lang: <none>
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] server lang: <none>
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] kex follows: False
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] Compression: none
2025-12-13T01:51:21.651 [DEBUG] [Thread-80465] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:51:21.705 [DEBUG] [Thread-80465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:51:21.706 [DEBUG] [Thread-80465] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:51:21.706 [DEBUG] [Thread-80465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:51:21.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:51:21.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:51:21.763 [DEBUG] [Thread-80465] [transport.py] [_log()] userauth is OK
2025-12-13T01:51:21.763 [DEBUG] [Thread-80465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:51:21.763 [DEBUG] [Thread-80465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:51:21.763 [DEBUG] [Thread-80465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:51:21.763 [DEBUG] [Thread-80465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:51:21.777 [INFO] [Thread-80465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:51:21.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:51:21.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:51:22.639 [DEBUG] [Thread-80465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:51:22.639 [DEBUG] [Thread-80465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:51:22.687 [DEBUG] [Thread-80465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:51:22.687 [DEBUG] [Thread-80465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:51:22.695 [DEBUG] [Thread-80465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:51:22.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:51:22.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:51:22.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:51:22.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:51:22.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:51:22.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:51:22.726 [DEBUG] [Thread-80465] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:51:30.945 [DEBUG] [Thread-80467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:31.609 [DEBUG] [Thread-80468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:45.998 [DEBUG] [Thread-80469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:51:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:51:52.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:51:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:51:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 51, 22), 1.97, 87.64, 0.0, 32.01, 7.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:51:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:51:22
2025-12-13T01:51:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:51:53.716 [DEBUG] [Thread-80470] [transport.py] [_log()] starting thread (client mode): 0xf818b790
2025-12-13T01:51:53.717 [DEBUG] [Thread-80470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:51:53.736 [DEBUG] [Thread-80470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:51:53.737 [INFO] [Thread-80470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] client lang: <none>
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] server lang: <none>
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] kex follows: False
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] Compression: none
2025-12-13T01:51:53.740 [DEBUG] [Thread-80470] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:51:53.755 [DEBUG] [Thread-80470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:51:53.755 [DEBUG] [Thread-80470] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:51:53.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:51:53.756 [DEBUG] [Thread-80470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:51:53.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:51:53.758 [DEBUG] [Thread-80470] [transport.py] [_log()] userauth is OK
2025-12-13T01:51:53.759 [DEBUG] [Thread-80470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:51:53.759 [DEBUG] [Thread-80470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:51:53.759 [DEBUG] [Thread-80470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:51:53.759 [DEBUG] [Thread-80470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:51:53.795 [INFO] [Thread-80470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:51:53.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:51:54.410 [DEBUG] [Thread-80470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:51:54.410 [DEBUG] [Thread-80470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:51:54.410 [DEBUG] [Thread-80470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:51:54.451 [DEBUG] [Thread-80470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:51:54.452 [DEBUG] [Thread-80470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:51:54.454 [DEBUG] [Thread-80470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:51:54.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:51:54.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:51:54.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:51:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:51:54.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:51:54.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:51:54.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:51:54.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:51:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:51:54.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.994193 -999.00   +7.40  36.89     90   +5.90 1 2 2 3 1     0    0 1.22 -9.11 ...SW 36.2 36.9 313.0 49.8 8.8 -19.5 8.6 -16.8 8.3 -12.7 8.8 -14.5
2025-12-13T01:51:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:51:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:51:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.994193
2025-12-13T01:51:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:51:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:51:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:51:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:51:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:51:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:51:22', tmtdew=1.97, humidity=87.64, cloud=0.0, wind=32.01, temperature=7.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:51:38.275', atlas_cloud=2, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:51:54.478 [DEBUG] [Thread-80470] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:51:54.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:51:54.576 [DEBUG] [Thread-80473] [transport.py] [_log()] starting thread (client mode): 0xf5703070
2025-12-13T01:51:54.576 [DEBUG] [Thread-80473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:51:54.591 [DEBUG] [Thread-80473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:51:54.591 [INFO] [Thread-80473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:51:54.598 [DEBUG] [Thread-80473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] client lang: <none>
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] server lang: <none>
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] kex follows: False
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] Compression: none
2025-12-13T01:51:54.599 [DEBUG] [Thread-80473] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:51:54.655 [DEBUG] [Thread-80473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:51:54.655 [DEBUG] [Thread-80473] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:51:54.655 [DEBUG] [Thread-80473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:51:54.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:51:54.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:51:54.711 [DEBUG] [Thread-80473] [transport.py] [_log()] userauth is OK
2025-12-13T01:51:54.712 [DEBUG] [Thread-80473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:51:54.712 [DEBUG] [Thread-80473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:51:54.712 [DEBUG] [Thread-80473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:51:54.712 [DEBUG] [Thread-80473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:51:54.732 [INFO] [Thread-80473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:51:54.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:51:54.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:51:55.634 [DEBUG] [Thread-80473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:51:55.634 [DEBUG] [Thread-80473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:51:55.682 [DEBUG] [Thread-80473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:51:55.683 [DEBUG] [Thread-80473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:51:55.691 [DEBUG] [Thread-80473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:51:55.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:51: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')
2025-12-13T01:51:55.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:51:55.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:51:55.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:51:55.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:51:55.722 [DEBUG] [Thread-80473] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:52:01.027 [DEBUG] [Thread-80475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:16.062 [DEBUG] [Thread-80476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:19.440 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:19.441 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:52:25.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:52:25.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:52:26.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 51, 54), 1.93, 87.09, 0.0, 31.35, 7.59, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:52:26.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:51:54
2025-12-13T01:52:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:52:26.686 [DEBUG] [Thread-80477] [transport.py] [_log()] starting thread (client mode): 0xf5702e60
2025-12-13T01:52:26.686 [DEBUG] [Thread-80477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:52:26.707 [DEBUG] [Thread-80477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:52:26.707 [INFO] [Thread-80477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:52:26.710 [DEBUG] [Thread-80477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:52:26.710 [DEBUG] [Thread-80477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] client lang: <none>
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] server lang: <none>
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] kex follows: False
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] Compression: none
2025-12-13T01:52:26.711 [DEBUG] [Thread-80477] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:52:26.729 [DEBUG] [Thread-80477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:52:26.729 [DEBUG] [Thread-80477] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:52:26.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:52:26.730 [DEBUG] [Thread-80477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:52:26.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:52:26.732 [DEBUG] [Thread-80477] [transport.py] [_log()] userauth is OK
2025-12-13T01:52:26.732 [DEBUG] [Thread-80477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:52:26.732 [DEBUG] [Thread-80477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:52:26.732 [DEBUG] [Thread-80477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:52:26.733 [DEBUG] [Thread-80477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:52:26.755 [INFO] [Thread-80477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:52:26.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:52:27.339 [DEBUG] [Thread-80477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:52:27.339 [DEBUG] [Thread-80477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:52:27.339 [DEBUG] [Thread-80477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:52:27.380 [DEBUG] [Thread-80477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:52:27.380 [DEBUG] [Thread-80477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:52:27.382 [DEBUG] [Thread-80477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:52:27.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:52:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:52:27.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:52:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:52:27.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:52:27.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:52:27.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.994540 -999.00   +7.30  39.67     90   +5.80 1 2 2 3 1     0    0 1.24 -8.81 z.ESW 41.5 39.7 313.4 57.3 8.8 -18.5 8.6 -22.2 8.2 -20.6 8.6 -17.7
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.994540
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:52:27.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:51:54', tmtdew=1.93, humidity=87.09, cloud=0.0, wind=31.35, temperature=7.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:52:08.256', atlas_cloud=2, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:52:27.399 [DEBUG] [Thread-80477] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:52:27.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:52:27.484 [DEBUG] [Thread-80480] [transport.py] [_log()] starting thread (client mode): 0xf8188dc0
2025-12-13T01:52:27.484 [DEBUG] [Thread-80480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:52:27.499 [DEBUG] [Thread-80480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:52:27.499 [INFO] [Thread-80480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:52:27.506 [DEBUG] [Thread-80480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] client lang: <none>
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] server lang: <none>
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] kex follows: False
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] Compression: none
2025-12-13T01:52:27.507 [DEBUG] [Thread-80480] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:52:27.562 [DEBUG] [Thread-80480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:52:27.562 [DEBUG] [Thread-80480] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:52:27.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:52:27.562 [DEBUG] [Thread-80480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:52:27.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:52:27.619 [DEBUG] [Thread-80480] [transport.py] [_log()] userauth is OK
2025-12-13T01:52:27.619 [DEBUG] [Thread-80480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:52:27.619 [DEBUG] [Thread-80480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:52:27.619 [DEBUG] [Thread-80480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:52:27.619 [DEBUG] [Thread-80480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:52:27.633 [INFO] [Thread-80480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:52:27.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:52:27.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:52:28.504 [DEBUG] [Thread-80480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:52:28.504 [DEBUG] [Thread-80480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:52:28.551 [DEBUG] [Thread-80480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:52:28.552 [DEBUG] [Thread-80480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:52:28.560 [DEBUG] [Thread-80480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:52:28.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:52:28.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:52:28.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:52:28.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:52:28.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:52:28.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:52:28.592 [DEBUG] [Thread-80480] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:52:31.092 [DEBUG] [Thread-80482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:31.686 [DEBUG] [Thread-80483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:46.135 [DEBUG] [Thread-80484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:52:58.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:52:58.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:52:58.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:52:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 52, 26), 1.94, 87.06, 0.0, 30.7, 7.56, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:52:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:52:26
2025-12-13T01:52:59.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:52:59.629 [DEBUG] [Thread-80485] [transport.py] [_log()] starting thread (client mode): 0xf572c0a0
2025-12-13T01:52:59.629 [DEBUG] [Thread-80485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:52:59.643 [DEBUG] [Thread-80485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:52:59.644 [INFO] [Thread-80485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] client lang: <none>
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] server lang: <none>
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] kex follows: False
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] Compression: none
2025-12-13T01:52:59.647 [DEBUG] [Thread-80485] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:52:59.659 [DEBUG] [Thread-80485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:52:59.659 [DEBUG] [Thread-80485] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:52:59.659 [DEBUG] [Thread-80485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:52:59.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:52:59.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:52:59.660 [DEBUG] [Thread-80485] [transport.py] [_log()] userauth is OK
2025-12-13T01:52:59.660 [DEBUG] [Thread-80485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:52:59.660 [DEBUG] [Thread-80485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:52:59.660 [DEBUG] [Thread-80485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:52:59.660 [DEBUG] [Thread-80485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:52:59.677 [INFO] [Thread-80485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:52:59.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:53:00.313 [DEBUG] [Thread-80485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:53:00.313 [DEBUG] [Thread-80485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:53:00.313 [DEBUG] [Thread-80485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:53:00.354 [DEBUG] [Thread-80485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:53:00.355 [DEBUG] [Thread-80485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:53:00.359 [DEBUG] [Thread-80485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:53:00.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:53:00.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:53:00.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:53:00.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:53:00.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:53:00.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:53:00.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.994887 -999.00   +7.30  50.29     90   +5.80 1 2 2 3 1     0    0 1.25 -8.72 z.ESW 43.6 50.3 314.4 55.0 8.8 -10.8 8.5 -14.9 8.2 -13.9 8.6 -9.9
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.994887
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:53:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:52:26', tmtdew=1.94, humidity=87.06, cloud=0.0, wind=30.7, temperature=7.56, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:52:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[0.4867499999999989, 0.1952499999999997, 0.31425000000000125, 0.20149999999999935, 0.4145000000000003, 0.8562500000000011, 1.1494999999999997, 1.2017500000000005, 0.9085000000000001, 0.24099999999999966, 0.24024999999999963, 0.11800000000000033, 0.29299999999999926, 0.8187499999999996, 1.1549999999999994, 1.7289999999999992, 0.8112499999999994, 0.21850000000000058, 0.3034999999999979, 0.16224999999999845, 0.3379999999999992, 1.428749999999999, 1.8832500000000003, nan, 0.9724999999999993, 0.34050000000000047, 0.3752500000000012, 0.5625, 0.6539999999999999, nan, nan, nan, 1.0702500000000006], zp_timestamp='2025-12-12T23:47:00')
2025-12-13T01:53:00.372 [DEBUG] [Thread-80485] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:53:00.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:53:00.458 [DEBUG] [Thread-80488] [transport.py] [_log()] starting thread (client mode): 0xf570f8e0
2025-12-13T01:53:00.458 [DEBUG] [Thread-80488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:53:00.472 [DEBUG] [Thread-80488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:53:00.472 [INFO] [Thread-80488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:53:00.479 [DEBUG] [Thread-80488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:53:00.479 [DEBUG] [Thread-80488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:53:00.479 [DEBUG] [Thread-80488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] client lang: <none>
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] server lang: <none>
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] kex follows: False
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] Compression: none
2025-12-13T01:53:00.480 [DEBUG] [Thread-80488] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:53:00.541 [DEBUG] [Thread-80488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:53:00.541 [DEBUG] [Thread-80488] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:53:00.542 [DEBUG] [Thread-80488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:53:00.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:53:00.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:53:00.599 [DEBUG] [Thread-80488] [transport.py] [_log()] userauth is OK
2025-12-13T01:53:00.599 [DEBUG] [Thread-80488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:53:00.599 [DEBUG] [Thread-80488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:53:00.599 [DEBUG] [Thread-80488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:53:00.599 [DEBUG] [Thread-80488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:53:00.613 [INFO] [Thread-80488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:53:00.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:53:00.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:53:01.166 [DEBUG] [Thread-80490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:53:01.466 [DEBUG] [Thread-80488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:53:01.466 [DEBUG] [Thread-80488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:53:01.514 [DEBUG] [Thread-80488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:53:01.514 [DEBUG] [Thread-80488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:53:01.523 [DEBUG] [Thread-80488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:53:01.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:53:01.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:53:01.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:53:01.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:53:01.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:53:01.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:53:01.557 [DEBUG] [Thread-80488] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:53:16.206 [DEBUG] [Thread-80491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:53:19.645 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:53:19.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:53:31.234 [DEBUG] [Thread-80492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:53:31.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:53:31.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:53:31.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:53:31.760 [DEBUG] [Thread-80493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:53:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 52, 58), 2.03, 87.07, 0.0, 34.28, 7.57, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:53:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:52:58
2025-12-13T01:53:32.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:53:32.590 [DEBUG] [Thread-80494] [transport.py] [_log()] starting thread (client mode): 0xf5772890
2025-12-13T01:53:32.590 [DEBUG] [Thread-80494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:53:32.610 [DEBUG] [Thread-80494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:53:32.610 [INFO] [Thread-80494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] client lang: <none>
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] server lang: <none>
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] kex follows: False
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] Compression: none
2025-12-13T01:53:32.613 [DEBUG] [Thread-80494] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:53:32.627 [DEBUG] [Thread-80494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:53:32.628 [DEBUG] [Thread-80494] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:53:32.628 [DEBUG] [Thread-80494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:53:32.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:53:32.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:53:32.629 [DEBUG] [Thread-80494] [transport.py] [_log()] userauth is OK
2025-12-13T01:53:32.629 [DEBUG] [Thread-80494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:53:32.629 [DEBUG] [Thread-80494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:53:32.629 [DEBUG] [Thread-80494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:53:32.629 [DEBUG] [Thread-80494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:53:32.646 [INFO] [Thread-80494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:53:32.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:53:33.177 [DEBUG] [Thread-80494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:53:33.177 [DEBUG] [Thread-80494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:53:33.177 [DEBUG] [Thread-80494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:53:33.217 [DEBUG] [Thread-80494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:53:33.218 [DEBUG] [Thread-80494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:53:33.220 [DEBUG] [Thread-80494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:53:33.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:53:33.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:53:33.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:53:33.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:53:33.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:53:33.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:53:33.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:53:33.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:53:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:53:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.994887 -999.00   +7.30  50.29     90   +5.80 1 2 2 3 1     0    0 1.25 -8.72 z.ESW 43.6 50.3 314.4 55.0 8.8 -10.8 8.5 -14.9 8.2 -13.9 8.6 -9.9
2025-12-13T01:53:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:53:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:53:33.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.994887
2025-12-13T01:53:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:53:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:53:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:53:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:53:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:53:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:52:58', tmtdew=2.03, humidity=87.07, cloud=0.0, wind=34.28, temperature=7.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:52:38.237', 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, 1.6037499999999998, 1.6954999999999991, 1.5484999999999998, 1.30375, nan, nan, nan, nan, nan, 1.4692499999999988], zp_timestamp='2025-12-12T23:52:00')
2025-12-13T01:53:33.235 [DEBUG] [Thread-80494] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:53:33.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:53:33.336 [DEBUG] [Thread-80497] [transport.py] [_log()] starting thread (client mode): 0xf575d690
2025-12-13T01:53:33.336 [DEBUG] [Thread-80497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:53:33.350 [DEBUG] [Thread-80497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:53:33.350 [INFO] [Thread-80497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] client lang: <none>
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] server lang: <none>
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] kex follows: False
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] Compression: none
2025-12-13T01:53:33.357 [DEBUG] [Thread-80497] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:53:33.415 [DEBUG] [Thread-80497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:53:33.415 [DEBUG] [Thread-80497] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:53:33.416 [DEBUG] [Thread-80497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:53:33.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:53:33.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:53:33.471 [DEBUG] [Thread-80497] [transport.py] [_log()] userauth is OK
2025-12-13T01:53:33.471 [DEBUG] [Thread-80497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:53:33.471 [DEBUG] [Thread-80497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:53:33.471 [DEBUG] [Thread-80497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:53:33.471 [DEBUG] [Thread-80497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:53:33.490 [INFO] [Thread-80497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:53:33.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:53:33.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:53:34.327 [DEBUG] [Thread-80497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:53:34.327 [DEBUG] [Thread-80497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:53:34.375 [DEBUG] [Thread-80497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:53:34.376 [DEBUG] [Thread-80497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:53:34.387 [DEBUG] [Thread-80497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:53:34.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:53:34.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:53:34.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:53:34.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:53:34.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:53:34.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:53:34.421 [DEBUG] [Thread-80497] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:53:46.260 [DEBUG] [Thread-80499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:01.312 [DEBUG] [Thread-80500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:54:04.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:54:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:54:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 53, 30), 2.03, 87.07, 0.0, 32.25, 7.57, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:54:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:53:30
2025-12-13T01:54:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:54:05.425 [DEBUG] [Thread-80501] [transport.py] [_log()] starting thread (client mode): 0xf57737f0
2025-12-13T01:54:05.425 [DEBUG] [Thread-80501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:54:05.447 [DEBUG] [Thread-80501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:54:05.447 [INFO] [Thread-80501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:54:05.451 [DEBUG] [Thread-80501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:54:05.451 [DEBUG] [Thread-80501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:54:05.451 [DEBUG] [Thread-80501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:54:05.451 [DEBUG] [Thread-80501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:05.451 [DEBUG] [Thread-80501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] client lang: <none>
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] server lang: <none>
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] kex follows: False
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:54:05.452 [DEBUG] [Thread-80501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:54:05.453 [DEBUG] [Thread-80501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:54:05.453 [DEBUG] [Thread-80501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:54:05.453 [DEBUG] [Thread-80501] [transport.py] [_log()] Compression: none
2025-12-13T01:54:05.453 [DEBUG] [Thread-80501] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:54:05.473 [DEBUG] [Thread-80501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:54:05.473 [DEBUG] [Thread-80501] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:54:05.474 [DEBUG] [Thread-80501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:54:05.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:54:05.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:54:05.475 [DEBUG] [Thread-80501] [transport.py] [_log()] userauth is OK
2025-12-13T01:54:05.476 [DEBUG] [Thread-80501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:54:05.476 [DEBUG] [Thread-80501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:54:05.476 [DEBUG] [Thread-80501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:54:05.476 [DEBUG] [Thread-80501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:54:05.511 [INFO] [Thread-80501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:54:05.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:54:06.166 [DEBUG] [Thread-80501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:54:06.166 [DEBUG] [Thread-80501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:54:06.166 [DEBUG] [Thread-80501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:54:06.208 [DEBUG] [Thread-80501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:54:06.208 [DEBUG] [Thread-80501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:54:06.210 [DEBUG] [Thread-80501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:54:06.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:54:06.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:54:06.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:54:06.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:54:06.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:54:06.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:54:06.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.995234 -999.00   +7.30  49.79     90   +5.80 1 2 2 3 1     0    0 1.23 -8.37 ZnESW 44.8 49.8 315.8 52.1 8.8 -7.1 8.5 -11.0 8.2 -9.3 8.6 -5.8
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.995234
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:54:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:53:30', tmtdew=2.03, humidity=87.07, cloud=0.0, wind=32.25, temperature=7.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:53:08.218', 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, 1.6037499999999998, 1.6954999999999991, 1.5484999999999998, 1.30375, nan, nan, nan, nan, nan, 1.4692499999999988], zp_timestamp='2025-12-12T23:52:00')
2025-12-13T01:54:06.230 [DEBUG] [Thread-80501] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:54:06.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:54:06.313 [DEBUG] [Thread-80504] [transport.py] [_log()] starting thread (client mode): 0xf81f1f00
2025-12-13T01:54:06.313 [DEBUG] [Thread-80504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:54:06.327 [DEBUG] [Thread-80504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:54:06.327 [INFO] [Thread-80504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] client lang: <none>
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] server lang: <none>
2025-12-13T01:54:06.335 [DEBUG] [Thread-80504] [transport.py] [_log()] kex follows: False
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] Compression: none
2025-12-13T01:54:06.336 [DEBUG] [Thread-80504] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:54:06.391 [DEBUG] [Thread-80504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:54:06.392 [DEBUG] [Thread-80504] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:54:06.392 [DEBUG] [Thread-80504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:54:06.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:54:06.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:54:06.447 [DEBUG] [Thread-80504] [transport.py] [_log()] userauth is OK
2025-12-13T01:54:06.448 [DEBUG] [Thread-80504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:54:06.448 [DEBUG] [Thread-80504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:54:06.448 [DEBUG] [Thread-80504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:54:06.448 [DEBUG] [Thread-80504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:54:06.467 [INFO] [Thread-80504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:54:06.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:54:06.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:54:07.309 [DEBUG] [Thread-80504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:54:07.309 [DEBUG] [Thread-80504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:54:07.357 [DEBUG] [Thread-80504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:54:07.357 [DEBUG] [Thread-80504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:54:07.365 [DEBUG] [Thread-80504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:54:07.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:54:07.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:54:07.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:54:07.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:54:07.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:54:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:54:07.399 [DEBUG] [Thread-80504] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:54:16.344 [DEBUG] [Thread-80506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:19.851 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:19.852 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:31.393 [DEBUG] [Thread-80507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:31.831 [DEBUG] [Thread-80508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:54:37.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:54:37.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:54:37.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:54:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 54, 34), 2.05, 86.96, 0.0, 35.53, 7.54, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:54:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:54:34
2025-12-13T01:54:38.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:54:38.389 [DEBUG] [Thread-80509] [transport.py] [_log()] starting thread (client mode): 0xf5740e80
2025-12-13T01:54:38.389 [DEBUG] [Thread-80509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:54:38.410 [DEBUG] [Thread-80509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:54:38.410 [INFO] [Thread-80509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:54:38.412 [DEBUG] [Thread-80509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] client lang: <none>
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] server lang: <none>
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] kex follows: False
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] Compression: none
2025-12-13T01:54:38.413 [DEBUG] [Thread-80509] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:54:38.430 [DEBUG] [Thread-80509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:54:38.430 [DEBUG] [Thread-80509] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:54:38.431 [DEBUG] [Thread-80509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:54:38.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:54:38.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:54:38.432 [DEBUG] [Thread-80509] [transport.py] [_log()] userauth is OK
2025-12-13T01:54:38.433 [DEBUG] [Thread-80509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:54:38.433 [DEBUG] [Thread-80509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:54:38.433 [DEBUG] [Thread-80509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:54:38.433 [DEBUG] [Thread-80509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:54:38.457 [INFO] [Thread-80509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:54:38.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:54:39.064 [DEBUG] [Thread-80509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:54:39.064 [DEBUG] [Thread-80509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:54:39.065 [DEBUG] [Thread-80509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:54:39.105 [DEBUG] [Thread-80509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:54:39.105 [DEBUG] [Thread-80509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:54:39.109 [DEBUG] [Thread-80509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:54:39.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:54:39.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:54:39.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:54:39.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:54:39.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:54:39.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:54:39.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:54:39.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:54:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:54:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.995582 -999.00   +7.30  37.09     90   +5.80 1 3 2 3 1     0    0 1.28 -7.69 ZnESW 28.2 37.1 299.0 44.8 8.8 -10.4 8.5 -8.8 8.2 -7.2 8.6 -7.4
2025-12-13T01:54:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:54:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:54:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.995582
2025-12-13T01:54:39.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:54:39.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:54:39.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:54:39.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:54:39.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:54:39.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:54:34', tmtdew=2.05, humidity=86.96, cloud=0.0, wind=35.53, temperature=7.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:53:38.285', atlas_cloud=3, 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, 1.6037499999999998, 1.6954999999999991, 1.5484999999999998, 1.30375, nan, nan, nan, nan, nan, 1.4692499999999988], zp_timestamp='2025-12-12T23:52:00')
2025-12-13T01:54:39.135 [DEBUG] [Thread-80509] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:54:39.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:54:39.232 [DEBUG] [Thread-80512] [transport.py] [_log()] starting thread (client mode): 0xf5742170
2025-12-13T01:54:39.232 [DEBUG] [Thread-80512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:54:39.247 [DEBUG] [Thread-80512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:54:39.247 [INFO] [Thread-80512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:54:39.254 [DEBUG] [Thread-80512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] client lang: <none>
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] server lang: <none>
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] kex follows: False
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] Compression: none
2025-12-13T01:54:39.255 [DEBUG] [Thread-80512] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:54:39.311 [DEBUG] [Thread-80512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:54:39.312 [DEBUG] [Thread-80512] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:54:39.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:54:39.313 [DEBUG] [Thread-80512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:54:39.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:54:39.368 [DEBUG] [Thread-80512] [transport.py] [_log()] userauth is OK
2025-12-13T01:54:39.368 [DEBUG] [Thread-80512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:54:39.368 [DEBUG] [Thread-80512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:54:39.368 [DEBUG] [Thread-80512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:54:39.368 [DEBUG] [Thread-80512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:54:39.392 [INFO] [Thread-80512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:54:39.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:54:39.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:54:40.207 [DEBUG] [Thread-80512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:54:40.208 [DEBUG] [Thread-80512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:54:40.256 [DEBUG] [Thread-80512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:54:40.256 [DEBUG] [Thread-80512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:54:40.265 [DEBUG] [Thread-80512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:54:40.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:54:40.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:54:40.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:54:40.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:54:40.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:54:40.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:54:40.300 [DEBUG] [Thread-80512] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:54:46.419 [DEBUG] [Thread-80514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:01.469 [DEBUG] [Thread-80515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:10.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:55:10.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:55: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
2025-12-13T01:55:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 55, 6), 2.07, 86.86, 0.0, 37.74, 7.52, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:55:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:55:06
2025-12-13T01:55:11.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:55:11.328 [DEBUG] [Thread-80516] [transport.py] [_log()] starting thread (client mode): 0xf818af80
2025-12-13T01:55:11.328 [DEBUG] [Thread-80516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:55:11.349 [DEBUG] [Thread-80516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:55:11.349 [INFO] [Thread-80516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] client lang: <none>
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] server lang: <none>
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] kex follows: False
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] Compression: none
2025-12-13T01:55:11.352 [DEBUG] [Thread-80516] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:55:11.368 [DEBUG] [Thread-80516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:55:11.369 [DEBUG] [Thread-80516] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:55:11.369 [DEBUG] [Thread-80516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:55:11.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:55:11.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:55:11.370 [DEBUG] [Thread-80516] [transport.py] [_log()] userauth is OK
2025-12-13T01:55:11.370 [DEBUG] [Thread-80516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:55:11.370 [DEBUG] [Thread-80516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:55:11.370 [DEBUG] [Thread-80516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:55:11.370 [DEBUG] [Thread-80516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:55:11.382 [INFO] [Thread-80516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:55:11.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:55:12.391 [DEBUG] [Thread-80516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:55:12.391 [DEBUG] [Thread-80516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:55:12.391 [DEBUG] [Thread-80516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:55:12.432 [DEBUG] [Thread-80516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:55:12.432 [DEBUG] [Thread-80516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:55:12.434 [DEBUG] [Thread-80516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:55:12.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:55:12.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:55:12.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:55:12.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:55:12.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:55:12.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.996276 -999.00   +7.30  33.82     90   +5.80 1 3 2 3 1     0    0 1.30 -6.84 ..ESW 30.8 33.8 301.2 51.0 8.7 -8.4 8.5 -10.0 8.2 -8.8 8.6 -8.2
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:55:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.996276
2025-12-13T01:55:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:55:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:55:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:55:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:55:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:55:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:55:06', tmtdew=2.07, humidity=86.86, cloud=0.0, wind=37.74, temperature=7.52, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:54:38.246', atlas_cloud=3, 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, 1.6037499999999998, 1.6954999999999991, 1.5484999999999998, 1.30375, nan, nan, nan, nan, nan, 1.4692499999999988], zp_timestamp='2025-12-12T23:52:00')
2025-12-13T01:55:12.454 [DEBUG] [Thread-80516] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:55:12.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:55:12.541 [DEBUG] [Thread-80519] [transport.py] [_log()] starting thread (client mode): 0xf572d8d0
2025-12-13T01:55:12.541 [DEBUG] [Thread-80519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:55:12.556 [DEBUG] [Thread-80519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:55:12.556 [INFO] [Thread-80519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:12.563 [DEBUG] [Thread-80519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] client lang: <none>
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] server lang: <none>
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] kex follows: False
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] Compression: none
2025-12-13T01:55:12.564 [DEBUG] [Thread-80519] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:55:12.618 [DEBUG] [Thread-80519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:55:12.618 [DEBUG] [Thread-80519] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:55:12.619 [DEBUG] [Thread-80519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:55:12.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:55:12.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:55:12.675 [DEBUG] [Thread-80519] [transport.py] [_log()] userauth is OK
2025-12-13T01:55:12.675 [DEBUG] [Thread-80519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:55:12.675 [DEBUG] [Thread-80519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:55:12.675 [DEBUG] [Thread-80519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:55:12.675 [DEBUG] [Thread-80519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:55:12.693 [INFO] [Thread-80519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:55:12.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:55:12.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:55:13.521 [DEBUG] [Thread-80519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:55:13.521 [DEBUG] [Thread-80519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:55:13.569 [DEBUG] [Thread-80519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:55:13.569 [DEBUG] [Thread-80519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:55:13.578 [DEBUG] [Thread-80519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:55:13.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:55:13.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:55:13.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:55:13.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:55:13.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:55:13.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:55:13.612 [DEBUG] [Thread-80519] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:55:16.503 [DEBUG] [Thread-80521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:20.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:20.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:31.549 [DEBUG] [Thread-80522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:31.906 [DEBUG] [Thread-80523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:55:43.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:55:43.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:55:43.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:55:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 55, 38), 2.09, 86.76, 0.0, 39.89, 7.54, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:55:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:55:38
2025-12-13T01:55:44.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:55:44.572 [DEBUG] [Thread-80524] [transport.py] [_log()] starting thread (client mode): 0xf818b910
2025-12-13T01:55:44.572 [DEBUG] [Thread-80524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:55:44.594 [DEBUG] [Thread-80524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:55:44.595 [INFO] [Thread-80524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] client lang: <none>
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] server lang: <none>
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] kex follows: False
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] Compression: none
2025-12-13T01:55:44.598 [DEBUG] [Thread-80524] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:55:44.614 [DEBUG] [Thread-80524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:55:44.615 [DEBUG] [Thread-80524] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:55:44.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:55:44.616 [DEBUG] [Thread-80524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:55:44.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:55:44.617 [DEBUG] [Thread-80524] [transport.py] [_log()] userauth is OK
2025-12-13T01:55:44.617 [DEBUG] [Thread-80524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:55:44.617 [DEBUG] [Thread-80524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:55:44.618 [DEBUG] [Thread-80524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:55:44.618 [DEBUG] [Thread-80524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:55:44.650 [INFO] [Thread-80524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:55:44.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:55:45.304 [DEBUG] [Thread-80524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:55:45.304 [DEBUG] [Thread-80524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:55:45.305 [DEBUG] [Thread-80524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:55:45.346 [DEBUG] [Thread-80524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:55:45.346 [DEBUG] [Thread-80524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:55:45.349 [DEBUG] [Thread-80524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:55:45.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:55:45.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:55:45.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:55:45.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:55:45.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:55:45.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:55:45.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:55:45.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:55:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:55:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.996623 -999.00   +7.40  33.08     90   +5.80 1 3 2 3 1     0    0 1.29 -6.45 ..ESW 39.1 33.1 312.2 44.8 8.7 -5.5 8.5 -4.9 8.2 -4.2 8.6 -4.8
2025-12-13T01:55:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:55:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:55:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.996623
2025-12-13T01:55:45.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:55:45.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:55:45.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:55:45.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:55:45.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:55:45.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:55:38', tmtdew=2.09, humidity=86.76, cloud=0.0, wind=39.89, temperature=7.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:55:08.227', atlas_cloud=3, 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, 1.6037499999999998, 1.6954999999999991, 1.5484999999999998, 1.30375, nan, nan, nan, nan, nan, 1.4692499999999988], zp_timestamp='2025-12-12T23:52:00')
2025-12-13T01:55:45.375 [DEBUG] [Thread-80524] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:55:45.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:55:45.472 [DEBUG] [Thread-80527] [transport.py] [_log()] starting thread (client mode): 0xf575f010
2025-12-13T01:55:45.472 [DEBUG] [Thread-80527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:55:45.486 [DEBUG] [Thread-80527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:55:45.487 [INFO] [Thread-80527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:55:45.494 [DEBUG] [Thread-80527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] client lang: <none>
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] server lang: <none>
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] kex follows: False
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] Compression: none
2025-12-13T01:55:45.495 [DEBUG] [Thread-80527] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:55:45.552 [DEBUG] [Thread-80527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:55:45.552 [DEBUG] [Thread-80527] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:55:45.553 [DEBUG] [Thread-80527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:55:45.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:55:45.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:55:45.607 [DEBUG] [Thread-80527] [transport.py] [_log()] userauth is OK
2025-12-13T01:55:45.608 [DEBUG] [Thread-80527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:55:45.608 [DEBUG] [Thread-80527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:55:45.608 [DEBUG] [Thread-80527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:55:45.608 [DEBUG] [Thread-80527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:55:45.626 [INFO] [Thread-80527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:55:45.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:55:45.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:55:46.467 [DEBUG] [Thread-80527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:55:46.468 [DEBUG] [Thread-80527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:55:46.515 [DEBUG] [Thread-80527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:55:46.516 [DEBUG] [Thread-80527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:55:46.524 [DEBUG] [Thread-80527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:55:46.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:55:46.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:55:46.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:55:46.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:55:46.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:55:46.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:55:46.558 [DEBUG] [Thread-80527] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:55:46.578 [DEBUG] [Thread-80529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:01.622 [DEBUG] [Thread-80530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:16.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:56:16.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:56:16.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:56:16.647 [DEBUG] [Thread-80531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 56, 10), 2.08, 86.77, 0.0, 37.63, 7.47, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:56:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:56:10
2025-12-13T01:56:17.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:56:17.537 [DEBUG] [Thread-80532] [transport.py] [_log()] starting thread (client mode): 0xf5773160
2025-12-13T01:56:17.538 [DEBUG] [Thread-80532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:56:17.558 [DEBUG] [Thread-80532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:56:17.558 [INFO] [Thread-80532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:17.561 [DEBUG] [Thread-80532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] client lang: <none>
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] server lang: <none>
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] kex follows: False
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] Compression: none
2025-12-13T01:56:17.562 [DEBUG] [Thread-80532] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:56:17.578 [DEBUG] [Thread-80532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:56:17.579 [DEBUG] [Thread-80532] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:56:17.579 [DEBUG] [Thread-80532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:56:17.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:56:17.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:56:17.582 [DEBUG] [Thread-80532] [transport.py] [_log()] userauth is OK
2025-12-13T01:56:17.582 [DEBUG] [Thread-80532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:56:17.582 [DEBUG] [Thread-80532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:56:17.582 [DEBUG] [Thread-80532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:56:17.582 [DEBUG] [Thread-80532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:56:17.599 [INFO] [Thread-80532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:56:17.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:56:18.238 [DEBUG] [Thread-80532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:56:18.238 [DEBUG] [Thread-80532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:56:18.239 [DEBUG] [Thread-80532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:56:18.279 [DEBUG] [Thread-80532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:56:18.279 [DEBUG] [Thread-80532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:56:18.282 [DEBUG] [Thread-80532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:56:18.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:56:18.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:56:18.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:56:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:56:18.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:56:18.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:56:18.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:56:18.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:56:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:56:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.996970 -999.00   +7.40  31.16     90   +5.80 1 3 2 3 1     0    0 1.34 -5.83 ZNES. 25.5 31.2 309.4 48.8 8.7 -3.3 8.5 -3.7 8.2 -3.2 8.6 -3.2
2025-12-13T01:56:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:56:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:56:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.996970
2025-12-13T01:56:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:56:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:56:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:56:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:56:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:56:18.310 [DEBUG] [Thread-80532] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:56:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:56:10', tmtdew=2.08, humidity=86.77, cloud=0.0, wind=37.63, temperature=7.47, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:55:38.208', atlas_cloud=3, 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, 1.6037499999999998, 1.6954999999999991, 1.5484999999999998, 1.30375, nan, nan, nan, nan, nan, 1.4692499999999988], zp_timestamp='2025-12-12T23:52:00')
2025-12-13T01:56:18.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:56:18.405 [DEBUG] [Thread-80535] [transport.py] [_log()] starting thread (client mode): 0xfabc6da0
2025-12-13T01:56:18.405 [DEBUG] [Thread-80535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:56:18.420 [DEBUG] [Thread-80535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:56:18.420 [INFO] [Thread-80535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] client lang: <none>
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] server lang: <none>
2025-12-13T01:56:18.428 [DEBUG] [Thread-80535] [transport.py] [_log()] kex follows: False
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] Compression: none
2025-12-13T01:56:18.429 [DEBUG] [Thread-80535] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:56:18.488 [DEBUG] [Thread-80535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:56:18.489 [DEBUG] [Thread-80535] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:56:18.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:56:18.490 [DEBUG] [Thread-80535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:56:18.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:56:18.548 [DEBUG] [Thread-80535] [transport.py] [_log()] userauth is OK
2025-12-13T01:56:18.548 [DEBUG] [Thread-80535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:56:18.548 [DEBUG] [Thread-80535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:56:18.549 [DEBUG] [Thread-80535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:56:18.549 [DEBUG] [Thread-80535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:56:18.567 [INFO] [Thread-80535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:56:18.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:56:18.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:56:19.396 [DEBUG] [Thread-80535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:56:19.396 [DEBUG] [Thread-80535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:56:19.444 [DEBUG] [Thread-80535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:56:19.444 [DEBUG] [Thread-80535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:56:19.454 [DEBUG] [Thread-80535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:56:19.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:56:19.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:56:19.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:56:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:56:19.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:56:19.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:56:19.488 [DEBUG] [Thread-80535] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:56:20.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:20.263 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:31.671 [DEBUG] [Thread-80537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:31.976 [DEBUG] [Thread-80538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:46.708 [DEBUG] [Thread-80539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:56:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:56:49.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:56:49.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:56:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 56, 42), 2.07, 86.86, 0.0, 35.23, 7.54, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:56:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:56:42
2025-12-13T01:56:50.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:56:50.460 [DEBUG] [Thread-80540] [transport.py] [_log()] starting thread (client mode): 0xf570f8e0
2025-12-13T01:56:50.460 [DEBUG] [Thread-80540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:56:50.480 [DEBUG] [Thread-80540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:56:50.480 [INFO] [Thread-80540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] client lang: <none>
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] server lang: <none>
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] kex follows: False
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:56:50.483 [DEBUG] [Thread-80540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:56:50.484 [DEBUG] [Thread-80540] [transport.py] [_log()] Compression: none
2025-12-13T01:56:50.484 [DEBUG] [Thread-80540] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:56:50.499 [DEBUG] [Thread-80540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:56:50.499 [DEBUG] [Thread-80540] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:56:50.500 [DEBUG] [Thread-80540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:56:50.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:56:50.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:56:50.501 [DEBUG] [Thread-80540] [transport.py] [_log()] userauth is OK
2025-12-13T01:56:50.501 [DEBUG] [Thread-80540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:56:50.502 [DEBUG] [Thread-80540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:56:50.502 [DEBUG] [Thread-80540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:56:50.502 [DEBUG] [Thread-80540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:56:50.535 [INFO] [Thread-80540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:56:50.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:56:51.187 [DEBUG] [Thread-80540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:56:51.188 [DEBUG] [Thread-80540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:56:51.188 [DEBUG] [Thread-80540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:56:51.229 [DEBUG] [Thread-80540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:56:51.229 [DEBUG] [Thread-80540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:56:51.232 [DEBUG] [Thread-80540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:56:51.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:56:51.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:56:51.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:56:51.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:56:51.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:56:51.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:56:51.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:56:51.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:56:51.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:56:51.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.997318 -999.00   +7.40  38.43     90   +5.90 1 3 2 3 1     0    0 1.35 -5.23 ZNES. 31.6 38.4 312.0 51.1 8.7 -6.1 8.6 -4.3 8.2 -3.5 8.6 -4.4
2025-12-13T01:56:51.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:56:51.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:56:51.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.997318
2025-12-13T01:56:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:56:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:56:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:56:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:56:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T01:56:51.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:56:42', tmtdew=2.07, humidity=86.86, cloud=0.0, wind=35.23, temperature=7.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:56:08.275', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:55:00')
2025-12-13T01:56:51.259 [DEBUG] [Thread-80540] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:56:51.355 [DEBUG] [Thread-80543] [transport.py] [_log()] starting thread (client mode): 0xf575cc70
2025-12-13T01:56:51.355 [DEBUG] [Thread-80543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:56:51.370 [DEBUG] [Thread-80543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:56:51.370 [INFO] [Thread-80543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:56:51.377 [DEBUG] [Thread-80543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:56:51.377 [DEBUG] [Thread-80543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] client lang: <none>
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] server lang: <none>
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] kex follows: False
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] Compression: none
2025-12-13T01:56:51.378 [DEBUG] [Thread-80543] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:56:51.435 [DEBUG] [Thread-80543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:56:51.435 [DEBUG] [Thread-80543] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:56:51.436 [DEBUG] [Thread-80543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:56:51.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:56:51.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:56:51.491 [DEBUG] [Thread-80543] [transport.py] [_log()] userauth is OK
2025-12-13T01:56:51.492 [DEBUG] [Thread-80543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:56:51.492 [DEBUG] [Thread-80543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:56:51.492 [DEBUG] [Thread-80543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:56:51.492 [DEBUG] [Thread-80543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:56:51.511 [INFO] [Thread-80543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:56:51.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:56:51.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:56:52.323 [DEBUG] [Thread-80543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:56:52.323 [DEBUG] [Thread-80543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:56:52.371 [DEBUG] [Thread-80543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:56:52.371 [DEBUG] [Thread-80543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:56:52.379 [DEBUG] [Thread-80543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:56:52.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:56: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')
2025-12-13T01:56:52.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:56:52.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:56:52.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:56:52.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:56:52.416 [DEBUG] [Thread-80543] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:57:01.738 [DEBUG] [Thread-80545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:16.787 [DEBUG] [Thread-80546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:20.467 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:20.468 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:22.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:57:22.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:57:22.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:57:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 57, 14), 2.07, 86.84, 0.0, 35.06, 7.54, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:57:23.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:57:14
2025-12-13T01:57:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:57:23.404 [DEBUG] [Thread-80547] [transport.py] [_log()] starting thread (client mode): 0xf575d1e0
2025-12-13T01:57:23.404 [DEBUG] [Thread-80547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:57:23.424 [DEBUG] [Thread-80547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:57:23.424 [INFO] [Thread-80547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] client lang: <none>
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] server lang: <none>
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] kex follows: False
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] Compression: none
2025-12-13T01:57:23.428 [DEBUG] [Thread-80547] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:57:23.447 [DEBUG] [Thread-80547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:57:23.447 [DEBUG] [Thread-80547] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:57:23.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:57:23.448 [DEBUG] [Thread-80547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:57:23.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:57:23.450 [DEBUG] [Thread-80547] [transport.py] [_log()] userauth is OK
2025-12-13T01:57:23.451 [DEBUG] [Thread-80547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:57:23.451 [DEBUG] [Thread-80547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:57:23.451 [DEBUG] [Thread-80547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:57:23.451 [DEBUG] [Thread-80547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:57:23.475 [INFO] [Thread-80547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:57:23.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:57:24.073 [DEBUG] [Thread-80547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:57:24.073 [DEBUG] [Thread-80547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:57:24.074 [DEBUG] [Thread-80547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:57:24.114 [DEBUG] [Thread-80547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:57:24.115 [DEBUG] [Thread-80547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:57:24.118 [DEBUG] [Thread-80547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:57:24.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:57:24.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:57:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:57:24.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:57:24.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:57:24.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:57:24.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:57:24.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:57:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:57:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.997665 -999.00   +7.30  43.54     90   +5.80 1 2 2 3 1     0    0 1.34 -5.02 .NES. 41.7 43.5 305.6 51.2 8.7 -13.0 8.6 -12.1 8.2 -9.2 8.6 -10.3
2025-12-13T01:57:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:57:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:57:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.997665
2025-12-13T01:57:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:57:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:57:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:57:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:57:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:57:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:57:14', tmtdew=2.07, humidity=86.84, cloud=0.0, wind=35.06, temperature=7.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:56:38.256', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:55:00')
2025-12-13T01:57:24.146 [DEBUG] [Thread-80547] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:57:24.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:57:24.243 [DEBUG] [Thread-80550] [transport.py] [_log()] starting thread (client mode): 0xf570cd90
2025-12-13T01:57:24.243 [DEBUG] [Thread-80550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:57:24.257 [DEBUG] [Thread-80550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:57:24.258 [INFO] [Thread-80550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:57:24.265 [DEBUG] [Thread-80550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:57:24.265 [DEBUG] [Thread-80550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:57:24.265 [DEBUG] [Thread-80550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:57:24.265 [DEBUG] [Thread-80550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] client lang: <none>
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] server lang: <none>
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] kex follows: False
2025-12-13T01:57:24.266 [DEBUG] [Thread-80550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:57:24.267 [DEBUG] [Thread-80550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:57:24.267 [DEBUG] [Thread-80550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:57:24.267 [DEBUG] [Thread-80550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:57:24.267 [DEBUG] [Thread-80550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:57:24.267 [DEBUG] [Thread-80550] [transport.py] [_log()] Compression: none
2025-12-13T01:57:24.267 [DEBUG] [Thread-80550] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:57:24.324 [DEBUG] [Thread-80550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:57:24.324 [DEBUG] [Thread-80550] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:57:24.324 [DEBUG] [Thread-80550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:57:24.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:57:24.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:57:24.380 [DEBUG] [Thread-80550] [transport.py] [_log()] userauth is OK
2025-12-13T01:57:24.380 [DEBUG] [Thread-80550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:57:24.380 [DEBUG] [Thread-80550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:57:24.380 [DEBUG] [Thread-80550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:57:24.380 [DEBUG] [Thread-80550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:57:24.403 [INFO] [Thread-80550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:57:24.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:57:24.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:57:25.208 [DEBUG] [Thread-80550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:57:25.208 [DEBUG] [Thread-80550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:57:25.256 [DEBUG] [Thread-80550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:57:25.256 [DEBUG] [Thread-80550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:57:25.265 [DEBUG] [Thread-80550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:57:25.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:57:25.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:57:25.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:57:25.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:57:25.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:57:25.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:57:25.299 [DEBUG] [Thread-80550] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:57:31.813 [DEBUG] [Thread-80552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:32.057 [DEBUG] [Thread-80553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:46.864 [DEBUG] [Thread-80554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:57:55.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:57:55.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:57:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:57:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 57, 46), 2.07, 86.87, 0.0, 37.69, 7.46, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:57:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:57:46
2025-12-13T01:57:56.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:57:56.268 [DEBUG] [Thread-80555] [transport.py] [_log()] starting thread (client mode): 0xf81e7cd0
2025-12-13T01:57:56.268 [DEBUG] [Thread-80555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:57:56.289 [DEBUG] [Thread-80555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:57:56.290 [INFO] [Thread-80555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] client lang: <none>
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] server lang: <none>
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] kex follows: False
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:57:56.293 [DEBUG] [Thread-80555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:57:56.294 [DEBUG] [Thread-80555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:57:56.294 [DEBUG] [Thread-80555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:57:56.294 [DEBUG] [Thread-80555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:57:56.294 [DEBUG] [Thread-80555] [transport.py] [_log()] Compression: none
2025-12-13T01:57:56.294 [DEBUG] [Thread-80555] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:57:56.311 [DEBUG] [Thread-80555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:57:56.311 [DEBUG] [Thread-80555] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:57:56.312 [DEBUG] [Thread-80555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:57:56.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:57:56.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:57:56.315 [DEBUG] [Thread-80555] [transport.py] [_log()] userauth is OK
2025-12-13T01:57:56.315 [DEBUG] [Thread-80555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:57:56.315 [DEBUG] [Thread-80555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:57:56.316 [DEBUG] [Thread-80555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:57:56.316 [DEBUG] [Thread-80555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:57:56.340 [INFO] [Thread-80555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:57:56.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:57:56.977 [DEBUG] [Thread-80555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:57:56.977 [DEBUG] [Thread-80555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:57:56.978 [DEBUG] [Thread-80555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:57:57.018 [DEBUG] [Thread-80555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:57:57.018 [DEBUG] [Thread-80555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:57:57.022 [DEBUG] [Thread-80555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:57:57.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:57:57.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:57:57.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:57:57.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:57:57.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:57:57.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:57:57.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:57:57.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:57:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:57:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.998012 -999.00   +7.30  34.94     90   +5.80 1 2 2 3 1     0    0 1.35 -5.11 ....W 35.4 34.9 308.8 50.2 8.7 -15.4 8.4 -15.3 8.2 -14.0 8.6 -11.7
2025-12-13T01:57:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:57:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:57:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.998012
2025-12-13T01:57:57.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:57:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:57:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:57:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:57:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:57:57.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:57:46', tmtdew=2.07, humidity=86.87, cloud=0.0, wind=37.69, temperature=7.46, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:57:08.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:55:00')
2025-12-13T01:57:57.047 [DEBUG] [Thread-80555] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:57:57.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:57:57.143 [DEBUG] [Thread-80558] [transport.py] [_log()] starting thread (client mode): 0xf818a440
2025-12-13T01:57:57.143 [DEBUG] [Thread-80558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:57:57.159 [DEBUG] [Thread-80558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:57:57.159 [INFO] [Thread-80558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:57:57.166 [DEBUG] [Thread-80558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:57:57.167 [DEBUG] [Thread-80558] [transport.py] [_log()] client lang: <none>
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] server lang: <none>
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] kex follows: False
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] Compression: none
2025-12-13T01:57:57.168 [DEBUG] [Thread-80558] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:57:57.224 [DEBUG] [Thread-80558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:57:57.224 [DEBUG] [Thread-80558] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:57:57.225 [DEBUG] [Thread-80558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:57:57.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:57:57.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:57:57.279 [DEBUG] [Thread-80558] [transport.py] [_log()] userauth is OK
2025-12-13T01:57:57.280 [DEBUG] [Thread-80558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:57:57.280 [DEBUG] [Thread-80558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:57:57.280 [DEBUG] [Thread-80558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:57:57.280 [DEBUG] [Thread-80558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:57:57.300 [INFO] [Thread-80558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:57:57.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:57:57.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:57:58.155 [DEBUG] [Thread-80558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:57:58.155 [DEBUG] [Thread-80558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:57:58.203 [DEBUG] [Thread-80558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:57:58.203 [DEBUG] [Thread-80558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:57:58.212 [DEBUG] [Thread-80558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:57:58.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:57:58.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:57:58.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:57:58.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:57:58.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:57:58.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:57:58.247 [DEBUG] [Thread-80558] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:58:01.894 [DEBUG] [Thread-80560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:58:16.941 [DEBUG] [Thread-80561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:58:20.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:58:20.675 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:58:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:58:28.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:58:28.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:58:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 58, 19), 2.06, 86.89, 0.0, 30.7, 7.46, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:58:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:58:19
2025-12-13T01:58:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:58:29.236 [DEBUG] [Thread-80562] [transport.py] [_log()] starting thread (client mode): 0xf81e7910
2025-12-13T01:58:29.236 [DEBUG] [Thread-80562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:58:29.256 [DEBUG] [Thread-80562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:58:29.256 [INFO] [Thread-80562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] client lang: <none>
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] server lang: <none>
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] kex follows: False
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] Compression: none
2025-12-13T01:58:29.259 [DEBUG] [Thread-80562] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:58:29.273 [DEBUG] [Thread-80562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:58:29.273 [DEBUG] [Thread-80562] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:58:29.273 [DEBUG] [Thread-80562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:58:29.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:58:29.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:58:29.274 [DEBUG] [Thread-80562] [transport.py] [_log()] userauth is OK
2025-12-13T01:58:29.274 [DEBUG] [Thread-80562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:58:29.274 [DEBUG] [Thread-80562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:58:29.274 [DEBUG] [Thread-80562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:58:29.274 [DEBUG] [Thread-80562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:58:29.284 [INFO] [Thread-80562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:58:29.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:58:29.908 [DEBUG] [Thread-80562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:58:29.908 [DEBUG] [Thread-80562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:58:29.908 [DEBUG] [Thread-80562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:58:29.950 [DEBUG] [Thread-80562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:58:29.950 [DEBUG] [Thread-80562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:58:29.952 [DEBUG] [Thread-80562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:58:29.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:58:29.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:58:29.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:58:29.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:58:29.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:58:29.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:58:29.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:58:29.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:58:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:58:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.998706 -999.00   +7.20  39.41     90   +5.80 1 2 2 3 1     0    0 1.38 -4.28 ZNeSw 42.6 39.4 306.8 48.9 8.6 -18.5 8.4 -20.4 8.1 -17.6 8.5 -15.3
2025-12-13T01:58:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:58:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:58:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.998706
2025-12-13T01:58:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:58:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:58:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:58:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:58:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:58:29.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:58:19', tmtdew=2.06, humidity=86.89, cloud=0.0, wind=30.7, temperature=7.46, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:58:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:55:00')
2025-12-13T01:58:29.972 [DEBUG] [Thread-80562] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:58:30.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:58:30.070 [DEBUG] [Thread-80565] [transport.py] [_log()] starting thread (client mode): 0xfabc78e0
2025-12-13T01:58:30.070 [DEBUG] [Thread-80565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:58:30.084 [DEBUG] [Thread-80565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:58:30.084 [INFO] [Thread-80565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] client lang: <none>
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] server lang: <none>
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] kex follows: False
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] Compression: none
2025-12-13T01:58:30.092 [DEBUG] [Thread-80565] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:58:30.152 [DEBUG] [Thread-80565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:58:30.152 [DEBUG] [Thread-80565] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:58:30.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:58:30.153 [DEBUG] [Thread-80565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:58:30.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:58:30.207 [DEBUG] [Thread-80565] [transport.py] [_log()] userauth is OK
2025-12-13T01:58:30.208 [DEBUG] [Thread-80565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:58:30.208 [DEBUG] [Thread-80565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:58:30.208 [DEBUG] [Thread-80565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:58:30.208 [DEBUG] [Thread-80565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:58:30.227 [INFO] [Thread-80565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:58:30.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:58:30.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:58:31.058 [DEBUG] [Thread-80565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:58:31.058 [DEBUG] [Thread-80565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:58:31.106 [DEBUG] [Thread-80565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:58:31.106 [DEBUG] [Thread-80565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:58:31.115 [DEBUG] [Thread-80565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:58:31.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:58:31.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:58:31.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:58:31.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:58:31.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:58:31.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:58:31.150 [DEBUG] [Thread-80565] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:58:31.969 [DEBUG] [Thread-80567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:58:32.140 [DEBUG] [Thread-80568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:58:47.012 [DEBUG] [Thread-80569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:01.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:59:01.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:59:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:59:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 58, 51), 2.0, 86.99, 0.0, 37.72, 7.41, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:59:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:58:51
2025-12-13T01:59:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:59:02.038 [DEBUG] [Thread-80570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:02.101 [DEBUG] [Thread-80571] [transport.py] [_log()] starting thread (client mode): 0xf570d960
2025-12-13T01:59:02.101 [DEBUG] [Thread-80571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:59:02.119 [DEBUG] [Thread-80571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:59:02.120 [INFO] [Thread-80571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:02.123 [DEBUG] [Thread-80571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] client lang: <none>
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] server lang: <none>
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] kex follows: False
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] Compression: none
2025-12-13T01:59:02.124 [DEBUG] [Thread-80571] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:59:02.142 [DEBUG] [Thread-80571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:59:02.143 [DEBUG] [Thread-80571] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:59:02.143 [DEBUG] [Thread-80571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:59:02.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:59:02.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:59:02.145 [DEBUG] [Thread-80571] [transport.py] [_log()] userauth is OK
2025-12-13T01:59:02.146 [DEBUG] [Thread-80571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:59:02.146 [DEBUG] [Thread-80571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:59:02.146 [DEBUG] [Thread-80571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:59:02.146 [DEBUG] [Thread-80571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:59:02.181 [INFO] [Thread-80571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:59:02.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:59:02.849 [DEBUG] [Thread-80571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:59:02.849 [DEBUG] [Thread-80571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:59:02.850 [DEBUG] [Thread-80571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:59:02.890 [DEBUG] [Thread-80571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:59:02.890 [DEBUG] [Thread-80571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:59:02.892 [DEBUG] [Thread-80571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:59:02.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:59:02.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:59:02.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:59:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:59:02.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:59:02.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:59:02.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:59:02.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:59:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:59:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.999054 -999.00   +7.20  29.53     90   +5.80 1 2 1 3 1     0    0 1.36 -4.38 ZNeSw 32.3 29.5 304.8 45.7 8.6 -17.6 8.3 -20.3 8.0 -18.3 8.4 -16.1
2025-12-13T01:59:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:59:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:59:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.999054
2025-12-13T01:59:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:59:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:59:02.911 [DEBUG] [Thread-80571] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:59:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:59:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:59:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:59:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:58:51', tmtdew=2.0, humidity=86.99, cloud=0.0, wind=37.72, temperature=7.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:58:38.266', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:55:00')
2025-12-13T01:59:02.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:59:03.005 [DEBUG] [Thread-80574] [transport.py] [_log()] starting thread (client mode): 0xf818af80
2025-12-13T01:59:03.005 [DEBUG] [Thread-80574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:59:03.019 [DEBUG] [Thread-80574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:59:03.019 [INFO] [Thread-80574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] client lang: <none>
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] server lang: <none>
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] kex follows: False
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] Compression: none
2025-12-13T01:59:03.027 [DEBUG] [Thread-80574] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:59:03.082 [DEBUG] [Thread-80574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:59:03.082 [DEBUG] [Thread-80574] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:59:03.083 [DEBUG] [Thread-80574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:59:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:59:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:59:03.139 [DEBUG] [Thread-80574] [transport.py] [_log()] userauth is OK
2025-12-13T01:59:03.140 [DEBUG] [Thread-80574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:59:03.140 [DEBUG] [Thread-80574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:59:03.140 [DEBUG] [Thread-80574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:59:03.140 [DEBUG] [Thread-80574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:59:03.157 [INFO] [Thread-80574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:59:03.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:59:03.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:59:03.993 [DEBUG] [Thread-80574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:59:03.993 [DEBUG] [Thread-80574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:59:04.042 [DEBUG] [Thread-80574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:59:04.042 [DEBUG] [Thread-80574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:59:04.050 [DEBUG] [Thread-80574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:59:04.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:59:04.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:59:04.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:59:04.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:59:04.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:59:04.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:59:04.083 [DEBUG] [Thread-80574] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:59:17.066 [DEBUG] [Thread-80576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:20.880 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:20.882 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:32.112 [DEBUG] [Thread-80577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:32.217 [DEBUG] [Thread-80578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T01:59:34.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T01:59:34.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T01:59:34.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T01:59:34.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 59, 23), 1.98, 87.07, 0.0, 37.42, 7.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T01:59:34.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:59:23
2025-12-13T01:59:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T01:59:35.066 [DEBUG] [Thread-80579] [transport.py] [_log()] starting thread (client mode): 0xf813fc40
2025-12-13T01:59:35.066 [DEBUG] [Thread-80579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:59:35.088 [DEBUG] [Thread-80579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T01:59:35.089 [INFO] [Thread-80579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] client lang: <none>
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] server lang: <none>
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] kex follows: False
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] Compression: none
2025-12-13T01:59:35.092 [DEBUG] [Thread-80579] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:59:35.109 [DEBUG] [Thread-80579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:59:35.109 [DEBUG] [Thread-80579] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:59:35.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T01:59:35.110 [DEBUG] [Thread-80579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T01:59:35.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:59:35.112 [DEBUG] [Thread-80579] [transport.py] [_log()] userauth is OK
2025-12-13T01:59:35.112 [DEBUG] [Thread-80579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:59:35.112 [DEBUG] [Thread-80579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:59:35.113 [DEBUG] [Thread-80579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T01:59:35.113 [DEBUG] [Thread-80579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:59:35.148 [INFO] [Thread-80579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:59:35.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:59:35.822 [DEBUG] [Thread-80579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:59:35.822 [DEBUG] [Thread-80579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:59:35.822 [DEBUG] [Thread-80579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T01:59:35.863 [DEBUG] [Thread-80579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:59:35.863 [DEBUG] [Thread-80579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:59:35.865 [DEBUG] [Thread-80579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:59:35.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:59:35.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T01:59:35.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T01:59:35.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T01:59:35.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:59:35.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T01:59:35.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.999402 -999.00   +7.20  34.55     90   +5.80 1 2 2 3 1     0    0 1.37 -5.02 Z.ESW 40.8 34.5 313.1 45.6 8.5 -17.8 8.3 -18.8 8.0 -17.3 8.4 -16.0
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.999402
2025-12-13T01:59:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T01:59:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T01:59:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T01:59:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T01:59:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T01:59:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:59:23', tmtdew=1.98, humidity=87.07, cloud=0.0, wind=37.42, temperature=7.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:59:08.333', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:59:00')
2025-12-13T01:59:35.885 [DEBUG] [Thread-80579] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:59:35.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T01:59:35.979 [DEBUG] [Thread-80582] [transport.py] [_log()] starting thread (client mode): 0xf813da20
2025-12-13T01:59:35.979 [DEBUG] [Thread-80582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T01:59:35.993 [DEBUG] [Thread-80582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T01:59:35.994 [INFO] [Thread-80582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:36.001 [DEBUG] [Thread-80582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] client lang: <none>
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] server lang: <none>
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] kex follows: False
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] Compression: none
2025-12-13T01:59:36.002 [DEBUG] [Thread-80582] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T01:59:36.059 [DEBUG] [Thread-80582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T01:59:36.059 [DEBUG] [Thread-80582] [transport.py] [_log()] Switch to new keys ...
2025-12-13T01:59:36.060 [DEBUG] [Thread-80582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T01:59:36.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T01:59:36.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T01:59:36.115 [DEBUG] [Thread-80582] [transport.py] [_log()] userauth is OK
2025-12-13T01:59:36.115 [DEBUG] [Thread-80582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T01:59:36.115 [DEBUG] [Thread-80582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T01:59:36.116 [DEBUG] [Thread-80582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T01:59:36.116 [DEBUG] [Thread-80582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T01:59:36.134 [INFO] [Thread-80582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T01:59:36.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T01:59:36.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T01:59:36.969 [DEBUG] [Thread-80582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T01:59:36.969 [DEBUG] [Thread-80582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T01:59:37.017 [DEBUG] [Thread-80582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T01:59:37.017 [DEBUG] [Thread-80582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T01:59:37.026 [DEBUG] [Thread-80582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T01:59:37.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T01:59:37.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T01:59:37.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T01:59:37.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T01:59:37.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T01:59:37.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T01:59:37.059 [DEBUG] [Thread-80582] [transport.py] [_log()] EOF in transport thread
2025-12-13T01:59:47.139 [DEBUG] [Thread-80584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:02.175 [DEBUG] [Thread-80585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:07.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:00:07.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:00:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:00:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 1, 59, 55), 1.87, 87.64, 0.0, 35.82, 7.29, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:00:07.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 01:59:55
2025-12-13T02:00:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:00:08.023 [DEBUG] [Thread-80586] [transport.py] [_log()] starting thread (client mode): 0xf813d330
2025-12-13T02:00:08.024 [DEBUG] [Thread-80586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:00:08.043 [DEBUG] [Thread-80586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:00:08.044 [INFO] [Thread-80586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:00:08.046 [DEBUG] [Thread-80586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] client lang: <none>
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] server lang: <none>
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] kex follows: False
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] Compression: none
2025-12-13T02:00:08.047 [DEBUG] [Thread-80586] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:00:08.056 [DEBUG] [Thread-80586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:00:08.056 [DEBUG] [Thread-80586] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:00:08.056 [DEBUG] [Thread-80586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:00:08.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:00:08.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:00:08.101 [DEBUG] [Thread-80586] [transport.py] [_log()] userauth is OK
2025-12-13T02:00:08.101 [DEBUG] [Thread-80586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:00:08.101 [DEBUG] [Thread-80586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:00:08.101 [DEBUG] [Thread-80586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:00:08.101 [DEBUG] [Thread-80586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:00:08.118 [INFO] [Thread-80586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:00:08.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:00:08.749 [DEBUG] [Thread-80586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:00:08.749 [DEBUG] [Thread-80586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:00:08.749 [DEBUG] [Thread-80586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:00:08.790 [DEBUG] [Thread-80586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:00:08.790 [DEBUG] [Thread-80586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:00:08.794 [DEBUG] [Thread-80586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:00:08.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:00:08.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:00:08.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:00:08.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:00:08.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:00:08.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:00:08.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:00:08.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:00:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:00:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61021.999748 -999.00   +7.10  41.00     91   +5.70 1 2 2 3 1     0    0 1.36 -5.54 Z.ESw 39.9 41.0 310.8 49.5 8.5 -14.9 8.2 -12.5 8.0 -13.9 8.3 -13.1
2025-12-13T02:00:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:00:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:00:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61021.999748
2025-12-13T02:00:08.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:00:08.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:00:08.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:00:08.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:00:08.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:00:08.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T01:59:55', tmtdew=1.87, humidity=87.64, cloud=0.0, wind=35.82, temperature=7.29, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-12T23:59:38.227', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:59:00')
2025-12-13T02:00:08.822 [DEBUG] [Thread-80586] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:00:08.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:00:08.918 [DEBUG] [Thread-80589] [transport.py] [_log()] starting thread (client mode): 0xf5742350
2025-12-13T02:00:08.918 [DEBUG] [Thread-80589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:00:08.933 [DEBUG] [Thread-80589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:00:08.933 [INFO] [Thread-80589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] client lang: <none>
2025-12-13T02:00:08.941 [DEBUG] [Thread-80589] [transport.py] [_log()] server lang: <none>
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] kex follows: False
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] Compression: none
2025-12-13T02:00:08.942 [DEBUG] [Thread-80589] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:00:09.000 [DEBUG] [Thread-80589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:00:09.001 [DEBUG] [Thread-80589] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:00:09.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:00:09.002 [DEBUG] [Thread-80589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:00:09.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:00:09.059 [DEBUG] [Thread-80589] [transport.py] [_log()] userauth is OK
2025-12-13T02:00:09.060 [DEBUG] [Thread-80589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:00:09.060 [DEBUG] [Thread-80589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:00:09.060 [DEBUG] [Thread-80589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:00:09.060 [DEBUG] [Thread-80589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:00:09.084 [INFO] [Thread-80589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:00:09.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:00:09.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:00:09.925 [DEBUG] [Thread-80589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:00:09.925 [DEBUG] [Thread-80589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:00:09.972 [DEBUG] [Thread-80589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:00:09.973 [DEBUG] [Thread-80589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:00:09.981 [DEBUG] [Thread-80589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:00:09.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:00:09.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:00:09.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:00:10.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:00:10.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:00:10.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:00:10.015 [DEBUG] [Thread-80589] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:00:17.204 [DEBUG] [Thread-80591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:21.085 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:21.086 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:32.255 [DEBUG] [Thread-80592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:32.294 [DEBUG] [Thread-80593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:00:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:00:40.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:00:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:00:40.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 0, 27), 1.86, 87.72, 0.0, 37.51, 7.32, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:00:40.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:00:27
2025-12-13T02:00:40.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:00:40.986 [DEBUG] [Thread-80594] [transport.py] [_log()] starting thread (client mode): 0xf570e620
2025-12-13T02:00:40.986 [DEBUG] [Thread-80594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:00:41.006 [DEBUG] [Thread-80594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:00:41.006 [INFO] [Thread-80594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] client lang: <none>
2025-12-13T02:00:41.010 [DEBUG] [Thread-80594] [transport.py] [_log()] server lang: <none>
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] kex follows: False
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] Compression: none
2025-12-13T02:00:41.011 [DEBUG] [Thread-80594] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:00:41.032 [DEBUG] [Thread-80594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:00:41.033 [DEBUG] [Thread-80594] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:00:41.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:00:41.034 [DEBUG] [Thread-80594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:00:41.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:00:41.036 [DEBUG] [Thread-80594] [transport.py] [_log()] userauth is OK
2025-12-13T02:00:41.036 [DEBUG] [Thread-80594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:00:41.036 [DEBUG] [Thread-80594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:00:41.036 [DEBUG] [Thread-80594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:00:41.036 [DEBUG] [Thread-80594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:00:41.071 [INFO] [Thread-80594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:00:41.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:00:41.701 [DEBUG] [Thread-80594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:00:41.701 [DEBUG] [Thread-80594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:00:41.701 [DEBUG] [Thread-80594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:00:41.742 [DEBUG] [Thread-80594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:00:41.742 [DEBUG] [Thread-80594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:00:41.745 [DEBUG] [Thread-80594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:00:41.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:00:41.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:00:41.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:00:41.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:00:41.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:00:41.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:00:41.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:00:41.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:00:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:00:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.000095 -999.00   +7.10  31.14     91   +5.80 1 2 2 3 1     0    0 -999.00 0.00 Z.ESw 30.4 31.1 301.2 50.1 8.4 -20.2 8.2 -15.3 8.0 -14.8 8.3 -17.6
2025-12-13T02:00:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.000095
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:00:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:00:27', tmtdew=1.86, humidity=87.72, cloud=0.0, wind=37.51, temperature=7.32, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:00:08.208', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:59:00')
2025-12-13T02:00:41.769 [DEBUG] [Thread-80594] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:00:41.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:00:41.856 [DEBUG] [Thread-80597] [transport.py] [_log()] starting thread (client mode): 0xf813e1d0
2025-12-13T02:00:41.856 [DEBUG] [Thread-80597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:00:41.871 [DEBUG] [Thread-80597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:00:41.871 [INFO] [Thread-80597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:00:41.879 [DEBUG] [Thread-80597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] client lang: <none>
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] server lang: <none>
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] kex follows: False
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] Compression: none
2025-12-13T02:00:41.880 [DEBUG] [Thread-80597] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:00:41.940 [DEBUG] [Thread-80597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:00:41.940 [DEBUG] [Thread-80597] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:00:41.941 [DEBUG] [Thread-80597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:00:41.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:00:41.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:00:41.995 [DEBUG] [Thread-80597] [transport.py] [_log()] userauth is OK
2025-12-13T02:00:41.995 [DEBUG] [Thread-80597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:00:41.996 [DEBUG] [Thread-80597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:00:41.996 [DEBUG] [Thread-80597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:00:41.996 [DEBUG] [Thread-80597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:00:42.015 [INFO] [Thread-80597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:00:42.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:00:42.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:00:42.830 [DEBUG] [Thread-80597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:00:42.830 [DEBUG] [Thread-80597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:00:42.882 [DEBUG] [Thread-80597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:00:42.886 [DEBUG] [Thread-80597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:00:42.894 [DEBUG] [Thread-80597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:00:42.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:00: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')
2025-12-13T02:00:42.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:00:42.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:00:42.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:00:42.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:00:42.941 [DEBUG] [Thread-80597] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:00:47.283 [DEBUG] [Thread-80599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:02.321 [DEBUG] [Thread-80600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:12.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:01:12.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:01:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:01:13.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 0, 59), 1.9, 87.79, 0.0, 37.16, 7.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:01:13.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:00:59
2025-12-13T02:01:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:01:13.906 [DEBUG] [Thread-80601] [transport.py] [_log()] starting thread (client mode): 0xf81f27d0
2025-12-13T02:01:13.906 [DEBUG] [Thread-80601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:01:13.922 [DEBUG] [Thread-80601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:01:13.922 [INFO] [Thread-80601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] client lang: <none>
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] server lang: <none>
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] kex follows: False
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:01:13.925 [DEBUG] [Thread-80601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:01:13.926 [DEBUG] [Thread-80601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:01:13.926 [DEBUG] [Thread-80601] [transport.py] [_log()] Compression: none
2025-12-13T02:01:13.926 [DEBUG] [Thread-80601] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:01:13.944 [DEBUG] [Thread-80601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:01:13.944 [DEBUG] [Thread-80601] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:01:13.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:01:13.946 [DEBUG] [Thread-80601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:01:13.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:01:13.947 [DEBUG] [Thread-80601] [transport.py] [_log()] userauth is OK
2025-12-13T02:01:13.948 [DEBUG] [Thread-80601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:01:13.948 [DEBUG] [Thread-80601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:01:13.948 [DEBUG] [Thread-80601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:01:13.948 [DEBUG] [Thread-80601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:01:13.967 [INFO] [Thread-80601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:01:13.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:01:14.554 [DEBUG] [Thread-80601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:01:14.554 [DEBUG] [Thread-80601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:01:14.555 [DEBUG] [Thread-80601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:01:14.595 [DEBUG] [Thread-80601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:01:14.595 [DEBUG] [Thread-80601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:01:14.598 [DEBUG] [Thread-80601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:01:14.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:01:14.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:01:14.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:01:14.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:01:14.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:01:14.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:01:14.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:01:14.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:01:14.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:01:14.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.000442 -999.00   +7.20  29.26     91   +5.80 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 35.9 29.3 304.0 48.1 8.4 -20.2 8.2 -22.0 8.0 -20.1 8.3 -18.7
2025-12-13T02:01:14.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:01:14.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:01:14.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.000442
2025-12-13T02:01:14.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:01:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:01:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:01:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:01:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:01:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:00:59', tmtdew=1.9, humidity=87.79, cloud=0.0, wind=37.16, temperature=7.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:00:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:59:00')
2025-12-13T02:01:14.627 [DEBUG] [Thread-80601] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:01:14.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:01:14.724 [DEBUG] [Thread-80604] [transport.py] [_log()] starting thread (client mode): 0xf570ca00
2025-12-13T02:01:14.724 [DEBUG] [Thread-80604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:01:14.738 [DEBUG] [Thread-80604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:01:14.738 [INFO] [Thread-80604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] client lang: <none>
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] server lang: <none>
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] kex follows: False
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:01:14.746 [DEBUG] [Thread-80604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:01:14.747 [DEBUG] [Thread-80604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:01:14.747 [DEBUG] [Thread-80604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:01:14.747 [DEBUG] [Thread-80604] [transport.py] [_log()] Compression: none
2025-12-13T02:01:14.747 [DEBUG] [Thread-80604] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:01:14.803 [DEBUG] [Thread-80604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:01:14.804 [DEBUG] [Thread-80604] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:01:14.804 [DEBUG] [Thread-80604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:01:14.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:01:14.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:01:14.859 [DEBUG] [Thread-80604] [transport.py] [_log()] userauth is OK
2025-12-13T02:01:14.859 [DEBUG] [Thread-80604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:01:14.859 [DEBUG] [Thread-80604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:01:14.860 [DEBUG] [Thread-80604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:01:14.860 [DEBUG] [Thread-80604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:01:14.878 [INFO] [Thread-80604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:01:14.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:01:14.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:01:15.680 [DEBUG] [Thread-80604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:01:15.680 [DEBUG] [Thread-80604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:01:15.729 [DEBUG] [Thread-80604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:01:15.729 [DEBUG] [Thread-80604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:01:15.738 [DEBUG] [Thread-80604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:01:15.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:01:15.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:01:15.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:01:15.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:01:15.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:01:15.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:01:15.774 [DEBUG] [Thread-80604] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:01:17.347 [DEBUG] [Thread-80606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:21.290 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:21.292 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:32.378 [DEBUG] [Thread-80607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:32.393 [DEBUG] [Thread-80608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:01:45.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:01:45.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:01:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 1, 31), 1.89, 87.82, 0.0, 32.69, 7.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:01:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:01:31
2025-12-13T02:01:46.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:01:46.753 [DEBUG] [Thread-80609] [transport.py] [_log()] starting thread (client mode): 0xf570d600
2025-12-13T02:01:46.753 [DEBUG] [Thread-80609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:01:46.774 [DEBUG] [Thread-80609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:01:46.774 [INFO] [Thread-80609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] client lang: <none>
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] server lang: <none>
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] kex follows: False
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:01:46.778 [DEBUG] [Thread-80609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:01:46.779 [DEBUG] [Thread-80609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:01:46.779 [DEBUG] [Thread-80609] [transport.py] [_log()] Compression: none
2025-12-13T02:01:46.779 [DEBUG] [Thread-80609] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:01:46.796 [DEBUG] [Thread-80609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:01:46.797 [DEBUG] [Thread-80609] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:01:46.797 [DEBUG] [Thread-80609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:01:46.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:01:46.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:01:46.799 [DEBUG] [Thread-80609] [transport.py] [_log()] userauth is OK
2025-12-13T02:01:46.799 [DEBUG] [Thread-80609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:01:46.799 [DEBUG] [Thread-80609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:01:46.799 [DEBUG] [Thread-80609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:01:46.800 [DEBUG] [Thread-80609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:01:46.823 [INFO] [Thread-80609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:01:46.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:01:47.418 [DEBUG] [Thread-80611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:01:47.452 [DEBUG] [Thread-80609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:01:47.452 [DEBUG] [Thread-80609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:01:47.453 [DEBUG] [Thread-80609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:01:47.493 [DEBUG] [Thread-80609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:01:47.493 [DEBUG] [Thread-80609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:01:47.496 [DEBUG] [Thread-80609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:01:47.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:01:47.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:01:47.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:01:47.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:01:47.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:01:47.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:01:47.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:01:47.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:01:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:01:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.001137 -999.00   +7.10  38.61     91   +5.80 1 2 2 3 1     0    0 -999.00 0.00 ZnESW 35.4 38.6 312.6 49.4 8.4 -16.8 8.2 -16.7 7.9 -14.9 8.3 -13.0
2025-12-13T02:01:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:01:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:01:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.001137
2025-12-13T02:01:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:01:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:01:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:01:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:01:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:01:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:01:31', tmtdew=1.89, humidity=87.82, cloud=0.0, wind=32.69, temperature=7.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:01:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:59:00')
2025-12-13T02:01:47.520 [DEBUG] [Thread-80609] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:01:47.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:01:47.625 [DEBUG] [Thread-80613] [transport.py] [_log()] starting thread (client mode): 0xf5789630
2025-12-13T02:01:47.625 [DEBUG] [Thread-80613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:01:47.640 [DEBUG] [Thread-80613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:01:47.640 [INFO] [Thread-80613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] client lang: <none>
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] server lang: <none>
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] kex follows: False
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] Compression: none
2025-12-13T02:01:47.648 [DEBUG] [Thread-80613] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:01:47.706 [DEBUG] [Thread-80613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:01:47.707 [DEBUG] [Thread-80613] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:01:47.707 [DEBUG] [Thread-80613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:01:47.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:01:47.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:01:47.763 [DEBUG] [Thread-80613] [transport.py] [_log()] userauth is OK
2025-12-13T02:01:47.763 [DEBUG] [Thread-80613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:01:47.764 [DEBUG] [Thread-80613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:01:47.764 [DEBUG] [Thread-80613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:01:47.764 [DEBUG] [Thread-80613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:01:47.782 [INFO] [Thread-80613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:01:47.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:01:47.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:01:48.598 [DEBUG] [Thread-80613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:01:48.598 [DEBUG] [Thread-80613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:01:48.645 [DEBUG] [Thread-80613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:01:48.645 [DEBUG] [Thread-80613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:01:48.654 [DEBUG] [Thread-80613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:01:48.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:01:48.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:01:48.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:01:48.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:01:48.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:01:48.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:01:48.686 [DEBUG] [Thread-80613] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:02:02.448 [DEBUG] [Thread-80615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:17.488 [DEBUG] [Thread-80616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:18.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:02:18.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:02:18.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:02:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 2, 3), 1.9, 87.79, 0.0, 36.91, 7.37, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:02:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:02:03
2025-12-13T02:02:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:02:19.697 [DEBUG] [Thread-80617] [transport.py] [_log()] starting thread (client mode): 0xf5788790
2025-12-13T02:02:19.697 [DEBUG] [Thread-80617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:02:19.717 [DEBUG] [Thread-80617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:02:19.717 [INFO] [Thread-80617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] client lang: <none>
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] server lang: <none>
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] kex follows: False
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:02:19.718 [DEBUG] [Thread-80617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:02:19.719 [DEBUG] [Thread-80617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:02:19.719 [DEBUG] [Thread-80617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:02:19.719 [DEBUG] [Thread-80617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:02:19.719 [DEBUG] [Thread-80617] [transport.py] [_log()] Compression: none
2025-12-13T02:02:19.719 [DEBUG] [Thread-80617] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:02:19.735 [DEBUG] [Thread-80617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:02:19.735 [DEBUG] [Thread-80617] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:02:19.735 [DEBUG] [Thread-80617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:02:19.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:02:19.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:02:19.736 [DEBUG] [Thread-80617] [transport.py] [_log()] userauth is OK
2025-12-13T02:02:19.736 [DEBUG] [Thread-80617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:02:19.736 [DEBUG] [Thread-80617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:02:19.736 [DEBUG] [Thread-80617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:02:19.736 [DEBUG] [Thread-80617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:02:19.751 [INFO] [Thread-80617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:02:19.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:02:20.290 [DEBUG] [Thread-80617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:02:20.291 [DEBUG] [Thread-80617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:02:20.291 [DEBUG] [Thread-80617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:02:20.331 [DEBUG] [Thread-80617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:02:20.331 [DEBUG] [Thread-80617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:02:20.334 [DEBUG] [Thread-80617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:02:20.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:02:20.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:02:20.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:02:20.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:02:20.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:02:20.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:02:20.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.001484 -999.00   +7.10  29.96     91   +5.80 1 2 1 3 1     0    0 -999.00 0.00 ZnESW 38.1 30.0 309.6 42.7 8.3 -21.3 8.1 -20.2 7.8 -18.3 8.2 -19.4
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.001484
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:02:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:02:03', tmtdew=1.9, humidity=87.79, cloud=0.0, wind=36.91, temperature=7.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:02:08.218', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.1362500000000004, 1.5322500000000003, 1.7104999999999997, 1.1985000000000001, nan, nan, nan, nan, 1.197, 0.5812499999999989, 1.0359999999999996, 0.9399999999999995, nan, nan, nan, 2.0832499999999996, 0.36150000000000126, 0.347999999999999, 1.2097499999999997, 1.2739999999999991, nan, nan, nan, 1.5269999999999992, 0.40549999999999997, 0.30675000000000097, 0.8870000000000005, nan, 2.1590000000000007, nan, 1.469500000000001, 0.7917499999999995], zp_timestamp='2025-12-12T23:59:00')
2025-12-13T02:02:20.353 [DEBUG] [Thread-80617] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:02:20.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:02:20.438 [DEBUG] [Thread-80620] [transport.py] [_log()] starting thread (client mode): 0xf578b640
2025-12-13T02:02:20.438 [DEBUG] [Thread-80620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:02:20.453 [DEBUG] [Thread-80620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:02:20.453 [INFO] [Thread-80620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] client lang: <none>
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] server lang: <none>
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] kex follows: False
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] Compression: none
2025-12-13T02:02:20.461 [DEBUG] [Thread-80620] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:02:20.517 [DEBUG] [Thread-80620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:02:20.517 [DEBUG] [Thread-80620] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:02:20.517 [DEBUG] [Thread-80620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:02:20.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:02:20.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:02:20.575 [DEBUG] [Thread-80620] [transport.py] [_log()] userauth is OK
2025-12-13T02:02:20.575 [DEBUG] [Thread-80620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:02:20.575 [DEBUG] [Thread-80620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:02:20.575 [DEBUG] [Thread-80620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:02:20.575 [DEBUG] [Thread-80620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:02:20.589 [INFO] [Thread-80620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:02:20.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:02:20.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:02:21.442 [DEBUG] [Thread-80620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:02:21.442 [DEBUG] [Thread-80620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:02:21.489 [DEBUG] [Thread-80620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:02:21.489 [DEBUG] [Thread-80620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:02:21.496 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:21.497 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:21.498 [DEBUG] [Thread-80620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:02:21.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:02:21.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:02:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:02:21.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:02:21.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:02:21.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:02:21.529 [DEBUG] [Thread-80620] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:02:32.457 [DEBUG] [Thread-80622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:32.512 [DEBUG] [Thread-80623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:47.545 [DEBUG] [Thread-80624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:02:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:02:51.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:02:51.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:02:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 2, 35), 1.85, 88.27, 0.0, 39.36, 7.27, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:02:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:02:35
2025-12-13T02:02:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:02:52.508 [DEBUG] [Thread-80625] [transport.py] [_log()] starting thread (client mode): 0xf813f9d0
2025-12-13T02:02:52.508 [DEBUG] [Thread-80625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:02:52.525 [DEBUG] [Thread-80625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:02:52.526 [INFO] [Thread-80625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:02:52.527 [DEBUG] [Thread-80625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] client lang: <none>
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] server lang: <none>
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] kex follows: False
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] Compression: none
2025-12-13T02:02:52.528 [DEBUG] [Thread-80625] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:02:52.539 [DEBUG] [Thread-80625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:02:52.540 [DEBUG] [Thread-80625] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:02:52.540 [DEBUG] [Thread-80625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:02:52.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:02:52.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:02:52.541 [DEBUG] [Thread-80625] [transport.py] [_log()] userauth is OK
2025-12-13T02:02:52.541 [DEBUG] [Thread-80625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:02:52.542 [DEBUG] [Thread-80625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:02:52.542 [DEBUG] [Thread-80625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:02:52.542 [DEBUG] [Thread-80625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:02:52.558 [INFO] [Thread-80625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:02:52.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:02:53.165 [DEBUG] [Thread-80625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:02:53.165 [DEBUG] [Thread-80625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:02:53.165 [DEBUG] [Thread-80625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:02:53.206 [DEBUG] [Thread-80625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:02:53.206 [DEBUG] [Thread-80625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:02:53.208 [DEBUG] [Thread-80625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:02:53.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:02:53.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:02:53.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:02:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:02:53.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:02:53.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:02:53.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:02:53.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:02:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:02:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.001831 -999.00   +7.10  36.50     91   +5.80 1 2 2 3 1     0    0 -999.00 0.00 Z.ESw 33.7 36.5 298.2 47.7 8.3 -22.7 8.1 -20.6 7.8 -19.4 8.2 -21.3
2025-12-13T02:02:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:02:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:02:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.001831
2025-12-13T02:02:53.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:02:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:02:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:02:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:02:53.229 [DEBUG] [Thread-80625] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:02:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:02:53.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:02:35', tmtdew=1.85, humidity=88.27, cloud=0.0, wind=39.36, temperature=7.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:02:38.198', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.10125000000000028, 0.2532500000000013, 0.3290000000000006, 0.6044999999999998, 0.5492500000000007, 0.6399999999999997, 0.39225000000000065, 0.26750000000000007, 0.1269999999999989, 0.14224999999999888, 0.33699999999999974, 0.6919999999999993, 1.0052499999999993, 0.698999999999999, 1.0319999999999991, 0.4952500000000004, 0.19449999999999967, 0.15399999999999991, 0.2942499999999981, 0.45899999999999874, 1.3947499999999984, 0.893250000000001, 1.1957500000000003, 0.4479999999999986, 0.24150000000000027, 0.18074999999999974, 0.34250000000000025, 0.5040000000000004, 0.5860000000000012, nan, nan, 0.32624999999999904], zp_timestamp='2025-12-13T00:01:00')
2025-12-13T02:02:53.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:02:53.325 [DEBUG] [Thread-80628] [transport.py] [_log()] starting thread (client mode): 0xfabc5840
2025-12-13T02:02:53.325 [DEBUG] [Thread-80628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:02:53.340 [DEBUG] [Thread-80628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:02:53.340 [INFO] [Thread-80628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] client lang: <none>
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] server lang: <none>
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] kex follows: False
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] Compression: none
2025-12-13T02:02:53.348 [DEBUG] [Thread-80628] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:02:53.406 [DEBUG] [Thread-80628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:02:53.407 [DEBUG] [Thread-80628] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:02:53.407 [DEBUG] [Thread-80628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:02:53.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:02:53.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:02:53.465 [DEBUG] [Thread-80628] [transport.py] [_log()] userauth is OK
2025-12-13T02:02:53.465 [DEBUG] [Thread-80628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:02:53.465 [DEBUG] [Thread-80628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:02:53.465 [DEBUG] [Thread-80628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:02:53.465 [DEBUG] [Thread-80628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:02:53.484 [INFO] [Thread-80628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:02:53.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:02:53.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:02:54.301 [DEBUG] [Thread-80628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:02:54.302 [DEBUG] [Thread-80628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:02:54.350 [DEBUG] [Thread-80628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:02:54.350 [DEBUG] [Thread-80628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:02:54.360 [DEBUG] [Thread-80628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:02:54.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:02:54.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:02: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') -> 00000000
2025-12-13T02:02:54.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:02:54.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:02:54.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:02:54.395 [DEBUG] [Thread-80628] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:03:02.573 [DEBUG] [Thread-80630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:17.625 [DEBUG] [Thread-80631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:21.699 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:21.700 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:24.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:03:24.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:03:24.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:03:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 3, 7), 1.83, 88.37, 0.0, 35.99, 7.29, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:03:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:03:07
2025-12-13T02:03:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:03:25.380 [DEBUG] [Thread-80632] [transport.py] [_log()] starting thread (client mode): 0xf81e7dc0
2025-12-13T02:03:25.380 [DEBUG] [Thread-80632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:03:25.398 [DEBUG] [Thread-80632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:03:25.398 [INFO] [Thread-80632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] client lang: <none>
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] server lang: <none>
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] kex follows: False
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:03:25.401 [DEBUG] [Thread-80632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:03:25.402 [DEBUG] [Thread-80632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:03:25.402 [DEBUG] [Thread-80632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:03:25.402 [DEBUG] [Thread-80632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:03:25.402 [DEBUG] [Thread-80632] [transport.py] [_log()] Compression: none
2025-12-13T02:03:25.402 [DEBUG] [Thread-80632] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:03:25.419 [DEBUG] [Thread-80632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:03:25.419 [DEBUG] [Thread-80632] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:03:25.420 [DEBUG] [Thread-80632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:03:25.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:03:25.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:03:25.422 [DEBUG] [Thread-80632] [transport.py] [_log()] userauth is OK
2025-12-13T02:03:25.422 [DEBUG] [Thread-80632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:03:25.422 [DEBUG] [Thread-80632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:03:25.422 [DEBUG] [Thread-80632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:03:25.422 [DEBUG] [Thread-80632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:03:25.445 [INFO] [Thread-80632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:03:25.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:03:26.044 [DEBUG] [Thread-80632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:03:26.044 [DEBUG] [Thread-80632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:03:26.045 [DEBUG] [Thread-80632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:03:26.085 [DEBUG] [Thread-80632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:03:26.085 [DEBUG] [Thread-80632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:03:26.087 [DEBUG] [Thread-80632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:03:26.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:03:26.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:03:26.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:03:26.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:03:26.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:03:26.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:03:26.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:03:26.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:03:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:03:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.002179 -999.00   +7.10  38.69     91   +5.80 1 2 2 3 1     0    0 -999.00 0.00 ZnESW 37.6 38.7 314.0 46.5 8.3 -22.7 8.1 -21.3 7.8 -20.0 8.2 -21.3
2025-12-13T02:03:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:03:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:03:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.002179
2025-12-13T02:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:03:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:03:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:03:07', tmtdew=1.83, humidity=88.37, cloud=0.0, wind=35.99, temperature=7.29, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:03:08.266', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.10125000000000028, 0.2532500000000013, 0.3290000000000006, 0.6044999999999998, 0.5492500000000007, 0.6399999999999997, 0.39225000000000065, 0.26750000000000007, 0.1269999999999989, 0.14224999999999888, 0.33699999999999974, 0.6919999999999993, 1.0052499999999993, 0.698999999999999, 1.0319999999999991, 0.4952500000000004, 0.19449999999999967, 0.15399999999999991, 0.2942499999999981, 0.45899999999999874, 1.3947499999999984, 0.893250000000001, 1.1957500000000003, 0.4479999999999986, 0.24150000000000027, 0.18074999999999974, 0.34250000000000025, 0.5040000000000004, 0.5860000000000012, nan, nan, 0.32624999999999904], zp_timestamp='2025-12-13T00:01:00')
2025-12-13T02:03:26.105 [DEBUG] [Thread-80632] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:03:26.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:03:26.202 [DEBUG] [Thread-80635] [transport.py] [_log()] starting thread (client mode): 0xf813f970
2025-12-13T02:03:26.202 [DEBUG] [Thread-80635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:03:26.217 [DEBUG] [Thread-80635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:03:26.217 [INFO] [Thread-80635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:03:26.224 [DEBUG] [Thread-80635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] client lang: <none>
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] server lang: <none>
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] kex follows: False
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] Compression: none
2025-12-13T02:03:26.225 [DEBUG] [Thread-80635] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:03:26.282 [DEBUG] [Thread-80635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:03:26.283 [DEBUG] [Thread-80635] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:03:26.283 [DEBUG] [Thread-80635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:03:26.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:03:26.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:03:26.339 [DEBUG] [Thread-80635] [transport.py] [_log()] userauth is OK
2025-12-13T02:03:26.339 [DEBUG] [Thread-80635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:03:26.339 [DEBUG] [Thread-80635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:03:26.339 [DEBUG] [Thread-80635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:03:26.339 [DEBUG] [Thread-80635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:03:26.362 [INFO] [Thread-80635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:03:26.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:03:26.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:03:27.258 [DEBUG] [Thread-80635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:03:27.258 [DEBUG] [Thread-80635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:03:27.306 [DEBUG] [Thread-80635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:03:27.306 [DEBUG] [Thread-80635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:03:27.315 [DEBUG] [Thread-80635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:03:27.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:03:27.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:03:27.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:03:27.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:03:27.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:03:27.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:03:27.351 [DEBUG] [Thread-80635] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:03:32.527 [DEBUG] [Thread-80637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:32.654 [DEBUG] [Thread-80638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:47.691 [DEBUG] [Thread-80639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:03:57.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:03:57.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:03:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:03:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 3, 39), 1.82, 88.45, 0.0, 30.79, 7.34, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:03:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:03:39
2025-12-13T02:03:58.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:03:58.347 [DEBUG] [Thread-80640] [transport.py] [_log()] starting thread (client mode): 0xf81e64a0
2025-12-13T02:03:58.347 [DEBUG] [Thread-80640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:03:58.367 [DEBUG] [Thread-80640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:03:58.367 [INFO] [Thread-80640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:03:58.370 [DEBUG] [Thread-80640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:03:58.370 [DEBUG] [Thread-80640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:03:58.370 [DEBUG] [Thread-80640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:03:58.370 [DEBUG] [Thread-80640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:58.370 [DEBUG] [Thread-80640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] client lang: <none>
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] server lang: <none>
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] kex follows: False
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] Compression: none
2025-12-13T02:03:58.371 [DEBUG] [Thread-80640] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:03:58.387 [DEBUG] [Thread-80640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:03:58.387 [DEBUG] [Thread-80640] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:03:58.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:03:58.388 [DEBUG] [Thread-80640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:03:58.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:03:58.428 [DEBUG] [Thread-80640] [transport.py] [_log()] userauth is OK
2025-12-13T02:03:58.429 [DEBUG] [Thread-80640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:03:58.429 [DEBUG] [Thread-80640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:03:58.429 [DEBUG] [Thread-80640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:03:58.429 [DEBUG] [Thread-80640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:03:58.453 [INFO] [Thread-80640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:03:58.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:03:59.023 [DEBUG] [Thread-80640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:03:59.023 [DEBUG] [Thread-80640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:03:59.024 [DEBUG] [Thread-80640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:03:59.064 [DEBUG] [Thread-80640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:03:59.064 [DEBUG] [Thread-80640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:03:59.070 [DEBUG] [Thread-80640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:03:59.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:03:59.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:03:59.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:03:59.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:03:59.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:03:59.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:03:59.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:03:59.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:03:59.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:03:59.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.002526 -999.00   +7.00  40.16     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZnESW 34.8 40.2 311.8 49.6 8.3 -23.1 8.1 -22.4 7.7 -21.2 8.1 -20.2
2025-12-13T02:03:59.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:03:59.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:03:59.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.002526
2025-12-13T02:03:59.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:03:59.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:03:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:03:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:03:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:03:59.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:03:39', tmtdew=1.82, humidity=88.45, cloud=0.0, wind=30.79, temperature=7.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:03:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.10125000000000028, 0.2532500000000013, 0.3290000000000006, 0.6044999999999998, 0.5492500000000007, 0.6399999999999997, 0.39225000000000065, 0.26750000000000007, 0.1269999999999989, 0.14224999999999888, 0.33699999999999974, 0.6919999999999993, 1.0052499999999993, 0.698999999999999, 1.0319999999999991, 0.4952500000000004, 0.19449999999999967, 0.15399999999999991, 0.2942499999999981, 0.45899999999999874, 1.3947499999999984, 0.893250000000001, 1.1957500000000003, 0.4479999999999986, 0.24150000000000027, 0.18074999999999974, 0.34250000000000025, 0.5040000000000004, 0.5860000000000012, nan, nan, 0.32624999999999904], zp_timestamp='2025-12-13T00:01:00')
2025-12-13T02:03:59.095 [DEBUG] [Thread-80640] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:03:59.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:03:59.192 [DEBUG] [Thread-80643] [transport.py] [_log()] starting thread (client mode): 0xf570df30
2025-12-13T02:03:59.192 [DEBUG] [Thread-80643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:03:59.207 [DEBUG] [Thread-80643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:03:59.207 [INFO] [Thread-80643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] client lang: <none>
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] server lang: <none>
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] kex follows: False
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:03:59.215 [DEBUG] [Thread-80643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:03:59.216 [DEBUG] [Thread-80643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:03:59.216 [DEBUG] [Thread-80643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:03:59.216 [DEBUG] [Thread-80643] [transport.py] [_log()] Compression: none
2025-12-13T02:03:59.216 [DEBUG] [Thread-80643] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:03:59.275 [DEBUG] [Thread-80643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:03:59.276 [DEBUG] [Thread-80643] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:03:59.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:03:59.276 [DEBUG] [Thread-80643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:03:59.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:03:59.331 [DEBUG] [Thread-80643] [transport.py] [_log()] userauth is OK
2025-12-13T02:03:59.331 [DEBUG] [Thread-80643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:03:59.331 [DEBUG] [Thread-80643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:03:59.331 [DEBUG] [Thread-80643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:03:59.331 [DEBUG] [Thread-80643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:03:59.350 [INFO] [Thread-80643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:03:59.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:03:59.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:04:00.186 [DEBUG] [Thread-80643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:04:00.186 [DEBUG] [Thread-80643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:04:00.234 [DEBUG] [Thread-80643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:04:00.234 [DEBUG] [Thread-80643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:04:00.243 [DEBUG] [Thread-80643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:04:00.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:04:00.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:04:00.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:04:00.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:04:00.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:04:00.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:04:00.277 [DEBUG] [Thread-80643] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:04:02.719 [DEBUG] [Thread-80645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:04:17.755 [DEBUG] [Thread-80646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:04:21.913 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:04:21.915 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:04:30.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:04:30.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:04:30.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:04:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 4, 11), 1.82, 88.42, 0.0, 29.25, 7.34, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:04:30.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:04:11
2025-12-13T02:04:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:04:31.240 [DEBUG] [Thread-80647] [transport.py] [_log()] starting thread (client mode): 0xfabc5420
2025-12-13T02:04:31.241 [DEBUG] [Thread-80647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:04:31.260 [DEBUG] [Thread-80647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:04:31.261 [INFO] [Thread-80647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] client lang: <none>
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] server lang: <none>
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] kex follows: False
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] Compression: none
2025-12-13T02:04:31.264 [DEBUG] [Thread-80647] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:04:31.281 [DEBUG] [Thread-80647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:04:31.282 [DEBUG] [Thread-80647] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:04:31.282 [DEBUG] [Thread-80647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:04:31.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:04:31.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:04:31.284 [DEBUG] [Thread-80647] [transport.py] [_log()] userauth is OK
2025-12-13T02:04:31.284 [DEBUG] [Thread-80647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:04:31.284 [DEBUG] [Thread-80647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:04:31.284 [DEBUG] [Thread-80647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:04:31.284 [DEBUG] [Thread-80647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:04:31.299 [INFO] [Thread-80647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:04:31.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:04:32.115 [DEBUG] [Thread-80647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:04:32.116 [DEBUG] [Thread-80647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:04:32.116 [DEBUG] [Thread-80647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:04:32.157 [DEBUG] [Thread-80647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:04:32.158 [DEBUG] [Thread-80647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:04:32.161 [DEBUG] [Thread-80647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:04:32.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:04:32.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:04:32.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:04:32.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:04:32.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:04:32.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:04:32.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:04:32.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:04:32.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:04:32.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.002526 -999.00   +7.00  40.16     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZnESW 34.8 40.2 311.8 49.6 8.3 -23.1 8.1 -22.4 7.7 -21.2 8.1 -20.2
2025-12-13T02:04:32.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:04:32.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:04:32.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.002526
2025-12-13T02:04:32.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:04:32.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:04:32.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:04:32.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:04:32.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:04:32.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:04:11', tmtdew=1.82, humidity=88.42, cloud=0.0, wind=29.25, temperature=7.34, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:03:38.246', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.10125000000000028, 0.2532500000000013, 0.3290000000000006, 0.6044999999999998, 0.5492500000000007, 0.6399999999999997, 0.39225000000000065, 0.26750000000000007, 0.1269999999999989, 0.14224999999999888, 0.33699999999999974, 0.6919999999999993, 1.0052499999999993, 0.698999999999999, 1.0319999999999991, 0.4952500000000004, 0.19449999999999967, 0.15399999999999991, 0.2942499999999981, 0.45899999999999874, 1.3947499999999984, 0.893250000000001, 1.1957500000000003, 0.4479999999999986, 0.24150000000000027, 0.18074999999999974, 0.34250000000000025, 0.5040000000000004, 0.5860000000000012, nan, nan, 0.32624999999999904], zp_timestamp='2025-12-13T00:01:00')
2025-12-13T02:04:32.190 [DEBUG] [Thread-80647] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:04:32.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:04:32.280 [DEBUG] [Thread-80650] [transport.py] [_log()] starting thread (client mode): 0xf5743790
2025-12-13T02:04:32.280 [DEBUG] [Thread-80650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:04:32.294 [DEBUG] [Thread-80650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:04:32.295 [INFO] [Thread-80650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:04:32.302 [DEBUG] [Thread-80650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:04:32.302 [DEBUG] [Thread-80650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:04:32.303 [DEBUG] [Thread-80650] [transport.py] [_log()] client lang: <none>
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] server lang: <none>
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] kex follows: False
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] Compression: none
2025-12-13T02:04:32.304 [DEBUG] [Thread-80650] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:04:32.358 [DEBUG] [Thread-80650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:04:32.359 [DEBUG] [Thread-80650] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:04:32.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:04:32.360 [DEBUG] [Thread-80650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:04:32.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:04:32.419 [DEBUG] [Thread-80650] [transport.py] [_log()] userauth is OK
2025-12-13T02:04:32.419 [DEBUG] [Thread-80650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:04:32.419 [DEBUG] [Thread-80650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:04:32.419 [DEBUG] [Thread-80650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:04:32.419 [DEBUG] [Thread-80650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:04:32.438 [INFO] [Thread-80650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:04:32.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:04:32.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:04:32.594 [DEBUG] [Thread-80652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:04:32.781 [DEBUG] [Thread-80653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:04:33.253 [DEBUG] [Thread-80650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:04:33.253 [DEBUG] [Thread-80650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:04:33.301 [DEBUG] [Thread-80650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:04:33.302 [DEBUG] [Thread-80650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:04:33.310 [DEBUG] [Thread-80650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:04:33.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:04:33.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:04:33.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:04:33.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:04:33.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:04:33.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:04:33.342 [DEBUG] [Thread-80650] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:04:47.821 [DEBUG] [Thread-80654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:02.847 [DEBUG] [Thread-80655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:03.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:05:03.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:05:03.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:05:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 4, 43), 1.77, 88.42, 0.0, 37.14, 7.27, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:05:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:04:43
2025-12-13T02:05:04.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:05:04.329 [DEBUG] [Thread-80656] [transport.py] [_log()] starting thread (client mode): 0xf578a3e0
2025-12-13T02:05:04.329 [DEBUG] [Thread-80656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:05:04.350 [DEBUG] [Thread-80656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:05:04.351 [INFO] [Thread-80656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] client lang: <none>
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] server lang: <none>
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] kex follows: False
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:05:04.355 [DEBUG] [Thread-80656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:05:04.356 [DEBUG] [Thread-80656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:05:04.356 [DEBUG] [Thread-80656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:05:04.356 [DEBUG] [Thread-80656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:05:04.356 [DEBUG] [Thread-80656] [transport.py] [_log()] Compression: none
2025-12-13T02:05:04.356 [DEBUG] [Thread-80656] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:05:04.372 [DEBUG] [Thread-80656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:05:04.372 [DEBUG] [Thread-80656] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:05:04.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:05:04.373 [DEBUG] [Thread-80656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:05:04.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:05:04.375 [DEBUG] [Thread-80656] [transport.py] [_log()] userauth is OK
2025-12-13T02:05:04.375 [DEBUG] [Thread-80656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:05:04.375 [DEBUG] [Thread-80656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:05:04.375 [DEBUG] [Thread-80656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:05:04.376 [DEBUG] [Thread-80656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:05:04.398 [INFO] [Thread-80656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:05:04.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:05:05.199 [DEBUG] [Thread-80656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:05:05.199 [DEBUG] [Thread-80656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:05:05.200 [DEBUG] [Thread-80656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:05:05.239 [DEBUG] [Thread-80656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:05:05.240 [DEBUG] [Thread-80656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:05:05.241 [DEBUG] [Thread-80656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:05:05.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:05:05.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:05:05.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:05:05.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:05:05.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:05:05.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:05:05.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:05:05.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:05:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:05:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.002873 -999.00   +7.00  38.95     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZnESW 37.0 39.0 299.2 45.7 8.2 -19.2 8.0 -17.0 7.7 -15.7 8.1 -14.7
2025-12-13T02:05:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:05:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:05:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.002873
2025-12-13T02:05:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:05:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:05:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:05:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:05:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:05:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:04:43', tmtdew=1.77, humidity=88.42, cloud=0.0, wind=37.14, temperature=7.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:04:08.227', atlas_cloud=2, atlas_rain=1, zp_data=[0.2367499999999989, 0.10125000000000028, 0.2532500000000013, 0.3290000000000006, 0.6044999999999998, 0.5492500000000007, 0.6399999999999997, 0.39225000000000065, 0.26750000000000007, 0.1269999999999989, 0.14224999999999888, 0.33699999999999974, 0.6919999999999993, 1.0052499999999993, 0.698999999999999, 1.0319999999999991, 0.4952500000000004, 0.19449999999999967, 0.15399999999999991, 0.2942499999999981, 0.45899999999999874, 1.3947499999999984, 0.893250000000001, 1.1957500000000003, 0.4479999999999986, 0.24150000000000027, 0.18074999999999974, 0.34250000000000025, 0.5040000000000004, 0.5860000000000012, nan, nan, 0.32624999999999904], zp_timestamp='2025-12-13T00:01:00')
2025-12-13T02:05:05.291 [DEBUG] [Thread-80656] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:05:05.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:05:05.397 [DEBUG] [Thread-80659] [transport.py] [_log()] starting thread (client mode): 0xfabc6f50
2025-12-13T02:05:05.397 [DEBUG] [Thread-80659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:05:05.412 [DEBUG] [Thread-80659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:05:05.412 [INFO] [Thread-80659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:05:05.420 [DEBUG] [Thread-80659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] client lang: <none>
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] server lang: <none>
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] kex follows: False
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] Compression: none
2025-12-13T02:05:05.421 [DEBUG] [Thread-80659] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:05:05.479 [DEBUG] [Thread-80659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:05:05.479 [DEBUG] [Thread-80659] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:05:05.480 [DEBUG] [Thread-80659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:05:05.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:05:05.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:05:05.535 [DEBUG] [Thread-80659] [transport.py] [_log()] userauth is OK
2025-12-13T02:05:05.535 [DEBUG] [Thread-80659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:05:05.535 [DEBUG] [Thread-80659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:05:05.535 [DEBUG] [Thread-80659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:05:05.535 [DEBUG] [Thread-80659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:05:05.555 [INFO] [Thread-80659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:05:05.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:05:05.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:05:06.404 [DEBUG] [Thread-80659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:05:06.404 [DEBUG] [Thread-80659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:05:06.452 [DEBUG] [Thread-80659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:05:06.452 [DEBUG] [Thread-80659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:05:06.460 [DEBUG] [Thread-80659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:05:06.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:05:06.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:05:06.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:05:06.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:05:06.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:05:06.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:05:06.495 [DEBUG] [Thread-80659] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:05:17.873 [DEBUG] [Thread-80661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:22.121 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:22.122 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:32.667 [DEBUG] [Thread-80662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:32.907 [DEBUG] [Thread-80663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:05:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:05:36.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:05:36.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:05:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 5, 15), 1.79, 88.32, 0.0, 35.52, 7.24, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:05:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:05:15
2025-12-13T02:05:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:05:37.469 [DEBUG] [Thread-80664] [transport.py] [_log()] starting thread (client mode): 0xf578afb0
2025-12-13T02:05:37.469 [DEBUG] [Thread-80664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:05:37.489 [DEBUG] [Thread-80664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:05:37.489 [INFO] [Thread-80664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] client lang: <none>
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] server lang: <none>
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] kex follows: False
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] Compression: none
2025-12-13T02:05:37.492 [DEBUG] [Thread-80664] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:05:37.507 [DEBUG] [Thread-80664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:05:37.508 [DEBUG] [Thread-80664] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:05:37.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:05:37.509 [DEBUG] [Thread-80664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:05:37.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:05:37.511 [DEBUG] [Thread-80664] [transport.py] [_log()] userauth is OK
2025-12-13T02:05:37.511 [DEBUG] [Thread-80664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:05:37.511 [DEBUG] [Thread-80664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:05:37.511 [DEBUG] [Thread-80664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:05:37.511 [DEBUG] [Thread-80664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:05:37.536 [INFO] [Thread-80664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:05:37.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:05:38.278 [DEBUG] [Thread-80664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:05:38.278 [DEBUG] [Thread-80664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:05:38.279 [DEBUG] [Thread-80664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:05:38.320 [DEBUG] [Thread-80664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:05:38.320 [DEBUG] [Thread-80664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:05:38.327 [DEBUG] [Thread-80664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:05:38.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:05:38.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:05:38.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:05:38.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:05:38.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:05:38.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:05:38.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:05:38.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:05:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:05:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.003220 -999.00   +7.10  36.78     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZnESW 37.7 36.8 305.2 49.3 8.2 -15.8 8.0 -16.5 7.7 -15.1 8.1 -17.2
2025-12-13T02:05:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:05:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:05:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.003220
2025-12-13T02:05:38.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:05:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:05:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:05:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:05:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:05:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:05:15', tmtdew=1.79, humidity=88.32, cloud=0.0, wind=35.52, temperature=7.24, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:04:38.208', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:04:00')
2025-12-13T02:05:38.349 [DEBUG] [Thread-80664] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:05:38.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:05:38.448 [DEBUG] [Thread-80667] [transport.py] [_log()] starting thread (client mode): 0xfabc6860
2025-12-13T02:05:38.448 [DEBUG] [Thread-80667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:05:38.464 [DEBUG] [Thread-80667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:05:38.465 [INFO] [Thread-80667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:05:38.472 [DEBUG] [Thread-80667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:05:38.472 [DEBUG] [Thread-80667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:05:38.472 [DEBUG] [Thread-80667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] client lang: <none>
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] server lang: <none>
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] kex follows: False
2025-12-13T02:05:38.473 [DEBUG] [Thread-80667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:05:38.474 [DEBUG] [Thread-80667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:05:38.474 [DEBUG] [Thread-80667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:05:38.474 [DEBUG] [Thread-80667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:05:38.474 [DEBUG] [Thread-80667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:05:38.474 [DEBUG] [Thread-80667] [transport.py] [_log()] Compression: none
2025-12-13T02:05:38.474 [DEBUG] [Thread-80667] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:05:38.530 [DEBUG] [Thread-80667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:05:38.531 [DEBUG] [Thread-80667] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:05:38.531 [DEBUG] [Thread-80667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:05:38.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:05:38.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:05:38.586 [DEBUG] [Thread-80667] [transport.py] [_log()] userauth is OK
2025-12-13T02:05:38.587 [DEBUG] [Thread-80667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:05:38.587 [DEBUG] [Thread-80667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:05:38.587 [DEBUG] [Thread-80667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:05:38.587 [DEBUG] [Thread-80667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:05:38.606 [INFO] [Thread-80667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:05:38.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:05:38.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:05:39.437 [DEBUG] [Thread-80667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:05:39.437 [DEBUG] [Thread-80667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:05:39.484 [DEBUG] [Thread-80667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:05:39.485 [DEBUG] [Thread-80667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:05:39.493 [DEBUG] [Thread-80667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:05:39.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:05:39.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:05:39.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:05:39.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:05:39.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:05:39.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:05:39.532 [DEBUG] [Thread-80667] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:05:47.932 [DEBUG] [Thread-80669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:02.974 [DEBUG] [Thread-80670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:06:09.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:06:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:06:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 5, 47), 1.83, 88.35, 0.0, 36.8, 7.29, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:06:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:05:47
2025-12-13T02:06:10.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:06:10.558 [DEBUG] [Thread-80671] [transport.py] [_log()] starting thread (client mode): 0xf81e69b0
2025-12-13T02:06:10.558 [DEBUG] [Thread-80671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:06:10.578 [DEBUG] [Thread-80671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:06:10.578 [INFO] [Thread-80671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] client lang: <none>
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] server lang: <none>
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] kex follows: False
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] Compression: none
2025-12-13T02:06:10.582 [DEBUG] [Thread-80671] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:06:10.597 [DEBUG] [Thread-80671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:06:10.597 [DEBUG] [Thread-80671] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:06:10.597 [DEBUG] [Thread-80671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:06:10.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:06:10.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:06:10.598 [DEBUG] [Thread-80671] [transport.py] [_log()] userauth is OK
2025-12-13T02:06:10.598 [DEBUG] [Thread-80671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:06:10.598 [DEBUG] [Thread-80671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:06:10.598 [DEBUG] [Thread-80671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:06:10.598 [DEBUG] [Thread-80671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:06:10.612 [INFO] [Thread-80671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:06:10.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:06:11.261 [DEBUG] [Thread-80671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:06:11.261 [DEBUG] [Thread-80671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:06:11.261 [DEBUG] [Thread-80671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:06:11.303 [DEBUG] [Thread-80671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:06:11.303 [DEBUG] [Thread-80671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:06:11.305 [DEBUG] [Thread-80671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:06:11.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:06:11.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:06:11.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:06:11.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:06:11.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:06:11.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:06:11.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:06:11.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:06:11.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:06:11.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.003915 -999.00   +7.00  42.12     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZNE.W 40.5 42.1 298.6 47.6 8.2 -15.5 8.0 -11.5 7.7 -10.9 8.1 -9.4
2025-12-13T02:06:11.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.003915
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:06:11.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:05:47', tmtdew=1.83, humidity=88.35, cloud=0.0, wind=36.8, temperature=7.29, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:05:38.256', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:04:00')
2025-12-13T02:06:11.324 [DEBUG] [Thread-80671] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:06:11.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:06:11.411 [DEBUG] [Thread-80674] [transport.py] [_log()] starting thread (client mode): 0xf813d030
2025-12-13T02:06:11.411 [DEBUG] [Thread-80674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:06:11.426 [DEBUG] [Thread-80674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:06:11.426 [INFO] [Thread-80674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:06:11.433 [DEBUG] [Thread-80674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:06:11.433 [DEBUG] [Thread-80674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:06:11.433 [DEBUG] [Thread-80674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:06:11.433 [DEBUG] [Thread-80674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:11.433 [DEBUG] [Thread-80674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] client lang: <none>
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] server lang: <none>
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] kex follows: False
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] Compression: none
2025-12-13T02:06:11.434 [DEBUG] [Thread-80674] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:06:11.489 [DEBUG] [Thread-80674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:06:11.489 [DEBUG] [Thread-80674] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:06:11.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:06:11.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:06:11.490 [DEBUG] [Thread-80674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:06:11.546 [DEBUG] [Thread-80674] [transport.py] [_log()] userauth is OK
2025-12-13T02:06:11.546 [DEBUG] [Thread-80674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:06:11.546 [DEBUG] [Thread-80674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:06:11.546 [DEBUG] [Thread-80674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:06:11.546 [DEBUG] [Thread-80674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:06:11.561 [INFO] [Thread-80674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:06:11.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:06:11.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:06:12.438 [DEBUG] [Thread-80674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:06:12.438 [DEBUG] [Thread-80674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:06:12.485 [DEBUG] [Thread-80674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:06:12.485 [DEBUG] [Thread-80674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:06:12.493 [DEBUG] [Thread-80674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:06:12.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:06:12.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:06:12.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:06:12.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:06:12.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:06:12.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:06:12.525 [DEBUG] [Thread-80674] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:06:18.005 [DEBUG] [Thread-80676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:22.327 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:22.329 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:32.740 [DEBUG] [Thread-80677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:33.051 [DEBUG] [Thread-80678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:06:42.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:06:42.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:06:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:06:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 6, 19), 1.83, 88.39, 0.0, 37.19, 7.23, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:06:43.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:06:19
2025-12-13T02:06:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:06:43.510 [DEBUG] [Thread-80679] [transport.py] [_log()] starting thread (client mode): 0xf81e6020
2025-12-13T02:06:43.510 [DEBUG] [Thread-80679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:06:43.531 [DEBUG] [Thread-80679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:06:43.531 [INFO] [Thread-80679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:06:43.534 [DEBUG] [Thread-80679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:06:43.534 [DEBUG] [Thread-80679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] client lang: <none>
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] server lang: <none>
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] kex follows: False
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] Compression: none
2025-12-13T02:06:43.535 [DEBUG] [Thread-80679] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:06:43.551 [DEBUG] [Thread-80679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:06:43.552 [DEBUG] [Thread-80679] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:06:43.552 [DEBUG] [Thread-80679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:06:43.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:06:43.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:06:43.554 [DEBUG] [Thread-80679] [transport.py] [_log()] userauth is OK
2025-12-13T02:06:43.554 [DEBUG] [Thread-80679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:06:43.554 [DEBUG] [Thread-80679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:06:43.554 [DEBUG] [Thread-80679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:06:43.554 [DEBUG] [Thread-80679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:06:43.568 [INFO] [Thread-80679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:06:43.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:06:44.354 [DEBUG] [Thread-80679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:06:44.354 [DEBUG] [Thread-80679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:06:44.354 [DEBUG] [Thread-80679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:06:44.395 [DEBUG] [Thread-80679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:06:44.395 [DEBUG] [Thread-80679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:06:44.398 [DEBUG] [Thread-80679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:06:44.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:06:44.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:06:44.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:06:44.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:06:44.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:06:44.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:06:44.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:06:44.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:06:44.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:06:44.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.004262 -999.00   +7.10  31.35     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZNE.W 28.9 31.4 306.4 47.9 8.2 -10.5 8.1 -12.9 7.7 -11.9 8.1 -9.6
2025-12-13T02:06:44.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:06:44.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:06:44.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.004262
2025-12-13T02:06:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:06:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:06:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:06:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:06:44.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:06:44.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:06:19', tmtdew=1.83, humidity=88.39, cloud=0.0, wind=37.19, temperature=7.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:06:08.237', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:04:00')
2025-12-13T02:06:44.424 [DEBUG] [Thread-80679] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:06:44.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:06:44.519 [DEBUG] [Thread-80682] [transport.py] [_log()] starting thread (client mode): 0xf5770d00
2025-12-13T02:06:44.519 [DEBUG] [Thread-80682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:06:44.534 [DEBUG] [Thread-80682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:06:44.534 [INFO] [Thread-80682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] client lang: <none>
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] server lang: <none>
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] kex follows: False
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:06:44.542 [DEBUG] [Thread-80682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:06:44.543 [DEBUG] [Thread-80682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:06:44.543 [DEBUG] [Thread-80682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:06:44.543 [DEBUG] [Thread-80682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:06:44.543 [DEBUG] [Thread-80682] [transport.py] [_log()] Compression: none
2025-12-13T02:06:44.543 [DEBUG] [Thread-80682] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:06:44.606 [DEBUG] [Thread-80682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:06:44.607 [DEBUG] [Thread-80682] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:06:44.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:06:44.608 [DEBUG] [Thread-80682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:06:44.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:06:44.662 [DEBUG] [Thread-80682] [transport.py] [_log()] userauth is OK
2025-12-13T02:06:44.662 [DEBUG] [Thread-80682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:06:44.662 [DEBUG] [Thread-80682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:06:44.663 [DEBUG] [Thread-80682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:06:44.663 [DEBUG] [Thread-80682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:06:44.681 [INFO] [Thread-80682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:06:44.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:06:44.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:06:45.491 [DEBUG] [Thread-80682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:06:45.491 [DEBUG] [Thread-80682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:06:45.539 [DEBUG] [Thread-80682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:06:45.539 [DEBUG] [Thread-80682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:06:45.548 [DEBUG] [Thread-80682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:06:45.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:06:45.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:06:45.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:06:45.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:06:45.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:06:45.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:06:45.583 [DEBUG] [Thread-80682] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:06:48.079 [DEBUG] [Thread-80684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:03.124 [DEBUG] [Thread-80685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:15.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:07:15.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:07:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:07:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 6, 52), 1.81, 88.47, 0.0, 34.79, 7.19, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:07:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:06:52
2025-12-13T02:07:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:07:16.550 [DEBUG] [Thread-80686] [transport.py] [_log()] starting thread (client mode): 0xf813f6a0
2025-12-13T02:07:16.550 [DEBUG] [Thread-80686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:07:16.570 [DEBUG] [Thread-80686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:07:16.570 [INFO] [Thread-80686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:07:16.573 [DEBUG] [Thread-80686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] client lang: <none>
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] server lang: <none>
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] kex follows: False
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] Compression: none
2025-12-13T02:07:16.574 [DEBUG] [Thread-80686] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:07:16.592 [DEBUG] [Thread-80686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:07:16.592 [DEBUG] [Thread-80686] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:07:16.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:07:16.594 [DEBUG] [Thread-80686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:07:16.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:07:16.596 [DEBUG] [Thread-80686] [transport.py] [_log()] userauth is OK
2025-12-13T02:07:16.596 [DEBUG] [Thread-80686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:07:16.596 [DEBUG] [Thread-80686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:07:16.596 [DEBUG] [Thread-80686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:07:16.596 [DEBUG] [Thread-80686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:07:16.620 [INFO] [Thread-80686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:07:16.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:07:17.252 [DEBUG] [Thread-80686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:07:17.252 [DEBUG] [Thread-80686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:07:17.253 [DEBUG] [Thread-80686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:07:17.294 [DEBUG] [Thread-80686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:07:17.294 [DEBUG] [Thread-80686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:07:17.297 [DEBUG] [Thread-80686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:07:17.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:07:17.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:07:17.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:07:17.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:07:17.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:07:17.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:07:17.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:07:17.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:07:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:07:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.004609 -999.00   +7.10  34.80     90   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZNE.. 38.2 34.8 309.5 45.3 8.2 -11.3 8.0 -15.5 7.7 -13.8 8.1 -9.7
2025-12-13T02:07:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:07:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:07:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.004609
2025-12-13T02:07:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:07:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:07:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:07:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:07:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:07:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:06:52', tmtdew=1.81, humidity=88.47, cloud=0.0, wind=34.79, temperature=7.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:06:38.218', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:04:00')
2025-12-13T02:07:17.323 [DEBUG] [Thread-80686] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:07:17.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:07:17.419 [DEBUG] [Thread-80689] [transport.py] [_log()] starting thread (client mode): 0xf81f2170
2025-12-13T02:07:17.419 [DEBUG] [Thread-80689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:07:17.433 [DEBUG] [Thread-80689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:07:17.433 [INFO] [Thread-80689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:07:17.441 [DEBUG] [Thread-80689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] client lang: <none>
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] server lang: <none>
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] kex follows: False
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] Compression: none
2025-12-13T02:07:17.442 [DEBUG] [Thread-80689] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:07:17.498 [DEBUG] [Thread-80689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:07:17.499 [DEBUG] [Thread-80689] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:07:17.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:07:17.500 [DEBUG] [Thread-80689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:07:17.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:07:17.554 [DEBUG] [Thread-80689] [transport.py] [_log()] userauth is OK
2025-12-13T02:07:17.554 [DEBUG] [Thread-80689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:07:17.555 [DEBUG] [Thread-80689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:07:17.555 [DEBUG] [Thread-80689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:07:17.555 [DEBUG] [Thread-80689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:07:17.575 [INFO] [Thread-80689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:07:17.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:07:17.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:07:18.153 [DEBUG] [Thread-80691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:18.436 [DEBUG] [Thread-80689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:07:18.436 [DEBUG] [Thread-80689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:07:18.484 [DEBUG] [Thread-80689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:07:18.484 [DEBUG] [Thread-80689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:07:18.493 [DEBUG] [Thread-80689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:07:18.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:07:18.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:07:18.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:07:18.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:07:18.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:07:18.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:07:18.528 [DEBUG] [Thread-80689] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:07:22.532 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:22.533 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:32.808 [DEBUG] [Thread-80692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:33.186 [DEBUG] [Thread-80693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:48.215 [DEBUG] [Thread-80694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:07:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:07:48.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:07:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:07:49.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 7, 24), 1.81, 88.5, 0.0, 35.46, 7.19, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:07:49.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:07:24
2025-12-13T02:07:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:07:49.497 [DEBUG] [Thread-80695] [transport.py] [_log()] starting thread (client mode): 0xfabc7f70
2025-12-13T02:07:49.497 [DEBUG] [Thread-80695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:07:49.513 [DEBUG] [Thread-80695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:07:49.513 [INFO] [Thread-80695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:07:49.516 [DEBUG] [Thread-80695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:07:49.516 [DEBUG] [Thread-80695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] client lang: <none>
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] server lang: <none>
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] kex follows: False
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] Compression: none
2025-12-13T02:07:49.517 [DEBUG] [Thread-80695] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:07:49.535 [DEBUG] [Thread-80695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:07:49.535 [DEBUG] [Thread-80695] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:07:49.536 [DEBUG] [Thread-80695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:07:49.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:07:49.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:07:49.538 [DEBUG] [Thread-80695] [transport.py] [_log()] userauth is OK
2025-12-13T02:07:49.538 [DEBUG] [Thread-80695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:07:49.539 [DEBUG] [Thread-80695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:07:49.539 [DEBUG] [Thread-80695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:07:49.539 [DEBUG] [Thread-80695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:07:49.563 [INFO] [Thread-80695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:07:49.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:07:50.330 [DEBUG] [Thread-80695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:07:50.330 [DEBUG] [Thread-80695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:07:50.330 [DEBUG] [Thread-80695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:07:50.371 [DEBUG] [Thread-80695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:07:50.371 [DEBUG] [Thread-80695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:07:50.377 [DEBUG] [Thread-80695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:07:50.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:07:50.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:07:50.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:07:50.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:07:50.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:07:50.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:07:50.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:07:50.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:07:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:07:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.004956 -999.00   +7.00  34.03     91   +5.70 1 2 2 3 1     0    0 -999.00 0.00 ZNE.. 36.8 34.0 310.6 52.1 8.2 -10.2 8.0 -12.8 7.7 -11.4 8.1 -11.5
2025-12-13T02:07:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:07:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:07:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.004956
2025-12-13T02:07:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:07:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:07:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:07:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:07:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:07:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:07:24', tmtdew=1.81, humidity=88.5, cloud=0.0, wind=35.46, temperature=7.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:07:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:04:00')
2025-12-13T02:07:50.402 [DEBUG] [Thread-80695] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:07:50.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:07:50.499 [DEBUG] [Thread-80698] [transport.py] [_log()] starting thread (client mode): 0xfabc5c60
2025-12-13T02:07:50.499 [DEBUG] [Thread-80698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:07:50.513 [DEBUG] [Thread-80698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:07:50.513 [INFO] [Thread-80698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] client lang: <none>
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] server lang: <none>
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] kex follows: False
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:07:50.521 [DEBUG] [Thread-80698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:07:50.522 [DEBUG] [Thread-80698] [transport.py] [_log()] Compression: none
2025-12-13T02:07:50.522 [DEBUG] [Thread-80698] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:07:50.577 [DEBUG] [Thread-80698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:07:50.578 [DEBUG] [Thread-80698] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:07:50.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:07:50.578 [DEBUG] [Thread-80698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:07:50.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:07:50.634 [DEBUG] [Thread-80698] [transport.py] [_log()] userauth is OK
2025-12-13T02:07:50.634 [DEBUG] [Thread-80698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:07:50.634 [DEBUG] [Thread-80698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:07:50.634 [DEBUG] [Thread-80698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:07:50.634 [DEBUG] [Thread-80698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:07:50.651 [INFO] [Thread-80698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:07:50.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:07:50.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:07:51.469 [DEBUG] [Thread-80698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:07:51.469 [DEBUG] [Thread-80698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:07:51.517 [DEBUG] [Thread-80698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:07:51.517 [DEBUG] [Thread-80698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:07:51.528 [DEBUG] [Thread-80698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:07:51.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:07:51.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:07:51.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:07:51.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:07:51.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:07:51.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:07:51.566 [DEBUG] [Thread-80698] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:08:03.242 [DEBUG] [Thread-80700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:18.288 [DEBUG] [Thread-80701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:21.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:08:21.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:08:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:08:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 7, 56), 1.81, 88.0, 0.0, 36.84, 7.18, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:08:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:07:56
2025-12-13T02:08:22.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:08:22.549 [DEBUG] [Thread-80702] [transport.py] [_log()] starting thread (client mode): 0xf818b790
2025-12-13T02:08:22.549 [DEBUG] [Thread-80702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:08:22.569 [DEBUG] [Thread-80702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:08:22.570 [INFO] [Thread-80702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] client lang: <none>
2025-12-13T02:08:22.573 [DEBUG] [Thread-80702] [transport.py] [_log()] server lang: <none>
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] kex follows: False
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] Compression: none
2025-12-13T02:08:22.574 [DEBUG] [Thread-80702] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:08:22.592 [DEBUG] [Thread-80702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:08:22.592 [DEBUG] [Thread-80702] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:08:22.593 [DEBUG] [Thread-80702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:08:22.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:08:22.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:08:22.596 [DEBUG] [Thread-80702] [transport.py] [_log()] userauth is OK
2025-12-13T02:08:22.596 [DEBUG] [Thread-80702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:08:22.596 [DEBUG] [Thread-80702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:08:22.596 [DEBUG] [Thread-80702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:08:22.596 [DEBUG] [Thread-80702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:08:22.620 [INFO] [Thread-80702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:08:22.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:08:22.741 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:22.742 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:23.196 [DEBUG] [Thread-80702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:08:23.196 [DEBUG] [Thread-80702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:08:23.196 [DEBUG] [Thread-80702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:08:23.237 [DEBUG] [Thread-80702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:08:23.238 [DEBUG] [Thread-80702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:08:23.240 [DEBUG] [Thread-80702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:08:23.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:08:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:08:23.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:08:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:08:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:08:23.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:08:23.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:08:23.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:08:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:08:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.005303 -999.00   +7.00  38.78     91   +5.60 1 2 2 3 1     0    0 -999.00 0.00 Z.ESW 33.6 38.8 296.2 55.2 8.2 -15.6 8.0 -16.7 7.7 -17.0 8.1 -16.7
2025-12-13T02:08:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:08:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:08:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.005303
2025-12-13T02:08:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:08:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:08:23.266 [DEBUG] [Thread-80702] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:08:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:08:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:08:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:08:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:07:56', tmtdew=1.81, humidity=88.0, cloud=0.0, wind=36.84, temperature=7.18, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:07:38.179', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:04:00')
2025-12-13T02:08:23.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:08:23.363 [DEBUG] [Thread-80705] [transport.py] [_log()] starting thread (client mode): 0xf813fdf0
2025-12-13T02:08:23.363 [DEBUG] [Thread-80705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:08:23.379 [DEBUG] [Thread-80705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:08:23.379 [INFO] [Thread-80705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:08:23.386 [DEBUG] [Thread-80705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] client lang: <none>
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] server lang: <none>
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] kex follows: False
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:08:23.387 [DEBUG] [Thread-80705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:08:23.388 [DEBUG] [Thread-80705] [transport.py] [_log()] Compression: none
2025-12-13T02:08:23.388 [DEBUG] [Thread-80705] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:08:23.445 [DEBUG] [Thread-80705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:08:23.446 [DEBUG] [Thread-80705] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:08:23.446 [DEBUG] [Thread-80705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:08:23.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:08:23.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:08:23.502 [DEBUG] [Thread-80705] [transport.py] [_log()] userauth is OK
2025-12-13T02:08:23.502 [DEBUG] [Thread-80705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:08:23.502 [DEBUG] [Thread-80705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:08:23.502 [DEBUG] [Thread-80705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:08:23.502 [DEBUG] [Thread-80705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:08:23.521 [INFO] [Thread-80705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:08:23.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:08:23.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:08:24.365 [DEBUG] [Thread-80705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:08:24.365 [DEBUG] [Thread-80705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:08:24.415 [DEBUG] [Thread-80705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:08:24.415 [DEBUG] [Thread-80705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:08:24.424 [DEBUG] [Thread-80705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:08:24.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:08: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')
2025-12-13T02:08:24.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:08:24.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:08:24.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:08:24.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:08:24.459 [DEBUG] [Thread-80705] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:08:32.885 [DEBUG] [Thread-80707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:33.318 [DEBUG] [Thread-80708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:48.349 [DEBUG] [Thread-80709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:08:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:08:54.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:08:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:08:55.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 8, 28), 1.8, 88.05, 0.0, 38.0, 7.19, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:08:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:08:28
2025-12-13T02:08:55.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:08:55.450 [DEBUG] [Thread-80710] [transport.py] [_log()] starting thread (client mode): 0xf818a410
2025-12-13T02:08:55.450 [DEBUG] [Thread-80710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:08:55.470 [DEBUG] [Thread-80710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:08:55.470 [INFO] [Thread-80710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] client lang: <none>
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] server lang: <none>
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] kex follows: False
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] Compression: none
2025-12-13T02:08:55.473 [DEBUG] [Thread-80710] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:08:55.491 [DEBUG] [Thread-80710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:08:55.491 [DEBUG] [Thread-80710] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:08:55.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:08:55.492 [DEBUG] [Thread-80710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:08:55.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:08:55.494 [DEBUG] [Thread-80710] [transport.py] [_log()] userauth is OK
2025-12-13T02:08:55.494 [DEBUG] [Thread-80710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:08:55.494 [DEBUG] [Thread-80710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:08:55.495 [DEBUG] [Thread-80710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:08:55.495 [DEBUG] [Thread-80710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:08:55.518 [INFO] [Thread-80710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:08:55.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:08:56.276 [DEBUG] [Thread-80710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:08:56.276 [DEBUG] [Thread-80710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:08:56.277 [DEBUG] [Thread-80710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:08:56.317 [DEBUG] [Thread-80710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:08:56.317 [DEBUG] [Thread-80710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:08:56.320 [DEBUG] [Thread-80710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:08:56.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:08:56.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:08:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:08:56.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:08:56.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:08:56.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:08:56.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:08:56.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:08:56.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:08:56.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.005651 -999.00   +7.00  41.95     91   +5.60 1 2 2 3 1     0    0 -999.00 0.00 Z.ESW 46.8 42.0 307.8 48.5 8.2 -13.7 8.0 -13.7 7.7 -12.4 8.1 -14.1
2025-12-13T02:08:56.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:08:56.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:08:56.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.005651
2025-12-13T02:08:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:08:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:08:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:08:56.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:08:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:08:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:08:28', tmtdew=1.8, humidity=88.05, cloud=0.0, wind=38.0, temperature=7.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:08:08.246', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:07:00')
2025-12-13T02:08:56.341 [DEBUG] [Thread-80710] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:08:56.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:08:56.438 [DEBUG] [Thread-80713] [transport.py] [_log()] starting thread (client mode): 0xf5742fe0
2025-12-13T02:08:56.438 [DEBUG] [Thread-80713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:08:56.453 [DEBUG] [Thread-80713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:08:56.453 [INFO] [Thread-80713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:56.461 [DEBUG] [Thread-80713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] client lang: <none>
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] server lang: <none>
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] kex follows: False
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:08:56.462 [DEBUG] [Thread-80713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:08:56.463 [DEBUG] [Thread-80713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:08:56.463 [DEBUG] [Thread-80713] [transport.py] [_log()] Compression: none
2025-12-13T02:08:56.463 [DEBUG] [Thread-80713] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:08:56.517 [DEBUG] [Thread-80713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:08:56.518 [DEBUG] [Thread-80713] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:08:56.518 [DEBUG] [Thread-80713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:08:56.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:08:56.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:08:56.574 [DEBUG] [Thread-80713] [transport.py] [_log()] userauth is OK
2025-12-13T02:08:56.574 [DEBUG] [Thread-80713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:08:56.574 [DEBUG] [Thread-80713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:08:56.574 [DEBUG] [Thread-80713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:08:56.574 [DEBUG] [Thread-80713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:08:56.594 [INFO] [Thread-80713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:08:56.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:08:56.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:08:57.424 [DEBUG] [Thread-80713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:08:57.424 [DEBUG] [Thread-80713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:08:57.472 [DEBUG] [Thread-80713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:08:57.472 [DEBUG] [Thread-80713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:08:57.480 [DEBUG] [Thread-80713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:08:57.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:08:57.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:08:57.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:08:57.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:08:57.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:08:57.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:08:57.515 [DEBUG] [Thread-80713] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:09:03.377 [DEBUG] [Thread-80715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:09:18.425 [DEBUG] [Thread-80716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:09:22.945 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:09:22.946 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:09:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:09:27.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:09:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:09:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 8, 28), 1.8, 88.55, 0.0, 38.0, 7.19, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:09:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:08:28
2025-12-13T02:09:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:09:28.538 [DEBUG] [Thread-80717] [transport.py] [_log()] starting thread (client mode): 0xf575ecb0
2025-12-13T02:09:28.538 [DEBUG] [Thread-80717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:09:28.558 [DEBUG] [Thread-80717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:09:28.558 [INFO] [Thread-80717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:09:28.561 [DEBUG] [Thread-80717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] client lang: <none>
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] server lang: <none>
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] kex follows: False
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] Compression: none
2025-12-13T02:09:28.562 [DEBUG] [Thread-80717] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:09:28.578 [DEBUG] [Thread-80717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:09:28.578 [DEBUG] [Thread-80717] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:09:28.578 [DEBUG] [Thread-80717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:09:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:09:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:09:28.579 [DEBUG] [Thread-80717] [transport.py] [_log()] userauth is OK
2025-12-13T02:09:28.580 [DEBUG] [Thread-80717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:09:28.580 [DEBUG] [Thread-80717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:09:28.580 [DEBUG] [Thread-80717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:09:28.580 [DEBUG] [Thread-80717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:09:28.600 [INFO] [Thread-80717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:09:28.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:09:29.226 [DEBUG] [Thread-80717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:09:29.226 [DEBUG] [Thread-80717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:09:29.226 [DEBUG] [Thread-80717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:09:29.268 [DEBUG] [Thread-80717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:09:29.268 [DEBUG] [Thread-80717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:09:29.270 [DEBUG] [Thread-80717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:09:29.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:09:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:09:29.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:09:29.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:09:29.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:09:29.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:09:29.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.006345 -999.00   +6.90  36.99     91   +5.50 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 39.2 37.0 301.6 50.3 8.2 -20.5 7.9 -20.5 7.7 -19.2 8.0 -16.6
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.006345
2025-12-13T02:09:29.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:09:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:09:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:09:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:09:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:09:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:08:28', tmtdew=1.8, humidity=88.55, cloud=0.0, wind=38.0, temperature=7.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:09:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:07:00')
2025-12-13T02:09:29.292 [DEBUG] [Thread-80717] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:09:29.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:09:29.381 [DEBUG] [Thread-80720] [transport.py] [_log()] starting thread (client mode): 0xf5742110
2025-12-13T02:09:29.381 [DEBUG] [Thread-80720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:09:29.396 [DEBUG] [Thread-80720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:09:29.396 [INFO] [Thread-80720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:09:29.403 [DEBUG] [Thread-80720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] client lang: <none>
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] server lang: <none>
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] kex follows: False
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] Compression: none
2025-12-13T02:09:29.404 [DEBUG] [Thread-80720] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:09:29.465 [DEBUG] [Thread-80720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:09:29.466 [DEBUG] [Thread-80720] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:09:29.466 [DEBUG] [Thread-80720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:09:29.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:09:29.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:09:29.522 [DEBUG] [Thread-80720] [transport.py] [_log()] userauth is OK
2025-12-13T02:09:29.523 [DEBUG] [Thread-80720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:09:29.523 [DEBUG] [Thread-80720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:09:29.523 [DEBUG] [Thread-80720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:09:29.523 [DEBUG] [Thread-80720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:09:29.542 [INFO] [Thread-80720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:09:29.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:09:29.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:09:30.392 [DEBUG] [Thread-80720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:09:30.392 [DEBUG] [Thread-80720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:09:30.442 [DEBUG] [Thread-80720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:09:30.442 [DEBUG] [Thread-80720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:09:30.451 [DEBUG] [Thread-80720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:09:30.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:09:30.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:09:30.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:09:30.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:09:30.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:09:30.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:09:30.487 [DEBUG] [Thread-80720] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:09:32.968 [DEBUG] [Thread-80722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:09:33.452 [DEBUG] [Thread-80723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:09:48.489 [DEBUG] [Thread-80724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:00.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:10:00.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:10:00.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:10:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 9, 32), 1.79, 88.64, 0.0, 34.04, 7.21, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:10:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:09:32
2025-12-13T02:10:01.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:10:01.483 [DEBUG] [Thread-80725] [transport.py] [_log()] starting thread (client mode): 0xf5702710
2025-12-13T02:10:01.483 [DEBUG] [Thread-80725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:10:01.493 [DEBUG] [Thread-80725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:10:01.494 [INFO] [Thread-80725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] client lang: <none>
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] server lang: <none>
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] kex follows: False
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] Compression: none
2025-12-13T02:10:01.495 [DEBUG] [Thread-80725] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:10:01.506 [DEBUG] [Thread-80725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:10:01.506 [DEBUG] [Thread-80725] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:10:01.506 [DEBUG] [Thread-80725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:10:01.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:10:01.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:10:01.507 [DEBUG] [Thread-80725] [transport.py] [_log()] userauth is OK
2025-12-13T02:10:01.507 [DEBUG] [Thread-80725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:10:01.507 [DEBUG] [Thread-80725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:10:01.507 [DEBUG] [Thread-80725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:10:01.507 [DEBUG] [Thread-80725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:10:01.521 [INFO] [Thread-80725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:10:01.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:10:02.089 [DEBUG] [Thread-80725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:10:02.089 [DEBUG] [Thread-80725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:10:02.090 [DEBUG] [Thread-80725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:10:02.131 [DEBUG] [Thread-80725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:10:02.131 [DEBUG] [Thread-80725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:10:02.133 [DEBUG] [Thread-80725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:10:02.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:10:02.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:10:02.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:10:02.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:10:02.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:10:02.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:10:02.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:10:02.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:10:02.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:10:02.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.006692 -999.00   +6.90  35.58     91   +5.50 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 32.8 35.6 308.0 45.3 8.2 -19.2 7.9 -15.1 7.6 -16.1 8.0 -13.3
2025-12-13T02:10:02.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:10:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:10:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.006692
2025-12-13T02:10:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:10:02.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:10:02.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:10:02.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:10:02.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:10:02.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:09:32', tmtdew=1.79, humidity=88.64, cloud=0.0, wind=34.04, temperature=7.21, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:09:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:07:00')
2025-12-13T02:10:02.159 [DEBUG] [Thread-80725] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:10:02.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:10:02.255 [DEBUG] [Thread-80728] [transport.py] [_log()] starting thread (client mode): 0xfabc7820
2025-12-13T02:10:02.255 [DEBUG] [Thread-80728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:10:02.269 [DEBUG] [Thread-80728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:10:02.269 [INFO] [Thread-80728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] client lang: <none>
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] server lang: <none>
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] kex follows: False
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] Compression: none
2025-12-13T02:10:02.277 [DEBUG] [Thread-80728] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:10:02.336 [DEBUG] [Thread-80728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:10:02.336 [DEBUG] [Thread-80728] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:10:02.336 [DEBUG] [Thread-80728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:10:02.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:10:02.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:10:02.393 [DEBUG] [Thread-80728] [transport.py] [_log()] userauth is OK
2025-12-13T02:10:02.393 [DEBUG] [Thread-80728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:10:02.393 [DEBUG] [Thread-80728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:10:02.393 [DEBUG] [Thread-80728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:10:02.393 [DEBUG] [Thread-80728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:10:02.407 [INFO] [Thread-80728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:10:02.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:10:02.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:10:03.242 [DEBUG] [Thread-80728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:10:03.242 [DEBUG] [Thread-80728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:10:03.291 [DEBUG] [Thread-80728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:10:03.291 [DEBUG] [Thread-80728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:10:03.299 [DEBUG] [Thread-80728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:10:03.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:10:03.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:10:03.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:10:03.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:10:03.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:10:03.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:10:03.331 [DEBUG] [Thread-80728] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:10:03.521 [DEBUG] [Thread-80730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:18.556 [DEBUG] [Thread-80731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:23.150 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:23.151 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:33.057 [DEBUG] [Thread-80732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:33.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:10:33.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:10:33.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:10:33.586 [DEBUG] [Thread-80733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:10:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 10, 4), 1.79, 88.62, 0.0, 37.23, 7.19, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:10:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:10:04
2025-12-13T02:10:34.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:10:34.337 [DEBUG] [Thread-80734] [transport.py] [_log()] starting thread (client mode): 0xf81e7dc0
2025-12-13T02:10:34.337 [DEBUG] [Thread-80734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:10:34.358 [DEBUG] [Thread-80734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:10:34.358 [INFO] [Thread-80734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] client lang: <none>
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] server lang: <none>
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] kex follows: False
2025-12-13T02:10:34.361 [DEBUG] [Thread-80734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:10:34.362 [DEBUG] [Thread-80734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:10:34.362 [DEBUG] [Thread-80734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:10:34.362 [DEBUG] [Thread-80734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:10:34.362 [DEBUG] [Thread-80734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:10:34.362 [DEBUG] [Thread-80734] [transport.py] [_log()] Compression: none
2025-12-13T02:10:34.362 [DEBUG] [Thread-80734] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:10:34.379 [DEBUG] [Thread-80734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:10:34.380 [DEBUG] [Thread-80734] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:10:34.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:10:34.380 [DEBUG] [Thread-80734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:10:34.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:10:34.383 [DEBUG] [Thread-80734] [transport.py] [_log()] userauth is OK
2025-12-13T02:10:34.383 [DEBUG] [Thread-80734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:10:34.383 [DEBUG] [Thread-80734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:10:34.384 [DEBUG] [Thread-80734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:10:34.384 [DEBUG] [Thread-80734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:10:34.420 [INFO] [Thread-80734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:10:34.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:10:35.046 [DEBUG] [Thread-80734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:10:35.046 [DEBUG] [Thread-80734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:10:35.047 [DEBUG] [Thread-80734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:10:35.087 [DEBUG] [Thread-80734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:10:35.087 [DEBUG] [Thread-80734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:10:35.090 [DEBUG] [Thread-80734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:10:35.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:10:35.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:10:35.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:10:35.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:10:35.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:10:35.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:10:35.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:10:35.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:10:35.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:10:35.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.007039 -999.00   +6.90  39.54     91   +5.60 1 2 2 3 1     0    0 -999.00 0.00 Zne.W 35.6 39.5 298.9 44.9 8.1 -13.3 7.9 -13.1 7.6 -12.6 8.0 -13.8
2025-12-13T02:10:35.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:10:35.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:10:35.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.007039
2025-12-13T02:10:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:10:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:10:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:10:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:10:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:10:35.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:10:04', tmtdew=1.79, humidity=88.62, cloud=0.0, wind=37.23, temperature=7.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:10:08.170', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:07:00')
2025-12-13T02:10:35.111 [DEBUG] [Thread-80734] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:10:35.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:10:35.206 [DEBUG] [Thread-80737] [transport.py] [_log()] starting thread (client mode): 0xf81e44c0
2025-12-13T02:10:35.206 [DEBUG] [Thread-80737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:10:35.221 [DEBUG] [Thread-80737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:10:35.221 [INFO] [Thread-80737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:10:35.228 [DEBUG] [Thread-80737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:10:35.228 [DEBUG] [Thread-80737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] client lang: <none>
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] server lang: <none>
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] kex follows: False
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] Compression: none
2025-12-13T02:10:35.229 [DEBUG] [Thread-80737] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:10:35.285 [DEBUG] [Thread-80737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:10:35.285 [DEBUG] [Thread-80737] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:10:35.286 [DEBUG] [Thread-80737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:10:35.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:10:35.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:10:35.341 [DEBUG] [Thread-80737] [transport.py] [_log()] userauth is OK
2025-12-13T02:10:35.341 [DEBUG] [Thread-80737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:10:35.342 [DEBUG] [Thread-80737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:10:35.342 [DEBUG] [Thread-80737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:10:35.342 [DEBUG] [Thread-80737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:10:35.362 [INFO] [Thread-80737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:10:35.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:10:35.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:10:36.195 [DEBUG] [Thread-80737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:10:36.195 [DEBUG] [Thread-80737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:10:36.244 [DEBUG] [Thread-80737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:10:36.244 [DEBUG] [Thread-80737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:10:36.253 [DEBUG] [Thread-80737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:10:36.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:10:36.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:10:36.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:10:36.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:10:36.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:10:36.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:10:36.288 [DEBUG] [Thread-80737] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:10:48.609 [DEBUG] [Thread-80739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:03.652 [DEBUG] [Thread-80740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:06.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:11:06.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:11:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:11:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 10, 36), 1.79, 88.6, 0.0, 36.89, 7.13, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:11:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:10:36
2025-12-13T02:11:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:11:07.269 [DEBUG] [Thread-80741] [transport.py] [_log()] starting thread (client mode): 0xf5701840
2025-12-13T02:11:07.269 [DEBUG] [Thread-80741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:11:07.289 [DEBUG] [Thread-80741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:11:07.289 [INFO] [Thread-80741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] client lang: <none>
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] server lang: <none>
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] kex follows: False
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:11:07.292 [DEBUG] [Thread-80741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:11:07.293 [DEBUG] [Thread-80741] [transport.py] [_log()] Compression: none
2025-12-13T02:11:07.293 [DEBUG] [Thread-80741] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:11:07.310 [DEBUG] [Thread-80741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:11:07.311 [DEBUG] [Thread-80741] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:11:07.312 [DEBUG] [Thread-80741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:11:07.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:11:07.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:11:07.314 [DEBUG] [Thread-80741] [transport.py] [_log()] userauth is OK
2025-12-13T02:11:07.314 [DEBUG] [Thread-80741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:11:07.314 [DEBUG] [Thread-80741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:11:07.314 [DEBUG] [Thread-80741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:11:07.314 [DEBUG] [Thread-80741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:11:07.347 [INFO] [Thread-80741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:11:07.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:11:07.997 [DEBUG] [Thread-80741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:11:07.998 [DEBUG] [Thread-80741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:11:07.998 [DEBUG] [Thread-80741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:11:08.039 [DEBUG] [Thread-80741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:11:08.039 [DEBUG] [Thread-80741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:11:08.043 [DEBUG] [Thread-80741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:11:08.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:11:08.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:11:08.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:11:08.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:11:08.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:11:08.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:11:08.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:11:08.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:11:08.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:11:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.007387 -999.00   +6.90  35.24     91   +5.60 1 2 2 3 1     0    0 -999.00 0.00 ZNEsW 38.0 35.2 298.0 47.2 8.1 -17.3 7.9 -16.8 7.6 -15.6 8.0 -15.6
2025-12-13T02:11:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:11:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:11:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.007387
2025-12-13T02:11:08.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:11:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:11:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:11:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:11:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:11:08.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:10:36', tmtdew=1.79, humidity=88.6, cloud=0.0, wind=36.89, temperature=7.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:10:38.237', atlas_cloud=2, atlas_rain=1, zp_data=[0.0782500000000006, 0.11824999999999974, 0.3177500000000002, 0.1844999999999999, 0.08500000000000085, 0.034250000000000114, 0.06399999999999828, 0.07525000000000048, 0.15249999999999986, 0.27149999999999963, 0.5942499999999988, 0.3130000000000006, 0.13899999999999935, 0.06325000000000003, 0.010999999999999233, 0.07599999999999874, 0.12824999999999953, 0.3979999999999997, 0.552999999999999, 0.11624999999999908, 0.14599999999999902, 0.13074999999999903, 0.22625000000000028, 0.18125000000000036, 0.18599999999999817, 0.5235000000000003, 0.5747499999999999, 0.3075000000000001, 0.4480000000000004, 0.4295000000000009, 0.44900000000000073, 0.07000000000000028, 0.3127499999999994], zp_timestamp='2025-12-13T00:07:00')
2025-12-13T02:11:08.067 [DEBUG] [Thread-80741] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:11:08.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:11:08.163 [DEBUG] [Thread-80744] [transport.py] [_log()] starting thread (client mode): 0xf5700250
2025-12-13T02:11:08.163 [DEBUG] [Thread-80744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:11:08.181 [DEBUG] [Thread-80744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:11:08.182 [INFO] [Thread-80744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:11:08.189 [DEBUG] [Thread-80744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:11:08.189 [DEBUG] [Thread-80744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] client lang: <none>
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] server lang: <none>
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] kex follows: False
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:11:08.190 [DEBUG] [Thread-80744] [transport.py] [_log()] Compression: none
2025-12-13T02:11:08.191 [DEBUG] [Thread-80744] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:11:08.249 [DEBUG] [Thread-80744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:11:08.249 [DEBUG] [Thread-80744] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:11:08.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:11:08.250 [DEBUG] [Thread-80744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:11:08.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:11:08.308 [DEBUG] [Thread-80744] [transport.py] [_log()] userauth is OK
2025-12-13T02:11:08.308 [DEBUG] [Thread-80744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:11:08.308 [DEBUG] [Thread-80744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:11:08.308 [DEBUG] [Thread-80744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:11:08.308 [DEBUG] [Thread-80744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:11:08.327 [INFO] [Thread-80744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:11:08.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:11:08.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:11:09.245 [DEBUG] [Thread-80744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:11:09.245 [DEBUG] [Thread-80744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:11:09.293 [DEBUG] [Thread-80744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:11:09.293 [DEBUG] [Thread-80744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:11:09.303 [DEBUG] [Thread-80744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:11:09.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:11:09.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:11:09.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:11:09.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:11:09.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:11:09.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:11:09.337 [DEBUG] [Thread-80744] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:11:18.683 [DEBUG] [Thread-80746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:23.356 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:23.357 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:33.131 [DEBUG] [Thread-80747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:33.735 [DEBUG] [Thread-80748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:11:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:11:39.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:11:39.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:11:40.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 11, 8), 1.8, 88.54, 0.0, 37.92, 7.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:11:40.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:11:08
2025-12-13T02:11:40.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:11:40.322 [DEBUG] [Thread-80749] [transport.py] [_log()] starting thread (client mode): 0xf813e5f0
2025-12-13T02:11:40.322 [DEBUG] [Thread-80749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:11:40.342 [DEBUG] [Thread-80749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:11:40.342 [INFO] [Thread-80749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:11:40.346 [DEBUG] [Thread-80749] [transport.py] [_log()] client lang: <none>
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] server lang: <none>
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] kex follows: False
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] Compression: none
2025-12-13T02:11:40.347 [DEBUG] [Thread-80749] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:11:40.366 [DEBUG] [Thread-80749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:11:40.367 [DEBUG] [Thread-80749] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:11:40.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:11:40.368 [DEBUG] [Thread-80749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:11:40.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:11:40.370 [DEBUG] [Thread-80749] [transport.py] [_log()] userauth is OK
2025-12-13T02:11:40.370 [DEBUG] [Thread-80749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:11:40.370 [DEBUG] [Thread-80749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:11:40.370 [DEBUG] [Thread-80749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:11:40.371 [DEBUG] [Thread-80749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:11:40.396 [INFO] [Thread-80749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:11:40.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:11:41.032 [DEBUG] [Thread-80749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:11:41.033 [DEBUG] [Thread-80749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:11:41.033 [DEBUG] [Thread-80749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:11:41.074 [DEBUG] [Thread-80749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:11:41.074 [DEBUG] [Thread-80749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:11:41.076 [DEBUG] [Thread-80749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:11:41.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:11:41.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:11:41.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:11:41.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:11:41.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:11:41.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:11:41.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:11:41.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.007734 -999.00   +6.90  45.53     91   +5.60 1 3 2 3 1     0    0 -999.00 0.00 ZNEsW 45.1 45.5 297.4 50.6 8.1 -15.4 7.9 -9.7 7.6 -10.0 8.0 -7.8
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.007734
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:11:41.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:11:08', tmtdew=1.8, humidity=88.54, cloud=0.0, wind=37.92, temperature=7.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:11:08.218', atlas_cloud=3, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:10:00')
2025-12-13T02:11:41.095 [DEBUG] [Thread-80749] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:11:41.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:11:48.769 [DEBUG] [Thread-80752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:03.813 [DEBUG] [Thread-80753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:18.845 [DEBUG] [Thread-80754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:23.563 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:23.564 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:33.229 [DEBUG] [Thread-80755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:33.877 [DEBUG] [Thread-80756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:12:48.905 [DEBUG] [Thread-80757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:03.934 [DEBUG] [Thread-80758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:18.961 [DEBUG] [Thread-80759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:23.766 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:23.768 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:33.308 [DEBUG] [Thread-80760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:33.992 [DEBUG] [Thread-80761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:49.023 [DEBUG] [Thread-80762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:13:54.282 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-13T02:14:04.049 [DEBUG] [Thread-80763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:19.080 [DEBUG] [Thread-80764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:23.972 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:23.973 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:24.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:14:24.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:14:24.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:14:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 14, 20), 1.73, 88.7, 0.0, 32.98, 7.18, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:14:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:14:20
2025-12-13T02:14:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:14:25.299 [DEBUG] [Thread-80765] [transport.py] [_log()] starting thread (client mode): 0xf813efe0
2025-12-13T02:14:25.299 [DEBUG] [Thread-80765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:14:25.319 [DEBUG] [Thread-80765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:14:25.319 [INFO] [Thread-80765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] client lang: <none>
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] server lang: <none>
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] kex follows: False
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:14:25.322 [DEBUG] [Thread-80765] [transport.py] [_log()] Compression: none
2025-12-13T02:14:25.323 [DEBUG] [Thread-80765] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:14:25.339 [DEBUG] [Thread-80765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:14:25.339 [DEBUG] [Thread-80765] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:14:25.340 [DEBUG] [Thread-80765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:14:25.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:14:25.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:14:25.342 [DEBUG] [Thread-80765] [transport.py] [_log()] userauth is OK
2025-12-13T02:14:25.342 [DEBUG] [Thread-80765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:14:25.342 [DEBUG] [Thread-80765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:14:25.342 [DEBUG] [Thread-80765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:14:25.342 [DEBUG] [Thread-80765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:14:25.357 [INFO] [Thread-80765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:14:25.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:14:26.132 [DEBUG] [Thread-80765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:14:26.132 [DEBUG] [Thread-80765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:14:26.132 [DEBUG] [Thread-80765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:14:26.173 [DEBUG] [Thread-80765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:14:26.173 [DEBUG] [Thread-80765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:14:26.175 [DEBUG] [Thread-80765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:14:26.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:14:26.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:14:26.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:14:26.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:14:26.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:14:26.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:14:26.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:14:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:14:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:14:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.009470 -999.00   +6.80  40.70     91   +5.60 1 3 2 3 1     0    0 -999.00 0.00 ----- 40.9 40.7 305.0 53.4 8.2 -6.1 7.9 -7.3 7.7 -7.2 8.1 -9.2
2025-12-13T02:14:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:14:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:14:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.009470
2025-12-13T02:14:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:14:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:14:26.198 [DEBUG] [Thread-80765] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:14:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:14:26.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:14:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:14:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:14:20', tmtdew=1.73, humidity=88.7, cloud=0.0, wind=32.98, temperature=7.18, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:13:38.208', atlas_cloud=3, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:10:00')
2025-12-13T02:14:26.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:14:26.295 [DEBUG] [Thread-80768] [transport.py] [_log()] starting thread (client mode): 0xf570ca00
2025-12-13T02:14:26.295 [DEBUG] [Thread-80768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:14:26.310 [DEBUG] [Thread-80768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:14:26.310 [INFO] [Thread-80768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:14:26.317 [DEBUG] [Thread-80768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:14:26.317 [DEBUG] [Thread-80768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:14:26.317 [DEBUG] [Thread-80768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] client lang: <none>
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] server lang: <none>
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] kex follows: False
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] Compression: none
2025-12-13T02:14:26.318 [DEBUG] [Thread-80768] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:14:26.375 [DEBUG] [Thread-80768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:14:26.375 [DEBUG] [Thread-80768] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:14:26.376 [DEBUG] [Thread-80768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:14:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:14:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:14:26.435 [DEBUG] [Thread-80768] [transport.py] [_log()] userauth is OK
2025-12-13T02:14:26.436 [DEBUG] [Thread-80768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:14:26.436 [DEBUG] [Thread-80768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:14:26.436 [DEBUG] [Thread-80768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:14:26.436 [DEBUG] [Thread-80768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:14:26.455 [INFO] [Thread-80768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:14:26.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:14:26.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:14:27.372 [DEBUG] [Thread-80768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:14:27.372 [DEBUG] [Thread-80768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:14:27.420 [DEBUG] [Thread-80768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:14:27.420 [DEBUG] [Thread-80768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:14:27.429 [DEBUG] [Thread-80768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:14:27.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:14:27.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:14:27.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:14:27.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:14:27.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:14:27.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:14:27.462 [DEBUG] [Thread-80768] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:14:33.382 [DEBUG] [Thread-80770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:34.110 [DEBUG] [Thread-80771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:49.146 [DEBUG] [Thread-80772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:14:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:14:57.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:14:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:14:58.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 14, 52), 1.74, 88.6, 0.0, 35.67, 7.09, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:14:58.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:14:52
2025-12-13T02:14:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:14:58.450 [DEBUG] [Thread-80773] [transport.py] [_log()] starting thread (client mode): 0xf57010c0
2025-12-13T02:14:58.451 [DEBUG] [Thread-80773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:14:58.471 [DEBUG] [Thread-80773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:14:58.471 [INFO] [Thread-80773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:58.474 [DEBUG] [Thread-80773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] client lang: <none>
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] server lang: <none>
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] kex follows: False
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] Compression: none
2025-12-13T02:14:58.475 [DEBUG] [Thread-80773] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:14:58.492 [DEBUG] [Thread-80773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:14:58.493 [DEBUG] [Thread-80773] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:14:58.493 [DEBUG] [Thread-80773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:14:58.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:14:58.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:14:58.495 [DEBUG] [Thread-80773] [transport.py] [_log()] userauth is OK
2025-12-13T02:14:58.495 [DEBUG] [Thread-80773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:14:58.495 [DEBUG] [Thread-80773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:14:58.496 [DEBUG] [Thread-80773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:14:58.496 [DEBUG] [Thread-80773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:14:58.518 [INFO] [Thread-80773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:14:58.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:14:59.143 [DEBUG] [Thread-80773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:14:59.143 [DEBUG] [Thread-80773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:14:59.144 [DEBUG] [Thread-80773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:14:59.184 [DEBUG] [Thread-80773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:14:59.184 [DEBUG] [Thread-80773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:14:59.187 [DEBUG] [Thread-80773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:14:59.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:14:59.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:14:59.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:14:59.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:14:59.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:14:59.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:14:59.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:14:59.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:14:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:14:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.009817 -999.00   +6.80  36.35     91   +5.60 1 3 2 3 1     0    0 -999.00 0.00 zN..W 38.8 36.4 304.2 46.5 8.2 -7.7 8.0 -6.1 7.6 -5.5 8.0 -5.2
2025-12-13T02:14:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:14:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:14:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.009817
2025-12-13T02:14:59.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:14:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:14:59.214 [DEBUG] [Thread-80773] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:14:59.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:14:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:14:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:14:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:14:52', tmtdew=1.74, humidity=88.6, cloud=0.0, wind=35.67, temperature=7.09, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:14:08.189', atlas_cloud=3, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:14:00')
2025-12-13T02:14:59.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:14:59.314 [DEBUG] [Thread-80776] [transport.py] [_log()] starting thread (client mode): 0xf57025f0
2025-12-13T02:14:59.314 [DEBUG] [Thread-80776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:14:59.328 [DEBUG] [Thread-80776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:14:59.329 [INFO] [Thread-80776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:14:59.336 [DEBUG] [Thread-80776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:14:59.336 [DEBUG] [Thread-80776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:14:59.336 [DEBUG] [Thread-80776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] client lang: <none>
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] server lang: <none>
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] kex follows: False
2025-12-13T02:14:59.337 [DEBUG] [Thread-80776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:14:59.338 [DEBUG] [Thread-80776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:14:59.338 [DEBUG] [Thread-80776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:14:59.338 [DEBUG] [Thread-80776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:14:59.338 [DEBUG] [Thread-80776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:14:59.338 [DEBUG] [Thread-80776] [transport.py] [_log()] Compression: none
2025-12-13T02:14:59.338 [DEBUG] [Thread-80776] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:14:59.395 [DEBUG] [Thread-80776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:14:59.396 [DEBUG] [Thread-80776] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:14:59.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:14:59.397 [DEBUG] [Thread-80776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:14:59.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:14:59.452 [DEBUG] [Thread-80776] [transport.py] [_log()] userauth is OK
2025-12-13T02:14:59.452 [DEBUG] [Thread-80776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:14:59.452 [DEBUG] [Thread-80776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:14:59.452 [DEBUG] [Thread-80776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:14:59.452 [DEBUG] [Thread-80776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:14:59.471 [INFO] [Thread-80776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:14:59.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:14:59.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:15:00.324 [DEBUG] [Thread-80776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:15:00.324 [DEBUG] [Thread-80776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:15:00.372 [DEBUG] [Thread-80776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:15:00.372 [DEBUG] [Thread-80776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:15:00.381 [DEBUG] [Thread-80776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:15:00.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:15:00.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:15:00.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:15:00.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:15:00.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:15:00.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:15:00.415 [DEBUG] [Thread-80776] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:15:04.176 [DEBUG] [Thread-80778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:15:19.219 [DEBUG] [Thread-80779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:15:24.176 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:15:24.177 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:15:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:15:30.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:15:30.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 15, 24), 1.73, 88.65, 0.0, 33.77, 7.08, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:15:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:15:24
2025-12-13T02:15:31.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:15:31.403 [DEBUG] [Thread-80780] [transport.py] [_log()] starting thread (client mode): 0xf570dfc0
2025-12-13T02:15:31.403 [DEBUG] [Thread-80780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:15:31.425 [DEBUG] [Thread-80780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:15:31.425 [INFO] [Thread-80780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:15:31.428 [DEBUG] [Thread-80780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] client lang: <none>
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] server lang: <none>
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] kex follows: False
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] Compression: none
2025-12-13T02:15:31.429 [DEBUG] [Thread-80780] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:15:31.442 [DEBUG] [Thread-80780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:15:31.442 [DEBUG] [Thread-80780] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:15:31.443 [DEBUG] [Thread-80780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:15:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:15:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:15:31.445 [DEBUG] [Thread-80780] [transport.py] [_log()] userauth is OK
2025-12-13T02:15:31.446 [DEBUG] [Thread-80780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:15:31.446 [DEBUG] [Thread-80780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:15:31.446 [DEBUG] [Thread-80780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:15:31.446 [DEBUG] [Thread-80780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:15:31.465 [INFO] [Thread-80780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:15:31.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:15:32.272 [DEBUG] [Thread-80780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:15:32.272 [DEBUG] [Thread-80780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:15:32.273 [DEBUG] [Thread-80780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:15:32.313 [DEBUG] [Thread-80780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:15:32.313 [DEBUG] [Thread-80780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:15:32.316 [DEBUG] [Thread-80780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:15:32.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:15:32.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:15:32.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:15:32.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:15:32.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:15:32.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:15:32.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:15:32.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:15:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:15:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.010164 -999.00   +6.90  30.44     91   +5.60 1 3 2 3 1     0    0 -999.00 0.00 zN..W 31.8 30.4 303.6 46.7 8.2 -5.3 8.0 -4.9 7.6 -4.9 8.1 -7.6
2025-12-13T02:15:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:15:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:15:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.010164
2025-12-13T02:15:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:15:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:15:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:15:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:15:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:15:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:15:24', tmtdew=1.73, humidity=88.65, cloud=0.0, wind=33.77, temperature=7.08, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:14:38.170', atlas_cloud=3, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:14:00')
2025-12-13T02:15:32.341 [DEBUG] [Thread-80780] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:15:32.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:15:32.436 [DEBUG] [Thread-80783] [transport.py] [_log()] starting thread (client mode): 0xf575f3a0
2025-12-13T02:15:32.436 [DEBUG] [Thread-80783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:15:32.452 [DEBUG] [Thread-80783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:15:32.452 [INFO] [Thread-80783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:15:32.459 [DEBUG] [Thread-80783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:15:32.459 [DEBUG] [Thread-80783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] client lang: <none>
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] server lang: <none>
2025-12-13T02:15:32.460 [DEBUG] [Thread-80783] [transport.py] [_log()] kex follows: False
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] Compression: none
2025-12-13T02:15:32.461 [DEBUG] [Thread-80783] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:15:32.516 [DEBUG] [Thread-80783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:15:32.516 [DEBUG] [Thread-80783] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:15:32.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:15:32.517 [DEBUG] [Thread-80783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:15:32.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:15:32.572 [DEBUG] [Thread-80783] [transport.py] [_log()] userauth is OK
2025-12-13T02:15:32.572 [DEBUG] [Thread-80783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:15:32.572 [DEBUG] [Thread-80783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:15:32.572 [DEBUG] [Thread-80783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:15:32.572 [DEBUG] [Thread-80783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:15:32.586 [INFO] [Thread-80783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:15:32.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:15:32.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:15:33.387 [DEBUG] [Thread-80783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:15:33.387 [DEBUG] [Thread-80783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:15:33.436 [DEBUG] [Thread-80783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:15:33.436 [DEBUG] [Thread-80783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:15:33.445 [DEBUG] [Thread-80783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:15:33.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:15:33.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:15:33.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:15:33.465 [DEBUG] [Thread-80785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:15:33.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:15:33.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:15:33.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:15:33.477 [DEBUG] [Thread-80783] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:15:34.250 [DEBUG] [Thread-80786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:15:49.295 [DEBUG] [Thread-80787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:03.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:16:03.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:16:03.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:16:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 15, 56), 1.73, 88.69, 0.0, 40.76, 7.11, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:16:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:15:56
2025-12-13T02:16:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:16:04.323 [DEBUG] [Thread-80788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:04.439 [DEBUG] [Thread-80789] [transport.py] [_log()] starting thread (client mode): 0xf575eb00
2025-12-13T02:16:04.439 [DEBUG] [Thread-80789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:16:04.459 [DEBUG] [Thread-80789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:16:04.459 [INFO] [Thread-80789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] client lang: <none>
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] server lang: <none>
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] kex follows: False
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] Compression: none
2025-12-13T02:16:04.463 [DEBUG] [Thread-80789] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:16:04.479 [DEBUG] [Thread-80789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:16:04.479 [DEBUG] [Thread-80789] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:16:04.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:16:04.480 [DEBUG] [Thread-80789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:16:04.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:16:04.482 [DEBUG] [Thread-80789] [transport.py] [_log()] userauth is OK
2025-12-13T02:16:04.482 [DEBUG] [Thread-80789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:16:04.482 [DEBUG] [Thread-80789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:16:04.483 [DEBUG] [Thread-80789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:16:04.483 [DEBUG] [Thread-80789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:16:04.501 [INFO] [Thread-80789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:16:04.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:16:05.153 [DEBUG] [Thread-80789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:16:05.153 [DEBUG] [Thread-80789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:16:05.154 [DEBUG] [Thread-80789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:16:05.194 [DEBUG] [Thread-80789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:16:05.194 [DEBUG] [Thread-80789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:16:05.197 [DEBUG] [Thread-80789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:16:05.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:16:05.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:16:05.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:16:05.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:16:05.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:16:05.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:16:05.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:16:05.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:16:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:16:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.010511 -999.00   +6.90  35.55     91   +5.60 1 2 2 3 1     0    0 -999.00 0.00 ..... 30.0 35.5 304.6 47.0 8.2 -10.0 8.0 -12.6 7.7 -11.8 8.1 -16.8
2025-12-13T02:16:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:16:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:16:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.010511
2025-12-13T02:16:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:16:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:16:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:16:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:16:05.222 [DEBUG] [Thread-80789] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:16:05.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:16:05.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:15:56', tmtdew=1.73, humidity=88.69, cloud=0.0, wind=40.76, temperature=7.11, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:15:08.150', atlas_cloud=2, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:14:00')
2025-12-13T02:16:05.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:16:05.316 [DEBUG] [Thread-80792] [transport.py] [_log()] starting thread (client mode): 0xf572d510
2025-12-13T02:16:05.316 [DEBUG] [Thread-80792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:16:05.332 [DEBUG] [Thread-80792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:16:05.333 [INFO] [Thread-80792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:16:05.340 [DEBUG] [Thread-80792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:16:05.340 [DEBUG] [Thread-80792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:16:05.340 [DEBUG] [Thread-80792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] client lang: <none>
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] server lang: <none>
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] kex follows: False
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:16:05.341 [DEBUG] [Thread-80792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:16:05.342 [DEBUG] [Thread-80792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:16:05.342 [DEBUG] [Thread-80792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:16:05.342 [DEBUG] [Thread-80792] [transport.py] [_log()] Compression: none
2025-12-13T02:16:05.342 [DEBUG] [Thread-80792] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:16:05.404 [DEBUG] [Thread-80792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:16:05.405 [DEBUG] [Thread-80792] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:16:05.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:16:05.406 [DEBUG] [Thread-80792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:16:05.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:16:05.460 [DEBUG] [Thread-80792] [transport.py] [_log()] userauth is OK
2025-12-13T02:16:05.460 [DEBUG] [Thread-80792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:16:05.460 [DEBUG] [Thread-80792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:16:05.461 [DEBUG] [Thread-80792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:16:05.461 [DEBUG] [Thread-80792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:16:05.481 [INFO] [Thread-80792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:16:05.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:16:05.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:16:06.334 [DEBUG] [Thread-80792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:16:06.334 [DEBUG] [Thread-80792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:16:06.381 [DEBUG] [Thread-80792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:16:06.382 [DEBUG] [Thread-80792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:16:06.390 [DEBUG] [Thread-80792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:16:06.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:16:06.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:16:06.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:16:06.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:16:06.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:16:06.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:16:06.433 [DEBUG] [Thread-80792] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:16:19.348 [DEBUG] [Thread-80794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:24.376 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:24.378 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:33.533 [DEBUG] [Thread-80795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:34.394 [DEBUG] [Thread-80796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:16:36.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:16:36.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:16:36.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:16:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 16, 28), 1.73, 88.65, 0.0, 38.11, 7.06, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:16:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:16:28
2025-12-13T02:16:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:16:37.425 [DEBUG] [Thread-80797] [transport.py] [_log()] starting thread (client mode): 0xf572c4c0
2025-12-13T02:16:37.426 [DEBUG] [Thread-80797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:16:37.445 [DEBUG] [Thread-80797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:16:37.445 [INFO] [Thread-80797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] client lang: <none>
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] server lang: <none>
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] kex follows: False
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] Compression: none
2025-12-13T02:16:37.449 [DEBUG] [Thread-80797] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:16:37.466 [DEBUG] [Thread-80797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:16:37.466 [DEBUG] [Thread-80797] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:16:37.467 [DEBUG] [Thread-80797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:16:37.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:16:37.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:16:37.469 [DEBUG] [Thread-80797] [transport.py] [_log()] userauth is OK
2025-12-13T02:16:37.469 [DEBUG] [Thread-80797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:16:37.469 [DEBUG] [Thread-80797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:16:37.469 [DEBUG] [Thread-80797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:16:37.469 [DEBUG] [Thread-80797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:16:37.492 [INFO] [Thread-80797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:16:37.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:16:38.291 [DEBUG] [Thread-80797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:16:38.291 [DEBUG] [Thread-80797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:16:38.292 [DEBUG] [Thread-80797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:16:38.332 [DEBUG] [Thread-80797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:16:38.332 [DEBUG] [Thread-80797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:16:38.334 [DEBUG] [Thread-80797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:16:38.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:16:38.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:16:38.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:16:38.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:16:38.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:16:38.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:16:38.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:16:38.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:16:38.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:16:38.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.011206 -999.00   +6.80  42.33     91   +5.50 1 2 2 3 1     0    0 -999.00 0.00 ZN..W 44.0 42.3 294.6 48.0 8.1 -21.1 7.9 -15.9 7.6 -15.6 7.9 -18.7
2025-12-13T02:16:38.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:16:38.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:16:38.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.011206
2025-12-13T02:16:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:16:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:16:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:16:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:16:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:16:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:16:28', tmtdew=1.73, humidity=88.65, cloud=0.0, wind=38.11, temperature=7.06, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:16:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:14:00')
2025-12-13T02:16:38.361 [DEBUG] [Thread-80797] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:16:38.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:16:38.458 [DEBUG] [Thread-80800] [transport.py] [_log()] starting thread (client mode): 0xf5701660
2025-12-13T02:16:38.458 [DEBUG] [Thread-80800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:16:38.473 [DEBUG] [Thread-80800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:16:38.473 [INFO] [Thread-80800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:16:38.480 [DEBUG] [Thread-80800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] client lang: <none>
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] server lang: <none>
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] kex follows: False
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] Compression: none
2025-12-13T02:16:38.481 [DEBUG] [Thread-80800] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:16:38.538 [DEBUG] [Thread-80800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:16:38.539 [DEBUG] [Thread-80800] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:16:38.539 [DEBUG] [Thread-80800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:16:38.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:16:38.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:16:38.596 [DEBUG] [Thread-80800] [transport.py] [_log()] userauth is OK
2025-12-13T02:16:38.596 [DEBUG] [Thread-80800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:16:38.597 [DEBUG] [Thread-80800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:16:38.597 [DEBUG] [Thread-80800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:16:38.597 [DEBUG] [Thread-80800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:16:38.622 [INFO] [Thread-80800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:16:38.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:16:38.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:16:39.430 [DEBUG] [Thread-80800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:16:39.430 [DEBUG] [Thread-80800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:16:39.479 [DEBUG] [Thread-80800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:16:39.479 [DEBUG] [Thread-80800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:16:39.488 [DEBUG] [Thread-80800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:16:39.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:16: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')
2025-12-13T02:16:39.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:16:39.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:16:39.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:16:39.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:16:39.522 [DEBUG] [Thread-80800] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:16:49.419 [DEBUG] [Thread-80802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:04.463 [DEBUG] [Thread-80803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:17:09.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:17:09.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:17:10.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 17), 1.73, 88.69, 0.0, 38.08, 6.98, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:17:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:17:00
2025-12-13T02:17:10.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:17:10.468 [DEBUG] [Thread-80804] [transport.py] [_log()] starting thread (client mode): 0xf572ee00
2025-12-13T02:17:10.469 [DEBUG] [Thread-80804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:17:10.490 [DEBUG] [Thread-80804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:17:10.490 [INFO] [Thread-80804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] client lang: <none>
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] server lang: <none>
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] kex follows: False
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] Compression: none
2025-12-13T02:17:10.494 [DEBUG] [Thread-80804] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:17:10.502 [DEBUG] [Thread-80804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:17:10.502 [DEBUG] [Thread-80804] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:17:10.502 [DEBUG] [Thread-80804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:17:10.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:17:10.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:17:10.503 [DEBUG] [Thread-80804] [transport.py] [_log()] userauth is OK
2025-12-13T02:17:10.503 [DEBUG] [Thread-80804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:17:10.503 [DEBUG] [Thread-80804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:17:10.503 [DEBUG] [Thread-80804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:17:10.503 [DEBUG] [Thread-80804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:17:10.534 [INFO] [Thread-80804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:17:10.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:17:11.158 [DEBUG] [Thread-80804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:17:11.159 [DEBUG] [Thread-80804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:17:11.159 [DEBUG] [Thread-80804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:17:11.200 [DEBUG] [Thread-80804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:17:11.200 [DEBUG] [Thread-80804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:17:11.203 [DEBUG] [Thread-80804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:17:11.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:17:11.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:17:11.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:17:11.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:17:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:17:11.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:17:11.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:17:11.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:17:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:17:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.011553 -999.00   +6.80  42.58     91   +5.40 1 2 2 3 1     0    0 -999.00 0.00 ZN..W 44.1 42.6 299.6 52.8 8.1 -20.2 7.8 -16.6 7.6 -16.1 7.9 -19.0
2025-12-13T02:17:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:17:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:17:11.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.011553
2025-12-13T02:17:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:17:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:17:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:17:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:17:11.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:17:11.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:17:00', tmtdew=1.73, humidity=88.69, cloud=0.0, wind=38.08, temperature=6.98, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:16:38.179', atlas_cloud=2, atlas_rain=1, zp_data=[0.0017499999999994742, 0.004250000000000753, 0.22325000000000017, 0.07949999999999946, 0.027499999999999858, 0.03225000000000122, 0.058999999999999275, 0.08174999999999955, 0.13299999999999912, 0.22799999999999976, 0.7727499999999994, 0.41499999999999915, 0.08199999999999896, 0.11624999999999908, 0.2134999999999998, 0.22100000000000009, 0.1582499999999989, 0.49849999999999994, 1.2769999999999992, 0.4607499999999991, 0.09849999999999781, 0.42574999999999896, 1.2222500000000007, 1.12275, 0.4819999999999993, 1.5434999999999999, nan, 0.7985000000000007, 0.09849999999999959, 1.0470000000000006, nan, nan, 0.9822499999999987], zp_timestamp='2025-12-13T00:14:00')
2025-12-13T02:17:11.228 [DEBUG] [Thread-80804] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:17:11.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:17:11.324 [DEBUG] [Thread-80807] [transport.py] [_log()] starting thread (client mode): 0xf818a110
2025-12-13T02:17:11.324 [DEBUG] [Thread-80807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:17:11.339 [DEBUG] [Thread-80807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:17:11.339 [INFO] [Thread-80807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:17:11.347 [DEBUG] [Thread-80807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:17:11.347 [DEBUG] [Thread-80807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:17:11.347 [DEBUG] [Thread-80807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:17:11.347 [DEBUG] [Thread-80807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:11.347 [DEBUG] [Thread-80807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] client lang: <none>
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] server lang: <none>
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] kex follows: False
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] Compression: none
2025-12-13T02:17:11.348 [DEBUG] [Thread-80807] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:17:11.405 [DEBUG] [Thread-80807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:17:11.405 [DEBUG] [Thread-80807] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:17:11.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:17:11.406 [DEBUG] [Thread-80807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:17:11.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:17:11.461 [DEBUG] [Thread-80807] [transport.py] [_log()] userauth is OK
2025-12-13T02:17:11.461 [DEBUG] [Thread-80807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:17:11.461 [DEBUG] [Thread-80807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:17:11.461 [DEBUG] [Thread-80807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:17:11.461 [DEBUG] [Thread-80807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:17:11.475 [INFO] [Thread-80807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:17:11.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:17:11.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:17:12.317 [DEBUG] [Thread-80807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:17:12.317 [DEBUG] [Thread-80807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:17:12.364 [DEBUG] [Thread-80807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:17:12.365 [DEBUG] [Thread-80807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:17:12.373 [DEBUG] [Thread-80807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:17:12.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:17:12.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:17:12.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:17:12.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:17:12.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:17:12.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:17:12.404 [DEBUG] [Thread-80807] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:17:19.492 [DEBUG] [Thread-80809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:24.596 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:24.597 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:33.607 [DEBUG] [Thread-80810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:34.544 [DEBUG] [Thread-80811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:17:42.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:17:42.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:17:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:17:43.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 17, 32), 1.73, 88.65, 0.0, 39.86, 6.94, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:17:43.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:17:32
2025-12-13T02:17:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:17:43.384 [DEBUG] [Thread-80812] [transport.py] [_log()] starting thread (client mode): 0xf818a860
2025-12-13T02:17:43.385 [DEBUG] [Thread-80812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:17:43.403 [DEBUG] [Thread-80812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:17:43.403 [INFO] [Thread-80812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] client lang: <none>
2025-12-13T02:17:43.405 [DEBUG] [Thread-80812] [transport.py] [_log()] server lang: <none>
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] kex follows: False
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] Compression: none
2025-12-13T02:17:43.406 [DEBUG] [Thread-80812] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:17:43.415 [DEBUG] [Thread-80812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:17:43.416 [DEBUG] [Thread-80812] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:17:43.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:17:43.417 [DEBUG] [Thread-80812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:17:43.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:17:43.419 [DEBUG] [Thread-80812] [transport.py] [_log()] userauth is OK
2025-12-13T02:17:43.420 [DEBUG] [Thread-80812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:17:43.420 [DEBUG] [Thread-80812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:17:43.420 [DEBUG] [Thread-80812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:17:43.420 [DEBUG] [Thread-80812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:17:43.445 [INFO] [Thread-80812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:17:43.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:17:44.251 [DEBUG] [Thread-80812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:17:44.252 [DEBUG] [Thread-80812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:17:44.252 [DEBUG] [Thread-80812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:17:44.293 [DEBUG] [Thread-80812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:17:44.293 [DEBUG] [Thread-80812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:17:44.296 [DEBUG] [Thread-80812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:17:44.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:17:44.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:17:44.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:17:44.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:17:44.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:17:44.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:17:44.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:17:44.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:17:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:17:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.011901 -999.00   +6.70  31.90     91   +5.50 1 2 2 3 1     0    0 -999.00 0.00 ZNE.W 41.6 31.9 298.2 49.8 8.0 -19.5 7.8 -16.8 7.5 -15.8 7.8 -19.8
2025-12-13T02:17:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:17:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:17:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.011901
2025-12-13T02:17:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:17:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:17:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:17:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:17:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:17:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:17:32', tmtdew=1.73, humidity=88.65, cloud=0.0, wind=39.86, temperature=6.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:17:08.246', 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, 0.29325000000000045, 1.78275, nan, nan, 0.07874999999999943, nan, nan, nan, -0.09999999999999964, nan, nan], zp_timestamp='2025-12-13T00:17:00')
2025-12-13T02:17:44.320 [DEBUG] [Thread-80812] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:17:44.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:17:44.420 [DEBUG] [Thread-80815] [transport.py] [_log()] starting thread (client mode): 0xf572ca60
2025-12-13T02:17:44.420 [DEBUG] [Thread-80815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:17:44.438 [DEBUG] [Thread-80815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:17:44.439 [INFO] [Thread-80815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:17:44.446 [DEBUG] [Thread-80815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:17:44.446 [DEBUG] [Thread-80815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:17:44.446 [DEBUG] [Thread-80815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] client lang: <none>
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] server lang: <none>
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] kex follows: False
2025-12-13T02:17:44.447 [DEBUG] [Thread-80815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:17:44.448 [DEBUG] [Thread-80815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:17:44.448 [DEBUG] [Thread-80815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:17:44.448 [DEBUG] [Thread-80815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:17:44.448 [DEBUG] [Thread-80815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:17:44.448 [DEBUG] [Thread-80815] [transport.py] [_log()] Compression: none
2025-12-13T02:17:44.448 [DEBUG] [Thread-80815] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:17:44.505 [DEBUG] [Thread-80815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:17:44.506 [DEBUG] [Thread-80815] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:17:44.507 [DEBUG] [Thread-80815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:17:44.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:17:44.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:17:44.561 [DEBUG] [Thread-80815] [transport.py] [_log()] userauth is OK
2025-12-13T02:17:44.561 [DEBUG] [Thread-80815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:17:44.562 [DEBUG] [Thread-80815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:17:44.562 [DEBUG] [Thread-80815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:17:44.562 [DEBUG] [Thread-80815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:17:44.582 [INFO] [Thread-80815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:17:44.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:17:44.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:17:45.402 [DEBUG] [Thread-80815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:17:45.402 [DEBUG] [Thread-80815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:17:45.450 [DEBUG] [Thread-80815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:17:45.450 [DEBUG] [Thread-80815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:17:45.459 [DEBUG] [Thread-80815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:17:45.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:17:45.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:17:45.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:17:45.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:17:45.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:17:45.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:17:45.494 [DEBUG] [Thread-80815] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:17:49.570 [DEBUG] [Thread-80817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:04.617 [DEBUG] [Thread-80818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:15.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:18:15.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:18:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:18:16.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 18, 4), 1.72, 88.7, 0.0, 41.74, 6.94, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:18:16.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:18:04
2025-12-13T02:18:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:18:16.479 [DEBUG] [Thread-80819] [transport.py] [_log()] starting thread (client mode): 0xf572df00
2025-12-13T02:18:16.479 [DEBUG] [Thread-80819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:18:16.499 [DEBUG] [Thread-80819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:18:16.499 [INFO] [Thread-80819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:18:16.502 [DEBUG] [Thread-80819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] client lang: <none>
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] server lang: <none>
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] kex follows: False
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] Compression: none
2025-12-13T02:18:16.503 [DEBUG] [Thread-80819] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:18:16.520 [DEBUG] [Thread-80819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:18:16.520 [DEBUG] [Thread-80819] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:18:16.521 [DEBUG] [Thread-80819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:18:16.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:18:16.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:18:16.565 [DEBUG] [Thread-80819] [transport.py] [_log()] userauth is OK
2025-12-13T02:18:16.565 [DEBUG] [Thread-80819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:18:16.565 [DEBUG] [Thread-80819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:18:16.565 [DEBUG] [Thread-80819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:18:16.565 [DEBUG] [Thread-80819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:18:16.591 [INFO] [Thread-80819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:18:16.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:18:17.229 [DEBUG] [Thread-80819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:18:17.229 [DEBUG] [Thread-80819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:18:17.230 [DEBUG] [Thread-80819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:18:17.270 [DEBUG] [Thread-80819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:18:17.270 [DEBUG] [Thread-80819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:18:17.273 [DEBUG] [Thread-80819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:18:17.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:18:17.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:18:17.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:18:17.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:18:17.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:18:17.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:18:17.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:18:17.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:18:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:18:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.012248 -999.00   +6.70  43.42     91   +5.40 1 2 2 3 1     0    0 -999.00 0.00 ZNE.W 42.9 43.4 304.4 48.6 8.0 -21.9 7.8 -19.4 7.5 -16.8 7.8 -17.8
2025-12-13T02:18:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:18:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:18:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.012248
2025-12-13T02:18:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:18:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:18:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:18:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:18:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:18:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:18:04', tmtdew=1.72, humidity=88.7, cloud=0.0, wind=41.74, temperature=6.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:17:38.227', 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, 0.29325000000000045, 1.78275, nan, nan, 0.07874999999999943, nan, nan, nan, -0.09999999999999964, nan, nan], zp_timestamp='2025-12-13T00:17:00')
2025-12-13T02:18:17.300 [DEBUG] [Thread-80819] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:18:17.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:18:17.398 [DEBUG] [Thread-80822] [transport.py] [_log()] starting thread (client mode): 0xf572e800
2025-12-13T02:18:17.398 [DEBUG] [Thread-80822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:18:17.413 [DEBUG] [Thread-80822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:18:17.413 [INFO] [Thread-80822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:17.421 [DEBUG] [Thread-80822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] client lang: <none>
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] server lang: <none>
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] kex follows: False
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] Compression: none
2025-12-13T02:18:17.422 [DEBUG] [Thread-80822] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:18:17.484 [DEBUG] [Thread-80822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:18:17.485 [DEBUG] [Thread-80822] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:18:17.485 [DEBUG] [Thread-80822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:18:17.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:18:17.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:18:17.542 [DEBUG] [Thread-80822] [transport.py] [_log()] userauth is OK
2025-12-13T02:18:17.542 [DEBUG] [Thread-80822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:18:17.542 [DEBUG] [Thread-80822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:18:17.542 [DEBUG] [Thread-80822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:18:17.542 [DEBUG] [Thread-80822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:18:17.561 [INFO] [Thread-80822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:18:17.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:18:17.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:18:18.403 [DEBUG] [Thread-80822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:18:18.404 [DEBUG] [Thread-80822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:18:18.452 [DEBUG] [Thread-80822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:18:18.452 [DEBUG] [Thread-80822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:18:18.461 [DEBUG] [Thread-80822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:18:18.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:18:18.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:18:18.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:18:18.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:18:18.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:18:18.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:18:18.500 [DEBUG] [Thread-80822] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:18:19.644 [DEBUG] [Thread-80824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:24.804 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:24.805 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:33.682 [DEBUG] [Thread-80825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:34.689 [DEBUG] [Thread-80826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:48.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:18:48.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:18:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:18:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 18, 36), 1.73, 88.67, 0.0, 34.25, 6.84, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:18:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:18:36
2025-12-13T02:18:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:18:49.464 [DEBUG] [Thread-80827] [transport.py] [_log()] starting thread (client mode): 0xf570df30
2025-12-13T02:18:49.464 [DEBUG] [Thread-80827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:18:49.481 [DEBUG] [Thread-80827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:18:49.481 [INFO] [Thread-80827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] client lang: <none>
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] server lang: <none>
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] kex follows: False
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] Compression: none
2025-12-13T02:18:49.485 [DEBUG] [Thread-80827] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:18:49.502 [DEBUG] [Thread-80827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:18:49.502 [DEBUG] [Thread-80827] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:18:49.502 [DEBUG] [Thread-80827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:18:49.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:18:49.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:18:49.504 [DEBUG] [Thread-80827] [transport.py] [_log()] userauth is OK
2025-12-13T02:18:49.504 [DEBUG] [Thread-80827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:18:49.504 [DEBUG] [Thread-80827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:18:49.504 [DEBUG] [Thread-80827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:18:49.504 [DEBUG] [Thread-80827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:18:49.525 [INFO] [Thread-80827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:18:49.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:18:49.712 [DEBUG] [Thread-80829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:18:50.379 [DEBUG] [Thread-80827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:18:50.379 [DEBUG] [Thread-80827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:18:50.379 [DEBUG] [Thread-80827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:18:50.421 [DEBUG] [Thread-80827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:18:50.421 [DEBUG] [Thread-80827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:18:50.424 [DEBUG] [Thread-80827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:18:50.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:18:50.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:18:50.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:18:50.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:18:50.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:18:50.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:18:50.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:18:50.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:18:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:18:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.012595 -999.00   +6.70  35.65     91   +5.40 1 2 2 3 1     0    0 -999.00 0.00 ZNE.W 27.9 35.6 295.4 49.8 7.9 -18.7 7.8 -14.5 7.4 -11.8 7.8 -12.3
2025-12-13T02:18:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:18:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:18:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.012595
2025-12-13T02:18:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:18:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:18:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:18:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:18:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:18:50.449 [DEBUG] [Thread-80827] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:18:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:18:36', tmtdew=1.73, humidity=88.67, cloud=0.0, wind=34.25, temperature=6.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:18:08.208', 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, 0.29325000000000045, 1.78275, nan, nan, 0.07874999999999943, nan, nan, nan, -0.09999999999999964, nan, nan], zp_timestamp='2025-12-13T00:17:00')
2025-12-13T02:18:50.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:18:50.545 [DEBUG] [Thread-80831] [transport.py] [_log()] starting thread (client mode): 0xf570cbb0
2025-12-13T02:18:50.545 [DEBUG] [Thread-80831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:18:50.560 [DEBUG] [Thread-80831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:18:50.560 [INFO] [Thread-80831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:18:50.567 [DEBUG] [Thread-80831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] client lang: <none>
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] server lang: <none>
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] kex follows: False
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] Compression: none
2025-12-13T02:18:50.568 [DEBUG] [Thread-80831] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:18:50.629 [DEBUG] [Thread-80831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:18:50.630 [DEBUG] [Thread-80831] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:18:50.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:18:50.631 [DEBUG] [Thread-80831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:18:50.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:18:50.690 [DEBUG] [Thread-80831] [transport.py] [_log()] userauth is OK
2025-12-13T02:18:50.690 [DEBUG] [Thread-80831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:18:50.690 [DEBUG] [Thread-80831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:18:50.690 [DEBUG] [Thread-80831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:18:50.690 [DEBUG] [Thread-80831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:18:50.710 [INFO] [Thread-80831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:18:50.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:18:50.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:18:51.608 [DEBUG] [Thread-80831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:18:51.608 [DEBUG] [Thread-80831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:18:51.656 [DEBUG] [Thread-80831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:18:51.656 [DEBUG] [Thread-80831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:18:51.665 [DEBUG] [Thread-80831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:18:51.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:18:51.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:18:51.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:18:51.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:18:51.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:18:51.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:18:51.700 [DEBUG] [Thread-80831] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:19:04.740 [DEBUG] [Thread-80833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:19.780 [DEBUG] [Thread-80834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:19:21.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:19:21.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:19:22.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 19, 8), 1.71, 88.75, 0.0, 37.0, 6.84, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:19:22.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:19:08
2025-12-13T02:19:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:19:22.636 [DEBUG] [Thread-80835] [transport.py] [_log()] starting thread (client mode): 0xf818b970
2025-12-13T02:19:22.636 [DEBUG] [Thread-80835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:19:22.658 [DEBUG] [Thread-80835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:19:22.658 [INFO] [Thread-80835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:22.659 [DEBUG] [Thread-80835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] client lang: <none>
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] server lang: <none>
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] kex follows: False
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] Compression: none
2025-12-13T02:19:22.660 [DEBUG] [Thread-80835] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:19:22.668 [DEBUG] [Thread-80835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:19:22.668 [DEBUG] [Thread-80835] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:19:22.668 [DEBUG] [Thread-80835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:19:22.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:19:22.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:19:22.669 [DEBUG] [Thread-80835] [transport.py] [_log()] userauth is OK
2025-12-13T02:19:22.669 [DEBUG] [Thread-80835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:19:22.669 [DEBUG] [Thread-80835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:19:22.669 [DEBUG] [Thread-80835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:19:22.669 [DEBUG] [Thread-80835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:19:22.681 [INFO] [Thread-80835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:19:22.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:19:23.272 [DEBUG] [Thread-80835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:19:23.272 [DEBUG] [Thread-80835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:19:23.272 [DEBUG] [Thread-80835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:19:23.313 [DEBUG] [Thread-80835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:19:23.313 [DEBUG] [Thread-80835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:19:23.316 [DEBUG] [Thread-80835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:19:23.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:19:23.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:19:23.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:19:23.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:19:23.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:19:23.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:19:23.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:19:23.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:19:23.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:19:23.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.012942 -999.00   +6.70  38.68     91   +5.40 1 3 2 3 1     0    0 -999.00 0.00 ZNE.W 40.3 38.7 303.2 51.7 7.9 -14.1 7.8 -11.3 7.4 -8.6 7.8 -8.6
2025-12-13T02:19:23.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:19:23.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:19:23.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.012942
2025-12-13T02:19:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:19:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:19:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:19:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:19:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:19:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:19:08', tmtdew=1.71, humidity=88.75, cloud=0.0, wind=37.0, temperature=6.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:18:38.189', atlas_cloud=3, 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, 0.29325000000000045, 1.78275, nan, nan, 0.07874999999999943, nan, nan, nan, -0.09999999999999964, nan, nan], zp_timestamp='2025-12-13T00:17:00')
2025-12-13T02:19:23.343 [DEBUG] [Thread-80835] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:19:23.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:19:23.440 [DEBUG] [Thread-80838] [transport.py] [_log()] starting thread (client mode): 0xf818a200
2025-12-13T02:19:23.440 [DEBUG] [Thread-80838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:19:23.455 [DEBUG] [Thread-80838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:19:23.455 [INFO] [Thread-80838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] client lang: <none>
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] server lang: <none>
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] kex follows: False
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:19:23.463 [DEBUG] [Thread-80838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:19:23.464 [DEBUG] [Thread-80838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:19:23.464 [DEBUG] [Thread-80838] [transport.py] [_log()] Compression: none
2025-12-13T02:19:23.464 [DEBUG] [Thread-80838] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:19:23.521 [DEBUG] [Thread-80838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:19:23.522 [DEBUG] [Thread-80838] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:19:23.522 [DEBUG] [Thread-80838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:19:23.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:19:23.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:19:23.578 [DEBUG] [Thread-80838] [transport.py] [_log()] userauth is OK
2025-12-13T02:19:23.578 [DEBUG] [Thread-80838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:19:23.578 [DEBUG] [Thread-80838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:19:23.578 [DEBUG] [Thread-80838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:19:23.579 [DEBUG] [Thread-80838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:19:23.598 [INFO] [Thread-80838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:19:23.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:19:23.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:19:24.446 [DEBUG] [Thread-80838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:19:24.446 [DEBUG] [Thread-80838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:19:24.495 [DEBUG] [Thread-80838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:19:24.495 [DEBUG] [Thread-80838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:19:24.504 [DEBUG] [Thread-80838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:19:24.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:19:24.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')
2025-12-13T02:19:24.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:19:24.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:19:24.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:19:24.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:19:24.538 [DEBUG] [Thread-80838] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:19:25.013 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:25.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:33.757 [DEBUG] [Thread-80840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:34.807 [DEBUG] [Thread-80841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:49.857 [DEBUG] [Thread-80842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:19:54.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:19:54.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:19:54.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:19:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 19, 41), 1.7, 88.82, 0.0, 31.1, 6.94, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:19:55.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:19:41
2025-12-13T02:19:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:19:55.490 [DEBUG] [Thread-80843] [transport.py] [_log()] starting thread (client mode): 0xf57417b0
2025-12-13T02:19:55.490 [DEBUG] [Thread-80843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:19:55.512 [DEBUG] [Thread-80843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:19:55.512 [INFO] [Thread-80843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] client lang: <none>
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] server lang: <none>
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] kex follows: False
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:19:55.515 [DEBUG] [Thread-80843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:19:55.516 [DEBUG] [Thread-80843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:19:55.516 [DEBUG] [Thread-80843] [transport.py] [_log()] Compression: none
2025-12-13T02:19:55.516 [DEBUG] [Thread-80843] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:19:55.532 [DEBUG] [Thread-80843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:19:55.532 [DEBUG] [Thread-80843] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:19:55.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:19:55.533 [DEBUG] [Thread-80843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:19:55.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:19:55.535 [DEBUG] [Thread-80843] [transport.py] [_log()] userauth is OK
2025-12-13T02:19:55.535 [DEBUG] [Thread-80843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:19:55.536 [DEBUG] [Thread-80843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:19:55.536 [DEBUG] [Thread-80843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:19:55.536 [DEBUG] [Thread-80843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:19:55.552 [INFO] [Thread-80843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:19:55.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:19:56.331 [DEBUG] [Thread-80843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:19:56.332 [DEBUG] [Thread-80843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:19:56.332 [DEBUG] [Thread-80843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:19:56.373 [DEBUG] [Thread-80843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:19:56.373 [DEBUG] [Thread-80843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:19:56.376 [DEBUG] [Thread-80843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:19:56.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:19:56.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:19:56.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:19:56.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:19:56.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:19:56.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:19:56.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:19:56.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:19:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:19:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.013637 -999.00   +6.70  37.36     91   +5.40 1 2 2 3 1     0    0 -999.00 0.00 ZNES. 38.6 37.4 300.2 47.9 7.9 -11.5 7.7 -11.4 7.5 -10.3 7.8 -12.6
2025-12-13T02:19:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:19:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:19:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.013637
2025-12-13T02:19:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:19:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:19:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:19:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:19:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:19:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:19:41', tmtdew=1.7, humidity=88.82, cloud=0.0, wind=31.1, temperature=6.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:19:38.237', 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, 0.29325000000000045, 1.78275, nan, nan, 0.07874999999999943, nan, nan, nan, -0.09999999999999964, nan, nan], zp_timestamp='2025-12-13T00:17:00')
2025-12-13T02:19:56.401 [DEBUG] [Thread-80843] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:19:56.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:19:56.497 [DEBUG] [Thread-80846] [transport.py] [_log()] starting thread (client mode): 0xfabc7820
2025-12-13T02:19:56.498 [DEBUG] [Thread-80846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:19:56.513 [DEBUG] [Thread-80846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:19:56.513 [INFO] [Thread-80846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:56.521 [DEBUG] [Thread-80846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] client lang: <none>
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] server lang: <none>
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] kex follows: False
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] Compression: none
2025-12-13T02:19:56.522 [DEBUG] [Thread-80846] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:19:56.578 [DEBUG] [Thread-80846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:19:56.578 [DEBUG] [Thread-80846] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:19:56.579 [DEBUG] [Thread-80846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:19:56.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:19:56.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:19:56.634 [DEBUG] [Thread-80846] [transport.py] [_log()] userauth is OK
2025-12-13T02:19:56.635 [DEBUG] [Thread-80846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:19:56.635 [DEBUG] [Thread-80846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:19:56.635 [DEBUG] [Thread-80846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:19:56.635 [DEBUG] [Thread-80846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:19:56.654 [INFO] [Thread-80846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:19:56.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:19:56.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:19:57.586 [DEBUG] [Thread-80846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:19:57.586 [DEBUG] [Thread-80846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:19:57.635 [DEBUG] [Thread-80846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:19:57.635 [DEBUG] [Thread-80846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:19:57.644 [DEBUG] [Thread-80846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:19:57.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:19:57.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:19:57.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:19:57.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:19:57.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:19:57.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:19:57.679 [DEBUG] [Thread-80846] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:20:04.884 [DEBUG] [Thread-80848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:20:19.928 [DEBUG] [Thread-80849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:20:25.219 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:20:25.220 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:20:27.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:20:27.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:20:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:20:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 20, 13), 1.7, 88.82, 0.0, 32.22, 6.89, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:20:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:20:13
2025-12-13T02:20:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:20:28.709 [DEBUG] [Thread-80850] [transport.py] [_log()] starting thread (client mode): 0xf818abc0
2025-12-13T02:20:28.709 [DEBUG] [Thread-80850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:20:28.729 [DEBUG] [Thread-80850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:20:28.729 [INFO] [Thread-80850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] client lang: <none>
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] server lang: <none>
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] kex follows: False
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] Compression: none
2025-12-13T02:20:28.733 [DEBUG] [Thread-80850] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:20:28.748 [DEBUG] [Thread-80850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:20:28.748 [DEBUG] [Thread-80850] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:20:28.748 [DEBUG] [Thread-80850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:20:28.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:20:28.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:20:28.749 [DEBUG] [Thread-80850] [transport.py] [_log()] userauth is OK
2025-12-13T02:20:28.749 [DEBUG] [Thread-80850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:20:28.749 [DEBUG] [Thread-80850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:20:28.749 [DEBUG] [Thread-80850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:20:28.749 [DEBUG] [Thread-80850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:20:28.764 [INFO] [Thread-80850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:20:28.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:20:29.399 [DEBUG] [Thread-80850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:20:29.399 [DEBUG] [Thread-80850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:20:29.399 [DEBUG] [Thread-80850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:20:29.440 [DEBUG] [Thread-80850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:20:29.440 [DEBUG] [Thread-80850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:20:29.442 [DEBUG] [Thread-80850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:20:29.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:20:29.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:20:29.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:20:29.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:20:29.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:20:29.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:20:29.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.013983 -999.00   +6.70  36.66     91   +5.40 1 2 2 3 1     0    0 -999.00 0.00 .NE.W 36.8 36.7 303.2 50.5 7.9 -14.4 7.7 -13.8 7.4 -12.2 7.8 -14.1
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.013983
2025-12-13T02:20:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:20:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:20:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:20:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:20:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:20:29.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:20:13', tmtdew=1.7, humidity=88.82, cloud=0.0, wind=32.22, temperature=6.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:20:08.131', 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, 0.29325000000000045, 1.78275, nan, nan, 0.07874999999999943, nan, nan, nan, -0.09999999999999964, nan, nan], zp_timestamp='2025-12-13T00:17:00')
2025-12-13T02:20:29.462 [DEBUG] [Thread-80850] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:20:29.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:20:33.831 [DEBUG] [Thread-80853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:20:34.959 [DEBUG] [Thread-80854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:20:50.005 [DEBUG] [Thread-80855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:05.032 [DEBUG] [Thread-80856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:20.062 [DEBUG] [Thread-80857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:25.423 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:25.424 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:33.909 [DEBUG] [Thread-80858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:35.095 [DEBUG] [Thread-80859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:21:50.126 [DEBUG] [Thread-80860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:05.153 [DEBUG] [Thread-80861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:20.183 [DEBUG] [Thread-80862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:25.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:25.629 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:33.984 [DEBUG] [Thread-80863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:35.210 [DEBUG] [Thread-80864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:22:42.667 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-13T02:22:50.242 [DEBUG] [Thread-80865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:05.270 [DEBUG] [Thread-80866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:23:12.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:23:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:23:13.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 22, 53), 1.7, 88.85, 0.0, 30.42, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:23:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:22:53
2025-12-13T02:23:13.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:23:13.674 [DEBUG] [Thread-80867] [transport.py] [_log()] starting thread (client mode): 0xf81897e0
2025-12-13T02:23:13.674 [DEBUG] [Thread-80867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:23:13.695 [DEBUG] [Thread-80867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:23:13.695 [INFO] [Thread-80867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] client lang: <none>
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] server lang: <none>
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] kex follows: False
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] Compression: none
2025-12-13T02:23:13.698 [DEBUG] [Thread-80867] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:23:13.716 [DEBUG] [Thread-80867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:23:13.717 [DEBUG] [Thread-80867] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:23:13.717 [DEBUG] [Thread-80867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:23:13.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:23:13.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:23:13.719 [DEBUG] [Thread-80867] [transport.py] [_log()] userauth is OK
2025-12-13T02:23:13.719 [DEBUG] [Thread-80867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:23:13.719 [DEBUG] [Thread-80867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:23:13.719 [DEBUG] [Thread-80867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:23:13.720 [DEBUG] [Thread-80867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:23:13.738 [INFO] [Thread-80867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:23:13.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:23:14.381 [DEBUG] [Thread-80867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:23:14.381 [DEBUG] [Thread-80867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:23:14.382 [DEBUG] [Thread-80867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:23:14.422 [DEBUG] [Thread-80867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:23:14.422 [DEBUG] [Thread-80867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:23:14.425 [DEBUG] [Thread-80867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:23:14.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:23:14.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:23:14.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:23:14.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:23:14.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:23:14.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:23:14.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:23:14.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:23:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:23:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.015720 -999.00   +6.50  43.75     91   +5.20 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 39.8 43.8 296.6 48.7 7.8 -22.7 7.5 -20.0 7.2 -17.6 7.5 -18.9
2025-12-13T02:23:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:23:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:23:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.015720
2025-12-13T02:23:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:23:14.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:23:14.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:23:14.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:23:14.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:23:14.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:22:53', tmtdew=1.7, humidity=88.85, cloud=0.0, wind=30.42, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:22:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:19:00')
2025-12-13T02:23:14.449 [DEBUG] [Thread-80867] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:23:14.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:23:14.545 [DEBUG] [Thread-80870] [transport.py] [_log()] starting thread (client mode): 0xf81e5db0
2025-12-13T02:23:14.545 [DEBUG] [Thread-80870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:23:14.561 [DEBUG] [Thread-80870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:23:14.561 [INFO] [Thread-80870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:14.569 [DEBUG] [Thread-80870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] client lang: <none>
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] server lang: <none>
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] kex follows: False
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] Compression: none
2025-12-13T02:23:14.570 [DEBUG] [Thread-80870] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:23:14.627 [DEBUG] [Thread-80870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:23:14.628 [DEBUG] [Thread-80870] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:23:14.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:23:14.629 [DEBUG] [Thread-80870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:23:14.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:23:14.684 [DEBUG] [Thread-80870] [transport.py] [_log()] userauth is OK
2025-12-13T02:23:14.684 [DEBUG] [Thread-80870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:23:14.684 [DEBUG] [Thread-80870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:23:14.684 [DEBUG] [Thread-80870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:23:14.684 [DEBUG] [Thread-80870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:23:14.702 [INFO] [Thread-80870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:23:14.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:23:14.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:23:15.559 [DEBUG] [Thread-80870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:23:15.559 [DEBUG] [Thread-80870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:23:15.608 [DEBUG] [Thread-80870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:23:15.608 [DEBUG] [Thread-80870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:23:15.617 [DEBUG] [Thread-80870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:23:15.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:23:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:23:15.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:23:15.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:23:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:23:15.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:23:15.651 [DEBUG] [Thread-80870] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:23:20.299 [DEBUG] [Thread-80872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:25.833 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:25.834 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:34.060 [DEBUG] [Thread-80873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:35.351 [DEBUG] [Thread-80874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:23:45.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:23:45.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:23:45.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:23:46.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 23, 25), 1.69, 88.92, 0.0, 32.96, 6.73, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:23:46.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:23:25
2025-12-13T02:23:46.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:23:46.649 [DEBUG] [Thread-80875] [transport.py] [_log()] starting thread (client mode): 0xf8188820
2025-12-13T02:23:46.649 [DEBUG] [Thread-80875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:23:46.669 [DEBUG] [Thread-80875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:23:46.669 [INFO] [Thread-80875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:23:46.672 [DEBUG] [Thread-80875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] client lang: <none>
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] server lang: <none>
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] kex follows: False
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:23:46.673 [DEBUG] [Thread-80875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:23:46.674 [DEBUG] [Thread-80875] [transport.py] [_log()] Compression: none
2025-12-13T02:23:46.674 [DEBUG] [Thread-80875] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:23:46.689 [DEBUG] [Thread-80875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:23:46.690 [DEBUG] [Thread-80875] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:23:46.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:23:46.691 [DEBUG] [Thread-80875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:23:46.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:23:46.693 [DEBUG] [Thread-80875] [transport.py] [_log()] userauth is OK
2025-12-13T02:23:46.694 [DEBUG] [Thread-80875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:23:46.694 [DEBUG] [Thread-80875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:23:46.694 [DEBUG] [Thread-80875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:23:46.694 [DEBUG] [Thread-80875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:23:46.711 [INFO] [Thread-80875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:23:46.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:23:47.297 [DEBUG] [Thread-80875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:23:47.297 [DEBUG] [Thread-80875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:23:47.297 [DEBUG] [Thread-80875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:23:47.338 [DEBUG] [Thread-80875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:23:47.338 [DEBUG] [Thread-80875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:23:47.341 [DEBUG] [Thread-80875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:23:47.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:23:47.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:23:47.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:23:47.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:23:47.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:23:47.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:23:47.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:23:47.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:23:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:23:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.016414 -999.00   +6.50  36.25     91   +5.20 1 2 2 3 1     0    0 -999.00 0.00 ZNEsw 40.4 36.2 302.0 49.6 7.7 -15.2 7.5 -11.5 7.2 -10.1 7.5 -11.5
2025-12-13T02:23:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:23:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:23:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.016414
2025-12-13T02:23:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:23:47.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:23:47.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:23:47.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:23:47.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:23:47.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:23:25', tmtdew=1.69, humidity=88.92, cloud=0.0, wind=32.96, temperature=6.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:23:38.170', atlas_cloud=2, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:22:00')
2025-12-13T02:23:47.364 [DEBUG] [Thread-80875] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:23:47.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:23:47.461 [DEBUG] [Thread-80878] [transport.py] [_log()] starting thread (client mode): 0xf818abc0
2025-12-13T02:23:47.461 [DEBUG] [Thread-80878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:23:47.478 [DEBUG] [Thread-80878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:23:47.478 [INFO] [Thread-80878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:23:47.485 [DEBUG] [Thread-80878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:23:47.485 [DEBUG] [Thread-80878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] client lang: <none>
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] server lang: <none>
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] kex follows: False
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] Compression: none
2025-12-13T02:23:47.486 [DEBUG] [Thread-80878] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:23:47.544 [DEBUG] [Thread-80878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:23:47.544 [DEBUG] [Thread-80878] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:23:47.545 [DEBUG] [Thread-80878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:23:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:23:47.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:23:47.599 [DEBUG] [Thread-80878] [transport.py] [_log()] userauth is OK
2025-12-13T02:23:47.600 [DEBUG] [Thread-80878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:23:47.600 [DEBUG] [Thread-80878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:23:47.600 [DEBUG] [Thread-80878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:23:47.600 [DEBUG] [Thread-80878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:23:47.619 [INFO] [Thread-80878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:23:47.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:23:47.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:23:48.473 [DEBUG] [Thread-80878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:23:48.474 [DEBUG] [Thread-80878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:23:48.522 [DEBUG] [Thread-80878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:23:48.522 [DEBUG] [Thread-80878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:23:48.531 [DEBUG] [Thread-80878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:23:48.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:23:48.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:23:48.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:23:48.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:23:48.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:23:48.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:23:48.566 [DEBUG] [Thread-80878] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:23:50.378 [DEBUG] [Thread-80880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:05.421 [DEBUG] [Thread-80881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:24:18.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:24:18.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:24:19.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 23, 57), 1.7, 88.85, 0.0, 39.66, 6.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:24:19.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:23:57
2025-12-13T02:24:19.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:24:19.578 [DEBUG] [Thread-80882] [transport.py] [_log()] starting thread (client mode): 0xf5742e60
2025-12-13T02:24:19.578 [DEBUG] [Thread-80882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:24:19.600 [DEBUG] [Thread-80882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:24:19.600 [INFO] [Thread-80882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] client lang: <none>
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] server lang: <none>
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] kex follows: False
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] Compression: none
2025-12-13T02:24:19.603 [DEBUG] [Thread-80882] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:24:19.618 [DEBUG] [Thread-80882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:24:19.618 [DEBUG] [Thread-80882] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:24:19.619 [DEBUG] [Thread-80882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:24:19.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:24:19.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:24:19.620 [DEBUG] [Thread-80882] [transport.py] [_log()] userauth is OK
2025-12-13T02:24:19.620 [DEBUG] [Thread-80882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:24:19.621 [DEBUG] [Thread-80882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:24:19.621 [DEBUG] [Thread-80882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:24:19.621 [DEBUG] [Thread-80882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:24:19.635 [INFO] [Thread-80882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:24:19.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:24:20.195 [DEBUG] [Thread-80882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:24:20.195 [DEBUG] [Thread-80882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:24:20.195 [DEBUG] [Thread-80882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:24:20.236 [DEBUG] [Thread-80882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:24:20.236 [DEBUG] [Thread-80882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:24:20.239 [DEBUG] [Thread-80882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:24:20.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:24:20.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:24:20.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:24:20.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:24:20.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:24:20.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:24:20.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.016761 -999.00   +6.50  43.55     91   +5.10 1 2 2 3 1     0    0 -999.00 0.00 ZNEsw 42.2 43.5 300.0 53.7 7.7 -13.6 7.5 -12.5 7.2 -11.7 7.5 -14.3
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.016761
2025-12-13T02:24:20.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:24:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:24:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:24:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:24:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:24:20.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:23:57', tmtdew=1.7, humidity=88.85, cloud=0.0, wind=39.66, temperature=6.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:24:08.150', atlas_cloud=2, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:22:00')
2025-12-13T02:24:20.258 [DEBUG] [Thread-80882] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:24:20.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:24:20.342 [DEBUG] [Thread-80885] [transport.py] [_log()] starting thread (client mode): 0xfabc6890
2025-12-13T02:24:20.342 [DEBUG] [Thread-80885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:24:20.357 [DEBUG] [Thread-80885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:24:20.357 [INFO] [Thread-80885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] client lang: <none>
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] server lang: <none>
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] kex follows: False
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] Compression: none
2025-12-13T02:24:20.365 [DEBUG] [Thread-80885] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:24:20.422 [DEBUG] [Thread-80885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:24:20.422 [DEBUG] [Thread-80885] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:24:20.422 [DEBUG] [Thread-80885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:24:20.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:24:20.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:24:20.447 [DEBUG] [Thread-80887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:20.479 [DEBUG] [Thread-80885] [transport.py] [_log()] userauth is OK
2025-12-13T02:24:20.479 [DEBUG] [Thread-80885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:24:20.479 [DEBUG] [Thread-80885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:24:20.479 [DEBUG] [Thread-80885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:24:20.479 [DEBUG] [Thread-80885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:24:20.496 [INFO] [Thread-80885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:24:20.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:24:20.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:24:21.349 [DEBUG] [Thread-80885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:24:21.349 [DEBUG] [Thread-80885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:24:21.396 [DEBUG] [Thread-80885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:24:21.397 [DEBUG] [Thread-80885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:24:21.405 [DEBUG] [Thread-80885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:24:21.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:24:21.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:24:21.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:24:21.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:24:21.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:24:21.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:24:21.438 [DEBUG] [Thread-80885] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:24:26.039 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:26.041 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:34.139 [DEBUG] [Thread-80888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:35.484 [DEBUG] [Thread-80889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:50.516 [DEBUG] [Thread-80890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:24:51.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:24:51.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:24:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:24:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 24, 29), 1.7, 88.84, 0.0, 41.89, 6.64, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:24:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:24:29
2025-12-13T02:24:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:24:52.425 [DEBUG] [Thread-80891] [transport.py] [_log()] starting thread (client mode): 0xf5701c30
2025-12-13T02:24:52.425 [DEBUG] [Thread-80891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:24:52.445 [DEBUG] [Thread-80891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:24:52.446 [INFO] [Thread-80891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] client lang: <none>
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] server lang: <none>
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] kex follows: False
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] Compression: none
2025-12-13T02:24:52.449 [DEBUG] [Thread-80891] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:24:52.467 [DEBUG] [Thread-80891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:24:52.468 [DEBUG] [Thread-80891] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:24:52.468 [DEBUG] [Thread-80891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:24:52.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:24:52.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:24:52.471 [DEBUG] [Thread-80891] [transport.py] [_log()] userauth is OK
2025-12-13T02:24:52.471 [DEBUG] [Thread-80891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:24:52.471 [DEBUG] [Thread-80891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:24:52.471 [DEBUG] [Thread-80891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:24:52.471 [DEBUG] [Thread-80891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:24:52.507 [INFO] [Thread-80891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:24:52.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:24:53.086 [DEBUG] [Thread-80891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:24:53.086 [DEBUG] [Thread-80891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:24:53.086 [DEBUG] [Thread-80891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:24:53.127 [DEBUG] [Thread-80891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:24:53.127 [DEBUG] [Thread-80891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:24:53.130 [DEBUG] [Thread-80891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:24:53.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:24:53.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:24:53.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:24:53.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:24:53.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:24:53.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:24:53.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:24:53.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:24:53.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:24:53.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.016761 -999.00   +6.50  43.55     91   +5.10 1 2 2 3 1     0    0 -999.00 0.00 ZNEsw 42.2 43.5 300.0 53.7 7.7 -13.6 7.5 -12.5 7.2 -11.7 7.5 -14.3
2025-12-13T02:24:53.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.016761
2025-12-13T02:24:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:24:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:24:29', tmtdew=1.7, humidity=88.84, cloud=0.0, wind=41.89, temperature=6.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:24:08.150', atlas_cloud=2, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:22:00')
2025-12-13T02:24:53.154 [DEBUG] [Thread-80891] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:24:53.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:24:53.250 [DEBUG] [Thread-80894] [transport.py] [_log()] starting thread (client mode): 0xf57001c0
2025-12-13T02:24:53.250 [DEBUG] [Thread-80894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:24:53.265 [DEBUG] [Thread-80894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:24:53.265 [INFO] [Thread-80894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:24:53.273 [DEBUG] [Thread-80894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] client lang: <none>
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] server lang: <none>
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] kex follows: False
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] Compression: none
2025-12-13T02:24:53.274 [DEBUG] [Thread-80894] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:24:53.331 [DEBUG] [Thread-80894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:24:53.332 [DEBUG] [Thread-80894] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:24:53.332 [DEBUG] [Thread-80894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:24:53.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:24:53.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:24:53.388 [DEBUG] [Thread-80894] [transport.py] [_log()] userauth is OK
2025-12-13T02:24:53.388 [DEBUG] [Thread-80894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:24:53.388 [DEBUG] [Thread-80894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:24:53.388 [DEBUG] [Thread-80894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:24:53.388 [DEBUG] [Thread-80894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:24:53.407 [INFO] [Thread-80894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:24:53.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:24:53.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:24:54.213 [DEBUG] [Thread-80894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:24:54.214 [DEBUG] [Thread-80894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:24:54.265 [DEBUG] [Thread-80894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:24:54.265 [DEBUG] [Thread-80894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:24:54.274 [DEBUG] [Thread-80894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:24:54.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:24:54.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:24:54.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:24:54.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:24:54.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:24:54.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:24:54.309 [DEBUG] [Thread-80894] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:25:05.544 [DEBUG] [Thread-80896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:20.588 [DEBUG] [Thread-80897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:24.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:25:24.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:25:24.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:25:25.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 25, 1), 1.75, 88.84, 0.0, 35.75, 6.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:25:25.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:25:01
2025-12-13T02:25:25.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:25:25.286 [DEBUG] [Thread-80898] [transport.py] [_log()] starting thread (client mode): 0xf572cb20
2025-12-13T02:25:25.286 [DEBUG] [Thread-80898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:25:25.307 [DEBUG] [Thread-80898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:25:25.307 [INFO] [Thread-80898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:25.311 [DEBUG] [Thread-80898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] client lang: <none>
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] server lang: <none>
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] kex follows: False
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:25:25.312 [DEBUG] [Thread-80898] [transport.py] [_log()] Compression: none
2025-12-13T02:25:25.313 [DEBUG] [Thread-80898] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:25:25.331 [DEBUG] [Thread-80898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:25:25.331 [DEBUG] [Thread-80898] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:25:25.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:25:25.332 [DEBUG] [Thread-80898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:25:25.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:25:25.335 [DEBUG] [Thread-80898] [transport.py] [_log()] userauth is OK
2025-12-13T02:25:25.335 [DEBUG] [Thread-80898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:25:25.335 [DEBUG] [Thread-80898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:25:25.335 [DEBUG] [Thread-80898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:25:25.335 [DEBUG] [Thread-80898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:25:25.359 [INFO] [Thread-80898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:25:25.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:25:26.000 [DEBUG] [Thread-80898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:25:26.000 [DEBUG] [Thread-80898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:25:26.000 [DEBUG] [Thread-80898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:25:26.041 [DEBUG] [Thread-80898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:25:26.042 [DEBUG] [Thread-80898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:25:26.044 [DEBUG] [Thread-80898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:25:26.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:25:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:25:26.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:25:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:25:26.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:25:26.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:25:26.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:25:26.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:25:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:25:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.017109 -999.00   +6.50  39.00     91   +5.10 1 2 2 3 1     0    0 -999.00 0.00 ZNEsw 40.6 39.0 308.4 49.2 7.7 -15.5 7.4 -14.6 7.2 -13.9 7.5 -15.6
2025-12-13T02:25:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:25:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:25:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.017109
2025-12-13T02:25:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:25:26.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:25:26.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:25:26.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:25:26.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:25:26.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:25:01', tmtdew=1.75, humidity=88.84, cloud=0.0, wind=35.75, temperature=6.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:24:38.218', atlas_cloud=2, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:22:00')
2025-12-13T02:25:26.070 [DEBUG] [Thread-80898] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:25:26.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:25:26.166 [DEBUG] [Thread-80901] [transport.py] [_log()] starting thread (client mode): 0xf570e620
2025-12-13T02:25:26.166 [DEBUG] [Thread-80901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:25:26.180 [DEBUG] [Thread-80901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:25:26.180 [INFO] [Thread-80901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:26.188 [DEBUG] [Thread-80901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] client lang: <none>
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] server lang: <none>
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] kex follows: False
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] Compression: none
2025-12-13T02:25:26.189 [DEBUG] [Thread-80901] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:25:26.247 [DEBUG] [Thread-80901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:25:26.248 [DEBUG] [Thread-80901] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:25:26.248 [DEBUG] [Thread-80901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:25:26.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:25:26.249 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:26.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:25:26.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:26.304 [DEBUG] [Thread-80901] [transport.py] [_log()] userauth is OK
2025-12-13T02:25:26.305 [DEBUG] [Thread-80901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:25:26.305 [DEBUG] [Thread-80901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:25:26.305 [DEBUG] [Thread-80901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:25:26.305 [DEBUG] [Thread-80901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:25:26.324 [INFO] [Thread-80901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:25:26.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:25:26.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:25:27.160 [DEBUG] [Thread-80901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:25:27.160 [DEBUG] [Thread-80901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:25:27.208 [DEBUG] [Thread-80901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:25:27.209 [DEBUG] [Thread-80901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:25:27.217 [DEBUG] [Thread-80901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:25:27.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:25:27.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:25:27.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:25:27.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:25:27.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:25:27.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:25:27.252 [DEBUG] [Thread-80901] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:25:34.210 [DEBUG] [Thread-80903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:35.618 [DEBUG] [Thread-80904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:50.662 [DEBUG] [Thread-80905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:25:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:25:57.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:25:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:25:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 25, 33), 1.75, 88.8, 0.0, 33.73, 6.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:25:57.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:25:33
2025-12-13T02:25:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:25:58.219 [DEBUG] [Thread-80906] [transport.py] [_log()] starting thread (client mode): 0xf8189030
2025-12-13T02:25:58.219 [DEBUG] [Thread-80906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:25:58.239 [DEBUG] [Thread-80906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:25:58.239 [INFO] [Thread-80906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:25:58.242 [DEBUG] [Thread-80906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:25:58.242 [DEBUG] [Thread-80906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:25:58.242 [DEBUG] [Thread-80906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:25:58.242 [DEBUG] [Thread-80906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] client lang: <none>
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] server lang: <none>
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] kex follows: False
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] Compression: none
2025-12-13T02:25:58.243 [DEBUG] [Thread-80906] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:25:58.261 [DEBUG] [Thread-80906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:25:58.261 [DEBUG] [Thread-80906] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:25:58.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:25:58.262 [DEBUG] [Thread-80906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:25:58.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:25:58.264 [DEBUG] [Thread-80906] [transport.py] [_log()] userauth is OK
2025-12-13T02:25:58.264 [DEBUG] [Thread-80906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:25:58.264 [DEBUG] [Thread-80906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:25:58.264 [DEBUG] [Thread-80906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:25:58.265 [DEBUG] [Thread-80906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:25:58.287 [INFO] [Thread-80906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:25:58.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:25:58.885 [DEBUG] [Thread-80906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:25:58.886 [DEBUG] [Thread-80906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:25:58.886 [DEBUG] [Thread-80906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:25:58.927 [DEBUG] [Thread-80906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:25:58.927 [DEBUG] [Thread-80906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:25:58.930 [DEBUG] [Thread-80906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:25:58.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:25:58.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:25:58.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:25:58.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:25:58.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:25:58.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:25:58.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:25:58.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:25:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:25:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.017456 -999.00   +6.50  43.30     91   +5.10 1 2 2 3 1     0    0 -999.00 0.00 ZNEsw 42.0 43.3 298.6 48.4 7.7 -17.2 7.4 -16.0 7.2 -14.3 7.5 -15.8
2025-12-13T02:25:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:25:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:25:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.017456
2025-12-13T02:25:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:25:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:25:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:25:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:25:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:25:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:25:33', tmtdew=1.75, humidity=88.8, cloud=0.0, wind=33.73, temperature=6.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:25:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:22:00')
2025-12-13T02:25:58.956 [DEBUG] [Thread-80906] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:25:59.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:25:59.053 [DEBUG] [Thread-80909] [transport.py] [_log()] starting thread (client mode): 0xf5740af0
2025-12-13T02:25:59.053 [DEBUG] [Thread-80909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:25:59.068 [DEBUG] [Thread-80909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:25:59.068 [INFO] [Thread-80909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:25:59.075 [DEBUG] [Thread-80909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:25:59.075 [DEBUG] [Thread-80909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] client lang: <none>
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] server lang: <none>
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] kex follows: False
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] Compression: none
2025-12-13T02:25:59.076 [DEBUG] [Thread-80909] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:25:59.135 [DEBUG] [Thread-80909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:25:59.135 [DEBUG] [Thread-80909] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:25:59.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:25:59.136 [DEBUG] [Thread-80909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:25:59.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:25:59.192 [DEBUG] [Thread-80909] [transport.py] [_log()] userauth is OK
2025-12-13T02:25:59.192 [DEBUG] [Thread-80909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:25:59.192 [DEBUG] [Thread-80909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:25:59.192 [DEBUG] [Thread-80909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:25:59.192 [DEBUG] [Thread-80909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:25:59.211 [INFO] [Thread-80909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:25:59.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:25:59.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:26:00.002 [DEBUG] [Thread-80909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:26:00.003 [DEBUG] [Thread-80909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:26:00.050 [DEBUG] [Thread-80909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:26:00.051 [DEBUG] [Thread-80909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:26:00.059 [DEBUG] [Thread-80909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:26:00.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:26:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:26:00.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:26:00.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:26:00.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:26:00.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:26:00.093 [DEBUG] [Thread-80909] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:26:05.692 [DEBUG] [Thread-80911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:26:20.733 [DEBUG] [Thread-80912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:26:26.457 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:26:26.458 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:26:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:26:30.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:26:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:26:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 26, 5), 1.75, 88.84, 0.0, 35.59, 6.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:26:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:26:05
2025-12-13T02:26:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:26:31.070 [DEBUG] [Thread-80913] [transport.py] [_log()] starting thread (client mode): 0xf5741600
2025-12-13T02:26:31.071 [DEBUG] [Thread-80913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:26:31.091 [DEBUG] [Thread-80913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:26:31.091 [INFO] [Thread-80913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] client lang: <none>
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] server lang: <none>
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] kex follows: False
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] Compression: none
2025-12-13T02:26:31.094 [DEBUG] [Thread-80913] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:26:31.102 [DEBUG] [Thread-80913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:26:31.103 [DEBUG] [Thread-80913] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:26:31.103 [DEBUG] [Thread-80913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:26:31.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:26:31.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:26:31.105 [DEBUG] [Thread-80913] [transport.py] [_log()] userauth is OK
2025-12-13T02:26:31.105 [DEBUG] [Thread-80913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:26:31.105 [DEBUG] [Thread-80913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:26:31.105 [DEBUG] [Thread-80913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:26:31.105 [DEBUG] [Thread-80913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:26:31.121 [INFO] [Thread-80913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:26:31.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:26:31.710 [DEBUG] [Thread-80913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:26:31.710 [DEBUG] [Thread-80913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:26:31.711 [DEBUG] [Thread-80913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:26:31.751 [DEBUG] [Thread-80913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:26:31.751 [DEBUG] [Thread-80913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:26:31.754 [DEBUG] [Thread-80913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:26:31.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:26:31.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:26:31.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:26:31.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:26:31.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:26:31.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:26:31.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:26:31.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:26:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:26:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.017803 -999.00   +6.50  34.65     91   +5.20 1 2 2 3 1     0    0 -999.00 0.00 .NESW 34.6 34.6 295.8 40.4 7.7 -16.9 7.5 -15.1 7.1 -12.9 7.5 -14.1
2025-12-13T02:26:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:26:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:26:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.017803
2025-12-13T02:26:31.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:26:31.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:26:31.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:26:31.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:26:31.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:26:31.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:26:05', tmtdew=1.75, humidity=88.84, cloud=0.0, wind=35.59, temperature=6.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:25:38.179', atlas_cloud=2, atlas_rain=1, zp_data=[1.4107499999999993, 1.6482500000000009, 1.7942500000000008, nan, nan, nan, 2.0554999999999994, 0.8262500000000008, 0.9124999999999996, 1.277000000000001, 2.09075, nan, nan, 0.6772499999999999, 1.9304999999999994, 0.6499999999999995, 0.4352499999999999, 1.1304999999999996, 0.9269999999999996, nan, nan, 1.957749999999999, 1.1537500000000005, 0.3802500000000002, 0.37899999999999956, 0.8610000000000015, 1.14975, 0.7520000000000016, nan, 1.3800000000000008, 0.5850000000000009, 0.19350000000000023, 0.286249999999999], zp_timestamp='2025-12-13T00:22:00')
2025-12-13T02:26:31.780 [DEBUG] [Thread-80913] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:26:31.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:26:31.875 [DEBUG] [Thread-80916] [transport.py] [_log()] starting thread (client mode): 0xf813d720
2025-12-13T02:26:31.876 [DEBUG] [Thread-80916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:26:31.890 [DEBUG] [Thread-80916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:26:31.890 [INFO] [Thread-80916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] client lang: <none>
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] server lang: <none>
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] kex follows: False
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:26:31.898 [DEBUG] [Thread-80916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:26:31.899 [DEBUG] [Thread-80916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:26:31.899 [DEBUG] [Thread-80916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:26:31.899 [DEBUG] [Thread-80916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:26:31.899 [DEBUG] [Thread-80916] [transport.py] [_log()] Compression: none
2025-12-13T02:26:31.899 [DEBUG] [Thread-80916] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:26:31.956 [DEBUG] [Thread-80916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:26:31.956 [DEBUG] [Thread-80916] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:26:31.957 [DEBUG] [Thread-80916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:26:31.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:26:31.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:26:32.012 [DEBUG] [Thread-80916] [transport.py] [_log()] userauth is OK
2025-12-13T02:26:32.012 [DEBUG] [Thread-80916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:26:32.012 [DEBUG] [Thread-80916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:26:32.012 [DEBUG] [Thread-80916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:26:32.013 [DEBUG] [Thread-80916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:26:32.031 [INFO] [Thread-80916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:26:32.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:26:32.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:26:32.850 [DEBUG] [Thread-80916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:26:32.851 [DEBUG] [Thread-80916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:26:32.899 [DEBUG] [Thread-80916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:26:32.900 [DEBUG] [Thread-80916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:26:32.908 [DEBUG] [Thread-80916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:26:32.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:26:32.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:26:32.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
2025-12-13T02:26:32.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:26:32.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:26:32.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:26:32.942 [DEBUG] [Thread-80916] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:26:34.291 [DEBUG] [Thread-80918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:26:35.766 [DEBUG] [Thread-80919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:26:50.808 [DEBUG] [Thread-80920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:27:02.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:27:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:27:03.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 26, 37), 1.76, 88.79, 0.0, 39.54, 6.64, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:27:03.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:26:37
2025-12-13T02:27:03.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:27:03.937 [DEBUG] [Thread-80921] [transport.py] [_log()] starting thread (client mode): 0xf81e4e50
2025-12-13T02:27:03.937 [DEBUG] [Thread-80921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:27:03.958 [DEBUG] [Thread-80921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:27:03.958 [INFO] [Thread-80921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:27:03.962 [DEBUG] [Thread-80921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:27:03.962 [DEBUG] [Thread-80921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:27:03.962 [DEBUG] [Thread-80921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:27:03.962 [DEBUG] [Thread-80921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:03.962 [DEBUG] [Thread-80921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] client lang: <none>
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] server lang: <none>
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] kex follows: False
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] Compression: none
2025-12-13T02:27:03.963 [DEBUG] [Thread-80921] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:27:03.979 [DEBUG] [Thread-80921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:27:03.980 [DEBUG] [Thread-80921] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:27:03.981 [DEBUG] [Thread-80921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:27:03.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:27:03.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:27:03.982 [DEBUG] [Thread-80921] [transport.py] [_log()] userauth is OK
2025-12-13T02:27:03.983 [DEBUG] [Thread-80921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:27:03.983 [DEBUG] [Thread-80921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:27:03.983 [DEBUG] [Thread-80921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:27:03.983 [DEBUG] [Thread-80921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:27:04.019 [INFO] [Thread-80921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:27:04.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:27:04.660 [DEBUG] [Thread-80921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:27:04.660 [DEBUG] [Thread-80921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:27:04.660 [DEBUG] [Thread-80921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:27:04.701 [DEBUG] [Thread-80921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:27:04.701 [DEBUG] [Thread-80921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:27:04.704 [DEBUG] [Thread-80921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:27:04.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:27:04.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:27:04.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:27:04.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:27:04.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:27:04.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:27:04.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:27:04.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:27:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:27:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.018150 -999.00   +6.60  32.54     91   +5.20 1 2 2 3 1     0    0 -999.00 0.00 .NESW 32.5 32.5 294.2 40.0 7.7 -16.4 7.5 -14.0 7.2 -11.1 7.5 -10.9
2025-12-13T02:27:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:27:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:27:04.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.018150
2025-12-13T02:27:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:27:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:27:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:27:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:27:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:27:04.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:26:37', tmtdew=1.76, humidity=88.79, cloud=0.0, wind=39.54, temperature=6.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:26:08.160', atlas_cloud=2, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:25:00')
2025-12-13T02:27:04.729 [DEBUG] [Thread-80921] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:27:04.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:27:04.827 [DEBUG] [Thread-80924] [transport.py] [_log()] starting thread (client mode): 0xf813f820
2025-12-13T02:27:04.827 [DEBUG] [Thread-80924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:27:04.842 [DEBUG] [Thread-80924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:27:04.842 [INFO] [Thread-80924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:27:04.850 [DEBUG] [Thread-80924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:27:04.850 [DEBUG] [Thread-80924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:27:04.850 [DEBUG] [Thread-80924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:27:04.850 [DEBUG] [Thread-80924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:04.850 [DEBUG] [Thread-80924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] client lang: <none>
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] server lang: <none>
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] kex follows: False
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:27:04.851 [DEBUG] [Thread-80924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:27:04.852 [DEBUG] [Thread-80924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:27:04.852 [DEBUG] [Thread-80924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:27:04.852 [DEBUG] [Thread-80924] [transport.py] [_log()] Compression: none
2025-12-13T02:27:04.852 [DEBUG] [Thread-80924] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:27:04.908 [DEBUG] [Thread-80924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:27:04.909 [DEBUG] [Thread-80924] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:27:04.910 [DEBUG] [Thread-80924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:27:04.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:27:04.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:27:04.964 [DEBUG] [Thread-80924] [transport.py] [_log()] userauth is OK
2025-12-13T02:27:04.964 [DEBUG] [Thread-80924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:27:04.964 [DEBUG] [Thread-80924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:27:04.965 [DEBUG] [Thread-80924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:27:04.965 [DEBUG] [Thread-80924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:27:04.985 [INFO] [Thread-80924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:27:04.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:27:04.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:27:05.835 [DEBUG] [Thread-80926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:05.842 [DEBUG] [Thread-80924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:27:05.842 [DEBUG] [Thread-80924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:27:05.890 [DEBUG] [Thread-80924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:27:05.890 [DEBUG] [Thread-80924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:27:05.899 [DEBUG] [Thread-80924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:27:05.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:27:05.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:27: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') -> 00000000
2025-12-13T02:27:05.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:27:05.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:27:05.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:27:05.934 [DEBUG] [Thread-80924] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:27:20.879 [DEBUG] [Thread-80927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:26.664 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:26.665 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:34.360 [DEBUG] [Thread-80928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:35.911 [DEBUG] [Thread-80929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:27:35.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:27:35.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:27:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:27:36.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 27, 9), 1.75, 88.84, 0.0, 37.16, 6.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:27:36.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:27:09
2025-12-13T02:27:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:27:36.928 [DEBUG] [Thread-80930] [transport.py] [_log()] starting thread (client mode): 0xf57409d0
2025-12-13T02:27:36.928 [DEBUG] [Thread-80930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:27:36.948 [DEBUG] [Thread-80930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:27:36.949 [INFO] [Thread-80930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] client lang: <none>
2025-12-13T02:27:36.952 [DEBUG] [Thread-80930] [transport.py] [_log()] server lang: <none>
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] kex follows: False
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] Compression: none
2025-12-13T02:27:36.953 [DEBUG] [Thread-80930] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:27:36.972 [DEBUG] [Thread-80930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:27:36.972 [DEBUG] [Thread-80930] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:27:36.973 [DEBUG] [Thread-80930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:27:36.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:27:36.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:27:36.975 [DEBUG] [Thread-80930] [transport.py] [_log()] userauth is OK
2025-12-13T02:27:36.976 [DEBUG] [Thread-80930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:27:36.976 [DEBUG] [Thread-80930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:27:36.976 [DEBUG] [Thread-80930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:27:36.976 [DEBUG] [Thread-80930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:27:36.999 [INFO] [Thread-80930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:27:37.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:27:37.622 [DEBUG] [Thread-80930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:27:37.622 [DEBUG] [Thread-80930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:27:37.623 [DEBUG] [Thread-80930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:27:37.663 [DEBUG] [Thread-80930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:27:37.663 [DEBUG] [Thread-80930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:27:37.666 [DEBUG] [Thread-80930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:27:37.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:27:37.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:27:37.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:27:37.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:27:37.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:27:37.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:27:37.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:27:37.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:27:37.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:27:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.018845 -999.00   +6.60  35.01     91   +5.20 1 3 2 3 1     0    0 -999.00 0.00 ZNEsW 35.0 35.0 293.6 45.8 7.7 -9.1 7.5 -8.0 7.2 -6.8 7.5 -8.2
2025-12-13T02:27:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:27:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:27:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.018845
2025-12-13T02:27:37.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:27:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:27:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:27:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:27:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:27:37.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:27:09', tmtdew=1.75, humidity=88.84, cloud=0.0, wind=37.16, temperature=6.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:27:08.208', atlas_cloud=3, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:25:00')
2025-12-13T02:27:37.691 [DEBUG] [Thread-80930] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:27:37.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:27:37.790 [DEBUG] [Thread-80933] [transport.py] [_log()] starting thread (client mode): 0xf57425f0
2025-12-13T02:27:37.790 [DEBUG] [Thread-80933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:27:37.804 [DEBUG] [Thread-80933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:27:37.804 [INFO] [Thread-80933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] client lang: <none>
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] server lang: <none>
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] kex follows: False
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:27:37.812 [DEBUG] [Thread-80933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:27:37.813 [DEBUG] [Thread-80933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:27:37.813 [DEBUG] [Thread-80933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:27:37.813 [DEBUG] [Thread-80933] [transport.py] [_log()] Compression: none
2025-12-13T02:27:37.813 [DEBUG] [Thread-80933] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:27:37.871 [DEBUG] [Thread-80933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:27:37.872 [DEBUG] [Thread-80933] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:27:37.872 [DEBUG] [Thread-80933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:27:37.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:27:37.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:27:37.928 [DEBUG] [Thread-80933] [transport.py] [_log()] userauth is OK
2025-12-13T02:27:37.928 [DEBUG] [Thread-80933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:27:37.928 [DEBUG] [Thread-80933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:27:37.929 [DEBUG] [Thread-80933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:27:37.929 [DEBUG] [Thread-80933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:27:37.947 [INFO] [Thread-80933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:27:37.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:27:37.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:27:38.748 [DEBUG] [Thread-80933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:27:38.748 [DEBUG] [Thread-80933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:27:38.796 [DEBUG] [Thread-80933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:27:38.796 [DEBUG] [Thread-80933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:27:38.805 [DEBUG] [Thread-80933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:27:38.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:27:38.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:27:38.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:27:38.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:27:38.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:27:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:27:38.840 [DEBUG] [Thread-80933] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:27:50.940 [DEBUG] [Thread-80935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:05.989 [DEBUG] [Thread-80936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:28:08.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:28:08.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:28:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 27, 41), 1.75, 88.84, 0.0, 30.19, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:28:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:27:41
2025-12-13T02:28:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:28:09.877 [DEBUG] [Thread-80937] [transport.py] [_log()] starting thread (client mode): 0xfabc6c50
2025-12-13T02:28:09.877 [DEBUG] [Thread-80937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:28:09.898 [DEBUG] [Thread-80937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:28:09.898 [INFO] [Thread-80937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] client lang: <none>
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] server lang: <none>
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] kex follows: False
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:28:09.901 [DEBUG] [Thread-80937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:28:09.902 [DEBUG] [Thread-80937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:28:09.902 [DEBUG] [Thread-80937] [transport.py] [_log()] Compression: none
2025-12-13T02:28:09.902 [DEBUG] [Thread-80937] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:28:09.916 [DEBUG] [Thread-80937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:28:09.916 [DEBUG] [Thread-80937] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:28:09.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:28:09.917 [DEBUG] [Thread-80937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:28:09.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:28:09.917 [DEBUG] [Thread-80937] [transport.py] [_log()] userauth is OK
2025-12-13T02:28:09.917 [DEBUG] [Thread-80937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:28:09.917 [DEBUG] [Thread-80937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:28:09.917 [DEBUG] [Thread-80937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:28:09.917 [DEBUG] [Thread-80937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:28:09.932 [INFO] [Thread-80937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:28:09.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:28:10.552 [DEBUG] [Thread-80937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:28:10.552 [DEBUG] [Thread-80937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:28:10.552 [DEBUG] [Thread-80937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:28:10.592 [DEBUG] [Thread-80937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:28:10.592 [DEBUG] [Thread-80937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:28:10.595 [DEBUG] [Thread-80937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:28:10.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:28:10.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:28:10.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:28:10.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:28:10.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:28:10.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:28:10.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.019192 -999.00   +6.60  32.00     91   +5.20 1 3 2 3 1     0    0 -999.00 0.00 ZNESw 32.0 32.0 307.2 46.9 7.7 -8.8 7.5 -6.1 7.3 -5.1 7.6 -6.9
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.019192
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:28:10.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:28:10.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:28:10.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:27:41', tmtdew=1.75, humidity=88.84, cloud=0.0, wind=30.19, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:27:38.189', atlas_cloud=3, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:25:00')
2025-12-13T02:28:10.614 [DEBUG] [Thread-80937] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:28:10.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:28:10.699 [DEBUG] [Thread-80940] [transport.py] [_log()] starting thread (client mode): 0xfabc7130
2025-12-13T02:28:10.700 [DEBUG] [Thread-80940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:28:10.718 [DEBUG] [Thread-80940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:28:10.718 [INFO] [Thread-80940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] client lang: <none>
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] server lang: <none>
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] kex follows: False
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:28:10.725 [DEBUG] [Thread-80940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:28:10.726 [DEBUG] [Thread-80940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:28:10.726 [DEBUG] [Thread-80940] [transport.py] [_log()] Compression: none
2025-12-13T02:28:10.726 [DEBUG] [Thread-80940] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:28:10.782 [DEBUG] [Thread-80940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:28:10.782 [DEBUG] [Thread-80940] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:28:10.783 [DEBUG] [Thread-80940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:28:10.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:28:10.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:28:10.840 [DEBUG] [Thread-80940] [transport.py] [_log()] userauth is OK
2025-12-13T02:28:10.840 [DEBUG] [Thread-80940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:28:10.840 [DEBUG] [Thread-80940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:28:10.840 [DEBUG] [Thread-80940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:28:10.840 [DEBUG] [Thread-80940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:28:10.853 [INFO] [Thread-80940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:28:10.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:28:10.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:28:11.677 [DEBUG] [Thread-80940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:28:11.677 [DEBUG] [Thread-80940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:28:11.725 [DEBUG] [Thread-80940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:28:11.725 [DEBUG] [Thread-80940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:28:11.734 [DEBUG] [Thread-80940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:28:11.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:28:11.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:28:11.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:28:11.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:28:11.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:28:11.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:28:11.765 [DEBUG] [Thread-80940] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:28:21.020 [DEBUG] [Thread-80942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:26.870 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:26.871 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:34.457 [DEBUG] [Thread-80943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:36.066 [DEBUG] [Thread-80944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:28:41.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:28:41.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:28:41.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:28:42.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 28, 13), 1.76, 88.77, 0.0, 31.74, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:28:42.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:28:13
2025-12-13T02:28:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:28:42.737 [DEBUG] [Thread-80945] [transport.py] [_log()] starting thread (client mode): 0xf813cbb0
2025-12-13T02:28:42.737 [DEBUG] [Thread-80945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:28:42.758 [DEBUG] [Thread-80945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:28:42.758 [INFO] [Thread-80945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:28:42.761 [DEBUG] [Thread-80945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] client lang: <none>
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] server lang: <none>
2025-12-13T02:28:42.762 [DEBUG] [Thread-80945] [transport.py] [_log()] kex follows: False
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] Compression: none
2025-12-13T02:28:42.763 [DEBUG] [Thread-80945] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:28:42.781 [DEBUG] [Thread-80945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:28:42.782 [DEBUG] [Thread-80945] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:28:42.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:28:42.783 [DEBUG] [Thread-80945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:28:42.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:28:42.784 [DEBUG] [Thread-80945] [transport.py] [_log()] userauth is OK
2025-12-13T02:28:42.785 [DEBUG] [Thread-80945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:28:42.785 [DEBUG] [Thread-80945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:28:42.785 [DEBUG] [Thread-80945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:28:42.785 [DEBUG] [Thread-80945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:28:42.800 [INFO] [Thread-80945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:28:42.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:28:43.416 [DEBUG] [Thread-80945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:28:43.416 [DEBUG] [Thread-80945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:28:43.417 [DEBUG] [Thread-80945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:28:43.457 [DEBUG] [Thread-80945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:28:43.457 [DEBUG] [Thread-80945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:28:43.460 [DEBUG] [Thread-80945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:28:43.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:28:43.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:28:43.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:28:43.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:28:43.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:28:43.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:28:43.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:28:43.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:28:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:28:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.019539 -999.00   +6.60  39.16     91   +5.20 1 3 2 3 1     0    0 -999.00 0.00 ZNE.W 39.2 39.2 302.2 47.3 7.8 -7.1 7.6 -5.0 7.3 -4.2 7.7 -5.5
2025-12-13T02:28:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:28:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:28:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.019539
2025-12-13T02:28:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:28:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:28:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:28:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:28:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:28:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:28:13', tmtdew=1.76, humidity=88.77, cloud=0.0, wind=31.74, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:28:08.170', atlas_cloud=3, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:25:00')
2025-12-13T02:28:43.485 [DEBUG] [Thread-80945] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:28:43.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:28:43.592 [DEBUG] [Thread-80948] [transport.py] [_log()] starting thread (client mode): 0xf570d840
2025-12-13T02:28:43.592 [DEBUG] [Thread-80948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:28:43.608 [DEBUG] [Thread-80948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:28:43.608 [INFO] [Thread-80948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] client lang: <none>
2025-12-13T02:28:43.616 [DEBUG] [Thread-80948] [transport.py] [_log()] server lang: <none>
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] kex follows: False
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] Compression: none
2025-12-13T02:28:43.617 [DEBUG] [Thread-80948] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:28:43.671 [DEBUG] [Thread-80948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:28:43.672 [DEBUG] [Thread-80948] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:28:43.672 [DEBUG] [Thread-80948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:28:43.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:28:43.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:28:43.728 [DEBUG] [Thread-80948] [transport.py] [_log()] userauth is OK
2025-12-13T02:28:43.728 [DEBUG] [Thread-80948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:28:43.728 [DEBUG] [Thread-80948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:28:43.728 [DEBUG] [Thread-80948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:28:43.728 [DEBUG] [Thread-80948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:28:43.747 [INFO] [Thread-80948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:28:43.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:28:43.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:28:44.583 [DEBUG] [Thread-80948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:28:44.583 [DEBUG] [Thread-80948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:28:44.631 [DEBUG] [Thread-80948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:28:44.631 [DEBUG] [Thread-80948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:28:44.640 [DEBUG] [Thread-80948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:28:44.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:28:44.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:28:44.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:28:44.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:28:44.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:28:44.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:28:44.676 [DEBUG] [Thread-80948] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:28:51.093 [DEBUG] [Thread-80950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:06.130 [DEBUG] [Thread-80951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:29:14.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:29:14.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:29:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 28, 45), 1.75, 88.84, 0.0, 33.61, 6.73, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:29:15.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:28:45
2025-12-13T02:29:15.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:29:15.644 [DEBUG] [Thread-80952] [transport.py] [_log()] starting thread (client mode): 0xf813dd50
2025-12-13T02:29:15.644 [DEBUG] [Thread-80952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:29:15.673 [DEBUG] [Thread-80952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:29:15.673 [INFO] [Thread-80952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:29:15.676 [DEBUG] [Thread-80952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:29:15.676 [DEBUG] [Thread-80952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] client lang: <none>
2025-12-13T02:29:15.677 [DEBUG] [Thread-80952] [transport.py] [_log()] server lang: <none>
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] kex follows: False
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] Compression: none
2025-12-13T02:29:15.678 [DEBUG] [Thread-80952] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:29:15.697 [DEBUG] [Thread-80952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:29:15.697 [DEBUG] [Thread-80952] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:29:15.698 [DEBUG] [Thread-80952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:29:15.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:29:15.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:29:15.699 [DEBUG] [Thread-80952] [transport.py] [_log()] userauth is OK
2025-12-13T02:29:15.700 [DEBUG] [Thread-80952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:29:15.700 [DEBUG] [Thread-80952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:29:15.700 [DEBUG] [Thread-80952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:29:15.700 [DEBUG] [Thread-80952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:29:15.717 [INFO] [Thread-80952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:29:15.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:29:16.387 [DEBUG] [Thread-80952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:29:16.387 [DEBUG] [Thread-80952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:29:16.387 [DEBUG] [Thread-80952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:29:16.428 [DEBUG] [Thread-80952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:29:16.428 [DEBUG] [Thread-80952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:29:16.431 [DEBUG] [Thread-80952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:29:16.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:29:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:29:16.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:29:16.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:29:16.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:29:16.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:29:16.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:29:16.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:29:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:29:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.019886 -999.00   +6.60  26.88     91   +5.20 1 3 1 3 1     0    0 -999.00 0.00 ZNE.W 26.9 26.9 299.2 45.6 7.7 -5.7 7.6 -4.0 7.3 -3.8 7.7 -4.5
2025-12-13T02:29:16.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:29:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:29:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.019886
2025-12-13T02:29:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:29:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:29:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:29:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:29:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:29:16.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:28:45', tmtdew=1.75, humidity=88.84, cloud=0.0, wind=33.61, temperature=6.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:28:38.150', atlas_cloud=3, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:25:00')
2025-12-13T02:29:16.457 [DEBUG] [Thread-80952] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:29:16.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:29:21.158 [DEBUG] [Thread-80955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:27.071 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:27.072 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:34.536 [DEBUG] [Thread-80956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:36.205 [DEBUG] [Thread-80957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:29:51.236 [DEBUG] [Thread-80958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:06.263 [DEBUG] [Thread-80959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:21.288 [DEBUG] [Thread-80960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:27.275 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:27.276 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:34.620 [DEBUG] [Thread-80961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:36.321 [DEBUG] [Thread-80962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:30:51.357 [DEBUG] [Thread-80963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:06.391 [DEBUG] [Thread-80964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:21.419 [DEBUG] [Thread-80965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:27.475 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:27.476 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:31.050 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-13T02:31:34.695 [DEBUG] [Thread-80966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:36.444 [DEBUG] [Thread-80967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:31:51.474 [DEBUG] [Thread-80968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:32:01.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:32:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:32:01.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 31, 57), 1.76, 88.79, 0.0, 37.28, 6.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:32:01.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:31:57
2025-12-13T02:32:01.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:32:02.057 [DEBUG] [Thread-80969] [transport.py] [_log()] starting thread (client mode): 0xf813f7c0
2025-12-13T02:32:02.057 [DEBUG] [Thread-80969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:32:02.079 [DEBUG] [Thread-80969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:32:02.079 [INFO] [Thread-80969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] client lang: <none>
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] server lang: <none>
2025-12-13T02:32:02.082 [DEBUG] [Thread-80969] [transport.py] [_log()] kex follows: False
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] Compression: none
2025-12-13T02:32:02.083 [DEBUG] [Thread-80969] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:32:02.098 [DEBUG] [Thread-80969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:32:02.098 [DEBUG] [Thread-80969] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:32:02.098 [DEBUG] [Thread-80969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:32:02.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:32:02.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:32:02.099 [DEBUG] [Thread-80969] [transport.py] [_log()] userauth is OK
2025-12-13T02:32:02.099 [DEBUG] [Thread-80969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:32:02.099 [DEBUG] [Thread-80969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:32:02.099 [DEBUG] [Thread-80969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:32:02.099 [DEBUG] [Thread-80969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:32:02.116 [INFO] [Thread-80969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:32:02.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:32:02.727 [DEBUG] [Thread-80969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:32:02.728 [DEBUG] [Thread-80969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:32:02.728 [DEBUG] [Thread-80969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:32:02.768 [DEBUG] [Thread-80969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:32:02.768 [DEBUG] [Thread-80969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:32:02.771 [DEBUG] [Thread-80969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:32:02.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:32:02.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:32:02.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:32:02.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:32:02.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:32:02.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:32:02.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.021970 -999.00   +6.50  40.62     91   +5.20 1 3 2 3 1     0    0 1.31 0.07 Z..SW 40.6 40.6 300.2 44.7 7.8 -9.9 7.5 -11.1 7.2 -8.7 7.7 -6.4
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.021970
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:32:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:31:57', tmtdew=1.76, humidity=88.79, cloud=0.0, wind=37.28, temperature=6.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:31:38.208', atlas_cloud=3, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:29:00')
2025-12-13T02:32:02.787 [DEBUG] [Thread-80969] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:32:02.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:32:02.874 [DEBUG] [Thread-80972] [transport.py] [_log()] starting thread (client mode): 0xf5741600
2025-12-13T02:32:02.874 [DEBUG] [Thread-80972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:32:02.888 [DEBUG] [Thread-80972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:32:02.888 [INFO] [Thread-80972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] client lang: <none>
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] server lang: <none>
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] kex follows: False
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] Compression: none
2025-12-13T02:32:02.896 [DEBUG] [Thread-80972] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:32:02.951 [DEBUG] [Thread-80972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:32:02.951 [DEBUG] [Thread-80972] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:32:02.951 [DEBUG] [Thread-80972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:32:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:32:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:32:03.008 [DEBUG] [Thread-80972] [transport.py] [_log()] userauth is OK
2025-12-13T02:32:03.008 [DEBUG] [Thread-80972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:32:03.008 [DEBUG] [Thread-80972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:32:03.008 [DEBUG] [Thread-80972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:32:03.008 [DEBUG] [Thread-80972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:32:03.021 [INFO] [Thread-80972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:32:03.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:32:03.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:32:03.858 [DEBUG] [Thread-80972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:32:03.858 [DEBUG] [Thread-80972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:32:03.906 [DEBUG] [Thread-80972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:32:03.907 [DEBUG] [Thread-80972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:32:03.915 [DEBUG] [Thread-80972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:32:03.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:32:03.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:32:03.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:32:03.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:32:03.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:32:03.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:32:03.947 [DEBUG] [Thread-80972] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:32:06.501 [DEBUG] [Thread-80974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:21.549 [DEBUG] [Thread-80975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:27.685 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:27.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:32:33.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:32:33.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:32:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 32, 29), 1.75, 88.85, 0.0, 33.33, 6.69, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:32:34.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:32:29
2025-12-13T02:32:34.766 [DEBUG] [Thread-80976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:34.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:32:34.937 [DEBUG] [Thread-80977] [transport.py] [_log()] starting thread (client mode): 0xf570cbb0
2025-12-13T02:32:34.938 [DEBUG] [Thread-80977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:32:34.958 [DEBUG] [Thread-80977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:32:34.958 [INFO] [Thread-80977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] client lang: <none>
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] server lang: <none>
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] kex follows: False
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] Compression: none
2025-12-13T02:32:34.962 [DEBUG] [Thread-80977] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:32:34.979 [DEBUG] [Thread-80977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:32:34.979 [DEBUG] [Thread-80977] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:32:34.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:32:34.980 [DEBUG] [Thread-80977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:32:34.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:32:34.982 [DEBUG] [Thread-80977] [transport.py] [_log()] userauth is OK
2025-12-13T02:32:34.982 [DEBUG] [Thread-80977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:32:34.982 [DEBUG] [Thread-80977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:32:34.982 [DEBUG] [Thread-80977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:32:34.982 [DEBUG] [Thread-80977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:32:35.006 [INFO] [Thread-80977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:32:35.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:32:35.635 [DEBUG] [Thread-80977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:32:35.636 [DEBUG] [Thread-80977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:32:35.636 [DEBUG] [Thread-80977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:32:35.677 [DEBUG] [Thread-80977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:32:35.677 [DEBUG] [Thread-80977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:32:35.679 [DEBUG] [Thread-80977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:32:35.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:32:35.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:32:35.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:32:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:32:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:32:35.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:32:35.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.022317 -999.00   +6.50  34.89     91   +5.20 1 3 2 3 1     0    0 1.34 -0.12 Z..SW 34.9 34.9 297.7 41.3 7.8 -8.9 7.6 -10.1 7.2 -7.6 7.7 -5.8
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.022317
2025-12-13T02:32:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:32:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:32:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:32:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:32:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:32:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:32:29', tmtdew=1.75, humidity=88.85, cloud=0.0, wind=33.33, temperature=6.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:32:08.189', atlas_cloud=3, atlas_rain=1, zp_data=[0.5812499999999998, 0.21025000000000027, 0.5242500000000003, 1.1419999999999995, nan, nan, 1.0349999999999993, 0.39025, 0.34450000000000003, 0.22499999999999964, 0.5912499999999996, nan, nan, 0.99125, 0.40149999999999864, 0.2909999999999986, 0.2992500000000007, 0.36050000000000004, 0.8379999999999992, 1.0562499999999986, 1.0249999999999986, 0.6297499999999987, 0.39525000000000077, 0.20775000000000077, 0.3435000000000006, 0.48850000000000016, 2.01375, 0.5845000000000002, 0.6500000000000004, 1.456500000000001, 0.3850000000000007, 0.25700000000000145, 0.223749999999999], zp_timestamp='2025-12-13T00:29:00')
2025-12-13T02:32:35.699 [DEBUG] [Thread-80977] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:32:35.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:32:35.795 [DEBUG] [Thread-80980] [transport.py] [_log()] starting thread (client mode): 0xf570dfc0
2025-12-13T02:32:35.796 [DEBUG] [Thread-80980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:32:35.811 [DEBUG] [Thread-80980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:32:35.811 [INFO] [Thread-80980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:32:35.818 [DEBUG] [Thread-80980] [transport.py] [_log()] client lang: <none>
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] server lang: <none>
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] kex follows: False
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] Compression: none
2025-12-13T02:32:35.819 [DEBUG] [Thread-80980] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:32:35.876 [DEBUG] [Thread-80980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:32:35.876 [DEBUG] [Thread-80980] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:32:35.877 [DEBUG] [Thread-80980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:32:35.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:32:35.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:32:35.932 [DEBUG] [Thread-80980] [transport.py] [_log()] userauth is OK
2025-12-13T02:32:35.932 [DEBUG] [Thread-80980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:32:35.932 [DEBUG] [Thread-80980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:32:35.932 [DEBUG] [Thread-80980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:32:35.932 [DEBUG] [Thread-80980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:32:35.952 [INFO] [Thread-80980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:32:35.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:32:35.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:32:36.578 [DEBUG] [Thread-80982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:32:36.772 [DEBUG] [Thread-80980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:32:36.772 [DEBUG] [Thread-80980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:32:36.820 [DEBUG] [Thread-80980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:32:36.820 [DEBUG] [Thread-80980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:32:36.829 [DEBUG] [Thread-80980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:32:36.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:32:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:32:36.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:32:36.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:32:36.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:32:36.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:32:36.864 [DEBUG] [Thread-80980] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:32:51.624 [DEBUG] [Thread-80983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:06.659 [DEBUG] [Thread-80984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:06.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:33:06.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:33:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:33:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 33, 1), 1.75, 88.85, 0.0, 37.39, 6.73, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:33:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:33:01
2025-12-13T02:33:07.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:33:07.843 [DEBUG] [Thread-80985] [transport.py] [_log()] starting thread (client mode): 0xf813f8e0
2025-12-13T02:33:07.843 [DEBUG] [Thread-80985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:33:07.862 [DEBUG] [Thread-80985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:33:07.862 [INFO] [Thread-80985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:33:07.865 [DEBUG] [Thread-80985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:33:07.865 [DEBUG] [Thread-80985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:33:07.865 [DEBUG] [Thread-80985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:33:07.865 [DEBUG] [Thread-80985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:07.865 [DEBUG] [Thread-80985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:07.865 [DEBUG] [Thread-80985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] client lang: <none>
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] server lang: <none>
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] kex follows: False
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] Compression: none
2025-12-13T02:33:07.866 [DEBUG] [Thread-80985] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:33:07.882 [DEBUG] [Thread-80985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:33:07.882 [DEBUG] [Thread-80985] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:33:07.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:33:07.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:33:07.884 [DEBUG] [Thread-80985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:33:07.885 [DEBUG] [Thread-80985] [transport.py] [_log()] userauth is OK
2025-12-13T02:33:07.885 [DEBUG] [Thread-80985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:33:07.885 [DEBUG] [Thread-80985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:33:07.885 [DEBUG] [Thread-80985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:33:07.885 [DEBUG] [Thread-80985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:33:07.902 [INFO] [Thread-80985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:33:07.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:33:08.525 [DEBUG] [Thread-80985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:33:08.526 [DEBUG] [Thread-80985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:33:08.526 [DEBUG] [Thread-80985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:33:08.567 [DEBUG] [Thread-80985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:33:08.567 [DEBUG] [Thread-80985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:33:08.569 [DEBUG] [Thread-80985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:33:08.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:33:08.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:33:08.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:33:08.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:33:08.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:33:08.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:33:08.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:33:08.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:33:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:33:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.022664 -999.00   +6.50  35.66     91   +5.20 1 3 2 3 1     0    0 1.31 -0.28 Z.ESw 35.7 35.7 299.0 46.1 7.8 -6.6 7.6 -7.6 7.2 -6.3 7.7 -5.6
2025-12-13T02:33:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:33:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:33:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.022664
2025-12-13T02:33:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:33:08.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:33:08.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:33:08.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:33:08.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:33:08.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:33:01', tmtdew=1.75, humidity=88.85, cloud=0.0, wind=37.39, temperature=6.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:32:38.170', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.8302499999999995, 1.5749999999999993, nan, nan, nan, nan, nan, nan, nan, 1.4432500000000008, 1.72675, nan, nan, nan, nan, nan, 1.706500000000001, 0.7710000000000008, 1.197000000000001, 1.2117499999999994], zp_timestamp='2025-12-13T00:31:00')
2025-12-13T02:33:08.594 [DEBUG] [Thread-80985] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:33:08.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:33:08.690 [DEBUG] [Thread-80988] [transport.py] [_log()] starting thread (client mode): 0xf81f3e50
2025-12-13T02:33:08.690 [DEBUG] [Thread-80988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:33:08.704 [DEBUG] [Thread-80988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:33:08.704 [INFO] [Thread-80988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] client lang: <none>
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] server lang: <none>
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] kex follows: False
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:33:08.712 [DEBUG] [Thread-80988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:33:08.713 [DEBUG] [Thread-80988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:33:08.713 [DEBUG] [Thread-80988] [transport.py] [_log()] Compression: none
2025-12-13T02:33:08.713 [DEBUG] [Thread-80988] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:33:08.773 [DEBUG] [Thread-80988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:33:08.774 [DEBUG] [Thread-80988] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:33:08.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:33:08.775 [DEBUG] [Thread-80988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:33:08.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:33:08.832 [DEBUG] [Thread-80988] [transport.py] [_log()] userauth is OK
2025-12-13T02:33:08.832 [DEBUG] [Thread-80988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:33:08.832 [DEBUG] [Thread-80988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:33:08.832 [DEBUG] [Thread-80988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:33:08.833 [DEBUG] [Thread-80988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:33:08.851 [INFO] [Thread-80988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:33:08.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:33:08.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:33:09.679 [DEBUG] [Thread-80988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:33:09.680 [DEBUG] [Thread-80988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:33:09.728 [DEBUG] [Thread-80988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:33:09.728 [DEBUG] [Thread-80988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:33:09.737 [DEBUG] [Thread-80988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:33:09.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:33:09.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:33:09.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:33:09.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:33:09.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:33:09.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:33:09.773 [DEBUG] [Thread-80988] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:33:21.685 [DEBUG] [Thread-80990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:27.897 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:27.898 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:34.838 [DEBUG] [Thread-80991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:36.720 [DEBUG] [Thread-80992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:33:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:33:39.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:33:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:33:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 33, 33), 1.9, 87.64, 0.0, 42.3, 7.12, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:33:40.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:33:33
2025-12-13T02:33:40.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:33:40.746 [DEBUG] [Thread-80993] [transport.py] [_log()] starting thread (client mode): 0xf813f880
2025-12-13T02:33:40.746 [DEBUG] [Thread-80993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:33:40.766 [DEBUG] [Thread-80993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:33:40.766 [INFO] [Thread-80993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] client lang: <none>
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] server lang: <none>
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] kex follows: False
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:33:40.769 [DEBUG] [Thread-80993] [transport.py] [_log()] Compression: none
2025-12-13T02:33:40.770 [DEBUG] [Thread-80993] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:33:40.787 [DEBUG] [Thread-80993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:33:40.787 [DEBUG] [Thread-80993] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:33:40.788 [DEBUG] [Thread-80993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:33:40.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:33:40.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:33:40.790 [DEBUG] [Thread-80993] [transport.py] [_log()] userauth is OK
2025-12-13T02:33:40.790 [DEBUG] [Thread-80993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:33:40.790 [DEBUG] [Thread-80993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:33:40.790 [DEBUG] [Thread-80993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:33:40.790 [DEBUG] [Thread-80993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:33:40.825 [INFO] [Thread-80993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:33:40.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:33:41.455 [DEBUG] [Thread-80993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:33:41.455 [DEBUG] [Thread-80993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:33:41.456 [DEBUG] [Thread-80993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:33:41.496 [DEBUG] [Thread-80993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:33:41.496 [DEBUG] [Thread-80993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:33:41.499 [DEBUG] [Thread-80993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:33:41.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:33:41.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:33:41.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:33:41.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:33:41.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:33:41.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:33:41.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:33:41.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:33:41.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:33:41.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.023011 -999.00   +6.50  34.76     91   +5.20 1 3 2 3 1     0    0 1.30 -0.44 z.ES. 34.8 34.8 299.8 41.6 7.8 -6.6 7.6 -8.6 7.3 -8.0 7.6 -7.9
2025-12-13T02:33:41.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:33:41.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:33:41.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.023011
2025-12-13T02:33:41.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:33:41.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:33:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:33:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:33:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:33:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:33:33', tmtdew=1.9, humidity=87.64, cloud=0.0, wind=42.3, temperature=7.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:33:08.150', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.8302499999999995, 1.5749999999999993, nan, nan, nan, nan, nan, nan, nan, 1.4432500000000008, 1.72675, nan, nan, nan, nan, nan, 1.706500000000001, 0.7710000000000008, 1.197000000000001, 1.2117499999999994], zp_timestamp='2025-12-13T00:31:00')
2025-12-13T02:33:41.523 [DEBUG] [Thread-80993] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:33:41.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:33:41.621 [DEBUG] [Thread-80996] [transport.py] [_log()] starting thread (client mode): 0xf813e9e0
2025-12-13T02:33:41.621 [DEBUG] [Thread-80996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:33:41.635 [DEBUG] [Thread-80996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:33:41.635 [INFO] [Thread-80996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:41.643 [DEBUG] [Thread-80996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] client lang: <none>
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] server lang: <none>
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] kex follows: False
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] Compression: none
2025-12-13T02:33:41.644 [DEBUG] [Thread-80996] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:33:41.699 [DEBUG] [Thread-80996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:33:41.700 [DEBUG] [Thread-80996] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:33:41.700 [DEBUG] [Thread-80996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:33:41.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:33:41.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:33:41.756 [DEBUG] [Thread-80996] [transport.py] [_log()] userauth is OK
2025-12-13T02:33:41.756 [DEBUG] [Thread-80996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:33:41.756 [DEBUG] [Thread-80996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:33:41.756 [DEBUG] [Thread-80996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:33:41.756 [DEBUG] [Thread-80996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:33:41.775 [INFO] [Thread-80996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:33:41.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:33:41.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:33:42.598 [DEBUG] [Thread-80996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:33:42.599 [DEBUG] [Thread-80996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:33:42.648 [DEBUG] [Thread-80996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:33:42.648 [DEBUG] [Thread-80996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:33:42.656 [DEBUG] [Thread-80996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:33:42.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:33: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')
2025-12-13T02:33:42.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:33:42.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:33:42.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:33:42.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:33:42.689 [DEBUG] [Thread-80996] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:33:51.752 [DEBUG] [Thread-80998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:06.801 [DEBUG] [Thread-80999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:34:12.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:34:12.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:34:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 34, 5), 1.76, 88.77, 0.0, 35.16, 6.73, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:34:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:34:05
2025-12-13T02:34:13.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:34:13.678 [DEBUG] [Thread-81000] [transport.py] [_log()] starting thread (client mode): 0xf81f08e0
2025-12-13T02:34:13.678 [DEBUG] [Thread-81000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:34:13.697 [DEBUG] [Thread-81000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:34:13.697 [INFO] [Thread-81000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] client lang: <none>
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] server lang: <none>
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] kex follows: False
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:34:13.700 [DEBUG] [Thread-81000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:34:13.701 [DEBUG] [Thread-81000] [transport.py] [_log()] Compression: none
2025-12-13T02:34:13.701 [DEBUG] [Thread-81000] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:34:13.718 [DEBUG] [Thread-81000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:34:13.718 [DEBUG] [Thread-81000] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:34:13.718 [DEBUG] [Thread-81000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:34:13.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:34:13.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:34:13.720 [DEBUG] [Thread-81000] [transport.py] [_log()] userauth is OK
2025-12-13T02:34:13.720 [DEBUG] [Thread-81000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:34:13.720 [DEBUG] [Thread-81000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:34:13.720 [DEBUG] [Thread-81000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:34:13.720 [DEBUG] [Thread-81000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:34:13.741 [INFO] [Thread-81000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:34:13.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:34:14.302 [DEBUG] [Thread-81000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:34:14.302 [DEBUG] [Thread-81000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:34:14.303 [DEBUG] [Thread-81000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:34:14.343 [DEBUG] [Thread-81000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:34:14.343 [DEBUG] [Thread-81000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:34:14.346 [DEBUG] [Thread-81000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:34:14.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:34:14.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:34:14.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:34:14.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:34:14.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:34:14.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:34:14.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:34:14.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:34:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:34:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.023706 -999.00   +6.50  32.39     91   +5.20 1 2 2 3 1     0    0 1.34 -0.39 ..ESW 32.4 32.4 308.9 49.4 7.8 -15.8 7.6 -17.9 7.2 -17.8 7.6 -17.1
2025-12-13T02:34:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:34:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:34:14.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.023706
2025-12-13T02:34:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:34:14.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:34:14.374 [DEBUG] [Thread-81000] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:34:14.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:34:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:34:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:34:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:34:05', tmtdew=1.76, humidity=88.77, cloud=0.0, wind=35.16, temperature=6.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:34:08.198', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.8302499999999995, 1.5749999999999993, nan, nan, nan, nan, nan, nan, nan, 1.4432500000000008, 1.72675, nan, nan, nan, nan, nan, 1.706500000000001, 0.7710000000000008, 1.197000000000001, 1.2117499999999994], zp_timestamp='2025-12-13T00:31:00')
2025-12-13T02:34:14.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:34:21.827 [DEBUG] [Thread-81003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:28.103 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:28.104 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:34.908 [DEBUG] [Thread-81004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:36.875 [DEBUG] [Thread-81005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:34:51.903 [DEBUG] [Thread-81006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:06.938 [DEBUG] [Thread-81007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:21.970 [DEBUG] [Thread-81008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:28.307 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:28.309 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:34.988 [DEBUG] [Thread-81009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:36.996 [DEBUG] [Thread-81010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:35:52.024 [DEBUG] [Thread-81011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:07.052 [DEBUG] [Thread-81012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:22.084 [DEBUG] [Thread-81013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:25.962 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-13T02:36:28.514 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:28.515 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:35.061 [DEBUG] [Thread-81014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:37.112 [DEBUG] [Thread-81015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:52.139 [DEBUG] [Thread-81016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:36:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:36:55.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:36:55.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:36:56.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 36, 45), 1.7, 88.85, 0.0, 29.41, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:36:56.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:36:45
2025-12-13T02:36:56.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:36:56.949 [DEBUG] [Thread-81017] [transport.py] [_log()] starting thread (client mode): 0xf81f14e0
2025-12-13T02:36:56.949 [DEBUG] [Thread-81017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:36:56.969 [DEBUG] [Thread-81017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:36:56.969 [INFO] [Thread-81017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:36:56.971 [DEBUG] [Thread-81017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] client lang: <none>
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] server lang: <none>
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] kex follows: False
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] Compression: none
2025-12-13T02:36:56.972 [DEBUG] [Thread-81017] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:36:56.983 [DEBUG] [Thread-81017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:36:56.983 [DEBUG] [Thread-81017] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:36:56.983 [DEBUG] [Thread-81017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:36:56.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:36:56.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:36:56.984 [DEBUG] [Thread-81017] [transport.py] [_log()] userauth is OK
2025-12-13T02:36:56.984 [DEBUG] [Thread-81017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:36:56.984 [DEBUG] [Thread-81017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:36:56.984 [DEBUG] [Thread-81017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:36:56.985 [DEBUG] [Thread-81017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:36:56.996 [INFO] [Thread-81017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:36:56.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:36:57.604 [DEBUG] [Thread-81017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:36:57.604 [DEBUG] [Thread-81017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:36:57.605 [DEBUG] [Thread-81017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:36:57.645 [DEBUG] [Thread-81017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:36:57.645 [DEBUG] [Thread-81017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:36:57.648 [DEBUG] [Thread-81017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:36:57.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:36:57.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:36:57.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:36:57.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:36:57.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:36:57.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:36:57.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:36:57.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:36:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:36:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.025094 -999.00   +6.50  42.52     91   +5.20 1 3 2 3 1     0    0 1.31 -0.15 ZNESW 42.5 42.5 302.6 53.9 7.7 -13.4 7.5 -11.1 7.2 -8.4 7.6 -7.8
2025-12-13T02:36:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:36:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:36:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.025094
2025-12-13T02:36:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:36:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:36:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:36:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:36:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:36:57.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:36:45', tmtdew=1.7, humidity=88.85, cloud=0.0, wind=29.41, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:36:08.122', atlas_cloud=3, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:35:00')
2025-12-13T02:36:57.676 [DEBUG] [Thread-81017] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:36:57.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:36:57.771 [DEBUG] [Thread-81020] [transport.py] [_log()] starting thread (client mode): 0xf81e7a60
2025-12-13T02:36:57.772 [DEBUG] [Thread-81020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:36:57.786 [DEBUG] [Thread-81020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:36:57.786 [INFO] [Thread-81020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] client lang: <none>
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] server lang: <none>
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] kex follows: False
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:36:57.794 [DEBUG] [Thread-81020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:36:57.795 [DEBUG] [Thread-81020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:36:57.795 [DEBUG] [Thread-81020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:36:57.795 [DEBUG] [Thread-81020] [transport.py] [_log()] Compression: none
2025-12-13T02:36:57.795 [DEBUG] [Thread-81020] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:36:57.851 [DEBUG] [Thread-81020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:36:57.852 [DEBUG] [Thread-81020] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:36:57.852 [DEBUG] [Thread-81020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:36:57.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:36:57.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:36:57.908 [DEBUG] [Thread-81020] [transport.py] [_log()] userauth is OK
2025-12-13T02:36:57.908 [DEBUG] [Thread-81020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:36:57.908 [DEBUG] [Thread-81020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:36:57.908 [DEBUG] [Thread-81020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:36:57.908 [DEBUG] [Thread-81020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:36:57.926 [INFO] [Thread-81020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:36:57.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:36:57.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:36:58.748 [DEBUG] [Thread-81020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:36:58.748 [DEBUG] [Thread-81020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:36:58.800 [DEBUG] [Thread-81020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:36:58.800 [DEBUG] [Thread-81020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:36:58.810 [DEBUG] [Thread-81020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:36:58.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:36:58.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:36:58.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:36:58.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:36:58.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:36:58.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:36:58.845 [DEBUG] [Thread-81020] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:37:07.168 [DEBUG] [Thread-81022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:37:22.222 [DEBUG] [Thread-81023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:37:28.719 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:37:28.721 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:37:28.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:37:28.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:37:28.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:37:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 37, 17), 1.7, 88.82, 0.0, 32.85, 6.79, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:37:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:37:17
2025-12-13T02:37:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:37:29.836 [DEBUG] [Thread-81024] [transport.py] [_log()] starting thread (client mode): 0xf813f880
2025-12-13T02:37:29.836 [DEBUG] [Thread-81024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:37:29.851 [DEBUG] [Thread-81024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:37:29.851 [INFO] [Thread-81024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] client lang: <none>
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] server lang: <none>
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] kex follows: False
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] Compression: none
2025-12-13T02:37:29.854 [DEBUG] [Thread-81024] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:37:29.870 [DEBUG] [Thread-81024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:37:29.870 [DEBUG] [Thread-81024] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:37:29.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:37:29.871 [DEBUG] [Thread-81024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:37:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:37:29.873 [DEBUG] [Thread-81024] [transport.py] [_log()] userauth is OK
2025-12-13T02:37:29.873 [DEBUG] [Thread-81024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:37:29.873 [DEBUG] [Thread-81024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:37:29.873 [DEBUG] [Thread-81024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:37:29.873 [DEBUG] [Thread-81024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:37:29.912 [INFO] [Thread-81024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:37:29.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:37:30.561 [DEBUG] [Thread-81024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:37:30.561 [DEBUG] [Thread-81024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:37:30.562 [DEBUG] [Thread-81024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:37:30.602 [DEBUG] [Thread-81024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:37:30.602 [DEBUG] [Thread-81024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:37:30.605 [DEBUG] [Thread-81024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:37:30.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:37:30.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:37:30.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:37:30.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:37:30.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:37:30.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:37:30.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:37:30.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:37:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:37:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.025442 -999.00   +6.50  33.29     91   +5.20 1 3 2 3 1     0    0 1.34 0.10 ZNESW 33.3 33.3 305.4 47.8 7.7 -8.3 7.5 -7.2 7.2 -5.3 7.6 -4.7
2025-12-13T02:37:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:37:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:37:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.025442
2025-12-13T02:37:30.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:37:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:37:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:37:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:37:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:37:30.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:37:17', tmtdew=1.7, humidity=88.82, cloud=0.0, wind=32.85, temperature=6.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:36:38.189', atlas_cloud=3, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:35:00')
2025-12-13T02:37:30.630 [DEBUG] [Thread-81024] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:37:30.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:37:30.726 [DEBUG] [Thread-81027] [transport.py] [_log()] starting thread (client mode): 0xf572f7f0
2025-12-13T02:37:30.726 [DEBUG] [Thread-81027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:37:30.741 [DEBUG] [Thread-81027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:37:30.741 [INFO] [Thread-81027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:37:30.748 [DEBUG] [Thread-81027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] client lang: <none>
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] server lang: <none>
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] kex follows: False
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] Compression: none
2025-12-13T02:37:30.749 [DEBUG] [Thread-81027] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:37:30.807 [DEBUG] [Thread-81027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:37:30.808 [DEBUG] [Thread-81027] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:37:30.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:37:30.809 [DEBUG] [Thread-81027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:37:30.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:37:30.864 [DEBUG] [Thread-81027] [transport.py] [_log()] userauth is OK
2025-12-13T02:37:30.864 [DEBUG] [Thread-81027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:37:30.864 [DEBUG] [Thread-81027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:37:30.865 [DEBUG] [Thread-81027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:37:30.865 [DEBUG] [Thread-81027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:37:30.883 [INFO] [Thread-81027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:37:30.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:37:30.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:37:31.743 [DEBUG] [Thread-81027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:37:31.743 [DEBUG] [Thread-81027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:37:31.791 [DEBUG] [Thread-81027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:37:31.791 [DEBUG] [Thread-81027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:37:31.800 [DEBUG] [Thread-81027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:37:31.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:37:31.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:37:31.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:37:31.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:37:31.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:37:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:37:31.834 [DEBUG] [Thread-81027] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:37:35.137 [DEBUG] [Thread-81029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:37:37.252 [DEBUG] [Thread-81030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:37:52.295 [DEBUG] [Thread-81031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:01.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:38:01.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:38:01.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:38:02.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 37, 49), 1.76, 88.77, 0.0, 34.21, 6.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:38:02.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:37:49
2025-12-13T02:38:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:38:02.814 [DEBUG] [Thread-81032] [transport.py] [_log()] starting thread (client mode): 0xf5773160
2025-12-13T02:38:02.814 [DEBUG] [Thread-81032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:38:02.834 [DEBUG] [Thread-81032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:38:02.834 [INFO] [Thread-81032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:38:02.835 [DEBUG] [Thread-81032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] client lang: <none>
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] server lang: <none>
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] kex follows: False
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] Compression: none
2025-12-13T02:38:02.836 [DEBUG] [Thread-81032] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:38:02.848 [DEBUG] [Thread-81032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:38:02.848 [DEBUG] [Thread-81032] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:38:02.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:38:02.848 [DEBUG] [Thread-81032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:38:02.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:38:02.849 [DEBUG] [Thread-81032] [transport.py] [_log()] userauth is OK
2025-12-13T02:38:02.849 [DEBUG] [Thread-81032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:38:02.849 [DEBUG] [Thread-81032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:38:02.849 [DEBUG] [Thread-81032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:38:02.850 [DEBUG] [Thread-81032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:38:02.867 [INFO] [Thread-81032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:38:02.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:38:03.528 [DEBUG] [Thread-81032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:38:03.528 [DEBUG] [Thread-81032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:38:03.528 [DEBUG] [Thread-81032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:38:03.569 [DEBUG] [Thread-81032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:38:03.569 [DEBUG] [Thread-81032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:38:03.572 [DEBUG] [Thread-81032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:38:03.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:38:03.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:38:03.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:38:03.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:38:03.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:38:03.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:38:03.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:38:03.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:38:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:38:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.026136 -999.00   +6.60  26.77     91   +5.30 1 2 1 3 1     0    0 1.31 0.56 ZNEs. 26.8 26.8 304.6 41.0 7.8 -7.9 7.5 -12.8 7.2 -12.8 7.6 -12.8
2025-12-13T02:38:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:38:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:38:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.026136
2025-12-13T02:38:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:38:03.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:38:03.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:38:03.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:38:03.596 [DEBUG] [Thread-81032] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:38:03.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:38:03.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:37:49', tmtdew=1.76, humidity=88.77, cloud=0.0, wind=34.21, temperature=6.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:37:38.150', atlas_cloud=2, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:35:00')
2025-12-13T02:38:03.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:38:03.690 [DEBUG] [Thread-81035] [transport.py] [_log()] starting thread (client mode): 0xf5703e20
2025-12-13T02:38:03.690 [DEBUG] [Thread-81035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:38:03.705 [DEBUG] [Thread-81035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:38:03.705 [INFO] [Thread-81035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:38:03.713 [DEBUG] [Thread-81035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:38:03.713 [DEBUG] [Thread-81035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:38:03.713 [DEBUG] [Thread-81035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:38:03.713 [DEBUG] [Thread-81035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:03.713 [DEBUG] [Thread-81035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] client lang: <none>
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] server lang: <none>
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] kex follows: False
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:38:03.714 [DEBUG] [Thread-81035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:38:03.715 [DEBUG] [Thread-81035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:38:03.715 [DEBUG] [Thread-81035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:38:03.715 [DEBUG] [Thread-81035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:38:03.715 [DEBUG] [Thread-81035] [transport.py] [_log()] Compression: none
2025-12-13T02:38:03.715 [DEBUG] [Thread-81035] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:38:03.772 [DEBUG] [Thread-81035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:38:03.773 [DEBUG] [Thread-81035] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:38:03.773 [DEBUG] [Thread-81035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:38:03.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:38:03.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:38:03.828 [DEBUG] [Thread-81035] [transport.py] [_log()] userauth is OK
2025-12-13T02:38:03.828 [DEBUG] [Thread-81035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:38:03.828 [DEBUG] [Thread-81035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:38:03.828 [DEBUG] [Thread-81035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:38:03.828 [DEBUG] [Thread-81035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:38:03.846 [INFO] [Thread-81035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:38:03.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:38:03.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:38:04.654 [DEBUG] [Thread-81035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:38:04.654 [DEBUG] [Thread-81035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:38:04.702 [DEBUG] [Thread-81035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:38:04.702 [DEBUG] [Thread-81035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:38:04.721 [DEBUG] [Thread-81035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:38:04.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:38:04.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:38:04.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:38:04.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:38:04.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:38:04.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:38:04.756 [DEBUG] [Thread-81035] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:38:07.322 [DEBUG] [Thread-81037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:22.368 [DEBUG] [Thread-81038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:28.925 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:28.926 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:34.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:38:34.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:38: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
2025-12-13T02:38:35.205 [DEBUG] [Thread-81039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:35.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 38, 22), 1.77, 88.74, 0.0, 34.23, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:38:35.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:38:22
2025-12-13T02:38:35.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:38:35.749 [DEBUG] [Thread-81040] [transport.py] [_log()] starting thread (client mode): 0xfabc5930
2025-12-13T02:38:35.749 [DEBUG] [Thread-81040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:38:35.770 [DEBUG] [Thread-81040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:38:35.771 [INFO] [Thread-81040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:38:35.774 [DEBUG] [Thread-81040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] client lang: <none>
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] server lang: <none>
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] kex follows: False
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] Compression: none
2025-12-13T02:38:35.775 [DEBUG] [Thread-81040] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:38:35.794 [DEBUG] [Thread-81040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:38:35.795 [DEBUG] [Thread-81040] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:38:35.795 [DEBUG] [Thread-81040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:38:35.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:38:35.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:38:35.797 [DEBUG] [Thread-81040] [transport.py] [_log()] userauth is OK
2025-12-13T02:38:35.797 [DEBUG] [Thread-81040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:38:35.798 [DEBUG] [Thread-81040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:38:35.798 [DEBUG] [Thread-81040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:38:35.798 [DEBUG] [Thread-81040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:38:35.815 [INFO] [Thread-81040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:38:35.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:38:36.434 [DEBUG] [Thread-81040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:38:36.435 [DEBUG] [Thread-81040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:38:36.435 [DEBUG] [Thread-81040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:38:36.476 [DEBUG] [Thread-81040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:38:36.476 [DEBUG] [Thread-81040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:38:36.479 [DEBUG] [Thread-81040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:38:36.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:38:36.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:38:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:38:36.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:38:36.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:38:36.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:38:36.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:38:36.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:38:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:38:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.026483 -999.00   +6.60  34.05     90   +5.20 1 2 2 3 1     0    0 1.32 0.88 ...SW 34.0 34.0 298.8 43.6 7.7 -14.6 7.5 -18.9 7.2 -18.9 7.6 -18.6
2025-12-13T02:38:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:38:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:38:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.026483
2025-12-13T02:38:36.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:38:36.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:38:36.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:38:36.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:38:36.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:38:36.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:38:22', tmtdew=1.77, humidity=88.74, cloud=0.0, wind=34.23, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:38:08.131', atlas_cloud=2, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:35:00')
2025-12-13T02:38:36.505 [DEBUG] [Thread-81040] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:38:36.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:38:36.603 [DEBUG] [Thread-81043] [transport.py] [_log()] starting thread (client mode): 0xf813f160
2025-12-13T02:38:36.603 [DEBUG] [Thread-81043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:38:36.617 [DEBUG] [Thread-81043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:38:36.617 [INFO] [Thread-81043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] client lang: <none>
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] server lang: <none>
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] kex follows: False
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:38:36.625 [DEBUG] [Thread-81043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:38:36.626 [DEBUG] [Thread-81043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:38:36.626 [DEBUG] [Thread-81043] [transport.py] [_log()] Compression: none
2025-12-13T02:38:36.626 [DEBUG] [Thread-81043] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:38:36.684 [DEBUG] [Thread-81043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:38:36.684 [DEBUG] [Thread-81043] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:38:36.685 [DEBUG] [Thread-81043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:38:36.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:38:36.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:38:36.740 [DEBUG] [Thread-81043] [transport.py] [_log()] userauth is OK
2025-12-13T02:38:36.740 [DEBUG] [Thread-81043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:38:36.740 [DEBUG] [Thread-81043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:38:36.740 [DEBUG] [Thread-81043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:38:36.740 [DEBUG] [Thread-81043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:38:36.758 [INFO] [Thread-81043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:38:36.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:38:36.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:38:37.396 [DEBUG] [Thread-81045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:38:37.603 [DEBUG] [Thread-81043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:38:37.603 [DEBUG] [Thread-81043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:38:37.651 [DEBUG] [Thread-81043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:38:37.651 [DEBUG] [Thread-81043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:38:37.660 [DEBUG] [Thread-81043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:38:37.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:38:37.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:38:37.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:38:37.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:38:37.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:38:37.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:38:37.695 [DEBUG] [Thread-81043] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:38:52.439 [DEBUG] [Thread-81046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:07.466 [DEBUG] [Thread-81047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:07.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:39:07.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:39:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:39:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 38, 54), 1.82, 88.22, 0.0, 30.17, 6.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:39:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:38:54
2025-12-13T02:39:08.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:39:08.691 [DEBUG] [Thread-81048] [transport.py] [_log()] starting thread (client mode): 0xf575cc40
2025-12-13T02:39:08.691 [DEBUG] [Thread-81048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:39:08.712 [DEBUG] [Thread-81048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:39:08.712 [INFO] [Thread-81048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] client lang: <none>
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] server lang: <none>
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] kex follows: False
2025-12-13T02:39:08.714 [DEBUG] [Thread-81048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:39:08.715 [DEBUG] [Thread-81048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:39:08.715 [DEBUG] [Thread-81048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:39:08.715 [DEBUG] [Thread-81048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:39:08.715 [DEBUG] [Thread-81048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:39:08.715 [DEBUG] [Thread-81048] [transport.py] [_log()] Compression: none
2025-12-13T02:39:08.715 [DEBUG] [Thread-81048] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:39:08.725 [DEBUG] [Thread-81048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:39:08.725 [DEBUG] [Thread-81048] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:39:08.725 [DEBUG] [Thread-81048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:39:08.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:39:08.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:39:08.726 [DEBUG] [Thread-81048] [transport.py] [_log()] userauth is OK
2025-12-13T02:39:08.726 [DEBUG] [Thread-81048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:39:08.726 [DEBUG] [Thread-81048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:39:08.726 [DEBUG] [Thread-81048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:39:08.726 [DEBUG] [Thread-81048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:39:08.735 [INFO] [Thread-81048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:39:08.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:39:09.291 [DEBUG] [Thread-81048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:39:09.299 [DEBUG] [Thread-81048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:39:09.299 [DEBUG] [Thread-81048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:39:09.332 [DEBUG] [Thread-81048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:39:09.332 [DEBUG] [Thread-81048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:39:09.334 [DEBUG] [Thread-81048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:39:09.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:39:09.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:39:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:39:09.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:39:09.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:39:09.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:39:09.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.026831 -999.00   +6.60  35.34     90   +5.20 1 2 2 3 1     0    0 1.34 1.69 ...SW 35.3 35.3 290.4 49.0 7.7 -19.6 7.4 -21.8 7.2 -20.8 7.5 -21.3
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.026831
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:39:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:38:54', tmtdew=1.82, humidity=88.22, cloud=0.0, wind=30.17, temperature=6.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:38:38.198', atlas_cloud=2, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:37:00')
2025-12-13T02:39:09.354 [DEBUG] [Thread-81048] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:39:09.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:39:09.439 [DEBUG] [Thread-81051] [transport.py] [_log()] starting thread (client mode): 0xf81e73a0
2025-12-13T02:39:09.439 [DEBUG] [Thread-81051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:39:09.453 [DEBUG] [Thread-81051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:39:09.454 [INFO] [Thread-81051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] client lang: <none>
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] server lang: <none>
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] kex follows: False
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] Compression: none
2025-12-13T02:39:09.462 [DEBUG] [Thread-81051] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:39:09.518 [DEBUG] [Thread-81051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:39:09.518 [DEBUG] [Thread-81051] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:39:09.518 [DEBUG] [Thread-81051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:39:09.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:39:09.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:39:09.575 [DEBUG] [Thread-81051] [transport.py] [_log()] userauth is OK
2025-12-13T02:39:09.575 [DEBUG] [Thread-81051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:39:09.575 [DEBUG] [Thread-81051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:39:09.575 [DEBUG] [Thread-81051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:39:09.575 [DEBUG] [Thread-81051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:39:09.589 [INFO] [Thread-81051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:39:09.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:39:09.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:39:10.440 [DEBUG] [Thread-81051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:39:10.440 [DEBUG] [Thread-81051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:39:10.488 [DEBUG] [Thread-81051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:39:10.488 [DEBUG] [Thread-81051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:39:10.496 [DEBUG] [Thread-81051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:39:10.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:39:10.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:39:10.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:39:10.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:39:10.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:39:10.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:39:10.527 [DEBUG] [Thread-81051] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:39:22.487 [DEBUG] [Thread-81053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:29.128 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:29.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:35.281 [DEBUG] [Thread-81054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:37.532 [DEBUG] [Thread-81055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:39:40.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:39:40.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:39:40.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:39:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 39, 26), 1.83, 88.16, 0.0, 29.59, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:39:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:39:26
2025-12-13T02:39:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:39:41.518 [DEBUG] [Thread-81056] [transport.py] [_log()] starting thread (client mode): 0xf572d8d0
2025-12-13T02:39:41.518 [DEBUG] [Thread-81056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:39:41.539 [DEBUG] [Thread-81056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:39:41.539 [INFO] [Thread-81056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:41.542 [DEBUG] [Thread-81056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] client lang: <none>
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] server lang: <none>
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] kex follows: False
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] Compression: none
2025-12-13T02:39:41.543 [DEBUG] [Thread-81056] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:39:41.553 [DEBUG] [Thread-81056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:39:41.553 [DEBUG] [Thread-81056] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:39:41.554 [DEBUG] [Thread-81056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:39:41.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:39:41.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:39:41.556 [DEBUG] [Thread-81056] [transport.py] [_log()] userauth is OK
2025-12-13T02:39:41.557 [DEBUG] [Thread-81056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:39:41.557 [DEBUG] [Thread-81056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:39:41.557 [DEBUG] [Thread-81056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:39:41.557 [DEBUG] [Thread-81056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:39:41.583 [INFO] [Thread-81056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:39:41.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:39:42.225 [DEBUG] [Thread-81056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:39:42.225 [DEBUG] [Thread-81056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:39:42.226 [DEBUG] [Thread-81056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:39:42.266 [DEBUG] [Thread-81056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:39:42.266 [DEBUG] [Thread-81056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:39:42.270 [DEBUG] [Thread-81056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:39:42.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:39:42.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:39:42.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:39:42.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:39:42.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:39:42.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:39:42.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:39:42.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:39:42.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:39:42.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.027178 -999.00   +6.60  26.88     90   +5.20 1 2 1 3 1     0    0 1.38 2.17 Z.eSW 26.9 26.9 311.0 39.0 7.7 -22.2 7.4 -22.0 7.1 -20.7 7.5 -22.0
2025-12-13T02:39:42.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:39:42.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:39:42.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.027178
2025-12-13T02:39:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:39:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:39:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:39:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:39:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:39:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:39:26', tmtdew=1.83, humidity=88.16, cloud=0.0, wind=29.59, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:39:08.179', atlas_cloud=2, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:37:00')
2025-12-13T02:39:42.298 [DEBUG] [Thread-81056] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:39:42.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:39:42.395 [DEBUG] [Thread-81059] [transport.py] [_log()] starting thread (client mode): 0xf5703280
2025-12-13T02:39:42.395 [DEBUG] [Thread-81059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:39:42.409 [DEBUG] [Thread-81059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:39:42.409 [INFO] [Thread-81059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] client lang: <none>
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] server lang: <none>
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] kex follows: False
2025-12-13T02:39:42.417 [DEBUG] [Thread-81059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:39:42.418 [DEBUG] [Thread-81059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:39:42.418 [DEBUG] [Thread-81059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:39:42.418 [DEBUG] [Thread-81059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:39:42.418 [DEBUG] [Thread-81059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:39:42.418 [DEBUG] [Thread-81059] [transport.py] [_log()] Compression: none
2025-12-13T02:39:42.418 [DEBUG] [Thread-81059] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:39:42.475 [DEBUG] [Thread-81059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:39:42.476 [DEBUG] [Thread-81059] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:39:42.476 [DEBUG] [Thread-81059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:39:42.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:39:42.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:39:42.532 [DEBUG] [Thread-81059] [transport.py] [_log()] userauth is OK
2025-12-13T02:39:42.532 [DEBUG] [Thread-81059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:39:42.532 [DEBUG] [Thread-81059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:39:42.532 [DEBUG] [Thread-81059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:39:42.532 [DEBUG] [Thread-81059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:39:42.550 [INFO] [Thread-81059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:39:42.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:39:42.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:39:43.380 [DEBUG] [Thread-81059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:39:43.381 [DEBUG] [Thread-81059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:39:43.428 [DEBUG] [Thread-81059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:39:43.429 [DEBUG] [Thread-81059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:39:43.437 [DEBUG] [Thread-81059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:39:43.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:39:43.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:39:43.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:39:43.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:39:43.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:39:43.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:39:43.474 [DEBUG] [Thread-81059] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:39:52.560 [DEBUG] [Thread-81061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:07.607 [DEBUG] [Thread-81062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:13.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:40:13.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:40:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:40:14.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 39, 58), 1.78, 88.14, 0.0, 29.55, 6.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:40:14.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:39:58
2025-12-13T02:40:14.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:40:14.432 [DEBUG] [Thread-81063] [transport.py] [_log()] starting thread (client mode): 0xf572e3b0
2025-12-13T02:40:14.432 [DEBUG] [Thread-81063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:40:14.445 [DEBUG] [Thread-81063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:40:14.445 [INFO] [Thread-81063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] client lang: <none>
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] server lang: <none>
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] kex follows: False
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] Compression: none
2025-12-13T02:40:14.447 [DEBUG] [Thread-81063] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:40:14.457 [DEBUG] [Thread-81063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:40:14.457 [DEBUG] [Thread-81063] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:40:14.457 [DEBUG] [Thread-81063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:40:14.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:40:14.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:40:14.458 [DEBUG] [Thread-81063] [transport.py] [_log()] userauth is OK
2025-12-13T02:40:14.458 [DEBUG] [Thread-81063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:40:14.458 [DEBUG] [Thread-81063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:40:14.458 [DEBUG] [Thread-81063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:40:14.458 [DEBUG] [Thread-81063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:40:14.477 [INFO] [Thread-81063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:40:14.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:40:15.496 [DEBUG] [Thread-81063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:40:15.496 [DEBUG] [Thread-81063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:40:15.496 [DEBUG] [Thread-81063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:40:15.537 [DEBUG] [Thread-81063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:40:15.537 [DEBUG] [Thread-81063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:40:15.540 [DEBUG] [Thread-81063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:40:15.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:40:15.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:40:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:40:15.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:40:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:40:15.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:40:15.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:40:15.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:40:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:40:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.027525 -999.00   +6.60  24.39     90   +5.20 1 1 1 3 1     0    0 1.39 3.25 ZNESW 24.4 24.4 311.8 35.6 7.7 -22.7 7.4 -21.4 7.1 -20.5 7.5 -22.0
2025-12-13T02:40:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:40:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:40:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.027525
2025-12-13T02:40:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:40:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:40:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:40:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:40:15.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:40:15.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:39:58', tmtdew=1.78, humidity=88.14, cloud=0.0, wind=29.55, temperature=6.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:39:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:37:00')
2025-12-13T02:40:15.566 [DEBUG] [Thread-81063] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:40:15.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:40:15.670 [DEBUG] [Thread-81066] [transport.py] [_log()] starting thread (client mode): 0xf818a050
2025-12-13T02:40:15.670 [DEBUG] [Thread-81066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:40:15.685 [DEBUG] [Thread-81066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:40:15.685 [INFO] [Thread-81066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:40:15.693 [DEBUG] [Thread-81066] [transport.py] [_log()] client lang: <none>
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] server lang: <none>
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] kex follows: False
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] Compression: none
2025-12-13T02:40:15.694 [DEBUG] [Thread-81066] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:40:15.751 [DEBUG] [Thread-81066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:40:15.752 [DEBUG] [Thread-81066] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:40:15.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:40:15.753 [DEBUG] [Thread-81066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:40:15.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:40:15.807 [DEBUG] [Thread-81066] [transport.py] [_log()] userauth is OK
2025-12-13T02:40:15.808 [DEBUG] [Thread-81066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:40:15.808 [DEBUG] [Thread-81066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:40:15.808 [DEBUG] [Thread-81066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:40:15.808 [DEBUG] [Thread-81066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:40:15.827 [INFO] [Thread-81066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:40:15.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:40:15.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:40:16.647 [DEBUG] [Thread-81066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:40:16.647 [DEBUG] [Thread-81066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:40:16.695 [DEBUG] [Thread-81066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:40:16.695 [DEBUG] [Thread-81066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:40:16.704 [DEBUG] [Thread-81066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:40:16.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:40:16.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:40:16.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:40:16.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:40:16.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:40:16.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:40:16.738 [DEBUG] [Thread-81066] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:40:22.636 [DEBUG] [Thread-81068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:29.334 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:29.335 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:35.363 [DEBUG] [Thread-81069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:37.681 [DEBUG] [Thread-81070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:40:46.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:40:46.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:40:46.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:40:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 40, 30), 1.78, 88.12, 0.0, 32.22, 6.65, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:40:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:40:30
2025-12-13T02:40:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:40:47.710 [DEBUG] [Thread-81071] [transport.py] [_log()] starting thread (client mode): 0xf5703760
2025-12-13T02:40:47.710 [DEBUG] [Thread-81071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:40:47.730 [DEBUG] [Thread-81071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:40:47.730 [INFO] [Thread-81071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] client lang: <none>
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] server lang: <none>
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] kex follows: False
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:40:47.734 [DEBUG] [Thread-81071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:40:47.735 [DEBUG] [Thread-81071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:40:47.735 [DEBUG] [Thread-81071] [transport.py] [_log()] Compression: none
2025-12-13T02:40:47.735 [DEBUG] [Thread-81071] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:40:47.751 [DEBUG] [Thread-81071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:40:47.751 [DEBUG] [Thread-81071] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:40:47.752 [DEBUG] [Thread-81071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:40:47.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:40:47.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:40:47.754 [DEBUG] [Thread-81071] [transport.py] [_log()] userauth is OK
2025-12-13T02:40:47.754 [DEBUG] [Thread-81071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:40:47.754 [DEBUG] [Thread-81071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:40:47.754 [DEBUG] [Thread-81071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:40:47.754 [DEBUG] [Thread-81071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:40:47.778 [INFO] [Thread-81071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:40:47.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:40:48.343 [DEBUG] [Thread-81071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:40:48.343 [DEBUG] [Thread-81071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:40:48.344 [DEBUG] [Thread-81071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:40:48.385 [DEBUG] [Thread-81071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:40:48.385 [DEBUG] [Thread-81071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:40:48.388 [DEBUG] [Thread-81071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:40:48.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:40:48.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:40:48.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:40:48.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:40:48.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:40:48.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:40:48.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:40:48.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:40:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:40:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.027872 -999.00   +6.60  35.88     90   +5.20 1 1 2 3 1     0    0 1.45 3.76 ZNESW 35.9 35.9 307.6 41.0 7.6 -22.6 7.4 -20.9 7.0 -20.2 7.5 -22.0
2025-12-13T02:40:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:40:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:40:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.027872
2025-12-13T02:40:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:40:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:40:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:40:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:40:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:40:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:40:30', tmtdew=1.78, humidity=88.12, cloud=0.0, wind=32.22, temperature=6.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:40:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:37:00')
2025-12-13T02:40:48.415 [DEBUG] [Thread-81071] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:40:48.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:40:48.511 [DEBUG] [Thread-81074] [transport.py] [_log()] starting thread (client mode): 0xf813f730
2025-12-13T02:40:48.511 [DEBUG] [Thread-81074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:40:48.527 [DEBUG] [Thread-81074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:40:48.527 [INFO] [Thread-81074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:40:48.534 [DEBUG] [Thread-81074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] client lang: <none>
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] server lang: <none>
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] kex follows: False
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] Compression: none
2025-12-13T02:40:48.535 [DEBUG] [Thread-81074] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:40:48.591 [DEBUG] [Thread-81074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:40:48.591 [DEBUG] [Thread-81074] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:40:48.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:40:48.592 [DEBUG] [Thread-81074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:40:48.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:40:48.647 [DEBUG] [Thread-81074] [transport.py] [_log()] userauth is OK
2025-12-13T02:40:48.648 [DEBUG] [Thread-81074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:40:48.648 [DEBUG] [Thread-81074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:40:48.648 [DEBUG] [Thread-81074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:40:48.648 [DEBUG] [Thread-81074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:40:48.667 [INFO] [Thread-81074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:40:48.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:40:48.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:40:49.496 [DEBUG] [Thread-81074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:40:49.496 [DEBUG] [Thread-81074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:40:49.544 [DEBUG] [Thread-81074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:40:49.544 [DEBUG] [Thread-81074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:40:49.553 [DEBUG] [Thread-81074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:40:49.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:40:49.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')
2025-12-13T02:40:49.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:40:49.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:40:49.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:40:49.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:40:49.588 [DEBUG] [Thread-81074] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:40:52.708 [DEBUG] [Thread-81076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:07.743 [DEBUG] [Thread-81077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:19.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:41:19.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:41:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:41:20.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 41, 2), 1.79, 88.09, 0.0, 29.68, 6.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:41:20.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:41:02
2025-12-13T02:41:20.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:41:20.555 [DEBUG] [Thread-81078] [transport.py] [_log()] starting thread (client mode): 0xf5700e20
2025-12-13T02:41:20.555 [DEBUG] [Thread-81078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:41:20.574 [DEBUG] [Thread-81078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:41:20.574 [INFO] [Thread-81078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] client lang: <none>
2025-12-13T02:41:20.577 [DEBUG] [Thread-81078] [transport.py] [_log()] server lang: <none>
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] kex follows: False
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] Compression: none
2025-12-13T02:41:20.578 [DEBUG] [Thread-81078] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:41:20.587 [DEBUG] [Thread-81078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:41:20.587 [DEBUG] [Thread-81078] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:41:20.588 [DEBUG] [Thread-81078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:41:20.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:41:20.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:41:20.589 [DEBUG] [Thread-81078] [transport.py] [_log()] userauth is OK
2025-12-13T02:41:20.589 [DEBUG] [Thread-81078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:41:20.589 [DEBUG] [Thread-81078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:41:20.590 [DEBUG] [Thread-81078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:41:20.590 [DEBUG] [Thread-81078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:41:20.624 [INFO] [Thread-81078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:41:20.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:41:21.225 [DEBUG] [Thread-81078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:41:21.225 [DEBUG] [Thread-81078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:41:21.226 [DEBUG] [Thread-81078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:41:21.266 [DEBUG] [Thread-81078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:41:21.266 [DEBUG] [Thread-81078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:41:21.269 [DEBUG] [Thread-81078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:41:21.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:41:21.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:41:21.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:41:21.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:41:21.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:41:21.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:41:21.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:41:21.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:41:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:41:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.028567 -999.00   +6.60  33.93     90   +5.20 1 1 2 3 1     0    0 1.44 4.32 ZNESW 33.9 33.9 306.2 41.6 7.6 -22.7 7.3 -21.6 7.0 -21.3 7.4 -22.3
2025-12-13T02:41:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:41:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:41:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.028567
2025-12-13T02:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:41:21.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:41:02', tmtdew=1.79, humidity=88.09, cloud=0.0, wind=29.68, temperature=6.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:41:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[0.28174999999999883, 0.7202500000000001, 0.7137500000000001, 0.31649999999999956, 0.11050000000000004, 0.21424999999999983, 0.39700000000000024, 0.7517500000000004, 0.8724999999999996, 1.1014999999999997, 0.8617499999999989, 0.5990000000000002, 0.20350000000000001, 0.15625, 0.4269999999999996, 1.3449999999999989, 1.3707499999999992, 0.7854999999999999, 0.5869999999999989, 0.2802499999999988, 0.36799999999999855, 0.2732499999999991, 0.8197500000000009, nan, nan, 0.45650000000000013, 0.2717500000000008, 0.42650000000000166, nan, 0.713000000000001, nan, nan, nan], zp_timestamp='2025-12-13T00:37:00')
2025-12-13T02:41:21.295 [DEBUG] [Thread-81078] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:41:21.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:41:21.391 [DEBUG] [Thread-81081] [transport.py] [_log()] starting thread (client mode): 0xf575c4f0
2025-12-13T02:41:21.391 [DEBUG] [Thread-81081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:41:21.406 [DEBUG] [Thread-81081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:41:21.406 [INFO] [Thread-81081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:41:21.413 [DEBUG] [Thread-81081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] client lang: <none>
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] server lang: <none>
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] kex follows: False
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:41:21.414 [DEBUG] [Thread-81081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:41:21.415 [DEBUG] [Thread-81081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:41:21.415 [DEBUG] [Thread-81081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:41:21.415 [DEBUG] [Thread-81081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:41:21.415 [DEBUG] [Thread-81081] [transport.py] [_log()] Compression: none
2025-12-13T02:41:21.415 [DEBUG] [Thread-81081] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:41:21.471 [DEBUG] [Thread-81081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:41:21.472 [DEBUG] [Thread-81081] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:41:21.472 [DEBUG] [Thread-81081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:41:21.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:41:21.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:41:21.527 [DEBUG] [Thread-81081] [transport.py] [_log()] userauth is OK
2025-12-13T02:41:21.528 [DEBUG] [Thread-81081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:41:21.528 [DEBUG] [Thread-81081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:41:21.528 [DEBUG] [Thread-81081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:41:21.528 [DEBUG] [Thread-81081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:41:21.548 [INFO] [Thread-81081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:41:21.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:41:21.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:41:22.441 [DEBUG] [Thread-81081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:41:22.441 [DEBUG] [Thread-81081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:41:22.489 [DEBUG] [Thread-81081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:41:22.489 [DEBUG] [Thread-81081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:41:22.498 [DEBUG] [Thread-81081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:41:22.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:41:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:41:22.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:41:22.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:41:22.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:41:22.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:41:22.532 [DEBUG] [Thread-81081] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:41:22.769 [DEBUG] [Thread-81083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:29.539 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:29.540 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:35.435 [DEBUG] [Thread-81084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:37.812 [DEBUG] [Thread-81085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:41:52.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:41:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:41:52.840 [DEBUG] [Thread-81086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:41:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 41, 34), 1.83, 88.12, 0.0, 30.03, 6.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:41:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:41:34
2025-12-13T02:41:53.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:41:53.516 [DEBUG] [Thread-81087] [transport.py] [_log()] starting thread (client mode): 0xf57032b0
2025-12-13T02:41:53.516 [DEBUG] [Thread-81087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:41:53.535 [DEBUG] [Thread-81087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:41:53.536 [INFO] [Thread-81087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] client lang: <none>
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] server lang: <none>
2025-12-13T02:41:53.539 [DEBUG] [Thread-81087] [transport.py] [_log()] kex follows: False
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] Compression: none
2025-12-13T02:41:53.540 [DEBUG] [Thread-81087] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:41:53.557 [DEBUG] [Thread-81087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:41:53.558 [DEBUG] [Thread-81087] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:41:53.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:41:53.560 [DEBUG] [Thread-81087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:41:53.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:41:53.562 [DEBUG] [Thread-81087] [transport.py] [_log()] userauth is OK
2025-12-13T02:41:53.562 [DEBUG] [Thread-81087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:41:53.562 [DEBUG] [Thread-81087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:41:53.562 [DEBUG] [Thread-81087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:41:53.562 [DEBUG] [Thread-81087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:41:53.585 [INFO] [Thread-81087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:41:53.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:41:54.181 [DEBUG] [Thread-81087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:41:54.181 [DEBUG] [Thread-81087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:41:54.182 [DEBUG] [Thread-81087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:41:54.222 [DEBUG] [Thread-81087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:41:54.222 [DEBUG] [Thread-81087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:41:54.225 [DEBUG] [Thread-81087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:41:54.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:41:54.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:41:54.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:41:54.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:41:54.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:41:54.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:41:54.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:41:54.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:41:54.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:41:54.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.028914 -999.00   +6.50  34.44     90   +5.10 1 1 2 3 1     0    0 1.47 4.83 ZNESW 34.4 34.4 313.8 45.1 7.5 -23.2 7.3 -22.0 7.1 -21.1 7.4 -22.2
2025-12-13T02:41:54.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:41:54.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:41:54.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.028914
2025-12-13T02:41:54.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:41:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:41:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:41:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:41:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:41:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:41:34', tmtdew=1.83, humidity=88.12, cloud=0.0, wind=30.03, temperature=6.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:41:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:40:00')
2025-12-13T02:41:54.250 [DEBUG] [Thread-81087] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:41:54.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:41:54.351 [DEBUG] [Thread-81090] [transport.py] [_log()] starting thread (client mode): 0xf572e920
2025-12-13T02:41:54.351 [DEBUG] [Thread-81090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:41:54.366 [DEBUG] [Thread-81090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:41:54.366 [INFO] [Thread-81090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:41:54.373 [DEBUG] [Thread-81090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:41:54.373 [DEBUG] [Thread-81090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:41:54.373 [DEBUG] [Thread-81090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] client lang: <none>
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] server lang: <none>
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] kex follows: False
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] Compression: none
2025-12-13T02:41:54.374 [DEBUG] [Thread-81090] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:41:54.435 [DEBUG] [Thread-81090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:41:54.436 [DEBUG] [Thread-81090] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:41:54.436 [DEBUG] [Thread-81090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:41:54.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:41:54.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:41:54.491 [DEBUG] [Thread-81090] [transport.py] [_log()] userauth is OK
2025-12-13T02:41:54.491 [DEBUG] [Thread-81090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:41:54.491 [DEBUG] [Thread-81090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:41:54.491 [DEBUG] [Thread-81090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:41:54.492 [DEBUG] [Thread-81090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:41:54.510 [INFO] [Thread-81090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:41:54.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:41:54.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:41:55.316 [DEBUG] [Thread-81090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:41:55.316 [DEBUG] [Thread-81090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:41:55.364 [DEBUG] [Thread-81090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:41:55.364 [DEBUG] [Thread-81090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:41:55.373 [DEBUG] [Thread-81090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:41:55.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:41:55.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:41:55.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:41:55.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:41:55.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:41:55.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:41:55.407 [DEBUG] [Thread-81090] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:42:07.867 [DEBUG] [Thread-81092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:22.912 [DEBUG] [Thread-81093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:25.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:42:25.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:42:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:42:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 42, 6), 1.84, 88.09, 0.0, 29.09, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:42:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:42:06
2025-12-13T02:42:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:42:26.418 [DEBUG] [Thread-81094] [transport.py] [_log()] starting thread (client mode): 0xf8189600
2025-12-13T02:42:26.418 [DEBUG] [Thread-81094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:42:26.435 [DEBUG] [Thread-81094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:42:26.435 [INFO] [Thread-81094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:42:26.438 [DEBUG] [Thread-81094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] client lang: <none>
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] server lang: <none>
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] kex follows: False
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] Compression: none
2025-12-13T02:42:26.439 [DEBUG] [Thread-81094] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:42:26.453 [DEBUG] [Thread-81094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:42:26.453 [DEBUG] [Thread-81094] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:42:26.453 [DEBUG] [Thread-81094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:42:26.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:42:26.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:42:26.454 [DEBUG] [Thread-81094] [transport.py] [_log()] userauth is OK
2025-12-13T02:42:26.454 [DEBUG] [Thread-81094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:42:26.454 [DEBUG] [Thread-81094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:42:26.454 [DEBUG] [Thread-81094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:42:26.454 [DEBUG] [Thread-81094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:42:26.473 [INFO] [Thread-81094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:42:26.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:42:27.050 [DEBUG] [Thread-81094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:42:27.051 [DEBUG] [Thread-81094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:42:27.051 [DEBUG] [Thread-81094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:42:27.091 [DEBUG] [Thread-81094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:42:27.091 [DEBUG] [Thread-81094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:42:27.093 [DEBUG] [Thread-81094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:42:27.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:42:27.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:42:27.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:42:27.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:42:27.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:42:27.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:42:27.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:42:27.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:42:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:42:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.029261 -999.00   +6.50  32.07     90   +5.10 1 1 2 3 1     0    0 1.49 5.09 ZNESW 32.1 32.1 310.4 45.2 7.5 -23.3 7.3 -21.9 7.0 -20.8 7.4 -22.1
2025-12-13T02:42:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:42:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:42:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.029261
2025-12-13T02:42:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:42:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:42:27.116 [DEBUG] [Thread-81094] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:42:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:42:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:42:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:42:27.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:42:06', tmtdew=1.84, humidity=88.09, cloud=0.0, wind=29.09, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:42:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:40:00')
2025-12-13T02:42:27.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:42:27.211 [DEBUG] [Thread-81097] [transport.py] [_log()] starting thread (client mode): 0xf818aef0
2025-12-13T02:42:27.212 [DEBUG] [Thread-81097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:42:27.226 [DEBUG] [Thread-81097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:42:27.226 [INFO] [Thread-81097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] client lang: <none>
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] server lang: <none>
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] kex follows: False
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:42:27.234 [DEBUG] [Thread-81097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:42:27.235 [DEBUG] [Thread-81097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:42:27.235 [DEBUG] [Thread-81097] [transport.py] [_log()] Compression: none
2025-12-13T02:42:27.235 [DEBUG] [Thread-81097] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:42:27.291 [DEBUG] [Thread-81097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:42:27.292 [DEBUG] [Thread-81097] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:42:27.292 [DEBUG] [Thread-81097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:42:27.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:42:27.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:42:27.348 [DEBUG] [Thread-81097] [transport.py] [_log()] userauth is OK
2025-12-13T02:42:27.348 [DEBUG] [Thread-81097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:42:27.348 [DEBUG] [Thread-81097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:42:27.348 [DEBUG] [Thread-81097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:42:27.348 [DEBUG] [Thread-81097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:42:27.371 [INFO] [Thread-81097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:42:27.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:42:27.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:42:28.200 [DEBUG] [Thread-81097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:42:28.200 [DEBUG] [Thread-81097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:42:28.248 [DEBUG] [Thread-81097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:42:28.248 [DEBUG] [Thread-81097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:42:28.257 [DEBUG] [Thread-81097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:42:28.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:42:28.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:42:28.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:42:28.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:42:28.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:42:28.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:42:28.292 [DEBUG] [Thread-81097] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:42:29.746 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:29.748 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:35.513 [DEBUG] [Thread-81099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:37.938 [DEBUG] [Thread-81100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:52.985 [DEBUG] [Thread-81101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:42:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:42:58.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:42:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:42:59.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 42, 38), 1.84, 88.09, 0.0, 30.33, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:42:59.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:42:38
2025-12-13T02:42:59.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:42:59.281 [DEBUG] [Thread-81102] [transport.py] [_log()] starting thread (client mode): 0xf57ab430
2025-12-13T02:42:59.281 [DEBUG] [Thread-81102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:42:59.303 [DEBUG] [Thread-81102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:42:59.303 [INFO] [Thread-81102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:42:59.306 [DEBUG] [Thread-81102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] client lang: <none>
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] server lang: <none>
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] kex follows: False
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:42:59.307 [DEBUG] [Thread-81102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:42:59.308 [DEBUG] [Thread-81102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:42:59.308 [DEBUG] [Thread-81102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:42:59.308 [DEBUG] [Thread-81102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:42:59.308 [DEBUG] [Thread-81102] [transport.py] [_log()] Compression: none
2025-12-13T02:42:59.308 [DEBUG] [Thread-81102] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:42:59.326 [DEBUG] [Thread-81102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:42:59.326 [DEBUG] [Thread-81102] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:42:59.327 [DEBUG] [Thread-81102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:42:59.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:42:59.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:42:59.329 [DEBUG] [Thread-81102] [transport.py] [_log()] userauth is OK
2025-12-13T02:42:59.330 [DEBUG] [Thread-81102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:42:59.330 [DEBUG] [Thread-81102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:42:59.330 [DEBUG] [Thread-81102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:42:59.330 [DEBUG] [Thread-81102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:42:59.346 [INFO] [Thread-81102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:42:59.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:43:00.008 [DEBUG] [Thread-81102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:43:00.008 [DEBUG] [Thread-81102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:43:00.008 [DEBUG] [Thread-81102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:43:00.050 [DEBUG] [Thread-81102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:43:00.050 [DEBUG] [Thread-81102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:43:00.052 [DEBUG] [Thread-81102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:43:00.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:43:00.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:43:00.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:43:00.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:43:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:43:00.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:43:00.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.029608 -999.00   +6.60  33.11     90   +5.20 1 1 2 3 1     0    0 1.50 5.67 ZNESW 33.1 33.1 296.6 43.5 7.5 -22.9 7.3 -21.9 7.0 -20.7 7.4 -22.0
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.029608
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:43:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:42:38', tmtdew=1.84, humidity=88.09, cloud=0.0, wind=30.33, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:42:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:40:00')
2025-12-13T02:43:00.070 [DEBUG] [Thread-81102] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:43:00.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:43:00.154 [DEBUG] [Thread-81105] [transport.py] [_log()] starting thread (client mode): 0xf81889a0
2025-12-13T02:43:00.155 [DEBUG] [Thread-81105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:43:00.169 [DEBUG] [Thread-81105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:43:00.169 [INFO] [Thread-81105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:43:00.176 [DEBUG] [Thread-81105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] client lang: <none>
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] server lang: <none>
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] kex follows: False
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] Compression: none
2025-12-13T02:43:00.177 [DEBUG] [Thread-81105] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:43:00.233 [DEBUG] [Thread-81105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:43:00.234 [DEBUG] [Thread-81105] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:43:00.234 [DEBUG] [Thread-81105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:43:00.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:43:00.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:43:00.291 [DEBUG] [Thread-81105] [transport.py] [_log()] userauth is OK
2025-12-13T02:43:00.291 [DEBUG] [Thread-81105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:43:00.291 [DEBUG] [Thread-81105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:43:00.291 [DEBUG] [Thread-81105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:43:00.291 [DEBUG] [Thread-81105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:43:00.305 [INFO] [Thread-81105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:43:00.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:43:00.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:43:01.117 [DEBUG] [Thread-81105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:43:01.117 [DEBUG] [Thread-81105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:43:01.164 [DEBUG] [Thread-81105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:43:01.164 [DEBUG] [Thread-81105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:43:01.173 [DEBUG] [Thread-81105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:43:01.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:43:01.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:43:01.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:43:01.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:43:01.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:43:01.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:43:01.204 [DEBUG] [Thread-81105] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:43:08.013 [DEBUG] [Thread-81107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:43:23.059 [DEBUG] [Thread-81108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:43:29.952 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:43:29.953 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:43:31.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:43:31.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:43:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:43:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 43, 10), 1.84, 88.09, 0.0, 33.17, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:43:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:43:10
2025-12-13T02:43:32.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:43:32.192 [DEBUG] [Thread-81109] [transport.py] [_log()] starting thread (client mode): 0xf57a8f40
2025-12-13T02:43:32.192 [DEBUG] [Thread-81109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:43:32.214 [DEBUG] [Thread-81109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:43:32.214 [INFO] [Thread-81109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:43:32.217 [DEBUG] [Thread-81109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:43:32.217 [DEBUG] [Thread-81109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] client lang: <none>
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] server lang: <none>
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] kex follows: False
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:43:32.218 [DEBUG] [Thread-81109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:43:32.219 [DEBUG] [Thread-81109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:43:32.219 [DEBUG] [Thread-81109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:43:32.219 [DEBUG] [Thread-81109] [transport.py] [_log()] Compression: none
2025-12-13T02:43:32.219 [DEBUG] [Thread-81109] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:43:32.237 [DEBUG] [Thread-81109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:43:32.238 [DEBUG] [Thread-81109] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:43:32.239 [DEBUG] [Thread-81109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:43:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:43:32.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:43:32.241 [DEBUG] [Thread-81109] [transport.py] [_log()] userauth is OK
2025-12-13T02:43:32.241 [DEBUG] [Thread-81109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:43:32.241 [DEBUG] [Thread-81109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:43:32.241 [DEBUG] [Thread-81109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:43:32.241 [DEBUG] [Thread-81109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:43:32.259 [INFO] [Thread-81109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:43:32.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:43:32.869 [DEBUG] [Thread-81109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:43:32.870 [DEBUG] [Thread-81109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:43:32.870 [DEBUG] [Thread-81109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:43:32.911 [DEBUG] [Thread-81109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:43:32.911 [DEBUG] [Thread-81109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:43:32.913 [DEBUG] [Thread-81109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:43:32.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:43:32.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:43:32.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:43:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:43:32.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:43:32.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:43:32.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:43:32.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:43:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:43:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.029955 -999.00   +6.50  33.44     90   +5.10 1 1 2 3 1     0    0 1.50 5.97 ZNESW 33.4 33.4 297.8 44.7 7.5 -23.0 7.3 -22.1 7.0 -20.6 7.4 -22.0
2025-12-13T02:43:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:43:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:43:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.029955
2025-12-13T02:43:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:43:32.934 [DEBUG] [Thread-81109] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:43:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:43:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:43:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:43:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:43:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:43:10', tmtdew=1.84, humidity=88.09, cloud=0.0, wind=33.17, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:43:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:40:00')
2025-12-13T02:43:33.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:43:33.032 [DEBUG] [Thread-81112] [transport.py] [_log()] starting thread (client mode): 0xf813d690
2025-12-13T02:43:33.032 [DEBUG] [Thread-81112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:43:33.052 [DEBUG] [Thread-81112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:43:33.052 [INFO] [Thread-81112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:43:33.060 [DEBUG] [Thread-81112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:43:33.060 [DEBUG] [Thread-81112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:43:33.060 [DEBUG] [Thread-81112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:43:33.060 [DEBUG] [Thread-81112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] client lang: <none>
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] server lang: <none>
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] kex follows: False
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:43:33.061 [DEBUG] [Thread-81112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:43:33.062 [DEBUG] [Thread-81112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:43:33.062 [DEBUG] [Thread-81112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:43:33.062 [DEBUG] [Thread-81112] [transport.py] [_log()] Compression: none
2025-12-13T02:43:33.062 [DEBUG] [Thread-81112] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:43:33.119 [DEBUG] [Thread-81112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:43:33.120 [DEBUG] [Thread-81112] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:43:33.120 [DEBUG] [Thread-81112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:43:33.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:43:33.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:43:33.175 [DEBUG] [Thread-81112] [transport.py] [_log()] userauth is OK
2025-12-13T02:43:33.175 [DEBUG] [Thread-81112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:43:33.175 [DEBUG] [Thread-81112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:43:33.176 [DEBUG] [Thread-81112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:43:33.176 [DEBUG] [Thread-81112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:43:33.195 [INFO] [Thread-81112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:43:33.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:43:33.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:43:34.020 [DEBUG] [Thread-81112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:43:34.020 [DEBUG] [Thread-81112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:43:34.068 [DEBUG] [Thread-81112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:43:34.068 [DEBUG] [Thread-81112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:43:34.077 [DEBUG] [Thread-81112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:43:34.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:43:34.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:43:34.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:43:34.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:43:34.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:43:34.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:43:34.111 [DEBUG] [Thread-81112] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:43:35.584 [DEBUG] [Thread-81114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:43:38.088 [DEBUG] [Thread-81115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:43:53.123 [DEBUG] [Thread-81116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:04.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:44:04.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:44:04.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:44:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 43, 42), 1.85, 88.02, 0.0, 34.39, 6.65, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:44:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:43:42
2025-12-13T02:44:04.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:44:05.083 [DEBUG] [Thread-81117] [transport.py] [_log()] starting thread (client mode): 0xf570ca00
2025-12-13T02:44:05.083 [DEBUG] [Thread-81117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:44:05.101 [DEBUG] [Thread-81117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:44:05.101 [INFO] [Thread-81117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:44:05.102 [DEBUG] [Thread-81117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] client lang: <none>
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] server lang: <none>
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] kex follows: False
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] Compression: none
2025-12-13T02:44:05.103 [DEBUG] [Thread-81117] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:44:05.119 [DEBUG] [Thread-81117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:44:05.119 [DEBUG] [Thread-81117] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:44:05.120 [DEBUG] [Thread-81117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:44:05.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:44:05.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:44:05.121 [DEBUG] [Thread-81117] [transport.py] [_log()] userauth is OK
2025-12-13T02:44:05.122 [DEBUG] [Thread-81117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:44:05.122 [DEBUG] [Thread-81117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:44:05.122 [DEBUG] [Thread-81117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:44:05.122 [DEBUG] [Thread-81117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:44:05.142 [INFO] [Thread-81117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:44:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:44:05.698 [DEBUG] [Thread-81117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:44:05.698 [DEBUG] [Thread-81117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:44:05.698 [DEBUG] [Thread-81117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:44:05.739 [DEBUG] [Thread-81117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:44:05.739 [DEBUG] [Thread-81117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:44:05.741 [DEBUG] [Thread-81117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:44:05.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:44:05.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:44:05.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:44:05.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:44:05.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:44:05.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:44:05.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:44:05.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:44:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:44:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.030303 -999.00   +6.50  31.71     90   +5.00 1 1 2 3 1     0    0 1.51 6.45 ZNESW 31.7 31.7 301.0 50.9 7.5 -22.9 7.3 -21.8 7.0 -20.5 7.3 -21.8
2025-12-13T02:44:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:44:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:44:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.030303
2025-12-13T02:44:05.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:44:05.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:44:05.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:44:05.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:44:05.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:44:05.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:43:42', tmtdew=1.85, humidity=88.02, cloud=0.0, wind=34.39, temperature=6.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:43:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:40:00')
2025-12-13T02:44:05.760 [DEBUG] [Thread-81117] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:44:05.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:44:05.868 [DEBUG] [Thread-81120] [transport.py] [_log()] starting thread (client mode): 0xf57737f0
2025-12-13T02:44:05.868 [DEBUG] [Thread-81120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:44:05.883 [DEBUG] [Thread-81120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:44:05.883 [INFO] [Thread-81120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] client lang: <none>
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] server lang: <none>
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] kex follows: False
2025-12-13T02:44:05.891 [DEBUG] [Thread-81120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:44:05.892 [DEBUG] [Thread-81120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:44:05.892 [DEBUG] [Thread-81120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:44:05.892 [DEBUG] [Thread-81120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:44:05.892 [DEBUG] [Thread-81120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:44:05.892 [DEBUG] [Thread-81120] [transport.py] [_log()] Compression: none
2025-12-13T02:44:05.892 [DEBUG] [Thread-81120] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:44:05.955 [DEBUG] [Thread-81120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:44:05.955 [DEBUG] [Thread-81120] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:44:05.956 [DEBUG] [Thread-81120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:44:05.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:44:05.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:44:06.011 [DEBUG] [Thread-81120] [transport.py] [_log()] userauth is OK
2025-12-13T02:44:06.011 [DEBUG] [Thread-81120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:44:06.011 [DEBUG] [Thread-81120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:44:06.012 [DEBUG] [Thread-81120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:44:06.012 [DEBUG] [Thread-81120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:44:06.031 [INFO] [Thread-81120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:44:06.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:44:06.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:44:06.852 [DEBUG] [Thread-81120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:44:06.852 [DEBUG] [Thread-81120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:44:06.900 [DEBUG] [Thread-81120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:44:06.900 [DEBUG] [Thread-81120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:44:06.909 [DEBUG] [Thread-81120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:44:06.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:44:06.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:44:06.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:44:06.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:44:06.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:44:06.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:44:06.944 [DEBUG] [Thread-81120] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:44:08.152 [DEBUG] [Thread-81122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:23.193 [DEBUG] [Thread-81123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:30.168 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:30.169 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:35.659 [DEBUG] [Thread-81124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:36.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:44:36.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:44:36.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:44:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 44, 14), 1.85, 88.04, 0.0, 31.07, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:44:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:44:14
2025-12-13T02:44:37.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:44:37.897 [DEBUG] [Thread-81125] [transport.py] [_log()] starting thread (client mode): 0xf57cad40
2025-12-13T02:44:37.897 [DEBUG] [Thread-81125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:44:37.917 [DEBUG] [Thread-81125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:44:37.917 [INFO] [Thread-81125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] client lang: <none>
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] server lang: <none>
2025-12-13T02:44:37.918 [DEBUG] [Thread-81125] [transport.py] [_log()] kex follows: False
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] Compression: none
2025-12-13T02:44:37.919 [DEBUG] [Thread-81125] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:44:37.928 [DEBUG] [Thread-81125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:44:37.928 [DEBUG] [Thread-81125] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:44:37.929 [DEBUG] [Thread-81125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:44:37.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:44:37.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:44:37.931 [DEBUG] [Thread-81125] [transport.py] [_log()] userauth is OK
2025-12-13T02:44:37.931 [DEBUG] [Thread-81125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:44:37.931 [DEBUG] [Thread-81125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:44:37.931 [DEBUG] [Thread-81125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:44:37.931 [DEBUG] [Thread-81125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:44:37.955 [INFO] [Thread-81125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:44:37.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:44:38.222 [DEBUG] [Thread-81127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:44:38.628 [DEBUG] [Thread-81125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:44:38.628 [DEBUG] [Thread-81125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:44:38.628 [DEBUG] [Thread-81125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:44:38.669 [DEBUG] [Thread-81125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:44:38.669 [DEBUG] [Thread-81125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:44:38.672 [DEBUG] [Thread-81125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:44:38.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:44:38.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:44:38.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:44:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:44:38.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:44:38.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:44:38.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:44:38.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:44:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:44:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.030650 -999.00   +6.50  29.68     90   +5.00 1 1 1 3 1     0    0 1.55 6.34 ZNESW 29.7 29.7 309.8 46.0 7.5 -22.7 7.2 -22.0 7.0 -20.5 7.3 -21.7
2025-12-13T02:44:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:44:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:44:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.030650
2025-12-13T02:44:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:44:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:44:38.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:44:38.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:44:38.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:44:38.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:44:14', tmtdew=1.85, humidity=88.04, cloud=0.0, wind=31.07, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:44:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:40:00')
2025-12-13T02:44:38.697 [DEBUG] [Thread-81125] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:44:38.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:44:38.793 [DEBUG] [Thread-81129] [transport.py] [_log()] starting thread (client mode): 0xf5772ef0
2025-12-13T02:44:38.793 [DEBUG] [Thread-81129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:44:38.809 [DEBUG] [Thread-81129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:44:38.809 [INFO] [Thread-81129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:44:38.816 [DEBUG] [Thread-81129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:44:38.816 [DEBUG] [Thread-81129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:44:38.817 [DEBUG] [Thread-81129] [transport.py] [_log()] client lang: <none>
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] server lang: <none>
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] kex follows: False
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] Compression: none
2025-12-13T02:44:38.818 [DEBUG] [Thread-81129] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:44:38.875 [DEBUG] [Thread-81129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:44:38.876 [DEBUG] [Thread-81129] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:44:38.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:44:38.877 [DEBUG] [Thread-81129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:44:38.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:44:38.931 [DEBUG] [Thread-81129] [transport.py] [_log()] userauth is OK
2025-12-13T02:44:38.931 [DEBUG] [Thread-81129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:44:38.932 [DEBUG] [Thread-81129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:44:38.932 [DEBUG] [Thread-81129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:44:38.932 [DEBUG] [Thread-81129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:44:38.951 [INFO] [Thread-81129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:44:38.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:44:38.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:44:39.806 [DEBUG] [Thread-81129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:44:39.806 [DEBUG] [Thread-81129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:44:39.854 [DEBUG] [Thread-81129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:44:39.854 [DEBUG] [Thread-81129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:44:39.863 [DEBUG] [Thread-81129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:44:39.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:44:39.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:44: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') -> 00000000
2025-12-13T02:44:39.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:44:39.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:44:39.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:44:39.898 [DEBUG] [Thread-81129] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:44:53.256 [DEBUG] [Thread-81131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:08.307 [DEBUG] [Thread-81132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:45:09.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:45:09.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:45:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 44, 46), 1.9, 87.56, 0.0, 28.18, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:45:10.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:44:46
2025-12-13T02:45:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:45:10.887 [DEBUG] [Thread-81133] [transport.py] [_log()] starting thread (client mode): 0xf57aa170
2025-12-13T02:45:10.887 [DEBUG] [Thread-81133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:45:10.903 [DEBUG] [Thread-81133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:45:10.903 [INFO] [Thread-81133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] client lang: <none>
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] server lang: <none>
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] kex follows: False
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] Compression: none
2025-12-13T02:45:10.906 [DEBUG] [Thread-81133] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:45:10.921 [DEBUG] [Thread-81133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:45:10.921 [DEBUG] [Thread-81133] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:45:10.921 [DEBUG] [Thread-81133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:45:10.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:45:10.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:45:10.923 [DEBUG] [Thread-81133] [transport.py] [_log()] userauth is OK
2025-12-13T02:45:10.923 [DEBUG] [Thread-81133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:45:10.923 [DEBUG] [Thread-81133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:45:10.923 [DEBUG] [Thread-81133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:45:10.924 [DEBUG] [Thread-81133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:45:10.946 [INFO] [Thread-81133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:45:10.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:45:11.811 [DEBUG] [Thread-81133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:45:11.811 [DEBUG] [Thread-81133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:45:11.812 [DEBUG] [Thread-81133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:45:11.852 [DEBUG] [Thread-81133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:45:11.852 [DEBUG] [Thread-81133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:45:11.855 [DEBUG] [Thread-81133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:45:11.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:45:11.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:45:11.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:45:11.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:45:11.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:45:11.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:45:11.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:45:11.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:45:11.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:45:11.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.030650 -999.00   +6.50  29.68     90   +5.00 1 1 1 3 1     0    0 1.55 6.34 ZNESW 29.7 29.7 309.8 46.0 7.5 -22.7 7.2 -22.0 7.0 -20.5 7.3 -21.7
2025-12-13T02:45:11.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:45:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:45:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.030650
2025-12-13T02:45:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:45:11.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:45:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:45:11.879 [DEBUG] [Thread-81133] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:45:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:45:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:45:11.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:44:46', tmtdew=1.9, humidity=87.56, cloud=0.0, wind=28.18, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:44:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:43:00')
2025-12-13T02:45:11.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:45:11.976 [DEBUG] [Thread-81136] [transport.py] [_log()] starting thread (client mode): 0xf57a83d0
2025-12-13T02:45:11.976 [DEBUG] [Thread-81136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:45:11.993 [DEBUG] [Thread-81136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:45:11.993 [INFO] [Thread-81136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:45:12.001 [DEBUG] [Thread-81136] [transport.py] [_log()] client lang: <none>
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] server lang: <none>
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] kex follows: False
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] Compression: none
2025-12-13T02:45:12.002 [DEBUG] [Thread-81136] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:45:12.059 [DEBUG] [Thread-81136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:45:12.059 [DEBUG] [Thread-81136] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:45:12.060 [DEBUG] [Thread-81136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:45:12.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:45:12.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:45:12.115 [DEBUG] [Thread-81136] [transport.py] [_log()] userauth is OK
2025-12-13T02:45:12.115 [DEBUG] [Thread-81136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:45:12.115 [DEBUG] [Thread-81136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:45:12.115 [DEBUG] [Thread-81136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:45:12.116 [DEBUG] [Thread-81136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:45:12.134 [INFO] [Thread-81136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:45:12.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:45:12.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:45:12.941 [DEBUG] [Thread-81136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:45:12.941 [DEBUG] [Thread-81136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:45:12.989 [DEBUG] [Thread-81136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:45:12.989 [DEBUG] [Thread-81136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:45:12.997 [DEBUG] [Thread-81136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:45:13.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:45:13.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:45:13.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:45:13.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:45:13.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:45:13.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:45:13.032 [DEBUG] [Thread-81136] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:45:23.337 [DEBUG] [Thread-81138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:30.374 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:30.375 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:35.737 [DEBUG] [Thread-81139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:38.387 [DEBUG] [Thread-81140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:45:43.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:45:43.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:45:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:45:43.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 45, 18), 1.91, 87.49, 0.0, 28.85, 6.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:45:43.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:45:18
2025-12-13T02:45:43.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:45:44.016 [DEBUG] [Thread-81141] [transport.py] [_log()] starting thread (client mode): 0xf57aa320
2025-12-13T02:45:44.016 [DEBUG] [Thread-81141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:45:44.035 [DEBUG] [Thread-81141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:45:44.035 [INFO] [Thread-81141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:45:44.038 [DEBUG] [Thread-81141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] client lang: <none>
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] server lang: <none>
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] kex follows: False
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:45:44.039 [DEBUG] [Thread-81141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:45:44.040 [DEBUG] [Thread-81141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:45:44.040 [DEBUG] [Thread-81141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:45:44.040 [DEBUG] [Thread-81141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:45:44.040 [DEBUG] [Thread-81141] [transport.py] [_log()] Compression: none
2025-12-13T02:45:44.040 [DEBUG] [Thread-81141] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:45:44.058 [DEBUG] [Thread-81141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:45:44.058 [DEBUG] [Thread-81141] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:45:44.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:45:44.060 [DEBUG] [Thread-81141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:45:44.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:45:44.062 [DEBUG] [Thread-81141] [transport.py] [_log()] userauth is OK
2025-12-13T02:45:44.062 [DEBUG] [Thread-81141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:45:44.062 [DEBUG] [Thread-81141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:45:44.062 [DEBUG] [Thread-81141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:45:44.063 [DEBUG] [Thread-81141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:45:44.081 [INFO] [Thread-81141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:45:44.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:45:44.894 [DEBUG] [Thread-81141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:45:44.895 [DEBUG] [Thread-81141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:45:44.895 [DEBUG] [Thread-81141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:45:44.936 [DEBUG] [Thread-81141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:45:44.936 [DEBUG] [Thread-81141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:45:44.939 [DEBUG] [Thread-81141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:45:44.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:45:44.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:45:44.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:45:44.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:45:44.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:45:44.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:45:44.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:45:44.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:45:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:45:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.031344 -999.00   +6.60  29.89     90   +5.10 1 1 1 3 1     0    0 1.52 6.70 ZNESW 29.9 29.9 304.0 46.1 7.5 -22.7 7.3 -22.0 7.0 -20.2 7.3 -21.5
2025-12-13T02:45:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:45:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:45:44.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.031344
2025-12-13T02:45:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:45:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:45:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:45:44.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:45:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:45:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:45:18', tmtdew=1.91, humidity=87.49, cloud=0.0, wind=28.85, temperature=6.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:45:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:43:00')
2025-12-13T02:45:44.965 [DEBUG] [Thread-81141] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:45:45.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:45:45.060 [DEBUG] [Thread-81144] [transport.py] [_log()] starting thread (client mode): 0xf572ed40
2025-12-13T02:45:45.060 [DEBUG] [Thread-81144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:45:45.081 [DEBUG] [Thread-81144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:45:45.081 [INFO] [Thread-81144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] client lang: <none>
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] server lang: <none>
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] kex follows: False
2025-12-13T02:45:45.089 [DEBUG] [Thread-81144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:45:45.090 [DEBUG] [Thread-81144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:45:45.090 [DEBUG] [Thread-81144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:45:45.090 [DEBUG] [Thread-81144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:45:45.090 [DEBUG] [Thread-81144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:45:45.090 [DEBUG] [Thread-81144] [transport.py] [_log()] Compression: none
2025-12-13T02:45:45.090 [DEBUG] [Thread-81144] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:45:45.147 [DEBUG] [Thread-81144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:45:45.147 [DEBUG] [Thread-81144] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:45:45.147 [DEBUG] [Thread-81144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:45:45.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:45:45.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:45:45.203 [DEBUG] [Thread-81144] [transport.py] [_log()] userauth is OK
2025-12-13T02:45:45.203 [DEBUG] [Thread-81144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:45:45.203 [DEBUG] [Thread-81144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:45:45.203 [DEBUG] [Thread-81144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:45:45.203 [DEBUG] [Thread-81144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:45:45.223 [INFO] [Thread-81144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:45:45.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:45:45.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:45:46.087 [DEBUG] [Thread-81144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:45:46.087 [DEBUG] [Thread-81144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:45:46.135 [DEBUG] [Thread-81144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:45:46.135 [DEBUG] [Thread-81144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:45:46.144 [DEBUG] [Thread-81144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:45:46.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:45:46.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:45:46.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:45:46.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:45:46.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:45:46.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:45:46.178 [DEBUG] [Thread-81144] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:45:53.413 [DEBUG] [Thread-81146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:08.458 [DEBUG] [Thread-81147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:16.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:46:16.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:46:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:46:16.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 45, 50), 1.9, 87.51, 0.0, 31.65, 6.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:46:16.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:45:50
2025-12-13T02:46:17.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:46:17.190 [DEBUG] [Thread-81148] [transport.py] [_log()] starting thread (client mode): 0xf57a8280
2025-12-13T02:46:17.190 [DEBUG] [Thread-81148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:46:17.211 [DEBUG] [Thread-81148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:46:17.211 [INFO] [Thread-81148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:46:17.214 [DEBUG] [Thread-81148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] client lang: <none>
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] server lang: <none>
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] kex follows: False
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] Compression: none
2025-12-13T02:46:17.215 [DEBUG] [Thread-81148] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:46:17.231 [DEBUG] [Thread-81148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:46:17.231 [DEBUG] [Thread-81148] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:46:17.231 [DEBUG] [Thread-81148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:46:17.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:46:17.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:46:17.232 [DEBUG] [Thread-81148] [transport.py] [_log()] userauth is OK
2025-12-13T02:46:17.232 [DEBUG] [Thread-81148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:46:17.232 [DEBUG] [Thread-81148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:46:17.232 [DEBUG] [Thread-81148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:46:17.232 [DEBUG] [Thread-81148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:46:17.242 [INFO] [Thread-81148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:46:17.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:46:17.850 [DEBUG] [Thread-81148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:46:17.850 [DEBUG] [Thread-81148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:46:17.850 [DEBUG] [Thread-81148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:46:17.892 [DEBUG] [Thread-81148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:46:17.892 [DEBUG] [Thread-81148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:46:17.894 [DEBUG] [Thread-81148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:46:17.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:46:17.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:46:17.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:46:17.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:46:17.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:46:17.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:46:17.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.031691 -999.00   +6.60  30.86     90   +5.10 1 1 2 3 1     0    0 1.56 6.88 ZNESW 30.9 30.9 315.8 44.1 7.5 -22.8 7.2 -20.6 7.0 -18.8 7.3 -20.6
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.031691
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:46:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:46:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:46:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:46:17.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:45:50', tmtdew=1.9, humidity=87.51, cloud=0.0, wind=31.65, temperature=6.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:45:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:43:00')
2025-12-13T02:46:17.913 [DEBUG] [Thread-81148] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:46:17.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:46:17.998 [DEBUG] [Thread-81151] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-13T02:46:17.998 [DEBUG] [Thread-81151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:46:18.013 [DEBUG] [Thread-81151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:46:18.013 [INFO] [Thread-81151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] client lang: <none>
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] server lang: <none>
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] kex follows: False
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] Compression: none
2025-12-13T02:46:18.021 [DEBUG] [Thread-81151] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:46:18.077 [DEBUG] [Thread-81151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:46:18.078 [DEBUG] [Thread-81151] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:46:18.078 [DEBUG] [Thread-81151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:46:18.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:46:18.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:46:18.135 [DEBUG] [Thread-81151] [transport.py] [_log()] userauth is OK
2025-12-13T02:46:18.135 [DEBUG] [Thread-81151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:46:18.135 [DEBUG] [Thread-81151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:46:18.135 [DEBUG] [Thread-81151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:46:18.135 [DEBUG] [Thread-81151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:46:18.149 [INFO] [Thread-81151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:46:18.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:46:18.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:46:18.980 [DEBUG] [Thread-81151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:46:18.980 [DEBUG] [Thread-81151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:46:19.028 [DEBUG] [Thread-81151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:46:19.028 [DEBUG] [Thread-81151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:46:19.037 [DEBUG] [Thread-81151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:46:19.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:46:19.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:46:19.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:46:19.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:46:19.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:46:19.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:46:19.071 [DEBUG] [Thread-81151] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:46:23.486 [DEBUG] [Thread-81153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:30.581 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:30.582 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:35.812 [DEBUG] [Thread-81154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:38.522 [DEBUG] [Thread-81155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:46:49.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:46:49.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:46:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:46:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 46, 22), 1.91, 87.47, 0.0, 27.35, 6.65, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:46:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:46:22
2025-12-13T02:46:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:46:50.066 [DEBUG] [Thread-81156] [transport.py] [_log()] starting thread (client mode): 0xf8189930
2025-12-13T02:46:50.066 [DEBUG] [Thread-81156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:46:50.086 [DEBUG] [Thread-81156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:46:50.086 [INFO] [Thread-81156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:46:50.089 [DEBUG] [Thread-81156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:46:50.089 [DEBUG] [Thread-81156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:46:50.089 [DEBUG] [Thread-81156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:46:50.089 [DEBUG] [Thread-81156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] client lang: <none>
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] server lang: <none>
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] kex follows: False
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] Compression: none
2025-12-13T02:46:50.090 [DEBUG] [Thread-81156] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:46:50.108 [DEBUG] [Thread-81156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:46:50.108 [DEBUG] [Thread-81156] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:46:50.109 [DEBUG] [Thread-81156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:46:50.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:46:50.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:46:50.111 [DEBUG] [Thread-81156] [transport.py] [_log()] userauth is OK
2025-12-13T02:46:50.111 [DEBUG] [Thread-81156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:46:50.111 [DEBUG] [Thread-81156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:46:50.111 [DEBUG] [Thread-81156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:46:50.111 [DEBUG] [Thread-81156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:46:50.146 [INFO] [Thread-81156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:46:50.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:46:50.908 [DEBUG] [Thread-81156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:46:50.908 [DEBUG] [Thread-81156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:46:50.908 [DEBUG] [Thread-81156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:46:50.949 [DEBUG] [Thread-81156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:46:50.949 [DEBUG] [Thread-81156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:46:50.951 [DEBUG] [Thread-81156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:46:50.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:46:50.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:46:50.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:46:50.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:46:50.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:46:50.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:46:50.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.032039 -999.00   +6.60  25.91     90   +5.00 1 1 1 3 1     0    0 1.61 8.02 ZNESW 25.9 25.9 315.4 46.6 7.4 -21.0 7.2 -17.4 7.0 -16.4 7.3 -18.9
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.032039
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:46:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:46:22', tmtdew=1.91, humidity=87.47, cloud=0.0, wind=27.35, temperature=6.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:46:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:43:00')
2025-12-13T02:46:50.970 [DEBUG] [Thread-81156] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:46:51.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:46:51.055 [DEBUG] [Thread-81159] [transport.py] [_log()] starting thread (client mode): 0xf5772890
2025-12-13T02:46:51.055 [DEBUG] [Thread-81159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:46:51.070 [DEBUG] [Thread-81159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:46:51.070 [INFO] [Thread-81159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] client lang: <none>
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] server lang: <none>
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] kex follows: False
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] Compression: none
2025-12-13T02:46:51.078 [DEBUG] [Thread-81159] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:46:51.134 [DEBUG] [Thread-81159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:46:51.135 [DEBUG] [Thread-81159] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:46:51.135 [DEBUG] [Thread-81159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:46:51.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:46:51.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:46:51.197 [DEBUG] [Thread-81159] [transport.py] [_log()] userauth is OK
2025-12-13T02:46:51.197 [DEBUG] [Thread-81159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:46:51.197 [DEBUG] [Thread-81159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:46:51.197 [DEBUG] [Thread-81159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:46:51.198 [DEBUG] [Thread-81159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:46:51.215 [INFO] [Thread-81159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:46:51.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:46:51.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:46:52.039 [DEBUG] [Thread-81159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:46:52.039 [DEBUG] [Thread-81159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:46:52.088 [DEBUG] [Thread-81159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:46:52.088 [DEBUG] [Thread-81159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:46:52.096 [DEBUG] [Thread-81159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:46:52.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:46:52.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:46:52.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:46:52.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:46:52.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:46:52.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:46:52.129 [DEBUG] [Thread-81159] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:46:53.552 [DEBUG] [Thread-81161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:08.587 [DEBUG] [Thread-81162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:47:22.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:47:22.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:47:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 46, 54), 1.96, 87.46, 0.0, 31.37, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:47:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:46:54
2025-12-13T02:47:22.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:47:23.115 [DEBUG] [Thread-81163] [transport.py] [_log()] starting thread (client mode): 0xf818b6d0
2025-12-13T02:47:23.115 [DEBUG] [Thread-81163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:47:23.134 [DEBUG] [Thread-81163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:47:23.134 [INFO] [Thread-81163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] client lang: <none>
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] server lang: <none>
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] kex follows: False
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:47:23.138 [DEBUG] [Thread-81163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:47:23.139 [DEBUG] [Thread-81163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:47:23.139 [DEBUG] [Thread-81163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:47:23.139 [DEBUG] [Thread-81163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:47:23.139 [DEBUG] [Thread-81163] [transport.py] [_log()] Compression: none
2025-12-13T02:47:23.139 [DEBUG] [Thread-81163] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:47:23.155 [DEBUG] [Thread-81163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:47:23.156 [DEBUG] [Thread-81163] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:47:23.156 [DEBUG] [Thread-81163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:47:23.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:47:23.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:47:23.159 [DEBUG] [Thread-81163] [transport.py] [_log()] userauth is OK
2025-12-13T02:47:23.159 [DEBUG] [Thread-81163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:47:23.159 [DEBUG] [Thread-81163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:47:23.159 [DEBUG] [Thread-81163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:47:23.159 [DEBUG] [Thread-81163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:47:23.194 [INFO] [Thread-81163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:47:23.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:47:23.617 [DEBUG] [Thread-81165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:23.835 [DEBUG] [Thread-81163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:47:23.835 [DEBUG] [Thread-81163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:47:23.836 [DEBUG] [Thread-81163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:47:23.876 [DEBUG] [Thread-81163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:47:23.876 [DEBUG] [Thread-81163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:47:23.879 [DEBUG] [Thread-81163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:47:23.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:47:23.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:47:23.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:47:23.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:47:23.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:47:23.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:47:23.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:47:23.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:47:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:47:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.032386 -999.00   +6.60  31.51     90   +5.10 1 1 2 3 1     0    0 1.61 8.31 ZNESW 31.5 31.5 307.2 41.3 7.5 -19.4 7.2 -16.4 7.0 -16.6 7.3 -20.2
2025-12-13T02:47:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:47:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:47:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.032386
2025-12-13T02:47:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:47:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:47:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:47:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:47:23.905 [DEBUG] [Thread-81163] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:47:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:47:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:46:54', tmtdew=1.96, humidity=87.46, cloud=0.0, wind=31.37, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:46:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[-0.007250000000000867, 0.06425000000000125, 0.08725000000000094, 0.0045000000000001705, 0.0495000000000001, 0.015249999999999986, 0.04499999999999993, 0.06174999999999997, 0.07749999999999879, 0.1095000000000006, 0.12124999999999986, 0.09399999999999942, 0.07150000000000034, 0.03524999999999956, 0.1164999999999985, 0.3199999999999985, 0.14925000000000033, 0.20650000000000013, 0.25399999999999956, 0.20624999999999893, 0.045499999999998764, 0.027249999999998664, 0.0867500000000021, 0.8237500000000004, 0.4269999999999996, 0.2029999999999994, 0.15524999999999878, 0.26750000000000007, 0.13700000000000045, 0.08500000000000085, 0.22100000000000186, 0.9040000000000008, nan], zp_timestamp='2025-12-13T00:43:00')
2025-12-13T02:47:23.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:47:24.009 [DEBUG] [Thread-81167] [transport.py] [_log()] starting thread (client mode): 0xf575f3d0
2025-12-13T02:47:24.009 [DEBUG] [Thread-81167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:47:24.024 [DEBUG] [Thread-81167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:47:24.024 [INFO] [Thread-81167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:47:24.031 [DEBUG] [Thread-81167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:47:24.031 [DEBUG] [Thread-81167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:47:24.031 [DEBUG] [Thread-81167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:47:24.031 [DEBUG] [Thread-81167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:24.031 [DEBUG] [Thread-81167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] client lang: <none>
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] server lang: <none>
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] kex follows: False
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] Compression: none
2025-12-13T02:47:24.032 [DEBUG] [Thread-81167] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:47:24.090 [DEBUG] [Thread-81167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:47:24.090 [DEBUG] [Thread-81167] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:47:24.090 [DEBUG] [Thread-81167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:47:24.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:47:24.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:47:24.147 [DEBUG] [Thread-81167] [transport.py] [_log()] userauth is OK
2025-12-13T02:47:24.148 [DEBUG] [Thread-81167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:47:24.148 [DEBUG] [Thread-81167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:47:24.148 [DEBUG] [Thread-81167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:47:24.148 [DEBUG] [Thread-81167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:47:24.166 [INFO] [Thread-81167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:47:24.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:47:24.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:47:25.058 [DEBUG] [Thread-81167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:47:25.058 [DEBUG] [Thread-81167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:47:25.107 [DEBUG] [Thread-81167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:47:25.107 [DEBUG] [Thread-81167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:47:25.116 [DEBUG] [Thread-81167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:47:25.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:47:25.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:47:25.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:47:25.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:47:25.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:47:25.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:47:25.151 [DEBUG] [Thread-81167] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:47:30.788 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:30.789 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:35.897 [DEBUG] [Thread-81169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:38.644 [DEBUG] [Thread-81170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:53.696 [DEBUG] [Thread-81171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:47:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:47:55.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:47:55.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:47:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 47, 26), 1.97, 87.42, 0.0, 36.26, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:47:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:47:26
2025-12-13T02:47:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:47:56.105 [DEBUG] [Thread-81172] [transport.py] [_log()] starting thread (client mode): 0xf81f2170
2025-12-13T02:47:56.105 [DEBUG] [Thread-81172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:47:56.125 [DEBUG] [Thread-81172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:47:56.125 [INFO] [Thread-81172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:47:56.128 [DEBUG] [Thread-81172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:47:56.128 [DEBUG] [Thread-81172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:47:56.128 [DEBUG] [Thread-81172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] client lang: <none>
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] server lang: <none>
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] kex follows: False
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] Compression: none
2025-12-13T02:47:56.129 [DEBUG] [Thread-81172] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:47:56.147 [DEBUG] [Thread-81172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:47:56.147 [DEBUG] [Thread-81172] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:47:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:47:56.148 [DEBUG] [Thread-81172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:47:56.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:47:56.150 [DEBUG] [Thread-81172] [transport.py] [_log()] userauth is OK
2025-12-13T02:47:56.150 [DEBUG] [Thread-81172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:47:56.151 [DEBUG] [Thread-81172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:47:56.151 [DEBUG] [Thread-81172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:47:56.151 [DEBUG] [Thread-81172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:47:56.168 [INFO] [Thread-81172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:47:56.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:47:56.939 [DEBUG] [Thread-81172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:47:56.939 [DEBUG] [Thread-81172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:47:56.940 [DEBUG] [Thread-81172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:47:56.980 [DEBUG] [Thread-81172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:47:56.980 [DEBUG] [Thread-81172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:47:56.983 [DEBUG] [Thread-81172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:47:56.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:47:56.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:47:56.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:47:56.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:47:57.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:47:57.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:47:57.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:47:57.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:47:57.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:47:57.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.032733 -999.00   +6.60  44.57     90   +5.10 1 1 2 3 1     0    0 1.67 9.74 ZNESW 44.6 44.6 299.0 49.5 7.4 -20.8 7.2 -18.7 7.0 -18.7 7.3 -21.0
2025-12-13T02:47:57.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:47:57.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:47:57.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.032733
2025-12-13T02:47:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:47:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:47:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:47:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:47:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:47:57.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:47:26', tmtdew=1.97, humidity=87.42, cloud=0.0, wind=36.26, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:47:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.08125000000000071, 0.08725000000000094, 0.039499999999998536, 0.03950000000000031, 0.020749999999999602, 0.05799999999999805, 0.07175000000000153, 0.09499999999999886, 0.11700000000000088, 0.12025000000000041, 0.11899999999999977, 0.129999999999999, 0.024250000000000327, 0.030999999999998806, 0.06949999999999967, 0.11775000000000091, 0.4275000000000002, 0.32399999999999984, 0.32424999999999926, 0.11799999999999855, 0.03874999999999851, 0.0017500000000012506, 0.10025000000000084, 0.23399999999999999, 0.5169999999999995, 0.4617500000000003, 0.4300000000000006, 0.15749999999999886, 0.04300000000000104, 0.10650000000000048, 0.11400000000000077, 0.1427499999999995], zp_timestamp='2025-12-13T00:47:00')
2025-12-13T02:47:57.008 [DEBUG] [Thread-81172] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:47:57.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:47:57.106 [DEBUG] [Thread-81175] [transport.py] [_log()] starting thread (client mode): 0xf81899c0
2025-12-13T02:47:57.106 [DEBUG] [Thread-81175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:47:57.120 [DEBUG] [Thread-81175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:47:57.120 [INFO] [Thread-81175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:47:57.127 [DEBUG] [Thread-81175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:47:57.127 [DEBUG] [Thread-81175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] client lang: <none>
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] server lang: <none>
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] kex follows: False
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] Compression: none
2025-12-13T02:47:57.128 [DEBUG] [Thread-81175] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:47:57.191 [DEBUG] [Thread-81175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:47:57.191 [DEBUG] [Thread-81175] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:47:57.192 [DEBUG] [Thread-81175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:47:57.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:47:57.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:47:57.248 [DEBUG] [Thread-81175] [transport.py] [_log()] userauth is OK
2025-12-13T02:47:57.248 [DEBUG] [Thread-81175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:47:57.248 [DEBUG] [Thread-81175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:47:57.248 [DEBUG] [Thread-81175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:47:57.248 [DEBUG] [Thread-81175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:47:57.266 [INFO] [Thread-81175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:47:57.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:47:57.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:47:58.078 [DEBUG] [Thread-81175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:47:58.079 [DEBUG] [Thread-81175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:47:58.127 [DEBUG] [Thread-81175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:47:58.127 [DEBUG] [Thread-81175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:47:58.135 [DEBUG] [Thread-81175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:47:58.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:47:58.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:47:58.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:47:58.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:47:58.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:47:58.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:47:58.169 [DEBUG] [Thread-81175] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:48:08.725 [DEBUG] [Thread-81177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:48:23.773 [DEBUG] [Thread-81178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:48:28.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:48:28.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:48:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:48:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 47, 58), 1.91, 87.46, 0.0, 31.46, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:48:28.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:47:58
2025-12-13T02:48:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:48:29.167 [DEBUG] [Thread-81179] [transport.py] [_log()] starting thread (client mode): 0xf81f0220
2025-12-13T02:48:29.167 [DEBUG] [Thread-81179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:48:29.187 [DEBUG] [Thread-81179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:48:29.187 [INFO] [Thread-81179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] client lang: <none>
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] server lang: <none>
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] kex follows: False
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] Compression: none
2025-12-13T02:48:29.190 [DEBUG] [Thread-81179] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:48:29.207 [DEBUG] [Thread-81179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:48:29.208 [DEBUG] [Thread-81179] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:48:29.208 [DEBUG] [Thread-81179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:48:29.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:48:29.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:48:29.210 [DEBUG] [Thread-81179] [transport.py] [_log()] userauth is OK
2025-12-13T02:48:29.210 [DEBUG] [Thread-81179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:48:29.210 [DEBUG] [Thread-81179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:48:29.210 [DEBUG] [Thread-81179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:48:29.210 [DEBUG] [Thread-81179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:48:29.228 [INFO] [Thread-81179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:48:29.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:48:29.863 [DEBUG] [Thread-81179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:48:29.863 [DEBUG] [Thread-81179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:48:29.863 [DEBUG] [Thread-81179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:48:29.904 [DEBUG] [Thread-81179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:48:29.904 [DEBUG] [Thread-81179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:48:29.907 [DEBUG] [Thread-81179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:48:29.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:48:29.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:48:29.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:48:29.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:48:29.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:48:29.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:48:29.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:48:29.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:48:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:48:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.033080 -999.00   +6.50  36.56     90   +5.10 1 1 2 3 1     0    0 1.67 9.56 ZNESW 36.6 36.6 303.2 53.0 7.5 -21.9 7.2 -19.4 7.0 -17.7 7.3 -19.1
2025-12-13T02:48:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:48:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:48:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.033080
2025-12-13T02:48:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:48:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:48:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:48:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:48:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T02:48:29.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:47:58', tmtdew=1.91, humidity=87.46, cloud=0.0, wind=31.46, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:47:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.08125000000000071, 0.08725000000000094, 0.039499999999998536, 0.03950000000000031, 0.020749999999999602, 0.05799999999999805, 0.07175000000000153, 0.09499999999999886, 0.11700000000000088, 0.12025000000000041, 0.11899999999999977, 0.129999999999999, 0.024250000000000327, 0.030999999999998806, 0.06949999999999967, 0.11775000000000091, 0.4275000000000002, 0.32399999999999984, 0.32424999999999926, 0.11799999999999855, 0.03874999999999851, 0.0017500000000012506, 0.10025000000000084, 0.23399999999999999, 0.5169999999999995, 0.4617500000000003, 0.4300000000000006, 0.15749999999999886, 0.04300000000000104, 0.10650000000000048, 0.11400000000000077, 0.1427499999999995], zp_timestamp='2025-12-13T00:47:00')
2025-12-13T02:48:29.933 [DEBUG] [Thread-81179] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:48:30.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:48:30.030 [DEBUG] [Thread-81182] [transport.py] [_log()] starting thread (client mode): 0xf57a8ac0
2025-12-13T02:48:30.030 [DEBUG] [Thread-81182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:48:30.044 [DEBUG] [Thread-81182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:48:30.044 [INFO] [Thread-81182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] client lang: <none>
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] server lang: <none>
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] kex follows: False
2025-12-13T02:48:30.052 [DEBUG] [Thread-81182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:48:30.053 [DEBUG] [Thread-81182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:48:30.053 [DEBUG] [Thread-81182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:48:30.053 [DEBUG] [Thread-81182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:48:30.053 [DEBUG] [Thread-81182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:48:30.053 [DEBUG] [Thread-81182] [transport.py] [_log()] Compression: none
2025-12-13T02:48:30.053 [DEBUG] [Thread-81182] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:48:30.111 [DEBUG] [Thread-81182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:48:30.112 [DEBUG] [Thread-81182] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:48:30.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:48:30.112 [DEBUG] [Thread-81182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:48:30.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:48:30.168 [DEBUG] [Thread-81182] [transport.py] [_log()] userauth is OK
2025-12-13T02:48:30.168 [DEBUG] [Thread-81182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:48:30.168 [DEBUG] [Thread-81182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:48:30.168 [DEBUG] [Thread-81182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:48:30.168 [DEBUG] [Thread-81182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:48:30.187 [INFO] [Thread-81182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:48:30.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:48:30.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:48:30.984 [DEBUG] [Thread-81182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:48:30.984 [DEBUG] [Thread-81182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:48:30.991 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:48:30.992 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:48:31.032 [DEBUG] [Thread-81182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:48:31.032 [DEBUG] [Thread-81182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:48:31.040 [DEBUG] [Thread-81182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:48:31.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:48:31.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:48:31.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:48:31.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:48:31.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:48:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:48:31.071 [DEBUG] [Thread-81182] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:48:35.979 [DEBUG] [Thread-81184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:48:38.802 [DEBUG] [Thread-81185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:48:53.846 [DEBUG] [Thread-81186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:01.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:49:01.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:49:01.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:49:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 48, 30), 1.91, 87.46, 0.0, 28.83, 6.73, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:49:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:48:30
2025-12-13T02:49:01.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:49:02.076 [DEBUG] [Thread-81187] [transport.py] [_log()] starting thread (client mode): 0xf818a320
2025-12-13T02:49:02.077 [DEBUG] [Thread-81187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:49:02.097 [DEBUG] [Thread-81187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:49:02.097 [INFO] [Thread-81187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] client lang: <none>
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] server lang: <none>
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] kex follows: False
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] Compression: none
2025-12-13T02:49:02.099 [DEBUG] [Thread-81187] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:49:02.113 [DEBUG] [Thread-81187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:49:02.113 [DEBUG] [Thread-81187] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:49:02.114 [DEBUG] [Thread-81187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:49:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:49:02.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:49:02.115 [DEBUG] [Thread-81187] [transport.py] [_log()] userauth is OK
2025-12-13T02:49:02.116 [DEBUG] [Thread-81187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:49:02.116 [DEBUG] [Thread-81187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:49:02.116 [DEBUG] [Thread-81187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:49:02.116 [DEBUG] [Thread-81187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:49:02.133 [INFO] [Thread-81187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:49:02.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:49:02.935 [DEBUG] [Thread-81187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:49:02.935 [DEBUG] [Thread-81187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:49:02.935 [DEBUG] [Thread-81187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:49:02.976 [DEBUG] [Thread-81187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:49:02.976 [DEBUG] [Thread-81187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:49:02.979 [DEBUG] [Thread-81187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:49:02.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:49:02.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:49:03.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:49:03.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:49:03.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:49:03.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:49:03.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:49:03.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:49:03.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:49:03.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.033775 -999.00   +6.50  38.20     90   +5.00 1 2 2 3 1     0    0 1.68 9.39 ZNE.W 38.2 38.2 303.8 50.0 7.5 -15.8 7.2 -12.3 7.0 -10.4 7.3 -13.3
2025-12-13T02:49:03.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:49:03.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:49:03.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.033775
2025-12-13T02:49:03.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:49:03.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:49:03.013 [DEBUG] [Thread-81187] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:49:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:49:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:49:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:49:03.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:48:30', tmtdew=1.91, humidity=87.46, cloud=0.0, wind=28.83, temperature=6.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:48:38.160', atlas_cloud=2, atlas_rain=1, zp_data=[0.021749999999999048, 0.08125000000000071, 0.08725000000000094, 0.039499999999998536, 0.03950000000000031, 0.020749999999999602, 0.05799999999999805, 0.07175000000000153, 0.09499999999999886, 0.11700000000000088, 0.12025000000000041, 0.11899999999999977, 0.129999999999999, 0.024250000000000327, 0.030999999999998806, 0.06949999999999967, 0.11775000000000091, 0.4275000000000002, 0.32399999999999984, 0.32424999999999926, 0.11799999999999855, 0.03874999999999851, 0.0017500000000012506, 0.10025000000000084, 0.23399999999999999, 0.5169999999999995, 0.4617500000000003, 0.4300000000000006, 0.15749999999999886, 0.04300000000000104, 0.10650000000000048, 0.11400000000000077, 0.1427499999999995], zp_timestamp='2025-12-13T00:47:00')
2025-12-13T02:49:03.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:49:03.122 [DEBUG] [Thread-81190] [transport.py] [_log()] starting thread (client mode): 0xf575cbe0
2025-12-13T02:49:03.122 [DEBUG] [Thread-81190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:49:03.136 [DEBUG] [Thread-81190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:49:03.137 [INFO] [Thread-81190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] client lang: <none>
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] server lang: <none>
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] kex follows: False
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] Compression: none
2025-12-13T02:49:03.144 [DEBUG] [Thread-81190] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:49:03.202 [DEBUG] [Thread-81190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:49:03.202 [DEBUG] [Thread-81190] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:49:03.203 [DEBUG] [Thread-81190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:49:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:49:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:49:03.260 [DEBUG] [Thread-81190] [transport.py] [_log()] userauth is OK
2025-12-13T02:49:03.260 [DEBUG] [Thread-81190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:49:03.260 [DEBUG] [Thread-81190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:49:03.260 [DEBUG] [Thread-81190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:49:03.260 [DEBUG] [Thread-81190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:49:03.278 [INFO] [Thread-81190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:49:03.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:49:03.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:49:04.103 [DEBUG] [Thread-81190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:49:04.104 [DEBUG] [Thread-81190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:49:04.151 [DEBUG] [Thread-81190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:49:04.152 [DEBUG] [Thread-81190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:49:04.160 [DEBUG] [Thread-81190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:49:04.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:49:04.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:49:04.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:49:04.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:49:04.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:49:04.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:49:04.193 [DEBUG] [Thread-81190] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:49:08.876 [DEBUG] [Thread-81192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:23.921 [DEBUG] [Thread-81193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:31.192 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:31.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:49:34.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:49:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:49:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 49, 2), 1.92, 87.41, 0.0, 34.42, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:49:34.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:49:02
2025-12-13T02:49:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:49:35.202 [DEBUG] [Thread-81194] [transport.py] [_log()] starting thread (client mode): 0xf5772890
2025-12-13T02:49:35.202 [DEBUG] [Thread-81194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:49:35.221 [DEBUG] [Thread-81194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:49:35.221 [INFO] [Thread-81194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] client lang: <none>
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] server lang: <none>
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] kex follows: False
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] Compression: none
2025-12-13T02:49:35.225 [DEBUG] [Thread-81194] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:49:35.241 [DEBUG] [Thread-81194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:49:35.241 [DEBUG] [Thread-81194] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:49:35.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:49:35.241 [DEBUG] [Thread-81194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:49:35.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:49:35.242 [DEBUG] [Thread-81194] [transport.py] [_log()] userauth is OK
2025-12-13T02:49:35.242 [DEBUG] [Thread-81194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:49:35.242 [DEBUG] [Thread-81194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:49:35.242 [DEBUG] [Thread-81194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:49:35.242 [DEBUG] [Thread-81194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:49:35.272 [INFO] [Thread-81194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:49:35.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:49:35.905 [DEBUG] [Thread-81194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:49:35.905 [DEBUG] [Thread-81194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:49:35.905 [DEBUG] [Thread-81194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:49:35.946 [DEBUG] [Thread-81194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:49:35.946 [DEBUG] [Thread-81194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:49:35.948 [DEBUG] [Thread-81194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:49:35.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:49:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:49:35.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:49:35.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:49:35.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:49:35.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:49:35.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:49:35.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.034122 -999.00   +6.60  28.21     90   +5.10 1 2 1 3 1     0    0 1.69 10.13 ZNE.W 28.2 28.2 315.4 39.1 7.5 -14.2 7.2 -10.6 7.0 -9.8 7.4 -13.1
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.034122
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:49:35.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:49:02', tmtdew=1.92, humidity=87.41, cloud=0.0, wind=34.42, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:49:08.141', atlas_cloud=2, atlas_rain=1, zp_data=[0.021749999999999048, 0.08125000000000071, 0.08725000000000094, 0.039499999999998536, 0.03950000000000031, 0.020749999999999602, 0.05799999999999805, 0.07175000000000153, 0.09499999999999886, 0.11700000000000088, 0.12025000000000041, 0.11899999999999977, 0.129999999999999, 0.024250000000000327, 0.030999999999998806, 0.06949999999999967, 0.11775000000000091, 0.4275000000000002, 0.32399999999999984, 0.32424999999999926, 0.11799999999999855, 0.03874999999999851, 0.0017500000000012506, 0.10025000000000084, 0.23399999999999999, 0.5169999999999995, 0.4617500000000003, 0.4300000000000006, 0.15749999999999886, 0.04300000000000104, 0.10650000000000048, 0.11400000000000077, 0.1427499999999995], zp_timestamp='2025-12-13T00:47:00')
2025-12-13T02:49:35.967 [DEBUG] [Thread-81194] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:49:36.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:49:36.048 [DEBUG] [Thread-81197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:36.053 [DEBUG] [Thread-81198] [transport.py] [_log()] starting thread (client mode): 0xf81f14e0
2025-12-13T02:49:36.053 [DEBUG] [Thread-81198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:49:36.067 [DEBUG] [Thread-81198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:49:36.067 [INFO] [Thread-81198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] client lang: <none>
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] server lang: <none>
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] kex follows: False
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] Compression: none
2025-12-13T02:49:36.075 [DEBUG] [Thread-81198] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:49:36.130 [DEBUG] [Thread-81198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:49:36.130 [DEBUG] [Thread-81198] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:49:36.130 [DEBUG] [Thread-81198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:49:36.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:49:36.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:49:36.188 [DEBUG] [Thread-81198] [transport.py] [_log()] userauth is OK
2025-12-13T02:49:36.188 [DEBUG] [Thread-81198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:49:36.188 [DEBUG] [Thread-81198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:49:36.188 [DEBUG] [Thread-81198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:49:36.188 [DEBUG] [Thread-81198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:49:36.202 [INFO] [Thread-81198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:49:36.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:49:36.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:49:36.969 [DEBUG] [Thread-81198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:49:36.969 [DEBUG] [Thread-81198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:49:37.017 [DEBUG] [Thread-81198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:49:37.017 [DEBUG] [Thread-81198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:49:37.026 [DEBUG] [Thread-81198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:49:37.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:49:37.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:49:37.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:49:37.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:49:37.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:49:37.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:49:37.060 [DEBUG] [Thread-81198] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:49:38.948 [DEBUG] [Thread-81200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:49:53.998 [DEBUG] [Thread-81201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:07.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:50:07.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:50:07.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:50:07.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 49, 34), 1.97, 87.37, 0.0, 29.16, 6.65, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:50:07.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:49:34
2025-12-13T02:50:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:50:08.152 [DEBUG] [Thread-81202] [transport.py] [_log()] starting thread (client mode): 0xf57aa470
2025-12-13T02:50:08.152 [DEBUG] [Thread-81202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:50:08.172 [DEBUG] [Thread-81202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:50:08.172 [INFO] [Thread-81202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] client lang: <none>
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] server lang: <none>
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] kex follows: False
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] Compression: none
2025-12-13T02:50:08.175 [DEBUG] [Thread-81202] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:50:08.191 [DEBUG] [Thread-81202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:50:08.191 [DEBUG] [Thread-81202] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:50:08.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:50:08.191 [DEBUG] [Thread-81202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:50:08.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:50:08.192 [DEBUG] [Thread-81202] [transport.py] [_log()] userauth is OK
2025-12-13T02:50:08.192 [DEBUG] [Thread-81202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:50:08.192 [DEBUG] [Thread-81202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:50:08.192 [DEBUG] [Thread-81202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:50:08.192 [DEBUG] [Thread-81202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:50:08.201 [INFO] [Thread-81202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:50:08.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:50:09.030 [DEBUG] [Thread-81204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:09.356 [DEBUG] [Thread-81202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:50:09.357 [DEBUG] [Thread-81202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:50:09.357 [DEBUG] [Thread-81202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:50:09.398 [DEBUG] [Thread-81202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:50:09.398 [DEBUG] [Thread-81202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:50:09.400 [DEBUG] [Thread-81202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:50:09.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:50:09.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:50:09.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:50:09.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:50:09.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:50:09.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:50:09.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.034469 -999.00   +6.60  32.44     90   +5.10 1 3 2 3 1     0    0 1.68 10.27 ZNESW 32.4 32.4 306.2 42.0 7.5 -12.7 7.3 -9.2 7.1 -9.4 7.4 -13.1
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.034469
2025-12-13T02:50:09.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:50:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:50:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:50:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:50:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:50:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:49:34', tmtdew=1.97, humidity=87.37, cloud=0.0, wind=29.16, temperature=6.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:49:38.122', atlas_cloud=3, atlas_rain=1, zp_data=[0.021749999999999048, 0.08125000000000071, 0.08725000000000094, 0.039499999999998536, 0.03950000000000031, 0.020749999999999602, 0.05799999999999805, 0.07175000000000153, 0.09499999999999886, 0.11700000000000088, 0.12025000000000041, 0.11899999999999977, 0.129999999999999, 0.024250000000000327, 0.030999999999998806, 0.06949999999999967, 0.11775000000000091, 0.4275000000000002, 0.32399999999999984, 0.32424999999999926, 0.11799999999999855, 0.03874999999999851, 0.0017500000000012506, 0.10025000000000084, 0.23399999999999999, 0.5169999999999995, 0.4617500000000003, 0.4300000000000006, 0.15749999999999886, 0.04300000000000104, 0.10650000000000048, 0.11400000000000077, 0.1427499999999995], zp_timestamp='2025-12-13T00:47:00')
2025-12-13T02:50:09.427 [DEBUG] [Thread-81202] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:50:09.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:50:09.513 [DEBUG] [Thread-81206] [transport.py] [_log()] starting thread (client mode): 0xfabc5f60
2025-12-13T02:50:09.513 [DEBUG] [Thread-81206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:50:09.528 [DEBUG] [Thread-81206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:50:09.528 [INFO] [Thread-81206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] client lang: <none>
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] server lang: <none>
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] kex follows: False
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] Compression: none
2025-12-13T02:50:09.536 [DEBUG] [Thread-81206] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:50:09.591 [DEBUG] [Thread-81206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:50:09.591 [DEBUG] [Thread-81206] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:50:09.592 [DEBUG] [Thread-81206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:50:09.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:50:09.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:50:09.648 [DEBUG] [Thread-81206] [transport.py] [_log()] userauth is OK
2025-12-13T02:50:09.648 [DEBUG] [Thread-81206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:50:09.648 [DEBUG] [Thread-81206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:50:09.648 [DEBUG] [Thread-81206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:50:09.648 [DEBUG] [Thread-81206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:50:09.663 [INFO] [Thread-81206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:50:09.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:50:09.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:50:10.510 [DEBUG] [Thread-81206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:50:10.510 [DEBUG] [Thread-81206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:50:10.557 [DEBUG] [Thread-81206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:50:10.557 [DEBUG] [Thread-81206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:50:10.566 [DEBUG] [Thread-81206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:50:10.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:50:10.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:50:10.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:50:10.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:50:10.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:50:10.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:50:10.596 [DEBUG] [Thread-81206] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:50:24.060 [DEBUG] [Thread-81208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:31.394 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:31.396 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:36.131 [DEBUG] [Thread-81209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:39.116 [DEBUG] [Thread-81210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:50:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:50:40.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:50:40.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:50:41.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 50, 6), 1.99, 87.31, 0.0, 27.96, 6.71, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:50:41.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:50:06
2025-12-13T02:50:41.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:50:41.622 [DEBUG] [Thread-81211] [transport.py] [_log()] starting thread (client mode): 0xf57a8670
2025-12-13T02:50:41.622 [DEBUG] [Thread-81211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:50:41.641 [DEBUG] [Thread-81211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:50:41.641 [INFO] [Thread-81211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] client lang: <none>
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] server lang: <none>
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] kex follows: False
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] Compression: none
2025-12-13T02:50:41.645 [DEBUG] [Thread-81211] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:50:41.662 [DEBUG] [Thread-81211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:50:41.662 [DEBUG] [Thread-81211] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:50:41.663 [DEBUG] [Thread-81211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:50:41.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:50:41.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:50:41.665 [DEBUG] [Thread-81211] [transport.py] [_log()] userauth is OK
2025-12-13T02:50:41.665 [DEBUG] [Thread-81211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:50:41.665 [DEBUG] [Thread-81211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:50:41.665 [DEBUG] [Thread-81211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:50:41.665 [DEBUG] [Thread-81211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:50:41.700 [INFO] [Thread-81211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:50:41.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:50:42.301 [DEBUG] [Thread-81211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:50:42.301 [DEBUG] [Thread-81211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:50:42.302 [DEBUG] [Thread-81211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:50:42.342 [DEBUG] [Thread-81211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:50:42.342 [DEBUG] [Thread-81211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:50:42.345 [DEBUG] [Thread-81211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:50:42.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:50:42.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:50:42.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:50:42.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:50:42.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:50:42.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:50:42.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:50:42.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:50:42.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:50:42.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.034816 -999.00   +6.60  30.02     90   +5.10 1 3 2 3 1     0    0 1.68 10.08 zNE.W 30.0 30.0 296.0 36.2 7.5 -12.9 7.3 -9.5 7.1 -10.2 7.4 -11.6
2025-12-13T02:50:42.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:50:42.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:50:42.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.034816
2025-12-13T02:50:42.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:50:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:50:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:50:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:50:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:50:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:50:06', tmtdew=1.99, humidity=87.31, cloud=0.0, wind=27.96, temperature=6.71, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:50:08.102', atlas_cloud=3, atlas_rain=1, zp_data=[0.021749999999999048, 0.08125000000000071, 0.08725000000000094, 0.039499999999998536, 0.03950000000000031, 0.020749999999999602, 0.05799999999999805, 0.07175000000000153, 0.09499999999999886, 0.11700000000000088, 0.12025000000000041, 0.11899999999999977, 0.129999999999999, 0.024250000000000327, 0.030999999999998806, 0.06949999999999967, 0.11775000000000091, 0.4275000000000002, 0.32399999999999984, 0.32424999999999926, 0.11799999999999855, 0.03874999999999851, 0.0017500000000012506, 0.10025000000000084, 0.23399999999999999, 0.5169999999999995, 0.4617500000000003, 0.4300000000000006, 0.15749999999999886, 0.04300000000000104, 0.10650000000000048, 0.11400000000000077, 0.1427499999999995], zp_timestamp='2025-12-13T00:47:00')
2025-12-13T02:50:42.374 [DEBUG] [Thread-81211] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:50:42.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:50:42.463 [DEBUG] [Thread-81214] [transport.py] [_log()] starting thread (client mode): 0xf813c7c0
2025-12-13T02:50:42.463 [DEBUG] [Thread-81214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:50:42.478 [DEBUG] [Thread-81214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:50:42.478 [INFO] [Thread-81214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:50:42.485 [DEBUG] [Thread-81214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:50:42.485 [DEBUG] [Thread-81214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] client lang: <none>
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] server lang: <none>
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] kex follows: False
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] Compression: none
2025-12-13T02:50:42.486 [DEBUG] [Thread-81214] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:50:42.544 [DEBUG] [Thread-81214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:50:42.544 [DEBUG] [Thread-81214] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:50:42.545 [DEBUG] [Thread-81214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:50:42.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:50:42.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:50:42.600 [DEBUG] [Thread-81214] [transport.py] [_log()] userauth is OK
2025-12-13T02:50:42.601 [DEBUG] [Thread-81214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:50:42.601 [DEBUG] [Thread-81214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:50:42.601 [DEBUG] [Thread-81214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:50:42.601 [DEBUG] [Thread-81214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:50:42.620 [INFO] [Thread-81214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:50:42.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:50:42.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:50:43.434 [DEBUG] [Thread-81214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:50:43.435 [DEBUG] [Thread-81214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:50:43.482 [DEBUG] [Thread-81214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:50:43.482 [DEBUG] [Thread-81214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:50:43.491 [DEBUG] [Thread-81214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:50:43.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:50:43.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:50:43.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:50:43.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:50:43.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:50:43.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:50:43.526 [DEBUG] [Thread-81214] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:50:54.148 [DEBUG] [Thread-81216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:09.199 [DEBUG] [Thread-81217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:13.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:51:13.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:51:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:51:14.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 51, 10), 1.96, 87.17, 0.0, 32.66, 6.65, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:51:14.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:51:10
2025-12-13T02:51:14.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:51:14.527 [DEBUG] [Thread-81218] [transport.py] [_log()] starting thread (client mode): 0xf57031f0
2025-12-13T02:51:14.527 [DEBUG] [Thread-81218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:51:14.549 [DEBUG] [Thread-81218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:51:14.549 [INFO] [Thread-81218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] client lang: <none>
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] server lang: <none>
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] kex follows: False
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] Compression: none
2025-12-13T02:51:14.552 [DEBUG] [Thread-81218] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:51:14.569 [DEBUG] [Thread-81218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:51:14.570 [DEBUG] [Thread-81218] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:51:14.570 [DEBUG] [Thread-81218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:51:14.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:51:14.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:51:14.573 [DEBUG] [Thread-81218] [transport.py] [_log()] userauth is OK
2025-12-13T02:51:14.573 [DEBUG] [Thread-81218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:51:14.573 [DEBUG] [Thread-81218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:51:14.573 [DEBUG] [Thread-81218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:51:14.573 [DEBUG] [Thread-81218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:51:14.599 [INFO] [Thread-81218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:51:14.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:51:15.226 [DEBUG] [Thread-81218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:51:15.226 [DEBUG] [Thread-81218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:51:15.226 [DEBUG] [Thread-81218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:51:15.267 [DEBUG] [Thread-81218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:51:15.268 [DEBUG] [Thread-81218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:51:15.271 [DEBUG] [Thread-81218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:51:15.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:51:15.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:51:15.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:51:15.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:51:15.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:51:15.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:51:15.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:51:15.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:51:15.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:51:15.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.035164 -999.00   +6.60  28.04     90   +5.10 1 3 1 3 1     0    0 1.68 10.43 zNE.W 28.0 28.0 295.8 36.3 7.5 -8.9 7.4 -7.0 7.1 -7.4 7.5 -8.6
2025-12-13T02:51:15.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:51:15.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:51:15.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.035164
2025-12-13T02:51:15.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:51:15.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:51:15.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:51:15.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:51:15.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:51:15.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:51:10', tmtdew=1.96, humidity=87.17, cloud=0.0, wind=32.66, temperature=6.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:50:38.170', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:49:00')
2025-12-13T02:51:15.300 [DEBUG] [Thread-81218] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:51:15.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:51:15.397 [DEBUG] [Thread-81221] [transport.py] [_log()] starting thread (client mode): 0xf813c910
2025-12-13T02:51:15.397 [DEBUG] [Thread-81221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:51:15.412 [DEBUG] [Thread-81221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:51:15.412 [INFO] [Thread-81221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:15.420 [DEBUG] [Thread-81221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] client lang: <none>
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] server lang: <none>
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] kex follows: False
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:51:15.421 [DEBUG] [Thread-81221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:51:15.422 [DEBUG] [Thread-81221] [transport.py] [_log()] Compression: none
2025-12-13T02:51:15.422 [DEBUG] [Thread-81221] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:51:15.476 [DEBUG] [Thread-81221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:51:15.477 [DEBUG] [Thread-81221] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:51:15.477 [DEBUG] [Thread-81221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:51:15.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:51:15.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:51:15.535 [DEBUG] [Thread-81221] [transport.py] [_log()] userauth is OK
2025-12-13T02:51:15.536 [DEBUG] [Thread-81221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:51:15.536 [DEBUG] [Thread-81221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:51:15.536 [DEBUG] [Thread-81221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:51:15.536 [DEBUG] [Thread-81221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:51:15.556 [INFO] [Thread-81221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:51:15.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:51:15.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:51:16.415 [DEBUG] [Thread-81221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:51:16.416 [DEBUG] [Thread-81221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:51:16.464 [DEBUG] [Thread-81221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:51:16.464 [DEBUG] [Thread-81221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:51:16.473 [DEBUG] [Thread-81221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:51:16.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:51:16.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:51:16.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:51:16.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:51:16.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:51:16.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:51:16.507 [DEBUG] [Thread-81221] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:51:24.227 [DEBUG] [Thread-81223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:31.598 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:31.599 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:36.207 [DEBUG] [Thread-81224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:39.262 [DEBUG] [Thread-81225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:51:46.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:51:46.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:51:46.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:51:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 51, 42), 2.0, 87.21, 0.0, 33.95, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:51:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:51:42
2025-12-13T02:51:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:51:47.498 [DEBUG] [Thread-81226] [transport.py] [_log()] starting thread (client mode): 0xf818bb80
2025-12-13T02:51:47.498 [DEBUG] [Thread-81226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:51:47.518 [DEBUG] [Thread-81226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:51:47.518 [INFO] [Thread-81226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] client lang: <none>
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] server lang: <none>
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] kex follows: False
2025-12-13T02:51:47.521 [DEBUG] [Thread-81226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:51:47.522 [DEBUG] [Thread-81226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:51:47.522 [DEBUG] [Thread-81226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:51:47.522 [DEBUG] [Thread-81226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:51:47.522 [DEBUG] [Thread-81226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:51:47.522 [DEBUG] [Thread-81226] [transport.py] [_log()] Compression: none
2025-12-13T02:51:47.522 [DEBUG] [Thread-81226] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:51:47.539 [DEBUG] [Thread-81226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:51:47.539 [DEBUG] [Thread-81226] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:51:47.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:51:47.540 [DEBUG] [Thread-81226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:51:47.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:51:47.542 [DEBUG] [Thread-81226] [transport.py] [_log()] userauth is OK
2025-12-13T02:51:47.543 [DEBUG] [Thread-81226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:51:47.543 [DEBUG] [Thread-81226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:51:47.543 [DEBUG] [Thread-81226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:51:47.543 [DEBUG] [Thread-81226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:51:47.561 [INFO] [Thread-81226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:51:47.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:51:48.169 [DEBUG] [Thread-81226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:51:48.169 [DEBUG] [Thread-81226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:51:48.169 [DEBUG] [Thread-81226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:51:48.210 [DEBUG] [Thread-81226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:51:48.210 [DEBUG] [Thread-81226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:51:48.213 [DEBUG] [Thread-81226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:51:48.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:51:48.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:51:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:51:48.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:51:48.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:51:48.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:51:48.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:51:48.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:51:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:51:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.035511 -999.00   +6.60  34.63     90   +5.10 1 2 2 3 1     0    0 1.64 9.15 .N..W 34.6 34.6 302.2 38.9 7.6 -11.1 7.5 -12.8 7.1 -14.8 7.5 -16.0
2025-12-13T02:51:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:51:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:51:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.035511
2025-12-13T02:51:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:51:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:51:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:51:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:51:48.238 [DEBUG] [Thread-81226] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:51:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:51:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:51:42', tmtdew=2.0, humidity=87.21, cloud=0.0, wind=33.95, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:51:08.150', atlas_cloud=2, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:49:00')
2025-12-13T02:51:48.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:51:48.340 [DEBUG] [Thread-81229] [transport.py] [_log()] starting thread (client mode): 0xf57a92a0
2025-12-13T02:51:48.340 [DEBUG] [Thread-81229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:51:48.355 [DEBUG] [Thread-81229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:51:48.355 [INFO] [Thread-81229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] client lang: <none>
2025-12-13T02:51:48.362 [DEBUG] [Thread-81229] [transport.py] [_log()] server lang: <none>
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] kex follows: False
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] Compression: none
2025-12-13T02:51:48.363 [DEBUG] [Thread-81229] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:51:48.420 [DEBUG] [Thread-81229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:51:48.420 [DEBUG] [Thread-81229] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:51:48.421 [DEBUG] [Thread-81229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:51:48.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:51:48.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:51:48.481 [DEBUG] [Thread-81229] [transport.py] [_log()] userauth is OK
2025-12-13T02:51:48.481 [DEBUG] [Thread-81229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:51:48.481 [DEBUG] [Thread-81229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:51:48.481 [DEBUG] [Thread-81229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:51:48.481 [DEBUG] [Thread-81229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:51:48.500 [INFO] [Thread-81229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:51:48.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:51:48.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:51:49.356 [DEBUG] [Thread-81229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:51:49.357 [DEBUG] [Thread-81229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:51:49.405 [DEBUG] [Thread-81229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:51:49.405 [DEBUG] [Thread-81229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:51:49.414 [DEBUG] [Thread-81229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:51:49.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:51:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:51:49.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:51:49.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:51:49.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:51:49.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:51:49.448 [DEBUG] [Thread-81229] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:51:54.294 [DEBUG] [Thread-81231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:09.339 [DEBUG] [Thread-81232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:52:19.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:52:19.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:52:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 52, 15), 2.0, 87.21, 0.0, 34.79, 6.68, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:52:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:52:15
2025-12-13T02:52:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:52:20.417 [DEBUG] [Thread-81233] [transport.py] [_log()] starting thread (client mode): 0xf575ef80
2025-12-13T02:52:20.417 [DEBUG] [Thread-81233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:52:20.438 [DEBUG] [Thread-81233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:52:20.438 [INFO] [Thread-81233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:52:20.441 [DEBUG] [Thread-81233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:52:20.441 [DEBUG] [Thread-81233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:52:20.441 [DEBUG] [Thread-81233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] client lang: <none>
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] server lang: <none>
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] kex follows: False
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] Compression: none
2025-12-13T02:52:20.442 [DEBUG] [Thread-81233] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:52:20.458 [DEBUG] [Thread-81233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:52:20.458 [DEBUG] [Thread-81233] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:52:20.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:52:20.459 [DEBUG] [Thread-81233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:52:20.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:52:20.461 [DEBUG] [Thread-81233] [transport.py] [_log()] userauth is OK
2025-12-13T02:52:20.461 [DEBUG] [Thread-81233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:52:20.461 [DEBUG] [Thread-81233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:52:20.461 [DEBUG] [Thread-81233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:52:20.461 [DEBUG] [Thread-81233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:52:20.485 [INFO] [Thread-81233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:52:20.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:52:21.143 [DEBUG] [Thread-81233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:52:21.144 [DEBUG] [Thread-81233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:52:21.144 [DEBUG] [Thread-81233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:52:21.186 [DEBUG] [Thread-81233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:52:21.186 [DEBUG] [Thread-81233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:52:21.190 [DEBUG] [Thread-81233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:52:21.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:52:21.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:52:21.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:52:21.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:52:21.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:52:21.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:52:21.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:52:21.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:52:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:52:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.036205 -999.00   +6.50  43.43     90   +5.00 1 2 2 3 1     0    0 1.73 11.03 .NE.W 44.2 43.4 298.0 47.1 7.6 -14.9 7.4 -16.3 7.1 -13.4 7.5 -8.5
2025-12-13T02:52:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:52:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:52:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.036205
2025-12-13T02:52:21.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:52:21.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:52:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:52:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:52:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:52:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:52:15', tmtdew=2.0, humidity=87.21, cloud=0.0, wind=34.79, temperature=6.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:52:08.112', atlas_cloud=2, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:49:00')
2025-12-13T02:52:21.219 [DEBUG] [Thread-81233] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:52:21.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:52:21.316 [DEBUG] [Thread-81236] [transport.py] [_log()] starting thread (client mode): 0xf57ca530
2025-12-13T02:52:21.316 [DEBUG] [Thread-81236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:52:21.334 [DEBUG] [Thread-81236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:52:21.334 [INFO] [Thread-81236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:52:21.345 [DEBUG] [Thread-81236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:52:21.345 [DEBUG] [Thread-81236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] client lang: <none>
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] server lang: <none>
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] kex follows: False
2025-12-13T02:52:21.346 [DEBUG] [Thread-81236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:52:21.347 [DEBUG] [Thread-81236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:52:21.347 [DEBUG] [Thread-81236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:52:21.347 [DEBUG] [Thread-81236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:52:21.347 [DEBUG] [Thread-81236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:52:21.347 [DEBUG] [Thread-81236] [transport.py] [_log()] Compression: none
2025-12-13T02:52:21.347 [DEBUG] [Thread-81236] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:52:21.401 [DEBUG] [Thread-81236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:52:21.401 [DEBUG] [Thread-81236] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:52:21.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:52:21.402 [DEBUG] [Thread-81236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:52:21.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:52:21.463 [DEBUG] [Thread-81236] [transport.py] [_log()] userauth is OK
2025-12-13T02:52:21.464 [DEBUG] [Thread-81236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:52:21.464 [DEBUG] [Thread-81236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:52:21.464 [DEBUG] [Thread-81236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:52:21.464 [DEBUG] [Thread-81236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:52:21.486 [INFO] [Thread-81236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:52:21.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:52:21.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:52:22.296 [DEBUG] [Thread-81236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:52:22.296 [DEBUG] [Thread-81236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:52:22.344 [DEBUG] [Thread-81236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:52:22.344 [DEBUG] [Thread-81236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:52:22.353 [DEBUG] [Thread-81236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:52:22.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:52:22.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:52:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:52:22.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:52:22.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:52:22.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:52:22.387 [DEBUG] [Thread-81236] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:52:24.369 [DEBUG] [Thread-81238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:31.810 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:31.811 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:36.282 [DEBUG] [Thread-81239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:39.412 [DEBUG] [Thread-81240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:52.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:52:52.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:52:52.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:52:53.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 52, 47), 2.0, 86.71, 0.0, 32.11, 6.65, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:52:53.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:52:47
2025-12-13T02:52:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:52:53.370 [DEBUG] [Thread-81241] [transport.py] [_log()] starting thread (client mode): 0xf813e5c0
2025-12-13T02:52:53.370 [DEBUG] [Thread-81241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:52:53.393 [DEBUG] [Thread-81241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:52:53.393 [INFO] [Thread-81241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:53.397 [DEBUG] [Thread-81241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] client lang: <none>
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] server lang: <none>
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] kex follows: False
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] Compression: none
2025-12-13T02:52:53.398 [DEBUG] [Thread-81241] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:52:53.419 [DEBUG] [Thread-81241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:52:53.420 [DEBUG] [Thread-81241] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:52:53.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:52:53.421 [DEBUG] [Thread-81241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:52:53.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:52:53.423 [DEBUG] [Thread-81241] [transport.py] [_log()] userauth is OK
2025-12-13T02:52:53.423 [DEBUG] [Thread-81241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:52:53.423 [DEBUG] [Thread-81241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:52:53.423 [DEBUG] [Thread-81241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:52:53.423 [DEBUG] [Thread-81241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:52:53.455 [INFO] [Thread-81241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:52:53.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:52:54.092 [DEBUG] [Thread-81241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:52:54.093 [DEBUG] [Thread-81241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:52:54.093 [DEBUG] [Thread-81241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:52:54.134 [DEBUG] [Thread-81241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:52:54.134 [DEBUG] [Thread-81241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:52:54.138 [DEBUG] [Thread-81241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:52:54.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:52:54.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:52:54.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:52:54.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:52:54.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:52:54.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:52:54.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:52:54.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:52:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:52:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.036552 -999.00   +6.50  30.06     90   +5.00 1 3 2 3 1     0    0 1.79 11.95 Zn.sW 32.9 30.1 305.8 47.6 7.6 -7.9 7.5 -8.9 7.2 -6.5 7.5 -6.8
2025-12-13T02:52:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:52:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:52:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.036552
2025-12-13T02:52:54.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:52:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:52:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:52:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:52:54.165 [DEBUG] [Thread-81241] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:52:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:52:54.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:52:47', tmtdew=2.0, humidity=86.71, cloud=0.0, wind=32.11, temperature=6.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:52:38.093', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:49:00')
2025-12-13T02:52:54.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:52:54.264 [DEBUG] [Thread-81244] [transport.py] [_log()] starting thread (client mode): 0xf81e5900
2025-12-13T02:52:54.264 [DEBUG] [Thread-81244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:52:54.279 [DEBUG] [Thread-81244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:52:54.279 [INFO] [Thread-81244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:52:54.286 [DEBUG] [Thread-81244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:52:54.286 [DEBUG] [Thread-81244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] client lang: <none>
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] server lang: <none>
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] kex follows: False
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] Compression: none
2025-12-13T02:52:54.287 [DEBUG] [Thread-81244] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:52:54.343 [DEBUG] [Thread-81244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:52:54.343 [DEBUG] [Thread-81244] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:52:54.343 [DEBUG] [Thread-81244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:52:54.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:52:54.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:52:54.401 [DEBUG] [Thread-81244] [transport.py] [_log()] userauth is OK
2025-12-13T02:52:54.401 [DEBUG] [Thread-81244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:52:54.401 [DEBUG] [Thread-81244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:52:54.401 [DEBUG] [Thread-81244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:52:54.401 [DEBUG] [Thread-81244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:52:54.420 [INFO] [Thread-81244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:52:54.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:52:54.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:52:54.439 [DEBUG] [Thread-81246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:52:55.244 [DEBUG] [Thread-81244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:52:55.244 [DEBUG] [Thread-81244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:52:55.292 [DEBUG] [Thread-81244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:52:55.292 [DEBUG] [Thread-81244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:52:55.301 [DEBUG] [Thread-81244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:52:55.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:52:55.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:52:55.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:52:55.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:52:55.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:52:55.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:52:55.336 [DEBUG] [Thread-81244] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:53:09.483 [DEBUG] [Thread-81247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:24.512 [DEBUG] [Thread-81248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:25.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:53:25.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:53:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:53:26.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 53, 19), 2.0, 86.71, 0.0, 31.0, 6.66, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:53:26.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:53:19
2025-12-13T02:53:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:53:26.314 [DEBUG] [Thread-81249] [transport.py] [_log()] starting thread (client mode): 0xf5743970
2025-12-13T02:53:26.314 [DEBUG] [Thread-81249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:53:26.333 [DEBUG] [Thread-81249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:53:26.333 [INFO] [Thread-81249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] client lang: <none>
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] server lang: <none>
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] kex follows: False
2025-12-13T02:53:26.336 [DEBUG] [Thread-81249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:53:26.337 [DEBUG] [Thread-81249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:53:26.337 [DEBUG] [Thread-81249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:53:26.337 [DEBUG] [Thread-81249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:53:26.337 [DEBUG] [Thread-81249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:53:26.337 [DEBUG] [Thread-81249] [transport.py] [_log()] Compression: none
2025-12-13T02:53:26.337 [DEBUG] [Thread-81249] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:53:26.353 [DEBUG] [Thread-81249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:53:26.354 [DEBUG] [Thread-81249] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:53:26.354 [DEBUG] [Thread-81249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:53:26.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:53:26.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:53:26.356 [DEBUG] [Thread-81249] [transport.py] [_log()] userauth is OK
2025-12-13T02:53:26.356 [DEBUG] [Thread-81249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:53:26.356 [DEBUG] [Thread-81249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:53:26.357 [DEBUG] [Thread-81249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:53:26.357 [DEBUG] [Thread-81249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:53:26.380 [INFO] [Thread-81249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:53:26.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:53:26.980 [DEBUG] [Thread-81249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:53:26.981 [DEBUG] [Thread-81249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:53:26.981 [DEBUG] [Thread-81249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:53:27.022 [DEBUG] [Thread-81249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:53:27.022 [DEBUG] [Thread-81249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:53:27.025 [DEBUG] [Thread-81249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:53:27.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:53:27.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:53:27.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:53:27.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:53:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:53:27.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:53:27.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:53:27.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:53:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:53:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.036900 -999.00   +6.50  29.61     90   +5.00 1 2 1 3 1     0    0 1.79 11.64 Zn.sW 36.5 29.6 295.8 40.3 7.7 -11.5 7.4 -13.0 7.2 -10.8 7.5 -9.3
2025-12-13T02:53:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:53:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:53:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.036900
2025-12-13T02:53:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:53:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:53:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:53:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:53:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:53:27.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:53:19', tmtdew=2.0, humidity=86.71, cloud=0.0, wind=31.0, temperature=6.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:53:08.160', atlas_cloud=2, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:49:00')
2025-12-13T02:53:27.050 [DEBUG] [Thread-81249] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:53:27.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:53:27.145 [DEBUG] [Thread-81252] [transport.py] [_log()] starting thread (client mode): 0xf57409d0
2025-12-13T02:53:27.145 [DEBUG] [Thread-81252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:53:27.160 [DEBUG] [Thread-81252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:53:27.161 [INFO] [Thread-81252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:53:27.168 [DEBUG] [Thread-81252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:53:27.168 [DEBUG] [Thread-81252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:53:27.168 [DEBUG] [Thread-81252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] client lang: <none>
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] server lang: <none>
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] kex follows: False
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:53:27.169 [DEBUG] [Thread-81252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:53:27.170 [DEBUG] [Thread-81252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:53:27.170 [DEBUG] [Thread-81252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:53:27.170 [DEBUG] [Thread-81252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:53:27.170 [DEBUG] [Thread-81252] [transport.py] [_log()] Compression: none
2025-12-13T02:53:27.170 [DEBUG] [Thread-81252] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:53:27.224 [DEBUG] [Thread-81252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:53:27.225 [DEBUG] [Thread-81252] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:53:27.225 [DEBUG] [Thread-81252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:53:27.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:53:27.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:53:27.281 [DEBUG] [Thread-81252] [transport.py] [_log()] userauth is OK
2025-12-13T02:53:27.281 [DEBUG] [Thread-81252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:53:27.281 [DEBUG] [Thread-81252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:53:27.282 [DEBUG] [Thread-81252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:53:27.282 [DEBUG] [Thread-81252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:53:27.301 [INFO] [Thread-81252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:53:27.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:53:27.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:53:28.135 [DEBUG] [Thread-81252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:53:28.135 [DEBUG] [Thread-81252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:53:28.183 [DEBUG] [Thread-81252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:53:28.183 [DEBUG] [Thread-81252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:53:28.192 [DEBUG] [Thread-81252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:53:28.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:53:28.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:53:28.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:53:28.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:53:28.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:53:28.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:53:28.227 [DEBUG] [Thread-81252] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:53:32.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:32.015 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:36.371 [DEBUG] [Thread-81254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:39.541 [DEBUG] [Thread-81255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:54.593 [DEBUG] [Thread-81256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:53:58.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:53:58.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:53:58.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:53:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 53, 51), 2.06, 86.69, 0.0, 28.12, 6.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:53:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:53:51
2025-12-13T02:53:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:53:59.262 [DEBUG] [Thread-81257] [transport.py] [_log()] starting thread (client mode): 0xf5743700
2025-12-13T02:53:59.262 [DEBUG] [Thread-81257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:53:59.277 [DEBUG] [Thread-81257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:53:59.277 [INFO] [Thread-81257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] client lang: <none>
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] server lang: <none>
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] kex follows: False
2025-12-13T02:53:59.280 [DEBUG] [Thread-81257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:53:59.281 [DEBUG] [Thread-81257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:53:59.281 [DEBUG] [Thread-81257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:53:59.281 [DEBUG] [Thread-81257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:53:59.281 [DEBUG] [Thread-81257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:53:59.281 [DEBUG] [Thread-81257] [transport.py] [_log()] Compression: none
2025-12-13T02:53:59.281 [DEBUG] [Thread-81257] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:53:59.288 [DEBUG] [Thread-81257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:53:59.288 [DEBUG] [Thread-81257] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:53:59.288 [DEBUG] [Thread-81257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:53:59.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:53:59.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:53:59.289 [DEBUG] [Thread-81257] [transport.py] [_log()] userauth is OK
2025-12-13T02:53:59.289 [DEBUG] [Thread-81257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:53:59.289 [DEBUG] [Thread-81257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:53:59.289 [DEBUG] [Thread-81257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:53:59.289 [DEBUG] [Thread-81257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:53:59.308 [INFO] [Thread-81257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:53:59.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:53:59.902 [DEBUG] [Thread-81257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:53:59.902 [DEBUG] [Thread-81257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:53:59.903 [DEBUG] [Thread-81257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:53:59.944 [DEBUG] [Thread-81257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:53:59.944 [DEBUG] [Thread-81257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:53:59.946 [DEBUG] [Thread-81257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:53:59.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:53:59.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:53:59.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:53:59.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:53:59.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:53:59.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:53:59.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.037247 -999.00   +6.50  39.94     90   +5.00 1 2 2 3 1     0    0 1.80 12.17 ..ES. 31.3 39.9 302.2 49.3 7.7 -12.4 7.5 -11.8 7.2 -8.4 7.6 -6.7
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.037247
2025-12-13T02:53:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:53:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:53:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:53:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:53:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T02:53:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:53:51', tmtdew=2.06, humidity=86.69, cloud=0.0, wind=28.12, temperature=6.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:53:38.141', atlas_cloud=2, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:53:00')
2025-12-13T02:53:59.958 [DEBUG] [Thread-81257] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:54:00.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:54:00.044 [DEBUG] [Thread-81260] [transport.py] [_log()] starting thread (client mode): 0xf5743100
2025-12-13T02:54:00.044 [DEBUG] [Thread-81260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:54:00.059 [DEBUG] [Thread-81260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:54:00.059 [INFO] [Thread-81260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] client lang: <none>
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] server lang: <none>
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] kex follows: False
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] Compression: none
2025-12-13T02:54:00.066 [DEBUG] [Thread-81260] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:54:00.124 [DEBUG] [Thread-81260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:54:00.124 [DEBUG] [Thread-81260] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:54:00.124 [DEBUG] [Thread-81260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:54:00.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:54:00.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:54:00.181 [DEBUG] [Thread-81260] [transport.py] [_log()] userauth is OK
2025-12-13T02:54:00.181 [DEBUG] [Thread-81260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:54:00.181 [DEBUG] [Thread-81260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:54:00.181 [DEBUG] [Thread-81260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:54:00.181 [DEBUG] [Thread-81260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:54:00.195 [INFO] [Thread-81260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:54:00.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:54:00.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:54:01.002 [DEBUG] [Thread-81260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:54:01.003 [DEBUG] [Thread-81260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:54:01.050 [DEBUG] [Thread-81260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:54:01.050 [DEBUG] [Thread-81260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:54:01.058 [DEBUG] [Thread-81260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:54:01.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:54:01.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:54:01.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
2025-12-13T02:54:01.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:54:01.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:54:01.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:54:01.090 [DEBUG] [Thread-81260] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:54:09.621 [DEBUG] [Thread-81262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:54:24.660 [DEBUG] [Thread-81263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:54:31.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:54:31.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:54:31.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
2025-12-13T02:54:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 54, 23), 2.06, 86.69, 0.0, 24.17, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:54:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:54:23
2025-12-13T02:54:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:54:32.087 [DEBUG] [Thread-81264] [transport.py] [_log()] starting thread (client mode): 0xf813cac0
2025-12-13T02:54:32.087 [DEBUG] [Thread-81264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:54:32.106 [DEBUG] [Thread-81264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:54:32.107 [INFO] [Thread-81264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:54:32.110 [DEBUG] [Thread-81264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:54:32.110 [DEBUG] [Thread-81264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:54:32.110 [DEBUG] [Thread-81264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] client lang: <none>
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] server lang: <none>
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] kex follows: False
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] Compression: none
2025-12-13T02:54:32.111 [DEBUG] [Thread-81264] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:54:32.126 [DEBUG] [Thread-81264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:54:32.127 [DEBUG] [Thread-81264] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:54:32.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:54:32.128 [DEBUG] [Thread-81264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:54:32.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:54:32.129 [DEBUG] [Thread-81264] [transport.py] [_log()] userauth is OK
2025-12-13T02:54:32.130 [DEBUG] [Thread-81264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:54:32.130 [DEBUG] [Thread-81264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:54:32.130 [DEBUG] [Thread-81264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:54:32.130 [DEBUG] [Thread-81264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:54:32.150 [INFO] [Thread-81264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:54:32.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:54:32.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:54:32.217 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:54:32.784 [DEBUG] [Thread-81264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:54:32.784 [DEBUG] [Thread-81264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:54:32.785 [DEBUG] [Thread-81264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:54:32.827 [DEBUG] [Thread-81264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:54:32.832 [DEBUG] [Thread-81264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:54:32.834 [DEBUG] [Thread-81264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:54:32.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:54:32.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:54:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:54:32.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:54:32.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:54:32.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:54:32.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:54:32.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.037594 -999.00   +6.60  29.25     90   +5.10 1 3 1 3 1     0    0 1.79 12.31 ..ES. 31.8 29.2 292.8 38.6 7.7 -7.6 7.5 -7.2 7.2 -5.5 7.6 -6.9
2025-12-13T02:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.037594
2025-12-13T02:54:32.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:54:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:54:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:54:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:54:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:54:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:54:23', tmtdew=2.06, humidity=86.69, cloud=0.0, wind=24.17, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:54:08.122', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:53:00')
2025-12-13T02:54:32.850 [DEBUG] [Thread-81264] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:54:32.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:54:32.949 [DEBUG] [Thread-81267] [transport.py] [_log()] starting thread (client mode): 0xf57ca530
2025-12-13T02:54:32.949 [DEBUG] [Thread-81267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:54:32.964 [DEBUG] [Thread-81267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:54:32.964 [INFO] [Thread-81267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:54:32.971 [DEBUG] [Thread-81267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:54:32.971 [DEBUG] [Thread-81267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:54:32.971 [DEBUG] [Thread-81267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:54:32.971 [DEBUG] [Thread-81267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:54:32.971 [DEBUG] [Thread-81267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:54:32.971 [DEBUG] [Thread-81267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] client lang: <none>
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] server lang: <none>
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] kex follows: False
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] Compression: none
2025-12-13T02:54:32.972 [DEBUG] [Thread-81267] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:54:33.030 [DEBUG] [Thread-81267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:54:33.031 [DEBUG] [Thread-81267] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:54:33.031 [DEBUG] [Thread-81267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:54:33.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:54:33.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:54:33.090 [DEBUG] [Thread-81267] [transport.py] [_log()] userauth is OK
2025-12-13T02:54:33.090 [DEBUG] [Thread-81267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:54:33.090 [DEBUG] [Thread-81267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:54:33.090 [DEBUG] [Thread-81267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:54:33.090 [DEBUG] [Thread-81267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:54:33.109 [INFO] [Thread-81267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:54:33.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:54:33.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:54:33.944 [DEBUG] [Thread-81267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:54:33.944 [DEBUG] [Thread-81267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:54:33.997 [DEBUG] [Thread-81267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:54:33.997 [DEBUG] [Thread-81267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:54:34.006 [DEBUG] [Thread-81267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:54:34.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:54:34.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:54:34.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:54:34.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:54:34.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:54:34.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:54:34.040 [DEBUG] [Thread-81267] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:54:36.441 [DEBUG] [Thread-81269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:54:39.689 [DEBUG] [Thread-81270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:54:54.723 [DEBUG] [Thread-81271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:04.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:55:04.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:55:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:55:04.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 54, 55), 2.0, 86.72, 0.0, 24.76, 6.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:55:04.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:54:55
2025-12-13T02:55:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:55:04.996 [DEBUG] [Thread-81272] [transport.py] [_log()] starting thread (client mode): 0xf81e6e00
2025-12-13T02:55:04.996 [DEBUG] [Thread-81272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:55:05.017 [DEBUG] [Thread-81272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:55:05.017 [INFO] [Thread-81272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:05.020 [DEBUG] [Thread-81272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] client lang: <none>
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] server lang: <none>
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] kex follows: False
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] Compression: none
2025-12-13T02:55:05.021 [DEBUG] [Thread-81272] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:55:05.037 [DEBUG] [Thread-81272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:55:05.037 [DEBUG] [Thread-81272] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:55:05.038 [DEBUG] [Thread-81272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:55:05.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:55:05.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:55:05.040 [DEBUG] [Thread-81272] [transport.py] [_log()] userauth is OK
2025-12-13T02:55:05.040 [DEBUG] [Thread-81272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:55:05.040 [DEBUG] [Thread-81272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:55:05.040 [DEBUG] [Thread-81272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:55:05.040 [DEBUG] [Thread-81272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:55:05.064 [INFO] [Thread-81272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:55:05.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:55:05.949 [DEBUG] [Thread-81272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:55:05.949 [DEBUG] [Thread-81272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:55:05.949 [DEBUG] [Thread-81272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:55:05.990 [DEBUG] [Thread-81272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:55:05.990 [DEBUG] [Thread-81272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:55:05.992 [DEBUG] [Thread-81272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:55:05.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:55:05.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:55:05.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:55:06.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:55:06.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:55:06.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:55:06.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:55:06.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:55:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:55:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.037594 -999.00   +6.60  29.25     90   +5.10 1 3 1 3 1     0    0 1.79 12.31 ..ES. 31.8 29.2 292.8 38.6 7.7 -7.6 7.5 -7.2 7.2 -5.5 7.6 -6.9
2025-12-13T02:55:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:55:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:55:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.037594
2025-12-13T02:55:06.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:55:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:55:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:55:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:55:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:55:06.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:54:55', tmtdew=2.0, humidity=86.72, cloud=0.0, wind=24.76, temperature=6.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:54:08.122', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:53:00')
2025-12-13T02:55:06.018 [DEBUG] [Thread-81272] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:55:06.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:55:06.114 [DEBUG] [Thread-81275] [transport.py] [_log()] starting thread (client mode): 0xf81e7cd0
2025-12-13T02:55:06.114 [DEBUG] [Thread-81275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:55:06.129 [DEBUG] [Thread-81275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:55:06.129 [INFO] [Thread-81275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:55:06.136 [DEBUG] [Thread-81275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:55:06.136 [DEBUG] [Thread-81275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:55:06.136 [DEBUG] [Thread-81275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:55:06.136 [DEBUG] [Thread-81275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] client lang: <none>
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] server lang: <none>
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] kex follows: False
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] Compression: none
2025-12-13T02:55:06.137 [DEBUG] [Thread-81275] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:55:06.192 [DEBUG] [Thread-81275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:55:06.192 [DEBUG] [Thread-81275] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:55:06.192 [DEBUG] [Thread-81275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:55:06.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:55:06.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:55:06.249 [DEBUG] [Thread-81275] [transport.py] [_log()] userauth is OK
2025-12-13T02:55:06.249 [DEBUG] [Thread-81275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:55:06.249 [DEBUG] [Thread-81275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:55:06.249 [DEBUG] [Thread-81275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:55:06.249 [DEBUG] [Thread-81275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:55:06.265 [INFO] [Thread-81275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:55:06.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:55:06.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:55:07.125 [DEBUG] [Thread-81275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:55:07.125 [DEBUG] [Thread-81275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:55:07.173 [DEBUG] [Thread-81275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:55:07.173 [DEBUG] [Thread-81275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:55:07.182 [DEBUG] [Thread-81275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:55:07.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:55:07.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:55:07.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:55:07.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:55:07.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:55:07.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:55:07.217 [DEBUG] [Thread-81275] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:55:09.753 [DEBUG] [Thread-81277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:24.793 [DEBUG] [Thread-81278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:32.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:32.421 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:36.517 [DEBUG] [Thread-81279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:37.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:55:37.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:55:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:55:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 55, 27), 2.01, 86.64, 0.0, 30.12, 6.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:55:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:55:27
2025-12-13T02:55:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:55:38.226 [DEBUG] [Thread-81280] [transport.py] [_log()] starting thread (client mode): 0xf81e6890
2025-12-13T02:55:38.226 [DEBUG] [Thread-81280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:55:38.246 [DEBUG] [Thread-81280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:55:38.246 [INFO] [Thread-81280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] client lang: <none>
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] server lang: <none>
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] kex follows: False
2025-12-13T02:55:38.249 [DEBUG] [Thread-81280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:55:38.250 [DEBUG] [Thread-81280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:55:38.250 [DEBUG] [Thread-81280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:55:38.250 [DEBUG] [Thread-81280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:55:38.250 [DEBUG] [Thread-81280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:55:38.250 [DEBUG] [Thread-81280] [transport.py] [_log()] Compression: none
2025-12-13T02:55:38.250 [DEBUG] [Thread-81280] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:55:38.267 [DEBUG] [Thread-81280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:55:38.267 [DEBUG] [Thread-81280] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:55:38.268 [DEBUG] [Thread-81280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:55:38.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:55:38.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:55:38.270 [DEBUG] [Thread-81280] [transport.py] [_log()] userauth is OK
2025-12-13T02:55:38.270 [DEBUG] [Thread-81280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:55:38.270 [DEBUG] [Thread-81280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:55:38.270 [DEBUG] [Thread-81280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:55:38.270 [DEBUG] [Thread-81280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:55:38.306 [INFO] [Thread-81280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:55:38.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:55:38.939 [DEBUG] [Thread-81280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:55:38.939 [DEBUG] [Thread-81280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:55:38.940 [DEBUG] [Thread-81280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:55:38.980 [DEBUG] [Thread-81280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:55:38.980 [DEBUG] [Thread-81280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:55:38.983 [DEBUG] [Thread-81280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:55:38.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:55:38.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:55:38.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:55:38.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:55:39.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:55:39.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:55:39.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:55:39.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:55:39.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:55:39.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.037941 -999.00   +6.60  26.21     90   +5.10 1 3 1 3 1     0    0 1.78 12.24 Z.ES. 31.9 26.2 293.7 35.6 7.7 -8.1 7.5 -7.6 7.2 -7.9 7.6 -9.7
2025-12-13T02:55:39.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:55:39.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:55:39.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.037941
2025-12-13T02:55:39.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:55:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:55:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:55:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:55:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:55:39.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:55:27', tmtdew=2.01, humidity=86.64, cloud=0.0, wind=30.12, temperature=6.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:54:38.102', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:53:00')
2025-12-13T02:55:39.008 [DEBUG] [Thread-81280] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:55:39.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:55:39.103 [DEBUG] [Thread-81283] [transport.py] [_log()] starting thread (client mode): 0xf81e7790
2025-12-13T02:55:39.103 [DEBUG] [Thread-81283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:55:39.118 [DEBUG] [Thread-81283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:55:39.118 [INFO] [Thread-81283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] client lang: <none>
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] server lang: <none>
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] kex follows: False
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:55:39.126 [DEBUG] [Thread-81283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:55:39.127 [DEBUG] [Thread-81283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:55:39.127 [DEBUG] [Thread-81283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:55:39.127 [DEBUG] [Thread-81283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:55:39.127 [DEBUG] [Thread-81283] [transport.py] [_log()] Compression: none
2025-12-13T02:55:39.127 [DEBUG] [Thread-81283] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:55:39.187 [DEBUG] [Thread-81283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:55:39.188 [DEBUG] [Thread-81283] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:55:39.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:55:39.189 [DEBUG] [Thread-81283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:55:39.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:55:39.245 [DEBUG] [Thread-81283] [transport.py] [_log()] userauth is OK
2025-12-13T02:55:39.245 [DEBUG] [Thread-81283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:55:39.246 [DEBUG] [Thread-81283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:55:39.246 [DEBUG] [Thread-81283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:55:39.246 [DEBUG] [Thread-81283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:55:39.263 [INFO] [Thread-81283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:55:39.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:55:39.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:55:39.823 [DEBUG] [Thread-81285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:55:40.086 [DEBUG] [Thread-81283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:55:40.086 [DEBUG] [Thread-81283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:55:40.134 [DEBUG] [Thread-81283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:55:40.134 [DEBUG] [Thread-81283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:55:40.143 [DEBUG] [Thread-81283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:55:40.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:55:40.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:55:40.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:55:40.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:55:40.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:55:40.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:55:40.178 [DEBUG] [Thread-81283] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:55:54.865 [DEBUG] [Thread-81286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:09.891 [DEBUG] [Thread-81287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:10.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:56:10.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:56:10.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:56:10.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 55, 59), 2.02, 86.61, 0.0, 31.11, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:56:10.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:55:59
2025-12-13T02:56:10.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:56:11.133 [DEBUG] [Thread-81288] [transport.py] [_log()] starting thread (client mode): 0xfabc5930
2025-12-13T02:56:11.133 [DEBUG] [Thread-81288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:56:11.154 [DEBUG] [Thread-81288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:56:11.154 [INFO] [Thread-81288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:56:11.157 [DEBUG] [Thread-81288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:56:11.157 [DEBUG] [Thread-81288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:56:11.157 [DEBUG] [Thread-81288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:56:11.157 [DEBUG] [Thread-81288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] client lang: <none>
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] server lang: <none>
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] kex follows: False
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] Compression: none
2025-12-13T02:56:11.158 [DEBUG] [Thread-81288] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:56:11.175 [DEBUG] [Thread-81288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:56:11.176 [DEBUG] [Thread-81288] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:56:11.176 [DEBUG] [Thread-81288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:56:11.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:56:11.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:56:11.178 [DEBUG] [Thread-81288] [transport.py] [_log()] userauth is OK
2025-12-13T02:56:11.178 [DEBUG] [Thread-81288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:56:11.178 [DEBUG] [Thread-81288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:56:11.178 [DEBUG] [Thread-81288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:56:11.178 [DEBUG] [Thread-81288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:56:11.199 [INFO] [Thread-81288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:56:11.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:56:11.822 [DEBUG] [Thread-81288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:56:11.823 [DEBUG] [Thread-81288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:56:11.823 [DEBUG] [Thread-81288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:56:11.864 [DEBUG] [Thread-81288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:56:11.864 [DEBUG] [Thread-81288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:56:11.867 [DEBUG] [Thread-81288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:56:11.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:56:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:56:11.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:56:11.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:56:11.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:56:11.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:56:11.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:56:11.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:56:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:56:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.038636 -999.00   +6.60  32.02     90   +5.10 1 3 2 3 1     0    0 1.74 11.05 z.E.. 24.7 32.0 296.6 42.6 7.8 -11.7 7.5 -9.2 7.2 -9.1 7.6 -10.1
2025-12-13T02:56:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:56:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:56:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.038636
2025-12-13T02:56:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:56:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:56:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:56:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:56:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:56:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:55:59', tmtdew=2.02, humidity=86.61, cloud=0.0, wind=31.11, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:55:38.150', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:53:00')
2025-12-13T02:56:11.893 [DEBUG] [Thread-81288] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:56:11.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:56:11.988 [DEBUG] [Thread-81291] [transport.py] [_log()] starting thread (client mode): 0xf5701720
2025-12-13T02:56:11.988 [DEBUG] [Thread-81291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:56:12.003 [DEBUG] [Thread-81291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:56:12.003 [INFO] [Thread-81291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:56:12.010 [DEBUG] [Thread-81291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:56:12.010 [DEBUG] [Thread-81291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] client lang: <none>
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] server lang: <none>
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] kex follows: False
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] Compression: none
2025-12-13T02:56:12.011 [DEBUG] [Thread-81291] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:56:12.071 [DEBUG] [Thread-81291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:56:12.072 [DEBUG] [Thread-81291] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:56:12.072 [DEBUG] [Thread-81291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:56:12.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:56:12.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:56:12.129 [DEBUG] [Thread-81291] [transport.py] [_log()] userauth is OK
2025-12-13T02:56:12.129 [DEBUG] [Thread-81291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:56:12.130 [DEBUG] [Thread-81291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:56:12.130 [DEBUG] [Thread-81291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:56:12.130 [DEBUG] [Thread-81291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:56:12.148 [INFO] [Thread-81291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:56:12.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:56:12.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:56:13.015 [DEBUG] [Thread-81291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:56:13.015 [DEBUG] [Thread-81291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:56:13.063 [DEBUG] [Thread-81291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:56:13.063 [DEBUG] [Thread-81291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:56:13.072 [DEBUG] [Thread-81291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:56:13.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:56:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:56:13.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:56:13.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:56:13.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:56:13.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:56:13.107 [DEBUG] [Thread-81291] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:56:24.924 [DEBUG] [Thread-81293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:32.622 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:32.622 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:36.586 [DEBUG] [Thread-81294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:39.974 [DEBUG] [Thread-81295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:56:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:56:43.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:56:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:56:43.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 56, 31), 2.03, 86.58, 0.0, 27.95, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:56:43.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:56:31
2025-12-13T02:56:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:56:44.062 [DEBUG] [Thread-81296] [transport.py] [_log()] starting thread (client mode): 0xf81e6260
2025-12-13T02:56:44.062 [DEBUG] [Thread-81296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:56:44.082 [DEBUG] [Thread-81296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:56:44.082 [INFO] [Thread-81296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:44.086 [DEBUG] [Thread-81296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] client lang: <none>
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] server lang: <none>
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] kex follows: False
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] Compression: none
2025-12-13T02:56:44.087 [DEBUG] [Thread-81296] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:56:44.107 [DEBUG] [Thread-81296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:56:44.108 [DEBUG] [Thread-81296] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:56:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:56:44.109 [DEBUG] [Thread-81296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:56:44.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:56:44.111 [DEBUG] [Thread-81296] [transport.py] [_log()] userauth is OK
2025-12-13T02:56:44.111 [DEBUG] [Thread-81296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:56:44.111 [DEBUG] [Thread-81296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:56:44.111 [DEBUG] [Thread-81296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:56:44.111 [DEBUG] [Thread-81296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:56:44.128 [INFO] [Thread-81296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:56:44.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:56:44.755 [DEBUG] [Thread-81296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:56:44.755 [DEBUG] [Thread-81296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:56:44.755 [DEBUG] [Thread-81296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:56:44.796 [DEBUG] [Thread-81296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:56:44.796 [DEBUG] [Thread-81296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:56:44.799 [DEBUG] [Thread-81296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:56:44.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:56:44.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:56:44.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:56:44.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:56:44.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:56:44.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:56:44.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:56:44.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:56:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:56:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.038983 -999.00   +6.60  37.18     90   +5.10 1 3 2 3 1     0    0 1.77 10.94 z.E.. 30.7 37.2 313.6 43.5 7.8 -9.9 7.5 -7.2 7.2 -6.3 7.6 -6.9
2025-12-13T02:56:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:56:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:56:44.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.038983
2025-12-13T02:56:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:56:44.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:56:44.826 [DEBUG] [Thread-81296] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:56:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:56:44.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:56:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:56:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:56:31', tmtdew=2.03, humidity=86.58, cloud=0.0, wind=27.95, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:56:08.131', atlas_cloud=3, atlas_rain=1, zp_data=[0.14775000000000027, 0.29375000000000107, 0.5507500000000007, 0.786999999999999, 0.899, 0.25975000000000037, 0.07000000000000028, 0.056250000000000355, 0.09249999999999936, 0.2140000000000004, 0.28774999999999906, 1.4295, nan, 0.09275000000000055, 0.017999999999998906, 0.07249999999999979, 0.13824999999999932, 0.22850000000000037, 0.2969999999999988, 1.3692499999999992, nan, 0.11474999999999902, 0.018250000000001876, 0.06424999999999947, 0.17999999999999794, 1.1600000000000001, 1.42375, nan, nan, 0.3130000000000006, 0.11100000000000065, 0.11800000000000033, 0.2497499999999988], zp_timestamp='2025-12-13T00:53:00')
2025-12-13T02:56:44.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:56:44.926 [DEBUG] [Thread-81299] [transport.py] [_log()] starting thread (client mode): 0xf5741840
2025-12-13T02:56:44.926 [DEBUG] [Thread-81299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:56:44.941 [DEBUG] [Thread-81299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:56:44.941 [INFO] [Thread-81299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:56:44.948 [DEBUG] [Thread-81299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] client lang: <none>
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] server lang: <none>
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] kex follows: False
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] Compression: none
2025-12-13T02:56:44.949 [DEBUG] [Thread-81299] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:56:45.005 [DEBUG] [Thread-81299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:56:45.005 [DEBUG] [Thread-81299] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:56:45.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:56:45.006 [DEBUG] [Thread-81299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:56:45.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:56:45.062 [DEBUG] [Thread-81299] [transport.py] [_log()] userauth is OK
2025-12-13T02:56:45.062 [DEBUG] [Thread-81299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:56:45.062 [DEBUG] [Thread-81299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:56:45.062 [DEBUG] [Thread-81299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:56:45.062 [DEBUG] [Thread-81299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:56:45.085 [INFO] [Thread-81299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:56:45.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:56:45.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:56:45.904 [DEBUG] [Thread-81299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:56:45.904 [DEBUG] [Thread-81299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:56:45.952 [DEBUG] [Thread-81299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:56:45.952 [DEBUG] [Thread-81299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:56:45.961 [DEBUG] [Thread-81299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:56:45.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:56:45.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:56:45.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:56:45.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:56:45.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:56:45.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:56:45.995 [DEBUG] [Thread-81299] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:56:55.004 [DEBUG] [Thread-81301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:10.054 [DEBUG] [Thread-81302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:16.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:57:16.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:57:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:57:16.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 57, 3), 2.03, 86.54, 0.0, 28.48, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:57:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:57:03
2025-12-13T02:57:16.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:57:16.979 [DEBUG] [Thread-81303] [transport.py] [_log()] starting thread (client mode): 0xf57017b0
2025-12-13T02:57:16.980 [DEBUG] [Thread-81303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:57:17.004 [DEBUG] [Thread-81303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:57:17.004 [INFO] [Thread-81303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:57:17.007 [DEBUG] [Thread-81303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:57:17.007 [DEBUG] [Thread-81303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:57:17.007 [DEBUG] [Thread-81303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] client lang: <none>
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] server lang: <none>
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] kex follows: False
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] Compression: none
2025-12-13T02:57:17.008 [DEBUG] [Thread-81303] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:57:17.027 [DEBUG] [Thread-81303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:57:17.028 [DEBUG] [Thread-81303] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:57:17.028 [DEBUG] [Thread-81303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:57:17.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:57:17.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:57:17.069 [DEBUG] [Thread-81303] [transport.py] [_log()] userauth is OK
2025-12-13T02:57:17.069 [DEBUG] [Thread-81303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:57:17.069 [DEBUG] [Thread-81303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:57:17.069 [DEBUG] [Thread-81303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:57:17.069 [DEBUG] [Thread-81303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:57:17.105 [INFO] [Thread-81303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:57:17.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:57:17.740 [DEBUG] [Thread-81303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:57:17.741 [DEBUG] [Thread-81303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:57:17.741 [DEBUG] [Thread-81303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:57:17.782 [DEBUG] [Thread-81303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:57:17.782 [DEBUG] [Thread-81303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:57:17.785 [DEBUG] [Thread-81303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:57:17.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:57:17.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:57:17.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:57:17.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:57:17.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:57:17.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:57:17.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:57:17.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:57:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:57:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.039330 -999.00   +6.60  38.17     90   +5.10 1 3 2 3 1     0    0 1.79 11.39 ZN..W 34.1 38.2 297.2 44.0 7.8 -7.1 7.7 -6.1 7.3 -5.6 7.6 -6.9
2025-12-13T02:57:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:57:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:57:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.039330
2025-12-13T02:57:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:57:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:57:17.809 [DEBUG] [Thread-81303] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:57:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:57:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:57:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:57:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:57:03', tmtdew=2.03, humidity=86.54, cloud=0.0, wind=28.48, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:56:38.112', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:55:00')
2025-12-13T02:57:17.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:57:17.911 [DEBUG] [Thread-81306] [transport.py] [_log()] starting thread (client mode): 0xf81e5000
2025-12-13T02:57:17.911 [DEBUG] [Thread-81306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:57:17.926 [DEBUG] [Thread-81306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:57:17.926 [INFO] [Thread-81306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] client lang: <none>
2025-12-13T02:57:17.934 [DEBUG] [Thread-81306] [transport.py] [_log()] server lang: <none>
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] kex follows: False
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] Compression: none
2025-12-13T02:57:17.935 [DEBUG] [Thread-81306] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:57:17.993 [DEBUG] [Thread-81306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:57:17.993 [DEBUG] [Thread-81306] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:57:17.994 [DEBUG] [Thread-81306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:57:17.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:57:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:57:18.050 [DEBUG] [Thread-81306] [transport.py] [_log()] userauth is OK
2025-12-13T02:57:18.050 [DEBUG] [Thread-81306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:57:18.050 [DEBUG] [Thread-81306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:57:18.050 [DEBUG] [Thread-81306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:57:18.050 [DEBUG] [Thread-81306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:57:18.073 [INFO] [Thread-81306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:57:18.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:57:18.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:57:18.916 [DEBUG] [Thread-81306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:57:18.916 [DEBUG] [Thread-81306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:57:18.963 [DEBUG] [Thread-81306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:57:18.964 [DEBUG] [Thread-81306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:57:18.972 [DEBUG] [Thread-81306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:57:18.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:57:18.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:57:18.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:57:18.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:57:18.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:57:18.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:57:19.006 [DEBUG] [Thread-81306] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:57:25.083 [DEBUG] [Thread-81308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:32.821 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:32.822 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:36.658 [DEBUG] [Thread-81309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:40.126 [DEBUG] [Thread-81310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:57:49.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:57:49.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:57:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:57:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 57, 35), 2.03, 86.56, 0.0, 25.81, 6.8, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:57:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:57:35
2025-12-13T02:57:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:57:50.038 [DEBUG] [Thread-81311] [transport.py] [_log()] starting thread (client mode): 0xf81e73a0
2025-12-13T02:57:50.038 [DEBUG] [Thread-81311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:57:50.058 [DEBUG] [Thread-81311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:57:50.058 [INFO] [Thread-81311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] client lang: <none>
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] server lang: <none>
2025-12-13T02:57:50.061 [DEBUG] [Thread-81311] [transport.py] [_log()] kex follows: False
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] Compression: none
2025-12-13T02:57:50.062 [DEBUG] [Thread-81311] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:57:50.078 [DEBUG] [Thread-81311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:57:50.078 [DEBUG] [Thread-81311] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:57:50.078 [DEBUG] [Thread-81311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:57:50.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:57:50.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:57:50.079 [DEBUG] [Thread-81311] [transport.py] [_log()] userauth is OK
2025-12-13T02:57:50.079 [DEBUG] [Thread-81311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:57:50.079 [DEBUG] [Thread-81311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:57:50.079 [DEBUG] [Thread-81311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:57:50.079 [DEBUG] [Thread-81311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:57:50.088 [INFO] [Thread-81311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:57:50.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:57:50.715 [DEBUG] [Thread-81311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:57:50.715 [DEBUG] [Thread-81311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:57:50.715 [DEBUG] [Thread-81311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:57:50.757 [DEBUG] [Thread-81311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:57:50.757 [DEBUG] [Thread-81311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:57:50.759 [DEBUG] [Thread-81311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:57:50.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:57:50.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:57:50.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:57:50.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:57:50.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:57:50.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:57:50.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.039677 -999.00   +6.60  29.38     90   +5.10 1 3 1 3 1     0    0 1.81 11.91 zNE.w 30.2 29.4 302.0 38.7 7.8 -7.6 7.6 -6.5 7.2 -5.9 7.6 -6.9
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.039677
2025-12-13T02:57:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:57:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:57:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:57:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:57:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:57:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:57:35', tmtdew=2.03, humidity=86.56, cloud=0.0, wind=25.81, temperature=6.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:57:08.093', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:55:00')
2025-12-13T02:57:50.777 [DEBUG] [Thread-81311] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:57:50.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:57:50.864 [DEBUG] [Thread-81314] [transport.py] [_log()] starting thread (client mode): 0xf81e6830
2025-12-13T02:57:50.864 [DEBUG] [Thread-81314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:57:50.879 [DEBUG] [Thread-81314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:57:50.879 [INFO] [Thread-81314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:50.886 [DEBUG] [Thread-81314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] client lang: <none>
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] server lang: <none>
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] kex follows: False
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] Compression: none
2025-12-13T02:57:50.887 [DEBUG] [Thread-81314] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:57:50.944 [DEBUG] [Thread-81314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:57:50.945 [DEBUG] [Thread-81314] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:57:50.945 [DEBUG] [Thread-81314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:57:50.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:57:50.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:57:51.001 [DEBUG] [Thread-81314] [transport.py] [_log()] userauth is OK
2025-12-13T02:57:51.001 [DEBUG] [Thread-81314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:57:51.001 [DEBUG] [Thread-81314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:57:51.001 [DEBUG] [Thread-81314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:57:51.001 [DEBUG] [Thread-81314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:57:51.019 [INFO] [Thread-81314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:57:51.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:57:51.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:57:51.830 [DEBUG] [Thread-81314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:57:51.830 [DEBUG] [Thread-81314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:57:51.877 [DEBUG] [Thread-81314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:57:51.878 [DEBUG] [Thread-81314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:57:51.886 [DEBUG] [Thread-81314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:57:51.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:57:51.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:57:51.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:57:51.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:57:51.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:57:51.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:57:51.917 [DEBUG] [Thread-81314] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:57:55.155 [DEBUG] [Thread-81316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:10.188 [DEBUG] [Thread-81317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:58:21.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:58:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:58:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 58, 7), 2.04, 86.46, 0.0, 28.65, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:58:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:58:07
2025-12-13T02:58:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:58:22.917 [DEBUG] [Thread-81318] [transport.py] [_log()] starting thread (client mode): 0xf813e800
2025-12-13T02:58:22.917 [DEBUG] [Thread-81318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:58:22.937 [DEBUG] [Thread-81318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:58:22.937 [INFO] [Thread-81318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:58:22.940 [DEBUG] [Thread-81318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:58:22.940 [DEBUG] [Thread-81318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:58:22.940 [DEBUG] [Thread-81318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:58:22.940 [DEBUG] [Thread-81318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] client lang: <none>
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] server lang: <none>
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] kex follows: False
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] Compression: none
2025-12-13T02:58:22.941 [DEBUG] [Thread-81318] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:58:22.959 [DEBUG] [Thread-81318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:58:22.960 [DEBUG] [Thread-81318] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:58:22.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:58:22.961 [DEBUG] [Thread-81318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:58:22.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:58:22.963 [DEBUG] [Thread-81318] [transport.py] [_log()] userauth is OK
2025-12-13T02:58:22.963 [DEBUG] [Thread-81318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:58:22.963 [DEBUG] [Thread-81318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:58:22.963 [DEBUG] [Thread-81318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:58:22.963 [DEBUG] [Thread-81318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:58:22.980 [INFO] [Thread-81318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:58:22.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:58:23.616 [DEBUG] [Thread-81318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:58:23.616 [DEBUG] [Thread-81318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:58:23.616 [DEBUG] [Thread-81318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:58:23.657 [DEBUG] [Thread-81318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:58:23.657 [DEBUG] [Thread-81318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:58:23.660 [DEBUG] [Thread-81318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:58:23.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:58:23.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:58:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:58:23.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:58:23.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:58:23.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:58:23.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:58:23.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:58:23.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:58:23.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.040025 -999.00   +6.60  36.08     90   +5.10 1 3 2 3 1     0    0 1.79 11.89 zNE.w 32.6 36.1 292.6 42.0 7.8 -6.9 7.6 -5.6 7.2 -5.0 7.6 -6.7
2025-12-13T02:58:23.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:58:23.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:58:23.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.040025
2025-12-13T02:58:23.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:58:23.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:58:23.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:58:23.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:58:23.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:58:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:58:07', tmtdew=2.04, humidity=86.46, cloud=0.0, wind=28.65, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:57:38.160', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:55:00')
2025-12-13T02:58:23.685 [DEBUG] [Thread-81318] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:58:23.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:58:23.780 [DEBUG] [Thread-81321] [transport.py] [_log()] starting thread (client mode): 0xf575f460
2025-12-13T02:58:23.780 [DEBUG] [Thread-81321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:58:23.795 [DEBUG] [Thread-81321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:58:23.795 [INFO] [Thread-81321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:23.803 [DEBUG] [Thread-81321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] client lang: <none>
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] server lang: <none>
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] kex follows: False
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:58:23.804 [DEBUG] [Thread-81321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:58:23.805 [DEBUG] [Thread-81321] [transport.py] [_log()] Compression: none
2025-12-13T02:58:23.805 [DEBUG] [Thread-81321] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:58:23.865 [DEBUG] [Thread-81321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:58:23.865 [DEBUG] [Thread-81321] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:58:23.866 [DEBUG] [Thread-81321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:58:23.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:58:23.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:58:23.922 [DEBUG] [Thread-81321] [transport.py] [_log()] userauth is OK
2025-12-13T02:58:23.922 [DEBUG] [Thread-81321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:58:23.922 [DEBUG] [Thread-81321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:58:23.922 [DEBUG] [Thread-81321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:58:23.922 [DEBUG] [Thread-81321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:58:23.941 [INFO] [Thread-81321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:58:23.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:58:23.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:58:24.759 [DEBUG] [Thread-81321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:58:24.759 [DEBUG] [Thread-81321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:58:24.807 [DEBUG] [Thread-81321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:58:24.807 [DEBUG] [Thread-81321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:58:24.816 [DEBUG] [Thread-81321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:58:24.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:58:24.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:58:24.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:58:24.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:58:24.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:58:24.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:58:24.850 [DEBUG] [Thread-81321] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:58:25.218 [DEBUG] [Thread-81323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:33.024 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:33.025 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:36.746 [DEBUG] [Thread-81324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:40.261 [DEBUG] [Thread-81325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:58:54.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:58:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:58:55.290 [DEBUG] [Thread-81326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:58:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 58, 39), 2.1, 86.43, 0.0, 30.24, 6.81, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:58:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:58:39
2025-12-13T02:58:55.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:58:55.808 [DEBUG] [Thread-81327] [transport.py] [_log()] starting thread (client mode): 0xf57cad40
2025-12-13T02:58:55.808 [DEBUG] [Thread-81327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:58:55.828 [DEBUG] [Thread-81327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:58:55.828 [INFO] [Thread-81327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] client lang: <none>
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] server lang: <none>
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] kex follows: False
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] Compression: none
2025-12-13T02:58:55.832 [DEBUG] [Thread-81327] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:58:55.848 [DEBUG] [Thread-81327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:58:55.849 [DEBUG] [Thread-81327] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:58:55.849 [DEBUG] [Thread-81327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:58:55.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:58:55.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:58:55.851 [DEBUG] [Thread-81327] [transport.py] [_log()] userauth is OK
2025-12-13T02:58:55.851 [DEBUG] [Thread-81327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:58:55.851 [DEBUG] [Thread-81327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:58:55.851 [DEBUG] [Thread-81327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:58:55.851 [DEBUG] [Thread-81327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:58:55.871 [INFO] [Thread-81327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:58:55.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:58:56.474 [DEBUG] [Thread-81327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:58:56.474 [DEBUG] [Thread-81327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:58:56.474 [DEBUG] [Thread-81327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:58:56.515 [DEBUG] [Thread-81327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:58:56.515 [DEBUG] [Thread-81327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:58:56.518 [DEBUG] [Thread-81327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:58:56.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:58:56.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:58:56.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:58:56.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:58:56.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:58:56.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:58:56.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:58:56.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:58:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:58:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.040372 -999.00   +6.60  35.09     90   +5.10 1 3 2 3 1     0    0 1.82 12.22 .NE.w 29.3 35.1 297.6 43.7 7.8 -5.6 7.6 -4.5 7.3 -3.8 7.6 -5.2
2025-12-13T02:58:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:58:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:58:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.040372
2025-12-13T02:58:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:58:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:58:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:58:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:58:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:58:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:58:39', tmtdew=2.1, humidity=86.43, cloud=0.0, wind=30.24, temperature=6.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:58:08.141', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:55:00')
2025-12-13T02:58:56.543 [DEBUG] [Thread-81327] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:58:56.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:58:56.640 [DEBUG] [Thread-81330] [transport.py] [_log()] starting thread (client mode): 0xf57725c0
2025-12-13T02:58:56.640 [DEBUG] [Thread-81330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:58:56.655 [DEBUG] [Thread-81330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:58:56.655 [INFO] [Thread-81330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] client lang: <none>
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] server lang: <none>
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] kex follows: False
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:58:56.663 [DEBUG] [Thread-81330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:58:56.664 [DEBUG] [Thread-81330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:58:56.664 [DEBUG] [Thread-81330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:58:56.664 [DEBUG] [Thread-81330] [transport.py] [_log()] Compression: none
2025-12-13T02:58:56.664 [DEBUG] [Thread-81330] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:58:56.721 [DEBUG] [Thread-81330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:58:56.721 [DEBUG] [Thread-81330] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:58:56.722 [DEBUG] [Thread-81330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:58:56.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:58:56.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:58:56.778 [DEBUG] [Thread-81330] [transport.py] [_log()] userauth is OK
2025-12-13T02:58:56.778 [DEBUG] [Thread-81330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:58:56.778 [DEBUG] [Thread-81330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:58:56.779 [DEBUG] [Thread-81330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:58:56.779 [DEBUG] [Thread-81330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:58:56.798 [INFO] [Thread-81330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:58:56.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:58:56.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:58:57.616 [DEBUG] [Thread-81330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:58:57.617 [DEBUG] [Thread-81330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:58:57.665 [DEBUG] [Thread-81330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:58:57.665 [DEBUG] [Thread-81330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:58:57.674 [DEBUG] [Thread-81330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:58:57.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:58:57.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T02:58:57.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:58:57.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:58:57.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:58:57.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:58:57.709 [DEBUG] [Thread-81330] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:59:10.318 [DEBUG] [Thread-81332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:59:25.359 [DEBUG] [Thread-81333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:59:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T02:59:27.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T02:59:27.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T02:59:28.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 59, 11), 2.1, 86.43, 0.0, 28.28, 6.85, 1, 1, 0, 2, 0, 0),)
2025-12-13T02:59:28.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:59:11
2025-12-13T02:59:28.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T02:59:28.692 [DEBUG] [Thread-81334] [transport.py] [_log()] starting thread (client mode): 0xfabc7490
2025-12-13T02:59:28.692 [DEBUG] [Thread-81334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:59:28.712 [DEBUG] [Thread-81334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T02:59:28.712 [INFO] [Thread-81334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T02:59:28.715 [DEBUG] [Thread-81334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:59:28.715 [DEBUG] [Thread-81334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] client lang: <none>
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] server lang: <none>
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] kex follows: False
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:59:28.716 [DEBUG] [Thread-81334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:59:28.717 [DEBUG] [Thread-81334] [transport.py] [_log()] Compression: none
2025-12-13T02:59:28.717 [DEBUG] [Thread-81334] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:59:28.734 [DEBUG] [Thread-81334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:59:28.735 [DEBUG] [Thread-81334] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:59:28.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T02:59:28.736 [DEBUG] [Thread-81334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T02:59:28.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:59:28.737 [DEBUG] [Thread-81334] [transport.py] [_log()] userauth is OK
2025-12-13T02:59:28.737 [DEBUG] [Thread-81334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:59:28.737 [DEBUG] [Thread-81334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:59:28.738 [DEBUG] [Thread-81334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T02:59:28.738 [DEBUG] [Thread-81334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:59:28.763 [INFO] [Thread-81334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:59:28.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:59:29.415 [DEBUG] [Thread-81334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:59:29.415 [DEBUG] [Thread-81334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:59:29.415 [DEBUG] [Thread-81334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T02:59:29.456 [DEBUG] [Thread-81334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:59:29.456 [DEBUG] [Thread-81334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:59:29.459 [DEBUG] [Thread-81334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:59:29.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:59:29.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T02:59:29.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T02:59:29.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T02:59:29.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:59:29.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T02:59:29.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:59:29.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:59:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T02:59:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.041066 -999.00   +6.50  40.97     90   +5.10 1 3 2 3 1     0    0 1.76 10.66 .Nes. 32.6 41.0 301.6 44.2 7.8 -3.7 7.6 -3.7 7.3 -4.3 7.7 -3.5
2025-12-13T02:59:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T02:59:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T02:59:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.041066
2025-12-13T02:59:29.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T02:59:29.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T02:59:29.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T02:59:29.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T02:59:29.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T02:59:29.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:59:11', tmtdew=2.1, humidity=86.43, cloud=0.0, wind=28.28, temperature=6.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:59:08.102', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:55:00')
2025-12-13T02:59:29.486 [DEBUG] [Thread-81334] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:59:29.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T02:59:29.581 [DEBUG] [Thread-81337] [transport.py] [_log()] starting thread (client mode): 0xf572e9b0
2025-12-13T02:59:29.581 [DEBUG] [Thread-81337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T02:59:29.596 [DEBUG] [Thread-81337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T02:59:29.596 [INFO] [Thread-81337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T02:59:29.603 [DEBUG] [Thread-81337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T02:59:29.603 [DEBUG] [Thread-81337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T02:59:29.603 [DEBUG] [Thread-81337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T02:59:29.603 [DEBUG] [Thread-81337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:59:29.603 [DEBUG] [Thread-81337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T02:59:29.603 [DEBUG] [Thread-81337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] client lang: <none>
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] server lang: <none>
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] kex follows: False
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] Compression: none
2025-12-13T02:59:29.604 [DEBUG] [Thread-81337] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T02:59:29.661 [DEBUG] [Thread-81337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T02:59:29.661 [DEBUG] [Thread-81337] [transport.py] [_log()] Switch to new keys ...
2025-12-13T02:59:29.662 [DEBUG] [Thread-81337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T02:59:29.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T02:59:29.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T02:59:29.717 [DEBUG] [Thread-81337] [transport.py] [_log()] userauth is OK
2025-12-13T02:59:29.718 [DEBUG] [Thread-81337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T02:59:29.718 [DEBUG] [Thread-81337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T02:59:29.718 [DEBUG] [Thread-81337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T02:59:29.718 [DEBUG] [Thread-81337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T02:59:29.737 [INFO] [Thread-81337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T02:59:29.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T02:59:29.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T02:59:30.533 [DEBUG] [Thread-81337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T02:59:30.533 [DEBUG] [Thread-81337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T02:59:30.581 [DEBUG] [Thread-81337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T02:59:30.581 [DEBUG] [Thread-81337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T02:59:30.589 [DEBUG] [Thread-81337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T02:59:30.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T02:59: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')
2025-12-13T02:59:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T02:59:30.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T02:59:30.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T02:59:30.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T02:59:30.624 [DEBUG] [Thread-81337] [transport.py] [_log()] EOF in transport thread
2025-12-13T02:59:33.228 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:59:33.229 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:59:36.821 [DEBUG] [Thread-81339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:59:40.390 [DEBUG] [Thread-81340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T02:59:55.441 [DEBUG] [Thread-81341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:00.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:00:00.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:00:00.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:00:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 2, 59, 43), 2.05, 86.41, 0.0, 35.04, 6.78, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:00:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 02:59:43
2025-12-13T03:00:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:00:01.685 [DEBUG] [Thread-81342] [transport.py] [_log()] starting thread (client mode): 0xf5702b60
2025-12-13T03:00:01.685 [DEBUG] [Thread-81342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:00:01.695 [DEBUG] [Thread-81342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:00:01.695 [INFO] [Thread-81342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] client lang: <none>
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] server lang: <none>
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] kex follows: False
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] Compression: none
2025-12-13T03:00:01.697 [DEBUG] [Thread-81342] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:00:01.704 [DEBUG] [Thread-81342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:00:01.704 [DEBUG] [Thread-81342] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:00:01.704 [DEBUG] [Thread-81342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:00:01.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:00:01.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:00:01.705 [DEBUG] [Thread-81342] [transport.py] [_log()] userauth is OK
2025-12-13T03:00:01.705 [DEBUG] [Thread-81342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:00:01.705 [DEBUG] [Thread-81342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:00:01.705 [DEBUG] [Thread-81342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:00:01.705 [DEBUG] [Thread-81342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:00:01.715 [INFO] [Thread-81342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:00:01.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:00:02.340 [DEBUG] [Thread-81342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:00:02.340 [DEBUG] [Thread-81342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:00:02.340 [DEBUG] [Thread-81342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:00:02.381 [DEBUG] [Thread-81342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:00:02.381 [DEBUG] [Thread-81342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:00:02.383 [DEBUG] [Thread-81342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:00:02.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:00:02.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:00:02.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:00:02.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:00:02.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:00:02.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:00:02.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.041413 -999.00   +6.60  28.85     90   +5.10 1 3 1 3 1     0    0 1.74 10.69 ----- 39.0 28.9 300.6 39.6 7.8 -4.7 7.6 -4.5 7.4 -5.5 7.7 -4.8
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.041413
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:00:02.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T02:59:43', tmtdew=2.05, humidity=86.41, cloud=0.0, wind=35.04, temperature=6.78, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T00:59:38.083', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:58:00')
2025-12-13T03:00:02.401 [DEBUG] [Thread-81342] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:00:02.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:00:02.485 [DEBUG] [Thread-81345] [transport.py] [_log()] starting thread (client mode): 0xf5743790
2025-12-13T03:00:02.485 [DEBUG] [Thread-81345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:00:02.500 [DEBUG] [Thread-81345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:00:02.501 [INFO] [Thread-81345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:00:02.508 [DEBUG] [Thread-81345] [transport.py] [_log()] client lang: <none>
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] server lang: <none>
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] kex follows: False
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] Compression: none
2025-12-13T03:00:02.509 [DEBUG] [Thread-81345] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:00:02.566 [DEBUG] [Thread-81345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:00:02.567 [DEBUG] [Thread-81345] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:00:02.567 [DEBUG] [Thread-81345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:00:02.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:00:02.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:00:02.626 [DEBUG] [Thread-81345] [transport.py] [_log()] userauth is OK
2025-12-13T03:00:02.626 [DEBUG] [Thread-81345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:00:02.626 [DEBUG] [Thread-81345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:00:02.626 [DEBUG] [Thread-81345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:00:02.626 [DEBUG] [Thread-81345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:00:02.645 [INFO] [Thread-81345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:00:02.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:00:02.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:00:03.486 [DEBUG] [Thread-81345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:00:03.487 [DEBUG] [Thread-81345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:00:03.535 [DEBUG] [Thread-81345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:00:03.535 [DEBUG] [Thread-81345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:00:03.544 [DEBUG] [Thread-81345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:00:03.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:00:03.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:00:03.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:00:03.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:00:03.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:00:03.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:00:03.579 [DEBUG] [Thread-81345] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:00:10.471 [DEBUG] [Thread-81347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:25.513 [DEBUG] [Thread-81348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:33.433 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:33.434 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:00:33.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:00:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:00:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 0, 15), 2.05, 86.46, 0.0, 36.28, 6.78, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:00:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:00:15
2025-12-13T03:00:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:00:34.529 [DEBUG] [Thread-81349] [transport.py] [_log()] starting thread (client mode): 0xf813f940
2025-12-13T03:00:34.529 [DEBUG] [Thread-81349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:00:34.549 [DEBUG] [Thread-81349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:00:34.549 [INFO] [Thread-81349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:00:34.552 [DEBUG] [Thread-81349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:00:34.552 [DEBUG] [Thread-81349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] client lang: <none>
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] server lang: <none>
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] kex follows: False
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:00:34.553 [DEBUG] [Thread-81349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:00:34.554 [DEBUG] [Thread-81349] [transport.py] [_log()] Compression: none
2025-12-13T03:00:34.554 [DEBUG] [Thread-81349] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:00:34.569 [DEBUG] [Thread-81349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:00:34.570 [DEBUG] [Thread-81349] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:00:34.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:00:34.571 [DEBUG] [Thread-81349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:00:34.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:00:34.573 [DEBUG] [Thread-81349] [transport.py] [_log()] userauth is OK
2025-12-13T03:00:34.573 [DEBUG] [Thread-81349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:00:34.573 [DEBUG] [Thread-81349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:00:34.573 [DEBUG] [Thread-81349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:00:34.573 [DEBUG] [Thread-81349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:00:34.597 [INFO] [Thread-81349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:00:34.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:00:35.232 [DEBUG] [Thread-81349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:00:35.232 [DEBUG] [Thread-81349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:00:35.233 [DEBUG] [Thread-81349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:00:35.273 [DEBUG] [Thread-81349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:00:35.273 [DEBUG] [Thread-81349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:00:35.276 [DEBUG] [Thread-81349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:00:35.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:00:35.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:00:35.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:00:35.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:00:35.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:00:35.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:00:35.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:00:35.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:00:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:00:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.041760 -999.00   +6.50  32.65     90   +5.10 1 3 2 3 1     0    0 1.77 10.66 ....W 29.8 32.6 296.0 43.8 7.9 -5.3 7.7 -5.6 7.3 -6.0 7.7 -5.6
2025-12-13T03:00:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:00:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:00:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.041760
2025-12-13T03:00:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:00:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:00:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:00:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:00:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:00:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:00:15', tmtdew=2.05, humidity=86.46, cloud=0.0, wind=36.28, temperature=6.78, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:00:08.064', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:58:00')
2025-12-13T03:00:35.301 [DEBUG] [Thread-81349] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:00:35.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:00:35.405 [DEBUG] [Thread-81352] [transport.py] [_log()] starting thread (client mode): 0xf81e6230
2025-12-13T03:00:35.405 [DEBUG] [Thread-81352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:00:35.424 [DEBUG] [Thread-81352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:00:35.424 [INFO] [Thread-81352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:00:35.432 [DEBUG] [Thread-81352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:00:35.432 [DEBUG] [Thread-81352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:00:35.432 [DEBUG] [Thread-81352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:00:35.432 [DEBUG] [Thread-81352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] client lang: <none>
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] server lang: <none>
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] kex follows: False
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:00:35.433 [DEBUG] [Thread-81352] [transport.py] [_log()] Compression: none
2025-12-13T03:00:35.434 [DEBUG] [Thread-81352] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:00:35.489 [DEBUG] [Thread-81352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:00:35.490 [DEBUG] [Thread-81352] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:00:35.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:00:35.491 [DEBUG] [Thread-81352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:00:35.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:00:35.546 [DEBUG] [Thread-81352] [transport.py] [_log()] userauth is OK
2025-12-13T03:00:35.546 [DEBUG] [Thread-81352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:00:35.546 [DEBUG] [Thread-81352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:00:35.546 [DEBUG] [Thread-81352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:00:35.546 [DEBUG] [Thread-81352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:00:35.564 [INFO] [Thread-81352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:00:35.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:00:35.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:00:36.365 [DEBUG] [Thread-81352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:00:36.365 [DEBUG] [Thread-81352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:00:36.413 [DEBUG] [Thread-81352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:00:36.413 [DEBUG] [Thread-81352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:00:36.422 [DEBUG] [Thread-81352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:00:36.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:00:36.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:00:36.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:00:36.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:00:36.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:00:36.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:00:36.456 [DEBUG] [Thread-81352] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:00:36.908 [DEBUG] [Thread-81354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:40.537 [DEBUG] [Thread-81355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:00:55.579 [DEBUG] [Thread-81356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:06.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:01:06.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:01:06.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:01:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 0, 47), 2.06, 86.38, 0.0, 25.5, 6.83, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:01:07.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:00:47
2025-12-13T03:01:07.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:01:07.477 [DEBUG] [Thread-81357] [transport.py] [_log()] starting thread (client mode): 0xf575d5a0
2025-12-13T03:01:07.477 [DEBUG] [Thread-81357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:01:07.498 [DEBUG] [Thread-81357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:01:07.498 [INFO] [Thread-81357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] client lang: <none>
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] server lang: <none>
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] kex follows: False
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] Compression: none
2025-12-13T03:01:07.501 [DEBUG] [Thread-81357] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:01:07.516 [DEBUG] [Thread-81357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:01:07.516 [DEBUG] [Thread-81357] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:01:07.517 [DEBUG] [Thread-81357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:01:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:01:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:01:07.517 [DEBUG] [Thread-81357] [transport.py] [_log()] userauth is OK
2025-12-13T03:01:07.517 [DEBUG] [Thread-81357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:01:07.517 [DEBUG] [Thread-81357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:01:07.517 [DEBUG] [Thread-81357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:01:07.517 [DEBUG] [Thread-81357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:01:07.526 [INFO] [Thread-81357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:01:07.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:01:08.185 [DEBUG] [Thread-81357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:01:08.185 [DEBUG] [Thread-81357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:01:08.185 [DEBUG] [Thread-81357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:01:08.227 [DEBUG] [Thread-81357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:01:08.227 [DEBUG] [Thread-81357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:01:08.230 [DEBUG] [Thread-81357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:01:08.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:01:08.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:01:08.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:01:08.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:01:08.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:01:08.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:01:08.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.042108 -999.00   +6.60  29.89     90   +5.10 1 3 1 3 1     0    0 1.76 10.52 ....W 34.0 29.9 301.2 39.4 7.9 -6.9 7.7 -7.3 7.3 -6.8 7.7 -5.7
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.042108
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:01:08.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:00:47', tmtdew=2.06, humidity=86.38, cloud=0.0, wind=25.5, temperature=6.83, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:00:38.131', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:58:00')
2025-12-13T03:01:08.254 [DEBUG] [Thread-81357] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:01:08.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:01:08.337 [DEBUG] [Thread-81360] [transport.py] [_log()] starting thread (client mode): 0xf8189000
2025-12-13T03:01:08.338 [DEBUG] [Thread-81360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:01:08.352 [DEBUG] [Thread-81360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:01:08.352 [INFO] [Thread-81360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] client lang: <none>
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] server lang: <none>
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] kex follows: False
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] Compression: none
2025-12-13T03:01:08.360 [DEBUG] [Thread-81360] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:01:08.421 [DEBUG] [Thread-81360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:01:08.421 [DEBUG] [Thread-81360] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:01:08.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:01:08.421 [DEBUG] [Thread-81360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:01:08.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:01:08.478 [DEBUG] [Thread-81360] [transport.py] [_log()] userauth is OK
2025-12-13T03:01:08.478 [DEBUG] [Thread-81360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:01:08.478 [DEBUG] [Thread-81360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:01:08.478 [DEBUG] [Thread-81360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:01:08.478 [DEBUG] [Thread-81360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:01:08.496 [INFO] [Thread-81360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:01:08.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:01:08.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:01:09.349 [DEBUG] [Thread-81360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:01:09.349 [DEBUG] [Thread-81360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:01:09.397 [DEBUG] [Thread-81360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:01:09.397 [DEBUG] [Thread-81360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:01:09.406 [DEBUG] [Thread-81360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:01:09.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:01:09.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:01:09.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:01:09.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:01:09.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:01:09.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:01:09.441 [DEBUG] [Thread-81360] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:01:10.607 [DEBUG] [Thread-81362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:25.651 [DEBUG] [Thread-81363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:33.646 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:33.647 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:36.994 [DEBUG] [Thread-81364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:39.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:01:39.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:01:39.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:01:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 1, 19), 2.05, 86.44, 0.0, 22.58, 6.85, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:01:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:01:19
2025-12-13T03:01:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:01:40.410 [DEBUG] [Thread-81365] [transport.py] [_log()] starting thread (client mode): 0xf8188520
2025-12-13T03:01:40.410 [DEBUG] [Thread-81365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:01:40.430 [DEBUG] [Thread-81365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:01:40.430 [INFO] [Thread-81365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] client lang: <none>
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] server lang: <none>
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] kex follows: False
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:01:40.433 [DEBUG] [Thread-81365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:01:40.434 [DEBUG] [Thread-81365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:01:40.434 [DEBUG] [Thread-81365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:01:40.434 [DEBUG] [Thread-81365] [transport.py] [_log()] Compression: none
2025-12-13T03:01:40.434 [DEBUG] [Thread-81365] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:01:40.452 [DEBUG] [Thread-81365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:01:40.452 [DEBUG] [Thread-81365] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:01:40.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:01:40.453 [DEBUG] [Thread-81365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:01:40.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:01:40.455 [DEBUG] [Thread-81365] [transport.py] [_log()] userauth is OK
2025-12-13T03:01:40.455 [DEBUG] [Thread-81365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:01:40.456 [DEBUG] [Thread-81365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:01:40.456 [DEBUG] [Thread-81365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:01:40.456 [DEBUG] [Thread-81365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:01:40.492 [INFO] [Thread-81365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:01:40.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:01:40.681 [DEBUG] [Thread-81367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:01:41.130 [DEBUG] [Thread-81365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:01:41.130 [DEBUG] [Thread-81365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:01:41.130 [DEBUG] [Thread-81365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:01:41.171 [DEBUG] [Thread-81365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:01:41.171 [DEBUG] [Thread-81365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:01:41.173 [DEBUG] [Thread-81365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:01:41.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:01:41.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:01:41.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:01:41.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:01:41.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:01:41.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:01:41.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.042455 -999.00   +6.60  34.44     90   +5.10 1 3 2 3 1     0    0 1.76 10.59 ....W 29.9 34.4 295.8 39.9 7.9 -3.6 7.7 -4.1 7.3 -3.7 7.7 -5.2
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.042455
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:01:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:01:19', tmtdew=2.05, humidity=86.44, cloud=0.0, wind=22.58, temperature=6.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:01:08.112', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:58:00')
2025-12-13T03:01:41.192 [DEBUG] [Thread-81365] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:01:41.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:01:41.278 [DEBUG] [Thread-81369] [transport.py] [_log()] starting thread (client mode): 0xf575e260
2025-12-13T03:01:41.278 [DEBUG] [Thread-81369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:01:41.293 [DEBUG] [Thread-81369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:01:41.293 [INFO] [Thread-81369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] client lang: <none>
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] server lang: <none>
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] kex follows: False
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] Compression: none
2025-12-13T03:01:41.300 [DEBUG] [Thread-81369] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:01:41.356 [DEBUG] [Thread-81369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:01:41.356 [DEBUG] [Thread-81369] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:01:41.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:01:41.356 [DEBUG] [Thread-81369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:01:41.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:01:41.413 [DEBUG] [Thread-81369] [transport.py] [_log()] userauth is OK
2025-12-13T03:01:41.413 [DEBUG] [Thread-81369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:01:41.413 [DEBUG] [Thread-81369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:01:41.413 [DEBUG] [Thread-81369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:01:41.413 [DEBUG] [Thread-81369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:01:41.427 [INFO] [Thread-81369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:01:41.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:01:41.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:01:42.243 [DEBUG] [Thread-81369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:01:42.243 [DEBUG] [Thread-81369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:01:42.291 [DEBUG] [Thread-81369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:01:42.292 [DEBUG] [Thread-81369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:01:42.300 [DEBUG] [Thread-81369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:01:42.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:01:42.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:01:42.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:01:42.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:01:42.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:01:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:01:42.332 [DEBUG] [Thread-81369] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:01:55.708 [DEBUG] [Thread-81371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:10.763 [DEBUG] [Thread-81372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:12.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:02:12.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:02:12.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:02:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 1, 51), 2.06, 86.38, 0.0, 31.72, 6.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:02:13.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:01:51
2025-12-13T03:02:13.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:02:13.320 [DEBUG] [Thread-81373] [transport.py] [_log()] starting thread (client mode): 0xf813fe80
2025-12-13T03:02:13.320 [DEBUG] [Thread-81373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:02:13.339 [DEBUG] [Thread-81373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:02:13.339 [INFO] [Thread-81373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] client lang: <none>
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] server lang: <none>
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] kex follows: False
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:02:13.343 [DEBUG] [Thread-81373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:02:13.344 [DEBUG] [Thread-81373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:02:13.344 [DEBUG] [Thread-81373] [transport.py] [_log()] Compression: none
2025-12-13T03:02:13.344 [DEBUG] [Thread-81373] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:02:13.360 [DEBUG] [Thread-81373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:02:13.360 [DEBUG] [Thread-81373] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:02:13.360 [DEBUG] [Thread-81373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:02:13.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:02:13.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:02:13.405 [DEBUG] [Thread-81373] [transport.py] [_log()] userauth is OK
2025-12-13T03:02:13.405 [DEBUG] [Thread-81373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:02:13.405 [DEBUG] [Thread-81373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:02:13.405 [DEBUG] [Thread-81373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:02:13.406 [DEBUG] [Thread-81373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:02:13.438 [INFO] [Thread-81373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:02:13.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:02:14.073 [DEBUG] [Thread-81373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:02:14.073 [DEBUG] [Thread-81373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:02:14.073 [DEBUG] [Thread-81373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:02:14.114 [DEBUG] [Thread-81373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:02:14.114 [DEBUG] [Thread-81373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:02:14.117 [DEBUG] [Thread-81373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:02:14.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:02:14.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:02:14.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:02:14.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:02:14.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:02:14.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:02:14.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:02:14.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:02:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:02:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.042802 -999.00   +6.70  24.11     90   +5.20 1 3 1 3 1     0    0 1.71 9.74 Z.... 23.9 24.1 297.0 38.5 7.9 -5.6 7.8 -7.4 7.4 -7.0 7.8 -3.8
2025-12-13T03:02:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:02:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:02:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.042802
2025-12-13T03:02:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:02:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:02:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:02:14.143 [DEBUG] [Thread-81373] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:02:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:02:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:02:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:01:51', tmtdew=2.06, humidity=86.38, cloud=0.0, wind=31.72, temperature=6.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:01:38.093', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:58:00')
2025-12-13T03:02:14.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:02:14.239 [DEBUG] [Thread-81376] [transport.py] [_log()] starting thread (client mode): 0xf813cbb0
2025-12-13T03:02:14.240 [DEBUG] [Thread-81376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:02:14.254 [DEBUG] [Thread-81376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:02:14.254 [INFO] [Thread-81376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:02:14.261 [DEBUG] [Thread-81376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:02:14.262 [DEBUG] [Thread-81376] [transport.py] [_log()] client lang: <none>
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] server lang: <none>
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] kex follows: False
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:02:14.263 [DEBUG] [Thread-81376] [transport.py] [_log()] Compression: none
2025-12-13T03:02:14.264 [DEBUG] [Thread-81376] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:02:14.322 [DEBUG] [Thread-81376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:02:14.323 [DEBUG] [Thread-81376] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:02:14.323 [DEBUG] [Thread-81376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:02:14.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:02:14.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:02:14.378 [DEBUG] [Thread-81376] [transport.py] [_log()] userauth is OK
2025-12-13T03:02:14.378 [DEBUG] [Thread-81376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:02:14.378 [DEBUG] [Thread-81376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:02:14.378 [DEBUG] [Thread-81376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:02:14.378 [DEBUG] [Thread-81376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:02:14.397 [INFO] [Thread-81376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:02:14.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:02:14.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:02:15.228 [DEBUG] [Thread-81376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:02:15.228 [DEBUG] [Thread-81376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:02:15.276 [DEBUG] [Thread-81376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:02:15.276 [DEBUG] [Thread-81376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:02:15.284 [DEBUG] [Thread-81376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:02:15.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:02:15.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:02:15.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:02:15.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:02:15.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:02:15.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:02:15.320 [DEBUG] [Thread-81376] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:02:25.788 [DEBUG] [Thread-81378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:33.851 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:33.852 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:37.071 [DEBUG] [Thread-81379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:40.823 [DEBUG] [Thread-81380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:02:45.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:02:45.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:02:45.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:02:46.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 2, 23), 2.06, 86.38, 0.0, 30.15, 6.8, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:02:46.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:02:23
2025-12-13T03:02:46.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:02:46.301 [DEBUG] [Thread-81381] [transport.py] [_log()] starting thread (client mode): 0xf81889a0
2025-12-13T03:02:46.301 [DEBUG] [Thread-81381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:02:46.321 [DEBUG] [Thread-81381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:02:46.321 [INFO] [Thread-81381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:02:46.324 [DEBUG] [Thread-81381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:02:46.324 [DEBUG] [Thread-81381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:02:46.324 [DEBUG] [Thread-81381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] client lang: <none>
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] server lang: <none>
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] kex follows: False
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] Compression: none
2025-12-13T03:02:46.325 [DEBUG] [Thread-81381] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:02:46.344 [DEBUG] [Thread-81381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:02:46.344 [DEBUG] [Thread-81381] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:02:46.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:02:46.345 [DEBUG] [Thread-81381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:02:46.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:02:46.347 [DEBUG] [Thread-81381] [transport.py] [_log()] userauth is OK
2025-12-13T03:02:46.347 [DEBUG] [Thread-81381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:02:46.347 [DEBUG] [Thread-81381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:02:46.347 [DEBUG] [Thread-81381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:02:46.347 [DEBUG] [Thread-81381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:02:46.371 [INFO] [Thread-81381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:02:46.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:02:46.972 [DEBUG] [Thread-81381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:02:46.972 [DEBUG] [Thread-81381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:02:46.973 [DEBUG] [Thread-81381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:02:47.014 [DEBUG] [Thread-81381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:02:47.014 [DEBUG] [Thread-81381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:02:47.016 [DEBUG] [Thread-81381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:02:47.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:02:47.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:02:47.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:02:47.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:02:47.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:02:47.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:02:47.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.043150 -999.00   +6.70  30.02     90   +5.20 1 3 2 3 1     0    0 1.77 9.73 ..... 28.6 30.0 300.2 35.2 8.0 -6.7 7.7 -8.2 7.4 -6.6 7.8 -6.0
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.043150
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:02:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:02:23', tmtdew=2.06, humidity=86.38, cloud=0.0, wind=30.15, temperature=6.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:02:08.160', atlas_cloud=3, atlas_rain=1, zp_data=[1.6172499999999994, 0.7912500000000007, 1.4342500000000005, nan, nan, nan, nan, nan, 0.660499999999999, 0.3439999999999994, 1.6917499999999999, nan, 2.2769999999999992, 2.539249999999999, nan, 1.525999999999999, 0.3532499999999992, 0.4775000000000009, nan, nan, 1.7699999999999987, 2.351749999999999, nan, nan, 0.5004999999999988, 0.6425000000000001, 0.7817499999999997, nan, nan, 0.7000000000000011, 1.4780000000000006, nan, 0.6207499999999992], zp_timestamp='2025-12-13T00:58:00')
2025-12-13T03:02:47.034 [DEBUG] [Thread-81381] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:02:47.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:02:47.122 [DEBUG] [Thread-81384] [transport.py] [_log()] starting thread (client mode): 0xf818a410
2025-12-13T03:02:47.123 [DEBUG] [Thread-81384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:02:47.137 [DEBUG] [Thread-81384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:02:47.137 [INFO] [Thread-81384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:47.145 [DEBUG] [Thread-81384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] client lang: <none>
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] server lang: <none>
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] kex follows: False
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:02:47.146 [DEBUG] [Thread-81384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:02:47.147 [DEBUG] [Thread-81384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:02:47.147 [DEBUG] [Thread-81384] [transport.py] [_log()] Compression: none
2025-12-13T03:02:47.147 [DEBUG] [Thread-81384] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:02:47.204 [DEBUG] [Thread-81384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:02:47.205 [DEBUG] [Thread-81384] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:02:47.205 [DEBUG] [Thread-81384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:02:47.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:02:47.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:02:47.266 [DEBUG] [Thread-81384] [transport.py] [_log()] userauth is OK
2025-12-13T03:02:47.266 [DEBUG] [Thread-81384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:02:47.266 [DEBUG] [Thread-81384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:02:47.266 [DEBUG] [Thread-81384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:02:47.267 [DEBUG] [Thread-81384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:02:47.289 [INFO] [Thread-81384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:02:47.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:02:47.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:02:48.094 [DEBUG] [Thread-81384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:02:48.094 [DEBUG] [Thread-81384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:02:48.142 [DEBUG] [Thread-81384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:02:48.142 [DEBUG] [Thread-81384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:02:48.151 [DEBUG] [Thread-81384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:02:48.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:02:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:02:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:02:48.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:02:48.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:02:48.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:02:48.187 [DEBUG] [Thread-81384] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:02:55.852 [DEBUG] [Thread-81386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:10.903 [DEBUG] [Thread-81387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:18.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:03:18.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:03:18.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:03:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 2, 55), 2.04, 86.96, 0.0, 31.41, 6.81, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:03:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:02:55
2025-12-13T03:03:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:03:19.187 [DEBUG] [Thread-81388] [transport.py] [_log()] starting thread (client mode): 0xf818a470
2025-12-13T03:03:19.187 [DEBUG] [Thread-81388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:03:19.208 [DEBUG] [Thread-81388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:03:19.208 [INFO] [Thread-81388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:03:19.211 [DEBUG] [Thread-81388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:03:19.211 [DEBUG] [Thread-81388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:03:19.211 [DEBUG] [Thread-81388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:03:19.211 [DEBUG] [Thread-81388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:19.211 [DEBUG] [Thread-81388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] client lang: <none>
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] server lang: <none>
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] kex follows: False
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] Compression: none
2025-12-13T03:03:19.212 [DEBUG] [Thread-81388] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:03:19.230 [DEBUG] [Thread-81388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:03:19.231 [DEBUG] [Thread-81388] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:03:19.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:03:19.232 [DEBUG] [Thread-81388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:03:19.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:03:19.234 [DEBUG] [Thread-81388] [transport.py] [_log()] userauth is OK
2025-12-13T03:03:19.234 [DEBUG] [Thread-81388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:03:19.234 [DEBUG] [Thread-81388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:03:19.235 [DEBUG] [Thread-81388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:03:19.235 [DEBUG] [Thread-81388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:03:19.257 [INFO] [Thread-81388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:03:19.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:03:19.904 [DEBUG] [Thread-81388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:03:19.904 [DEBUG] [Thread-81388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:03:19.904 [DEBUG] [Thread-81388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:03:19.945 [DEBUG] [Thread-81388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:03:19.945 [DEBUG] [Thread-81388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:03:19.948 [DEBUG] [Thread-81388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:03:19.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:03:19.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:03:19.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:03:19.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:03:19.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:03:19.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:03:19.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:03:19.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:03:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:03:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.043844 -999.00   +6.60  29.20     90   +5.20 1 3 1 3 1     0    0 1.71 8.77 Z.ES. 31.4 29.2 295.6 37.4 8.0 -5.0 7.8 -5.0 7.4 -4.4 7.8 -4.1
2025-12-13T03:03:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:03:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:03:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.043844
2025-12-13T03:03:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:03:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:03:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:03:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:03:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:03:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:02:55', tmtdew=2.04, humidity=86.96, cloud=0.0, wind=31.41, temperature=6.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:03:08.122', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.1132500000000007, nan, nan, nan, nan, nan, nan, 2.0630000000000006, 2.969249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5537500000000009, 1.5277500000000002, nan, nan, 1.5797499999999998, nan, nan, 2.144000000000001, 1.3055000000000003, 0.5955000000000021, 1.6027499999999995], zp_timestamp='2025-12-13T01:02:00')
2025-12-13T03:03:19.971 [DEBUG] [Thread-81388] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:03:20.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:03:20.067 [DEBUG] [Thread-81391] [transport.py] [_log()] starting thread (client mode): 0xf818b430
2025-12-13T03:03:20.067 [DEBUG] [Thread-81391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:03:20.081 [DEBUG] [Thread-81391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:03:20.081 [INFO] [Thread-81391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:03:20.089 [DEBUG] [Thread-81391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] client lang: <none>
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] server lang: <none>
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] kex follows: False
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:03:20.090 [DEBUG] [Thread-81391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:03:20.091 [DEBUG] [Thread-81391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:03:20.091 [DEBUG] [Thread-81391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:03:20.091 [DEBUG] [Thread-81391] [transport.py] [_log()] Compression: none
2025-12-13T03:03:20.091 [DEBUG] [Thread-81391] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:03:20.145 [DEBUG] [Thread-81391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:03:20.145 [DEBUG] [Thread-81391] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:03:20.146 [DEBUG] [Thread-81391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:03:20.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:03:20.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:03:20.201 [DEBUG] [Thread-81391] [transport.py] [_log()] userauth is OK
2025-12-13T03:03:20.202 [DEBUG] [Thread-81391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:03:20.202 [DEBUG] [Thread-81391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:03:20.202 [DEBUG] [Thread-81391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:03:20.202 [DEBUG] [Thread-81391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:03:20.220 [INFO] [Thread-81391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:03:20.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:03:20.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:03:21.042 [DEBUG] [Thread-81391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:03:21.042 [DEBUG] [Thread-81391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:03:21.090 [DEBUG] [Thread-81391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:03:21.090 [DEBUG] [Thread-81391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:03:21.099 [DEBUG] [Thread-81391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:03:21.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:03:21.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:03:21.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:03:21.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:03:21.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:03:21.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:03:21.143 [DEBUG] [Thread-81391] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:03:25.933 [DEBUG] [Thread-81393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:34.056 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:34.057 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:37.143 [DEBUG] [Thread-81394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:40.975 [DEBUG] [Thread-81395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:03:51.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:03:51.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:03:51.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:03:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 3, 27), 2.05, 86.96, 0.0, 31.0, 6.83, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:03:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:03:27
2025-12-13T03:03:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:03:52.121 [DEBUG] [Thread-81396] [transport.py] [_log()] starting thread (client mode): 0xf8188fd0
2025-12-13T03:03:52.121 [DEBUG] [Thread-81396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:03:52.141 [DEBUG] [Thread-81396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:03:52.142 [INFO] [Thread-81396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] client lang: <none>
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] server lang: <none>
2025-12-13T03:03:52.143 [DEBUG] [Thread-81396] [transport.py] [_log()] kex follows: False
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] Compression: none
2025-12-13T03:03:52.144 [DEBUG] [Thread-81396] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:03:52.153 [DEBUG] [Thread-81396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:03:52.153 [DEBUG] [Thread-81396] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:03:52.153 [DEBUG] [Thread-81396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:03:52.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:03:52.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:03:52.155 [DEBUG] [Thread-81396] [transport.py] [_log()] userauth is OK
2025-12-13T03:03:52.155 [DEBUG] [Thread-81396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:03:52.155 [DEBUG] [Thread-81396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:03:52.155 [DEBUG] [Thread-81396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:03:52.155 [DEBUG] [Thread-81396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:03:52.172 [INFO] [Thread-81396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:03:52.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:03:52.810 [DEBUG] [Thread-81396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:03:52.810 [DEBUG] [Thread-81396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:03:52.811 [DEBUG] [Thread-81396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:03:52.851 [DEBUG] [Thread-81396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:03:52.852 [DEBUG] [Thread-81396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:03:52.854 [DEBUG] [Thread-81396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:03:52.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:03:52.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:03:52.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:03:52.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:03:52.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:03:52.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:03:52.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:03:52.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:03:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:03:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.044191 -999.00   +6.60  39.10     90   +5.20 1 3 2 3 1     0    0 1.70 8.07 ..ESW 40.0 39.1 295.4 44.9 8.0 -4.9 7.7 -4.8 7.4 -5.0 7.8 -4.8
2025-12-13T03:03:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:03:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:03:52.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.044191
2025-12-13T03:03:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:03:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:03:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:03:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:03:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:03:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:03:27', tmtdew=2.05, humidity=86.96, cloud=0.0, wind=31.0, temperature=6.83, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:03:38.102', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.1132500000000007, nan, nan, nan, nan, nan, nan, 2.0630000000000006, 2.969249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5537500000000009, 1.5277500000000002, nan, nan, 1.5797499999999998, nan, nan, 2.144000000000001, 1.3055000000000003, 0.5955000000000021, 1.6027499999999995], zp_timestamp='2025-12-13T01:02:00')
2025-12-13T03:03:52.876 [DEBUG] [Thread-81396] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:03:52.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:03:52.971 [DEBUG] [Thread-81399] [transport.py] [_log()] starting thread (client mode): 0xf572f820
2025-12-13T03:03:52.971 [DEBUG] [Thread-81399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:03:52.985 [DEBUG] [Thread-81399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:03:52.985 [INFO] [Thread-81399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:03:52.992 [DEBUG] [Thread-81399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:03:52.992 [DEBUG] [Thread-81399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] client lang: <none>
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] server lang: <none>
2025-12-13T03:03:52.993 [DEBUG] [Thread-81399] [transport.py] [_log()] kex follows: False
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] Compression: none
2025-12-13T03:03:52.994 [DEBUG] [Thread-81399] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:03:53.049 [DEBUG] [Thread-81399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:03:53.050 [DEBUG] [Thread-81399] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:03:53.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:03:53.060 [DEBUG] [Thread-81399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:03:53.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:03:53.106 [DEBUG] [Thread-81399] [transport.py] [_log()] userauth is OK
2025-12-13T03:03:53.106 [DEBUG] [Thread-81399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:03:53.106 [DEBUG] [Thread-81399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:03:53.106 [DEBUG] [Thread-81399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:03:53.106 [DEBUG] [Thread-81399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:03:53.126 [INFO] [Thread-81399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:03:53.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:03:53.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:03:53.931 [DEBUG] [Thread-81399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:03:53.931 [DEBUG] [Thread-81399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:03:53.979 [DEBUG] [Thread-81399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:03:53.979 [DEBUG] [Thread-81399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:03:53.988 [DEBUG] [Thread-81399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:03:53.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:03:53.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:03:54.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:03:54.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:03:54.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:03:54.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:03:54.024 [DEBUG] [Thread-81399] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:03:56.004 [DEBUG] [Thread-81401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:11.050 [DEBUG] [Thread-81402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:04:24.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:04:24.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:04:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 3, 59), 1.98, 87.04, 0.0, 22.69, 6.8, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:04:24.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:03:59
2025-12-13T03:04:24.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:04:25.014 [DEBUG] [Thread-81403] [transport.py] [_log()] starting thread (client mode): 0xf813c9a0
2025-12-13T03:04:25.015 [DEBUG] [Thread-81403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:04:25.034 [DEBUG] [Thread-81403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:04:25.035 [INFO] [Thread-81403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:04:25.037 [DEBUG] [Thread-81403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:04:25.037 [DEBUG] [Thread-81403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] client lang: <none>
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] server lang: <none>
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] kex follows: False
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:04:25.038 [DEBUG] [Thread-81403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:04:25.039 [DEBUG] [Thread-81403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:04:25.039 [DEBUG] [Thread-81403] [transport.py] [_log()] Compression: none
2025-12-13T03:04:25.039 [DEBUG] [Thread-81403] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:04:25.048 [DEBUG] [Thread-81403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:04:25.049 [DEBUG] [Thread-81403] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:04:25.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:04:25.050 [DEBUG] [Thread-81403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:04:25.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:04:25.052 [DEBUG] [Thread-81403] [transport.py] [_log()] userauth is OK
2025-12-13T03:04:25.053 [DEBUG] [Thread-81403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:04:25.053 [DEBUG] [Thread-81403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:04:25.053 [DEBUG] [Thread-81403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:04:25.053 [DEBUG] [Thread-81403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:04:25.078 [INFO] [Thread-81403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:04:25.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:04:25.641 [DEBUG] [Thread-81403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:04:25.641 [DEBUG] [Thread-81403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:04:25.641 [DEBUG] [Thread-81403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:04:25.682 [DEBUG] [Thread-81403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:04:25.682 [DEBUG] [Thread-81403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:04:25.685 [DEBUG] [Thread-81403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:04:25.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:04:25.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:04:25.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:04:25.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:04:25.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:04:25.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:04:25.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:04:25.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:04:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:04:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.044538 -999.00   +6.50  35.76     91   +5.20 1 3 2 3 1     0    0 1.73 7.73 ..ESW 32.2 35.8 296.6 43.0 8.0 -5.5 7.8 -5.1 7.4 -4.5 7.8 -5.1
2025-12-13T03:04:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:04:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:04:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.044538
2025-12-13T03:04:25.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:04:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:04:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:04:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:04:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:04:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:03:59', tmtdew=1.98, humidity=87.04, cloud=0.0, wind=22.69, temperature=6.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:04:08.083', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.1132500000000007, nan, nan, nan, nan, nan, nan, 2.0630000000000006, 2.969249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5537500000000009, 1.5277500000000002, nan, nan, 1.5797499999999998, nan, nan, 2.144000000000001, 1.3055000000000003, 0.5955000000000021, 1.6027499999999995], zp_timestamp='2025-12-13T01:02:00')
2025-12-13T03:04:25.710 [DEBUG] [Thread-81403] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:04:25.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:04:25.806 [DEBUG] [Thread-81406] [transport.py] [_log()] starting thread (client mode): 0xf572f910
2025-12-13T03:04:25.806 [DEBUG] [Thread-81406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:04:25.825 [DEBUG] [Thread-81406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:04:25.826 [INFO] [Thread-81406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:04:25.833 [DEBUG] [Thread-81406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:04:25.833 [DEBUG] [Thread-81406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:04:25.833 [DEBUG] [Thread-81406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] client lang: <none>
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] server lang: <none>
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] kex follows: False
2025-12-13T03:04:25.834 [DEBUG] [Thread-81406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:04:25.835 [DEBUG] [Thread-81406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:04:25.835 [DEBUG] [Thread-81406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:04:25.835 [DEBUG] [Thread-81406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:04:25.835 [DEBUG] [Thread-81406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:04:25.835 [DEBUG] [Thread-81406] [transport.py] [_log()] Compression: none
2025-12-13T03:04:25.835 [DEBUG] [Thread-81406] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:04:25.890 [DEBUG] [Thread-81406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:04:25.890 [DEBUG] [Thread-81406] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:04:25.891 [DEBUG] [Thread-81406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:04:25.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:04:25.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:04:25.946 [DEBUG] [Thread-81406] [transport.py] [_log()] userauth is OK
2025-12-13T03:04:25.946 [DEBUG] [Thread-81406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:04:25.946 [DEBUG] [Thread-81406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:04:25.946 [DEBUG] [Thread-81406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:04:25.946 [DEBUG] [Thread-81406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:04:25.968 [INFO] [Thread-81406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:04:25.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:04:25.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:04:26.076 [DEBUG] [Thread-81408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:26.857 [DEBUG] [Thread-81406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:04:26.857 [DEBUG] [Thread-81406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:04:26.905 [DEBUG] [Thread-81406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:04:26.905 [DEBUG] [Thread-81406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:04:26.914 [DEBUG] [Thread-81406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:04:26.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:04:26.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:04:26.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:04:26.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:04:26.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:04:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:04:26.949 [DEBUG] [Thread-81406] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:04:34.261 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:34.262 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:37.215 [DEBUG] [Thread-81409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:41.120 [DEBUG] [Thread-81410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:56.147 [DEBUG] [Thread-81411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:04:56.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:04:56.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:04:56.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:04:57.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 4, 31), 1.98, 87.06, 0.0, 24.74, 6.8, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:04:57.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:04:31
2025-12-13T03:04:57.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:04:57.984 [DEBUG] [Thread-81412] [transport.py] [_log()] starting thread (client mode): 0xf818b430
2025-12-13T03:04:57.984 [DEBUG] [Thread-81412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:04:58.003 [DEBUG] [Thread-81412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:04:58.003 [INFO] [Thread-81412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] client lang: <none>
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] server lang: <none>
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] kex follows: False
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:04:58.006 [DEBUG] [Thread-81412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:04:58.007 [DEBUG] [Thread-81412] [transport.py] [_log()] Compression: none
2025-12-13T03:04:58.007 [DEBUG] [Thread-81412] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:04:58.023 [DEBUG] [Thread-81412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:04:58.023 [DEBUG] [Thread-81412] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:04:58.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:04:58.023 [DEBUG] [Thread-81412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:04:58.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:04:58.024 [DEBUG] [Thread-81412] [transport.py] [_log()] userauth is OK
2025-12-13T03:04:58.024 [DEBUG] [Thread-81412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:04:58.024 [DEBUG] [Thread-81412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:04:58.024 [DEBUG] [Thread-81412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:04:58.024 [DEBUG] [Thread-81412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:04:58.033 [INFO] [Thread-81412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:04:58.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:04:58.639 [DEBUG] [Thread-81412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:04:58.639 [DEBUG] [Thread-81412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:04:58.639 [DEBUG] [Thread-81412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:04:58.680 [DEBUG] [Thread-81412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:04:58.680 [DEBUG] [Thread-81412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:04:58.683 [DEBUG] [Thread-81412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:04:58.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:04:58.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:04:58.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:04:58.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:04:58.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:04:58.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:04:58.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.044885 -999.00   +6.50  38.18     90   +5.10 1 3 2 3 1     0    0 1.64 6.02 ..ESW 26.6 38.2 295.0 41.9 8.0 -3.0 7.7 -2.6 7.5 -2.2 7.8 -3.3
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.044885
2025-12-13T03:04:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:04:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:04:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:04:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:04:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:04:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:04:31', tmtdew=1.98, humidity=87.06, cloud=0.0, wind=24.74, temperature=6.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:04:38.064', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.1132500000000007, nan, nan, nan, nan, nan, nan, 2.0630000000000006, 2.969249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5537500000000009, 1.5277500000000002, nan, nan, 1.5797499999999998, nan, nan, 2.144000000000001, 1.3055000000000003, 0.5955000000000021, 1.6027499999999995], zp_timestamp='2025-12-13T01:02:00')
2025-12-13T03:04:58.700 [DEBUG] [Thread-81412] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:04:58.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:04:58.786 [DEBUG] [Thread-81415] [transport.py] [_log()] starting thread (client mode): 0xf5701c30
2025-12-13T03:04:58.786 [DEBUG] [Thread-81415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:04:58.805 [DEBUG] [Thread-81415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:04:58.805 [INFO] [Thread-81415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] client lang: <none>
2025-12-13T03:04:58.812 [DEBUG] [Thread-81415] [transport.py] [_log()] server lang: <none>
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] kex follows: False
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] Compression: none
2025-12-13T03:04:58.813 [DEBUG] [Thread-81415] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:04:58.868 [DEBUG] [Thread-81415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:04:58.868 [DEBUG] [Thread-81415] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:04:58.868 [DEBUG] [Thread-81415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:04:58.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:04:58.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:04:58.927 [DEBUG] [Thread-81415] [transport.py] [_log()] userauth is OK
2025-12-13T03:04:58.927 [DEBUG] [Thread-81415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:04:58.927 [DEBUG] [Thread-81415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:04:58.927 [DEBUG] [Thread-81415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:04:58.927 [DEBUG] [Thread-81415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:04:58.942 [INFO] [Thread-81415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:04:58.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:04:58.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:04:59.780 [DEBUG] [Thread-81415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:04:59.780 [DEBUG] [Thread-81415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:04:59.828 [DEBUG] [Thread-81415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:04:59.828 [DEBUG] [Thread-81415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:04:59.837 [DEBUG] [Thread-81415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:04:59.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:04:59.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')
2025-12-13T03:04:59.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:04:59.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:04:59.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:04:59.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:04:59.872 [DEBUG] [Thread-81415] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:05:11.173 [DEBUG] [Thread-81417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:05:26.225 [DEBUG] [Thread-81418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:05:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:05:29.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:05: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
2025-12-13T03:05:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 5, 3), 1.97, 87.13, 0.0, 22.43, 6.78, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:05:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:05:03
2025-12-13T03:05:30.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:05:30.883 [DEBUG] [Thread-81419] [transport.py] [_log()] starting thread (client mode): 0xf57aa740
2025-12-13T03:05:30.883 [DEBUG] [Thread-81419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:05:30.903 [DEBUG] [Thread-81419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:05:30.903 [INFO] [Thread-81419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:05:30.906 [DEBUG] [Thread-81419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] client lang: <none>
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] server lang: <none>
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] kex follows: False
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:05:30.907 [DEBUG] [Thread-81419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:05:30.908 [DEBUG] [Thread-81419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:05:30.908 [DEBUG] [Thread-81419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:05:30.908 [DEBUG] [Thread-81419] [transport.py] [_log()] Compression: none
2025-12-13T03:05:30.908 [DEBUG] [Thread-81419] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:05:30.925 [DEBUG] [Thread-81419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:05:30.926 [DEBUG] [Thread-81419] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:05:30.926 [DEBUG] [Thread-81419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:05:30.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:05:30.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:05:30.928 [DEBUG] [Thread-81419] [transport.py] [_log()] userauth is OK
2025-12-13T03:05:30.928 [DEBUG] [Thread-81419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:05:30.929 [DEBUG] [Thread-81419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:05:30.929 [DEBUG] [Thread-81419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:05:30.929 [DEBUG] [Thread-81419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:05:30.963 [INFO] [Thread-81419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:05:30.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:05:31.562 [DEBUG] [Thread-81419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:05:31.562 [DEBUG] [Thread-81419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:05:31.563 [DEBUG] [Thread-81419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:05:31.604 [DEBUG] [Thread-81419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:05:31.604 [DEBUG] [Thread-81419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:05:31.607 [DEBUG] [Thread-81419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:05:31.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:05:31.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:05:31.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:05:31.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:05:31.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:05:31.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:05:31.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:05:31.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:05:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:05:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.044885 -999.00   +6.50  38.18     90   +5.10 1 3 2 3 1     0    0 1.64 6.02 ..ESW 26.6 38.2 295.0 41.9 8.0 -3.0 7.7 -2.6 7.5 -2.2 7.8 -3.3
2025-12-13T03:05:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:05:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:05:31.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.044885
2025-12-13T03:05:31.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:05:31.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:05:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:05:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:05:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:05:31.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:05:03', tmtdew=1.97, humidity=87.13, cloud=0.0, wind=22.43, temperature=6.78, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:04:38.064', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 2.1132500000000007, nan, nan, nan, nan, nan, nan, 2.0630000000000006, 2.969249999999999, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.5537500000000009, 1.5277500000000002, nan, nan, 1.5797499999999998, nan, nan, 2.144000000000001, 1.3055000000000003, 0.5955000000000021, 1.6027499999999995], zp_timestamp='2025-12-13T01:02:00')
2025-12-13T03:05:31.626 [DEBUG] [Thread-81419] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:05:31.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:05:31.726 [DEBUG] [Thread-81422] [transport.py] [_log()] starting thread (client mode): 0xf572f940
2025-12-13T03:05:31.726 [DEBUG] [Thread-81422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:05:31.740 [DEBUG] [Thread-81422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:05:31.740 [INFO] [Thread-81422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:05:31.747 [DEBUG] [Thread-81422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] client lang: <none>
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] server lang: <none>
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] kex follows: False
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] Compression: none
2025-12-13T03:05:31.748 [DEBUG] [Thread-81422] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:05:31.805 [DEBUG] [Thread-81422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:05:31.805 [DEBUG] [Thread-81422] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:05:31.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:05:31.806 [DEBUG] [Thread-81422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:05:31.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:05:31.861 [DEBUG] [Thread-81422] [transport.py] [_log()] userauth is OK
2025-12-13T03:05:31.862 [DEBUG] [Thread-81422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:05:31.862 [DEBUG] [Thread-81422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:05:31.862 [DEBUG] [Thread-81422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:05:31.862 [DEBUG] [Thread-81422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:05:31.886 [INFO] [Thread-81422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:05:31.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:05:31.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:05:32.696 [DEBUG] [Thread-81422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:05:32.696 [DEBUG] [Thread-81422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:05:32.743 [DEBUG] [Thread-81422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:05:32.743 [DEBUG] [Thread-81422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:05:32.751 [DEBUG] [Thread-81422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:05:32.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:05:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:05:32.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:05:32.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:05:32.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:05:32.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:05:32.782 [DEBUG] [Thread-81422] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:05:34.471 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:05:34.472 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:05:37.293 [DEBUG] [Thread-81424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:05:41.254 [DEBUG] [Thread-81425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:05:56.309 [DEBUG] [Thread-81426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:06:02.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:06: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
2025-12-13T03:06:03.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 5, 35), 1.96, 87.18, 0.0, 23.61, 6.88, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:06:03.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:05:35
2025-12-13T03:06:03.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:06:03.776 [DEBUG] [Thread-81427] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-13T03:06:03.776 [DEBUG] [Thread-81427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:06:03.797 [DEBUG] [Thread-81427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:06:03.797 [INFO] [Thread-81427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:03.801 [DEBUG] [Thread-81427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] client lang: <none>
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] server lang: <none>
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] kex follows: False
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] Compression: none
2025-12-13T03:06:03.802 [DEBUG] [Thread-81427] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:06:03.820 [DEBUG] [Thread-81427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:06:03.821 [DEBUG] [Thread-81427] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:06:03.821 [DEBUG] [Thread-81427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:06:03.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:06:03.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:06:03.824 [DEBUG] [Thread-81427] [transport.py] [_log()] userauth is OK
2025-12-13T03:06:03.825 [DEBUG] [Thread-81427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:06:03.825 [DEBUG] [Thread-81427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:06:03.825 [DEBUG] [Thread-81427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:06:03.825 [DEBUG] [Thread-81427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:06:03.860 [INFO] [Thread-81427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:06:03.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:06:04.533 [DEBUG] [Thread-81427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:06:04.533 [DEBUG] [Thread-81427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:06:04.533 [DEBUG] [Thread-81427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:06:04.574 [DEBUG] [Thread-81427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:06:04.574 [DEBUG] [Thread-81427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:06:04.577 [DEBUG] [Thread-81427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:06:04.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:06:04.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:06:04.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:06:04.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:06:04.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:06:04.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:06:04.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:06:04.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:06:04.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:06:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.045232 -999.00   +6.60  27.53     91   +5.20 1 3 1 3 1     0    0 1.59 4.65 Z...W 24.2 27.5 293.6 35.7 8.0 -2.5 7.8 -2.3 7.5 -2.3 7.8 -2.2
2025-12-13T03:06:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:06:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:06:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.045232
2025-12-13T03:06:04.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:06:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:06:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:06:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:06:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:06:04.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:05:35', tmtdew=1.96, humidity=87.18, cloud=0.0, wind=23.61, temperature=6.88, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:05:08.045', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:06:04.606 [DEBUG] [Thread-81427] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:06:04.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:06:04.703 [DEBUG] [Thread-81430] [transport.py] [_log()] starting thread (client mode): 0xf5772680
2025-12-13T03:06:04.703 [DEBUG] [Thread-81430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:06:04.723 [DEBUG] [Thread-81430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:06:04.723 [INFO] [Thread-81430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:06:04.730 [DEBUG] [Thread-81430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:06:04.731 [DEBUG] [Thread-81430] [transport.py] [_log()] client lang: <none>
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] server lang: <none>
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] kex follows: False
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:06:04.732 [DEBUG] [Thread-81430] [transport.py] [_log()] Compression: none
2025-12-13T03:06:04.733 [DEBUG] [Thread-81430] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:06:04.790 [DEBUG] [Thread-81430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:06:04.791 [DEBUG] [Thread-81430] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:06:04.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:06:04.792 [DEBUG] [Thread-81430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:06:04.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:06:04.846 [DEBUG] [Thread-81430] [transport.py] [_log()] userauth is OK
2025-12-13T03:06:04.846 [DEBUG] [Thread-81430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:06:04.847 [DEBUG] [Thread-81430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:06:04.847 [DEBUG] [Thread-81430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:06:04.847 [DEBUG] [Thread-81430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:06:04.867 [INFO] [Thread-81430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:06:04.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:06:04.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:06:05.707 [DEBUG] [Thread-81430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:06:05.707 [DEBUG] [Thread-81430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:06:05.755 [DEBUG] [Thread-81430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:06:05.755 [DEBUG] [Thread-81430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:06:05.764 [DEBUG] [Thread-81430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:06:05.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:06:05.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:06:05.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:06:05.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:06:05.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:06:05.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:06:05.798 [DEBUG] [Thread-81430] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:06:11.338 [DEBUG] [Thread-81432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:26.376 [DEBUG] [Thread-81433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:34.684 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:34.686 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:35.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:06:35.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:06:35.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:06:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 6, 7), 1.95, 87.23, 0.0, 22.25, 6.88, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:06:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:06:07
2025-12-13T03:06:36.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:06:36.786 [DEBUG] [Thread-81434] [transport.py] [_log()] starting thread (client mode): 0xf57a9420
2025-12-13T03:06:36.786 [DEBUG] [Thread-81434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:06:36.807 [DEBUG] [Thread-81434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:06:36.807 [INFO] [Thread-81434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:06:36.810 [DEBUG] [Thread-81434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] client lang: <none>
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] server lang: <none>
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] kex follows: False
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] Compression: none
2025-12-13T03:06:36.811 [DEBUG] [Thread-81434] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:06:36.830 [DEBUG] [Thread-81434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:06:36.830 [DEBUG] [Thread-81434] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:06:36.831 [DEBUG] [Thread-81434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:06:36.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:06:36.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:06:36.833 [DEBUG] [Thread-81434] [transport.py] [_log()] userauth is OK
2025-12-13T03:06:36.834 [DEBUG] [Thread-81434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:06:36.834 [DEBUG] [Thread-81434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:06:36.834 [DEBUG] [Thread-81434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:06:36.834 [DEBUG] [Thread-81434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:06:36.858 [INFO] [Thread-81434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:06:36.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:06:37.366 [DEBUG] [Thread-81436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:37.500 [DEBUG] [Thread-81434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:06:37.500 [DEBUG] [Thread-81434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:06:37.501 [DEBUG] [Thread-81434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:06:37.543 [DEBUG] [Thread-81434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:06:37.543 [DEBUG] [Thread-81434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:06:37.546 [DEBUG] [Thread-81434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:06:37.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:06:37.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:06:37.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:06:37.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:06:37.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:06:37.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:06:37.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:06:37.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:06:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:06:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.045580 -999.00   +6.60  34.19     90   +5.20 1 3 2 3 1     0    0 1.59 3.72 ----- 29.7 34.2 299.8 40.5 8.1 -2.4 7.8 -2.3 7.5 -2.0 7.8 -2.0
2025-12-13T03:06:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:06:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:06:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.045580
2025-12-13T03:06:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:06:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:06:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:06:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:06:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:06:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:06:07', tmtdew=1.95, humidity=87.23, cloud=0.0, wind=22.25, temperature=6.88, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:05:38.112', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:06:37.577 [DEBUG] [Thread-81434] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:06:37.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:06:37.673 [DEBUG] [Thread-81438] [transport.py] [_log()] starting thread (client mode): 0xf8188f70
2025-12-13T03:06:37.674 [DEBUG] [Thread-81438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:06:37.688 [DEBUG] [Thread-81438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:06:37.689 [INFO] [Thread-81438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:06:37.696 [DEBUG] [Thread-81438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:06:37.696 [DEBUG] [Thread-81438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:06:37.696 [DEBUG] [Thread-81438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:06:37.696 [DEBUG] [Thread-81438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:37.696 [DEBUG] [Thread-81438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] client lang: <none>
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] server lang: <none>
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] kex follows: False
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] Compression: none
2025-12-13T03:06:37.697 [DEBUG] [Thread-81438] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:06:37.753 [DEBUG] [Thread-81438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:06:37.754 [DEBUG] [Thread-81438] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:06:37.754 [DEBUG] [Thread-81438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:06:37.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:06:37.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:06:37.810 [DEBUG] [Thread-81438] [transport.py] [_log()] userauth is OK
2025-12-13T03:06:37.810 [DEBUG] [Thread-81438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:06:37.810 [DEBUG] [Thread-81438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:06:37.810 [DEBUG] [Thread-81438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:06:37.810 [DEBUG] [Thread-81438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:06:37.833 [INFO] [Thread-81438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:06:37.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:06:37.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:06:38.659 [DEBUG] [Thread-81438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:06:38.659 [DEBUG] [Thread-81438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:06:38.707 [DEBUG] [Thread-81438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:06:38.707 [DEBUG] [Thread-81438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:06:38.716 [DEBUG] [Thread-81438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:06:38.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:06:38.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:06:38.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:06:38.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:06:38.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:06:38.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:06:38.752 [DEBUG] [Thread-81438] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:06:41.404 [DEBUG] [Thread-81440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:06:56.437 [DEBUG] [Thread-81441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:07:08.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:07:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:07:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 6, 39), 1.9, 87.24, 0.0, 29.66, 6.83, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:07:09.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:06:39
2025-12-13T03:07:09.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:07:09.740 [DEBUG] [Thread-81442] [transport.py] [_log()] starting thread (client mode): 0xf57728c0
2025-12-13T03:07:09.741 [DEBUG] [Thread-81442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:07:09.762 [DEBUG] [Thread-81442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:07:09.762 [INFO] [Thread-81442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:07:09.765 [DEBUG] [Thread-81442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:07:09.765 [DEBUG] [Thread-81442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:07:09.765 [DEBUG] [Thread-81442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:07:09.765 [DEBUG] [Thread-81442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:09.765 [DEBUG] [Thread-81442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:09.765 [DEBUG] [Thread-81442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] client lang: <none>
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] server lang: <none>
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] kex follows: False
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:07:09.766 [DEBUG] [Thread-81442] [transport.py] [_log()] Compression: none
2025-12-13T03:07:09.767 [DEBUG] [Thread-81442] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:07:09.785 [DEBUG] [Thread-81442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:07:09.786 [DEBUG] [Thread-81442] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:07:09.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:07:09.787 [DEBUG] [Thread-81442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:07:09.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:07:09.789 [DEBUG] [Thread-81442] [transport.py] [_log()] userauth is OK
2025-12-13T03:07:09.789 [DEBUG] [Thread-81442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:07:09.789 [DEBUG] [Thread-81442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:07:09.790 [DEBUG] [Thread-81442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:07:09.790 [DEBUG] [Thread-81442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:07:09.819 [INFO] [Thread-81442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:07:09.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:07:10.480 [DEBUG] [Thread-81442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:07:10.480 [DEBUG] [Thread-81442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:07:10.489 [DEBUG] [Thread-81442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:07:10.521 [DEBUG] [Thread-81442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:07:10.521 [DEBUG] [Thread-81442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:07:10.524 [DEBUG] [Thread-81442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:07:10.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:07:10.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:07:10.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:07:10.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:07:10.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:07:10.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:07:10.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:07:10.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:07:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:07:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.046274 -999.00   +6.60  28.08     91   +5.20 1 3 1 3 1     0    0 1.52 1.61 ----- 28.7 28.1 298.6 39.9 8.1 -2.8 7.8 -2.7 7.5 -2.5 7.9 -2.2
2025-12-13T03:07:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:07:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:07:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.046274
2025-12-13T03:07:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:07:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:07:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:07:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:07:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:07:10.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:06:39', tmtdew=1.9, humidity=87.24, cloud=0.0, wind=29.66, temperature=6.83, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:06:38.074', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:07:10.548 [DEBUG] [Thread-81442] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:07:10.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:07:10.642 [DEBUG] [Thread-81445] [transport.py] [_log()] starting thread (client mode): 0xf8188190
2025-12-13T03:07:10.642 [DEBUG] [Thread-81445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:07:10.657 [DEBUG] [Thread-81445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:07:10.657 [INFO] [Thread-81445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:07:10.664 [DEBUG] [Thread-81445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:07:10.664 [DEBUG] [Thread-81445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] client lang: <none>
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] server lang: <none>
2025-12-13T03:07:10.665 [DEBUG] [Thread-81445] [transport.py] [_log()] kex follows: False
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] Compression: none
2025-12-13T03:07:10.666 [DEBUG] [Thread-81445] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:07:10.724 [DEBUG] [Thread-81445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:07:10.725 [DEBUG] [Thread-81445] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:07:10.725 [DEBUG] [Thread-81445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:07:10.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:07:10.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:07:10.783 [DEBUG] [Thread-81445] [transport.py] [_log()] userauth is OK
2025-12-13T03:07:10.783 [DEBUG] [Thread-81445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:07:10.783 [DEBUG] [Thread-81445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:07:10.783 [DEBUG] [Thread-81445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:07:10.783 [DEBUG] [Thread-81445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:07:10.801 [INFO] [Thread-81445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:07:10.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:07:10.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:07:11.471 [DEBUG] [Thread-81447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:11.595 [DEBUG] [Thread-81445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:07:11.595 [DEBUG] [Thread-81445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:07:11.643 [DEBUG] [Thread-81445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:07:11.643 [DEBUG] [Thread-81445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:07:11.652 [DEBUG] [Thread-81445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:07:11.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:07:11.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:07:11.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:07:11.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:07:11.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:07:11.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:07:11.687 [DEBUG] [Thread-81445] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:07:26.514 [DEBUG] [Thread-81448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:34.889 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:34.890 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:37.442 [DEBUG] [Thread-81449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:41.541 [DEBUG] [Thread-81450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:07:41.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:07:41.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:07:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:07:42.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 7, 11), 1.91, 87.19, 0.0, 31.62, 6.85, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:07:42.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:07:11
2025-12-13T03:07:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:07:42.686 [DEBUG] [Thread-81451] [transport.py] [_log()] starting thread (client mode): 0xf572f7f0
2025-12-13T03:07:42.686 [DEBUG] [Thread-81451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:07:42.707 [DEBUG] [Thread-81451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:07:42.707 [INFO] [Thread-81451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:07:42.710 [DEBUG] [Thread-81451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:07:42.710 [DEBUG] [Thread-81451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:07:42.710 [DEBUG] [Thread-81451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:07:42.710 [DEBUG] [Thread-81451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:42.710 [DEBUG] [Thread-81451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:42.710 [DEBUG] [Thread-81451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] client lang: <none>
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] server lang: <none>
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] kex follows: False
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] Compression: none
2025-12-13T03:07:42.711 [DEBUG] [Thread-81451] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:07:42.728 [DEBUG] [Thread-81451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:07:42.729 [DEBUG] [Thread-81451] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:07:42.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:07:42.730 [DEBUG] [Thread-81451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:07:42.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:07:42.731 [DEBUG] [Thread-81451] [transport.py] [_log()] userauth is OK
2025-12-13T03:07:42.731 [DEBUG] [Thread-81451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:07:42.731 [DEBUG] [Thread-81451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:07:42.731 [DEBUG] [Thread-81451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:07:42.731 [DEBUG] [Thread-81451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:07:42.751 [INFO] [Thread-81451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:07:42.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:07:43.379 [DEBUG] [Thread-81451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:07:43.380 [DEBUG] [Thread-81451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:07:43.380 [DEBUG] [Thread-81451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:07:43.421 [DEBUG] [Thread-81451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:07:43.421 [DEBUG] [Thread-81451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:07:43.424 [DEBUG] [Thread-81451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:07:43.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:07:43.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:07:43.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:07:43.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:07:43.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:07:43.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:07:43.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:07:43.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:07:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:07:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.046622 -999.00   +6.60  31.18     91   +5.20 1 3 2 3 1     0    0 1.45 0.56 ----- 28.9 31.2 296.2 43.6 8.1 -2.6 7.8 -2.4 7.5 -2.3 7.9 -2.3
2025-12-13T03:07:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:07:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:07:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.046622
2025-12-13T03:07:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:07:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:07:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:07:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:07:43.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:07:43.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:07:11', tmtdew=1.91, humidity=87.19, cloud=0.0, wind=31.62, temperature=6.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:07:08.141', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:07:43.449 [DEBUG] [Thread-81451] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:07:43.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:07:43.546 [DEBUG] [Thread-81454] [transport.py] [_log()] starting thread (client mode): 0xf572cdc0
2025-12-13T03:07:43.547 [DEBUG] [Thread-81454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:07:43.561 [DEBUG] [Thread-81454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:07:43.561 [INFO] [Thread-81454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:07:43.569 [DEBUG] [Thread-81454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:07:43.569 [DEBUG] [Thread-81454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:07:43.569 [DEBUG] [Thread-81454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:07:43.569 [DEBUG] [Thread-81454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:43.569 [DEBUG] [Thread-81454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] client lang: <none>
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] server lang: <none>
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] kex follows: False
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:07:43.570 [DEBUG] [Thread-81454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:07:43.571 [DEBUG] [Thread-81454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:07:43.571 [DEBUG] [Thread-81454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:07:43.571 [DEBUG] [Thread-81454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:07:43.571 [DEBUG] [Thread-81454] [transport.py] [_log()] Compression: none
2025-12-13T03:07:43.571 [DEBUG] [Thread-81454] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:07:43.626 [DEBUG] [Thread-81454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:07:43.626 [DEBUG] [Thread-81454] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:07:43.627 [DEBUG] [Thread-81454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:07:43.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:07:43.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:07:43.682 [DEBUG] [Thread-81454] [transport.py] [_log()] userauth is OK
2025-12-13T03:07:43.682 [DEBUG] [Thread-81454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:07:43.682 [DEBUG] [Thread-81454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:07:43.682 [DEBUG] [Thread-81454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:07:43.682 [DEBUG] [Thread-81454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:07:43.702 [INFO] [Thread-81454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:07:43.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:07:43.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:07:44.538 [DEBUG] [Thread-81454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:07:44.538 [DEBUG] [Thread-81454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:07:44.585 [DEBUG] [Thread-81454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:07:44.586 [DEBUG] [Thread-81454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:07:44.594 [DEBUG] [Thread-81454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:07:44.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:07:44.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:07:44.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:07:44.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:07:44.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:07:44.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:07:44.626 [DEBUG] [Thread-81454] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:07:56.569 [DEBUG] [Thread-81456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:11.623 [DEBUG] [Thread-81457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:08:14.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:08:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:08:15.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 7, 44), 1.92, 87.64, 0.0, 25.81, 6.85, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:08:15.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:07:44
2025-12-13T03:08:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:08:15.620 [DEBUG] [Thread-81458] [transport.py] [_log()] starting thread (client mode): 0xf57abc70
2025-12-13T03:08:15.621 [DEBUG] [Thread-81458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:08:15.642 [DEBUG] [Thread-81458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:08:15.642 [INFO] [Thread-81458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] client lang: <none>
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] server lang: <none>
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] kex follows: False
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:08:15.643 [DEBUG] [Thread-81458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:08:15.644 [DEBUG] [Thread-81458] [transport.py] [_log()] Compression: none
2025-12-13T03:08:15.644 [DEBUG] [Thread-81458] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:08:15.654 [DEBUG] [Thread-81458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:08:15.654 [DEBUG] [Thread-81458] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:08:15.655 [DEBUG] [Thread-81458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:08:15.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:08:15.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:08:15.657 [DEBUG] [Thread-81458] [transport.py] [_log()] userauth is OK
2025-12-13T03:08:15.658 [DEBUG] [Thread-81458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:08:15.658 [DEBUG] [Thread-81458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:08:15.658 [DEBUG] [Thread-81458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:08:15.658 [DEBUG] [Thread-81458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:08:15.673 [INFO] [Thread-81458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:08:15.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:08:16.317 [DEBUG] [Thread-81458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:08:16.318 [DEBUG] [Thread-81458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:08:16.318 [DEBUG] [Thread-81458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:08:16.359 [DEBUG] [Thread-81458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:08:16.359 [DEBUG] [Thread-81458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:08:16.362 [DEBUG] [Thread-81458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:08:16.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:08:16.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:08:16.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:08:16.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:08:16.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:08:16.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:08:16.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.046969 -999.00   +6.50  31.09     91   +5.20 1 3 2 3 1     0    0 1.43 -0.41 ----- 26.9 31.1 298.4 40.9 8.1 -2.3 7.9 -2.2 7.5 -1.9 7.9 -1.8
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.046969
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:08:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:07:44', tmtdew=1.92, humidity=87.64, cloud=0.0, wind=25.81, temperature=6.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:07:38.122', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:08:16.383 [DEBUG] [Thread-81458] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:08:16.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:08:16.467 [DEBUG] [Thread-81461] [transport.py] [_log()] starting thread (client mode): 0xf57a9ae0
2025-12-13T03:08:16.467 [DEBUG] [Thread-81461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:08:16.482 [DEBUG] [Thread-81461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:08:16.482 [INFO] [Thread-81461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:08:16.489 [DEBUG] [Thread-81461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:08:16.489 [DEBUG] [Thread-81461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:08:16.489 [DEBUG] [Thread-81461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] client lang: <none>
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] server lang: <none>
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] kex follows: False
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] Compression: none
2025-12-13T03:08:16.490 [DEBUG] [Thread-81461] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:08:16.548 [DEBUG] [Thread-81461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:08:16.548 [DEBUG] [Thread-81461] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:08:16.549 [DEBUG] [Thread-81461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:08:16.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:08:16.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:08:16.609 [DEBUG] [Thread-81461] [transport.py] [_log()] userauth is OK
2025-12-13T03:08:16.609 [DEBUG] [Thread-81461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:08:16.609 [DEBUG] [Thread-81461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:08:16.609 [DEBUG] [Thread-81461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:08:16.609 [DEBUG] [Thread-81461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:08:16.625 [INFO] [Thread-81461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:08:16.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:08:16.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:08:17.455 [DEBUG] [Thread-81461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:08:17.455 [DEBUG] [Thread-81461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:08:17.503 [DEBUG] [Thread-81461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:08:17.503 [DEBUG] [Thread-81461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:08:17.511 [DEBUG] [Thread-81461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:08:17.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:08:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:08:17.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:08:17.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:08:17.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:08:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:08:17.549 [DEBUG] [Thread-81461] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:08:26.647 [DEBUG] [Thread-81463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:35.092 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:35.093 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:37.522 [DEBUG] [Thread-81464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:41.691 [DEBUG] [Thread-81465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:08:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:08:47.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:08:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:08:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 8, 16), 1.91, 87.68, 0.0, 28.19, 6.85, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:08:48.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:08:16
2025-12-13T03:08:48.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:08:48.563 [DEBUG] [Thread-81466] [transport.py] [_log()] starting thread (client mode): 0xf818b6a0
2025-12-13T03:08:48.563 [DEBUG] [Thread-81466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:08:48.584 [DEBUG] [Thread-81466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:08:48.584 [INFO] [Thread-81466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:48.587 [DEBUG] [Thread-81466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] client lang: <none>
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] server lang: <none>
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] kex follows: False
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] Compression: none
2025-12-13T03:08:48.588 [DEBUG] [Thread-81466] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:08:48.595 [DEBUG] [Thread-81466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:08:48.595 [DEBUG] [Thread-81466] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:08:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:08:48.596 [DEBUG] [Thread-81466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:08:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:08:48.596 [DEBUG] [Thread-81466] [transport.py] [_log()] userauth is OK
2025-12-13T03:08:48.596 [DEBUG] [Thread-81466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:08:48.596 [DEBUG] [Thread-81466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:08:48.596 [DEBUG] [Thread-81466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:08:48.596 [DEBUG] [Thread-81466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:08:48.609 [INFO] [Thread-81466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:08:48.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:08:49.255 [DEBUG] [Thread-81466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:08:49.255 [DEBUG] [Thread-81466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:08:49.255 [DEBUG] [Thread-81466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:08:49.297 [DEBUG] [Thread-81466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:08:49.297 [DEBUG] [Thread-81466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:08:49.299 [DEBUG] [Thread-81466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:08:49.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:08:49.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:08:49.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:08:49.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:08:49.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:08:49.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:08:49.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.047316 -999.00   +6.60  29.59     91   +5.30 1 3 1 3 1     0    0 1.42 -1.85 ----- 25.2 29.6 285.9 36.4 8.1 -2.3 7.9 -2.1 7.6 -1.7 8.0 -1.7
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.047316
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:08:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:08:16', tmtdew=1.91, humidity=87.68, cloud=0.0, wind=28.19, temperature=6.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:08:08.102', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:08:49.320 [DEBUG] [Thread-81466] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:08:49.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:08:49.406 [DEBUG] [Thread-81469] [transport.py] [_log()] starting thread (client mode): 0xf818b580
2025-12-13T03:08:49.406 [DEBUG] [Thread-81469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:08:49.421 [DEBUG] [Thread-81469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:08:49.421 [INFO] [Thread-81469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] client lang: <none>
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] server lang: <none>
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] kex follows: False
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] Compression: none
2025-12-13T03:08:49.429 [DEBUG] [Thread-81469] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:08:49.484 [DEBUG] [Thread-81469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:08:49.484 [DEBUG] [Thread-81469] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:08:49.485 [DEBUG] [Thread-81469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:08:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:08:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:08:49.543 [DEBUG] [Thread-81469] [transport.py] [_log()] userauth is OK
2025-12-13T03:08:49.543 [DEBUG] [Thread-81469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:08:49.543 [DEBUG] [Thread-81469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:08:49.543 [DEBUG] [Thread-81469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:08:49.543 [DEBUG] [Thread-81469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:08:49.561 [INFO] [Thread-81469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:08:49.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:08:49.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:08:50.376 [DEBUG] [Thread-81469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:08:50.376 [DEBUG] [Thread-81469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:08:50.424 [DEBUG] [Thread-81469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:08:50.424 [DEBUG] [Thread-81469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:08:50.432 [DEBUG] [Thread-81469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:08:50.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:08:50.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:08:50.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:08:50.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:08:50.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:08:50.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:08:50.464 [DEBUG] [Thread-81469] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:08:56.725 [DEBUG] [Thread-81471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:11.768 [DEBUG] [Thread-81472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:20.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:09:20.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:09:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:09:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 8, 48), 1.9, 87.73, 0.0, 26.18, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:09:21.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:08:48
2025-12-13T03:09:21.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:09:21.517 [DEBUG] [Thread-81473] [transport.py] [_log()] starting thread (client mode): 0xf57a98a0
2025-12-13T03:09:21.517 [DEBUG] [Thread-81473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:09:21.537 [DEBUG] [Thread-81473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:09:21.537 [INFO] [Thread-81473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] client lang: <none>
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] server lang: <none>
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] kex follows: False
2025-12-13T03:09:21.540 [DEBUG] [Thread-81473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:09:21.541 [DEBUG] [Thread-81473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:09:21.541 [DEBUG] [Thread-81473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:09:21.541 [DEBUG] [Thread-81473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:09:21.541 [DEBUG] [Thread-81473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:09:21.541 [DEBUG] [Thread-81473] [transport.py] [_log()] Compression: none
2025-12-13T03:09:21.541 [DEBUG] [Thread-81473] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:09:21.557 [DEBUG] [Thread-81473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:09:21.557 [DEBUG] [Thread-81473] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:09:21.557 [DEBUG] [Thread-81473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:09:21.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:09:21.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:09:21.558 [DEBUG] [Thread-81473] [transport.py] [_log()] userauth is OK
2025-12-13T03:09:21.558 [DEBUG] [Thread-81473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:09:21.559 [DEBUG] [Thread-81473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:09:21.559 [DEBUG] [Thread-81473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:09:21.559 [DEBUG] [Thread-81473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:09:21.577 [INFO] [Thread-81473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:09:21.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:09:22.164 [DEBUG] [Thread-81473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:09:22.164 [DEBUG] [Thread-81473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:09:22.165 [DEBUG] [Thread-81473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:09:22.206 [DEBUG] [Thread-81473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:09:22.206 [DEBUG] [Thread-81473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:09:22.208 [DEBUG] [Thread-81473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:09:22.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:09:22.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:09:22.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:09:22.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:09:22.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:09:22.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:09:22.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.047663 -999.00   +6.60  29.06     91   +5.30 1 3 1 3 1     0    0 1.36 -2.56 ----- 31.3 29.1 297.0 39.7 8.1 -2.2 7.9 -2.1 7.6 -1.8 7.9 -1.8
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.047663
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:08:48', tmtdew=1.9, humidity=87.73, cloud=0.0, wind=26.18, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:08:38.083', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:09:22.227 [DEBUG] [Thread-81473] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:09:22.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:09:22.312 [DEBUG] [Thread-81476] [transport.py] [_log()] starting thread (client mode): 0xf81e5420
2025-12-13T03:09:22.312 [DEBUG] [Thread-81476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:09:22.326 [DEBUG] [Thread-81476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:09:22.326 [INFO] [Thread-81476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] client lang: <none>
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] server lang: <none>
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] kex follows: False
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] Compression: none
2025-12-13T03:09:22.334 [DEBUG] [Thread-81476] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:09:22.392 [DEBUG] [Thread-81476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:09:22.392 [DEBUG] [Thread-81476] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:09:22.392 [DEBUG] [Thread-81476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:09:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:09:22.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:09:22.451 [DEBUG] [Thread-81476] [transport.py] [_log()] userauth is OK
2025-12-13T03:09:22.451 [DEBUG] [Thread-81476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:09:22.451 [DEBUG] [Thread-81476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:09:22.451 [DEBUG] [Thread-81476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:09:22.451 [DEBUG] [Thread-81476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:09:22.465 [INFO] [Thread-81476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:09:22.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:09:22.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:09:23.332 [DEBUG] [Thread-81476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:09:23.332 [DEBUG] [Thread-81476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:09:23.380 [DEBUG] [Thread-81476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:09:23.380 [DEBUG] [Thread-81476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:09:23.389 [DEBUG] [Thread-81476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:09:23.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:09:23.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:09:23.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:09:23.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:09:23.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:09:23.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:09:23.425 [DEBUG] [Thread-81476] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:09:26.796 [DEBUG] [Thread-81478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:35.296 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:35.298 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:37.610 [DEBUG] [Thread-81479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:41.829 [DEBUG] [Thread-81480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:09:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:09:53.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:09: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
2025-12-13T03:09:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 9, 20), 1.9, 87.73, 0.0, 24.53, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:09:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:09:20
2025-12-13T03:09:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:09:54.457 [DEBUG] [Thread-81481] [transport.py] [_log()] starting thread (client mode): 0xf818ac50
2025-12-13T03:09:54.457 [DEBUG] [Thread-81481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:09:54.479 [DEBUG] [Thread-81481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:09:54.479 [INFO] [Thread-81481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] client lang: <none>
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] server lang: <none>
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] kex follows: False
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] Compression: none
2025-12-13T03:09:54.483 [DEBUG] [Thread-81481] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:09:54.499 [DEBUG] [Thread-81481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:09:54.499 [DEBUG] [Thread-81481] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:09:54.499 [DEBUG] [Thread-81481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:09:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:09:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:09:54.501 [DEBUG] [Thread-81481] [transport.py] [_log()] userauth is OK
2025-12-13T03:09:54.501 [DEBUG] [Thread-81481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:09:54.501 [DEBUG] [Thread-81481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:09:54.501 [DEBUG] [Thread-81481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:09:54.501 [DEBUG] [Thread-81481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:09:54.516 [INFO] [Thread-81481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:09:54.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:09:55.166 [DEBUG] [Thread-81481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:09:55.166 [DEBUG] [Thread-81481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:09:55.167 [DEBUG] [Thread-81481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:09:55.207 [DEBUG] [Thread-81481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:09:55.207 [DEBUG] [Thread-81481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:09:55.210 [DEBUG] [Thread-81481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:09:55.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:09:55.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:09:55.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:09:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:09:55.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:09:55.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:09:55.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:09:55.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:09:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:09:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.048010 -999.00   +6.60  32.50     91   +5.30 1 3 2 3 1     0    0 1.37 -3.37 ----- 36.5 32.5 291.6 35.9 8.1 -2.4 8.0 -2.3 7.6 -2.1 7.9 -1.8
2025-12-13T03:09:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:09:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:09:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.048010
2025-12-13T03:09:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:09:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:09:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:09:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:09:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:09:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:09:20', tmtdew=1.9, humidity=87.73, cloud=0.0, wind=24.53, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:09:08.064', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:09:55.235 [DEBUG] [Thread-81481] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:09:55.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:09:55.332 [DEBUG] [Thread-81484] [transport.py] [_log()] starting thread (client mode): 0xf572f190
2025-12-13T03:09:55.332 [DEBUG] [Thread-81484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:09:55.347 [DEBUG] [Thread-81484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:09:55.347 [INFO] [Thread-81484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:09:55.354 [DEBUG] [Thread-81484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:09:55.354 [DEBUG] [Thread-81484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] client lang: <none>
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] server lang: <none>
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] kex follows: False
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] Compression: none
2025-12-13T03:09:55.355 [DEBUG] [Thread-81484] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:09:55.413 [DEBUG] [Thread-81484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:09:55.413 [DEBUG] [Thread-81484] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:09:55.414 [DEBUG] [Thread-81484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:09:55.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:09:55.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:09:55.470 [DEBUG] [Thread-81484] [transport.py] [_log()] userauth is OK
2025-12-13T03:09:55.470 [DEBUG] [Thread-81484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:09:55.470 [DEBUG] [Thread-81484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:09:55.470 [DEBUG] [Thread-81484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:09:55.470 [DEBUG] [Thread-81484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:09:55.488 [INFO] [Thread-81484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:09:55.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:09:55.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:09:56.295 [DEBUG] [Thread-81484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:09:56.295 [DEBUG] [Thread-81484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:09:56.343 [DEBUG] [Thread-81484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:09:56.343 [DEBUG] [Thread-81484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:09:56.351 [DEBUG] [Thread-81484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:09:56.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:09:56.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:09:56.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:09:56.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:09:56.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:09:56.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:09:56.385 [DEBUG] [Thread-81484] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:09:56.857 [DEBUG] [Thread-81486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:11.897 [DEBUG] [Thread-81487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:26.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:10:26.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:10:26.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:10:26.924 [DEBUG] [Thread-81488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 9, 52), 1.85, 87.76, 0.0, 23.55, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:10:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:09:52
2025-12-13T03:10:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:10:27.381 [DEBUG] [Thread-81489] [transport.py] [_log()] starting thread (client mode): 0xf575f220
2025-12-13T03:10:27.381 [DEBUG] [Thread-81489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:10:27.402 [DEBUG] [Thread-81489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:10:27.402 [INFO] [Thread-81489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:10:27.403 [DEBUG] [Thread-81489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] client lang: <none>
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] server lang: <none>
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] kex follows: False
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] Compression: none
2025-12-13T03:10:27.404 [DEBUG] [Thread-81489] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:10:27.414 [DEBUG] [Thread-81489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:10:27.414 [DEBUG] [Thread-81489] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:10:27.415 [DEBUG] [Thread-81489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:10:27.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:10:27.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:10:27.416 [DEBUG] [Thread-81489] [transport.py] [_log()] userauth is OK
2025-12-13T03:10:27.417 [DEBUG] [Thread-81489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:10:27.417 [DEBUG] [Thread-81489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:10:27.417 [DEBUG] [Thread-81489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:10:27.417 [DEBUG] [Thread-81489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:10:27.437 [INFO] [Thread-81489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:10:27.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:10:28.059 [DEBUG] [Thread-81489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:10:28.059 [DEBUG] [Thread-81489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:10:28.059 [DEBUG] [Thread-81489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:10:28.100 [DEBUG] [Thread-81489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:10:28.100 [DEBUG] [Thread-81489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:10:28.103 [DEBUG] [Thread-81489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:10:28.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:10:28.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:10:28.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:10:28.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:10:28.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:10:28.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:10:28.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:10:28.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:10:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:10:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.048358 -999.00   +6.50  28.56     92   +5.30 1 3 1 3 1     0    0 1.31 -4.31 ----- 30.7 28.6 293.4 41.7 8.1 -2.3 8.0 -2.2 7.6 -2.1 7.9 -1.7
2025-12-13T03:10:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:10:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:10:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.048358
2025-12-13T03:10:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:10:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:10:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:10:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:10:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:10:28.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:09:52', tmtdew=1.85, humidity=87.76, cloud=0.0, wind=23.55, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:09:38.131', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:10:28.127 [DEBUG] [Thread-81489] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:10:28.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:10:28.222 [DEBUG] [Thread-81492] [transport.py] [_log()] starting thread (client mode): 0xf818ac80
2025-12-13T03:10:28.223 [DEBUG] [Thread-81492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:10:28.237 [DEBUG] [Thread-81492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:10:28.237 [INFO] [Thread-81492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:10:28.244 [DEBUG] [Thread-81492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:10:28.244 [DEBUG] [Thread-81492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] client lang: <none>
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] server lang: <none>
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] kex follows: False
2025-12-13T03:10:28.245 [DEBUG] [Thread-81492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:10:28.246 [DEBUG] [Thread-81492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:10:28.246 [DEBUG] [Thread-81492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:10:28.246 [DEBUG] [Thread-81492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:10:28.246 [DEBUG] [Thread-81492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:10:28.246 [DEBUG] [Thread-81492] [transport.py] [_log()] Compression: none
2025-12-13T03:10:28.246 [DEBUG] [Thread-81492] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:10:28.301 [DEBUG] [Thread-81492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:10:28.302 [DEBUG] [Thread-81492] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:10:28.302 [DEBUG] [Thread-81492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:10:28.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:10:28.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:10:28.358 [DEBUG] [Thread-81492] [transport.py] [_log()] userauth is OK
2025-12-13T03:10:28.358 [DEBUG] [Thread-81492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:10:28.358 [DEBUG] [Thread-81492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:10:28.358 [DEBUG] [Thread-81492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:10:28.358 [DEBUG] [Thread-81492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:10:28.377 [INFO] [Thread-81492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:10:28.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:10:28.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:10:29.203 [DEBUG] [Thread-81492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:10:29.204 [DEBUG] [Thread-81492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:10:29.252 [DEBUG] [Thread-81492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:10:29.252 [DEBUG] [Thread-81492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:10:29.261 [DEBUG] [Thread-81492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:10:29.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:10:29.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:10:29.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:10:29.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:10:29.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:10:29.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:10:29.296 [DEBUG] [Thread-81492] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:10:35.505 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:35.507 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:37.686 [DEBUG] [Thread-81494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:41.953 [DEBUG] [Thread-81495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:56.999 [DEBUG] [Thread-81496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:10:59.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:10:59.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:10:59.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:11:00.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 10, 56), 1.85, 88.26, 0.0, 27.37, 6.88, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:11:00.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:10:56
2025-12-13T03:11:00.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:11:00.291 [DEBUG] [Thread-81497] [transport.py] [_log()] starting thread (client mode): 0xf57a9180
2025-12-13T03:11:00.292 [DEBUG] [Thread-81497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:11:00.311 [DEBUG] [Thread-81497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:11:00.311 [INFO] [Thread-81497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:11:00.314 [DEBUG] [Thread-81497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] client lang: <none>
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] server lang: <none>
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] kex follows: False
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] Compression: none
2025-12-13T03:11:00.315 [DEBUG] [Thread-81497] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:11:00.331 [DEBUG] [Thread-81497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:11:00.331 [DEBUG] [Thread-81497] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:11:00.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:11:00.332 [DEBUG] [Thread-81497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:11:00.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:11:00.373 [DEBUG] [Thread-81497] [transport.py] [_log()] userauth is OK
2025-12-13T03:11:00.373 [DEBUG] [Thread-81497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:11:00.373 [DEBUG] [Thread-81497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:11:00.373 [DEBUG] [Thread-81497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:11:00.373 [DEBUG] [Thread-81497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:11:00.405 [INFO] [Thread-81497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:11:00.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:11:01.057 [DEBUG] [Thread-81497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:11:01.058 [DEBUG] [Thread-81497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:11:01.058 [DEBUG] [Thread-81497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:11:01.099 [DEBUG] [Thread-81497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:11:01.099 [DEBUG] [Thread-81497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:11:01.102 [DEBUG] [Thread-81497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:11:01.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:11:01.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:11:01.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:11:01.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:11:01.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:11:01.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:11:01.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:11:01.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:11:01.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:11:01.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.048705 -999.00   +6.60  28.07     92   +5.40 1 3 1 3 1     0    0 1.26 -5.77 ----- 30.1 28.1 299.8 33.8 8.1 -2.1 7.9 -2.2 7.5 -2.4 7.9 -1.7
2025-12-13T03:11:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:11:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:11:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.048705
2025-12-13T03:11:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:11:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:11:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:11:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:11:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:11:01.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:10:56', tmtdew=1.85, humidity=88.26, cloud=0.0, wind=27.37, temperature=6.88, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:10:08.112', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:11:01.126 [DEBUG] [Thread-81497] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:11:01.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:11:01.230 [DEBUG] [Thread-81500] [transport.py] [_log()] starting thread (client mode): 0xf575ec50
2025-12-13T03:11:01.230 [DEBUG] [Thread-81500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:11:01.245 [DEBUG] [Thread-81500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:11:01.245 [INFO] [Thread-81500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:11:01.253 [DEBUG] [Thread-81500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:11:01.253 [DEBUG] [Thread-81500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:11:01.253 [DEBUG] [Thread-81500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:11:01.253 [DEBUG] [Thread-81500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:01.253 [DEBUG] [Thread-81500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:01.253 [DEBUG] [Thread-81500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] client lang: <none>
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] server lang: <none>
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] kex follows: False
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:11:01.254 [DEBUG] [Thread-81500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:11:01.255 [DEBUG] [Thread-81500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:11:01.255 [DEBUG] [Thread-81500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:11:01.255 [DEBUG] [Thread-81500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:11:01.255 [DEBUG] [Thread-81500] [transport.py] [_log()] Compression: none
2025-12-13T03:11:01.255 [DEBUG] [Thread-81500] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:11:01.313 [DEBUG] [Thread-81500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:11:01.314 [DEBUG] [Thread-81500] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:11:01.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:11:01.315 [DEBUG] [Thread-81500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:11:01.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:11:01.369 [DEBUG] [Thread-81500] [transport.py] [_log()] userauth is OK
2025-12-13T03:11:01.370 [DEBUG] [Thread-81500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:11:01.370 [DEBUG] [Thread-81500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:11:01.370 [DEBUG] [Thread-81500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:11:01.370 [DEBUG] [Thread-81500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:11:01.390 [INFO] [Thread-81500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:11:01.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:11:01.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:11:02.232 [DEBUG] [Thread-81500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:11:02.232 [DEBUG] [Thread-81500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:11:02.279 [DEBUG] [Thread-81500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:11:02.279 [DEBUG] [Thread-81500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:11:02.287 [DEBUG] [Thread-81500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:11:02.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:11:02.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:11:02.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:11:02.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:11:02.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:11:02.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:11:02.319 [DEBUG] [Thread-81500] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:11:12.027 [DEBUG] [Thread-81502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:11:27.070 [DEBUG] [Thread-81503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:11:32.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:11:32.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:11:32.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 11, 28), 1.84, 88.29, 0.0, 26.22, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:11:28
2025-12-13T03:11:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:11:33.307 [DEBUG] [Thread-81504] [transport.py] [_log()] starting thread (client mode): 0xf81e6230
2025-12-13T03:11:33.307 [DEBUG] [Thread-81504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:11:33.325 [DEBUG] [Thread-81504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:11:33.325 [INFO] [Thread-81504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] client lang: <none>
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] server lang: <none>
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] kex follows: False
2025-12-13T03:11:33.326 [DEBUG] [Thread-81504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:11:33.327 [DEBUG] [Thread-81504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:11:33.327 [DEBUG] [Thread-81504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:11:33.327 [DEBUG] [Thread-81504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:11:33.327 [DEBUG] [Thread-81504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:11:33.327 [DEBUG] [Thread-81504] [transport.py] [_log()] Compression: none
2025-12-13T03:11:33.327 [DEBUG] [Thread-81504] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:11:33.334 [DEBUG] [Thread-81504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:11:33.335 [DEBUG] [Thread-81504] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:11:33.335 [DEBUG] [Thread-81504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:11:33.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:11:33.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:11:33.336 [DEBUG] [Thread-81504] [transport.py] [_log()] userauth is OK
2025-12-13T03:11:33.336 [DEBUG] [Thread-81504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:11:33.336 [DEBUG] [Thread-81504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:11:33.336 [DEBUG] [Thread-81504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:11:33.336 [DEBUG] [Thread-81504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:11:33.348 [INFO] [Thread-81504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:11:33.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:11:33.999 [DEBUG] [Thread-81504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:11:34.000 [DEBUG] [Thread-81504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:11:34.000 [DEBUG] [Thread-81504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:11:34.041 [DEBUG] [Thread-81504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:11:34.041 [DEBUG] [Thread-81504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:11:34.044 [DEBUG] [Thread-81504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:11:34.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:11:34.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:11:34.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:11:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:11:34.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:11:34.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:11:34.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:11:34.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:11:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:11:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.049399 -999.00   +6.70  30.51     92   +5.50 1 3 2 3 1     0    0 1.18 -8.24 ----- 28.7 30.5 294.8 37.4 8.2 -2.9 8.0 -2.8 7.6 -3.1 8.0 -1.7
2025-12-13T03:11:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:11:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:11:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.049399
2025-12-13T03:11:34.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:11:34.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:11:34.060 [DEBUG] [Thread-81504] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:11:34.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:11:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:11:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:11:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:11:28', tmtdew=1.84, humidity=88.29, cloud=0.0, wind=26.22, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:11:08.074', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:11:34.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:11:34.153 [DEBUG] [Thread-81507] [transport.py] [_log()] starting thread (client mode): 0xf81e52d0
2025-12-13T03:11:34.154 [DEBUG] [Thread-81507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:11:34.169 [DEBUG] [Thread-81507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:11:34.169 [INFO] [Thread-81507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:11:34.177 [DEBUG] [Thread-81507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] client lang: <none>
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] server lang: <none>
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] kex follows: False
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] Compression: none
2025-12-13T03:11:34.178 [DEBUG] [Thread-81507] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:11:34.233 [DEBUG] [Thread-81507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:11:34.234 [DEBUG] [Thread-81507] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:11:34.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:11:34.234 [DEBUG] [Thread-81507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:11:34.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:11:34.289 [DEBUG] [Thread-81507] [transport.py] [_log()] userauth is OK
2025-12-13T03:11:34.290 [DEBUG] [Thread-81507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:11:34.290 [DEBUG] [Thread-81507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:11:34.290 [DEBUG] [Thread-81507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:11:34.290 [DEBUG] [Thread-81507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:11:34.313 [INFO] [Thread-81507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:11:34.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:11:34.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:11:35.156 [DEBUG] [Thread-81507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:11:35.156 [DEBUG] [Thread-81507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:11:35.205 [DEBUG] [Thread-81507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:11:35.205 [DEBUG] [Thread-81507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:11:35.214 [DEBUG] [Thread-81507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:11:35.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:11:35.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:11:35.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:11:35.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:11:35.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:11:35.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:11:35.248 [DEBUG] [Thread-81507] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:11:35.716 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:11:35.717 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:11:37.767 [DEBUG] [Thread-81509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:11:42.095 [DEBUG] [Thread-81510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:11:57.147 [DEBUG] [Thread-81511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:05.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:12:05.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:12:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:12:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 11, 28), 1.84, 88.29, 0.0, 26.22, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:12:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:11:28
2025-12-13T03:12:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:12:06.272 [DEBUG] [Thread-81512] [transport.py] [_log()] starting thread (client mode): 0xf57ab9a0
2025-12-13T03:12:06.273 [DEBUG] [Thread-81512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:12:06.293 [DEBUG] [Thread-81512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:12:06.293 [INFO] [Thread-81512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] client lang: <none>
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] server lang: <none>
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] kex follows: False
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:12:06.296 [DEBUG] [Thread-81512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:12:06.297 [DEBUG] [Thread-81512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:12:06.297 [DEBUG] [Thread-81512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:12:06.297 [DEBUG] [Thread-81512] [transport.py] [_log()] Compression: none
2025-12-13T03:12:06.297 [DEBUG] [Thread-81512] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:12:06.311 [DEBUG] [Thread-81512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:12:06.311 [DEBUG] [Thread-81512] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:12:06.311 [DEBUG] [Thread-81512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:12:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:12:06.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:12:06.312 [DEBUG] [Thread-81512] [transport.py] [_log()] userauth is OK
2025-12-13T03:12:06.312 [DEBUG] [Thread-81512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:12:06.312 [DEBUG] [Thread-81512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:12:06.312 [DEBUG] [Thread-81512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:12:06.312 [DEBUG] [Thread-81512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:12:06.331 [INFO] [Thread-81512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:12:06.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:12:06.978 [DEBUG] [Thread-81512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:12:06.978 [DEBUG] [Thread-81512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:12:06.979 [DEBUG] [Thread-81512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:12:07.020 [DEBUG] [Thread-81512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:12:07.020 [DEBUG] [Thread-81512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:12:07.023 [DEBUG] [Thread-81512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:12:07.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:12:07.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:12:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:12:07.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:12:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:12:07.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:12:07.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:12:07.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:12:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:12:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.049746 -999.00   +6.70  25.01     92   +5.50 1 3 1 3 1     0    0 1.18 -8.30 ----- 31.7 25.0 294.6 37.8 8.2 -4.9 8.0 -4.7 7.6 -4.7 7.9 -4.1
2025-12-13T03:12:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:12:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:12:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.049746
2025-12-13T03:12:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:12:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:12:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:12:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:12:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:12:07.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:11:28', tmtdew=1.84, humidity=88.29, cloud=0.0, wind=26.22, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:11:38.054', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:12:07.049 [DEBUG] [Thread-81512] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:12:07.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:12:07.146 [DEBUG] [Thread-81515] [transport.py] [_log()] starting thread (client mode): 0xfabc5840
2025-12-13T03:12:07.147 [DEBUG] [Thread-81515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:12:07.164 [DEBUG] [Thread-81515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:12:07.165 [INFO] [Thread-81515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:12:07.172 [DEBUG] [Thread-81515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:12:07.172 [DEBUG] [Thread-81515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:12:07.172 [DEBUG] [Thread-81515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] client lang: <none>
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] server lang: <none>
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] kex follows: False
2025-12-13T03:12:07.173 [DEBUG] [Thread-81515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:12:07.174 [DEBUG] [Thread-81515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:12:07.174 [DEBUG] [Thread-81515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:12:07.174 [DEBUG] [Thread-81515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:12:07.174 [DEBUG] [Thread-81515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:12:07.174 [DEBUG] [Thread-81515] [transport.py] [_log()] Compression: none
2025-12-13T03:12:07.174 [DEBUG] [Thread-81515] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:12:07.230 [DEBUG] [Thread-81515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:12:07.230 [DEBUG] [Thread-81515] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:12:07.231 [DEBUG] [Thread-81515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:12:07.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:12:07.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:12:07.285 [DEBUG] [Thread-81515] [transport.py] [_log()] userauth is OK
2025-12-13T03:12:07.286 [DEBUG] [Thread-81515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:12:07.286 [DEBUG] [Thread-81515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:12:07.286 [DEBUG] [Thread-81515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:12:07.286 [DEBUG] [Thread-81515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:12:07.306 [INFO] [Thread-81515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:12:07.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:12:07.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:12:08.140 [DEBUG] [Thread-81515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:12:08.140 [DEBUG] [Thread-81515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:12:08.188 [DEBUG] [Thread-81515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:12:08.188 [DEBUG] [Thread-81515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:12:08.197 [DEBUG] [Thread-81515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:12:08.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:12:08.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:12:08.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:12:08.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:12:08.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:12:08.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:12:08.231 [DEBUG] [Thread-81515] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:12:12.175 [DEBUG] [Thread-81517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:27.220 [DEBUG] [Thread-81518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:35.924 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:35.926 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:37.853 [DEBUG] [Thread-81519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:38.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:12:38.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:12:38.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:12:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 12, 32), 1.78, 88.36, 0.0, 22.92, 7.0, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:12:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:12:32
2025-12-13T03:12:39.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:12:39.220 [DEBUG] [Thread-81520] [transport.py] [_log()] starting thread (client mode): 0xf57408b0
2025-12-13T03:12:39.220 [DEBUG] [Thread-81520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:12:39.241 [DEBUG] [Thread-81520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:12:39.241 [INFO] [Thread-81520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:12:39.243 [DEBUG] [Thread-81520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:12:39.243 [DEBUG] [Thread-81520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:12:39.243 [DEBUG] [Thread-81520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] client lang: <none>
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] server lang: <none>
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] kex follows: False
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] Compression: none
2025-12-13T03:12:39.244 [DEBUG] [Thread-81520] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:12:39.258 [DEBUG] [Thread-81520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:12:39.259 [DEBUG] [Thread-81520] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:12:39.259 [DEBUG] [Thread-81520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:12:39.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:12:39.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:12:39.261 [DEBUG] [Thread-81520] [transport.py] [_log()] userauth is OK
2025-12-13T03:12:39.261 [DEBUG] [Thread-81520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:12:39.262 [DEBUG] [Thread-81520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:12:39.262 [DEBUG] [Thread-81520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:12:39.262 [DEBUG] [Thread-81520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:12:39.301 [INFO] [Thread-81520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:12:39.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:12:39.922 [DEBUG] [Thread-81520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:12:39.922 [DEBUG] [Thread-81520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:12:39.922 [DEBUG] [Thread-81520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:12:39.964 [DEBUG] [Thread-81520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:12:39.964 [DEBUG] [Thread-81520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:12:39.966 [DEBUG] [Thread-81520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:12:39.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:12:39.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:12:39.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:12:39.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:12:39.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:12:39.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:12:39.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:12:39.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:12:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:12:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.050094 -999.00   +6.60  27.97     92   +5.40 1 3 1 3 1     0    0 1.13 -9.48 ....W 27.8 28.0 293.2 37.0 8.2 -5.8 8.0 -4.9 7.6 -4.6 8.0 -5.1
2025-12-13T03:12:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:12:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:12:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.050094
2025-12-13T03:12:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:12:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:12:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:12:39.987 [DEBUG] [Thread-81520] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:12:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:12:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:12:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:12:32', tmtdew=1.78, humidity=88.36, cloud=0.0, wind=22.92, temperature=7.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:12:08.122', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:12:40.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:12:40.085 [DEBUG] [Thread-81523] [transport.py] [_log()] starting thread (client mode): 0xf813fbe0
2025-12-13T03:12:40.085 [DEBUG] [Thread-81523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:12:40.100 [DEBUG] [Thread-81523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:12:40.100 [INFO] [Thread-81523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] client lang: <none>
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] server lang: <none>
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] kex follows: False
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] Compression: none
2025-12-13T03:12:40.108 [DEBUG] [Thread-81523] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:12:40.165 [DEBUG] [Thread-81523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:12:40.165 [DEBUG] [Thread-81523] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:12:40.165 [DEBUG] [Thread-81523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:12:40.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:12:40.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:12:40.221 [DEBUG] [Thread-81523] [transport.py] [_log()] userauth is OK
2025-12-13T03:12:40.221 [DEBUG] [Thread-81523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:12:40.221 [DEBUG] [Thread-81523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:12:40.221 [DEBUG] [Thread-81523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:12:40.221 [DEBUG] [Thread-81523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:12:40.236 [INFO] [Thread-81523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:12:40.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:12:40.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:12:41.088 [DEBUG] [Thread-81523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:12:41.088 [DEBUG] [Thread-81523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:12:41.137 [DEBUG] [Thread-81523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:12:41.137 [DEBUG] [Thread-81523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:12:41.145 [DEBUG] [Thread-81523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:12:41.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:12:41.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:12:41.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:12:41.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:12:41.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:12:41.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:12:41.177 [DEBUG] [Thread-81523] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:12:42.247 [DEBUG] [Thread-81525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:12:57.291 [DEBUG] [Thread-81526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:13:11.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:13:11.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:13:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 13, 4), 1.78, 88.36, 0.0, 28.32, 7.01, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:13:11.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:13:04
2025-12-13T03:13:12.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:13:12.151 [DEBUG] [Thread-81527] [transport.py] [_log()] starting thread (client mode): 0xf813cd30
2025-12-13T03:13:12.151 [DEBUG] [Thread-81527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:13:12.170 [DEBUG] [Thread-81527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:13:12.170 [INFO] [Thread-81527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] client lang: <none>
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] server lang: <none>
2025-12-13T03:13:12.173 [DEBUG] [Thread-81527] [transport.py] [_log()] kex follows: False
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] Compression: none
2025-12-13T03:13:12.174 [DEBUG] [Thread-81527] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:13:12.191 [DEBUG] [Thread-81527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:13:12.192 [DEBUG] [Thread-81527] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:13:12.193 [DEBUG] [Thread-81527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:13:12.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:13:12.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:13:12.195 [DEBUG] [Thread-81527] [transport.py] [_log()] userauth is OK
2025-12-13T03:13:12.195 [DEBUG] [Thread-81527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:13:12.195 [DEBUG] [Thread-81527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:13:12.195 [DEBUG] [Thread-81527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:13:12.195 [DEBUG] [Thread-81527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:13:12.213 [INFO] [Thread-81527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:13:12.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:13:12.320 [DEBUG] [Thread-81529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:12.843 [DEBUG] [Thread-81527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:13:12.843 [DEBUG] [Thread-81527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:13:12.843 [DEBUG] [Thread-81527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:13:12.884 [DEBUG] [Thread-81527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:13:12.884 [DEBUG] [Thread-81527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:13:12.887 [DEBUG] [Thread-81527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:13:12.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:13:12.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:13:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:13:12.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:13:12.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:13:12.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:13:12.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:13:12.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:13:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:13:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.050441 -999.00   +6.70  23.26     92   +5.50 1 3 1 3 1     0    0 1.11 -9.71 Z.... 25.4 23.3 296.4 35.5 8.2 -3.4 7.9 -3.1 7.6 -2.4 8.0 -3.5
2025-12-13T03:13:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:13:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:13:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.050441
2025-12-13T03:13:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:13:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:13:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:13:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:13:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:13:12.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:13:04', tmtdew=1.78, humidity=88.36, cloud=0.0, wind=28.32, temperature=7.01, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:12:38.102', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:13:12.911 [DEBUG] [Thread-81527] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:13:12.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:13:13.006 [DEBUG] [Thread-81531] [transport.py] [_log()] starting thread (client mode): 0xf57036a0
2025-12-13T03:13:13.006 [DEBUG] [Thread-81531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:13:13.020 [DEBUG] [Thread-81531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:13:13.020 [INFO] [Thread-81531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:13:13.028 [DEBUG] [Thread-81531] [transport.py] [_log()] client lang: <none>
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] server lang: <none>
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] kex follows: False
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] Compression: none
2025-12-13T03:13:13.029 [DEBUG] [Thread-81531] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:13:13.085 [DEBUG] [Thread-81531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:13:13.085 [DEBUG] [Thread-81531] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:13:13.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:13:13.086 [DEBUG] [Thread-81531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:13:13.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:13:13.141 [DEBUG] [Thread-81531] [transport.py] [_log()] userauth is OK
2025-12-13T03:13:13.142 [DEBUG] [Thread-81531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:13:13.142 [DEBUG] [Thread-81531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:13:13.142 [DEBUG] [Thread-81531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:13:13.142 [DEBUG] [Thread-81531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:13:13.160 [INFO] [Thread-81531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:13:13.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:13:13.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:13:13.970 [DEBUG] [Thread-81531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:13:13.970 [DEBUG] [Thread-81531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:13:14.018 [DEBUG] [Thread-81531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:13:14.018 [DEBUG] [Thread-81531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:13:14.027 [DEBUG] [Thread-81531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:13:14.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:13:14.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:13:14.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:13:14.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:13:14.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:13:14.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:13:14.061 [DEBUG] [Thread-81531] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:13:27.352 [DEBUG] [Thread-81533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:36.130 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:36.132 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:37.927 [DEBUG] [Thread-81534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:42.403 [DEBUG] [Thread-81535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:13:44.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:13:44.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:13:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:13:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 13, 38), 1.79, 88.29, 0.0, 30.68, 6.91, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:13:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:13:38
2025-12-13T03:13:44.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:13:45.021 [DEBUG] [Thread-81536] [transport.py] [_log()] starting thread (client mode): 0xf57aaf50
2025-12-13T03:13:45.021 [DEBUG] [Thread-81536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:13:45.039 [DEBUG] [Thread-81536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:13:45.039 [INFO] [Thread-81536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:13:45.041 [DEBUG] [Thread-81536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] client lang: <none>
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] server lang: <none>
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] kex follows: False
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] Compression: none
2025-12-13T03:13:45.042 [DEBUG] [Thread-81536] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:13:45.049 [DEBUG] [Thread-81536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:13:45.049 [DEBUG] [Thread-81536] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:13:45.050 [DEBUG] [Thread-81536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:13:45.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:13:45.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:13:45.051 [DEBUG] [Thread-81536] [transport.py] [_log()] userauth is OK
2025-12-13T03:13:45.051 [DEBUG] [Thread-81536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:13:45.051 [DEBUG] [Thread-81536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:13:45.051 [DEBUG] [Thread-81536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:13:45.051 [DEBUG] [Thread-81536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:13:45.062 [INFO] [Thread-81536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:13:45.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:13:45.696 [DEBUG] [Thread-81536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:13:45.696 [DEBUG] [Thread-81536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:13:45.697 [DEBUG] [Thread-81536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:13:45.737 [DEBUG] [Thread-81536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:13:45.737 [DEBUG] [Thread-81536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:13:45.740 [DEBUG] [Thread-81536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:13:45.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:13:45.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:13:45.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:13:45.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:13:45.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:13:45.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:13:45.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:13:45.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:13:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:13:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.050788 -999.00   +6.70  30.57     92   +5.50 1 3 2 3 1     0    0 1.07 -11.33 Z.... 25.3 30.6 293.8 35.0 8.2 -2.5 8.0 -2.3 7.6 -2.1 8.0 -2.1
2025-12-13T03:13:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:13:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:13:45.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.050788
2025-12-13T03:13:45.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:13:45.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:13:45.770 [DEBUG] [Thread-81536] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:13:45.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:13:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:13:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:13:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:13:38', tmtdew=1.79, humidity=88.29, cloud=0.0, wind=30.68, temperature=6.91, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:13:08.083', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:13:45.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:13:45.866 [DEBUG] [Thread-81539] [transport.py] [_log()] starting thread (client mode): 0xf81e73a0
2025-12-13T03:13:45.867 [DEBUG] [Thread-81539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:13:45.881 [DEBUG] [Thread-81539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:13:45.881 [INFO] [Thread-81539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:13:45.889 [DEBUG] [Thread-81539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:13:45.889 [DEBUG] [Thread-81539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:13:45.889 [DEBUG] [Thread-81539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:13:45.889 [DEBUG] [Thread-81539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:45.889 [DEBUG] [Thread-81539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:13:45.889 [DEBUG] [Thread-81539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] client lang: <none>
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] server lang: <none>
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] kex follows: False
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] Compression: none
2025-12-13T03:13:45.890 [DEBUG] [Thread-81539] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:13:45.945 [DEBUG] [Thread-81539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:13:45.945 [DEBUG] [Thread-81539] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:13:45.946 [DEBUG] [Thread-81539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:13:45.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:13:45.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:13:46.001 [DEBUG] [Thread-81539] [transport.py] [_log()] userauth is OK
2025-12-13T03:13:46.001 [DEBUG] [Thread-81539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:13:46.002 [DEBUG] [Thread-81539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:13:46.002 [DEBUG] [Thread-81539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:13:46.002 [DEBUG] [Thread-81539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:13:46.019 [INFO] [Thread-81539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:13:46.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:13:46.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:13:46.824 [DEBUG] [Thread-81539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:13:46.824 [DEBUG] [Thread-81539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:13:46.873 [DEBUG] [Thread-81539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:13:46.873 [DEBUG] [Thread-81539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:13:46.882 [DEBUG] [Thread-81539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:13:46.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:13:46.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:13:46.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:13:46.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:13:46.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:13:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:13:46.917 [DEBUG] [Thread-81539] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:13:57.430 [DEBUG] [Thread-81541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:12.462 [DEBUG] [Thread-81542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:16.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:14:16.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:14:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:14:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 14, 10), 1.77, 88.39, 0.0, 30.95, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:14:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:14:10
2025-12-13T03:14:17.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:14:17.897 [DEBUG] [Thread-81543] [transport.py] [_log()] starting thread (client mode): 0xf5772ef0
2025-12-13T03:14:17.897 [DEBUG] [Thread-81543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:14:17.918 [DEBUG] [Thread-81543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:14:17.918 [INFO] [Thread-81543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:14:17.921 [DEBUG] [Thread-81543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] client lang: <none>
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] server lang: <none>
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] kex follows: False
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] Compression: none
2025-12-13T03:14:17.922 [DEBUG] [Thread-81543] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:14:17.942 [DEBUG] [Thread-81543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:14:17.943 [DEBUG] [Thread-81543] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:14:17.944 [DEBUG] [Thread-81543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:14:17.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:14:17.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:14:17.946 [DEBUG] [Thread-81543] [transport.py] [_log()] userauth is OK
2025-12-13T03:14:17.946 [DEBUG] [Thread-81543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:14:17.946 [DEBUG] [Thread-81543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:14:17.946 [DEBUG] [Thread-81543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:14:17.947 [DEBUG] [Thread-81543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:14:17.983 [INFO] [Thread-81543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:14:17.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:14:18.605 [DEBUG] [Thread-81543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:14:18.605 [DEBUG] [Thread-81543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:14:18.606 [DEBUG] [Thread-81543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:14:18.646 [DEBUG] [Thread-81543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:14:18.646 [DEBUG] [Thread-81543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:14:18.649 [DEBUG] [Thread-81543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:14:18.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:14:18.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:14:18.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:14:18.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:14:18.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:14:18.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:14:18.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:14:18.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:14:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:14:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.051136 -999.00   +6.70  24.76     92   +5.50 1 3 1 3 1     0    0 1.03 -12.52 ----- 28.1 24.8 299.6 32.6 8.2 -2.2 8.0 -2.2 7.6 -2.1 8.0 -1.8
2025-12-13T03:14:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:14:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:14:18.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.051136
2025-12-13T03:14:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:14:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:14:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:14:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:14:18.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:14:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:14:10', tmtdew=1.77, humidity=88.39, cloud=0.0, wind=30.95, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:13:38.150', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:14:18.678 [DEBUG] [Thread-81543] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:14:18.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:14:18.772 [DEBUG] [Thread-81546] [transport.py] [_log()] starting thread (client mode): 0xf57ab1c0
2025-12-13T03:14:18.772 [DEBUG] [Thread-81546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:14:18.787 [DEBUG] [Thread-81546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:14:18.787 [INFO] [Thread-81546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:14:18.795 [DEBUG] [Thread-81546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] client lang: <none>
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] server lang: <none>
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] kex follows: False
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] Compression: none
2025-12-13T03:14:18.796 [DEBUG] [Thread-81546] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:14:18.853 [DEBUG] [Thread-81546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:14:18.854 [DEBUG] [Thread-81546] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:14:18.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:14:18.854 [DEBUG] [Thread-81546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:14:18.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:14:18.909 [DEBUG] [Thread-81546] [transport.py] [_log()] userauth is OK
2025-12-13T03:14:18.909 [DEBUG] [Thread-81546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:14:18.910 [DEBUG] [Thread-81546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:14:18.910 [DEBUG] [Thread-81546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:14:18.910 [DEBUG] [Thread-81546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:14:18.928 [INFO] [Thread-81546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:14:18.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:14:18.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:14:19.753 [DEBUG] [Thread-81546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:14:19.753 [DEBUG] [Thread-81546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:14:19.801 [DEBUG] [Thread-81546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:14:19.801 [DEBUG] [Thread-81546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:14:19.810 [DEBUG] [Thread-81546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:14:19.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:14:19.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:14:19.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:14:19.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:14:19.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:14:19.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:14:19.849 [DEBUG] [Thread-81546] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:14:27.489 [DEBUG] [Thread-81548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:36.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:36.336 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:37.996 [DEBUG] [Thread-81549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:42.541 [DEBUG] [Thread-81550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:14:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:14:49.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:14:49.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:14:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 14, 42), 1.71, 88.47, 0.0, 34.9, 6.9, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:14:50.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:14:42
2025-12-13T03:14:50.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:14:50.839 [DEBUG] [Thread-81551] [transport.py] [_log()] starting thread (client mode): 0xf57009a0
2025-12-13T03:14:50.839 [DEBUG] [Thread-81551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:14:50.859 [DEBUG] [Thread-81551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:14:50.859 [INFO] [Thread-81551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:14:50.860 [DEBUG] [Thread-81551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:14:50.860 [DEBUG] [Thread-81551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] client lang: <none>
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] server lang: <none>
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] kex follows: False
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] Compression: none
2025-12-13T03:14:50.861 [DEBUG] [Thread-81551] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:14:50.871 [DEBUG] [Thread-81551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:14:50.872 [DEBUG] [Thread-81551] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:14:50.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:14:50.872 [DEBUG] [Thread-81551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:14:50.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:14:50.874 [DEBUG] [Thread-81551] [transport.py] [_log()] userauth is OK
2025-12-13T03:14:50.874 [DEBUG] [Thread-81551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:14:50.874 [DEBUG] [Thread-81551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:14:50.874 [DEBUG] [Thread-81551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:14:50.874 [DEBUG] [Thread-81551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:14:50.892 [INFO] [Thread-81551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:14:50.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:14:51.552 [DEBUG] [Thread-81551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:14:51.553 [DEBUG] [Thread-81551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:14:51.553 [DEBUG] [Thread-81551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:14:51.594 [DEBUG] [Thread-81551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:14:51.594 [DEBUG] [Thread-81551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:14:51.597 [DEBUG] [Thread-81551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:14:51.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:14:51.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:14:51.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:14:51.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:14:51.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:14:51.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:14:51.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:14:51.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:14:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:14:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.051483 -999.00   +6.70  32.08     92   +5.50 1 3 2 3 1     0    0 0.97 -13.73 ----- 28.4 32.1 294.8 33.9 8.2 -2.6 8.0 -2.4 7.6 -2.3 8.0 -1.7
2025-12-13T03:14:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:14:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:14:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.051483
2025-12-13T03:14:51.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:14:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:14:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:14:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:14:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:14:51.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:14:42', tmtdew=1.71, humidity=88.47, cloud=0.0, wind=34.9, temperature=6.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:14:08.131', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:04:00')
2025-12-13T03:14:51.621 [DEBUG] [Thread-81551] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:14:51.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:14:57.571 [DEBUG] [Thread-81554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:12.615 [DEBUG] [Thread-81555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:27.644 [DEBUG] [Thread-81556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:36.541 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:36.542 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:38.068 [DEBUG] [Thread-81557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:42.676 [DEBUG] [Thread-81558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:15:57.701 [DEBUG] [Thread-81559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:12.729 [DEBUG] [Thread-81560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:27.756 [DEBUG] [Thread-81561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:36.745 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:36.746 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:38.138 [DEBUG] [Thread-81562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:42.784 [DEBUG] [Thread-81563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:16:57.813 [DEBUG] [Thread-81564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:07.178 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-13T03:17:12.845 [DEBUG] [Thread-81565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:27.875 [DEBUG] [Thread-81566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:36.949 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:36.950 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:37.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:17:37.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:17:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:17:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 17, 22), 1.64, 89.42, 0.0, 28.55, 6.78, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:17:37.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:17:22
2025-12-13T03:17:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:17:38.190 [DEBUG] [Thread-81567] [transport.py] [_log()] starting thread (client mode): 0xf5772890
2025-12-13T03:17:38.190 [DEBUG] [Thread-81567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:17:38.204 [DEBUG] [Thread-81568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:38.211 [DEBUG] [Thread-81567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:17:38.211 [INFO] [Thread-81567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] client lang: <none>
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] server lang: <none>
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] kex follows: False
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] Compression: none
2025-12-13T03:17:38.214 [DEBUG] [Thread-81567] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:17:38.231 [DEBUG] [Thread-81567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:17:38.231 [DEBUG] [Thread-81567] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:17:38.231 [DEBUG] [Thread-81567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:17:38.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:17:38.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:17:38.233 [DEBUG] [Thread-81567] [transport.py] [_log()] userauth is OK
2025-12-13T03:17:38.233 [DEBUG] [Thread-81567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:17:38.233 [DEBUG] [Thread-81567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:17:38.233 [DEBUG] [Thread-81567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:17:38.233 [DEBUG] [Thread-81567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:17:38.250 [INFO] [Thread-81567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:17:38.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:17:38.875 [DEBUG] [Thread-81567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:17:38.875 [DEBUG] [Thread-81567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:17:38.875 [DEBUG] [Thread-81567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:17:38.916 [DEBUG] [Thread-81567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:17:38.916 [DEBUG] [Thread-81567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:17:38.919 [DEBUG] [Thread-81567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:17:38.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:17:38.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:17:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:17:38.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:17:38.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:17:38.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:17:38.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:17:38.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:17:38.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:17:38.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.053566 -999.00   +6.50  30.92     91   +5.30 1 3 2 3 1     0    0 0.86 -17.31 ..... 31.3 30.9 295.2 40.2 8.1 -5.6 7.9 -8.9 7.6 -6.4 8.0 -4.3
2025-12-13T03:17:38.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:17:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:17:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.053566
2025-12-13T03:17:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:17:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:17:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:17:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:17:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:17:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:17:22', tmtdew=1.64, humidity=89.42, cloud=0.0, wind=28.55, temperature=6.78, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:17:08.102', atlas_cloud=3, atlas_rain=1, zp_data=[nan, nan, 1.7822500000000003, nan, 2.9815000000000005, nan, nan, nan, nan, nan, nan, nan, nan, 2.5067500000000003, nan, nan, nan, nan, nan, nan, nan, 2.760749999999999, nan, nan, nan, 1.689, nan, nan, nan, nan, 2.4720000000000013, nan, nan], zp_timestamp='2025-12-13T01:12:00')
2025-12-13T03:17:38.945 [DEBUG] [Thread-81567] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:17:39.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:17:39.039 [DEBUG] [Thread-81571] [transport.py] [_log()] starting thread (client mode): 0xf81e66e0
2025-12-13T03:17:39.039 [DEBUG] [Thread-81571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:17:39.055 [DEBUG] [Thread-81571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:17:39.055 [INFO] [Thread-81571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:17:39.062 [DEBUG] [Thread-81571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] client lang: <none>
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] server lang: <none>
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] kex follows: False
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] Compression: none
2025-12-13T03:17:39.063 [DEBUG] [Thread-81571] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:17:39.126 [DEBUG] [Thread-81571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:17:39.126 [DEBUG] [Thread-81571] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:17:39.126 [DEBUG] [Thread-81571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:17:39.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:17:39.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:17:39.181 [DEBUG] [Thread-81571] [transport.py] [_log()] userauth is OK
2025-12-13T03:17:39.181 [DEBUG] [Thread-81571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:17:39.182 [DEBUG] [Thread-81571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:17:39.182 [DEBUG] [Thread-81571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:17:39.182 [DEBUG] [Thread-81571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:17:39.200 [INFO] [Thread-81571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:17:39.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:17:39.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:17:40.018 [DEBUG] [Thread-81571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:17:40.018 [DEBUG] [Thread-81571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:17:40.066 [DEBUG] [Thread-81571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:17:40.066 [DEBUG] [Thread-81571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:17:40.075 [DEBUG] [Thread-81571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:17:40.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:17:40.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:17:40.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:17:40.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:17:40.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:17:40.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:17:40.110 [DEBUG] [Thread-81571] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:17:42.906 [DEBUG] [Thread-81573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:17:57.982 [DEBUG] [Thread-81574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:18:10.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:18:10.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:18:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 17, 54), 1.64, 89.42, 0.0, 29.75, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:18:10.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:17:54
2025-12-13T03:18:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:18:11.114 [DEBUG] [Thread-81575] [transport.py] [_log()] starting thread (client mode): 0xf813ceb0
2025-12-13T03:18:11.114 [DEBUG] [Thread-81575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:18:11.134 [DEBUG] [Thread-81575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:18:11.134 [INFO] [Thread-81575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] client lang: <none>
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] server lang: <none>
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] kex follows: False
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] Compression: none
2025-12-13T03:18:11.138 [DEBUG] [Thread-81575] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:18:11.156 [DEBUG] [Thread-81575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:18:11.157 [DEBUG] [Thread-81575] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:18:11.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:18:11.158 [DEBUG] [Thread-81575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:18:11.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:18:11.160 [DEBUG] [Thread-81575] [transport.py] [_log()] userauth is OK
2025-12-13T03:18:11.160 [DEBUG] [Thread-81575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:18:11.161 [DEBUG] [Thread-81575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:18:11.161 [DEBUG] [Thread-81575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:18:11.161 [DEBUG] [Thread-81575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:18:11.178 [INFO] [Thread-81575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:18:11.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:18:11.813 [DEBUG] [Thread-81575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:18:11.813 [DEBUG] [Thread-81575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:18:11.813 [DEBUG] [Thread-81575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:18:11.854 [DEBUG] [Thread-81575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:18:11.854 [DEBUG] [Thread-81575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:18:11.857 [DEBUG] [Thread-81575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:18:11.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:18:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:18:11.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:18:11.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:18:11.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:18:11.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:18:11.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:18:11.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:18:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:18:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.053913 -999.00   +6.50  28.33     92   +5.30 1 3 1 3 1     0    0 0.78 -19.81 Z.ES. 35.0 28.3 301.8 36.7 -999.0 -999.0 8.0 -9.3 7.5 -7.4 7.9 -4.0
2025-12-13T03:18:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:18:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:18:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.053913
2025-12-13T03:18:11.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:18:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:18:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:18:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:18:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:18:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:17:54', tmtdew=1.64, humidity=89.42, cloud=0.0, wind=29.75, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:17:38.083', atlas_cloud=3, atlas_rain=1, zp_data=[0.48574999999999946, nan, nan, nan, 1.7874999999999996, 1.002250000000001, 0.45650000000000013, 0.6972500000000004, 1.3184999999999993, nan, nan, nan, nan, nan, 1.5469999999999997, 1.6555, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:17:00')
2025-12-13T03:18:11.882 [DEBUG] [Thread-81575] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:18:11.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:18:11.977 [DEBUG] [Thread-81578] [transport.py] [_log()] starting thread (client mode): 0xf81e6ce0
2025-12-13T03:18:11.977 [DEBUG] [Thread-81578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:18:11.992 [DEBUG] [Thread-81578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:18:11.992 [INFO] [Thread-81578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:18:11.999 [DEBUG] [Thread-81578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] client lang: <none>
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] server lang: <none>
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] kex follows: False
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] Compression: none
2025-12-13T03:18:12.000 [DEBUG] [Thread-81578] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:18:12.057 [DEBUG] [Thread-81578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:18:12.057 [DEBUG] [Thread-81578] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:18:12.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:18:12.058 [DEBUG] [Thread-81578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:18:12.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:18:12.113 [DEBUG] [Thread-81578] [transport.py] [_log()] userauth is OK
2025-12-13T03:18:12.113 [DEBUG] [Thread-81578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:18:12.113 [DEBUG] [Thread-81578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:18:12.114 [DEBUG] [Thread-81578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:18:12.114 [DEBUG] [Thread-81578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:18:12.133 [INFO] [Thread-81578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:18:12.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:18:12.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:18:12.953 [DEBUG] [Thread-81578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:18:12.953 [DEBUG] [Thread-81578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:18:13.002 [DEBUG] [Thread-81578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:18:13.002 [DEBUG] [Thread-81578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:18:13.009 [DEBUG] [Thread-81580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:13.011 [DEBUG] [Thread-81578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:18:13.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:18:13.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:18: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
2025-12-13T03:18:13.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:18:13.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:18:13.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:18:13.044 [DEBUG] [Thread-81578] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:18:28.060 [DEBUG] [Thread-81581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:37.155 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:37.156 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:38.277 [DEBUG] [Thread-81582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:43.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:18:43.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:18:43.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:18:43.087 [DEBUG] [Thread-81583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:18:43.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 18, 26), 1.64, 89.39, 0.0, 31.3, 6.76, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:18:43.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:18:26
2025-12-13T03:18:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:18:44.019 [DEBUG] [Thread-81584] [transport.py] [_log()] starting thread (client mode): 0xf57ab1c0
2025-12-13T03:18:44.019 [DEBUG] [Thread-81584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:18:44.040 [DEBUG] [Thread-81584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:18:44.040 [INFO] [Thread-81584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:18:44.041 [DEBUG] [Thread-81584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] client lang: <none>
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] server lang: <none>
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] kex follows: False
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] Compression: none
2025-12-13T03:18:44.042 [DEBUG] [Thread-81584] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:18:44.054 [DEBUG] [Thread-81584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:18:44.054 [DEBUG] [Thread-81584] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:18:44.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:18:44.055 [DEBUG] [Thread-81584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:18:44.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:18:44.057 [DEBUG] [Thread-81584] [transport.py] [_log()] userauth is OK
2025-12-13T03:18:44.057 [DEBUG] [Thread-81584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:18:44.057 [DEBUG] [Thread-81584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:18:44.057 [DEBUG] [Thread-81584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:18:44.057 [DEBUG] [Thread-81584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:18:44.093 [INFO] [Thread-81584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:18:44.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:18:44.678 [DEBUG] [Thread-81584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:18:44.678 [DEBUG] [Thread-81584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:18:44.679 [DEBUG] [Thread-81584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:18:44.719 [DEBUG] [Thread-81584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:18:44.719 [DEBUG] [Thread-81584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:18:44.722 [DEBUG] [Thread-81584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:18:44.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:18:44.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:18:44.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:18:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:18:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:18:44.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:18:44.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:18:44.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:18:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:18:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.054260 -999.00   +6.50  39.54     92   +5.30 1 3 2 3 1     0    0 0.80 -18.77 ..ES. 31.6 39.5 300.4 43.3 8.1 -7.1 7.8 -10.2 7.4 -8.7 7.9 -4.7
2025-12-13T03:18:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:18:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:18:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.054260
2025-12-13T03:18:44.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:18:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:18:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:18:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:18:44.745 [DEBUG] [Thread-81584] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:18:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:18:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:18:26', tmtdew=1.64, humidity=89.39, cloud=0.0, wind=31.3, temperature=6.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:18:08.064', atlas_cloud=3, atlas_rain=1, zp_data=[0.48574999999999946, nan, nan, nan, 1.7874999999999996, 1.002250000000001, 0.45650000000000013, 0.6972500000000004, 1.3184999999999993, nan, nan, nan, nan, nan, 1.5469999999999997, 1.6555, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:17:00')
2025-12-13T03:18:44.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:18:44.839 [DEBUG] [Thread-81587] [transport.py] [_log()] starting thread (client mode): 0xf813db40
2025-12-13T03:18:44.839 [DEBUG] [Thread-81587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:18:44.854 [DEBUG] [Thread-81587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:18:44.854 [INFO] [Thread-81587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:18:44.862 [DEBUG] [Thread-81587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] client lang: <none>
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] server lang: <none>
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] kex follows: False
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] Compression: none
2025-12-13T03:18:44.863 [DEBUG] [Thread-81587] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:18:44.921 [DEBUG] [Thread-81587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:18:44.921 [DEBUG] [Thread-81587] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:18:44.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:18:44.922 [DEBUG] [Thread-81587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:18:44.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:18:44.977 [DEBUG] [Thread-81587] [transport.py] [_log()] userauth is OK
2025-12-13T03:18:44.977 [DEBUG] [Thread-81587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:18:44.977 [DEBUG] [Thread-81587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:18:44.978 [DEBUG] [Thread-81587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:18:44.978 [DEBUG] [Thread-81587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:18:44.996 [INFO] [Thread-81587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:18:44.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:18:44.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:18:45.822 [DEBUG] [Thread-81587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:18:45.822 [DEBUG] [Thread-81587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:18:45.870 [DEBUG] [Thread-81587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:18:45.870 [DEBUG] [Thread-81587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:18:45.879 [DEBUG] [Thread-81587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:18:45.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:18:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:18:45.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:18:45.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:18:45.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:18:45.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:18:45.914 [DEBUG] [Thread-81587] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:18:58.118 [DEBUG] [Thread-81589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:13.155 [DEBUG] [Thread-81590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:19:15.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:19:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:19:16.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 18, 58), 1.63, 89.44, 0.0, 28.99, 6.81, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:19:16.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:18:58
2025-12-13T03:19:16.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:19:16.903 [DEBUG] [Thread-81591] [transport.py] [_log()] starting thread (client mode): 0xf813f250
2025-12-13T03:19:16.903 [DEBUG] [Thread-81591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:19:16.917 [DEBUG] [Thread-81591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:19:16.917 [INFO] [Thread-81591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] client lang: <none>
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] server lang: <none>
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] kex follows: False
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] Compression: none
2025-12-13T03:19:16.920 [DEBUG] [Thread-81591] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:19:16.932 [DEBUG] [Thread-81591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:19:16.932 [DEBUG] [Thread-81591] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:19:16.932 [DEBUG] [Thread-81591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:19:16.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:19:16.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:19:16.934 [DEBUG] [Thread-81591] [transport.py] [_log()] userauth is OK
2025-12-13T03:19:16.934 [DEBUG] [Thread-81591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:19:16.934 [DEBUG] [Thread-81591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:19:16.934 [DEBUG] [Thread-81591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:19:16.934 [DEBUG] [Thread-81591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:19:16.958 [INFO] [Thread-81591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:19:16.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:19:17.512 [DEBUG] [Thread-81591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:19:17.512 [DEBUG] [Thread-81591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:19:17.513 [DEBUG] [Thread-81591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:19:17.554 [DEBUG] [Thread-81591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:19:17.554 [DEBUG] [Thread-81591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:19:17.557 [DEBUG] [Thread-81591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:19:17.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:19:17.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:19:17.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:19:17.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:19:17.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:19:17.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:19:17.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:19:17.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:19:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:19:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.054955 -999.00   +6.40  32.59     92   +5.20 1 2 2 3 1     0    0 0.75 -19.75 ..ES. 32.1 32.6 299.2 41.6 8.0 -11.3 7.7 -14.6 7.4 -10.7 7.8 -9.6
2025-12-13T03:19:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:19:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:19:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.054955
2025-12-13T03:19:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:19:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:19:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:19:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:19:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:19:17.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:18:58', tmtdew=1.63, humidity=89.44, cloud=0.0, wind=28.99, temperature=6.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:19:08.112', atlas_cloud=2, atlas_rain=1, zp_data=[0.48574999999999946, nan, nan, nan, 1.7874999999999996, 1.002250000000001, 0.45650000000000013, 0.6972500000000004, 1.3184999999999993, nan, nan, nan, nan, nan, 1.5469999999999997, 1.6555, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:17:00')
2025-12-13T03:19:17.588 [DEBUG] [Thread-81591] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:19:17.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:19:17.679 [DEBUG] [Thread-81594] [transport.py] [_log()] starting thread (client mode): 0xf572e860
2025-12-13T03:19:17.679 [DEBUG] [Thread-81594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:19:17.694 [DEBUG] [Thread-81594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:19:17.694 [INFO] [Thread-81594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:19:17.701 [DEBUG] [Thread-81594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:19:17.701 [DEBUG] [Thread-81594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] client lang: <none>
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] server lang: <none>
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] kex follows: False
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] Compression: none
2025-12-13T03:19:17.702 [DEBUG] [Thread-81594] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:19:17.760 [DEBUG] [Thread-81594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:19:17.760 [DEBUG] [Thread-81594] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:19:17.761 [DEBUG] [Thread-81594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:19:17.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:19:17.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:19:17.817 [DEBUG] [Thread-81594] [transport.py] [_log()] userauth is OK
2025-12-13T03:19:17.817 [DEBUG] [Thread-81594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:19:17.817 [DEBUG] [Thread-81594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:19:17.818 [DEBUG] [Thread-81594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:19:17.818 [DEBUG] [Thread-81594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:19:17.837 [INFO] [Thread-81594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:19:17.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:19:17.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:19:18.639 [DEBUG] [Thread-81594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:19:18.639 [DEBUG] [Thread-81594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:19:18.688 [DEBUG] [Thread-81594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:19:18.688 [DEBUG] [Thread-81594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:19:18.697 [DEBUG] [Thread-81594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:19:18.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:19:18.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:19:18.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
2025-12-13T03:19:18.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:19:18.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:19:18.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:19:18.732 [DEBUG] [Thread-81594] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:19:28.185 [DEBUG] [Thread-81596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:37.365 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:37.366 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:38.355 [DEBUG] [Thread-81597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:43.230 [DEBUG] [Thread-81598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:19:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:19:48.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:19:48.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
2025-12-13T03:19:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 19, 30), 1.63, 89.44, 0.0, 28.72, 6.75, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:19:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:19:30
2025-12-13T03:19:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:19:49.766 [DEBUG] [Thread-81599] [transport.py] [_log()] starting thread (client mode): 0xf57a5900
2025-12-13T03:19:49.766 [DEBUG] [Thread-81599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:19:49.780 [DEBUG] [Thread-81599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:19:49.780 [INFO] [Thread-81599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] client lang: <none>
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] server lang: <none>
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] kex follows: False
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:19:49.783 [DEBUG] [Thread-81599] [transport.py] [_log()] Compression: none
2025-12-13T03:19:49.784 [DEBUG] [Thread-81599] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:19:49.794 [DEBUG] [Thread-81599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:19:49.794 [DEBUG] [Thread-81599] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:19:49.794 [DEBUG] [Thread-81599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:19:49.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:19:49.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:19:49.796 [DEBUG] [Thread-81599] [transport.py] [_log()] userauth is OK
2025-12-13T03:19:49.796 [DEBUG] [Thread-81599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:19:49.796 [DEBUG] [Thread-81599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:19:49.796 [DEBUG] [Thread-81599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:19:49.796 [DEBUG] [Thread-81599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:19:49.809 [INFO] [Thread-81599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:19:49.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:19:50.390 [DEBUG] [Thread-81599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:19:50.390 [DEBUG] [Thread-81599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:19:50.390 [DEBUG] [Thread-81599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:19:50.431 [DEBUG] [Thread-81599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:19:50.431 [DEBUG] [Thread-81599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:19:50.432 [DEBUG] [Thread-81599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:19:50.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:19:50.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:19:50.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:19:50.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:19:50.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:19:50.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:19:50.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.055302 -999.00   +6.40  33.35     92   +5.20 1 2 2 3 1     0    0 0.69 -21.82 Z.ESw 33.6 33.4 305.2 42.1 8.0 -7.5 7.7 -10.9 7.4 -9.1 7.8 -5.9
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.055302
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:19:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:19:30', tmtdew=1.63, humidity=89.44, cloud=0.0, wind=28.72, temperature=6.75, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:19:38.093', atlas_cloud=2, atlas_rain=1, zp_data=[0.48574999999999946, nan, nan, nan, 1.7874999999999996, 1.002250000000001, 0.45650000000000013, 0.6972500000000004, 1.3184999999999993, nan, nan, nan, nan, nan, 1.5469999999999997, 1.6555, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:17:00')
2025-12-13T03:19:50.448 [DEBUG] [Thread-81599] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:19:50.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:19:50.543 [DEBUG] [Thread-81602] [transport.py] [_log()] starting thread (client mode): 0xf57a7f40
2025-12-13T03:19:50.543 [DEBUG] [Thread-81602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:19:50.557 [DEBUG] [Thread-81602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:19:50.557 [INFO] [Thread-81602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:19:50.564 [DEBUG] [Thread-81602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:19:50.564 [DEBUG] [Thread-81602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:19:50.564 [DEBUG] [Thread-81602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] client lang: <none>
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] server lang: <none>
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] kex follows: False
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] Compression: none
2025-12-13T03:19:50.565 [DEBUG] [Thread-81602] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:19:50.619 [DEBUG] [Thread-81602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:19:50.619 [DEBUG] [Thread-81602] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:19:50.619 [DEBUG] [Thread-81602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:19:50.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:19:50.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:19:50.677 [DEBUG] [Thread-81602] [transport.py] [_log()] userauth is OK
2025-12-13T03:19:50.677 [DEBUG] [Thread-81602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:19:50.677 [DEBUG] [Thread-81602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:19:50.677 [DEBUG] [Thread-81602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:19:50.677 [DEBUG] [Thread-81602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:19:50.692 [INFO] [Thread-81602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:19:50.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:19:50.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:19:51.489 [DEBUG] [Thread-81602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:19:51.489 [DEBUG] [Thread-81602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:19:51.536 [DEBUG] [Thread-81602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:19:51.536 [DEBUG] [Thread-81602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:19:51.545 [DEBUG] [Thread-81602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:19:51.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:19:51.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:19:51.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:19:51.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:19:51.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:19:51.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:19:51.576 [DEBUG] [Thread-81602] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:19:58.256 [DEBUG] [Thread-81604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:13.300 [DEBUG] [Thread-81605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:20:21.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:20:21.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:20:22.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 20, 2), 1.62, 89.52, 0.0, 28.28, 6.78, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:20:22.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:20:02
2025-12-13T03:20:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:20:22.573 [DEBUG] [Thread-81606] [transport.py] [_log()] starting thread (client mode): 0xf57a6ec0
2025-12-13T03:20:22.573 [DEBUG] [Thread-81606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:20:22.592 [DEBUG] [Thread-81606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:20:22.592 [INFO] [Thread-81606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] client lang: <none>
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] server lang: <none>
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] kex follows: False
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:20:22.595 [DEBUG] [Thread-81606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:20:22.596 [DEBUG] [Thread-81606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:20:22.596 [DEBUG] [Thread-81606] [transport.py] [_log()] Compression: none
2025-12-13T03:20:22.596 [DEBUG] [Thread-81606] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:20:22.611 [DEBUG] [Thread-81606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:20:22.612 [DEBUG] [Thread-81606] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:20:22.612 [DEBUG] [Thread-81606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:20:22.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:20:22.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:20:22.615 [DEBUG] [Thread-81606] [transport.py] [_log()] userauth is OK
2025-12-13T03:20:22.615 [DEBUG] [Thread-81606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:20:22.615 [DEBUG] [Thread-81606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:20:22.615 [DEBUG] [Thread-81606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:20:22.615 [DEBUG] [Thread-81606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:20:22.638 [INFO] [Thread-81606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:20:22.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:20:23.226 [DEBUG] [Thread-81606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:20:23.226 [DEBUG] [Thread-81606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:20:23.235 [DEBUG] [Thread-81606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:20:23.267 [DEBUG] [Thread-81606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:20:23.267 [DEBUG] [Thread-81606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:20:23.272 [DEBUG] [Thread-81606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:20:23.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:20:23.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:20:23.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:20:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:20:23.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:20:23.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:20:23.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:20:23.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:20:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:20:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.055302 -999.00   +6.40  33.35     92   +5.20 1 2 2 3 1     0    0 0.69 -21.82 Z.ESw 33.6 33.4 305.2 42.1 8.0 -7.5 7.7 -10.9 7.4 -9.1 7.8 -5.9
2025-12-13T03:20:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:20:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:20:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.055302
2025-12-13T03:20:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:20:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:20:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:20:23.297 [DEBUG] [Thread-81606] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:20:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:20:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:20:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:20:02', tmtdew=1.62, humidity=89.52, cloud=0.0, wind=28.28, temperature=6.78, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:19:38.093', atlas_cloud=2, atlas_rain=1, zp_data=[0.48574999999999946, nan, nan, nan, 1.7874999999999996, 1.002250000000001, 0.45650000000000013, 0.6972500000000004, 1.3184999999999993, nan, nan, nan, nan, nan, 1.5469999999999997, 1.6555, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:17:00')
2025-12-13T03:20:23.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:20:23.396 [DEBUG] [Thread-81609] [transport.py] [_log()] starting thread (client mode): 0xf57a64d0
2025-12-13T03:20:23.397 [DEBUG] [Thread-81609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:20:23.411 [DEBUG] [Thread-81609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:20:23.411 [INFO] [Thread-81609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:23.418 [DEBUG] [Thread-81609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] client lang: <none>
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] server lang: <none>
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] kex follows: False
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] Compression: none
2025-12-13T03:20:23.419 [DEBUG] [Thread-81609] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:20:23.476 [DEBUG] [Thread-81609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:20:23.477 [DEBUG] [Thread-81609] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:20:23.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:20:23.478 [DEBUG] [Thread-81609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:20:23.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:20:23.533 [DEBUG] [Thread-81609] [transport.py] [_log()] userauth is OK
2025-12-13T03:20:23.533 [DEBUG] [Thread-81609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:20:23.533 [DEBUG] [Thread-81609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:20:23.534 [DEBUG] [Thread-81609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:20:23.534 [DEBUG] [Thread-81609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:20:23.553 [INFO] [Thread-81609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:20:23.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:20:23.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:20:24.355 [DEBUG] [Thread-81609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:20:24.356 [DEBUG] [Thread-81609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:20:24.402 [DEBUG] [Thread-81609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:20:24.402 [DEBUG] [Thread-81609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:20:24.411 [DEBUG] [Thread-81609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:20:24.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:20:24.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:20:24.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
2025-12-13T03:20:24.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:20:24.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:20:24.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:20:24.442 [DEBUG] [Thread-81609] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:20:28.325 [DEBUG] [Thread-81611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:37.571 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:37.572 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:38.430 [DEBUG] [Thread-81612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:43.361 [DEBUG] [Thread-81613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:20:54.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:20:54.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:20:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:20:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 20, 34), 1.63, 89.49, 0.0, 26.98, 6.73, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:20:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:20:34
2025-12-13T03:20:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:20:55.440 [DEBUG] [Thread-81614] [transport.py] [_log()] starting thread (client mode): 0xf57a5c60
2025-12-13T03:20:55.440 [DEBUG] [Thread-81614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:20:55.461 [DEBUG] [Thread-81614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:20:55.461 [INFO] [Thread-81614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] client lang: <none>
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] server lang: <none>
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] kex follows: False
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] Compression: none
2025-12-13T03:20:55.464 [DEBUG] [Thread-81614] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:20:55.482 [DEBUG] [Thread-81614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:20:55.483 [DEBUG] [Thread-81614] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:20:55.483 [DEBUG] [Thread-81614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:20:55.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:20:55.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:20:55.485 [DEBUG] [Thread-81614] [transport.py] [_log()] userauth is OK
2025-12-13T03:20:55.485 [DEBUG] [Thread-81614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:20:55.485 [DEBUG] [Thread-81614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:20:55.485 [DEBUG] [Thread-81614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:20:55.485 [DEBUG] [Thread-81614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:20:55.510 [INFO] [Thread-81614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:20:55.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:20:56.149 [DEBUG] [Thread-81614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:20:56.149 [DEBUG] [Thread-81614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:20:56.149 [DEBUG] [Thread-81614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:20:56.190 [DEBUG] [Thread-81614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:20:56.190 [DEBUG] [Thread-81614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:20:56.193 [DEBUG] [Thread-81614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:20:56.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:20:56.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:20:56.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:20:56.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:20:56.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:20:56.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:20:56.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:20:56.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:20:56.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:20:56.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.055649 -999.00   +6.40  42.58     92   +5.20 1 2 2 3 1     0    0 0.64 -22.56 Z.ESw 34.1 42.6 291.8 50.5 7.9 -10.7 7.6 -14.1 7.3 -13.7 7.8 -7.1
2025-12-13T03:20:56.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:20:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:20:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.055649
2025-12-13T03:20:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:20:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:20:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:20:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:20:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:20:56.219 [DEBUG] [Thread-81614] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:20:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:20:34', tmtdew=1.63, humidity=89.49, cloud=0.0, wind=26.98, temperature=6.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:20:08.074', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:19:00')
2025-12-13T03:20:56.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:20:56.319 [DEBUG] [Thread-81617] [transport.py] [_log()] starting thread (client mode): 0xfabc6230
2025-12-13T03:20:56.320 [DEBUG] [Thread-81617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:20:56.334 [DEBUG] [Thread-81617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:20:56.334 [INFO] [Thread-81617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:20:56.341 [DEBUG] [Thread-81617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:20:56.341 [DEBUG] [Thread-81617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] client lang: <none>
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] server lang: <none>
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] kex follows: False
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] Compression: none
2025-12-13T03:20:56.342 [DEBUG] [Thread-81617] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:20:56.398 [DEBUG] [Thread-81617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:20:56.399 [DEBUG] [Thread-81617] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:20:56.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:20:56.400 [DEBUG] [Thread-81617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:20:56.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:20:56.455 [DEBUG] [Thread-81617] [transport.py] [_log()] userauth is OK
2025-12-13T03:20:56.455 [DEBUG] [Thread-81617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:20:56.455 [DEBUG] [Thread-81617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:20:56.456 [DEBUG] [Thread-81617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:20:56.456 [DEBUG] [Thread-81617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:20:56.474 [INFO] [Thread-81617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:20:56.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:20:56.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:20:57.245 [DEBUG] [Thread-81617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:20:57.245 [DEBUG] [Thread-81617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:20:57.293 [DEBUG] [Thread-81617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:20:57.293 [DEBUG] [Thread-81617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:20:57.302 [DEBUG] [Thread-81617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:20:57.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:20:57.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:20:57.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:20:57.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:20:57.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:20:57.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:20:57.337 [DEBUG] [Thread-81617] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:20:58.390 [DEBUG] [Thread-81619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:13.444 [DEBUG] [Thread-81620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:27.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:21:27.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:21:27.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:21:28.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 21, 6), 1.62, 89.52, 0.0, 29.94, 6.7, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:21:28.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:21:06
2025-12-13T03:21:28.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:21:28.323 [DEBUG] [Thread-81621] [transport.py] [_log()] starting thread (client mode): 0xfabc5810
2025-12-13T03:21:28.323 [DEBUG] [Thread-81621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:21:28.338 [DEBUG] [Thread-81621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:21:28.338 [INFO] [Thread-81621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] client lang: <none>
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] server lang: <none>
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] kex follows: False
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] Compression: none
2025-12-13T03:21:28.341 [DEBUG] [Thread-81621] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:21:28.359 [DEBUG] [Thread-81621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:21:28.359 [DEBUG] [Thread-81621] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:21:28.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:21:28.360 [DEBUG] [Thread-81621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:21:28.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:21:28.363 [DEBUG] [Thread-81621] [transport.py] [_log()] userauth is OK
2025-12-13T03:21:28.363 [DEBUG] [Thread-81621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:21:28.363 [DEBUG] [Thread-81621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:21:28.363 [DEBUG] [Thread-81621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:21:28.363 [DEBUG] [Thread-81621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:21:28.388 [INFO] [Thread-81621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:21:28.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:21:28.476 [DEBUG] [Thread-81623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:28.978 [DEBUG] [Thread-81621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:21:28.978 [DEBUG] [Thread-81621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:21:28.979 [DEBUG] [Thread-81621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:21:29.019 [DEBUG] [Thread-81621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:21:29.019 [DEBUG] [Thread-81621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:21:29.022 [DEBUG] [Thread-81621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:21:29.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:21:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:21:29.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:21:29.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:21:29.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:21:29.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:21:29.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:21:29.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:21:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:21:29.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.055996 -999.00   +6.40  29.14     92   +5.20 1 2 1 3 1     0    0 0.60 -23.99 Z.ESw 27.7 29.1 300.6 50.1 7.9 -17.8 7.6 -19.4 7.2 -19.5 7.7 -13.4
2025-12-13T03:21:29.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:21:29.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:21:29.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.055996
2025-12-13T03:21:29.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:21:29.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:21:29.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:21:29.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:21:29.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:21:29.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:21:06', tmtdew=1.62, humidity=89.52, cloud=0.0, wind=29.94, temperature=6.7, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:20:38.054', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:19:00')
2025-12-13T03:21:29.051 [DEBUG] [Thread-81621] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:21:29.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:21:29.147 [DEBUG] [Thread-81625] [transport.py] [_log()] starting thread (client mode): 0xf5703cd0
2025-12-13T03:21:29.147 [DEBUG] [Thread-81625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:21:29.162 [DEBUG] [Thread-81625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:21:29.162 [INFO] [Thread-81625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:21:29.169 [DEBUG] [Thread-81625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] client lang: <none>
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] server lang: <none>
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] kex follows: False
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] Compression: none
2025-12-13T03:21:29.170 [DEBUG] [Thread-81625] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:21:29.230 [DEBUG] [Thread-81625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:21:29.230 [DEBUG] [Thread-81625] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:21:29.231 [DEBUG] [Thread-81625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:21:29.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:21:29.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:21:29.286 [DEBUG] [Thread-81625] [transport.py] [_log()] userauth is OK
2025-12-13T03:21:29.286 [DEBUG] [Thread-81625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:21:29.286 [DEBUG] [Thread-81625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:21:29.286 [DEBUG] [Thread-81625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:21:29.286 [DEBUG] [Thread-81625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:21:29.305 [INFO] [Thread-81625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:21:29.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:21:29.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:21:30.115 [DEBUG] [Thread-81625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:21:30.115 [DEBUG] [Thread-81625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:21:30.163 [DEBUG] [Thread-81625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:21:30.163 [DEBUG] [Thread-81625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:21:30.172 [DEBUG] [Thread-81625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:21:30.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:21:30.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:21:30.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:21:30.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:21:30.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:21:30.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:21:30.207 [DEBUG] [Thread-81625] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:21:37.773 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:37.774 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:38.502 [DEBUG] [Thread-81627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:43.504 [DEBUG] [Thread-81628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:21:58.547 [DEBUG] [Thread-81629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:22:00.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:22:00.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:22:00.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 21, 38), 1.56, 89.56, 0.0, 35.38, 6.63, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:22:00.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:21:38
2025-12-13T03:22:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:22:01.198 [DEBUG] [Thread-81630] [transport.py] [_log()] starting thread (client mode): 0xf813d8d0
2025-12-13T03:22:01.198 [DEBUG] [Thread-81630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:22:01.218 [DEBUG] [Thread-81630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:22:01.218 [INFO] [Thread-81630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:22:01.222 [DEBUG] [Thread-81630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:22:01.222 [DEBUG] [Thread-81630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:22:01.222 [DEBUG] [Thread-81630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:22:01.222 [DEBUG] [Thread-81630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:01.222 [DEBUG] [Thread-81630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:01.222 [DEBUG] [Thread-81630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] client lang: <none>
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] server lang: <none>
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] kex follows: False
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] Compression: none
2025-12-13T03:22:01.223 [DEBUG] [Thread-81630] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:22:01.240 [DEBUG] [Thread-81630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:22:01.240 [DEBUG] [Thread-81630] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:22:01.241 [DEBUG] [Thread-81630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:22:01.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:22:01.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:22:01.243 [DEBUG] [Thread-81630] [transport.py] [_log()] userauth is OK
2025-12-13T03:22:01.243 [DEBUG] [Thread-81630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:22:01.243 [DEBUG] [Thread-81630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:22:01.243 [DEBUG] [Thread-81630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:22:01.243 [DEBUG] [Thread-81630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:22:01.263 [INFO] [Thread-81630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:22:01.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:22:01.932 [DEBUG] [Thread-81630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:22:01.932 [DEBUG] [Thread-81630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:22:01.932 [DEBUG] [Thread-81630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:22:01.973 [DEBUG] [Thread-81630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:22:01.973 [DEBUG] [Thread-81630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:22:01.976 [DEBUG] [Thread-81630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:22:01.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:22:01.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:22:01.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:22:01.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:22:01.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:22:02.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:22:02.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:22:02.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:22:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:22:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.056344 -999.00   +6.40  36.99     92   +5.20 1 2 2 3 1     0    0 0.61 -23.13 z.ESw 34.1 37.0 303.2 41.7 7.8 -20.4 7.6 -21.2 7.2 -19.3 7.7 -18.5
2025-12-13T03:22:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:22:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:22:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.056344
2025-12-13T03:22:02.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:22:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:22:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:22:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:22:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:22:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:21:38', tmtdew=1.56, humidity=89.56, cloud=0.0, wind=35.38, temperature=6.63, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:21:08.122', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:19:00')
2025-12-13T03:22:02.002 [DEBUG] [Thread-81630] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:22:02.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:22:02.099 [DEBUG] [Thread-81633] [transport.py] [_log()] starting thread (client mode): 0xf57a7850
2025-12-13T03:22:02.099 [DEBUG] [Thread-81633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:22:02.113 [DEBUG] [Thread-81633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:22:02.113 [INFO] [Thread-81633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:02.121 [DEBUG] [Thread-81633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] client lang: <none>
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] server lang: <none>
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] kex follows: False
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] Compression: none
2025-12-13T03:22:02.122 [DEBUG] [Thread-81633] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:22:02.179 [DEBUG] [Thread-81633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:22:02.179 [DEBUG] [Thread-81633] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:22:02.180 [DEBUG] [Thread-81633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:22:02.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:22:02.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:22:02.236 [DEBUG] [Thread-81633] [transport.py] [_log()] userauth is OK
2025-12-13T03:22:02.236 [DEBUG] [Thread-81633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:22:02.236 [DEBUG] [Thread-81633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:22:02.237 [DEBUG] [Thread-81633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:22:02.237 [DEBUG] [Thread-81633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:22:02.259 [INFO] [Thread-81633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:22:02.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:22:02.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:22:03.091 [DEBUG] [Thread-81633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:22:03.091 [DEBUG] [Thread-81633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:22:03.139 [DEBUG] [Thread-81633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:22:03.139 [DEBUG] [Thread-81633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:22:03.148 [DEBUG] [Thread-81633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:22:03.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:22:03.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:22:03.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:22:03.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:22:03.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:22:03.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:22:03.182 [DEBUG] [Thread-81633] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:22:13.576 [DEBUG] [Thread-81635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:28.620 [DEBUG] [Thread-81636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:33.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:22:33.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:22:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:22:33.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 22, 10), 1.56, 89.59, 0.0, 38.36, 6.6, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:22:33.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:22:10
2025-12-13T03:22:34.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:22:34.183 [DEBUG] [Thread-81637] [transport.py] [_log()] starting thread (client mode): 0xf57a4c40
2025-12-13T03:22:34.183 [DEBUG] [Thread-81637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:22:34.203 [DEBUG] [Thread-81637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:22:34.203 [INFO] [Thread-81637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:22:34.204 [DEBUG] [Thread-81637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] client lang: <none>
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] server lang: <none>
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] kex follows: False
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] Compression: none
2025-12-13T03:22:34.205 [DEBUG] [Thread-81637] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:22:34.216 [DEBUG] [Thread-81637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:22:34.216 [DEBUG] [Thread-81637] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:22:34.217 [DEBUG] [Thread-81637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:22:34.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:22:34.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:22:34.218 [DEBUG] [Thread-81637] [transport.py] [_log()] userauth is OK
2025-12-13T03:22:34.218 [DEBUG] [Thread-81637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:22:34.218 [DEBUG] [Thread-81637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:22:34.218 [DEBUG] [Thread-81637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:22:34.218 [DEBUG] [Thread-81637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:22:34.241 [INFO] [Thread-81637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:22:34.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:22:35.003 [DEBUG] [Thread-81637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:22:35.003 [DEBUG] [Thread-81637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:22:35.004 [DEBUG] [Thread-81637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:22:35.045 [DEBUG] [Thread-81637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:22:35.045 [DEBUG] [Thread-81637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:22:35.047 [DEBUG] [Thread-81637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:22:35.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:22:35.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:22:35.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:22:35.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:22:35.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:22:35.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:22:35.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:22:35.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:22:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:22:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.056691 -999.00   +6.40  31.66     92   +5.20 1 2 2 3 1     0    0 0.52 -26.02 Z.eSW 34.1 31.7 295.8 40.1 7.8 -19.6 7.6 -20.3 7.2 -18.7 7.6 -17.2
2025-12-13T03:22:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:22:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:22:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.056691
2025-12-13T03:22:35.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:22:35.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:22:35.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:22:35.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:22:35.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:22:35.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:22:10', tmtdew=1.56, humidity=89.59, cloud=0.0, wind=38.36, temperature=6.6, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:21:38.102', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:19:00')
2025-12-13T03:22:35.074 [DEBUG] [Thread-81637] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:22:35.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:22:35.170 [DEBUG] [Thread-81640] [transport.py] [_log()] starting thread (client mode): 0xf57010f0
2025-12-13T03:22:35.170 [DEBUG] [Thread-81640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:22:35.185 [DEBUG] [Thread-81640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:22:35.185 [INFO] [Thread-81640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:22:35.192 [DEBUG] [Thread-81640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:22:35.192 [DEBUG] [Thread-81640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:22:35.192 [DEBUG] [Thread-81640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:22:35.192 [DEBUG] [Thread-81640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] client lang: <none>
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] server lang: <none>
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] kex follows: False
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:22:35.193 [DEBUG] [Thread-81640] [transport.py] [_log()] Compression: none
2025-12-13T03:22:35.194 [DEBUG] [Thread-81640] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:22:35.249 [DEBUG] [Thread-81640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:22:35.250 [DEBUG] [Thread-81640] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:22:35.250 [DEBUG] [Thread-81640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:22:35.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:22:35.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:22:35.305 [DEBUG] [Thread-81640] [transport.py] [_log()] userauth is OK
2025-12-13T03:22:35.305 [DEBUG] [Thread-81640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:22:35.306 [DEBUG] [Thread-81640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:22:35.306 [DEBUG] [Thread-81640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:22:35.306 [DEBUG] [Thread-81640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:22:35.324 [INFO] [Thread-81640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:22:35.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:22:35.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:22:36.156 [DEBUG] [Thread-81640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:22:36.156 [DEBUG] [Thread-81640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:22:36.204 [DEBUG] [Thread-81640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:22:36.204 [DEBUG] [Thread-81640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:22:36.214 [DEBUG] [Thread-81640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:22:36.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:22:36.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:22:36.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:22:36.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:22:36.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:22:36.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:22:36.255 [DEBUG] [Thread-81640] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:22:37.978 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:37.979 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:38.576 [DEBUG] [Thread-81642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:43.653 [DEBUG] [Thread-81643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:22:58.697 [DEBUG] [Thread-81644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:06.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:23:06.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:23:06.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:23:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 22, 42), 1.55, 89.66, 0.0, 34.32, 6.63, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:23:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:22:42
2025-12-13T03:23:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:23:07.239 [DEBUG] [Thread-81645] [transport.py] [_log()] starting thread (client mode): 0xf5702e90
2025-12-13T03:23:07.239 [DEBUG] [Thread-81645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:23:07.259 [DEBUG] [Thread-81645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:23:07.259 [INFO] [Thread-81645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] client lang: <none>
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] server lang: <none>
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] kex follows: False
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] Compression: none
2025-12-13T03:23:07.262 [DEBUG] [Thread-81645] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:23:07.280 [DEBUG] [Thread-81645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:23:07.280 [DEBUG] [Thread-81645] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:23:07.281 [DEBUG] [Thread-81645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:23:07.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:23:07.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:23:07.283 [DEBUG] [Thread-81645] [transport.py] [_log()] userauth is OK
2025-12-13T03:23:07.283 [DEBUG] [Thread-81645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:23:07.284 [DEBUG] [Thread-81645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:23:07.284 [DEBUG] [Thread-81645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:23:07.284 [DEBUG] [Thread-81645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:23:07.302 [INFO] [Thread-81645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:23:07.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:23:07.938 [DEBUG] [Thread-81645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:23:07.938 [DEBUG] [Thread-81645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:23:07.939 [DEBUG] [Thread-81645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:23:07.980 [DEBUG] [Thread-81645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:23:07.980 [DEBUG] [Thread-81645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:23:07.983 [DEBUG] [Thread-81645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:23:07.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:23:07.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:23:07.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:23:08.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:23:08.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:23:08.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:23:08.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:23:08.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:23:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:23:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.057385 -999.00   +6.30  29.90     92   +5.20 1 3 1 3 1     0    0 0.60 -24.05 ZNESW 40.8 29.9 297.6 41.9 7.8 -7.8 7.4 -9.3 7.2 -6.4 7.6 -8.0
2025-12-13T03:23:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:23:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:23:08.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.057385
2025-12-13T03:23:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:23:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:23:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:23:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:23:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:23:08.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:22:42', tmtdew=1.55, humidity=89.66, cloud=0.0, wind=34.32, temperature=6.63, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:22:38.064', atlas_cloud=3, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:19:00')
2025-12-13T03:23:08.009 [DEBUG] [Thread-81645] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:23:08.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:23:08.104 [DEBUG] [Thread-81648] [transport.py] [_log()] starting thread (client mode): 0xf57005e0
2025-12-13T03:23:08.104 [DEBUG] [Thread-81648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:23:08.118 [DEBUG] [Thread-81648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:23:08.118 [INFO] [Thread-81648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:23:08.126 [DEBUG] [Thread-81648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:23:08.126 [DEBUG] [Thread-81648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:23:08.126 [DEBUG] [Thread-81648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:23:08.126 [DEBUG] [Thread-81648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:08.126 [DEBUG] [Thread-81648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:08.126 [DEBUG] [Thread-81648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] client lang: <none>
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] server lang: <none>
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] kex follows: False
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:23:08.127 [DEBUG] [Thread-81648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:23:08.128 [DEBUG] [Thread-81648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:23:08.128 [DEBUG] [Thread-81648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:23:08.128 [DEBUG] [Thread-81648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:23:08.128 [DEBUG] [Thread-81648] [transport.py] [_log()] Compression: none
2025-12-13T03:23:08.128 [DEBUG] [Thread-81648] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:23:08.183 [DEBUG] [Thread-81648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:23:08.184 [DEBUG] [Thread-81648] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:23:08.185 [DEBUG] [Thread-81648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:23:08.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:23:08.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:23:08.239 [DEBUG] [Thread-81648] [transport.py] [_log()] userauth is OK
2025-12-13T03:23:08.239 [DEBUG] [Thread-81648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:23:08.240 [DEBUG] [Thread-81648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:23:08.240 [DEBUG] [Thread-81648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:23:08.240 [DEBUG] [Thread-81648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:23:08.260 [INFO] [Thread-81648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:23:08.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:23:08.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:23:09.068 [DEBUG] [Thread-81648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:23:09.068 [DEBUG] [Thread-81648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:23:09.116 [DEBUG] [Thread-81648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:23:09.116 [DEBUG] [Thread-81648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:23:09.124 [DEBUG] [Thread-81648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:23:09.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:23:09.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:23:09.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:23:09.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:23:09.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:23:09.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:23:09.161 [DEBUG] [Thread-81648] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:23:13.726 [DEBUG] [Thread-81650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:28.770 [DEBUG] [Thread-81651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:38.193 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:38.194 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:38.654 [DEBUG] [Thread-81652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:39.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:23:39.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:23:39.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:23:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 23, 14), 1.55, 89.64, 0.0, 32.82, 6.61, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:23:39.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:23:14
2025-12-13T03:23:40.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:23:40.168 [DEBUG] [Thread-81653] [transport.py] [_log()] starting thread (client mode): 0xf57a7310
2025-12-13T03:23:40.168 [DEBUG] [Thread-81653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:23:40.187 [DEBUG] [Thread-81653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:23:40.187 [INFO] [Thread-81653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:23:40.190 [DEBUG] [Thread-81653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] client lang: <none>
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] server lang: <none>
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] kex follows: False
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] Compression: none
2025-12-13T03:23:40.191 [DEBUG] [Thread-81653] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:23:40.207 [DEBUG] [Thread-81653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:23:40.207 [DEBUG] [Thread-81653] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:23:40.207 [DEBUG] [Thread-81653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:23:40.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:23:40.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:23:40.208 [DEBUG] [Thread-81653] [transport.py] [_log()] userauth is OK
2025-12-13T03:23:40.208 [DEBUG] [Thread-81653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:23:40.208 [DEBUG] [Thread-81653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:23:40.208 [DEBUG] [Thread-81653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:23:40.208 [DEBUG] [Thread-81653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:23:40.217 [INFO] [Thread-81653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:23:40.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:23:40.952 [DEBUG] [Thread-81653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:23:40.952 [DEBUG] [Thread-81653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:23:40.952 [DEBUG] [Thread-81653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:23:40.993 [DEBUG] [Thread-81653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:23:40.993 [DEBUG] [Thread-81653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:23:40.995 [DEBUG] [Thread-81653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:23:41.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:23:41.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:23:41.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:23:41.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:23:41.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:23:41.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:23:41.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.057732 -999.00   +6.30  31.14     92   +5.20 1 3 2 3 1     0    0 0.59 -23.30 ZNESW 38.2 31.1 295.2 45.3 7.7 -6.7 7.5 -8.9 7.2 -10.8 7.5 -4.3
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.057732
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2025-12-13T03:23:41.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:23:14', tmtdew=1.55, humidity=89.64, cloud=0.0, wind=32.82, temperature=6.61, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:23:08.045', atlas_cloud=3, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:19:00')
2025-12-13T03:23:41.017 [DEBUG] [Thread-81653] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:23:41.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:23:41.103 [DEBUG] [Thread-81656] [transport.py] [_log()] starting thread (client mode): 0xf5740670
2025-12-13T03:23:41.103 [DEBUG] [Thread-81656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:23:41.117 [DEBUG] [Thread-81656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:23:41.118 [INFO] [Thread-81656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] client lang: <none>
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] server lang: <none>
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] kex follows: False
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:23:41.125 [DEBUG] [Thread-81656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:23:41.126 [DEBUG] [Thread-81656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:23:41.126 [DEBUG] [Thread-81656] [transport.py] [_log()] Compression: none
2025-12-13T03:23:41.126 [DEBUG] [Thread-81656] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:23:41.183 [DEBUG] [Thread-81656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:23:41.184 [DEBUG] [Thread-81656] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:23:41.184 [DEBUG] [Thread-81656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:23:41.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:23:41.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:23:41.241 [DEBUG] [Thread-81656] [transport.py] [_log()] userauth is OK
2025-12-13T03:23:41.241 [DEBUG] [Thread-81656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:23:41.241 [DEBUG] [Thread-81656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:23:41.241 [DEBUG] [Thread-81656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:23:41.241 [DEBUG] [Thread-81656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:23:41.255 [INFO] [Thread-81656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:23:41.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:23:41.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:23:42.086 [DEBUG] [Thread-81656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:23:42.086 [DEBUG] [Thread-81656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:23:42.134 [DEBUG] [Thread-81656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:23:42.134 [DEBUG] [Thread-81656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:23:42.142 [DEBUG] [Thread-81656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:23:42.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:23:42.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:23: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') -> 00000000
2025-12-13T03:23:42.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:23:42.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:23:42.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:23:42.174 [DEBUG] [Thread-81656] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:23:43.796 [DEBUG] [Thread-81658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:23:58.839 [DEBUG] [Thread-81659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:12.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:24:12.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:24:12.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:24:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 23, 46), 1.54, 89.72, 0.0, 30.42, 6.63, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:24:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:23:46
2025-12-13T03:24:13.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:24:13.173 [DEBUG] [Thread-81660] [transport.py] [_log()] starting thread (client mode): 0xf5742ec0
2025-12-13T03:24:13.173 [DEBUG] [Thread-81660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:24:13.192 [DEBUG] [Thread-81660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:24:13.192 [INFO] [Thread-81660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] client lang: <none>
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] server lang: <none>
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] kex follows: False
2025-12-13T03:24:13.194 [DEBUG] [Thread-81660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:24:13.195 [DEBUG] [Thread-81660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:24:13.195 [DEBUG] [Thread-81660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:24:13.195 [DEBUG] [Thread-81660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:24:13.195 [DEBUG] [Thread-81660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:24:13.195 [DEBUG] [Thread-81660] [transport.py] [_log()] Compression: none
2025-12-13T03:24:13.195 [DEBUG] [Thread-81660] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:24:13.203 [DEBUG] [Thread-81660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:24:13.204 [DEBUG] [Thread-81660] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:24:13.204 [DEBUG] [Thread-81660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:24:13.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:24:13.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:24:13.205 [DEBUG] [Thread-81660] [transport.py] [_log()] userauth is OK
2025-12-13T03:24:13.205 [DEBUG] [Thread-81660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:24:13.205 [DEBUG] [Thread-81660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:24:13.206 [DEBUG] [Thread-81660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:24:13.206 [DEBUG] [Thread-81660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:24:13.216 [INFO] [Thread-81660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:24:13.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:24:13.865 [DEBUG] [Thread-81660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:24:13.865 [DEBUG] [Thread-81660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:24:13.866 [DEBUG] [Thread-81660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:24:13.873 [DEBUG] [Thread-81662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:13.906 [DEBUG] [Thread-81660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:24:13.906 [DEBUG] [Thread-81660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:24:13.909 [DEBUG] [Thread-81660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:24:13.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:24:13.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:24:13.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:24:13.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:24:13.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:24:13.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:24:13.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:24:13.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.058080 -999.00   +6.30  41.42     92   +5.20 1 2 2 3 1     0    0 0.55 -24.23 ZNES. 42.1 41.4 296.2 45.1 7.7 -17.7 7.5 -19.7 7.1 -19.1 7.5 -13.8
2025-12-13T03:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:24:13.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.058080
2025-12-13T03:24:13.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:24:13.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:24:13.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:24:13.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:24:13.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:24:13.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:23:46', tmtdew=1.54, humidity=89.72, cloud=0.0, wind=30.42, temperature=6.63, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:23:38.112', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:22:00')
2025-12-13T03:24:13.934 [DEBUG] [Thread-81660] [transport.py] [_log()] EOF in transport thread
2025-12-13T03: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
2025-12-13T03:24:14.028 [DEBUG] [Thread-81664] [transport.py] [_log()] starting thread (client mode): 0xf5772aa0
2025-12-13T03:24:14.028 [DEBUG] [Thread-81664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:24:14.043 [DEBUG] [Thread-81664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:24:14.043 [INFO] [Thread-81664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:24:14.050 [DEBUG] [Thread-81664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:24:14.050 [DEBUG] [Thread-81664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] client lang: <none>
2025-12-13T03:24:14.051 [DEBUG] [Thread-81664] [transport.py] [_log()] server lang: <none>
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] kex follows: False
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] Compression: none
2025-12-13T03:24:14.052 [DEBUG] [Thread-81664] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:24:14.110 [DEBUG] [Thread-81664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:24:14.110 [DEBUG] [Thread-81664] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:24:14.111 [DEBUG] [Thread-81664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:24:14.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:24:14.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:24:14.166 [DEBUG] [Thread-81664] [transport.py] [_log()] userauth is OK
2025-12-13T03:24:14.167 [DEBUG] [Thread-81664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:24:14.167 [DEBUG] [Thread-81664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:24:14.167 [DEBUG] [Thread-81664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:24:14.167 [DEBUG] [Thread-81664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:24:14.186 [INFO] [Thread-81664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:24:14.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:24:14.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:24:14.998 [DEBUG] [Thread-81664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:24:14.998 [DEBUG] [Thread-81664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:24:15.047 [DEBUG] [Thread-81664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:24:15.047 [DEBUG] [Thread-81664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:24:15.056 [DEBUG] [Thread-81664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:24:15.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:24:15.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:24:15.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:24:15.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:24:15.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:24:15.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:24:15.090 [DEBUG] [Thread-81664] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:24:28.902 [DEBUG] [Thread-81666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:38.398 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:38.399 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:38.730 [DEBUG] [Thread-81667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:43.944 [DEBUG] [Thread-81668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:24:45.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:24:45.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:24:45.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:24:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 24, 18), 1.54, 89.69, 0.0, 27.88, 6.6, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:24:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:24:18
2025-12-13T03:24:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:24:46.050 [DEBUG] [Thread-81669] [transport.py] [_log()] starting thread (client mode): 0xf81e51b0
2025-12-13T03:24:46.050 [DEBUG] [Thread-81669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:24:46.069 [DEBUG] [Thread-81669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:24:46.069 [INFO] [Thread-81669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:46.071 [DEBUG] [Thread-81669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] client lang: <none>
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] server lang: <none>
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] kex follows: False
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] Compression: none
2025-12-13T03:24:46.072 [DEBUG] [Thread-81669] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:24:46.084 [DEBUG] [Thread-81669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:24:46.084 [DEBUG] [Thread-81669] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:24:46.085 [DEBUG] [Thread-81669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:24:46.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:24:46.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:24:46.087 [DEBUG] [Thread-81669] [transport.py] [_log()] userauth is OK
2025-12-13T03:24:46.087 [DEBUG] [Thread-81669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:24:46.088 [DEBUG] [Thread-81669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:24:46.088 [DEBUG] [Thread-81669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:24:46.088 [DEBUG] [Thread-81669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:24:46.123 [INFO] [Thread-81669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:24:46.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:24:46.769 [DEBUG] [Thread-81669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:24:46.769 [DEBUG] [Thread-81669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:24:46.769 [DEBUG] [Thread-81669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:24:46.810 [DEBUG] [Thread-81669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:24:46.810 [DEBUG] [Thread-81669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:24:46.813 [DEBUG] [Thread-81669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:24:46.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:24:46.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:24:46.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:24:46.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:24:46.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:24:46.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:24:46.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:24:46.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:24:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:24:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.058427 -999.00   +6.30  29.42     92   +5.20 1 2 1 3 1     0    0 0.55 -24.02 z.eSW 27.9 29.4 295.4 44.0 7.7 -19.9 7.3 -21.7 7.1 -19.9 7.5 -16.8
2025-12-13T03:24:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:24:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:24:46.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.058427
2025-12-13T03:24:46.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:24:46.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:24:46.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:24:46.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:24:46.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:24:46.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:24:18', tmtdew=1.54, humidity=89.69, cloud=0.0, wind=27.88, temperature=6.6, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:24:08.093', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:22:00')
2025-12-13T03:24:46.839 [DEBUG] [Thread-81669] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:24:46.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:24:46.936 [DEBUG] [Thread-81672] [transport.py] [_log()] starting thread (client mode): 0xf57011e0
2025-12-13T03:24:46.936 [DEBUG] [Thread-81672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:24:46.952 [DEBUG] [Thread-81672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:24:46.953 [INFO] [Thread-81672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:24:46.960 [DEBUG] [Thread-81672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:24:46.960 [DEBUG] [Thread-81672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:24:46.960 [DEBUG] [Thread-81672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] client lang: <none>
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] server lang: <none>
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] kex follows: False
2025-12-13T03:24:46.961 [DEBUG] [Thread-81672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:24:46.962 [DEBUG] [Thread-81672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:24:46.962 [DEBUG] [Thread-81672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:24:46.962 [DEBUG] [Thread-81672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:24:46.962 [DEBUG] [Thread-81672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:24:46.962 [DEBUG] [Thread-81672] [transport.py] [_log()] Compression: none
2025-12-13T03:24:46.962 [DEBUG] [Thread-81672] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:24:47.020 [DEBUG] [Thread-81672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:24:47.021 [DEBUG] [Thread-81672] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:24:47.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:24:47.022 [DEBUG] [Thread-81672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:24:47.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:24:47.076 [DEBUG] [Thread-81672] [transport.py] [_log()] userauth is OK
2025-12-13T03:24:47.076 [DEBUG] [Thread-81672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:24:47.076 [DEBUG] [Thread-81672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:24:47.076 [DEBUG] [Thread-81672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:24:47.077 [DEBUG] [Thread-81672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:24:47.096 [INFO] [Thread-81672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:24:47.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:24:47.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:24:47.962 [DEBUG] [Thread-81672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:24:47.962 [DEBUG] [Thread-81672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:24:48.010 [DEBUG] [Thread-81672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:24:48.010 [DEBUG] [Thread-81672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:24:48.019 [DEBUG] [Thread-81672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:24:48.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:24:48.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:24:48.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:24:48.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:24:48.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:24:48.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:24:48.053 [DEBUG] [Thread-81672] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:24:58.975 [DEBUG] [Thread-81674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:14.009 [DEBUG] [Thread-81675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:18.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:25:18.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:25:18.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:25:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 24, 51), 1.49, 90.22, 0.0, 33.45, 6.58, 2, 2, 0, 2, 0, 0),)
2025-12-13T03:25:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:24:51
2025-12-13T03:25:18.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:25:19.048 [DEBUG] [Thread-81676] [transport.py] [_log()] starting thread (client mode): 0xf5701b40
2025-12-13T03:25:19.048 [DEBUG] [Thread-81676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:25:19.068 [DEBUG] [Thread-81676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:25:19.068 [INFO] [Thread-81676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:25:19.069 [DEBUG] [Thread-81676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] client lang: <none>
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] server lang: <none>
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] kex follows: False
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] Compression: none
2025-12-13T03:25:19.070 [DEBUG] [Thread-81676] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:25:19.088 [DEBUG] [Thread-81676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:25:19.088 [DEBUG] [Thread-81676] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:25:19.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:25:19.089 [DEBUG] [Thread-81676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:25:19.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:25:19.091 [DEBUG] [Thread-81676] [transport.py] [_log()] userauth is OK
2025-12-13T03:25:19.091 [DEBUG] [Thread-81676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:25:19.091 [DEBUG] [Thread-81676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:25:19.091 [DEBUG] [Thread-81676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:25:19.091 [DEBUG] [Thread-81676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:25:19.112 [INFO] [Thread-81676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:25:19.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:25:19.745 [DEBUG] [Thread-81676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:25:19.745 [DEBUG] [Thread-81676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:25:19.745 [DEBUG] [Thread-81676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:25:19.786 [DEBUG] [Thread-81676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:25:19.786 [DEBUG] [Thread-81676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:25:19.789 [DEBUG] [Thread-81676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:25:19.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:25:19.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:25:19.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:25:19.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:25:19.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:25:19.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:25:19.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:25:19.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:25:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:25:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.058774 -999.00   +6.30  35.66     92   +5.20 1 2 2 3 1     0    0 0.63 -22.11 z.eSW 36.9 35.7 302.0 38.0 7.7 -21.0 7.4 -22.7 7.0 -20.0 7.5 -18.3
2025-12-13T03:25:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:25:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:25:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.058774
2025-12-13T03:25:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:25:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:25:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:25:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:25:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:25:19.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:24:51', tmtdew=1.49, humidity=90.22, cloud=0.0, wind=33.45, temperature=6.58, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:24:38.074', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:22:00')
2025-12-13T03:25:19.813 [DEBUG] [Thread-81676] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:25:19.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:25:19.912 [DEBUG] [Thread-81679] [transport.py] [_log()] starting thread (client mode): 0xf5740520
2025-12-13T03:25:19.912 [DEBUG] [Thread-81679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:25:19.928 [DEBUG] [Thread-81679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:25:19.928 [INFO] [Thread-81679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:25:19.940 [DEBUG] [Thread-81679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:25:19.940 [DEBUG] [Thread-81679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] client lang: <none>
2025-12-13T03:25:19.941 [DEBUG] [Thread-81679] [transport.py] [_log()] server lang: <none>
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] kex follows: False
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] Compression: none
2025-12-13T03:25:19.942 [DEBUG] [Thread-81679] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:25:20.000 [DEBUG] [Thread-81679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:25:20.001 [DEBUG] [Thread-81679] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:25:20.001 [DEBUG] [Thread-81679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:25:20.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:25:20.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:25:20.064 [DEBUG] [Thread-81679] [transport.py] [_log()] userauth is OK
2025-12-13T03:25:20.064 [DEBUG] [Thread-81679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:25:20.065 [DEBUG] [Thread-81679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:25:20.065 [DEBUG] [Thread-81679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:25:20.065 [DEBUG] [Thread-81679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:25:20.088 [INFO] [Thread-81679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:25:20.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:25:20.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:25:20.927 [DEBUG] [Thread-81679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:25:20.928 [DEBUG] [Thread-81679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:25:20.976 [DEBUG] [Thread-81679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:25:20.976 [DEBUG] [Thread-81679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:25:20.985 [DEBUG] [Thread-81679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:25:20.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:25:20.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:25:21.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:25:21.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:25:21.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:25:21.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:25:21.019 [DEBUG] [Thread-81679] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:25:29.038 [DEBUG] [Thread-81681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:38.602 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:38.603 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:38.799 [DEBUG] [Thread-81682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:44.079 [DEBUG] [Thread-81683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:25:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:25:51.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:25:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:25:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 25, 23), 1.49, 90.22, 0.0, 33.74, 6.55, 2, 2, 0, 2, 0, 0),)
2025-12-13T03:25:51.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:25:23
2025-12-13T03:25:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:25:51.990 [DEBUG] [Thread-81684] [transport.py] [_log()] starting thread (client mode): 0xf57015d0
2025-12-13T03:25:51.990 [DEBUG] [Thread-81684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:25:52.010 [DEBUG] [Thread-81684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:25:52.010 [INFO] [Thread-81684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] client lang: <none>
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] server lang: <none>
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] kex follows: False
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] Compression: none
2025-12-13T03:25:52.014 [DEBUG] [Thread-81684] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:25:52.031 [DEBUG] [Thread-81684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:25:52.032 [DEBUG] [Thread-81684] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:25:52.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:25:52.033 [DEBUG] [Thread-81684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:25:52.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:25:52.035 [DEBUG] [Thread-81684] [transport.py] [_log()] userauth is OK
2025-12-13T03:25:52.035 [DEBUG] [Thread-81684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:25:52.035 [DEBUG] [Thread-81684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:25:52.035 [DEBUG] [Thread-81684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:25:52.035 [DEBUG] [Thread-81684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:25:52.059 [INFO] [Thread-81684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:25:52.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:25:52.651 [DEBUG] [Thread-81684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:25:52.651 [DEBUG] [Thread-81684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:25:52.652 [DEBUG] [Thread-81684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:25:52.693 [DEBUG] [Thread-81684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:25:52.693 [DEBUG] [Thread-81684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:25:52.695 [DEBUG] [Thread-81684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:25:52.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:25:52.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:25:52.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:25:52.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:25:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:25:52.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:25:52.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:25:52.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:25:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:25:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.059121 -999.00   +6.30  35.84     92   +5.10 1 2 2 3 1     0    0 0.65 -20.25 Z.ESW 38.0 35.8 298.8 42.4 7.5 -20.9 7.2 -22.2 7.0 -21.3 7.4 -18.2
2025-12-13T03:25:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:25:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:25:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.059121
2025-12-13T03:25:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:25:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:25:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:25:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:25:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:25:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:25:23', tmtdew=1.49, humidity=90.22, cloud=0.0, wind=33.74, temperature=6.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:25:08.054', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:22:00')
2025-12-13T03:25:52.711 [DEBUG] [Thread-81684] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:25:52.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:25:52.808 [DEBUG] [Thread-81687] [transport.py] [_log()] starting thread (client mode): 0xf813df90
2025-12-13T03:25:52.808 [DEBUG] [Thread-81687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:25:52.823 [DEBUG] [Thread-81687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:25:52.823 [INFO] [Thread-81687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:25:52.830 [DEBUG] [Thread-81687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:25:52.830 [DEBUG] [Thread-81687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:25:52.830 [DEBUG] [Thread-81687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:25:52.830 [DEBUG] [Thread-81687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] client lang: <none>
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] server lang: <none>
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] kex follows: False
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:25:52.831 [DEBUG] [Thread-81687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:25:52.832 [DEBUG] [Thread-81687] [transport.py] [_log()] Compression: none
2025-12-13T03:25:52.832 [DEBUG] [Thread-81687] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:25:52.887 [DEBUG] [Thread-81687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:25:52.888 [DEBUG] [Thread-81687] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:25:52.889 [DEBUG] [Thread-81687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:25:52.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:25:52.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:25:52.943 [DEBUG] [Thread-81687] [transport.py] [_log()] userauth is OK
2025-12-13T03:25:52.943 [DEBUG] [Thread-81687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:25:52.943 [DEBUG] [Thread-81687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:25:52.943 [DEBUG] [Thread-81687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:25:52.943 [DEBUG] [Thread-81687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:25:52.966 [INFO] [Thread-81687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:25:52.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:25:52.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:25:53.807 [DEBUG] [Thread-81687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:25:53.807 [DEBUG] [Thread-81687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:25:53.855 [DEBUG] [Thread-81687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:25:53.855 [DEBUG] [Thread-81687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:25:53.864 [DEBUG] [Thread-81687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:25:53.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:25:53.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:25:53.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:25:53.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:25:53.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:25:53.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:25:53.898 [DEBUG] [Thread-81687] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:25:59.108 [DEBUG] [Thread-81689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:14.151 [DEBUG] [Thread-81690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:23.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:26:23.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:26:23.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:26:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 25, 55), 1.54, 90.19, 0.0, 29.73, 6.53, 1, 2, 0, 2, 0, 0),)
2025-12-13T03:26:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:25:55
2025-12-13T03:26:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:26:24.895 [DEBUG] [Thread-81691] [transport.py] [_log()] starting thread (client mode): 0xf5743dc0
2025-12-13T03:26:24.896 [DEBUG] [Thread-81691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:26:24.916 [DEBUG] [Thread-81691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:26:24.916 [INFO] [Thread-81691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:24.919 [DEBUG] [Thread-81691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] client lang: <none>
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] server lang: <none>
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] kex follows: False
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] Compression: none
2025-12-13T03:26:24.920 [DEBUG] [Thread-81691] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:26:24.940 [DEBUG] [Thread-81691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:26:24.941 [DEBUG] [Thread-81691] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:26:24.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:26:24.942 [DEBUG] [Thread-81691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:26:24.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:26:24.944 [DEBUG] [Thread-81691] [transport.py] [_log()] userauth is OK
2025-12-13T03:26:24.944 [DEBUG] [Thread-81691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:26:24.945 [DEBUG] [Thread-81691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:26:24.945 [DEBUG] [Thread-81691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:26:24.945 [DEBUG] [Thread-81691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:26:24.983 [INFO] [Thread-81691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:26:24.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:26:25.591 [DEBUG] [Thread-81691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:26:25.592 [DEBUG] [Thread-81691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:26:25.592 [DEBUG] [Thread-81691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:26:25.633 [DEBUG] [Thread-81691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:26:25.633 [DEBUG] [Thread-81691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:26:25.636 [DEBUG] [Thread-81691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:26:25.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:26:25.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:26:25.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:26:25.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:26:25.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:26:25.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:26:25.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:26:25.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:26:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:26:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.059816 -999.00   +6.30  35.97     92   +5.10 1 2 2 3 1     0    0 0.65 -19.37 Z.ESW 31.7 36.0 296.8 39.8 7.5 -23.1 7.3 -22.8 7.0 -21.1 7.4 -21.7
2025-12-13T03:26:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:26:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:26:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.059816
2025-12-13T03:26:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:26:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:26:25.659 [DEBUG] [Thread-81691] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:26:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:26:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:26:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:26:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:25:55', tmtdew=1.54, humidity=90.19, cloud=0.0, wind=29.73, temperature=6.53, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:26:08.102', atlas_cloud=2, atlas_rain=1, zp_data=[1.33575, 1.77625, 1.3312500000000007, 0.9894999999999996, 1.1724999999999994, 1.228250000000001, 1.3439999999999994, nan, nan, 1.322, 0.9652499999999993, 0.7210000000000001, 1.3009999999999993, nan, nan, nan, nan, 0.6385000000000005, 0.47799999999999976, 0.3822499999999991, 0.7979999999999992, nan, nan, nan, nan, 0.3965000000000005, 0.3472500000000007, 0.3230000000000004, 0.43599999999999994, nan, nan, nan, 0.5867499999999994], zp_timestamp='2025-12-13T01:22:00')
2025-12-13T03:26:25.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:26:25.756 [DEBUG] [Thread-81694] [transport.py] [_log()] starting thread (client mode): 0xf5743790
2025-12-13T03:26:25.757 [DEBUG] [Thread-81694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:26:25.771 [DEBUG] [Thread-81694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:26:25.771 [INFO] [Thread-81694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:26:25.778 [DEBUG] [Thread-81694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:26:25.779 [DEBUG] [Thread-81694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] client lang: <none>
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] server lang: <none>
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] kex follows: False
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] Compression: none
2025-12-13T03:26:25.780 [DEBUG] [Thread-81694] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:26:25.836 [DEBUG] [Thread-81694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:26:25.837 [DEBUG] [Thread-81694] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:26:25.837 [DEBUG] [Thread-81694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:26:25.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:26:25.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:26:25.892 [DEBUG] [Thread-81694] [transport.py] [_log()] userauth is OK
2025-12-13T03:26:25.893 [DEBUG] [Thread-81694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:26:25.893 [DEBUG] [Thread-81694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:26:25.893 [DEBUG] [Thread-81694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:26:25.893 [DEBUG] [Thread-81694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:26:25.911 [INFO] [Thread-81694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:26:25.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:26:25.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:26:26.703 [DEBUG] [Thread-81694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:26:26.703 [DEBUG] [Thread-81694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:26:26.751 [DEBUG] [Thread-81694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:26:26.751 [DEBUG] [Thread-81694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:26:26.760 [DEBUG] [Thread-81694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:26:26.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:26:26.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:26:26.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:26:26.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:26:26.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:26:26.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:26:26.795 [DEBUG] [Thread-81694] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:26:29.176 [DEBUG] [Thread-81696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:38.807 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:38.808 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:38.876 [DEBUG] [Thread-81697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:44.223 [DEBUG] [Thread-81698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:26:56.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:26:56.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:26:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 26, 27), 1.55, 90.16, 0.0, 27.38, 6.48, 1, 2, 0, 2, 0, 0),)
2025-12-13T03:26:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:26:27
2025-12-13T03:26:57.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:26:57.817 [DEBUG] [Thread-81699] [transport.py] [_log()] starting thread (client mode): 0xf813f190
2025-12-13T03:26:57.817 [DEBUG] [Thread-81699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:26:57.837 [DEBUG] [Thread-81699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:26:57.837 [INFO] [Thread-81699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] client lang: <none>
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] server lang: <none>
2025-12-13T03:26:57.840 [DEBUG] [Thread-81699] [transport.py] [_log()] kex follows: False
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] Compression: none
2025-12-13T03:26:57.841 [DEBUG] [Thread-81699] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:26:57.858 [DEBUG] [Thread-81699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:26:57.858 [DEBUG] [Thread-81699] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:26:57.858 [DEBUG] [Thread-81699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:26:57.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:26:57.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:26:57.859 [DEBUG] [Thread-81699] [transport.py] [_log()] userauth is OK
2025-12-13T03:26:57.859 [DEBUG] [Thread-81699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:26:57.859 [DEBUG] [Thread-81699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:26:57.859 [DEBUG] [Thread-81699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:26:57.859 [DEBUG] [Thread-81699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:26:57.874 [INFO] [Thread-81699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:26:57.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:26:58.481 [DEBUG] [Thread-81699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:26:58.481 [DEBUG] [Thread-81699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:26:58.481 [DEBUG] [Thread-81699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:26:58.522 [DEBUG] [Thread-81699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:26:58.522 [DEBUG] [Thread-81699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:26:58.524 [DEBUG] [Thread-81699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:26:58.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:26:58.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:26:58.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:26:58.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:26:58.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:26:58.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:26:58.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.060163 -999.00   +6.30  30.54     92   +5.10 1 2 2 3 1     0    0 0.75 -17.84 Z.ESW 31.5 30.5 296.6 40.8 7.5 -22.1 7.2 -21.8 6.9 -20.2 7.3 -21.4
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.060163
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:26:58.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:26:27', tmtdew=1.55, humidity=90.16, cloud=0.0, wind=27.38, temperature=6.48, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:26:38.083', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:25:00')
2025-12-13T03:26:58.535 [DEBUG] [Thread-81699] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:26:58.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:26:58.624 [DEBUG] [Thread-81702] [transport.py] [_log()] starting thread (client mode): 0xf813c7c0
2025-12-13T03:26:58.624 [DEBUG] [Thread-81702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:26:58.639 [DEBUG] [Thread-81702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:26:58.639 [INFO] [Thread-81702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] client lang: <none>
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] server lang: <none>
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] kex follows: False
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] Compression: none
2025-12-13T03:26:58.647 [DEBUG] [Thread-81702] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:26:58.705 [DEBUG] [Thread-81702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:26:58.706 [DEBUG] [Thread-81702] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:26:58.707 [DEBUG] [Thread-81702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:26:58.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:26:58.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:26:58.762 [DEBUG] [Thread-81702] [transport.py] [_log()] userauth is OK
2025-12-13T03:26:58.762 [DEBUG] [Thread-81702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:26:58.762 [DEBUG] [Thread-81702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:26:58.762 [DEBUG] [Thread-81702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:26:58.762 [DEBUG] [Thread-81702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:26:58.780 [INFO] [Thread-81702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:26:58.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:26:58.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:26:59.250 [DEBUG] [Thread-81704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:26:59.592 [DEBUG] [Thread-81702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:26:59.593 [DEBUG] [Thread-81702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:26:59.641 [DEBUG] [Thread-81702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:26:59.641 [DEBUG] [Thread-81702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:26:59.650 [DEBUG] [Thread-81702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:26:59.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:26:59.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:26:59.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:26:59.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:26:59.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:26:59.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:26:59.684 [DEBUG] [Thread-81702] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:27:14.306 [DEBUG] [Thread-81705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:27:29.337 [DEBUG] [Thread-81706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:27:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:27:29.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:27:29.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:27:30.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 26, 59), 1.54, 90.19, 0.0, 28.79, 6.48, 1, 2, 0, 2, 0, 0),)
2025-12-13T03:27:30.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:26:59
2025-12-13T03:27:30.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:27:30.674 [DEBUG] [Thread-81707] [transport.py] [_log()] starting thread (client mode): 0xf57408b0
2025-12-13T03:27:30.674 [DEBUG] [Thread-81707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:27:30.694 [DEBUG] [Thread-81707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:27:30.694 [INFO] [Thread-81707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:27:30.697 [DEBUG] [Thread-81707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] client lang: <none>
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] server lang: <none>
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] kex follows: False
2025-12-13T03:27:30.698 [DEBUG] [Thread-81707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:27:30.699 [DEBUG] [Thread-81707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:27:30.699 [DEBUG] [Thread-81707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:27:30.699 [DEBUG] [Thread-81707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:27:30.699 [DEBUG] [Thread-81707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:27:30.699 [DEBUG] [Thread-81707] [transport.py] [_log()] Compression: none
2025-12-13T03:27:30.699 [DEBUG] [Thread-81707] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:27:30.716 [DEBUG] [Thread-81707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:27:30.717 [DEBUG] [Thread-81707] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:27:30.718 [DEBUG] [Thread-81707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:27:30.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:27:30.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:27:30.720 [DEBUG] [Thread-81707] [transport.py] [_log()] userauth is OK
2025-12-13T03:27:30.720 [DEBUG] [Thread-81707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:27:30.720 [DEBUG] [Thread-81707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:27:30.720 [DEBUG] [Thread-81707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:27:30.720 [DEBUG] [Thread-81707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:27:30.757 [INFO] [Thread-81707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:27:30.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:27:31.388 [DEBUG] [Thread-81707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:27:31.388 [DEBUG] [Thread-81707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:27:31.389 [DEBUG] [Thread-81707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:27:31.429 [DEBUG] [Thread-81707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:27:31.429 [DEBUG] [Thread-81707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:27:31.432 [DEBUG] [Thread-81707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:27:31.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:27:31.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:27:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:27:31.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:27:31.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:27:31.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:27:31.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:27:31.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:27:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:27:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.060510 -999.00   +6.20  34.44     92   +5.10 1 2 2 3 1     0    0 0.72 -17.89 Z.ESW 41.2 34.4 294.6 43.1 7.4 -22.6 7.2 -22.4 6.8 -21.1 7.3 -20.8
2025-12-13T03:27:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:27:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:27:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.060510
2025-12-13T03:27:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:27:31.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:27:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:27:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:27:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:27:31.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:26:59', tmtdew=1.54, humidity=90.19, cloud=0.0, wind=28.79, temperature=6.48, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:27:08.064', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:25:00')
2025-12-13T03:27:31.455 [DEBUG] [Thread-81707] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:27:31.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:27:31.563 [DEBUG] [Thread-81710] [transport.py] [_log()] starting thread (client mode): 0xf813d030
2025-12-13T03:27:31.563 [DEBUG] [Thread-81710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:27:31.581 [DEBUG] [Thread-81710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:27:31.581 [INFO] [Thread-81710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:27:31.589 [DEBUG] [Thread-81710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:27:31.589 [DEBUG] [Thread-81710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:27:31.589 [DEBUG] [Thread-81710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:27:31.589 [DEBUG] [Thread-81710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] client lang: <none>
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] server lang: <none>
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] kex follows: False
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] Compression: none
2025-12-13T03:27:31.590 [DEBUG] [Thread-81710] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:27:31.647 [DEBUG] [Thread-81710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:27:31.647 [DEBUG] [Thread-81710] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:27:31.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:27:31.648 [DEBUG] [Thread-81710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:27:31.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:27:31.703 [DEBUG] [Thread-81710] [transport.py] [_log()] userauth is OK
2025-12-13T03:27:31.703 [DEBUG] [Thread-81710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:27:31.703 [DEBUG] [Thread-81710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:27:31.703 [DEBUG] [Thread-81710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:27:31.703 [DEBUG] [Thread-81710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:27:31.720 [INFO] [Thread-81710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:27:31.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:27:31.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:27:32.559 [DEBUG] [Thread-81710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:27:32.559 [DEBUG] [Thread-81710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:27:32.606 [DEBUG] [Thread-81710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:27:32.607 [DEBUG] [Thread-81710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:27:32.615 [DEBUG] [Thread-81710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:27:32.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:27:32.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:27:32.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:27:32.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:27:32.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:27:32.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:27:32.647 [DEBUG] [Thread-81710] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:27:38.960 [DEBUG] [Thread-81712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:27:39.012 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:27:39.014 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:27:44.368 [DEBUG] [Thread-81713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:27:59.410 [DEBUG] [Thread-81714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:28:02.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:28:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:28:03.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 27, 31), 1.55, 90.16, 0.0, 26.89, 6.48, 1, 2, 0, 2, 0, 0),)
2025-12-13T03:28:03.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:27:31
2025-12-13T03:28:03.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:28:03.641 [DEBUG] [Thread-81715] [transport.py] [_log()] starting thread (client mode): 0xf575ef80
2025-12-13T03:28:03.641 [DEBUG] [Thread-81715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:28:03.663 [DEBUG] [Thread-81715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:28:03.663 [INFO] [Thread-81715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] client lang: <none>
2025-12-13T03:28:03.666 [DEBUG] [Thread-81715] [transport.py] [_log()] server lang: <none>
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] kex follows: False
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] Compression: none
2025-12-13T03:28:03.667 [DEBUG] [Thread-81715] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:28:03.684 [DEBUG] [Thread-81715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:28:03.684 [DEBUG] [Thread-81715] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:28:03.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:28:03.685 [DEBUG] [Thread-81715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:28:03.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:28:03.687 [DEBUG] [Thread-81715] [transport.py] [_log()] userauth is OK
2025-12-13T03:28:03.688 [DEBUG] [Thread-81715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:28:03.688 [DEBUG] [Thread-81715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:28:03.688 [DEBUG] [Thread-81715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:28:03.688 [DEBUG] [Thread-81715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:28:03.706 [INFO] [Thread-81715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:28:03.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:28:04.301 [DEBUG] [Thread-81715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:28:04.301 [DEBUG] [Thread-81715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:28:04.301 [DEBUG] [Thread-81715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:28:04.342 [DEBUG] [Thread-81715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:28:04.342 [DEBUG] [Thread-81715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:28:04.345 [DEBUG] [Thread-81715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:28:04.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:28:04.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:28:04.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:28:04.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:28:04.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:28:04.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:28:04.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.060857 -999.00   +6.20  28.76     92   +5.10 1 2 1 3 1     0    0 0.75 -16.39 Z.ESW 31.1 28.8 302.2 46.3 7.4 -22.4 7.2 -22.9 6.8 -21.1 7.2 -20.4
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.060857
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:28:04.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:27:31', tmtdew=1.55, humidity=90.16, cloud=0.0, wind=26.89, temperature=6.48, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:27:38.045', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:25:00')
2025-12-13T03:28:04.362 [DEBUG] [Thread-81715] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:28:04.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:28:04.447 [DEBUG] [Thread-81718] [transport.py] [_log()] starting thread (client mode): 0xf57a8df0
2025-12-13T03:28:04.447 [DEBUG] [Thread-81718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:28:04.463 [DEBUG] [Thread-81718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:28:04.463 [INFO] [Thread-81718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] client lang: <none>
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] server lang: <none>
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] kex follows: False
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:28:04.471 [DEBUG] [Thread-81718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:28:04.472 [DEBUG] [Thread-81718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:28:04.472 [DEBUG] [Thread-81718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:28:04.472 [DEBUG] [Thread-81718] [transport.py] [_log()] Compression: none
2025-12-13T03:28:04.472 [DEBUG] [Thread-81718] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:28:04.527 [DEBUG] [Thread-81718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:28:04.527 [DEBUG] [Thread-81718] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:28:04.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:28:04.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:28:04.527 [DEBUG] [Thread-81718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:28:04.584 [DEBUG] [Thread-81718] [transport.py] [_log()] userauth is OK
2025-12-13T03:28:04.584 [DEBUG] [Thread-81718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:28:04.584 [DEBUG] [Thread-81718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:28:04.584 [DEBUG] [Thread-81718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:28:04.584 [DEBUG] [Thread-81718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:28:04.599 [INFO] [Thread-81718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:28:04.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:28:04.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:28:05.469 [DEBUG] [Thread-81718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:28:05.469 [DEBUG] [Thread-81718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:28:05.518 [DEBUG] [Thread-81718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:28:05.518 [DEBUG] [Thread-81718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:28:05.526 [DEBUG] [Thread-81718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:28:05.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:28:05.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:28:05.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:28:05.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:28:05.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:28:05.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:28:05.557 [DEBUG] [Thread-81718] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:28:14.441 [DEBUG] [Thread-81720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:29.475 [DEBUG] [Thread-81721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:35.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:28:35.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:28:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:28:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 28, 3), 1.54, 90.17, 0.0, 26.57, 6.45, 1, 2, 0, 2, 0, 0),)
2025-12-13T03:28:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:28:03
2025-12-13T03:28:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:28:36.533 [DEBUG] [Thread-81722] [transport.py] [_log()] starting thread (client mode): 0xf5740790
2025-12-13T03:28:36.534 [DEBUG] [Thread-81722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:28:36.553 [DEBUG] [Thread-81722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:28:36.553 [INFO] [Thread-81722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:28:36.556 [DEBUG] [Thread-81722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:28:36.556 [DEBUG] [Thread-81722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:28:36.556 [DEBUG] [Thread-81722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:28:36.556 [DEBUG] [Thread-81722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] client lang: <none>
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] server lang: <none>
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] kex follows: False
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] Compression: none
2025-12-13T03:28:36.557 [DEBUG] [Thread-81722] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:28:36.573 [DEBUG] [Thread-81722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:28:36.573 [DEBUG] [Thread-81722] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:28:36.574 [DEBUG] [Thread-81722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:28:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:28:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:28:36.575 [DEBUG] [Thread-81722] [transport.py] [_log()] userauth is OK
2025-12-13T03:28:36.575 [DEBUG] [Thread-81722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:28:36.575 [DEBUG] [Thread-81722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:28:36.575 [DEBUG] [Thread-81722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:28:36.575 [DEBUG] [Thread-81722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:28:36.594 [INFO] [Thread-81722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:28:36.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:28:37.224 [DEBUG] [Thread-81722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:28:37.224 [DEBUG] [Thread-81722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:28:37.225 [DEBUG] [Thread-81722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:28:37.266 [DEBUG] [Thread-81722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:28:37.266 [DEBUG] [Thread-81722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:28:37.268 [DEBUG] [Thread-81722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:28:37.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:28:37.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:28:37.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:28:37.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:28:37.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:28:37.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:28:37.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.061204 -999.00   +6.20  33.03     92   +5.00 1 2 2 3 1     0    0 0.79 -14.88 Z.ESW 37.4 33.0 301.8 37.0 7.4 -22.9 7.2 -22.8 6.8 -20.2 7.2 -21.3
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.061204
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:28:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:28:03', tmtdew=1.54, humidity=90.17, cloud=0.0, wind=26.57, temperature=6.45, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:28:08.026', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:25:00')
2025-12-13T03:28:37.287 [DEBUG] [Thread-81722] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:28:37.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:28:37.373 [DEBUG] [Thread-81725] [transport.py] [_log()] starting thread (client mode): 0xf57a9870
2025-12-13T03:28:37.373 [DEBUG] [Thread-81725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:28:37.388 [DEBUG] [Thread-81725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:28:37.388 [INFO] [Thread-81725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:28:37.395 [DEBUG] [Thread-81725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:28:37.395 [DEBUG] [Thread-81725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:28:37.395 [DEBUG] [Thread-81725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:28:37.395 [DEBUG] [Thread-81725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:37.395 [DEBUG] [Thread-81725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] client lang: <none>
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] server lang: <none>
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] kex follows: False
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] Compression: none
2025-12-13T03:28:37.396 [DEBUG] [Thread-81725] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:28:37.456 [DEBUG] [Thread-81725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:28:37.456 [DEBUG] [Thread-81725] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:28:37.456 [DEBUG] [Thread-81725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:28:37.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:28:37.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:28:37.513 [DEBUG] [Thread-81725] [transport.py] [_log()] userauth is OK
2025-12-13T03:28:37.513 [DEBUG] [Thread-81725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:28:37.513 [DEBUG] [Thread-81725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:28:37.513 [DEBUG] [Thread-81725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:28:37.513 [DEBUG] [Thread-81725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:28:37.527 [INFO] [Thread-81725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:28:37.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:28:37.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:28:38.330 [DEBUG] [Thread-81725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:28:38.331 [DEBUG] [Thread-81725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:28:38.379 [DEBUG] [Thread-81725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:28:38.379 [DEBUG] [Thread-81725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:28:38.388 [DEBUG] [Thread-81725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:28:38.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:28:38.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:28:38.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:28:38.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:28:38.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:28:38.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:28:38.423 [DEBUG] [Thread-81725] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:28:39.046 [DEBUG] [Thread-81727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:39.215 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:39.216 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:44.505 [DEBUG] [Thread-81728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:28:59.548 [DEBUG] [Thread-81729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:08.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:29:08.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:29: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
2025-12-13T03:29:09.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 28, 35), 1.54, 89.72, 0.0, 33.54, 6.45, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:29:09.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:28:35
2025-12-13T03:29:09.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:29:09.468 [DEBUG] [Thread-81730] [transport.py] [_log()] starting thread (client mode): 0xf57abb50
2025-12-13T03:29:09.468 [DEBUG] [Thread-81730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:29:09.488 [DEBUG] [Thread-81730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:29:09.488 [INFO] [Thread-81730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] client lang: <none>
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] server lang: <none>
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] kex follows: False
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] Compression: none
2025-12-13T03:29:09.491 [DEBUG] [Thread-81730] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:29:09.498 [DEBUG] [Thread-81730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:29:09.498 [DEBUG] [Thread-81730] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:29:09.498 [DEBUG] [Thread-81730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:29:09.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:29:09.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:29:09.499 [DEBUG] [Thread-81730] [transport.py] [_log()] userauth is OK
2025-12-13T03:29:09.499 [DEBUG] [Thread-81730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:29:09.499 [DEBUG] [Thread-81730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:29:09.499 [DEBUG] [Thread-81730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:29:09.499 [DEBUG] [Thread-81730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:29:09.514 [INFO] [Thread-81730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:29:09.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:29:10.106 [DEBUG] [Thread-81730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:29:10.106 [DEBUG] [Thread-81730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:29:10.106 [DEBUG] [Thread-81730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:29:10.147 [DEBUG] [Thread-81730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:29:10.147 [DEBUG] [Thread-81730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:29:10.149 [DEBUG] [Thread-81730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:29:10.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:29:10.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:29:10.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:29:10.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:29:10.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:29:10.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.061552 -999.00   +6.20  38.00     91   +5.00 1 1 2 3 1     0    0 0.79 -14.50 ZNESW 41.2 38.0 301.4 44.2 7.3 -21.7 7.2 -21.5 6.8 -17.8 7.2 -20.3
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.061552
2025-12-13T03:29:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:29:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:29:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:29:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:29:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T03:29:10.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:28:35', tmtdew=1.54, humidity=89.72, cloud=0.0, wind=33.54, temperature=6.45, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:28:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:25:00')
2025-12-13T03:29:10.167 [DEBUG] [Thread-81730] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:29:10.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:29:10.252 [DEBUG] [Thread-81733] [transport.py] [_log()] starting thread (client mode): 0xf5701ea0
2025-12-13T03:29:10.252 [DEBUG] [Thread-81733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:29:10.267 [DEBUG] [Thread-81733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:29:10.267 [INFO] [Thread-81733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] client lang: <none>
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] server lang: <none>
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] kex follows: False
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] Compression: none
2025-12-13T03:29:10.275 [DEBUG] [Thread-81733] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:29:10.334 [DEBUG] [Thread-81733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:29:10.334 [DEBUG] [Thread-81733] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:29:10.335 [DEBUG] [Thread-81733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:29:10.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:29:10.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:29:10.390 [DEBUG] [Thread-81733] [transport.py] [_log()] userauth is OK
2025-12-13T03:29:10.390 [DEBUG] [Thread-81733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:29:10.390 [DEBUG] [Thread-81733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:29:10.391 [DEBUG] [Thread-81733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:29:10.391 [DEBUG] [Thread-81733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:29:10.409 [INFO] [Thread-81733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:29:10.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:29:10.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:29:11.260 [DEBUG] [Thread-81733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:29:11.260 [DEBUG] [Thread-81733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:29:11.308 [DEBUG] [Thread-81733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:29:11.308 [DEBUG] [Thread-81733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:29:11.317 [DEBUG] [Thread-81733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:29:11.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:29:11.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:29:11.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:29:11.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:29:11.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:29:11.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:29:11.350 [DEBUG] [Thread-81733] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:29:14.579 [DEBUG] [Thread-81735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:29.621 [DEBUG] [Thread-81736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:39.125 [DEBUG] [Thread-81737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:39.419 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:39.420 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:41.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:29:41.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:29:41.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:29:42.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 29, 7), 1.53, 89.72, 0.0, 31.27, 6.41, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:29:42.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:29:07
2025-12-13T03:29:42.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:29:42.392 [DEBUG] [Thread-81738] [transport.py] [_log()] starting thread (client mode): 0xf57011e0
2025-12-13T03:29:42.392 [DEBUG] [Thread-81738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:29:42.403 [DEBUG] [Thread-81738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:29:42.403 [INFO] [Thread-81738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:29:42.404 [DEBUG] [Thread-81738] [transport.py] [_log()] client lang: <none>
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] server lang: <none>
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] kex follows: False
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] Compression: none
2025-12-13T03:29:42.405 [DEBUG] [Thread-81738] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:29:42.414 [DEBUG] [Thread-81738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:29:42.414 [DEBUG] [Thread-81738] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:29:42.415 [DEBUG] [Thread-81738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:29:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:29:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:29:42.416 [DEBUG] [Thread-81738] [transport.py] [_log()] userauth is OK
2025-12-13T03:29:42.416 [DEBUG] [Thread-81738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:29:42.416 [DEBUG] [Thread-81738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:29:42.416 [DEBUG] [Thread-81738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:29:42.416 [DEBUG] [Thread-81738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:29:42.434 [INFO] [Thread-81738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:29:42.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:29:42.991 [DEBUG] [Thread-81738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:29:42.991 [DEBUG] [Thread-81738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:29:42.991 [DEBUG] [Thread-81738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:29:43.032 [DEBUG] [Thread-81738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:29:43.033 [DEBUG] [Thread-81738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:29:43.035 [DEBUG] [Thread-81738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:29:43.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:29:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:29:43.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:29:43.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:29:43.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:29:43.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:29:43.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:29:43.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:29:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:29:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.062246 -999.00   +6.20  33.72     91   +5.00 1 1 2 3 1     0    0 0.89 -11.81 ZNESW 32.9 33.7 295.6 44.9 7.3 -17.8 7.1 -18.0 6.8 -17.5 7.2 -16.1
2025-12-13T03:29:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:29:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:29:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.062246
2025-12-13T03:29:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:29:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:29:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:29:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:29:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T03:29:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:29:07', tmtdew=1.53, humidity=89.72, cloud=0.0, wind=31.27, temperature=6.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:29:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:25:00')
2025-12-13T03:29:43.057 [DEBUG] [Thread-81738] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:29:43.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:29:43.151 [DEBUG] [Thread-81741] [transport.py] [_log()] starting thread (client mode): 0xf57aa740
2025-12-13T03:29:43.152 [DEBUG] [Thread-81741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:29:43.166 [DEBUG] [Thread-81741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:29:43.167 [INFO] [Thread-81741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:29:43.174 [DEBUG] [Thread-81741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] client lang: <none>
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] server lang: <none>
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] kex follows: False
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] Compression: none
2025-12-13T03:29:43.175 [DEBUG] [Thread-81741] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:29:43.231 [DEBUG] [Thread-81741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:29:43.232 [DEBUG] [Thread-81741] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:29:43.232 [DEBUG] [Thread-81741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:29:43.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:29:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:29:43.287 [DEBUG] [Thread-81741] [transport.py] [_log()] userauth is OK
2025-12-13T03:29:43.288 [DEBUG] [Thread-81741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:29:43.288 [DEBUG] [Thread-81741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:29:43.288 [DEBUG] [Thread-81741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:29:43.288 [DEBUG] [Thread-81741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:29:43.306 [INFO] [Thread-81741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:29:43.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:29:43.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:29:44.086 [DEBUG] [Thread-81741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:29:44.086 [DEBUG] [Thread-81741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:29:44.134 [DEBUG] [Thread-81741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:29:44.134 [DEBUG] [Thread-81741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:29:44.143 [DEBUG] [Thread-81741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:29:44.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:29:44.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:29:44.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:29:44.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:29:44.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:29:44.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:29:44.177 [DEBUG] [Thread-81741] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:29:44.646 [DEBUG] [Thread-81743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:29:59.687 [DEBUG] [Thread-81744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:30:14.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:30:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:30:14.712 [DEBUG] [Thread-81745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 29, 39), 1.53, 89.74, 0.0, 32.08, 6.41, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:30:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:29:39
2025-12-13T03:30:15.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:30:15.171 [DEBUG] [Thread-81746] [transport.py] [_log()] starting thread (client mode): 0xf57015d0
2025-12-13T03:30:15.172 [DEBUG] [Thread-81746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:30:15.191 [DEBUG] [Thread-81746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:30:15.191 [INFO] [Thread-81746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:30:15.194 [DEBUG] [Thread-81746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] client lang: <none>
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] server lang: <none>
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] kex follows: False
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] Compression: none
2025-12-13T03:30:15.195 [DEBUG] [Thread-81746] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:30:15.213 [DEBUG] [Thread-81746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:30:15.213 [DEBUG] [Thread-81746] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:30:15.214 [DEBUG] [Thread-81746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:30:15.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:30:15.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:30:15.257 [DEBUG] [Thread-81746] [transport.py] [_log()] userauth is OK
2025-12-13T03:30:15.257 [DEBUG] [Thread-81746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:30:15.257 [DEBUG] [Thread-81746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:30:15.257 [DEBUG] [Thread-81746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:30:15.257 [DEBUG] [Thread-81746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:30:15.289 [INFO] [Thread-81746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:30:15.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:30:16.397 [DEBUG] [Thread-81746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:30:16.397 [DEBUG] [Thread-81746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:30:16.397 [DEBUG] [Thread-81746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:30:16.438 [DEBUG] [Thread-81746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:30:16.438 [DEBUG] [Thread-81746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:30:16.441 [DEBUG] [Thread-81746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:30:16.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:30:16.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:30:16.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:30:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:30:16.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:30:16.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:30:16.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:30:16.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:30:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:30:16.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.062246 -999.00   +6.20  33.72     91   +5.00 1 1 2 3 1     0    0 0.89 -11.81 ZNESW 32.9 33.7 295.6 44.9 7.3 -17.8 7.1 -18.0 6.8 -17.5 7.2 -16.1
2025-12-13T03:30:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:30:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:30:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.062246
2025-12-13T03:30:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:30:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:30:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:30:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:30:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T03:30:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:29:39', tmtdew=1.53, humidity=89.74, cloud=0.0, wind=32.08, temperature=6.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:29:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:29:00')
2025-12-13T03:30:16.462 [DEBUG] [Thread-81746] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:30:16.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:30:16.559 [DEBUG] [Thread-81749] [transport.py] [_log()] starting thread (client mode): 0xf8189b40
2025-12-13T03:30:16.559 [DEBUG] [Thread-81749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:30:16.574 [DEBUG] [Thread-81749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:30:16.574 [INFO] [Thread-81749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:30:16.582 [DEBUG] [Thread-81749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:30:16.582 [DEBUG] [Thread-81749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:30:16.582 [DEBUG] [Thread-81749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:30:16.582 [DEBUG] [Thread-81749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:16.582 [DEBUG] [Thread-81749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] client lang: <none>
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] server lang: <none>
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] kex follows: False
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] Compression: none
2025-12-13T03:30:16.583 [DEBUG] [Thread-81749] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:30:16.645 [DEBUG] [Thread-81749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:30:16.646 [DEBUG] [Thread-81749] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:30:16.646 [DEBUG] [Thread-81749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:30:16.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:30:16.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:30:16.704 [DEBUG] [Thread-81749] [transport.py] [_log()] userauth is OK
2025-12-13T03:30:16.705 [DEBUG] [Thread-81749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:30:16.705 [DEBUG] [Thread-81749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:30:16.705 [DEBUG] [Thread-81749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:30:16.705 [DEBUG] [Thread-81749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:30:16.724 [INFO] [Thread-81749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:30:16.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:30:16.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:30:17.598 [DEBUG] [Thread-81749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:30:17.598 [DEBUG] [Thread-81749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:30:17.646 [DEBUG] [Thread-81749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:30:17.646 [DEBUG] [Thread-81749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:30:17.655 [DEBUG] [Thread-81749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:30:17.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:30:17.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:30:17.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:30:17.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:30:17.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:30:17.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:30:17.690 [DEBUG] [Thread-81749] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:30:29.740 [DEBUG] [Thread-81751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:39.200 [DEBUG] [Thread-81752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:39.624 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:39.625 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:44.781 [DEBUG] [Thread-81753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:30:47.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:30:47.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:30:47.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:30:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 30, 44), 1.54, 89.69, 0.0, 25.27, 6.4, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:30:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:30:44
2025-12-13T03:30:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:30:48.721 [DEBUG] [Thread-81754] [transport.py] [_log()] starting thread (client mode): 0xf575c1f0
2025-12-13T03:30:48.721 [DEBUG] [Thread-81754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:30:48.743 [DEBUG] [Thread-81754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:30:48.743 [INFO] [Thread-81754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:30:48.746 [DEBUG] [Thread-81754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:30:48.746 [DEBUG] [Thread-81754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] client lang: <none>
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] server lang: <none>
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] kex follows: False
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] Compression: none
2025-12-13T03:30:48.747 [DEBUG] [Thread-81754] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:30:48.763 [DEBUG] [Thread-81754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:30:48.763 [DEBUG] [Thread-81754] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:30:48.763 [DEBUG] [Thread-81754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:30:48.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:30:48.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:30:48.764 [DEBUG] [Thread-81754] [transport.py] [_log()] userauth is OK
2025-12-13T03:30:48.764 [DEBUG] [Thread-81754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:30:48.764 [DEBUG] [Thread-81754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:30:48.764 [DEBUG] [Thread-81754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:30:48.764 [DEBUG] [Thread-81754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:30:48.779 [INFO] [Thread-81754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:30:48.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:30:49.406 [DEBUG] [Thread-81754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:30:49.407 [DEBUG] [Thread-81754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:30:49.407 [DEBUG] [Thread-81754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:30:49.448 [DEBUG] [Thread-81754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:30:49.448 [DEBUG] [Thread-81754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:30:49.450 [DEBUG] [Thread-81754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:30:49.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:30:49.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:30:49.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:30:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:30:49.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:30:49.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:30:49.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.062593 -999.00   +6.20  36.51     91   +5.00 1 2 2 3 1     0    0 0.91 -11.36 ZNESw 33.8 36.5 296.6 40.4 7.3 -21.2 7.1 -21.2 6.8 -19.1 7.2 -19.3
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.062593
2025-12-13T03:30:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:30:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:30:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:30:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:30:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:30:49.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:30:44', tmtdew=1.54, humidity=89.69, cloud=0.0, wind=25.27, temperature=6.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:30:08.035', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:29:00')
2025-12-13T03:30:49.471 [DEBUG] [Thread-81754] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:30:49.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:30:49.556 [DEBUG] [Thread-81757] [transport.py] [_log()] starting thread (client mode): 0xf575cfa0
2025-12-13T03:30:49.557 [DEBUG] [Thread-81757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:30:49.571 [DEBUG] [Thread-81757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:30:49.571 [INFO] [Thread-81757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] client lang: <none>
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] server lang: <none>
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] kex follows: False
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] Compression: none
2025-12-13T03:30:49.579 [DEBUG] [Thread-81757] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:30:49.636 [DEBUG] [Thread-81757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:30:49.637 [DEBUG] [Thread-81757] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:30:49.637 [DEBUG] [Thread-81757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:30:49.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:30:49.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:30:49.693 [DEBUG] [Thread-81757] [transport.py] [_log()] userauth is OK
2025-12-13T03:30:49.693 [DEBUG] [Thread-81757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:30:49.693 [DEBUG] [Thread-81757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:30:49.693 [DEBUG] [Thread-81757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:30:49.693 [DEBUG] [Thread-81757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:30:49.708 [INFO] [Thread-81757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:30:49.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:30:49.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:30:50.530 [DEBUG] [Thread-81757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:30:50.530 [DEBUG] [Thread-81757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:30:50.578 [DEBUG] [Thread-81757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:30:50.578 [DEBUG] [Thread-81757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:30:50.586 [DEBUG] [Thread-81757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:30:50.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:30:50.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:30:50.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
2025-12-13T03:30:50.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:30:50.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:30:50.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:30:50.618 [DEBUG] [Thread-81757] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:30:59.808 [DEBUG] [Thread-81759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:14.854 [DEBUG] [Thread-81760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:20.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:31:20.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:31:20.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:31:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 31, 16), 1.53, 89.74, 0.0, 27.1, 6.38, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:31:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:31:16
2025-12-13T03:31:21.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:31:21.596 [DEBUG] [Thread-81761] [transport.py] [_log()] starting thread (client mode): 0xf575d120
2025-12-13T03:31:21.596 [DEBUG] [Thread-81761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:31:21.614 [DEBUG] [Thread-81761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:31:21.614 [INFO] [Thread-81761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:31:21.617 [DEBUG] [Thread-81761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] client lang: <none>
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] server lang: <none>
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] kex follows: False
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:31:21.618 [DEBUG] [Thread-81761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:31:21.619 [DEBUG] [Thread-81761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:31:21.619 [DEBUG] [Thread-81761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:31:21.619 [DEBUG] [Thread-81761] [transport.py] [_log()] Compression: none
2025-12-13T03:31:21.619 [DEBUG] [Thread-81761] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:31:21.636 [DEBUG] [Thread-81761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:31:21.637 [DEBUG] [Thread-81761] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:31:21.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:31:21.638 [DEBUG] [Thread-81761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:31:21.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:31:21.641 [DEBUG] [Thread-81761] [transport.py] [_log()] userauth is OK
2025-12-13T03:31:21.641 [DEBUG] [Thread-81761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:31:21.641 [DEBUG] [Thread-81761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:31:21.641 [DEBUG] [Thread-81761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:31:21.641 [DEBUG] [Thread-81761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:31:21.676 [INFO] [Thread-81761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:31:21.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:31:22.441 [DEBUG] [Thread-81761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:31:22.441 [DEBUG] [Thread-81761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:31:22.441 [DEBUG] [Thread-81761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:31:22.483 [DEBUG] [Thread-81761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:31:22.483 [DEBUG] [Thread-81761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:31:22.486 [DEBUG] [Thread-81761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:31:22.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:31:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:31:22.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:31:22.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:31:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:31:22.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:31:22.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:31:22.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:31:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:31:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.062941 -999.00   +6.20  31.67     91   +5.00 1 2 2 3 1     0    0 0.92 -10.33 ZNESw 29.2 31.7 298.4 40.5 7.3 -21.3 7.1 -21.2 6.7 -18.8 7.2 -19.4
2025-12-13T03:31:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:31:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:31:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.062941
2025-12-13T03:31:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:31:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:31:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:31:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:31:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:31:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:31:16', tmtdew=1.53, humidity=89.74, cloud=0.0, wind=27.1, temperature=6.38, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:30:38.102', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:29:00')
2025-12-13T03:31:22.510 [DEBUG] [Thread-81761] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:31:22.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:31:22.606 [DEBUG] [Thread-81764] [transport.py] [_log()] starting thread (client mode): 0xf81892a0
2025-12-13T03:31:22.606 [DEBUG] [Thread-81764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:31:22.620 [DEBUG] [Thread-81764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:31:22.621 [INFO] [Thread-81764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:31:22.628 [DEBUG] [Thread-81764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:31:22.628 [DEBUG] [Thread-81764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:31:22.628 [DEBUG] [Thread-81764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] client lang: <none>
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] server lang: <none>
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] kex follows: False
2025-12-13T03:31:22.629 [DEBUG] [Thread-81764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:31:22.630 [DEBUG] [Thread-81764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:31:22.630 [DEBUG] [Thread-81764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:31:22.630 [DEBUG] [Thread-81764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:31:22.630 [DEBUG] [Thread-81764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:31:22.630 [DEBUG] [Thread-81764] [transport.py] [_log()] Compression: none
2025-12-13T03:31:22.630 [DEBUG] [Thread-81764] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:31:22.685 [DEBUG] [Thread-81764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:31:22.686 [DEBUG] [Thread-81764] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:31:22.687 [DEBUG] [Thread-81764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:31:22.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:31:22.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:31:22.742 [DEBUG] [Thread-81764] [transport.py] [_log()] userauth is OK
2025-12-13T03:31:22.742 [DEBUG] [Thread-81764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:31:22.742 [DEBUG] [Thread-81764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:31:22.742 [DEBUG] [Thread-81764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:31:22.743 [DEBUG] [Thread-81764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:31:22.765 [INFO] [Thread-81764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:31:22.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:31:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:31:23.583 [DEBUG] [Thread-81764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:31:23.583 [DEBUG] [Thread-81764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:31:23.631 [DEBUG] [Thread-81764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:31:23.631 [DEBUG] [Thread-81764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:31:23.639 [DEBUG] [Thread-81764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:31:23.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:31:23.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:31:23.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:31:23.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:31:23.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:31:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:31:23.671 [DEBUG] [Thread-81764] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:31:29.879 [DEBUG] [Thread-81766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:39.290 [DEBUG] [Thread-81767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:39.830 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:39.831 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:44.930 [DEBUG] [Thread-81768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:31:53.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:31:53.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:31:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:31:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 31, 48), 1.55, 89.66, 0.0, 29.94, 6.4, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:31:54.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:31:48
2025-12-13T03:31:54.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:31:54.637 [DEBUG] [Thread-81769] [transport.py] [_log()] starting thread (client mode): 0xf575e0b0
2025-12-13T03:31:54.638 [DEBUG] [Thread-81769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:31:54.658 [DEBUG] [Thread-81769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:31:54.658 [INFO] [Thread-81769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] client lang: <none>
2025-12-13T03:31:54.662 [DEBUG] [Thread-81769] [transport.py] [_log()] server lang: <none>
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] kex follows: False
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] Compression: none
2025-12-13T03:31:54.663 [DEBUG] [Thread-81769] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:31:54.682 [DEBUG] [Thread-81769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:31:54.682 [DEBUG] [Thread-81769] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:31:54.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:31:54.683 [DEBUG] [Thread-81769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:31:54.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:31:54.686 [DEBUG] [Thread-81769] [transport.py] [_log()] userauth is OK
2025-12-13T03:31:54.686 [DEBUG] [Thread-81769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:31:54.686 [DEBUG] [Thread-81769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:31:54.686 [DEBUG] [Thread-81769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:31:54.686 [DEBUG] [Thread-81769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:31:54.721 [INFO] [Thread-81769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:31:54.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:31:55.323 [DEBUG] [Thread-81769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:31:55.323 [DEBUG] [Thread-81769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:31:55.324 [DEBUG] [Thread-81769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:31:55.364 [DEBUG] [Thread-81769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:31:55.364 [DEBUG] [Thread-81769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:31:55.368 [DEBUG] [Thread-81769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:31:55.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:31:55.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:31:55.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:31:55.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:31:55.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:31:55.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:31:55.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:31:55.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:31:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:31:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.063288 -999.00   +6.20  30.59     92   +5.00 1 2 2 3 1     0    0 0.93 -9.61 ZneSW 33.4 30.6 300.6 34.8 7.2 -20.7 7.1 -21.0 6.7 -19.9 7.1 -18.7
2025-12-13T03:31:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:31:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:31:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.063288
2025-12-13T03:31:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:31:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:31:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:31:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:31:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:31:55.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:31:48', tmtdew=1.55, humidity=89.66, cloud=0.0, wind=29.94, temperature=6.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:31:08.083', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:29:00')
2025-12-13T03:31:55.391 [DEBUG] [Thread-81769] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:31:55.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:31:55.491 [DEBUG] [Thread-81772] [transport.py] [_log()] starting thread (client mode): 0xf575fd90
2025-12-13T03:31:55.492 [DEBUG] [Thread-81772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:31:55.506 [DEBUG] [Thread-81772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:31:55.506 [INFO] [Thread-81772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:55.514 [DEBUG] [Thread-81772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] client lang: <none>
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] server lang: <none>
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] kex follows: False
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:31:55.515 [DEBUG] [Thread-81772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:31:55.516 [DEBUG] [Thread-81772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:31:55.516 [DEBUG] [Thread-81772] [transport.py] [_log()] Compression: none
2025-12-13T03:31:55.516 [DEBUG] [Thread-81772] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:31:55.575 [DEBUG] [Thread-81772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:31:55.576 [DEBUG] [Thread-81772] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:31:55.576 [DEBUG] [Thread-81772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:31:55.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:31:55.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:31:55.631 [DEBUG] [Thread-81772] [transport.py] [_log()] userauth is OK
2025-12-13T03:31:55.631 [DEBUG] [Thread-81772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:31:55.632 [DEBUG] [Thread-81772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:31:55.632 [DEBUG] [Thread-81772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:31:55.632 [DEBUG] [Thread-81772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:31:55.653 [INFO] [Thread-81772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:31:55.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:31:55.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:31:56.449 [DEBUG] [Thread-81772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:31:56.449 [DEBUG] [Thread-81772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:31:56.497 [DEBUG] [Thread-81772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:31:56.497 [DEBUG] [Thread-81772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:31:56.505 [DEBUG] [Thread-81772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:31:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:31:56.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:31:56.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:31:56.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:31:56.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:31:56.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:31:56.539 [DEBUG] [Thread-81772] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:31:59.958 [DEBUG] [Thread-81774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:15.003 [DEBUG] [Thread-81775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:26.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:32:26.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:32:26.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:32:27.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 32, 20), 1.55, 89.64, 0.0, 30.77, 6.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:32:27.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:32:20
2025-12-13T03:32:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:32:27.541 [DEBUG] [Thread-81776] [transport.py] [_log()] starting thread (client mode): 0xf57ab040
2025-12-13T03:32:27.541 [DEBUG] [Thread-81776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:32:27.562 [DEBUG] [Thread-81776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:32:27.562 [INFO] [Thread-81776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:32:27.565 [DEBUG] [Thread-81776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] client lang: <none>
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] server lang: <none>
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] kex follows: False
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] Compression: none
2025-12-13T03:32:27.566 [DEBUG] [Thread-81776] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:32:27.584 [DEBUG] [Thread-81776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:32:27.585 [DEBUG] [Thread-81776] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:32:27.586 [DEBUG] [Thread-81776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:32:27.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:32:27.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:32:27.588 [DEBUG] [Thread-81776] [transport.py] [_log()] userauth is OK
2025-12-13T03:32:27.588 [DEBUG] [Thread-81776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:32:27.588 [DEBUG] [Thread-81776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:32:27.588 [DEBUG] [Thread-81776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:32:27.588 [DEBUG] [Thread-81776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:32:27.612 [INFO] [Thread-81776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:32:27.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:32:28.415 [DEBUG] [Thread-81776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:32:28.415 [DEBUG] [Thread-81776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:32:28.416 [DEBUG] [Thread-81776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:32:28.457 [DEBUG] [Thread-81776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:32:28.457 [DEBUG] [Thread-81776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:32:28.460 [DEBUG] [Thread-81776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:32:28.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:32:28.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:32:28.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:32:28.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:32:28.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:32:28.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:32:28.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:32:28.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:32:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:32:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.063635 -999.00   +6.20  28.94     92   +5.00 1 2 1 3 1     0    0 0.96 -8.96 ZneSW 32.2 28.9 300.8 40.4 7.2 -19.4 7.0 -21.4 6.7 -17.1 7.1 -18.6
2025-12-13T03:32:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:32:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:32:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.063635
2025-12-13T03:32:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:32:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:32:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:32:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:32:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:32:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:32:20', tmtdew=1.55, humidity=89.64, cloud=0.0, wind=30.77, temperature=6.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:31:38.064', atlas_cloud=2, atlas_rain=1, zp_data=[0.08675000000000033, 0.15625, 0.1332500000000003, 0.05549999999999855, 0.06850000000000023, 0.14175000000000182, 0.3309999999999995, 0.3862500000000004, 0.22749999999999915, 0.23150000000000048, 0.08474999999999966, 0.12199999999999989, 0.10650000000000048, 0.3302499999999995, 1.3529999999999998, 0.8079999999999989, 0.33924999999999983, 0.39949999999999974, 0.1869999999999994, 0.13124999999999964, 0.14199999999999946, 0.6442499999999987, 1.438250000000001, 0.8382500000000004, 0.6519999999999992, 0.5004999999999997, 0.2867499999999996, 0.1974999999999998, 0.1590000000000007, nan, nan, nan, nan], zp_timestamp='2025-12-13T01:29:00')
2025-12-13T03:32:28.489 [DEBUG] [Thread-81776] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:32:28.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:32:28.585 [DEBUG] [Thread-81779] [transport.py] [_log()] starting thread (client mode): 0xf57aa7d0
2025-12-13T03:32:28.585 [DEBUG] [Thread-81779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:32:28.599 [DEBUG] [Thread-81779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:32:28.600 [INFO] [Thread-81779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:32:28.607 [DEBUG] [Thread-81779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] client lang: <none>
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] server lang: <none>
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] kex follows: False
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] Compression: none
2025-12-13T03:32:28.608 [DEBUG] [Thread-81779] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:32:28.663 [DEBUG] [Thread-81779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:32:28.664 [DEBUG] [Thread-81779] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:32:28.664 [DEBUG] [Thread-81779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:32:28.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:32:28.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:32:28.720 [DEBUG] [Thread-81779] [transport.py] [_log()] userauth is OK
2025-12-13T03:32:28.720 [DEBUG] [Thread-81779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:32:28.720 [DEBUG] [Thread-81779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:32:28.720 [DEBUG] [Thread-81779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:32:28.720 [DEBUG] [Thread-81779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:32:28.739 [INFO] [Thread-81779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:32:28.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:32:28.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:32:29.559 [DEBUG] [Thread-81779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:32:29.559 [DEBUG] [Thread-81779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:32:29.607 [DEBUG] [Thread-81779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:32:29.607 [DEBUG] [Thread-81779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:32:29.616 [DEBUG] [Thread-81779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:32:29.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:32:29.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:32:29.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:32:29.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:32:29.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:32:29.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:32:29.652 [DEBUG] [Thread-81779] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:32:30.031 [DEBUG] [Thread-81781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:39.367 [DEBUG] [Thread-81782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:40.036 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:40.037 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:45.085 [DEBUG] [Thread-81783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:32:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:32:59.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:32:59.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:33:00.110 [DEBUG] [Thread-81784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:33:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 32, 52), 1.55, 89.61, 0.0, 29.71, 6.35, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:33:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:32:52
2025-12-13T03:33:00.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:33:00.649 [DEBUG] [Thread-81785] [transport.py] [_log()] starting thread (client mode): 0xf57a93f0
2025-12-13T03:33:00.649 [DEBUG] [Thread-81785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:33:00.672 [DEBUG] [Thread-81785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:33:00.672 [INFO] [Thread-81785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] client lang: <none>
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] server lang: <none>
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] kex follows: False
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:33:00.675 [DEBUG] [Thread-81785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:33:00.676 [DEBUG] [Thread-81785] [transport.py] [_log()] Compression: none
2025-12-13T03:33:00.676 [DEBUG] [Thread-81785] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:33:00.695 [DEBUG] [Thread-81785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:33:00.696 [DEBUG] [Thread-81785] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:33:00.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:33:00.697 [DEBUG] [Thread-81785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:33:00.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:33:00.700 [DEBUG] [Thread-81785] [transport.py] [_log()] userauth is OK
2025-12-13T03:33:00.700 [DEBUG] [Thread-81785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:33:00.700 [DEBUG] [Thread-81785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:33:00.700 [DEBUG] [Thread-81785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:33:00.700 [DEBUG] [Thread-81785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:33:00.723 [INFO] [Thread-81785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:33:00.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:33:01.381 [DEBUG] [Thread-81785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:33:01.381 [DEBUG] [Thread-81785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:33:01.381 [DEBUG] [Thread-81785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:33:01.422 [DEBUG] [Thread-81785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:33:01.422 [DEBUG] [Thread-81785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:33:01.425 [DEBUG] [Thread-81785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:33:01.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:33:01.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:33:01.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:33:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:33:01.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:33:01.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:33:01.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:33:01.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:33:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:33:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.063982 -999.00   +6.20  27.74     92   +5.00 1 1 1 3 1     0    0 0.97 -7.95 ZNESW 24.4 27.7 301.0 36.6 7.2 -16.5 7.0 -19.0 6.8 -17.7 7.1 -14.1
2025-12-13T03:33:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:33:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:33:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.063982
2025-12-13T03:33:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:33:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:33:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:33:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:33:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T03:33:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:32:52', tmtdew=1.55, humidity=89.61, cloud=0.0, wind=29.71, temperature=6.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:32:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[0.07724999999999937, 0.15725000000000122, 0.13225000000000087, 0.09249999999999936, 0.28749999999999964, 0.24725000000000108, 0.15600000000000058, 0.17125000000000057, 0.1504999999999992, 0.1720000000000006, 0.1042500000000004, 0.2024999999999988, 0.5640000000000001, 0.37624999999999886, 0.10549999999999926, 0.15899999999999892, 0.17324999999999946, 0.31649999999999956, 0.1869999999999994, 0.2572499999999991, 0.9769999999999985, 0.47974999999999834, 0.08425000000000082, 0.18374999999999986, 0.23099999999999987, 0.21649999999999991, 0.2087500000000002, 0.30299999999999994, 1.322, 0.2220000000000013, 0.13400000000000034, 0.46300000000000097, 0.1767499999999984], zp_timestamp='2025-12-13T01:31:00')
2025-12-13T03:33:01.456 [DEBUG] [Thread-81785] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:33:01.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:33:01.553 [DEBUG] [Thread-81788] [transport.py] [_log()] starting thread (client mode): 0xf57412d0
2025-12-13T03:33:01.553 [DEBUG] [Thread-81788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:33:01.567 [DEBUG] [Thread-81788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:33:01.568 [INFO] [Thread-81788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:33:01.575 [DEBUG] [Thread-81788] [transport.py] [_log()] client lang: <none>
2025-12-13T03:33:01.576 [DEBUG] [Thread-81788] [transport.py] [_log()] server lang: <none>
2025-12-13T03:33:01.576 [DEBUG] [Thread-81788] [transport.py] [_log()] kex follows: False
2025-12-13T03:33:01.576 [DEBUG] [Thread-81788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:33:01.576 [DEBUG] [Thread-81788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:33:01.576 [DEBUG] [Thread-81788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:33:01.576 [DEBUG] [Thread-81788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:33:01.584 [DEBUG] [Thread-81788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:33:01.584 [DEBUG] [Thread-81788] [transport.py] [_log()] Compression: none
2025-12-13T03:33:01.584 [DEBUG] [Thread-81788] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:33:01.632 [DEBUG] [Thread-81788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:33:01.633 [DEBUG] [Thread-81788] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:33:01.633 [DEBUG] [Thread-81788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:33:01.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:33:01.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:33:01.689 [DEBUG] [Thread-81788] [transport.py] [_log()] userauth is OK
2025-12-13T03:33:01.689 [DEBUG] [Thread-81788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:33:01.689 [DEBUG] [Thread-81788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:33:01.689 [DEBUG] [Thread-81788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:33:01.689 [DEBUG] [Thread-81788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:33:01.708 [INFO] [Thread-81788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:33:01.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:33:01.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:33:02.564 [DEBUG] [Thread-81788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:33:02.564 [DEBUG] [Thread-81788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:33:02.612 [DEBUG] [Thread-81788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:33:02.612 [DEBUG] [Thread-81788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:33:02.620 [DEBUG] [Thread-81788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:33:02.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:33:02.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:33:02.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:33:02.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:33:02.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:33:02.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:33:02.654 [DEBUG] [Thread-81788] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:33:15.134 [DEBUG] [Thread-81790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:33:30.176 [DEBUG] [Thread-81791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:33:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:33:32.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:33:32.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:33:33.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 33, 24), 1.56, 89.59, 0.0, 27.89, 6.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:33:33.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:33:24
2025-12-13T03:33:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:33:33.660 [DEBUG] [Thread-81792] [transport.py] [_log()] starting thread (client mode): 0xf8188040
2025-12-13T03:33:33.660 [DEBUG] [Thread-81792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:33:33.678 [DEBUG] [Thread-81792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:33:33.678 [INFO] [Thread-81792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:33:33.679 [DEBUG] [Thread-81792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:33:33.679 [DEBUG] [Thread-81792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] client lang: <none>
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] server lang: <none>
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] kex follows: False
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] Compression: none
2025-12-13T03:33:33.680 [DEBUG] [Thread-81792] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:33:33.690 [DEBUG] [Thread-81792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:33:33.691 [DEBUG] [Thread-81792] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:33:33.691 [DEBUG] [Thread-81792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:33:33.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:33:33.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:33:33.694 [DEBUG] [Thread-81792] [transport.py] [_log()] userauth is OK
2025-12-13T03:33:33.694 [DEBUG] [Thread-81792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:33:33.694 [DEBUG] [Thread-81792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:33:33.694 [DEBUG] [Thread-81792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:33:33.694 [DEBUG] [Thread-81792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:33:33.714 [INFO] [Thread-81792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:33:33.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:33:34.490 [DEBUG] [Thread-81792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:33:34.491 [DEBUG] [Thread-81792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:33:34.491 [DEBUG] [Thread-81792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:33:34.532 [DEBUG] [Thread-81792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:33:34.532 [DEBUG] [Thread-81792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:33:34.535 [DEBUG] [Thread-81792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:33:34.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:33:34.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:33:34.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:33:34.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:33:34.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:33:34.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:33:34.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:33:34.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:33:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:33:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.064677 -999.00   +6.20  29.53     91   +4.90 1 1 1 3 1     0    0 1.01 -6.59 ZNESW 26.4 29.5 297.4 41.2 7.2 -20.3 6.9 -21.0 6.7 -16.2 7.1 -20.0
2025-12-13T03:33:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:33:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:33:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.064677
2025-12-13T03:33:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:33:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:33:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:33:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:33:34.560 [DEBUG] [Thread-81792] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:33:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-13T03:33:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:33:24', tmtdew=1.56, humidity=89.59, cloud=0.0, wind=27.89, temperature=6.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:33:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[0.07724999999999937, 0.15725000000000122, 0.13225000000000087, 0.09249999999999936, 0.28749999999999964, 0.24725000000000108, 0.15600000000000058, 0.17125000000000057, 0.1504999999999992, 0.1720000000000006, 0.1042500000000004, 0.2024999999999988, 0.5640000000000001, 0.37624999999999886, 0.10549999999999926, 0.15899999999999892, 0.17324999999999946, 0.31649999999999956, 0.1869999999999994, 0.2572499999999991, 0.9769999999999985, 0.47974999999999834, 0.08425000000000082, 0.18374999999999986, 0.23099999999999987, 0.21649999999999991, 0.2087500000000002, 0.30299999999999994, 1.322, 0.2220000000000013, 0.13400000000000034, 0.46300000000000097, 0.1767499999999984], zp_timestamp='2025-12-13T01:31:00')
2025-12-13T03:33:34.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:33:34.659 [DEBUG] [Thread-81795] [transport.py] [_log()] starting thread (client mode): 0xf575f220
2025-12-13T03:33:34.660 [DEBUG] [Thread-81795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:33:34.675 [DEBUG] [Thread-81795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:33:34.675 [INFO] [Thread-81795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:33:34.682 [DEBUG] [Thread-81795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:33:34.682 [DEBUG] [Thread-81795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:33:34.682 [DEBUG] [Thread-81795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:33:34.682 [DEBUG] [Thread-81795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] client lang: <none>
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] server lang: <none>
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] kex follows: False
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] Compression: none
2025-12-13T03:33:34.683 [DEBUG] [Thread-81795] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:33:34.745 [DEBUG] [Thread-81795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:33:34.745 [DEBUG] [Thread-81795] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:33:34.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:33:34.746 [DEBUG] [Thread-81795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:33:34.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:33:34.805 [DEBUG] [Thread-81795] [transport.py] [_log()] userauth is OK
2025-12-13T03:33:34.805 [DEBUG] [Thread-81795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:33:34.805 [DEBUG] [Thread-81795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:33:34.805 [DEBUG] [Thread-81795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:33:34.805 [DEBUG] [Thread-81795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:33:34.828 [INFO] [Thread-81795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:33:34.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:33:34.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:33:35.619 [DEBUG] [Thread-81795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:33:35.619 [DEBUG] [Thread-81795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:33:35.667 [DEBUG] [Thread-81795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:33:35.667 [DEBUG] [Thread-81795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:33:35.676 [DEBUG] [Thread-81795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:33:35.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:33:35.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-13T03:33:35.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:33:35.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:33:35.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:33:35.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:33:35.712 [DEBUG] [Thread-81795] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:33:39.445 [DEBUG] [Thread-81797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:33:40.250 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:33:40.251 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:33:45.205 [DEBUG] [Thread-81798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:00.262 [DEBUG] [Thread-81799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:05.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:34:05.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:34:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:34:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 33, 56), 1.6, 89.62, 0.0, 27.89, 6.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:34:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:33:56
2025-12-13T03:34:06.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:34:06.721 [DEBUG] [Thread-81800] [transport.py] [_log()] starting thread (client mode): 0xf81e4310
2025-12-13T03:34:06.721 [DEBUG] [Thread-81800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:34:06.741 [DEBUG] [Thread-81800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:34:06.741 [INFO] [Thread-81800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:34:06.745 [DEBUG] [Thread-81800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] client lang: <none>
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] server lang: <none>
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] kex follows: False
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:34:06.746 [DEBUG] [Thread-81800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:34:06.747 [DEBUG] [Thread-81800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:34:06.747 [DEBUG] [Thread-81800] [transport.py] [_log()] Compression: none
2025-12-13T03:34:06.747 [DEBUG] [Thread-81800] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:34:06.764 [DEBUG] [Thread-81800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:34:06.765 [DEBUG] [Thread-81800] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:34:06.765 [DEBUG] [Thread-81800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:34:06.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:34:06.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:34:06.768 [DEBUG] [Thread-81800] [transport.py] [_log()] userauth is OK
2025-12-13T03:34:06.768 [DEBUG] [Thread-81800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:34:06.768 [DEBUG] [Thread-81800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:34:06.768 [DEBUG] [Thread-81800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:34:06.769 [DEBUG] [Thread-81800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:34:06.792 [INFO] [Thread-81800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:34:06.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:34:07.400 [DEBUG] [Thread-81800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:34:07.400 [DEBUG] [Thread-81800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:34:07.400 [DEBUG] [Thread-81800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:34:07.442 [DEBUG] [Thread-81800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:34:07.442 [DEBUG] [Thread-81800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:34:07.445 [DEBUG] [Thread-81800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:34:07.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:34:07.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:34:07.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:34:07.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:34:07.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:34:07.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:34:07.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:34:07.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:34:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:34:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.065024 -999.00   +6.20  20.78     91   +5.00 1 2 1 3 1     0    0 1.06 -5.82 Z.ESW 26.4 20.8 305.0 30.2 7.2 -14.3 7.0 -15.7 6.7 -13.7 7.0 -13.6
2025-12-13T03:34:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:34:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:34:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.065024
2025-12-13T03:34:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:34:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:34:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:34:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:34:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:34:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:33:56', tmtdew=1.6, humidity=89.62, cloud=0.0, wind=27.89, temperature=6.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:33:38.074', atlas_cloud=2, atlas_rain=1, zp_data=[0.07724999999999937, 0.15725000000000122, 0.13225000000000087, 0.09249999999999936, 0.28749999999999964, 0.24725000000000108, 0.15600000000000058, 0.17125000000000057, 0.1504999999999992, 0.1720000000000006, 0.1042500000000004, 0.2024999999999988, 0.5640000000000001, 0.37624999999999886, 0.10549999999999926, 0.15899999999999892, 0.17324999999999946, 0.31649999999999956, 0.1869999999999994, 0.2572499999999991, 0.9769999999999985, 0.47974999999999834, 0.08425000000000082, 0.18374999999999986, 0.23099999999999987, 0.21649999999999991, 0.2087500000000002, 0.30299999999999994, 1.322, 0.2220000000000013, 0.13400000000000034, 0.46300000000000097, 0.1767499999999984], zp_timestamp='2025-12-13T01:31:00')
2025-12-13T03:34:07.471 [DEBUG] [Thread-81800] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:34:07.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:34:07.573 [DEBUG] [Thread-81803] [transport.py] [_log()] starting thread (client mode): 0xf818b1f0
2025-12-13T03:34:07.574 [DEBUG] [Thread-81803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:34:07.588 [DEBUG] [Thread-81803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:34:07.589 [INFO] [Thread-81803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:34:07.596 [DEBUG] [Thread-81803] [transport.py] [_log()] client lang: <none>
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] server lang: <none>
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] kex follows: False
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] Compression: none
2025-12-13T03:34:07.597 [DEBUG] [Thread-81803] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:34:07.654 [DEBUG] [Thread-81803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:34:07.654 [DEBUG] [Thread-81803] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:34:07.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:34:07.655 [DEBUG] [Thread-81803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:34:07.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:34:07.710 [DEBUG] [Thread-81803] [transport.py] [_log()] userauth is OK
2025-12-13T03:34:07.710 [DEBUG] [Thread-81803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:34:07.711 [DEBUG] [Thread-81803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:34:07.711 [DEBUG] [Thread-81803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:34:07.711 [DEBUG] [Thread-81803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:34:07.730 [INFO] [Thread-81803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:34:07.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:34:07.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:34:08.584 [DEBUG] [Thread-81803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:34:08.584 [DEBUG] [Thread-81803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:34:08.632 [DEBUG] [Thread-81803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:34:08.632 [DEBUG] [Thread-81803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:34:08.641 [DEBUG] [Thread-81803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:34:08.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:34:08.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')
2025-12-13T03:34:08.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:34:08.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:34:08.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:34:08.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:34:08.676 [DEBUG] [Thread-81803] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:34:15.290 [DEBUG] [Thread-81805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:30.341 [DEBUG] [Thread-81806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:34:38.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:34:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-13T03:34:39.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 34, 28), 1.6, 89.62, 0.0, 28.23, 6.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:34:39.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:34:28
2025-12-13T03:34:39.516 [DEBUG] [Thread-81807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:39.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:34:39.703 [DEBUG] [Thread-81808] [transport.py] [_log()] starting thread (client mode): 0xf81894b0
2025-12-13T03:34:39.703 [DEBUG] [Thread-81808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:34:39.723 [DEBUG] [Thread-81808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:34:39.723 [INFO] [Thread-81808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:34:39.726 [DEBUG] [Thread-81808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] client lang: <none>
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] server lang: <none>
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] kex follows: False
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] Compression: none
2025-12-13T03:34:39.727 [DEBUG] [Thread-81808] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:34:39.741 [DEBUG] [Thread-81808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:34:39.741 [DEBUG] [Thread-81808] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:34:39.742 [DEBUG] [Thread-81808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:34:39.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:34:39.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:34:39.786 [DEBUG] [Thread-81808] [transport.py] [_log()] userauth is OK
2025-12-13T03:34:39.786 [DEBUG] [Thread-81808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:34:39.786 [DEBUG] [Thread-81808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:34:39.786 [DEBUG] [Thread-81808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:34:39.786 [DEBUG] [Thread-81808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:34:39.813 [INFO] [Thread-81808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:34:39.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:34:40.457 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:40.458 [DEBUG] [Thread-17 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:34:40.592 [DEBUG] [Thread-81808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:34:40.592 [DEBUG] [Thread-81808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:34:40.592 [DEBUG] [Thread-81808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:34:40.633 [DEBUG] [Thread-81808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:34:40.633 [DEBUG] [Thread-81808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:34:40.635 [DEBUG] [Thread-81808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:34:40.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:34:40.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:34:40.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:34:40.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:34:40.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:34:40.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:34:40.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.065371 -999.00   +6.20  28.78     91   +5.00 1 2 1 3 1     0    0 1.07 -5.01 Z.ESW 27.2 28.8 300.2 36.8 7.2 -17.0 7.0 -18.8 6.7 -17.2 7.1 -14.6
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.065371
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:34:40.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:34:28', tmtdew=1.6, humidity=89.62, cloud=0.0, wind=28.23, temperature=6.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:34:08.054', atlas_cloud=2, atlas_rain=1, zp_data=[0.07724999999999937, 0.15725000000000122, 0.13225000000000087, 0.09249999999999936, 0.28749999999999964, 0.24725000000000108, 0.15600000000000058, 0.17125000000000057, 0.1504999999999992, 0.1720000000000006, 0.1042500000000004, 0.2024999999999988, 0.5640000000000001, 0.37624999999999886, 0.10549999999999926, 0.15899999999999892, 0.17324999999999946, 0.31649999999999956, 0.1869999999999994, 0.2572499999999991, 0.9769999999999985, 0.47974999999999834, 0.08425000000000082, 0.18374999999999986, 0.23099999999999987, 0.21649999999999991, 0.2087500000000002, 0.30299999999999994, 1.322, 0.2220000000000013, 0.13400000000000034, 0.46300000000000097, 0.1767499999999984], zp_timestamp='2025-12-13T01:31:00')
2025-12-13T03:34:40.655 [DEBUG] [Thread-81808] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:34:40.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:34:40.741 [DEBUG] [Thread-81811] [transport.py] [_log()] starting thread (client mode): 0xf575f5e0
2025-12-13T03:34:40.741 [DEBUG] [Thread-81811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:34:40.756 [DEBUG] [Thread-81811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:34:40.756 [INFO] [Thread-81811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] client lang: <none>
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] server lang: <none>
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] kex follows: False
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] Compression: none
2025-12-13T03:34:40.764 [DEBUG] [Thread-81811] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:34:40.821 [DEBUG] [Thread-81811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:34:40.822 [DEBUG] [Thread-81811] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:34:40.822 [DEBUG] [Thread-81811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:34:40.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:34:40.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:34:40.879 [DEBUG] [Thread-81811] [transport.py] [_log()] userauth is OK
2025-12-13T03:34:40.879 [DEBUG] [Thread-81811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:34:40.879 [DEBUG] [Thread-81811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:34:40.879 [DEBUG] [Thread-81811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:34:40.879 [DEBUG] [Thread-81811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:34:40.895 [INFO] [Thread-81811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:34:40.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:34:40.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:34:41.711 [DEBUG] [Thread-81811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:34:41.711 [DEBUG] [Thread-81811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:34:41.759 [DEBUG] [Thread-81811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:34:41.759 [DEBUG] [Thread-81811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:34:41.768 [DEBUG] [Thread-81811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:34:41.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:34:41.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')
2025-12-13T03:34:41.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-13T03:34:41.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:34:41.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:34:41.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:34:41.799 [DEBUG] [Thread-81811] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:34:45.368 [DEBUG] [Thread-81813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:35:00.411 [DEBUG] [Thread-81814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-13T03:35:11.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-13T03:35:11.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-13T03:35:11.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
2025-12-13T03:35:12.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 13, 3, 34, 28), 1.6, 89.62, 0.0, 28.23, 6.36, 1, 1, 0, 2, 0, 0),)
2025-12-13T03:35:12.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-13 03:34:28
2025-12-13T03:35:12.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-13T03:35:12.800 [DEBUG] [Thread-81815] [transport.py] [_log()] starting thread (client mode): 0xf818b460
2025-12-13T03:35:12.800 [DEBUG] [Thread-81815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:35:12.821 [DEBUG] [Thread-81815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-13T03:35:12.821 [INFO] [Thread-81815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] client lang: <none>
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] server lang: <none>
2025-12-13T03:35:12.824 [DEBUG] [Thread-81815] [transport.py] [_log()] kex follows: False
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] Compression: none
2025-12-13T03:35:12.825 [DEBUG] [Thread-81815] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:35:12.839 [DEBUG] [Thread-81815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:35:12.840 [DEBUG] [Thread-81815] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:35:12.840 [DEBUG] [Thread-81815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-13T03:35:12.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-13T03:35:12.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:35:12.841 [DEBUG] [Thread-81815] [transport.py] [_log()] userauth is OK
2025-12-13T03:35:12.841 [DEBUG] [Thread-81815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:35:12.841 [DEBUG] [Thread-81815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:35:12.841 [DEBUG] [Thread-81815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-13T03:35:12.841 [DEBUG] [Thread-81815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:35:12.850 [INFO] [Thread-81815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:35:12.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:35:13.536 [DEBUG] [Thread-81815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-13T03:35:13.536 [DEBUG] [Thread-81815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-13T03:35:13.537 [DEBUG] [Thread-81815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-13T03:35:13.578 [DEBUG] [Thread-81815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-13T03:35:13.578 [DEBUG] [Thread-81815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-13T03:35:13.581 [DEBUG] [Thread-81815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-13T03:35:13.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-13T03:35:13.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-13T03:35:13.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-13T03:35:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-13T03:35:13.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-13T03:35:13.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-13T03:35:13.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-13T03:35:13.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-13T03:35:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-13T03:35:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61022.065718 -999.00   +6.20  24.17     91   +4.90 1 2 1 3 1     0    0 1.07 -4.60 ZNESw 28.2 24.2 299.3 34.3 7.2 -20.3 7.0 -20.8 6.7 -18.3 7.1 -16.9
2025-12-13T03:35:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-13T03:35:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-13T03:35:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61022.065718
2025-12-13T03:35:13.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-13T03:35:13.602 [DEBUG] [Thread-81815] [transport.py] [_log()] EOF in transport thread
2025-12-13T03:35:13.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-13T03:35:13.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-13T03:35:13.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-13T03:35:13.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-13T03:35:13.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-13T03:34:28', tmtdew=1.6, humidity=89.62, cloud=0.0, wind=28.23, temperature=6.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-12T03:55:03', seeing=1.18, atlas_timestamp='2025-12-13T01:34:38.035', atlas_cloud=2, atlas_rain=1, zp_data=[0.07724999999999937, 0.15725000000000122, 0.13225000000000087, 0.09249999999999936, 0.28749999999999964, 0.24725000000000108, 0.15600000000000058, 0.17125000000000057, 0.1504999999999992, 0.1720000000000006, 0.1042500000000004, 0.2024999999999988, 0.5640000000000001, 0.37624999999999886, 0.10549999999999926, 0.15899999999999892, 0.17324999999999946, 0.31649999999999956, 0.1869999999999994, 0.2572499999999991, 0.9769999999999985, 0.47974999999999834, 0.08425000000000082, 0.18374999999999986, 0.23099999999999987, 0.21649999999999991, 0.2087500000000002, 0.30299999999999994, 1.322, 0.2220000000000013, 0.13400000000000034, 0.46300000000000097, 0.1767499999999984], zp_timestamp='2025-12-13T01:31:00')
2025-12-13T03:35:13.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-13T03:35:13.700 [DEBUG] [Thread-81818] [transport.py] [_log()] starting thread (client mode): 0xf8189ea0
2025-12-13T03:35:13.700 [DEBUG] [Thread-81818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-13T03:35:13.715 [DEBUG] [Thread-81818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-13T03:35:13.715 [INFO] [Thread-81818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-13T03:35:13.722 [DEBUG] [Thread-81818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-13T03:35:13.722 [DEBUG] [Thread-81818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] client lang: <none>
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] server lang: <none>
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] kex follows: False
2025-12-13T03:35:13.723 [DEBUG] [Thread-81818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-13T03:35:13.724 [DEBUG] [Thread-81818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-13T03:35:13.724 [DEBUG] [Thread-81818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-13T03:35:13.724 [DEBUG] [Thread-81818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-13T03:35:13.724 [DEBUG] [Thread-81818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-13T03:35:13.724 [DEBUG] [Thread-81818] [transport.py] [_log()] Compression: none
2025-12-13T03:35:13.724 [DEBUG] [Thread-81818] [transport.py] [_log()] === End of kex handshake ===
2025-12-13T03:35:13.778 [DEBUG] [Thread-81818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-13T03:35:13.778 [DEBUG] [Thread-81818] [transport.py] [_log()] Switch to new keys ...
2025-12-13T03:35:13.779 [DEBUG] [Thread-81818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-13T03:35:13.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-13T03:35:13.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-13T03:35:13.835 [DEBUG] [Thread-81818] [transport.py] [_log()] userauth is OK
2025-12-13T03:35:13.836 [DEBUG] [Thread-81818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-13T03:35:13.836 [DEBUG] [Thread-81818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-13T03:35:13.836 [DEBUG] [Thread-81818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-13T03:35:13.836 [DEBUG] [Thread-81818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-13T03:35:13.859 [INFO] [Thread-81818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-13T03:35:13.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-13T03:35:13.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-13T03:35:14.697 [DEBUG] [Thread-81818] [transport.py] [_log()] Received global re
[file cut: first 33554432 bytes kept]
[document cut: first 32638538 of 33554432 characters kept]
